summaryrefslogtreecommitdiffstats
path: root/examples/gpu-printing/kernels.slang
diff options
context:
space:
mode:
Diffstat (limited to 'examples/gpu-printing/kernels.slang')
-rw-r--r--examples/gpu-printing/kernels.slang38
1 files changed, 38 insertions, 0 deletions
diff --git a/examples/gpu-printing/kernels.slang b/examples/gpu-printing/kernels.slang
new file mode 100644
index 000000000..ec4533958
--- /dev/null
+++ b/examples/gpu-printing/kernels.slang
@@ -0,0 +1,38 @@
+// kernels.slang
+
+// This file demonstrates how ordinary shader code can make use of
+// a standalone GPU printing library implemented in `printing.slang`.
+//
+// The first step for using a module of Slang code is to `import` it.
+//
+import printing;
+//
+// The `import` declaration above brings all the types and functions
+// declared in the `printing` module (in `printing.slang`) into
+// scope so that our code can use them.
+
+// For simplicity, we will define a single compute shader that does
+// some simple printing.
+//
+[shader("compute")]
+[numthreads(32)]
+void computeMain(uint3 tid : SV_DispatchThreadID)
+{
+ // The `printing` module defines two main printing routines.
+ //
+ // The first is a `println` function in the style of Java,
+ // which takes zero or more arguments and prints them all
+ // followed by a newline.
+ //
+ // HACK: We are having to explicitly call `getStringHash` here
+ // because the print implementation wants to write out strings
+ // in terms of their hash code, and the current Slang implementation
+ // of `getStringHash` only applies to string literals.
+ //
+ println(getStringHash("hello from thread number "), tid.x);
+
+ // The second facility supported by `printing.slang` is a C-style
+ // `printf()` function.
+ //
+ printf(getStringHash("printf from thread 0x%x\n"), tid.x);
+}