带有 Shader Model 2.0 的 HLSL 循环:错误 X3511 无法展开循环
Posted
技术标签:
【中文标题】带有 Shader Model 2.0 的 HLSL 循环:错误 X3511 无法展开循环【英文标题】:HLSL for loop with Shader Model 2.0: Error X3511 unable to unroll loop 【发布时间】:2012-09-02 16:31:28 【问题描述】:在 Shader Model 2.0 下的 HLSL 着色器中编译以下 for 循环时,出现错误 X3511。
for (int x = -5; x <= 5; x++)
for (int y = -5; y <= 5; y++)
...
错误内容如下:无法展开循环,循环似乎没有及时终止(5 次迭代),使用 [unroll(n)] 属性强制使用更高的数字。
我知道这条错误消息,但我没有在这里为 for 语句的条件部分使用变量 - 它是硬编码的 x
提前致谢!
【问题讨论】:
当我删除第二个 for 循环时它会编译。所以:HLSL 中没有嵌套循环?!? 我不确定它是否适用于嵌套循环,但您是否尝试使用该属性增加迭代次数?作为一个疯狂的猜测,也许两个循环上的[unroll(11)]
都可以工作?
不幸的是,在 Shader Model 2.0 下编译时我无法使用展开。我正在开发一个图像处理应用程序,所以我想确保该应用程序至少可以在 Windows XP 下运行。
【参考方案1】:
试试这个:
[unroll(121)] for (int i=0; i<121; i++)
int x = i / (int)11 - 5;
int y = i % (int)11 - 5;
【讨论】:
以上是关于带有 Shader Model 2.0 的 HLSL 循环:错误 X3511 无法展开循环的主要内容,如果未能解决你的问题,请参考以下文章
OPENGL ES 2.0 知识串讲 ——SHADER的功能&GLSL语法(I)
OPENGL ES 2.0 知识串讲 ——GLSL 语法(IV)
Asm Shader Reference --- Shader Model 2 part
Asm Shader Reference --- Shader Model 1 part