我该如何修复我的代码中关于循环中数组引用的 HLSL 错误?

What can I do to fix my code with this HLSL error about array references in loops?

我有一个包含以下代码的 HLSL 文件:

struct particle
{
    float2 pos;
    float next_pos;
    float angle;
};
particle nearby[32];
float angles[32];
for (uint i = 0; i < number_of_particles; i++)
{
    if ((particle_buffer[i].pos.y <= pos.y + sight && particle_buffer[i].pos.y >= pos.y - sight) && (particle_buffer[i].pos.x <= pos.x + sight && particle_buffer[i].pos.x >= pos.x - sight))//is it within sight square
    {
        nearby[i] = particle_buffer[i];
        count++;
    }
    if (count >= 32)
    {
        break;
    }

}

for (uint j = 0; j < count; j++)
{
    angles[j] = atan((pos.y - nearby[j].pos.y) / (pos.x - nearby[j].pos.x)); //angle in radians from current to next particle converted to degrees
}

和行:

nearby[i] = particle_buffer[i];
angles[j] = atan((pos.y - nearby[j].pos.y) / (pos.x - nearby[j].pos.x)); //angle in radians from current to next particle converted to degrees

关于 L 值和数组引用都抛出相同的错误:

Shader warning in 'hlsl_file': array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll at kernel move at hlsl_file.compute(line_num) (on d3d11)

我浏览了 Microsoft 文档和其他一些论坛,但我不理解很多解决方案,而且大多数答案都是针对顶点着色器的,而不是像我这样的计算着色器。我能做出的最好猜测是,这是因为数组在分配给另一个数组时不能接受不同的索引输入,但我一点也不确定。


编辑: 在统一论坛上进一步查看后,对于某些硬件,您可能会通过尝试使用不是循环变量(i 或 j)的索引变量来寻址循环内的数组来获得此错误,我的代码没有不要这样做,但也许它是相关的?

我最终只使用了 RWStructuredBuffer 而不是数组,一切都完美无缺。虽然不确定这是否有效。