Loops 以HLSL为单位的数组长度?

Loops 以HLSL为单位的数组长度?,loops,shader,hlsl,Loops,Shader,Hlsl,我找不到任何关于如何在HLSL中获取数组长度的文档或示例 我将一个灯光数组推送到hlsl着色器,我想对(int I=0;I执行,据我所知,您必须声明具有预定义长度()的数组。如果现在从外部用任意数量的数据填充此固定数组,hlsl无法知道这一点。因此,您需要将数组长度传递给着色器 如果使用着色器模型3.0+且未在之前指定[unroll],则循环不会自动展开。() 当未指定任何属性时,编译器将首先尝试发出循环的滚动版本,如果失败,或者如果循环展开后某些操作会更容易,编译器将返回到循环的展开版本 因此

我找不到任何关于如何在HLSL中获取数组长度的文档或示例


我将一个灯光数组推送到hlsl着色器,我想对(int I=0;I执行
,据我所知,您必须声明具有预定义长度()的数组。如果现在从外部用任意数量的数据填充此固定数组,hlsl无法知道这一点。因此,您需要将数组长度传递给着色器

如果使用着色器模型3.0+且未在之前指定
[unroll]
,则循环不会自动展开。()

当未指定任何属性时,编译器将首先尝试发出循环的滚动版本,如果失败,或者如果循环展开后某些操作会更容易,编译器将返回到循环的展开版本


因此,没有允许的最大循环计数,但取决于您使用的着色器模型,有一个最大执行指令计数(),此外,如果图形设备需要2秒以上的渲染时间,还有一个windows看门狗重置图形设备()这是一个非常有意义的例子。HLSL数组并不是一个神奇地保存一个长度值的结构。在我的例子中,我通过非真实引擎C++侧向着色器发送资源,这使得这些特定的数组“神奇”地出现在着色器代码中。