Bagikan melalui


Menggunakan Konstanta Langsung di Tanda Tangan Akar

Aplikasi dapat menentukan konstanta akar dalam tanda tangan akar, masing-masing sebagai sekumpulan nilai 32-bit. Mereka muncul dalam Bahasa Bayangan Tingkat Tinggi (HLSL) sebagai buffer konstanta. Perhatikan bahwa buffer konstan untuk alasan historis dilihat sebagai set nilai 4x32-bit.

Setiap set konstanta pengguna diperlakukan sebagai array skalar dari nilai 32-bit, dapat diindeks secara dinamis dan baca-saja dari shader. Di luar batas mengindeks sekumpulan konstanta akar tertentu menghasilkan hasil yang tidak terdefinisi. Dalam HLSL, definisi struktur data dapat disediakan bagi konstanta pengguna untuk memberi mereka jenis. Misalnya, jika tanda tangan akar mendefinisikan satu set 4 konstanta akar, HLSL dapat melapisi struktur berikut pada mereka.

struct DrawConstants
{
    uint foo;
    float2 bar;
    int moo;
};
ConstantBuffer<DrawConstants> myDrawConstants : register(b1, space0);

Array tidak diizinkan dalam buffer konstanta yang dipetakan ke konstanta akar karena pengindeksan dinamis di ruang tanda tangan akar tidak didukung. Misalnya, tidak valid untuk memiliki entri dalam buffer konstan seperti float myArray[2];. Buffer konstanta yang dipetakan ke konstanta akar tidak bisa menjadi array; oleh karena itu, tidak valid untuk memetakan cbuffer myCBArray[2] ke konstanta akar.

Konstanta dapat diatur sebagian. Misalnya, jika tanda tangan akar menentukan empat nilai 32-bit di RootTableBindSlot 2, maka subset apa pun dari empat konstanta dapat diatur pada satu waktu (yang lain tetap tidak berubah). Ini dapat berguna dalam bundel yang mewarisi status tanda tangan akar dan dapat mengubahnya sebagian.

Saat mengatur konstanta, berhati-hatilah dengan tata letak buffer konstan yang diharapkan oleh shader. Ada kemungkinan bahwa konstanta dilapisi ke vec4 batas, misalnya. Untuk memverifikasi tata letak yang diharapkan, periksa informasi pantulan dari shader HLSL.

API berikut (dari antarmuka ID3D12GraphicsCommandList ) adalah untuk mengatur konstanta langsung pada tanda tangan root:

Selain itu, lihat struktur D3D12_ROOT_CONSTANTS .

Tanda Tangan Akar