Bagikan melalui


Fitur pengambilan sampel tekstur sumber daya ubin

Bagian ini menjelaskan fitur pengambilan sampel tekstur sumber daya ubin.

Persyaratan fitur pengambilan sampel tekstur sumber daya ubin

Fitur pengambilan sampel tekstur yang dijelaskan di sini memerlukan dukungan sumber daya berjenjang tingkat 2 .

Umpan balik shader tentang area yang dipetakan

Setiap instruksi shader yang membaca dan/atau menulis ke sumber daya ubin menyebabkan informasi status direkam. Status ini diekspos sebagai nilai pengembalian ekstra opsional pada setiap instruksi akses sumber daya yang masuk ke register sementara 32-bit. Isi nilai yang dikembalikan buram. Artinya, pembacaan langsung oleh program shader tidak diizinkan. Tapi, Anda dapat menggunakan fungsi CheckAccessFullyMapped untuk mengekstrak info status.

Pemeriksaan yang dipetakan sepenuhnya

Fungsi CheckAccessFullyMapped menginterpretasikan status yang dikembalikan dari akses memori dan menunjukkan apakah semua data yang diakses dipetakan dalam sumber daya. CheckAccessFullyMapped mengembalikan true (0xFFFFFFFF) jika data dipetakan atau salah (0x00000000) jika data tidak dipetakan.

Selama operasi filter, terkadang berat texel tertentu akhirnya menjadi 0,0. Contohnya adalah sampel linier dengan koordinat tekstur yang jatuh langsung di pusat texel: 3 texel lainnya (yang dapat bervariasi menurut perangkat keras) berkontribusi pada filter tetapi dengan berat 0. Texel 0 berat ini tidak berkontribusi pada hasil filter sama sekali, jadi jika terjadi jatuh pada petak peta NULL , texel tersebut tidak dihitung sebagai akses yang tidak dipetakan. Perhatikan jaminan yang sama berlaku untuk filter tekstur yang mencakup beberapa tingkat mip; jika texel pada salah satu mipmap tidak dipetakan tetapi berat pada texel tersebut adalah 0, texel tersebut tidak dihitung sebagai akses yang tidak dipetakan.

Saat pengambilan sampel dari format yang memiliki kurang dari 4 komponen (seperti DXGI_FORMAT_R8_UNORM), texel apa pun yang jatuh pada petak peta NULL mengakibatkan akses yang dipetakan NULL dilaporkan terlepas dari komponen mana yang benar-benar dilihat shader dalam hasilnya. Misalnya, membaca dari R8_UNORM dan menutupi hasil baca di shader dengan .gba/.yzw tampaknya tidak perlu membaca tekstur sama sekali. Tetapi jika alamat texel adalah petak peta yang dipetakan NULL, operasi masih dihitung sebagai akses peta NULL .

Shader dapat memeriksa status dan mengejar tindakan yang diinginkan pada kegagalan. Misalnya, tindakan dapat mencatat 'misses' (katakanlah melalui tulisan UAV) dan/atau mengeluarkan bacaan lain yang dijepit ke LOD kasar yang diketahui akan dipetakan. Aplikasi mungkin ingin melacak akses yang berhasil juga untuk merasakan bagian apa dari set petak peta yang dipetakan diakses.

Salah satu komplikasi untuk pengelogan adalah tidak ada mekanisme untuk melaporkan serangkaian petak peta yang tepat yang akan diakses. Aplikasi ini dapat membuat tebakan konservatif berdasarkan mengetahui koordinat yang digunakan untuk akses, serta menggunakan instruksi LOD (misalnya, tex2Dlod) yang mengembalikan apa perhitungan LOD perangkat keras.

Komplikasi lain adalah bahwa banyak akses akan ke petak peta yang sama, sehingga banyak pengelogan redundan akan terjadi dan mungkin ketidakcocokan pada memori. Mungkin lebih mudah jika perangkat keras dapat diberikan opsi untuk tidak repot-repot melaporkan akses petak jika dilaporkan di tempat lain sebelumnya. Mungkin status pelacakan tersebut dapat diatur ulang dari API (kemungkinan pada batas bingkai).

Klem MinLOD per sampel

Untuk membantu shader menghindari area dalam sumber daya petak peta mipmapped yang diketahui tidak dipetakan, sebagian besar instruksi shader yang melibatkan penggunaan sampler (pemfilteran) memiliki mode baru yang memungkinkan shader meneruskan parameter klem Float32 MinLOD tambahan ke sampel tekstur. Nilai ini berada di ruang nomor mipmap tampilan, dibandingkan dengan sumber daya yang mendasar.

Perangkat keras melakukan max(fShaderMinLODClamp,fComputedLOD) di tempat yang sama dalam perhitungan LOD tempat klem MinLOD per sumber daya terjadi, yang juga merupakan max().

Jika hasil penerapan klem LOD per sampel dan klem LOD lainnya yang ditentukan dalam sampler adalah set kosong, hasilnya sama di luar hasil akses terikat sebagai penjepit minLOD per sumber daya: 0 untuk komponen dalam format permukaan dan default untuk komponen yang hilang.

Instruksi LOD (misalnya, tex2Dlod), yang mendahului klem minLOD per sampel yang dijelaskan di sini, mengembalikan LOD yang dijepit dan tidak tertutup. LOD yang dijepit yang dikembalikan dari instruksi LOD ini mencerminkan semua penjepitan termasuk klem per sumber daya, tetapi bukan klem per sampel. Klem per sampel dikontrol dan dikenal oleh shader, sehingga pembuat shader dapat secara manual menerapkan penjepit tersebut ke nilai pengembalian instruksi LOD jika diinginkan.

Pemfilteran pengurangan Min/Maks

Aplikasi dapat memilih untuk mengelola struktur data mereka sendiri yang memberi tahu mereka tentang seperti apa pemetaan untuk sumber daya ubin. Contohnya adalah permukaan yang berisi texel untuk menyimpan informasi untuk setiap petak peta dalam sumber daya ubin. Seseorang mungkin menyimpan LOD pertama yang dipetakan di lokasi petak tertentu. Dengan pengambilan sampel yang cermat dari struktur data ini dengan cara yang sama seperti sumber daya petak peta dimaksudkan untuk diambil sampelnya, seseorang mungkin menemukan lod minimum yang sepenuhnya dipetakan untuk seluruh jejak filter tekstur. Untuk membantu mempermudah proses ini, Direct3D 11.2 memperkenalkan mode sampler tujuan umum baru, pemfilteran min/maks.

Utilitas pemfilteran min/maks untuk pelacakan LOD mungkin berguna untuk tujuan lain, seperti, mungkin pemfilteran permukaan kedalaman.

Pemfilteran pengurangan min/maks adalah mode pada sampler yang mengambil set texel yang sama dengan yang akan diambil filter tekstur normal. Tetapi alih-alih memadukan nilai untuk menghasilkan jawaban, nilai tersebut mengembalikan min() atau max() dari texel yang diambil, berdasarkan per komponen (misalnya, min dari semua nilai R, secara terpisah dari min dari semua nilai G dan sebagainya).

Operasi min/maks mengikuti aturan presisi aritmatika Direct3D. Urutan perbandingan tidak masalah.

Selama operasi filter yang tidak min/maks, terkadang berat texel tertentu akhirnya menjadi 0,0. Contohnya adalah sampel linier dengan koordinat tekstur yang jatuh langsung di pusat texel - 3 texel lainnya (yang mungkin bervariasi menurut perangkat keras) berkontribusi pada filter tetapi dengan berat 0. Untuk salah satu texel ini yang akan menjadi berat 0 pada filter non-min/maks, jika filter min/maks, texel ini masih tidak berkontribusi pada hasil (dan bobot tidak mempengaruhi operasi filter min/maks).

Daftar lengkap mode filter ditampilkan dalam enumerasi D3D11_FILTER dengan MINIMUM dan MAKSIMUM dalam nilai enumerasi.

Dukungan untuk fitur ini bergantung pada dukungan Tier 2 untuk sumber daya ubin.

Akses alur ke sumber daya ubin