共用方式為


磚資源紋理取樣功能

本節說明磚資源紋理取樣功能。

磚資源紋理取樣功能的需求

這裡所述的紋理取樣功能需要 第 2 層的磚資源支援。

有關對應區域的著色器意見反應

讀取和/或寫入磚資源的任何著色器指令都會記錄狀態資訊。 這個狀態公開為進入 32 位元暫時暫存器之每個資源存取指令的選擇性額外傳回值。 傳回值的內容是不透明。 也就是,不允許著色器程式直接讀取。 但是,您可以使用CheckAccessFullyMapped 函式來擷取狀態資訊。

完全對應檢查

CheckAccessFullyMapped 函式解譯從記憶體存取傳回的狀態,並指出存取的所有資料是否都在資源中對應。 如果資料已對應,CheckAccessFullyMapped 傳回 true (0xFFFFFFFF),如果資料未對應則傳回 false (0x00000000)。

在篩選作業時,有時候特定紋素的加權會變成 0.0。 一個範例是紋理座標直接落在紋素中心的線性樣本:3 個其他紋素 (有哪些可能因硬體而不同) 貢獻到篩選,但具有 0 加權。 這些 0 加權紋素完全不會貢獻到篩選結果,如果它們恰巧落在 NULL 磚,它們不算是未對應的存取。 請注意,相同的保證適用於包括多個 mip 層級的紋理篩選;如果其中一個 mipmap 的紋素未對應,但在那些紋素的加權是 0,那些紋素不算是未對應的存取。

從少於 4 個元件的格式取樣時, (例如 DXGI_FORMAT_R8_UNORM) ,任何落在 Null 圖格上的紋素都會報告 Null 對應的存取權,不論著色器實際查看結果中的元件為何。 例如,從R8_UNORM讀取,並使用 .gba/.yzw 遮罩著色器,似乎完全不需要讀取紋理。 但如果紋素位址是 NULL 對應磚,作業仍然算是 NULL 對應存取。

著色器可以檢查狀態,並在失敗時追求任何您想要的動作過程。 例如,動作過程可以是記錄「遺漏」(例如透過 UAV 寫入) 和/或發出另一個讀取 (鉗制到已知對應的更粗略 LOD)。 應用程式可能也要追蹤成功存取,以了解對應磚集的哪個部分被存取。

記錄的一個複雜問題是沒有機制存在回報一組確切的磚被存取。 應用程式可以根據知道用於存取的座標,以及使用 LOD 指令 (,例如 tex2Dlod) ,以傳回硬體 LOD 計算的內容為基礎進行保守的猜測。

另一個問題是,許多存取會到同一個磚,所以會發生許多重複記錄和可能記憶體競爭。 如果硬體有選項,在之前其他地方有報告時,不需要為了報告磚存取而擔心,則可能很便利。 或許這類追蹤的狀態可能從 API 重設 (可能在畫面界限)。

每個樣本 MinLOD 鉗制

為了協助著色器避免已知為非對應的 Mipmapped 磚資源中的區域,大部分涉及使用取樣器 (篩選的著色器指令) 都有新的模式,可讓著色器將額外的 float32 MinLOD 固定參數傳遞至紋理樣本。 這個值位於檢視的 mipmap 數字空間,而不是基礎資源。

硬體會在 LOD 計算中執行 最大 (fShaderMinLODClamp,fComputedLOD) ,其中每個資源 MinLOD 限制發生的位置也是 max () 。

如果套用每個樣本 LOD 鉗制和定義於取樣器之任何其他 LOD 鉗制的結果是空集合,結果是和每個資源 minLOD 鉗制相同的超出範圍存取結果:0 表示表面格式中的元件,預設值表示遺失元件。

LOD 指令 (例如 ,tex2Dlod) ,它會預先述述此處所述的個別樣本 minLOD 限制,並傳回固定和未壓縮的 LOD。 從這個 LOD 指令傳回的鉗制 LOD 反映所有鉗制,包括每個資源鉗制,但不是每個樣本鉗制。 每個樣本鉗制是由著色器控制和所知,因此著色器作者如有需要可以手動將該鉗制套用至 LOD 指令的傳回值。

最小/最大削減篩選

應用程式可以選擇管理自己的資料結構,以通知它們對應對磚資源的外觀。 例如,包含紋素的表面,可保存磚資源中每個磚的資訊。 有人可能會儲存在特定磚位置對應的第一個 LOD。 藉由仔細取樣此資料結構,以類似方式取樣磚資源,其中一個可能會發現完整對應到整個紋理篩選使用量的 LOD 下限。 為了讓這個程序更容易,Direct3D 11.2 引進新的通用取樣器模式,最小/最大篩選。

LOD 追蹤的最小/最大篩選公用程式可能對其他用途有用,例如,也許是深度表面篩選。

最小/最大減少篩選是取樣器上的模式,會擷取一般紋理篩選擷取的一組相同的紋素。 但是,它會依據每個元素傳回所擷取紋素的 min() 或 max() (例如,所有 R 值的最小值,與所有 G 值的最小值分開,以此類推),而不是混合值以產生答案。

最小/最大作業遵循 Direct3D 算術精確度規則。 比較的順序並不重要。

在不是最小/最大的篩選作業時,有時候特定紋素的加權會變成 0.0。 例如,具有紋理座標的線性樣本,其直接落在紋理中心 -3 個其他材質 (它們可能會因硬體) 對篩選造成影響,但具有 0 權數而有所不同。 對於在非最小/最大篩選上 0 加權的任何紋素,如果篩選是最小/最大,這些紋素仍然不會貢獻到結果 (而且加權不會影響最小/最大篩選作業)。

篩選模式的完整清單會顯示在列舉值中具有 MINIMUM 和 MAXIMUM 的D3D11_FILTER 列舉中。

此功能的支援取決於磚資源 的第 2 層 支援。

磚資源的管線存取