Skip to content

Commit 4f029c8

Browse files
committed
implemented ray query methods
1 parent b43d4df commit 4f029c8

File tree

1 file changed

+23
-9
lines changed

1 file changed

+23
-9
lines changed

include/nbl/builtin/hlsl/spirv_intrinsics/raytracing.hlsl

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#ifndef _NBL_BUILTIN_HLSL_SPIRV_INTRINSICS_RAYTRACING_INCLUDED_
55
#define _NBL_BUILTIN_HLSL_SPIRV_INTRINSICS_RAYTRACING_INCLUDED_
66

7-
// #include "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
7+
#include "nbl/builtin/hlsl/spirv_intrinsics/core.hlsl"
88

99
namespace nbl
1010
{
@@ -13,33 +13,47 @@ namespace hlsl
1313
namespace spirv
1414
{
1515

16+
using RayQueryKHR = vk::SpirvOpaqueType<spv::OpTypeRayQueryKHR>;
17+
using AccelerationStructureKHR = vk::SpirvOpaqueType<spv::OpTypeAccelerationStructureKHR>;
18+
19+
// matching Ray Query Committed Intersection Type
20+
static const uint32_t RayQueryCommittedIntersectionNoneKHR = 0;
21+
static const uint32_t RayQueryCommittedIntersectionTriangleKHR = 1;
22+
static const uint32_t RayQueryCommittedIntersectionGeneratedKHR = 2;
23+
24+
// matching Ray Query Candidate Intersection Type
25+
static const uint32_t RayQueryCandidateIntersectionTriangleKHR = 0;
26+
static const uint32_t RayQueryCandidateIntersectionAABBKHR = 1;
27+
28+
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
29+
[[vk::ext_instruction(spv::OpRayQueryInitializeKHR)]]
30+
void rayQueryInitializeEXT([[vk::ext_reference]] RayQueryKHR query, [[vk::ext_reference]] AccelerationStructureKHR AS, uint32_t flags, uint32_t cull mask, float3 origin, float32_t tmin, float3 direction, float32_t tmax);
31+
1632
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
1733
[[vk::ext_instruction(spv::OpRayQueryInitializeKHR)]]
18-
void rayQueryInitializeEXT(/* spv::OpTypeRayQueryKHR function_ptr query, spv::OpTypeAccelerationStructureKHR AS, uint32_t flags, uint32_t cull mask, float3 origin, float32_t tmin, float3 direction, float32_t tmax*/);
34+
void rayQueryInitializeEXT([[vk::ext_reference]] RayQueryKHR query, [[vk::ext_reference]] RaytracingAccelerationStructure AS, uint32_t flags, uint32_t cull mask, float3 origin, float32_t tmin, float3 direction, float32_t tmax);
1935

2036
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
2137
[[vk::ext_instruction(spv::OpRayQueryProceedKHR)]]
22-
bool rayQueryProceedEXT(/* spv::OpTypeRayQueryKHR function_ptr query */);
38+
bool rayQueryProceedEXT([[vk::ext_reference]] RayQueryKHR query);
2339

2440
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
2541
[[vk::ext_instruction(spv::OpRayQueryGetIntersectionTypeKHR)]]
26-
int rayQueryGetIntersectionTypeEXT(/* spv::OpTypeRayQueryKHR function_ptr query, uint32_t intersection (candidate 0, commited 1) */);
42+
int rayQueryGetIntersectionTypeEXT([[vk::ext_reference]] RayQueryKHR query, uint32_t intersection);
2743

2844
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
2945
[[vk::ext_instruction(spv::OpRayQueryGetIntersectionInstanceIdKHR)]]
30-
int rayQueryGetIntersectionInstanceIdEXT(/* spv::OpTypeRayQueryKHR function_ptr query, uint32_t intersection (candidate 0, commited 1) */);
46+
int rayQueryGetIntersectionInstanceIdEXT([[vk::ext_reference]] RayQueryKHR query, uint32_t intersection);
3147

3248
[[vk::ext_capability(spv::CapabilityRayQueryKHR)]]
3349
[[vk::ext_instruction(spv::OpRayQueryGetIntersectionPrimitiveIndexKHR)]]
34-
int rayQueryGetIntersectionPrimitiveIndexEXT(/* spv::OpTypeRayQueryKHR function_ptr query, uint32_t intersection (candidate 0, commited 1) */);
50+
int rayQueryGetIntersectionPrimitiveIndexEXT([[vk::ext_reference]] RayQueryKHR query, uint32_t intersection);
3551

3652
// position fetch for ray tracing uses gl_HitTriangleVertexPositionsEXT -> HitTriangleVertexPositionsKHR decorated OpVariable
3753

3854
[[vk::ext_capability(spv::CapabilityRayQueryPositionFetchKHR)]]
3955
[[vk::ext_instruction(spv::OpRayQueryGetIntersectionTriangleVertexPositionsKHR)]] // ray query version
40-
// get intersection triangle vertex position - gl_HitTriangleVertexPositionsEXT
41-
// returns 3-array float3 vertex positions
42-
void rayQueryGetIntersectionTriangleVertexPositionsEXT(/* spv::OpTypeRayQueryKHR function_ptr query, uint32_t intersection (candidate 0, commited 1), out float3 positions[3] */);
56+
void rayQueryGetIntersectionTriangleVertexPositionsEXT([[vk::ext_reference]] RayQueryKHR query, uint32_t intersection, out float32_t3 pos[3]);
4357

4458
}
4559
}

0 commit comments

Comments
 (0)