关于RWTEXTURE2D下的Interlockedadd函数的错误。(HLSL)

时间:2018-02-07 17:30:57

标签: directx-11 hlsl directx-12

我遇到了关于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发生了什么? 非常感谢你!

1 个答案:

答案 0 :(得分: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 
   }