Alur grafik
Alur grafis Direct3D dirancang untuk menghasilkan grafis untuk aplikasi game realtime. Data mengalir dari input ke output melalui setiap tahap yang dapat dikonfigurasi atau dapat diprogram.
Semua tahapan dapat dikonfigurasi menggunakan API Direct3D. Tahapan yang menampilkan inti shader umum (blok persegi panjang bulat) dapat diprogram dengan menggunakan bahasa pemrograman HLSL . Ini membuat alur sangat fleksibel dan dapat beradaptasi.
Yang paling umum digunakan adalah tahap Vertex Shader (VS) dan tahap Pixel Shader (PS). Jika Anda tidak menyediakan bahkan tahap shader ini, no-op default, vertex pass-through dan pixel shader digunakan.
Tahap Perakitan Input
Tahap Perakit Input (IA) memasok data primitif dan bersebelahan ke alur, seperti segitiga, garis, dan titik, termasuk ID semantik untuk membantu membuat shader lebih efisien dengan mengurangi pemrosesan ke primitif yang belum diproses.
Input
Data primitif (segitiga, garis, dan/atau titik), dari buffer yang diisi pengguna dalam memori. Dan mungkin data yang berdekatan. Segitiga akan menjadi 3 simpul untuk setiap segitiga dan mungkin 3 simpul untuk data yang berdekatan per segitiga.
Output
Primitif dengan nilai yang dihasilkan sistem terlampir (seperti ID primitif, ID instans, atau ID vertex).
Tahap Vertex Shader
Tahap Vertex Shader (VS) memproses simpul, biasanya melakukan operasi seperti transformasi, skinning, dan pencahayaan. Shader vertex mengambil satu vertex input dan menghasilkan satu vertex output. Operasi per vertex individu, seperti Transformasi, Skinning, Morphing, dan pencahayaan Per-vertex.
Input
Vertex tunggal, dengan nilai yang dihasilkan sistem VertexID dan InstanceID. Setiap vertex shader input vertex dapat terdiri dari vektor hingga 16 32-bit (masing-masing hingga 4 komponen).
Output
Satu puncak. Setiap puncak output dapat terdiri dari vektor 4 komponen 16 32-bit.
Tahap Hull Shader
Tahap Hull Shader (HS) adalah salah satu tahap tesselulasi, yang secara efisien memecah satu permukaan model menjadi banyak segitiga. Shader lambung dipanggil sekali per patch, dan mengubah titik kontrol input yang menentukan permukaan berurutan rendah menjadi titik kontrol yang membentuk patch. Ini juga melakukan beberapa perhitungan per patch untuk menyediakan data untuk tahap Tessellator (TS) dan tahap Domain Shader (DS).
Input
Antara 1 dan 32 titik kontrol input, yang bersama-sama menentukan permukaan berurutan rendah.
Output
Antara 1 dan 32 titik kontrol output, yang bersama-sama membentuk patch. Shader lambung mendeklarasikan status untuk tahap Tessellator (TS), termasuk jumlah titik kontrol, jenis wajah patch, dan jenis partisi yang akan digunakan saat melakukan tessellating.
Tahap tesselator
Tahap Tessellator (TS) membuat pola pengambilan sampel domain yang mewakili patch geometri dan menghasilkan sekumpulan objek yang lebih kecil (segitiga, titik, atau garis) yang menghubungkan sampel ini.
Input
Tesselator beroperasi sekali per patch menggunakan faktor tessellation (yang menentukan seberapa halus domain akan dipenggal) dan jenis partisi (yang menentukan algoritma yang digunakan untuk mengiris patch) yang diteruskan dari tahap hull-shader.
Output
Tesselator menghasilkan koordinat uv (dan opsional w) dan topologi permukaan ke tahap domain-shader.
Tahap Domain Shader
Tahap Domain Shader (DS) menghitung posisi puncak titik yang dibagi dalam patch output; ini menghitung posisi vertex yang sesuai dengan setiap sampel domain. Shader domain dijalankan sekali per titik output tahap tesselator dan memiliki akses baca-saja ke patch output shader lambung dan konstanta patch output, dan koordinat UV output tahap tesselator.
Input
Shader domain menggunakan titik kontrol output dari tahap Hull Shader (HS). Output shader lambung meliputi: Titik kontrol, data konstanta Patch, dan faktor Tesselulasi (faktor tesselulasi dapat mencakup nilai yang digunakan oleh tesselator fungsi tetap serta nilai mentah - sebelum membulatkan dengan tesselulasi bilangan bulat - yang memfasilitasi geomorf, misalnya). Shader domain dipanggil sekali per koordinat output dari tahap Tessellator (TS).
Output
Tahap Domain Shader (DS) menghasilkan posisi puncak titik yang dibagi dalam patch output.
Tahap Geometry Shader
Tahap Geometry Shader (GS) memproses seluruh primitif: segitiga, garis, dan titik, bersama dengan simpul yang berdekatan. Ini mendukung amplifikasi geometri dan de-amplifikasi. Ini berguna untuk algoritma termasuk Point Sprite Expansion, Dynamic Particle Systems, Fur/Fin Generation, Shadow Volume Generation, Single Pass Render-to-Cubemap, Per-Primitive Material Swapping, dan Per-Primitive Material Setup - termasuk pembuatan koordinat barycentric sebagai data primitif sehingga pemecah piksel dapat melakukan interpolasi atribut kustom.
Input
Tidak seperti shader vertex, yang beroperasi pada satu puncak, input shader geometri adalah simpul untuk primitif penuh (tiga simpul untuk segitiga, dua simpul untuk garis, atau verteks tunggal untuk titik).
Output
Tahap Geometry Shader (GS) mampu menghasilkan beberapa simpul yang membentuk satu topologi yang dipilih. Topologi output shader geometri yang tersedia adalah tristrip, linestrip, dan pointlist. Jumlah primitif yang dipancarkan dapat bervariasi secara bebas dalam pemanggilan shader geometri, meskipun jumlah maksimum simpul yang dapat dipancarkan harus dinyatakan secara statis. Panjang strip yang dipancarkan dari pemanggilan shader geometri dapat semena-mena, dan strip baru dapat dibuat melalui fungsi RestartStrip HLSL.
Tahap Output Aliran
Tahap Output Aliran (SO) terus mengeluarkan (atau mengalirkan) data vertex dari tahap aktif sebelumnya ke satu atau beberapa buffer dalam memori. Data yang dialirkan ke memori dapat diedarkan kembali ke dalam alur sebagai data input, atau read-back dari CPU.
Input
Data vertex dari tahap alur sebelumnya.
Output
Tahap Output Aliran (SO) terus mengeluarkan (atau mengalirkan) data vertex dari tahap aktif sebelumnya, seperti tahap Geometry Shader (GS), ke satu atau beberapa buffer dalam memori. Jika tahap Geometry Shader (GS) tidak aktif, dan tahap Output Aliran (SO) aktif, ia terus mengeluarkan data vertex dari tahap Domain Shader (DS) ke buffer dalam memori (atau jika DS juga tidak aktif, dari tahap Vertex Shader (VS).
Tahap rasterizer
Tahap Rasterizer (RS) membuat klip primitif yang tidak terlihat, menyiapkan primitif untuk tahap Pixel Shader (PS), dan menentukan cara memanggil pemecah piksel. Mengonversi informasi vektor (terdiri dari bentuk atau primitif) menjadi gambar raster (terdiri dari piksel) untuk tujuan menampilkan grafik 3D real-time.
Input
Puncak (x,y,z,w) yang masuk ke tahap Rasterizer diasumsikan berada di ruang klip homogen. Di ruang koordinat ini, sumbu X menunjuk ke kanan, Y menunjuk ke atas dan titik Z menjauhi kamera.
Output
Piksel aktual yang perlu dirender. Menyertakan beberapa atribut vertex untuk digunakan dalam interpolasi oleh Pixel Shader.
Tahap Pixel Shader
Tahap Pixel Shader (PS) menerima data terinterpolasi untuk primitif dan menghasilkan data per piksel seperti warna.
Input
Ketika alur dikonfigurasi tanpa shader geometri, shader piksel dibatasi hingga 16, 32-bit, 4-komponen input. Jika tidak, shader piksel dapat memakan waktu hingga 32, 32-bit, input 4 komponen. Data input shader piksel mencakup atribut vertex (yang dapat diinterpolasi dengan atau tanpa koreksi perspektif) atau dapat diperlakukan sebagai konstanta per primitif. Input shader piksel diinterpolasi dari atribut vertex primitif yang dirasterisasi, berdasarkan mode interpolasi yang dinyatakan. Jika primitif diklip sebelum rasterisasi, mode interpolasi juga dihormati selama proses kliping.
Output
Shader piksel dapat menghasilkan hingga 8, 32-bit, warna 4 komponen, atau tanpa warna jika piksel dibuang. Komponen register output shader piksel harus dideklarasikan sebelum dapat digunakan; setiap register diperbolehkan masker output-write yang berbeda.
Tahap Output Merger
Tahap Output Merger (OM) menggabungkan berbagai jenis data output (nilai piksel shader, informasi kedalaman dan stensil) dengan konten buffer target render dan kedalaman/stensil untuk menghasilkan hasil alur akhir.
Input
Input Output Merger adalah status Alur, data piksel yang dihasilkan oleh shader piksel, konten target render, dan konten buffer kedalaman/stensil.
Output
Warna piksel yang dirender terakhir.