带有 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

OPENGL ES 2.0 知识串讲 ——GLSL 语法(IV)

Shader Model是啥意思