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 的可选指针,该 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 |