我正在创建一个着色管理系统,而不是使用效果11库。关于着色器的资源管理,我有几个问题。
如果在着色器代码中将常量缓冲区设置为某个寄存器,那么当我在设备上设置它时,是否需要将其设置为该寄存器?如果我有多个使用那个寄存器的着色器呢?
是否在绘制之间的内存中维护常量缓冲区,或者是否清除了常量缓冲区?例如,我有一个常量缓冲区,与上次抽签没有更改,是否需要再次设置它?
是一次设置一个常量缓冲区,还是一次性设置一个常量缓冲区?
提前谢谢。
发布于 2014-08-28 02:44:19
是的,您需要将其设置为该寄存器,将其视为一个常量缓冲槽。
是的,它会一直在那里,直到你把它换到另一个。
“一次设置一个常量缓冲区还是一次设置全部缓冲区比较慢?”
你所说的“一次性”是什么意思?
无论如何,请查看本nvidia演示文稿,以获得有关cbuffer管理的优秀信息:McDonald.pdf。
注意,即使在hlsl代码上使用完全相同的“变量”,像素着色器和顶点着色器(不同的着色器类型)也使用不同的寄存器。对您来说,需要注意的是,要将cbuffer更新到寄存器,您可以使用d3d函数的像素着色器版本(VSSetConstantBuffer与PSSetConstantBuffer等)。当然,这适用于所有类型的着色器。
例如,在hlsl代码中,可以有两个常量缓冲区使用相同的插槽(寄存器),但是,请记住,不要在相同的shader..Or上同时使用这两个常量缓冲区,同样,您可以在两个着色器上使用相同的常量缓冲区,但请记住,它并不完全相同。
https://stackoverflow.com/questions/25539680
复制相似问题