Penyebaran Direct3D 11 untuk pengembang game

Artikel ini menjelaskan cara menyebarkan komponen Direct3D 11 pada sistem jika perlu.

Gambaran Umum

API Direct3D 11 memperluas API Direct3D 10.1 yang ada dengan dukungan untuk rendering multithreaded dan pembuatan sumber daya, Compute Shader, tessellation perangkat keras, kompresi tekstur BC6H/BC7, dan HLSL Shader Model 5.0 dengan Dynamic Shader Linkage. Selain komponen Direct3D 11, sejumlah komponen grafis tambahan disertakan dalam runtime DirectX 11: Direct3D 11, DXGI 1.1, tingkat fitur 10level9, perangkat penyajian perangkat lunak WARP10, Direct2D, DirectWrite, dan Direct3D 10.1 yang diperbarui dengan dukungan untuk 10level9 dan WARP10. Untuk informasi tentang komponen grafis Windows ini dan lainnya, lihat API Grafis di Windows.

Semua komponen grafis baru ini dibangun ke dalam sistem operasi Windows 7 dan Windows Server 2008 R2. API Direct3D 11 dan komponen terkait juga dapat diinstal pada Windows Vista dengan menggunakan pembaruan sistem dari Windows Update. Pembaruan ini memerlukan Windows Vista dan Paket Layanan 2. Pengguna akhir dengan pembaruan otomatis diaktifkan akan, oleh karena itu, kemungkinan sudah menginstal komponen Direct3D 11, seperti halnya semua pengguna Windows 7.

Sampel D3D11InstallHelper dirancang untuk menyederhanakan deteksi API Direct3D 11, secara otomatis menginstal pembaruan sistem jika berlaku untuk komputer pengguna akhir, dan untuk memberikan pesan yang sesuai kepada pengguna akhir pada prosedur manual jika Paket Layanan yang lebih baru diperlukan.

Catatan

Pengkompilasi HLSL (D3DCompile*.dll) dan pustaka utilitas D3DX untuk Direct3D 11 (D3DX11*.dll) tidak dibangun ke dalam versi sistem operasi Windows apa pun, tetapi dapat disebarkan sebagai bagian dari alat penginstal aplikasi dengan menggunakan teknologi DirectSetup yang ada; untuk informasi selengkapnya tentang menggunakan DirectSetup, lihat Penginstalan DirectX untuk Pengembang Game. "Efek 11" tersedia sebagai pustaka dukungan sumber bersama di Efek untuk Pembaruan Direct3D 11, dan Anda dapat menyertakannya langsung ke dalam aplikasi (seperti pustaka utilitas DXUT). Dengan demikian, ia tidak memiliki persyaratan redistribusi run-time tambahan.

Direct3D 11.3

Windows 10 dikirim dengan API Direct3D 11.3 bawaan. Lihat Fitur Direct3D 11.3 untuk daftar fitur baru di API Direct3D 11.3.

Direct3D 11.2

Windows 8.1 dan Windows Server 2012 R2 dikirim dengan API Direct3D 11.2 bawaan. Lihat Fitur Direct3D 11.2 untuk daftar fitur baru di API Direct3D 11.2.

Direct3D 11.1

Windows 8 dan Windows Server 2012 dikirim dengan API Direct3D 11.1 bawaan. Dukungan parsial untuk API Direct3D 11.1 tersedia di Windows 7 atau Windows Server 2008 R2 dengan Pembaruan Platform untuk Windows 7 terinstal. Untuk informasi selengkapnya tentang Pembaruan Platform untuk Windows 7, lihat Pembaruan Platform untuk Windows 7.

D3D11InstallHelper.dll

D3D11InstallHelper.dll menghosting fungsionalitas inti untuk mendeteksi komponen Direct3D 11, dan melakukan pembaruan sistem melalui layanan Windows Update jika berlaku. DLL tidak menampilkan pesan atau kotak dialog secara langsung.

DLL terdiri dari titik masuk berikut:

CheckDirect3D11Status

Fungsi ini melakukan pemeriksaan yang diperlukan dan mengembalikan status Direct3D 11 pada komputer ini. Fungsi ini tidak memerlukan hak administrator.

  • Status D3D11IH_STATUS_INSTALLED menunjukkan bahwa Direct3D 11 sudah diinstal pada komputer dan siap digunakan.
  • D3D11IH_STATUS_NOT_SUPPORTED menunjukkan bahwa versi Windows ini tidak mendukung Direct3D 11 atau teknologi terkait.
  • Status D3D11IH_STATUS_NEED_LATEST_SP menunjukkan bahwa Windows Vista Service Pack terbaru harus diinstal oleh pengguna.
  • Akhirnya, status D3D11IH_STATUS_REQUIRES_UPDATE menunjukkan bahwa sistem tidak menginstal Direct3D 11, tetapi bahwa pembaruan sistem berlaku untuk versi Windows ini.

DoUpdateForDirect3D11

Fungsi ini menggunakan WINDOWS Update API untuk melakukan pembaruan sistem untuk menginstal Direct3D 11 pada sistem ini, jika berlaku. Perhatikan bahwa fungsi ini memerlukan konektivitas jaringan ke Windows Update agar berhasil, serta hak administratif. Dibutuhkan fungsi panggilan balik kemajuan opsional dan penunjuk konteks pengguna, dan mengembalikan kode hasil akhir setelah selesai.

  • Hasil D3D11IH_RESULT_SUCCESS menunjukkan bahwa pembaruan sistem diterapkan dan siap digunakan, sementara D3D11IH_RESULT_SUCCESS_REBOOT menunjukkan bahwa pembaruan sistem mengharuskan komputer dimulai ulang sebelum selesai. Perhatikan bahwa fungsi ini tidak menjadwalkan mulai ulang sistem.
  • D3D11IH_RESULT_NOT_SUPPORTED menunjukkan bahwa pembaruan sistem tidak berlaku untuk versi Windows ini. Hasil ini tidak boleh terjadi jika fungsi ini hanya dipanggil setelah mendapatkan status D3D11IH_STATUS_REQUIRES_UPDATE dari CheckDirect3D11Status.
  • Hasil D3D11IH_RESULT_UPDATE_NOT_FOUND menunjukkan bahwa paket pembaruan sistem tidak ditemukan pada server Windows Update.
  • Jika pengunduhan atau penginstalan Windows Update gagal, maka D3D11IH_RESULT_UPDATE_DOWNLOAD_FAILED atau D3D11IH_RESULT_UPDATE_INSTALL_FAILED akan dikembalikan sebagai hasilnya.
  • Jika kesalahan konektivitas jaringan dikembalikan dari WINDOWS Update API, maka hasil D3D11IH_RESULT_WU_SERVICE_ERROR dikembalikan, menunjukkan bahwa masalahnya mungkin terputus-putus atau terkait dengan konfigurasi jaringan atau pengaturan firewall. Mencoba fungsi pembaruan lagi mungkin berhasil.

Untuk informasi selengkapnya tentang WINDOWS Update API, lihat WINDOWS Update Agent API.

D3D11Install.exe

Catatan

D3D11Install.exe memerlukan D3D11InstallHelper.dll untuk dijalankan.

D3D11Install.exe adalah alat untuk menggunakan D3D11InstallHelper.dll sebagai alat penginstal mandiri lengkap dengan UI dan pesan pengguna akhir, serta bertindak sebagai contoh untuk penggunaan DLL yang tepat. Proses keluar dengan 0 jika Direct3D 11 sudah diinstal, jika pembaruan sistem berhasil diterapkan tanpa memerlukan mulai ulang sistem, jika penginstalan Paket Layanan diperlukan, atau jika Direct3D 11 tidak didukung oleh komputer ini. 1 dikembalikan jika pembaruan sistem berhasil diterapkan dan memerlukan mulai ulang sistem selesai. 2 dikembalikan untuk kondisi kesalahan lainnya. Perhatikan bahwa file yang dapat dieksekusi ini memerlukan hak administrator untuk dijalankan, dan memiliki manifes yang meminta elevasi saat dijalankan pada Windows Vista atau Windows 7 dengan UAC diaktifkan. D3D11Install.exe dapat digunakan sebagai alat yang berdiri sendiri untuk menyebarkan pembaruan Direct3D 11, atau dapat digunakan langsung oleh penginstal.

Ini mendukung sakelar baris perintah berikut:

/Tenang

Tidak menampilkan pesan, perintah, kotak dialog kemajuan, atau pesan kesalahan.

/Pasif

Tidak menampilkan pesan, perintah, atau pesan kesalahan, tetapi akan menampilkan kotak dialog kemajuan.

/minimal

Hanya menampilkan perintah minimal.

/Y

Menekan permintaan untuk mengonfirmasi penginstalan pembaruan, jika diperlukan dan berlaku, untuk penginstalan standar dan minimal.

/langid desimal

Memaksa kode pengidentifikasi bahasa mana yang akan digunakan saat menampilkan pesan pengguna akhir dan sumber daya kotak dialog. Nilai defaultnya adalah 1024, yang menggunakan pengaturan bahasa default sistem.

/Wu

Memaksa penggunaan Windows Update daripada default sistem, yang mungkin windows Server Update Services (WSUS) berjalan pada server terkelola atau beberapa konfigurasi non-standar lainnya.

Mengintegrasikan ke dalam program penginstalan

Untuk mematuhi Dukungan Penginstalan Mudah, Persyaratan Teknis 3.1 untuk Game untuk Windows, perawatan perlu dilakukan sehingga setiap permintaan pengguna akhir disajikan di awal proses penginstalan, dan untuk memastikan bahwa tidak ada beberapa permintaan elevasi terkait UAC. Ada tiga pilihan dasar untuk mencapai tujuan ini:

  1. Metode paling dasar adalah menjalankan D3D11Install.exe dengan sakelar baris perintah /minimal. Ini harus dilakukan lebih awal di Tanya Jawab Penginstal, dan penginstalan harus menggunakan nilai pengembalian 1 untuk menunjukkan bahwa mulai ulang harus dijadwalkan di akhir penginstalan. Menjalankan program memerlukan hak administratif.
  2. Gunakan D3D11InstallHelper.dll secara langsung untuk mendeteksi kebutuhan pembaruan, menyediakan pesan pengguna akhir yang diperlukan untuk status D3D11IH_STATUS_NEED_LATEST_SP, di mana resolusi memerlukan operasi pengguna manual. Hasil status D3D11IH_STATUS_NOT_SUPPORTED dapat digunakan untuk mengontrol penginstalan aset terkait Direct3D 11, atau sebagai kondisi kesalahan untuk aplikasi Direct3D 11-saja, tetapi sebaliknya tidak selalu merupakan pesan pengguna akhir yang berguna. Untuk status D3D11IH_STATUS_REQUIRES_UPDATE, alat penginstal dapat langsung menggunakan titik masuk DLL DoUpdateForDirect3D11 untuk melakukan pembaruan dan menangani berbagai pesan pengguna akhir yang dihasilkan. Contoh pesan standar dapat ditemukan dengan memeriksa kotak dialog D3D11Install.exe dan sumber daya tabel string. Titik entri pembaruan memerlukan hak administrator.
  3. Pendekatan hibrid adalah memeriksa status dengan D3D11InstallHelper.dll, dan dalam kasus kode status D3D11IH_STATUS_NEED_LATEST_SP atau D3D11IH_STATUS_REQUIRES_UPDATE, D3D11Install.exe dapat dijalankan dengan sakelar /minimal dan /y untuk menampilkan kotak dialog atau untuk melakukan pembaruan, sesuai kebutuhan. Langkah-langkah ini harus dilakukan di awal proses penginstalan, biasanya segera setelah Tanya Jawab, dan menjalankan yang dapat dieksekusi memerlukan hak administratif.

Mengintegrasikan ke dalam InstallShield

Menangani penyebaran Direct3D 11 dari InstallScript InstallShield mudah dilakukan menggunakan sampel D3D11InstallHelper. Langkah-langkah yang diperlukan untuk berintegrasi dengan InstallShield menggunakan InstallScript adalah sebagai berikut (menggunakan metode 3, dijelaskan di bagian sebelumnya):

  1. Buka proyek InstallScript di editor InstallShield.

  2. Tambahkan D3D11InstallHelper.dll dan D3D11Install.exe ke proyek di File Dukungan.

    Untuk menambahkan file ke Proyek InstallShield

    1. Pada tab Perancang Penginstalan, klik File Dukungan/Billboard di bawah Perilaku dan Logika di panel navigasi di sebelah kiri.
    2. Klik Bahasa Independen, lalu klik kanan di jendela File dan pilih Sisipkan File. Telusuri untuk menambahkan D3D11InstallHelper.dll dan D3D11Install.exe. Lokasi default untuk file-file ini adalah: SDK root\Samples\C++\Misc\Bin\x86
  3. Di penjelajah InstallScript, klik file InstallScript (biasanya Setup.rul) yang akan memanggil DLL atau executable, yang terletak di bawah Perilaku dan Logika di panel navigasi di sebelah kiri.

  4. Tempelkan InstallScript berikut ke dalam file di dekat bagian atas:

#define D3D11IH_STATUS_INSTALLED 0 #define D3D11IH_STATUS_NOT_SUPPORTED 1 #define D3D11IH_STATUS_REQUIRES_UPDATE 2 #define D3D11IH_STATUS_NEED_LATEST_SP 3 #define D3D11IH_STATUS_ERROR -1 nomor prototipe D3D11InstallHelper.CheckDirect3D11StatusIS();

#define D3D11IH_RESULT_SUCCESS 0 #define D3D11IH_RESULT_SUCCESS_REBOOT 1 #define D3D11IH_RESULT_NOT_SUPPORTED 2 #define D3D11IH_RESULT_UPDATE_NOT_FOUND 3 #define D3D11IH_RESULT_UPDATE_DOWNLOAD_FAILED 4 #define D3D11IH_RESULT_UPDATE_INSTALL_FAILED 5 #define D3D11IH_RESULT_WU_SERVICE_ERROR 6 #define D3D11IH_RESULT_ERROR -1 prototipe NUMBER D3D11InstallHelper.DoUpdateForDirect3D11IS(BOOL); '''

  1. Tempelkan InstallScript berikut ke dalam file dalam fungsi OnFirstUIBefore , tepat sebelum pengembalian 0:

    Dlg_D3D11:
        UseDLL( SUPPORTDIR ^ "D3D11InstallHelper.DLL" );
        nResult = D3D11InstallHelper.CheckDirect3D11StatusIS();   
        UnUseDLL( SUPPORTDIR ^ "D3D11InstallHelper.DLL" );
    
        if ( nResult = D3D11IH_STATUS_REQUIRES_UPDATE
             || nResult = D3D11IH_STATUS_NEED_LATEST_SP) then
            nResult = LaunchAppAndWait(
    SUPPORTDIR^"D3D11Install.exe",
    "/minimal /y", WAIT);
            if ( nResult < 0 ) then
                MessageBox("Unable to launch D3D11Install.exe",
     SEVERE);
            elseif ( nResult == 1 ) then
                BATCH_INSTALL = 1;
            endif;          
        endif;
    

Mengintegrasikan ke dalam paket MSI

Berikut ini adalah deskripsi tingkat tinggi tentang langkah-langkah yang diperlukan untuk mengintegrasikan penyebaran Direct3D 11 menggunakan tindakan kustom MSI (menggunakan metode 3, yang dijelaskan sebelumnya dalam topik ini):

  1. Tambahkan properti ke tabel Properti MSI yang disebut RelativePathToD3D11IH yang berisi jalur relatif ke D3D11Install.exe dan D3D11InstallHelper.dll selama penginstalan (biasanya dalam gambar media). Ini juga mengatur properti MSI D3D11IH_STATUS ke status yang dikembalikan oleh CheckDirect3D11Status (properti string sama dengan simbol enumerasi atau "ERROR").
  2. Setelah tindakan CostFinalize, panggil fungsi D3D11InstallHelper.dll SetD3D11InstallMSIProperties sebagai tindakan kustom langsung untuk mengatur properti MSI yang sesuai untuk tindakan kustom lainnya.
  3. Setelah penginstalan, picu tindakan kustom yang ditangguhkan setelah tindakan InstallFiles yang memanggil fungsi D3D11InstallHelper.dll DoD3D11InstallUsingMSI. Tindakan kustom harus mengatur bendera msidbCustomActionTypeNoImpersonate untuk dijalankan dalam konteks yang ditinggikan.
  4. Setelah tindakan InstallFinalize, panggil fungsi D3D11InstallHelper.dll FinishD3D11InstallUsingMSI sebagai tindakan kustom langsung untuk menangani kode hasil permintaan reboot yang berhasil, jika diperlukan.

Prosedur ini dijelaskan secara rinci dalam instruksi berikut, yang menjelaskan proses yang dapat dilakukan menggunakan editor MSI, seperti editor Orca. Beberapa editor MSI memiliki wizard yang menyederhanakan beberapa langkah konfigurasi ini.

Untuk mengonfigurasi paket MSI untuk integrasi dengan D3D11InstallHelper.dll

  1. Buka paket MSI di Orca.

  2. Tambahkan baris yang diperlihatkan dalam tabel berikut ke tabel Biner dalam paket MSI.

    Nama Data
    D3D11IH Jalur file ke DLL\D3D11InstallHelper.dll

     

    Catatan

    File ini akan disematkan dalam paket MSI, jadi Anda harus melakukan langkah ini setiap kali Anda mengkompilasi ulang D3D11InstallHelper.dll.

     

  3. Tambahkan baris yang diperlihatkan dalam tabel berikut ke tabel CustomAction dalam paket MSI.

    Perbuatan Jenis Sumber Target
    Direct3D11SetProps msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH SetD3D11InstallMSIProperties
    Direct3D11DoInstall msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 D3D11IH DoD3D11InstallUsingMSI
    Direct3D11Finish msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 D3D11IH FinishD3D11InstallUsingMSI

     

  4. Tambahkan nilai yang ditampilkan untuk Tindakan, Kondisi, dan Urutan dalam tabel berikut ke tabel InstallExecuteSequence dalam paket MSI.

    Perbuatan Kondisi Sequence Catatan
    Direct3D11SetProps 1016 Nomor urut menempatkan tindakan segera setelah CostFinalize.
    Direct3D11DoInstall TIDAK Terinstal 4004 Tindakan kustom ini hanya akan terjadi selama penginstalan baru untuk semua pengguna. Nomor urutan menempatkan tindakan setelah InstallFiles dan setelah pemutaran kembali.
    Direct3D11Finish 6615 Nomor urutan menempatkan tindakan segera setelah InstallFinalize.

     

  5. Tambahkan baris yang diperlihatkan dalam tabel berikut ke tabel Properti dalam paket MSI.

    Properti Nilai
    RelativePathToD3D11IH jalur file relatif yang berisi D3D11Install.exe dan D3D11InstallHelper.dll

     

    Catatan

    Lokasi yang ditentukan oleh jalur relatif terhadap lokasi yang ditentukan oleh jalur penginstalan—misalnya, "redist\".

     

  6. Simpan paket MSI. Untuk informasi selengkapnya tentang paket MSI dan Penginstal Windows, lihat Penginstal Windows.

Tips men-debug

D3D11InstallHelper.dll dan D3D11Install.exe dapat dibangun dengan konfigurasi Debug di Visual Studio, dan versi ini akan mencetak pesan ke mekanisme output debug Windows standar.

Pengaturan perusahaan

Sampel D3D11InstallHelper dirancang untuk penyebaran standar melalui Windows Update, yang merupakan skenario paling umum untuk penginstalan game oleh konsumen. Namun, Banyak pengembang game, yang bekerja untuk penerbit dan di studio pengembangan, melakukannya dalam pengaturan perusahaan yang memiliki server yang dikelola secara lokal yang menyediakan pembaruan perangkat lunak dengan menggunakan teknologi Windows Server Update Services (WSUS). Dalam jenis lingkungan ini, administrator TI lokal memiliki kontrol persetujuan di mana pembaruan tersedia untuk komputer dalam jaringan perusahaan, dan versi konsumen standar pembaruan KB 971644 tidak tersedia.

Ada tiga solusi dasar untuk menyebarkan DirectX 11 dalam pengaturan perusahaan/perusahaan:

  • Dalam beberapa konfigurasi, dimungkinkan untuk langsung memeriksa Windows Update daripada menggunakan server WSUS yang dikelola secara lokal. Untuk alasan ini, D3D11InstallHelper mendukung sakelar baris perintah /wu . Namun, tidak semua jaringan perusahaan mengizinkan koneksi ke server Microsoft publik.
  • Administrator TI lokal dapat menyetujui KB 971512, pembaruan yang didukung perusahaan yang disebarkan dari WSUS, yang mencakup API Direct3D 11. Ini adalah satu-satunya opsi bagi Pengguna Standar untuk mendapatkan pembaruan Direct3D 11 di lingkungan yang sepenuhnya dikunci.
  • Atau, KB 971512 dapat diinstal secara manual.

Sangat jarang komputer gamer hanya bisa mendapatkan pembaruan dari server WSUS yang dikelola secara lokal, dan hanya pengembang di organisasi besar yang kemungkinan berada di lingkungan seperti itu.

Firewall Windows untuk Pengembang Game

Windows Games Explorer untuk Pengembang Game