ID3D12GraphicsCommandList5::RSSetShadingRateImage 方法 (d3d12.h)
設定可變速率底紋 (VRS) 的螢幕空間底紋速率影像。 如需詳細資訊,請參閱 (VRS) 的可變速率底紋 。 此方法需要 Tier2 可變速率底紋 (VRS) 支援。 請參閱 D3D12_FEATURE_DATA_D3D12_OPTIONS6 和 D3D12_VARIABLE_SHADING_RATE_TIER。
語法
void RSSetShadingRateImage(
ID3D12Resource *shadingRateImage
);
參數
shadingRateImage
類型: ID3D12Resource*
ID3D12Resource 的選擇性指標,代表螢幕空間底紋速率影像。 如果 為 NULL,則效果與具有陰影速率影像相同,其中所有值都是 1x1 的陰影速率。
此紋理必須套用 D3D12_RESOURCE_STATE_SHADING_RATE_SOURCE 狀態。
底紋速率影像的磚大小可透過 D3D12_FEATURE_DATA_D3D12_OPTIONS6來決定。 因此,陰影速率影像的大小應該是
ceil((float)rtWidth / VRSTileSize), ceil((float)rtHeight / VRSTileSize)
陰影速率影像必須是具有單一 mip 的 2D 紋理,且格式 DXGI_FORMAT_R8_UINT。 每個紋素都必須是對應至 D3D12_SHADING_RATE的值。 它必須具有 配置D3D12_TEXTURE_LAYOUT_UNKNOWN ,而且不能是深度樣板、轉譯目標、同時存取或交叉配接器資源。
(0 時,0) 是 DirectX 中的左上方、太小或大型陰影速率影像會導致底部或右下方沒有陰影速率影像區域,或以這些方向延伸的影像。 如果超出,則會忽略 (但合法) ,而且當影像太小時,底部和右方的所有超出範圍區域都會有 1x1 的預設陰影速率 (不過,這並不表示最終陰影速率。結合器仍會套用至這個 1x1 預設值) 。
傳回值
無
備註
若要讓螢幕空間底紋速率影像生效,必須呼叫 ID3D12GraphicsCommandList5::RSSetShadingRate 來設定陰影的結合器。 否則,使用預設結合器 (D3D12_SHADING_RATE_COMBINER_PASSTHROUGH) ,則會在判斷陰影粒度時忽略螢幕空間底紋速率影像。
傳遞至 [ID3D12GraphicsCommandList5::RSSetShadingRate] 的第二個結合器是套用至陰影速率影像的結合器,會在全域底紋速率和每個基本底紋速率合併之後發生。
最終底紋速率的演算法取決於
postRasterizerRate = ApplyCombiner(Combiners[0], CommandListShadingRate, Primitive->PrimitiveSpecifiedShadingRate);
finalRate = ApplyCombiner(Combiners[1], postRasterizerRate, ScreenSpaceImage[xy]);
其中 ApplyCombiner
是
UINT ApplyCombiner(D3D12_SHADING_RATE_COMBINER combiner, UINT a, UINT b)
{
MaxShadingRate = options6.AdditionalShadingRatesSupported ? 4 : 2;
switch (combiner)
{
case D3D12_SHADING_RATE_COMBINER_PASSTHROUGH: // default
return a;
case D3D12_SHADING_RATE_COMBINER_OVERRIDE:
return b;
case D3D12_SHADING_RATE_COMBINER_MAX:
return max(a, b);
case D3D12_SHADING_RATE_COMBINER_MIN:
return min(a, b);
case D3D12_SHADING_RATE_COMBINER_SUM:
return min(MaxShadingRate, a + b);
case default:
return a;
}
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 10 組建 20348 |
最低支援的伺服器 | Windows 10 組建 20348 |
標頭 | d3d12.h |