HLSL ComputeShader纹理中的样本表现很奇怪

时间:2016-04-10 14:48:38

标签: directx directx-11 hlsl compute-shader

HY!

我有一个计算着色器:

[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)调用它,在每个渲染步骤中我交换温度和outputTemperature纹理。

我认为它会做一些类似于静态点的圆形增长,但它只会向右下方增长。 左上角的黑色/红色是静态的“热量”,着色器的温度越小。

enter image description here

知道我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

所以关于坐标系转换......

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