gpt4 book ai didi

c++ - 着色器中的 DirectX 着色器资源 View

转载 作者:可可西里 更新时间:2023-11-01 18:36:06 25 4
gpt4 key购买 nike

我现在有点困惑,只是想请大家帮我弄清楚一些想法。

在 HLSL 着色器(例如计算着色器)中,我可以声明一个 StructuredBuffer sb,对吧?我是否必须将它绑定(bind)到一个寄存器,例如:register(t0)?

从应用程序端,我可以调用 CSSetShaderResources(...)。第一个参数(StartSlot),它与寄存器声明中“t”后面的小数字有什么关系吗?

如果我将 StartSlot 设置为 0(例如),并将第二个参数设置为 2。我是否告诉 API 我将绑定(bind)两个着色器资源 View ,一个在 register(t0) 中,另一个在 register( t1)?

如果我声明 Texture2D tex[10] : register(t0) 我可以通过调用 CSSetShaderResources(0, 10, ...) 来设置它。这是否意味着寄存器(t0~t9)都用完了?

很抱歉提出如此“快速”的问题,但我真的很困惑,我的一些测试似乎给出了相互矛盾的结果......

如有任何帮助,我们将不胜感激。

最佳答案

那么让我们按顺序回复:

是的,您当然可以在计算着色器中声明一个 StructuredBuffer(实际上您可以为任何类型的着色器声明它)。

如果你不使用效果框架(技术),你需要声明一个寄存器,这样着色器就会知道从哪里读取你的数据(使用效果框架它只是在幕后进行,但你仍然可以明确地声明)。

CSSSetShaderResources 指示从起始槽绑定(bind) N 个资源,因此您对使用 0,2 的描述是正确的。

对于纹理数组,我不得不运行 PIX 来检查它,但它确实是你说的方式。

Texture2D tex[10] : register(t0); 

这意味着每个纹理索引将从您指定的寄存器开始分配一个插槽,因此您需要调用 CSSetShaderResources(0,10,srvarray) 来设置它们。

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

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