summaryrefslogtreecommitdiff
path: root/examples/autodiff-texture/convert.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-03-21 15:44:21 -0700
committerGitHub <noreply@github.com>2023-03-21 15:44:21 -0700
commit96caba75e8dfbb879eff12cbe1a4c148a259f684 (patch)
tree1c7b2f25484ac22c738e006334d4df559bb733a5 /examples/autodiff-texture/convert.slang
parent7f11f883d0781952f002b3aa3222a3aa0040f18a (diff)
Add texture tri-linear autodiff example. (#2715)
* Add quad texture example. * delete output image * remove irrelavent files * update project files * fix * Update example. * Fix. * remove out-texture --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'examples/autodiff-texture/convert.slang')
-rw-r--r--examples/autodiff-texture/convert.slang25
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;
+}