【问题标题】:HLSL for loop with Shader Model 2.0: Error X3511 unable to unroll loop带有 Shader Model 2.0 的 HLSL 循环:错误 X3511 无法展开循环
【发布时间】: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 下运行。

标签: loops for-loop shader hlsl


【解决方案1】:

试试这个:

[unroll(121)] for (int i=0; i<121; i++)
{
    int x = i / (int)11 - 5;
    int y = i % (int)11 - 5;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多