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