[英]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.