4

深度模板缓冲区资源被定义为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 的任何格式创建资源视图描述。但是,您可以通过为视图指定类型化格式来查看无类型资源。


我真的不明白为什么不允许使用无类型格式以及我应该使用哪种格式

4

1 回答 1

5

反之亦然,您使用无类型组件创建资源,并在具有您需要的最终表示的视图中专门化资源。由于您已经为资源模板提供了一个 uint 表示,因此您被困住了。

于 2016-08-13T23:24:55.917 回答