着色器资源视图使用哪种格式进入深度模板缓冲区资源?

Jaa*_*rus 4 dxgi directx-12 direct3d12

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


我真的不明白为什么一个无类型的格式是不允许哪种格式我应该改用

gal*_*p1n 5

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

  • 谢谢,这很有道理!我最终将资源定义为“R24G8_TYPELESS”,DSV 定义为“D24_UNORM_S8_UINT”,SRV 定义为“R24_UNORM_X8_TYPELESS”。 (2认同)