HLSL中ConstantBuffer(1,7)参数含义不明,求技术解析
HLSL中ConstantBuffer(1,7)参数解析
你看到的是DirectX 9及更早版本HLSL的常量缓冲区声明语法,括号里的两个数字作用如下:
- 第一个数字
1:代表常量缓冲区的绑定槽位(slot),用来指定这个缓冲区绑定到GPU的哪个常量缓冲区单元。GPU有多个常量缓冲区槽位,调整这个值会改变缓冲区的绑定位置,如果应用程序没有在对应槽位传入正确数据,着色器输出就会异常。 - 第二个数字
7:是手动指定的该缓冲区占用的常量寄存器数量。HLSL中每个float4类型占1个常量寄存器,你声明的float4 test_var[10]理论上需要10个寄存器,但手动设为7的话,缓冲区只会分配7个寄存器的空间——数组中第8到第10个元素会无法正确访问(要么被截断,要么读取到错误内存数据),这就是调整它会影响输出的直接原因。
需要注意的是,这种手动指定寄存器数量的语法在DirectX 10及以后的HLSL中已经被废弃,新版语法改用cbuffer关键字配合register(bX)指定槽位,寄存器数量由编译器自动计算,比如:
cbuffer TestBuffer : register(b1) { float4 test_var[10]; }
内容的提问来源于stack exchange,提问作者Curvinghawk 5
相关产品推荐
相关产品推荐

