来自纹理的 HLSL ComputeShader 样本表现异常

HLSL ComputeShader Sample from a texture behave strange

嗨!

我有一个计算着色器:

[numthreads(128, 1, 1)]
void csAdvect(uint2 dtid : SV_DispatchThreadID)
{
  uint4 dtl = uint4(dtid, 0, 0);
  float2 inverseSize = float2(1.0f / gridSize.x, 1.0f / gridSize.y);
  float2 coord = float2(dtid.x*inverseSize.x, dtid.y*inverseSize.y);

  float statict = statictemp.Load(dtl).x;
  if (statict < 0)statict = 0;
  float t = temperature.SampleLevel(zeroBoundarySampler, coord, 0).x;
  outputTemperature[dtid] = statict + t;
}

它是从静态纹理单元中读取的,对另一个进行采样并将其写入输出纹理。裸样。 纹理和 gridSize 是 512x512,我用 Dispatch(4, 512, 1) 调用它,在每个渲染步骤中我交换温度和输出温度纹理。

我认为它会做一些类似从静态点开始的圆形增长,但它只是从右向下增长。 左上角的 blackish/redish 是静态的 'heat',红色较浅的是来自着色器的温度。

知道我做错了什么吗?

所以所有关于坐标系变换...

如果你有一个 512x512 的纹理,纹理可以作为一个从 0,0 到 511,511 的数组采样,所以如果你想让它缩放到 0,0 到 1,1,你需要用 511 而不是 512 进行除法!愚蠢的错误,但很难找到...