繁体   English   中英

DirectX 11着色器资源管理

[英]DirectX 11 Shader Resource Management

我正在创建一个着色器管理系统,而不是使用Effects 11库。 关于着色器的资源管理,我有几个问题。

如果在着色器代码中将某个常量缓冲区设置为某个寄存器,那么在设备上对其进行设置时是否需要将该常量设置为该寄存器? 如果我有多个使用该寄存器的着色器怎么办?

是在两次绘制之间在内存中保持不变的缓冲区,还是将其清除? 举例来说,我有一个常量缓冲区,该缓冲区在上次绘制后没有更改,是否需要重新设置?

一次设置一个或一次全部设置恒定缓冲区是否较慢?

提前致谢。

是的,您需要设置该寄存器,将其视为恒定的缓冲区插槽。

是的,它会一直保留在那里,直到您切换它为止。

“一次设置一个或一次全部设置恒定缓冲区会更慢吗?”

“一次全部”是什么意思?

无论如何,请查看此nvidia演示以获取有关cbuffer管理的详细信息: https : //developer.nvidia.com/sites/default/files/akamai/gamedev/files/gdc12/Efficient_Buffer_Management_McDonald.pdf

请注意,即使您在hlsl代码上使用完全相同的“变量”,像素着色器和顶点着色器(不同的着色器类型)也会使用不同的寄存器。 多数民众赞成为您处理,要注意的是,要使用寄存器d3d的像素着色器版本(VSSetConstantBuffer与PSSetConstantBuffer等)将cbuffer更新到寄存器。 当然,这适用于所有类型的着色器。

因此,例如,在hlsl代码中,您可以有两个使用相同插槽(寄存器)的常量缓冲区,但请记住不要在同一个着色器上同时使用它们。或者再次,您可以在两个着色器上使用相同的常量缓冲区,只记得它不是真的一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM