summaryrefslogtreecommitdiffstats
path: root/prelude
diff options
context:
space:
mode:
Diffstat (limited to 'prelude')
-rw-r--r--prelude/slang-cuda-prelude.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/prelude/slang-cuda-prelude.h b/prelude/slang-cuda-prelude.h
index 4df60e965..a6c4f70dc 100644
--- a/prelude/slang-cuda-prelude.h
+++ b/prelude/slang-cuda-prelude.h
@@ -1612,3 +1612,29 @@ found via reflection or defined such that it matches the shader appropriately.
*/
struct UniformEntryPointParams;
struct UniformState;
+
+// ---------------------- OptiX Ray Payload --------------------------------------
+#ifdef SLANG_CUDA_ENABLE_OPTIX
+static __forceinline__ __device__
+void *unpackOptiXRayPayloadPointer(uint32_t i0, uint32_t i1)
+{
+ const uint64_t uptr = static_cast<uint64_t>(i0) << 32 | i1;
+ void* ptr = reinterpret_cast<void*>(uptr);
+ return ptr;
+}
+
+static __forceinline__ __device__
+void packOptiXRayPayloadPointer(void* ptr, uint32_t& i0, uint32_t& i1)
+{
+ const uint64_t uptr = reinterpret_cast<uint64_t>(ptr);
+ i0 = uptr >> 32;
+ i1 = uptr & 0x00000000ffffffff;
+}
+
+static __forceinline__ __device__ void *getOptiXRayPayloadPtr()
+{
+ const uint32_t u0 = optixGetPayload_0();
+ const uint32_t u1 = optixGetPayload_1();
+ return unpackOptiXRayPayloadPointer(u0, u1);
+}
+#endif