Fitur Direct3D 11.1

Fungsionalitas berikut telah ditambahkan di Direct3D 11.1, yang disertakan dengan Windows 8, Windows RT, dan Windows Server 2012. Dukungan parsial untuk Direct3D 11.1 tersedia di Windows 7 dan Windows Server 2008 R2 melalui Pembaruan Platform untuk Windows 7, yang tersedia melalui Pembaruan Platform untuk Windows 7.

Pelacakan shader dan penyempurnaan pengkompilasi

Direct3D 11.1 memungkinkan Anda menggunakan pelacakan shader untuk memastikan bahwa kode Anda berfungsi seperti yang dimaksudkan dan jika tidak, Anda dapat menemukan dan memperbaiki masalah. Kit Pengembangan Perangkat Lunak (SDK) Windows untuk Windows 8 berisi peningkatan pengkompilasi HLSL. Pelacakan shader dan kompilator HLSL diimplementasikan dalam D3dcompiler_nn.dll.

SHADER tracing API dan penyempurnaan pada pengkompilasi HLSL terdiri dari metode dan fungsi berikut.

Pustaka D3dcompiler.lib memerlukan D3dcompiler_nn.dll. DLL ini bukan bagian dari Windows 8; ada di folder \bin Windows SDK untuk Windows 8 bersama dengan versi baris perintah Fxc.exe dari pengkompilasi HLSL.

Catatan

Meskipun Anda dapat menggunakan kombinasi pustaka dan DLL ini untuk pengembangan, Anda tidak dapat menyebarkan aplikasi Bursa Windows yang menggunakan kombinasi ini. Oleh karena itu, Anda harus mengkompilasi shader HLSL sebelum mengirim aplikasi Windows Store Anda. Anda dapat menulis biner kompilasi HLSL ke disk, atau pengkompilasi dapat menghasilkan header dengan array byte statis yang berisi data blob shader. Anda menggunakan antarmuka ID3DBlob untuk mengakses data blob. Untuk mengembangkan aplikasi Windows Store Anda, panggil D3DCompile2 atau D3DCompileFromFile untuk mengompilasi sumber HLSL mentah, lalu umpan data blob yang dihasilkan ke Direct3D.

 

Berbagi perangkat Direct3D

Direct3D 11.1 memungkinkan API Direct3D 10 dan API Direct3D 11 menggunakan satu perangkat penyajian yang mendasar.

Fitur Direct3D 11.1 ini terdiri dari metode dan antarmuka berikut.

Periksa dukungan fitur dan format Direct3D 11.1 baru

Direct3D 11.1 memungkinkan Anda memeriksa fitur baru yang mungkin didukung driver grafis dan cara baru agar format didukung pada perangkat. Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 juga menentukan nilai DXGI_FORMAT baru.

Fitur Direct3D 11.1 ini terdiri dari API berikut.

Gunakan presisi minimum HLSL

Dimulai dengan Windows 8, driver grafis dapat menerapkan jenis data skalar HLSL presisi minimum dengan menggunakan presisi apa pun yang lebih besar dari atau sama dengan presisi bit yang ditentukan. Ketika kode shader presisi minimum HLSL Anda digunakan pada perangkat keras yang mengimplementasikan presisi minimum HLSL, Anda menggunakan lebih sedikit bandwidth memori dan akibatnya Anda juga menggunakan lebih sedikit daya sistem.

Anda dapat meminta dukungan presisi minimum yang disediakan driver grafis dengan memanggil ID3D11Device::CheckFeatureSupport dengan nilai D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT . Dalam panggilan ID3D11Device::CheckFeatureSupport ini, berikan penunjuk ke struktur D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT yang diisi ID3D11Device::CheckFeatureSupport dengan tingkat presisi minimum yang didukung driver untuk tahap shader piksel dan untuk tahap shader lainnya. Info yang dikembalikan hanya menunjukkan bahwa perangkat keras grafis dapat melakukan operasi HLSL dengan presisi yang lebih rendah daripada presisi float 32-bit standar, tetapi tidak menjamin bahwa perangkat keras grafis akan benar-benar berjalan pada presisi yang lebih rendah.

Anda tidak perlu menulis beberapa shader yang melakukan dan tidak menggunakan presisi minimum. Sebagai gantinya, buat shader dengan presisi minimum, dan variabel presisi minimum bereaksi pada presisi 32-bit penuh jika driver grafis melaporkan bahwa itu tidak mendukung presisi minimum. Untuk informasi selengkapnya tentang presisi minimum HLSL, lihat Menggunakan presisi minimum HLSL.

Shader presisi minimum HLSL tidak berfungsi pada sistem operasi yang lebih lama dari Windows 8.

Tentukan bidang klip pengguna di HLSL pada tingkat fitur 9 dan yang lebih tinggi

Dimulai dengan Windows 8, Anda dapat menggunakan atribut fungsi clipplanes dalam deklarasi fungsi HLSL daripada SV_ClipDistance untuk membuat shader Anda berfungsi pada tingkat fitur 9_x serta tingkat fitur 10 dan yang lebih tinggi. Untuk informasi selengkapnya, lihat Bidang klip pengguna pada perangkat keras tingkat fitur 9.

Membuat buffer konstanta yang lebih besar daripada yang dapat diakses oleh shader

Direct3D 11.1 memungkinkan Anda membuat buffer konstan yang lebih besar dari ukuran buffer konstan maksimum yang dapat diakses oleh shader (4096 32-bit*4-component constants – 64KB). Kemudian, ketika Anda mengikat buffer ke alur, misalnya, melalui PSSetConstantBuffers atau PSSetConstantBuffers1, Anda dapat menentukan rentang buffer yang dapat diakses shader yang sesuai dengan batas 4096.

Direct3D 11.1 memperbarui metode ID3D11Device::CreateBuffer untuk fitur ini.

Menggunakan operasi logis dalam target render

Direct3D 11.1 memungkinkan Anda menggunakan operasi logis daripada memadukan target render. Namun, Anda tidak dapat mencampur operasi logika dengan pencampuran di beberapa target render.

Fitur Direct3D 11.1 ini terdiri dari API berikut.

Paksa jumlah sampel untuk membuat status rasterizer

Direct3D 11.1 memungkinkan Anda menentukan jumlah sampel paksa saat Anda membuat status rasterizer.

Fitur Direct3D 11.1 ini terdiri dari API berikut.

Catatan

Jika Anda ingin merender dengan jumlah sampel yang dipaksa ke 1 atau lebih besar, Anda harus mengikuti panduan berikut:

  • Jangan mengikat tampilan stensil kedalaman.
  • Nonaktifkan pengujian kedalaman.
  • Pastikan shader tidak menghasilkan kedalaman output.
  • Jika Anda memiliki batas tampilan target render (D3D11_BIND_RENDER_TARGET) dan Anda memaksa jumlah sampel lebih besar dari 1, pastikan bahwa setiap target render hanya memiliki satu sampel.
  • Jangan mengoperasikan shader pada frekuensi sampel. Oleh karena itu, ID3D11ShaderReflection::IsSampleFrequencyShader mengembalikan FALSE.

Jika tidak, perilaku penyajian tidak ditentukan. Untuk informasi tentang cara mengonfigurasi stensil kedalaman, lihat Mengonfigurasi fungsionalitas Depth-Stencil.

 

Memproses sumber daya video dengan shader

Direct3D 11.1 memungkinkan Anda membuat tampilan (SRV/RTV/UAV) ke sumber daya video sehingga shader Direct3D dapat memproses sumber daya video tersebut. Format sumber daya video yang mendasar membatasi format yang dapat digunakan tampilan. Enumerasi DXGI_FORMAT berisi nilai format sumber daya video baru. Nilai DXGI_FORMAT ini menentukan format tampilan valid yang bisa Anda buat dan bagaimana runtime Direct3D 11.1 memetakan tampilan. Anda dapat membuat beberapa tampilan dari berbagai bagian dari permukaan yang sama, dan tergantung pada formatnya, ukuran tampilan dapat berbeda satu sama lain.

Direct3D 11.1 memperbarui metode berikut untuk fitur ini.

Dukungan yang diperluas untuk sumber daya Texture2D bersama

Direct3D 11.1 menjamin bahwa Anda dapat berbagi sumber daya Texture2D yang Anda buat dengan jenis dan format sumber daya tertentu. Untuk berbagi sumber daya Texture2D, gunakan bendera D3D11_RESOURCE_MISC_SHARED, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX, atau kombinasi D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX dan D3D11_RESOURCE_MISC_SHARED_NTHANDLE (baru untuk Windows 8) saat Anda membuat sumber daya tersebut.

Direct3D 11.1 menjamin bahwa Anda dapat berbagi sumber daya Texture2D yang Anda buat dengan nilai DXGI_FORMAT ini:

  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT

Selain itu, Direct3D 11.1 menjamin bahwa Anda dapat berbagi sumber daya Texture2D yang Anda buat dengan tingkat mipmap 1, ukuran array 1, bendera ikatan D3D11_BIND_SHADER_RESOURCE dan D3D11_BIND_RENDER_TARGET gabungan, default penggunaan (D3D11_USAGE_DEFAULT), dan hanya nilai D3D11_RESOURCE_MISC_FLAG ini:

Direct3D 11.1 memungkinkan Anda berbagi berbagai jenis dan format sumber daya Texture2D yang lebih besar. Anda dapat mengkueri apakah driver grafis dan perangkat keras mendukung berbagi sumber daya Texture2D yang diperluas dengan memanggil ID3D11Device::CheckFeatureSupport dengan nilai D3D11_FEATURE_D3D11_OPTIONS . Dalam panggilan ID3D11Device::CheckFeatureSupport ini, teruskan pointer ke struktur D3D11_FEATURE_DATA_D3D11_OPTIONS . ID3D11Device::CheckFeatureSupport menetapkan anggota ExtendedResourceSharingdari D3D11_FEATURE_DATA_D3D11_OPTIONS ke TRUE jika perangkat keras dan driver mendukung berbagi sumber daya Texture2D yang diperluas.

Jika ID3D11Device::CheckFeatureSupport mengembalikan TRUE di ExtendedResourceSharing, Anda dapat berbagi sumber daya yang Anda buat dengan nilai DXGI_FORMAT ini:

  • DXGI_FORMAT_R32G32B32A32_TYPELESS
  • DXGI_FORMAT_R32G32B32A32_FLOAT
  • DXGI_FORMAT_R32G32B32A32_UINT
  • DXGI_FORMAT_R32G32B32A32_SINT
  • DXGI_FORMAT_R16G16B16A16_TYPELESS
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R16G16B16A16_UINT
  • DXGI_FORMAT_R16G16B16A16_SNORM
  • DXGI_FORMAT_R16G16B16A16_SINT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R10G10B10A2_UINT
  • DXGI_FORMAT_R8G8B8A8_TYPELESS
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_R8G8B8A8_UINT
  • DXGI_FORMAT_R8G8B8A8_SNORM
  • DXGI_FORMAT_R8G8B8A8_SINT
  • DXGI_FORMAT_B8G8R8A8_TYPELESS
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_TYPELESS
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R32_TYPELESS
  • DXGI_FORMAT_R32_FLOAT
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R32_SINT
  • DXGI_FORMAT_R16_TYPELESS
  • DXGI_FORMAT_R16_FLOAT
  • DXGI_FORMAT_R16_UNORM
  • DXGI_FORMAT_R16_UINT
  • DXGI_FORMAT_R16_SNORM
  • DXGI_FORMAT_R16_SINT
  • DXGI_FORMAT_R8_TYPELESS
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8_UINT
  • DXGI_FORMAT_R8_SNORM
  • DXGI_FORMAT_R8_SINT
  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_AYUV
  • DXGI_FORMAT_YUY2
  • DXGI_FORMAT_NV12
  • DXGI_FORMAT_NV11
  • DXGI_FORMAT_P016
  • DXGI_FORMAT_P010
  • DXGI_FORMAT_Y216
  • DXGI_FORMAT_Y210
  • DXGI_FORMAT_Y416
  • DXGI_FORMAT_Y410

Jika ID3D11Device::CheckFeatureSupport mengembalikan TRUE di ExtendedResourceSharing, Anda dapat berbagi sumber daya yang Anda buat dengan fitur dan bendera ini:

Catatan

Saat ExtendedResourceSharingTRUE, Anda memiliki lebih banyak fleksibilitas saat menentukan bendera ikatan untuk berbagi sumber daya Texture2D. Driver grafis dan perangkat keras tidak hanya mendukung lebih banyak bendera yang mengikat tetapi juga lebih mungkin kombinasi bendera ikatan. Misalnya, Anda dapat menentukan hanya D3D11_BIND_RENDER_TARGET atau tanpa bendera ikatan, dan sebagainya.

 

Bahkan jika ID3D11Device::CheckFeatureSupport mengembalikan TRUE di ExtendedResourceSharing, Anda masih tidak dapat berbagi sumber daya yang Anda buat dengan fitur dan bendera ini:

Mengubah sub sumber daya dengan opsi penyalinan baru

Direct3D 11.1 memungkinkan Anda menggunakan bendera salinan baru untuk menyalin dan memperbarui subsumber daya. Saat Anda menyalin subsumber daya, sumber daya sumber dan tujuan dapat identik dan wilayah sumber dan tujuan dapat tumpang tindih.

Fitur Direct3D 11.1 ini terdiri dari API berikut.

Membuang sumber daya dan tampilan sumber daya

Direct3D 11.1 memungkinkan Anda membuang sumber daya dan tampilan sumber daya dari konteks perangkat. Fungsionalitas baru ini menginformasikan GPU bahwa konten yang ada dalam sumber daya atau tampilan sumber daya tidak lagi diperlukan.

Fitur Direct3D 11.1 ini terdiri dari API berikut.

Mendukung jumlah UAV yang lebih besar

Direct3D 11.1 memungkinkan Anda menggunakan sejumlah besar UAV saat mengikat sumber daya ke tahap output-merger dan saat Anda mengatur array tampilan untuk sumber daya yang tidak diurutkan.

Direct3D 11.1 memperbarui metode berikut untuk fitur ini.

Mengikat subrange dari buffer konstanta ke shader

Direct3D 11.1 memungkinkan Anda mengikat subrange buffer konstan untuk diakses oleh shader. Anda dapat menyediakan buffer konstanta yang lebih besar dan menentukan subrange yang dapat digunakan shader.

Fitur Direct3D 11.1 ini terdiri dari API berikut.

Mengambil subrange dari buffer konstanta yang terikat ke shader

Direct3D 11.1 memungkinkan Anda mengambil subrange buffer konstan yang terikat ke shader.

Fitur Direct3D 11.1 ini terdiri dari API berikut.

Menghapus semua atau sebagian tampilan sumber daya

Direct3D 11.1 memungkinkan Anda menghapus tampilan sumber daya (RTV, UAV, atau tampilan video apa pun dari permukaan Texture2D). Anda menerapkan nilai warna yang sama ke semua bagian tampilan.

Fitur Direct3D 11.1 ini terdiri dari API berikut.

Memetakan SRV buffer dinamis dengan NO_OVERWRITE

Direct3D 11.1 memungkinkan Anda memetakan tampilan sumber daya shader (SRV) buffer dinamis dengan D3D11_MAP_WRITE_NO_OVERWRITE. Direct3D 11 dan runtime yang lebih lama membatasi pemetaan ke puncak atau buffer indeks.

Direct3D 11.1 memperbarui metode ID3D11DeviceContext::Map untuk fitur ini.

Menggunakan UAV di setiap tahap alur

Direct3D 11.1 memungkinkan Anda menggunakan instruksi model shader 5.0 berikut di semua tahap shader yang sebelumnya digunakan hanya dalam shader piksel dan shader komputasi.

Direct3D 11.1 memperbarui metode berikut untuk fitur ini.

Instruksi ini ada di Direct3D 11.0 di ps_5_0 dan cs_5_0. Karena Direct3D 11.1 membuat UAV tersedia di semua tahap shader, instruksi ini tersedia di semua tahap shader.

Jika Anda meneruskan shader yang dikompilasi (VS/HS/DS/HS) yang menggunakan salah satu instruksi ini ke fungsi create-shader, seperti CreateVertexShader, pada perangkat yang tidak mendukung UAV di setiap tahap (termasuk driver yang ada yang tidak diimplementasikan dengan fitur ini), fungsi create-shader gagal. Fungsi create-shader juga gagal jika shader mencoba menggunakan slot UAV di luar set slot UAV yang didukung perangkat keras.

UAV yang dirujuk oleh instruksi ini dibagikan di semua tahap alur. Misalnya, UAV yang terikat pada slot 0 pada tahap output-merger tersedia di slot 0 hingga VS/HS/DS/GS/PS.

UAV mengakses yang Anda keluarkan dari dalam atau di seluruh tahap shader yang dijalankan dalam Draw*() tertentu atau bahwa Anda mengeluarkan dari shader komputasi dalam Dispatch*() tidak dijamin selesai dalam urutan anda mengeluarkannya. Tetapi semua akses UAV selesai di akhir Draw*() atau Dispatch*().

Dukungan yang diperluas untuk perangkat WARP

Direct3D 11.1 memperluas dukungan untuk perangkat WARP , yang Anda buat dengan meneruskan D3D_DRIVER_TYPE_WARP dalam parameter DriverTypeD3D11CreateDevice.

Dimulai dengan dukungan perangkat Direct3D 11.1 WARP:

  • Semua tingkat fitur Direct3D dari 9.1 hingga 11.1
  • Menghitung shader dan tessellation
  • Permukaan bersama. Artinya, Anda dapat sepenuhnya berbagi permukaan antara perangkat WARP, serta antara perangkat WARP dalam proses yang berbeda.

Perangkat WARP tidak mendukung fitur opsional ini:

Saat Anda menjalankan komputer virtual (VM), Hyper-V, dengan unit pemrosesan grafis (GPU) Anda dinonaktifkan, atau tanpa driver tampilan, Anda mendapatkan perangkat WARP yang namanya ramah adalah "Microsoft Basic Display Adapter." Perangkat WARP ini dapat menjalankan pengalaman Windows penuh, yang mencakup aplikasi DWM, Internet Explorer, dan Windows Store. Perangkat WARP ini juga mendukung menjalankan aplikasi warisan yang menggunakan DirectDraw atau menjalankan aplikasi yang menggunakan Direct3D 3 melalui Direct3D 11.1.

Menggunakan Direct3D dalam proses Sesi 0

Dimulai dengan Windows 8 dan Windows Server 2012, Anda dapat menggunakan sebagian besar API Direct3D dalam proses Sesi 0.

 

Dukungan untuk buffer bayangan pada tingkat fitur 9

Gunakan subset fitur buffer bayangan Direct3D 10_0+ untuk menerapkan efek bayangan pada tingkat fitur 9_x. Untuk informasi tentang apa yang perlu Anda lakukan untuk menerapkan efek bayangan pada tingkat fitur 9_x, lihat Menerapkan buffer bayangan untuk fitur Direct3D tingkat 9.

Apa yang baru di Direct3D 11