非着色器可见描述符堆
着色器无法通过描述符表引用部分描述符堆,但描述符堆的存在是为了帮助应用在记录命令列表之前暂存描述符,或者是因为不需着色器可见堆。
非可见视图
前面描述的着色器可访问描述符堆等所有描述符堆,都可以由 CPU 和/或命令列表操作,具体取决于应用程序为描述符堆选择的内存池和 CPU 访问属性。
对于着色器可见描述符堆,拒绝着色器访问这些描述符堆的显著原因是它们处于暂存状态。 然后这些堆设置为着色器可见,并在命令列表执行时通过描述符表进行访问。 但暂存着色器可见堆没有要求,可直接填充。
其他描述符通过将其内容直接记录到命令列表来绑定到管道。 这些描述符只用于在命令列表记录时间时转换视图参数。 这些堆始终是非着色器可见,且包含以下内容。
- 呈现目标视图 (RTV)
- 深度模具视图 (DSV)
索引缓冲区视图 (IBV) 、顶点缓冲区视图 (VBV) 和流输出视图 (SOV) 直接传递到 API 方法,没有特定的堆类型。
记录到命令列表(例如,通过 OMSetRenderTargets 等调用)之后,用于保存此调用的描述符的内存在该调用结束后可立即重新使用。
甚至描述符表也有选项,即应用可以允许实现在命令列表记录时记录表内容(而不是在执行时取消对表指针的引用)。
总结
着色器可见,仅 CPU 写入 | 非着色器可见,CPU 读/写 | |
---|---|---|
CBV、SRV、UAV | 是 | 是 |
采样 | 是 | 是 |
RTV | 否 | 是 |
DSV | 否 | 是 |
相关主题