非着色器可见描述符堆

着色器无法通过描述符表引用部分描述符堆,但描述符堆的存在是为了帮助应用在记录命令列表之前暂存描述符,或者是因为不需着色器可见堆。

非可见视图

前面描述的着色器可访问描述符堆等所有描述符堆,都可以由 CPU 和/或命令列表操作,具体取决于应用程序为描述符堆选择的内存池和 CPU 访问属性。

对于着色器可见描述符堆,拒绝着色器访问这些描述符堆的显著原因是它们处于暂存状态。 然后这些堆设置为着色器可见,并在命令列表执行时通过描述符表进行访问。 但暂存着色器可见堆没有要求,可直接填充。

其他描述符通过将其内容直接记录到命令列表来绑定到管道。 这些描述符只用于在命令列表记录时间时转换视图参数。 这些堆始终是非着色器可见,且包含以下内容。

  • 呈现目标视图 (RTV)
  • 深度模具视图 (DSV)

索引缓冲区视图 (IBV) 、顶点缓冲区视图 (VBV) 和流输出视图 (SOV) 直接传递到 API 方法,没有特定的堆类型。

记录到命令列表(例如,通过 OMSetRenderTargets 等调用)之后,用于保存此调用的描述符的内存在该调用结束后可立即重新使用

甚至描述符表也有选项,即应用可以允许实现在命令列表记录时记录表内容(而不是在执行时取消对表指针的引用)。

总结

着色器可见,仅 CPU 写入 非着色器可见,CPU 读/写
CBV、SRV、UAV
采样
RTV
DSV

 

描述符堆