c – 着色器中的DirectX着色器资源视图

前端之家收集整理的这篇文章主要介绍了c – 着色器中的DirectX着色器资源视图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我现在有点困惑,只是想请大家帮我解决一些想法.

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

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

如果我将StartSlot设置为0(例如),并将第二个参数设置为2.我告诉API我将绑定两个着色器资源视图,一个在寄存器(t0)中,另一个在寄存器中(t1)?

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

对于这样一个问题的“快速解雇”感到抱歉,但我真的很困惑,我的一些测试似乎给出了令人难以置信的结果……

任何帮助,将不胜感激.

解决方法

所以我们按顺序回复

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

如果你不使用效果框架(技术),你需要声明一个寄存器,因此着色器将知道从数据中读取的位置(使用效果框架它只是在引擎盖下进行,但你仍然可以明确地声明).

CSSetShaderResources告诉从开始时隙绑定N个资源,因此使用0,2的描述是正确的.

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

Texture2D tex[10] : register(t0);

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

猜你在找的C&C++相关文章