0

我在 HLSL 计算着色器中遇到了关于 intelocked 的问题。这是我的代码

RWTexture2D<uint>  TileNum:register(u0);
 //Texture size is same with all group size(Context->Dispantch(x,y,z))
[numthreads(32, 32, 1)]//max 1024
 void main(uint3 TileIndex : SV_GROUPID)
 {
     uint src=0;
     InterlockedAdd(TileLightNum[TileIndex.xy],1,src);
 }

然后我将纹理数据读取到 cpu。实际上,一个组的线程数是1024(最大)。我想每个(x,y)坐标值是1024。但是值是64(专用卡)或32(集成卡)。有人能告诉我吗发生在 hlsl 中?太感谢了!

4

1 回答 1

0

好的。我找到了。都是司机的错。AMD R7 M256 最新驱动!如果读取带有R32_UINT格式的纹理。从 RwTexture 复制资源后,我需要这样做:

 for(UINT i=0; i < height; ++i)
   for(UINT j=0; j < width; ++j)
   {
     *p[i*2*width + j] //get value 
   }
于 2018-02-07T18:57:13.410 回答