【问题标题】:Error about function Interlockedadd under RWTEXTURE2D.(HLSL)RWTEXTURE2D 下的 Interlockedadd 函数出错。(HLSL)
【发布时间】:2018-02-07 17:30:56
【问题描述】:

我遇到了一个关于 HLSL 计算着色器中联锁的问题。这是我的代码

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发生了什么吗? 非常感谢!

【问题讨论】:

    标签: directx-11 hlsl directx-12


    【解决方案1】:

    好的。我找到了。都是司机的错。 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 
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多