gpt4 book ai didi

c++ - DirectX 11 着色器资源管理

转载 作者:行者123 更新时间:2023-11-28 02:42:17 24 4
gpt4 key购买 nike

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

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

在绘制之间是否在内存中保留了常量缓冲区,或者它们是否被清除?比方说我有一个常量缓冲区,它与上次绘制相比没有改变,我需要重新设置它吗?

一次设置一个常量缓冲区还是一次设置所有常量缓冲区比较慢?

提前致谢。

最佳答案

是的,你需要设置那个寄存器,把它当作一个常量缓冲槽。

是的,它会保留在那里,直到您将其切换为另一个。

“一次设置一个常量缓冲区还是一次设置所有常量缓冲区比较慢?”

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

无论如何,查看这个 nvidia 演示文稿以获得有关 cbuffer 管理的重要信息: https://developer.nvidia.com/sites/default/files/akamai/gamedev/files/gdc12/Efficient_Buffer_Management_McDonald.pdf

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

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

关于c++ - DirectX 11 着色器资源管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25539680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com