From a73929d8bb0e81a5d83bf655ed79e1b4979fd56b Mon Sep 17 00:00:00 2001 From: kevyuu Date: Fri, 15 Aug 2025 17:02:11 +0700 Subject: [PATCH 1/4] Add ray tracing spirv intrinsics --- .../hlsl/spirv_intrinsics/raytracing.hlsl | 71 ++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl b/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl index 41f56e225e..e0835ee555 100644 --- a/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl +++ b/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl @@ -86,14 +86,81 @@ static const float32_t3 HitTriangleVertexPositionsKHR[3]; [[vk::ext_instruction(spv::OpRayQueryGetIntersectionTriangleVertexPositionsKHR)]] float3 rayQueryGetIntersectionTriangleVertexPositionsKHR([[vk::ext_reference]] RayQueryKHR query, uint32_t committed)[3]; +[[vk::ext_builtin_input(spv::BuiltInLaunchIdKHR)]] +static const uint32_t3 LaunchIdKHR; +[[vk::ext_builtin_input(spv::BuiltInLaunchSizeKHR)]] +static const uint32_t3 LaunchSizeKHR; -//! Ray Tracing Pipeline stuff (TODO: @kevyu) +[[vk::ext_builtin_input(spv::BuiltInInstanceCustomIndexKHR)]] +static const uint32_t InstanceCustomIndexKHR; + +[[vk::ext_builtin_input(spv::BuiltInRayGeometryIndexKHR)]] +static const uint32_t RayGeometryIndexKHR; + +[[vk::ext_builtin_input(spv::BuiltInWorldRayOriginKHR)]] +static const float32_t3 WorldRayOriginKHR; + +[[vk::ext_builtin_input(spv::BuiltInWorldRayDirectionKHR)]] +static const float32_t3 WorldRayDirectionKHR; + +[[vk::ext_builtin_input(spv::BuiltInObjectRayOriginKHR)]] +static const float32_t3 ObjectRayOriginKHR; + +[[vk::ext_builtin_input(spv::BuiltInObjectRayDirectionKHR)]] +static const float32_t3 ObjectRayDirectionKHR; + +[[vk::ext_builtin_input(spv::BuiltInRayTminKHR)]] +static const float32_t RayTminKHR; + +[[vk::ext_builtin_input(spv::BuiltInRayTmaxKHR)]] +static const float32_t RayTmaxKHR; + +[[vk::ext_builtin_input(spv::BuiltInObjectToWorldKHR)]] +static const float32_t4x3 ObjectToWorldKHR; + +[[vk::ext_builtin_input(spv::BuiltInWorldToObjectKHR)]] +static const float32_t4x3 WorldToObjectKHR; + +[[vk::ext_builtin_input(spv::BuiltInHitKindKHR)]] +static const uint32_t HitKindKHR; + +[[vk::ext_builtin_input(spv::RayFlagsKHR)]] +static const uint32_t RayFlagsKHR; + +template +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] +[[vk::ext_instruction(spv::OpTraceRayKHR)]] +void traceRayKHR(AccelerationStructureKHR AS, uint32_t rayFlags, uint32_t cullMask, uint32_t sbtOffset, uint32_t sbtStride, uint32_t missIndex, float32_t3 rayOrigin, float32_t rayTmin, float32_t3 rayDirection, float32_t rayTmax, [[vk::ext_reference]] PayloadT payload); + +template +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] +[[vk::ext_instruction(spv::OpTraceRayKHR)]] +void traceRayKHR(RaytracingAccelerationStructure AS, uint32_t rayFlags, uint32_t cullMask, uint32_t sbtOffset, uint32_t sbtStride, uint32_t missIndex, float32_t3 rayOrigin, float32_t rayTmin, float32_t3 rayDirection, float32_t rayTmax, [[vk::ext_reference]] PayloadT payload); + +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] +[[vk::ext_instruction(spv::OpReportIntersectionKHR)]] +bool reportIntersectionKHR(float32_t hit, uint32_t hitKind); + +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] +[[vk::ext_instruction(spv::OpIgnoreIntersectionKHR)]] +void ignoreIntersectionKHR(); [[vk::ext_capability(spv::CapabilityRayTracingKHR)]] [[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_instruction(spv::OpTerminateRayKHR)]] -void terminateRay(); +void terminateRayKHR(); + +template +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] +[[vk::ext_instruction(spv::OpExecuteCallableKHR)]] +void executeCallable(uint32_t sbtIndex, [[vk::ext_reference]] T payload); + } } From 33d2a57655c942ab9acec9d69c0c1cc1b378fd0c Mon Sep 17 00:00:00 2001 From: kevyuu Date: Fri, 15 Aug 2025 17:25:22 +0700 Subject: [PATCH 2/4] Fix IncomingRayFlags intrinsics. --- include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl b/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl index e0835ee555..c3875745f7 100644 --- a/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl +++ b/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl @@ -125,8 +125,8 @@ static const float32_t4x3 WorldToObjectKHR; [[vk::ext_builtin_input(spv::BuiltInHitKindKHR)]] static const uint32_t HitKindKHR; -[[vk::ext_builtin_input(spv::RayFlagsKHR)]] -static const uint32_t RayFlagsKHR; +[[vk::ext_builtin_input(spv::BuiltInIncomingRayFlagsKHR)]] +static const uint32_t IncomingRayFlagsKHR; template [[vk::ext_capability(spv::CapabilityRayTracingKHR)]] From 3f0509fb05a3cf09a6853b5d8d686d60b3600a7f Mon Sep 17 00:00:00 2001 From: kevyuu Date: Mon, 18 Aug 2025 17:09:44 +0700 Subject: [PATCH 3/4] Add capability and extension for raytracing spirv builtin --- .../hlsl/spirv_intrinsics/raytracing.hlsl | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl b/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl index c3875745f7..2e77ef6d25 100644 --- a/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl +++ b/include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl @@ -86,45 +86,73 @@ static const float32_t3 HitTriangleVertexPositionsKHR[3]; [[vk::ext_instruction(spv::OpRayQueryGetIntersectionTriangleVertexPositionsKHR)]] float3 rayQueryGetIntersectionTriangleVertexPositionsKHR([[vk::ext_reference]] RayQueryKHR query, uint32_t committed)[3]; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInLaunchIdKHR)]] static const uint32_t3 LaunchIdKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInLaunchSizeKHR)]] static const uint32_t3 LaunchSizeKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInInstanceCustomIndexKHR)]] static const uint32_t InstanceCustomIndexKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInRayGeometryIndexKHR)]] static const uint32_t RayGeometryIndexKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInWorldRayOriginKHR)]] static const float32_t3 WorldRayOriginKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInWorldRayDirectionKHR)]] static const float32_t3 WorldRayDirectionKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInObjectRayOriginKHR)]] static const float32_t3 ObjectRayOriginKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInObjectRayDirectionKHR)]] static const float32_t3 ObjectRayDirectionKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInRayTminKHR)]] static const float32_t RayTminKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInRayTmaxKHR)]] static const float32_t RayTmaxKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInObjectToWorldKHR)]] static const float32_t4x3 ObjectToWorldKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInWorldToObjectKHR)]] static const float32_t4x3 WorldToObjectKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInHitKindKHR)]] static const uint32_t HitKindKHR; +[[vk::ext_capability(spv::CapabilityRayTracingKHR)]] +[[vk::ext_extension("SPV_KHR_ray_tracing")]] [[vk::ext_builtin_input(spv::BuiltInIncomingRayFlagsKHR)]] static const uint32_t IncomingRayFlagsKHR; From 26edc4a5c5a171bad2c355aae5ed87abdfe8ee4b Mon Sep 17 00:00:00 2001 From: kevyuu Date: Wed, 20 Aug 2025 17:35:02 +0700 Subject: [PATCH 4/4] Add PrimitiveId spirv intrinsics --- include/nbl/builtin/hlsl/spirv_intrinsics/core.hlsl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/nbl/builtin/hlsl/spirv_intrinsics/core.hlsl b/include/nbl/builtin/hlsl/spirv_intrinsics/core.hlsl index 4885fc11f8..b9475558e9 100644 --- a/include/nbl/builtin/hlsl/spirv_intrinsics/core.hlsl +++ b/include/nbl/builtin/hlsl/spirv_intrinsics/core.hlsl @@ -67,6 +67,8 @@ static const bool HelperInvocation; static const uint32_t VertexIndex; [[vk::ext_builtin_input(spv::BuiltInInstanceIndex)]] static const uint32_t InstanceIndex; +[[vk::ext_builtin_input(spv::BuiltInPrimitiveId)]] +static const uint32_t PrimitiveId; //! Vertex and friends [[vk::ext_builtin_output(spv::BuiltInPosition)]]