Menggunakan Nilai System-Generated

Nilai yang dihasilkan sistem dihasilkan oleh tahap IA (berdasarkan semantik input yang disediakan pengguna) untuk memungkinkan efisiensi tertentu dalam operasi shader.

Dengan melampirkan data, seperti id instans (terlihat oleh VS), id vertex (terlihat oleh VS), atau id primitif (terlihat oleh GS/PS), tahap shader berikutnya dapat mencari nilai sistem ini untuk mengoptimalkan pemrosesan dalam tahap tersebut. Misalnya, tahap VS dapat mencari id instans untuk mengambil data per vertex tambahan untuk shader atau untuk melakukan operasi lain; tahap GS dan PS dapat menggunakan id primitif untuk mengambil data per primitif dengan cara yang sama.

VertexID

Id vertex digunakan oleh setiap tahap shader untuk mengidentifikasi setiap puncak. Ini adalah bilangan bulat tidak bertanda 32-bit yang nilai defaultnya adalah 0. Ini ditetapkan ke puncak ketika primitif diproses oleh tahap IA. Lampirkan semantik vertex-id ke deklarasi input shader untuk menginformasikan tahap IA untuk menghasilkan id per vertex.

IA akan menambahkan id vertex ke setiap puncak untuk digunakan oleh tahap shader. Untuk setiap panggilan gambar, id vertex bertambah 1. Di seluruh panggilan gambar terindeks, hitungan diatur ulang kembali ke nilai awal. Untuk ID3D11DeviceContext::D rawIndexed dan ID3D11DeviceContext::D rawIndexedInstanced, id vertex mewakili nilai indeks. Jika id vertex meluap (melebihi 2³²– 1), id verteks membungkus ke 0.

Untuk semua jenis primitif, simpul memiliki id verteks yang terkait dengannya (terlepas dari kedekatan).

PrimitiveID

Id primitif digunakan oleh setiap tahap shader untuk mengidentifikasi setiap primitif. Ini adalah bilangan bulat tidak bertanda 32-bit yang nilai defaultnya adalah 0. Ini ditetapkan ke primitif ketika primitif diproses oleh tahap IA. Untuk menginformasikan tahap IA untuk menghasilkan id primitif, lampirkan semantik primitif-id ke deklarasi input shader.

Tahap IA akan menambahkan id primitif ke setiap primitif untuk digunakan oleh shader geometri atau tahap pemisah piksel (mana pun tahap pertama yang aktif setelah tahap IA). Untuk setiap panggilan gambar terindeks, id primitif bertambah 1, namun, id primitif diatur ulang ke 0 setiap kali instans baru dimulai. Semua panggilan gambar lainnya tidak mengubah nilai id instans. Jika id instans meluap (melebihi 2³²– 1), id instans membungkus ke 0.

Tahap shader piksel tidak memiliki input terpisah untuk id primitif; namun, input shader piksel apa pun yang menentukan id primitif menggunakan mode interpolasi konstan.

Tidak ada dukungan untuk menghasilkan id primitif secara otomatis untuk primitif yang berdekatan. Untuk jenis primitif dengan kedekatan, seperti strip segitiga dengan kedekatan, id primitif hanya dipertahankan untuk primitif interior (primitif yang tidak berdekatan), sama seperti set primitif dalam strip segitiga tanpa bersebelahan.

InstanceID

Id instans digunakan oleh setiap tahap shader untuk mengidentifikasi instans geometri yang saat ini sedang diproses. Ini adalah bilangan bulat tidak bertanda 32-bit yang nilai defaultnya adalah 0.

Tahap IA akan menambahkan id instans ke setiap puncak jika deklarasi input shader vertex menyertakan semantik id instans. Untuk setiap panggilan gambar terindeks, id instans bertambah 1. Semua panggilan gambar lainnya tidak mengubah nilai id instans. Jika id instans meluap (melebihi 2³²– 1), id instans dibungkus menjadi 0.

Contoh

Ilustrasi berikut menunjukkan bagaimana nilai sistem dilampirkan ke strip segitiga instans dalam tahap IA.

ilustrasi nilai sistem untuk strip segitiga instans

Tabel ini menunjukkan nilai sistem yang dihasilkan untuk kedua instans strip segitiga yang sama. Instans pertama (instans U) ditampilkan dalam warna biru, instans kedua (instans V) ditampilkan dalam warna hijau. Garis padat menghubungkan simpul di primitif, garis putus-putus menghubungkan simpul yang berdekatan.

Tabel berikut menunjukkan nilai yang dihasilkan sistem untuk instans U.

Vertex Data C,U D,U E,U F,U G,U H,U I,U J,U K,U L,U
VertexID 0 1 2 3 4 5 6 7 8 9
InstanceID 0 0 0 0 0 0 0 0 0 0

 

Nilai Nilai Nilai
PrimitiveID 0 1 2
InstanceID 0 0 0

 

Tabel berikut menunjukkan nilai yang dihasilkan sistem untuk instans V.

Vertex Data C,V D,V E,V F,V G,V H,V I,V J,V K,V L,V
VertexID 0 1 2 3 4 5 6 7 8 9
InstanceID 1 1 1 1 1 1 1 1 1 1

 

Nilai Nilai Nilai
PrimitiveID 0 1 2
InstanceID 1 1 1

 

Perakit input menghasilkan id (vertex, primitif, dan instans); perhatikan juga bahwa setiap instans diberi id instans yang unik. Data diakhiri dengan pemotongan strip, yang memisahkan setiap instans strip segitiga.

Tahap Input-Assembler