Bagikan melalui


sampel (sm4 - asm)

Sampel data dari Elemen/tekstur yang ditentukan menggunakan alamat yang ditentukan dan mode pemfilteran yang diidentifikasi oleh sampler tertentu.

sample[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler
Item Deskripsi
Dest
[di] Alamat hasil operasi.
srcAddress
[di] Satu set koordinat tekstur. Untuk informasi selengkapnya, lihat bagian Keterangan.
srcResource
[di] Daftar tekstur. Untuk informasi selengkapnya, lihat bagian Keterangan.
srcSampler
[di] Daftar sampler. Untuk informasi selengkapnya, lihat bagian Keterangan.

Keterangan

Data sumber mungkin berasal dari Jenis Sumber Daya apa pun, selain Buffer.

srcAddress menyediakan sekumpulan koordinat tekstur yang diperlukan untuk melakukan sampel, karena nilai floating point yang merujuk pada ruang yang dinormalisasi dalam tekstur. Mode pembungkusan alamat (wrap/mirror/clamp/border dll.) diterapkan untuk koordinat tekstur di luar rentang [0...1], diambil dari status sampler (s#), dan diterapkan setelah offset alamat diterapkan ke koordinat tekstur.

srcResource adalah register tekstur (t#). Ini hanyalah tempat penampung untuk tekstur, termasuk jenis data pengembalian sumber daya yang sedang diambil sampelnya. Semua informasi ini dinyatakan dalam pembakaran Shader. Sumber daya aktual yang akan diambil sampelnya terikat ke Shader secara eksternal di slot # (untuk t#).

srcSampler adalah register sampler (s). Ini hanyalah tempat penampung untuk kumpulan kontrol pemfilteran seperti kontrol titik vs. linear, mipmapping, dan pembungkusan alamat.

Kumpulan informasi yang diperlukan agar perangkat keras melakukan pengambilan sampel dibagi menjadi dua bagian ortogonal. Pertama, daftar tekstur menyediakan informasi jenis data sumber termasuk, misalnya, informasi tentang apakah tekstur berisi data SRGB. Ini juga mereferensikan memori aktual yang sedang diambil sampelnya. Kedua, register sampler menentukan mode pemfilteran yang akan diterapkan.

Sumber Daya Array

Untuk Array Texture1D, komponen srcAddress g (POS-swizzle) memilih Array Slice mana yang akan diambil. Ini selalu diperlakukan sebagai nilai float berskala, daripada ruang yang dinormalisasi untuk koordinat tekstur standar, dan bahkan bulat-ke-terdekat diterapkan pada nilai, diikuti dengan penjepit ke rentang BufferArray yang tersedia.

Untuk Array Texture2D, komponen srcAddress b (POS-swizzle) memilih Array Slice mana yang akan diambil, jika tidak menggunakan semantik yang sama yang dijelaskan untuk Array Texture1D .

Offset Alamat

Akhiran [_aoffimmi(u,v,w)] opsional (offset alamat dengan bilangan bulat langsung) menunjukkan bahwa koordinat tekstur untuk sampel akan diimbangi oleh serangkaian nilai konstanta bilangan bulat ruang texel langsung yang disediakan. Nilai harfiah adalah sekumpulan angka pelengkap 4 bit 2, memiliki rentang bilangan bulat [-8,7]. Pengubah ini didefinisikan untuk semua Sumber Daya, termasuk Array Texture1D/2D dan Texture3D, tetapi tidak ditentukan untuk TextureCube.

Perangkat keras dapat memanfaatkan pengetahuan langsung bahwa traversal atas beberapa jejak texel tentang lokasi umum sedang dilakukan oleh serangkaian instruksi sampel. Ini dapat disampaikan menggunakan _aoffimmi(u,v,w).

Offset ditambahkan ke koordinat tekstur, di ruang texel, relatif terhadap setiap miplevel yang diakses. Jadi meskipun koordinat tekstur disediakan sebagai nilai float yang dinormalisasi, offset menerapkan offset bilangan bulat ruang texel.

Offset alamat tidak diterapkan di sepanjang sumbu array Array Texture1D/2D.

_aoffimmi v,w komponen diabaikan untuk Texture1Ds.

_aoffimmi komponen w diabaikan untuk Texture2Ds.

Mode pembungkusan alamat (wrap/mirror/clamp/border dll.) dari status sampler (s#) diterapkan setelah offset alamat diterapkan ke koordinat tekstur.

Kontrol Tipe Pengembalian

Format data yang dikembalikan oleh sampel ke register tujuan ditentukan oleh format sumber daya (DXGI_FORMAT*) yang terikat ke parameter srcResource (t#). Misalnya, jika t# yang ditentukan terikat dengan sumber daya dengan format DXGI_FORMAT_A8B8G8R8_UNORM_SRGB, maka operasi pengambilan sampel akan mengonversi texel sampel dari gamma 2.0 ke 1.0, menerapkan pemfilteran, dan hasilnya akan ditulis ke daftar tujuan sebagai nilai titik mengambang dalam rentang [0..1].

Nilai yang dikembalikan adalah 4 vektor (dengan default khusus format untuk komponen yang tidak ada dalam format). Swizzle di srcResource menentukan cara menggeser hasil 4 komponen yang kembali dari sampel/filter tekstur, setelah itu .mask pada dest menentukan komponen mana yang di dest diperbarui.

Ketika sampel membaca nilai float 32-bit ke dalam register 32-bit, dengan pengambilan sampel titik (tanpa pemfilteran), mungkin atau mungkin tidak menghapus nilai denormal, tetapi sebaliknya angka tidak dimodifikasi. Jika ketidakpastian dengan nilai denormal pengambilan sampel titik adalah masalah untuk aplikasi, gunakan instruksi ld , yang menjamin bahwa nilai float 32-bit dibaca tanpa dimodifikasi.

Perhitungan LOD

Untuk detail tentang bagaimana turunan dihitung dalam proses penentuan LOD untuk pemfilteran, lihat deriv_rtx dan deriv_rty. Instruksi sampel secara implisit menghitung turunan pada koordinat tekstur menggunakan definisi yang sama dengan yang digunakan instruksi Shader turunan . Ini tidak berlaku untuk instruksi sample_l atau sample_d . Untuk petunjuk tersebut, LOD atau turunan disediakan langsung oleh aplikasi.

Untuk instruksi sampel, implementasi dapat memilih untuk berbagi perhitungan LOD yang sama di semua 4 piksel dalam stempel 2x2 (tetapi tidak ada area yang lebih besar), atau melakukan perhitungan LOD per piksel.

Detail Lain-lain

Untuk Buffer & Texture1D, komponen srcAddress .gba (POS-swizzle) diabaikan. Untuk Array Texture1D, komponen srcAddress .ba (POS-swizzle) diabaikan. Untuk Texture2Ds, komponen .a srcAddress (POS-swizzle) diabaikan.

Mengambil dari slot input yang tidak terikat ke slot tersebut mengembalikan 0 untuk semua komponen.

Batasan

  • srcResource harus berupa register t#. srcResource tidak boleh berupa ConstantBuffer, yang tidak dapat terikat ke register t#.
  • srcSampler harus berupa register s#.
  • Alamat relatif di srcResource atau srcSampler tidak diizinkan.
  • srcAddress harus berupa temp (r#/x#), constantBuffer (cb#), input (v#) register atau nilai langsung.
  • dest harus berupa temp (r#/x#) atau output (o*#) register.
  • _aoffimmi(u,v,w) tidak diizinkan untuk TextureCubes.

Instruksi ini berlaku untuk tahap shader berikut:

Vertex Shader Shader Geometri Piksel Shader
x

Minimum Shader Model

Fungsi ini didukung dalam model shader berikut.

Shader Model Didukung
Model Shader 5 yes
Model Shader 4.1 yes
Model Shader 4 yes
Shader Model 3 (DirectX HLSL) no
Shader Model 2 (DirectX HLSL) no
Shader Model 1 (DirectX HLSL) no

Shader Model 4 Assembly (DirectX HLSL)