我在HLSL工作,我从我的一个着色器中收到此错误:
错误X4505:超出最大临时寄存器索引
造成这种情况的一行是:
int count = Passes[input.Tex.y].y;
通行证定义为:
cbuffer Style
{
float3 Passes[256];
...
}
和input.Tex是一个声明为TEXCOORD的float2。
有人可以向我解释这个错误吗?它没有记录在MSDN上(或据我所知的其他任何地方),我不清楚这里有什么问题。
我正在使用着色器模型4.0级别9_3。
答案 0 :(得分:0)
现在它将float作为整数索引读入数组。
说你的浮点数是1.0f,
这意味着3F80 0000(十六进制)或1,065,353,216(十进制)。
它现在尝试阅读地址Passes + 1065353216 * sizeof(float3)
这个非常明显的注册表索引超出了考虑单个常量保持4096最大常量。
答案 1 :(得分:0)
如果这是在像素着色器中,则可能不支持数组索引,并且您的编译器可能会生成如下代码:
if (input.Tex.y == 0)
count = Passes[0];
else if (input.Tex.y == 1)
count = Passes[1];
...
else if (input.Tex.y == 255)
count = Passes[255];
我认为9_3级代码不支持像素着色器中的数组索引。您应该检查反汇编是否有非常冗长的代码。您可能需要减少256到128或64以使其编译。