0

我想要有范围的组共享内存,所以我可以完成一个使用一种格式的组共享内存的计算(即并行减少)并开始一个使用不同格式的新的(以避免超过组共享内存限制或不得不分成两个着色器)。

以下编译但给了我之前计算的剩余数据并且非常慢:

groupshared float2 Float2Array[2][1024];

numthreads(1024, 1, 1)]
void main(uint3 position : SV_DispatchThreadID)
{
    float4 Float4Array[1024] = (float4[1024])Float2Array;
    
    Float2Array[0][position.x] = 1;
    Float2Array[1][position.x] = 1;

    Float4Array[position.x] = 0;
    float4 ans = Float4Array[position.x+1]; // <---- not zero
}

这也可以编译,但速度非常慢。

groupshared float4 Float4Array[1024] = (float4[1024])Float2Array;

无论如何要让它正常工作。剩余数据可能是由于打包差异DirectCompute 着色器(HLSL)具有奇怪的数组大小

4

0 回答 0