Migrasi ke Direct3D 11

Bagian ini menyediakan info untuk bermigrasi ke Direct3D 11 dari versi Direct3D yang lebih lama.

Direct3D 9 ke Direct3D 11

API Direct3D 11 dibangun berdasarkan peningkatan infrastructural yang dilakukan di Direct3D 10 dan 10.1. Porting dari Direct3D 9 ke Direct3D 11 mirip dengan berpindah dari Direct3D 9 ke Direct3D 10. Berikut ini adalah tantangan utama dalam upaya ini.

  • Penghapusan semua penggunaan alur fungsi tetap demi shader yang dapat diprogram yang ditulis secara eksklusif dalam HLSL (dikompilasi melalui D3DCompiler alih-alih D3DX9).
  • Manajemen status berdasarkan objek yang tidak dapat diubah daripada tombol status individual.
  • Memperbarui untuk mematuhi persyaratan tautan ketat tata letak input buffer vertex dan tanda tangan shader.
  • Mengaitkan tampilan sumber daya shader dengan semua sumber daya tekstur.
  • Memetakan semua konten gambar ke DXGI_FORMAT, termasuk penghapusan semua format warna 24-bit (8/8/8), dan urutan warna RGB yang ketat untuk sebagian besar skenario.
  • Memecah penggunaan status konstan global menjadi beberapa buffer konstan yang kecil dan lebih efisien yang diperbarui.

Untuk informasi selengkapnya tentang memindahkan dari Direct3D 9 ke Direct3D 10, lihat Direct3D 9 ke Direct3D 10 Pertimbangan.

Direct3D 10 ke Direct3D 11

Mengonversi program yang ditulis untuk menggunakan API Direct3D 10 atau 10.1 adalah proses lurus ke depan karena Direct3D 11 adalah ekstensi dari API yang ada. Hanya dengan satu pengecualian kecil (disebutkan di bawah ini - pemfilteran teks monokrom), semua metode dan fungsionalitas di Direct3D 10/10.1 tersedia di Direct3D 11. Kerangka di bawah ini menjelaskan perbedaan antara kedua API untuk membantu memperbarui kode yang ada. Perbedaan utama di sini meliputi:

  • Operasi penyajian (Gambar, status, dll.) bukan lagi bagian dari antarmuka Perangkat, tetapi bukan bagian dari antarmuka DeviceContext baru bersama dengan peta sumber daya/Unmap dan metode kueri perangkat.
  • Direct3D 11 mencakup semua peningkatan dan perubahan yang dilakukan antara Direct3D 10.0 dan 10.1

Enumerasi dan Definisi

Direct3D 10 Direct3D 11
DXGI_FORMAT DXGI_FORMAT Beberapa format DXGI baru ditentukan.
D3D10_CREATE_DEVICE_SWITCH_TO_REF D3D11_CREATE_DEVICE_SWITCH_TO_REF Fungsionalitas switch-to-ref tidak didukung oleh Direct3D 11.
D3D10_DRIVER_TYPE D3D_DRIVER_TYPE Perhatikan bahwa pengidentifikasi enumerasi di D3D_DRIVER_TYPE ditentukan ulang dari pengidentifikasi di D3D10_DRIVER_TYPE. Oleh karena itu, Anda harus yakin untuk menggunakan pengidentifikasi enumerasi alih-alih angka harfiah.
D3D_DRIVER_TYPE didefinisikan dalam D3Dcommon.h.
D3D10_RESOURCE_MISC_FLAG D3D11_RESOURCE_MISC_FLAG Perhatikan bahwa banyak dari bendera ini didefinisikan ulang, jadi pastikan untuk menggunakan pengidentifikasi enumerasi alih-alih angka harfiah.
D3D10_FILTER D3D11_FILTER Perhatikan bahwa D3D10_FILTER_TEXT_1BIT pemfilteran teks dihapus dari Direct3D 11. Lihat DirectWrite.
D3D10_COUNTER D3D11_COUNTER Perhatikan bahwa penghitung netral vendor dihapus untuk Direct3D 11 karena jarang didukung.
D3D10_x D3D11_x Banyak enumerasi dan definisi sama, memiliki batas yang lebih besar, atau memiliki nilai tambahan.

Struktur

Direct3D 10 Direct3D 11
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRY Menambahkan Aliran.
D3D10_BLEND_DESC D3D11_BLEND_DESC Perhatikan struktur ini berubah secara signifikan dari 10 menjadi 10,1 untuk menyediakan per status campuran target render
D3D10_BUFFER_DESC D3D11_BUFFER_DESC Menambahkan StructureByteStride untuk digunakan dengan sumber daya Compute Shader
D3D10_SHADER_RESOURCE_VIEW_DESC D3D11_SHADER_RESOURCE_VIEW_DESC Perhatikan struktur ini memiliki anggota serikat tambahan yang ditambahkan untuk 10.1
D3D10_DEPTH_STENCIL_VIEW_DESC D3D11_DEPTH_STENCIL_VIEW_DESC Memiliki anggota Bendera baru.
D3D10_QUERY_DATA_PIPELINE_STATISTICS D3D11_QUERY_DATA_PIPELINE_STATISTICS Menambahkan beberapa penghitung tahap shader baru.
D3D10_x D3D11_x Banyak struktur identik antara dua API.

Antarmuka

Direct3D 10 Direct3D 11
ID3D10Device ID3D11Device dan ID3D11DeviceContext
Antarmuka perangkat dibagi menjadi dua bagian ini. Untuk porting cepat, Anda dapat menggunakan ID3D11Device::GetImmediateContext.
Metode "ID3D10Device::GetTextFilterSize" dan "SetTextFilerSize" tidak ada lagi. Lihat DirectWrite.
Create*Shader mengambil parameter opsional tambahan untuk ID3D11ClassLinkage.
*SetShader dan *GetShader mengambil parameter opsional tambahan untuk ID3D11ClassInstance.
CreateGeometryShaderWithStreamOutput mengambil array dan menghitung beberapa stride aliran output.
Batas untuk parameter NumEntries dari CreateGeometryShaderWithStreamOutput telah meningkat menjadi D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT di Direct3D 11.
ID3D10Buffer ID3D11Buffer
ID3D10SwitchToRef Fungsionalitas Switch-to-ref ID3D11SwitchToReftidak didukung di Direct3D 11.
ID3D10Texture1D ID3D11Texture1D
ID3D10Texture2D ID3D11Texture2D
ID3D10Texture3D ID3D11Texture3DMetode Peta dan Unmap dipindahkan ke ID3D11DeviceContext, dan semua metode Peta menggunakan D3D11_MAPPED_SUBRESOURCE alih-alih kekosongan**.
ID3D10Asynchronous ID3D11Asynchronous Begin, End, dan GetData dipindahkan ke ID3D11DeviceContext.
ID3D10x ID3D11x Banyak antarmuka yang identik antara dua API.
Solusi 10/10.1 11 Solusi
API refleksi HLSL Complier (D3D10Compile*, D3DX10Compile*) dan shader D3DCompiler (lihat D3DCompiler.h) Catatan: Untuk aplikasi Windows Store, API D3DCompiler hanya didukung untuk pengembangan, bukan penyebaran.
Efek 10 Efek 11 tersedia sebagai sumber bersama secara online. Catatan: Solusi ini tidak cocok untuk aplikasi Windows Store karena memerlukan API D3DCompiler saat runtime (penyebaran).
Matematika D3DX9/D3DX10 DirectXMath
D3DX10 D3DX11 di DirectX SDK DirectXTex, DirectXTK, dan DirectXMesh warisan menawarkan alternatif untuk banyak teknologi di pustaka D3DX10 dan D3DX11 warisan.
Direct2D dan DirectWrite menawarkan dukungan berkualitas tinggi untuk merender garis dan font bergaya.

Untuk informasi tentang DirectX SDK warisan, lihat Di mana DirectX SDK?.

Direct3D 10.1 ke Direct3D 11

Direct3D 10.1 adalah ekstensi antarmuka Direct3D 10, dan semua fitur Direct3D 10.1 tersedia di Direct3D 11. Sebagian besar porting dari 10.1 hingga 11 sudah ditangani di atas bergerak dari 10 ke 11.

Enumerasi dan Definisi

Direct3D 10.1 Direct3D 11
D3D10_FEATURE_LEVEL1 D3D_FEATURE_LEVEL Identik tetapi didefinisikan dalam D3DCommon.h ditambah penambahan D3D_FEATURE_LEVEL_11_0 untuk perangkat keras kelas 11 bersama dengan D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2, dan D3D_FEATURE_LEVEL_9_3 untuk 10level9
(D3D10_FEATURE_LEVEL_9_1, D3D10_FEATURE_LEVEL_9_2, dan D3D10_FEATURE_LEVEL_9_3 juga ditambahkan selama 10,1 ke d3d10_1.h)

Struktur

Direct3D 10.1 Direct3D 11
D3D10_BLEND_DESC1 D3D11_BLEND_DESC Versi 11 identik dengan 10.1.
D3D10_SHADER_RESOURCE_VIEW_DESC1 D3D11_SHADER_RESOURCE_VIEW_DESC Versi 11 identik dengan 10.1.

Antarmuka

Direct3D 10.1 Direct3D 11
ID3D10Device1 ID3D11Device dan ID3D11DeviceContext
Antarmuka perangkat dibagi menjadi dua bagian ini. Untuk porting cepat, Anda dapat menggunakan ID3D11Device::GetImmediateContext.
Metode " ID3D10Device::GetTextFilterSize" dan "SetTextFilerSize" tidak ada lagi. Lihat DirectWrite.
Create*Shader mengambil parameter opsional tambahan untuk ID3D11ClassLinkage.
*SetShader dan *GetShader mengambil parameter opsional tambahan untuk ID3D11ClassInstance.
CreateGeometryShaderWithStreamOutput mengambil array dan menghitung beberapa stride aliran output.
Batas untuk parameter NumEntries dari CreateGeometryShaderWithStreamOutput telah meningkat menjadi D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT di Direct3D 11.
ID3D10BlendState1 ID3D11BlendState
ID3D10ShaderResourceView1 ID3D11ShaderResourceView

Fitur Baru untuk Direct3D 11

Setelah kode Anda diperbarui untuk menggunakan API Direct3D 11, ada banyak fitur baru yang perlu dipertimbangkan.

  • Penyajian multithread melalui daftar perintah dan beberapa konteks
  • Menerapkan algoritma tingkat lanjut menggunakan Compute Shader (menggunakan profil shader 4.0, 4.1, atau 5.0)
  • Fitur perangkat keras kelas 11 baru:
    • HLSL Shader Model 5.0
    • Linkage Shader Dinamis
    • Tessellation melalui shader Hull dan Domain
    • Format kompresi blok baru: BC6H untuk gambar HDR, BC7 untuk gambar standar keakuratan yang lebih tinggi
  • Menggunakan teknologi 10level9 untuk penyajian pada banyak perangkat Shader Model 2.0 dan Shader Model 3.0 melalui API DIrect3D 11 untuk dukungan perangkat keras video ujung bawah pada Windows Vista dan Windows 7.
  • Memanfaatkan perangkat penyajian perangkat lunak WARP.

Fitur Baru untuk DirectX 11.1

Windows 8 mencakup peningkatan grafis DirectX lebih lanjut untuk dipertimbangkan ketika Anda menerapkan kode grafis DirectX Anda, yang mencakup Direct3D 11.1, DXGI 1.2, Windows Display Driver Model (WDDM) 1.2, perangkat keras tingkat fitur 11.1, konteks perangkat Direct2D, dan peningkatan lainnya.

Dukungan parsial untuk Direct3D 11.1 juga tersedia di Windows 7 melalui Pembaruan Platform untuk Windows 7, yang tersedia melalui Pembaruan Platform untuk Windows 7.

Fitur Baru untuk DirectX 11.2

Windows 8.1 mencakup Direct3D 11.2, DXGI 1.3, dan peningkatan lainnya.

Panduan Pemrograman untuk Direct3D 11

Efek (Direct3D 11)