深度模板缓冲区资源被定义为DXGI_FORMAT_D24_UNORM_S8_UINT
格式。
我会假设要在该资源中创建着色器资源视图 (SRV),需要将视图格式描述为:
DXGI_FORMAT_R24_UNORM_X8_TYPELESS
其中红色通道访问深度值DXGI_FORMAT_R24G8_TYPELESS
其中红色通道访问深度和绿色通道模板值
但是,创建此类 SRV 失败并出现以下错误:
D3D12 ERROR: ID3D12Device::CreateShaderResourceView: 对于资源格式 D24_UNORM_S8_UINT,在制作 D3D 视图时,视图的格式名称不能为 R24_UNORM_X8_TYPELESS。请参阅此资源格式的有效视图格式名称集的文档,确定资源(或其中的一部分)在着色器中的显示方式。[ STATE_CREATION 错误 #28:CREATESHADERRESOURCEVIEW_INVALIDFORMAT]
查看API 文档后,我得到了以下信息:
查看资源时,资源视图描述必须指定与资源格式兼容的类型化格式。这意味着您不能使用名称中带有 _TYPELESS 的任何格式创建资源视图描述。但是,您可以通过为视图指定类型化格式来查看无类型资源。
我真的不明白为什么不允许使用无类型格式以及我应该使用哪种格式?