diff options
Diffstat (limited to 'examples/autodiff-texture/convert.slang')
| -rw-r--r-- | examples/autodiff-texture/convert.slang | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/examples/autodiff-texture/convert.slang b/examples/autodiff-texture/convert.slang new file mode 100644 index 000000000..364cc286e --- /dev/null +++ b/examples/autodiff-texture/convert.slang @@ -0,0 +1,25 @@ +// A compute shader to convert from a buffer into a mip-map texture. +cbuffer Uniforms +{ + uint4 mipOffset[16]; + uint dstLayer; + uint width; + uint height; + RWStructuredBuffer<float> srcBuffer; + RWTexture2D dstTexture; +} + +[shader("compute")] +[numthreads(16, 16, 1)] +void computeMain(uint3 threadIdx : SV_DispatchThreadID) +{ + uint x = threadIdx.x; + uint y = threadIdx.y; + uint dstW = width >> dstLayer; + uint dstH = height >> dstLayer; + if (x >= dstW) return; + if (y >= dstH) return; + uint dstOffset = mipOffset[dstLayer / 4][dstLayer % 4] + (y * dstW + x) * 4; + var dstVal = float4(srcBuffer[dstOffset], srcBuffer[dstOffset + 1], srcBuffer[dstOffset + 2], srcBuffer[dstOffset + 3]); + dstTexture[uint2(x, y)] = dstVal; +} |
