diff options
| author | Yong He <yonghe@outlook.com> | 2023-09-01 01:25:31 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-01 01:25:31 -0700 |
| commit | 9c11a87f8f811a9a110d73a24ab93443ea347506 (patch) | |
| tree | 9b1b0f154cff0faf7efd8d77fcd7f7911aea4a44 /tests | |
| parent | b7d19330c2d42937835d674758a05af3891e025b (diff) | |
Fix GLSL code gen around RayQuery and HitObject types. (#3173)
* Update slang-llvm.
* Fix.
* fix.
* Fix unit tests for multi-thread execution.
* Fix tests.
* fixes.
* update tests.
* Add gfx-smoke to linux expected failure list.
* Try fix test.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tests')
6 files changed, 259 insertions, 259 deletions
diff --git a/tests/bugs/ray-query-in-generic.slang b/tests/bugs/ray-query-in-generic.slang index 3de92b775..62cbf11b6 100644 --- a/tests/bugs/ray-query-in-generic.slang +++ b/tests/bugs/ray-query-in-generic.slang @@ -38,6 +38,11 @@ struct Ray RaytracingAccelerationStructure sceneBVH; +uint getCommittedStatus<let Flags : int>(RayQuery<Flags> q) +{ + return q.CommittedStatus(); +} + bool traceSceneVisibilityRayImpl<let Flags : int>(const bool useAlphaTest, inout RayQuery<Flags> q, const Ray ray, uint rayFlags, uint instanceInclusionMask) { var rayDesc = ray.toRayDesc(); @@ -47,7 +52,7 @@ bool traceSceneVisibilityRayImpl<let Flags : int>(const bool useAlphaTest, inout 0xff, rayDesc); q.Proceed(); - if (q.CommittedStatus() == COMMITTED_TRIANGLE_HIT) + if (getCommittedStatus(q) == COMMITTED_TRIANGLE_HIT) { q.CommittedRayT(); return true; diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang.1.expected b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang.1.expected index 9c4f57b68..9d4f4e5fb 100644 --- a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang.1.expected +++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang.1.expected @@ -5,6 +5,7 @@ standard output = { #version 460 #extension GL_EXT_ray_tracing : require #extension GL_NV_shader_invocation_reorder : require +#extension GL_EXT_spirv_intrinsics : require layout(row_major) uniform; layout(row_major) buffer; layout(binding = 0) @@ -31,48 +32,43 @@ struct RayDesc_0 float TMax_0; }; -void main() +RayDesc_0 HitObject_GetRayDesc_0(hitObjectNV this_0) { - uvec3 _S1 = ((gl_LaunchIDEXT)); - ivec2 launchID_0 = ivec2(_S1.xy); - uvec3 _S2 = ((gl_LaunchSizeEXT)); - int idx_0 = launchID_0.x; - RayDesc_0 ray_0; - ray_0.Origin_0 = vec3(float(idx_0), 0.0, 0.0); - ray_0.TMin_0 = 0.00999999977648258209; - ray_0.Direction_0 = vec3(0.0, 1.0, 0.0); - ray_0.TMax_0 = 10000.0; - uint _S3 = uint(idx_0); - uint _S4 = uint(idx_0 * 2); - uint _S5 = uint(idx_0 * 3); - RayDesc_0 _S6 = ray_0; - hitObjectNV hitObj_0; - int _S7 = int(_S3); - int _S8 = int(_S4); - int _S9 = int(_S5); - hitObjectRecordHitWithIndexNV(hitObj_0, scene_0, _S7, _S8, _S9, 0U, 0U, _S6.Origin_0, _S6.TMin_0, _S6.Direction_0, _S6.TMax_0, (0)); - bool _S10 = (hitObjectIsHitNV((hitObj_0))); + vec3 _S1 = (hitObjectGetWorldRayOriginNV((this_0))); + float _S2 = (hitObjectGetRayTMinNV((this_0))); + vec3 _S3 = (hitObjectGetObjectRayDirectionNV((this_0))); + float _S4 = (hitObjectGetRayTMaxNV((this_0))); + RayDesc_0 ray_0 = { _S1, _S2, _S3, _S4 }; + return ray_0; +} + +SomeValues_0 HitObject_GetAttributes_0(hitObjectNV this_1) +{ + hitObjectGetAttributesNV((this_1), ((0))); + return t_0; +} + +uint calcValue_0(spirv_by_reference hitObjectNV hit_0) +{ + bool _S5 = (hitObjectIsHitNV((hit_0))); uint r_0; - if(_S10) + if(_S5) { - uint instanceIndex_0 = (hitObjectGetInstanceCustomIndexNV((hitObj_0))); - uint instanceID_0 = (hitObjectGetInstanceIdNV((hitObj_0))); - uint geometryIndex_0 = (hitObjectGetGeometryIndexNV((hitObj_0))); - uint primitiveIndex_0 = (hitObjectGetPrimitiveIndexNV((hitObj_0))); - uint hitKind_0 = (hitObjectGetHitKindNV((hitObj_0))); + uint instanceIndex_0 = (hitObjectGetInstanceCustomIndexNV((hit_0))); + uint instanceID_0 = (hitObjectGetInstanceIdNV((hit_0))); + uint geometryIndex_0 = (hitObjectGetGeometryIndexNV((hit_0))); + uint primitiveIndex_0 = (hitObjectGetPrimitiveIndexNV((hit_0))); + uint hitKind_0 = (hitObjectGetHitKindNV((hit_0))); uint r_1 = hitKind_0 + instanceIndex_0 + instanceID_0 + geometryIndex_0 + primitiveIndex_0; - vec3 _S11 = (hitObjectGetWorldRayOriginNV((hitObj_0))); - float _S12 = (hitObjectGetRayTMinNV((hitObj_0))); - vec3 _S13 = (hitObjectGetObjectRayDirectionNV((hitObj_0))); - float _S14 = (hitObjectGetRayTMaxNV((hitObj_0))); - uint r_2 = r_1 + uint(_S12 > 0.0) + uint(_S14 < _S12); - hitObjectGetAttributesNV((hitObj_0), ((0))); - r_0 = uint(int(r_2) + t_0.a_0); + RayDesc_0 ray_1 = HitObject_GetRayDesc_0(hit_0); + uint r_2 = r_1 + uint(ray_1.TMin_0 > 0.0) + uint(ray_1.TMax_0 < ray_1.TMin_0); + SomeValues_0 objSomeValues_0 = HitObject_GetAttributes_0(hit_0); + r_0 = uint(int(r_2) + objSomeValues_0.a_0); } else { - bool _S15 = (hitObjectIsMissNV((hitObj_0))); - if(_S15) + bool _S6 = (hitObjectIsMissNV((hit_0))); + if(_S6) { r_0 = 1U; } @@ -81,40 +77,37 @@ void main() r_0 = 0U; } } - RayDesc_0 _S16 = ray_0; + return r_0; +} + +void main() +{ + uvec3 _S7 = ((gl_LaunchIDEXT)); + ivec2 launchID_0 = ivec2(_S7.xy); + uvec3 _S8 = ((gl_LaunchSizeEXT)); + int idx_0 = launchID_0.x; + RayDesc_0 ray_2; + ray_2.Origin_0 = vec3(float(idx_0), 0.0, 0.0); + ray_2.TMin_0 = 0.00999999977648258209; + ray_2.Direction_0 = vec3(0.0, 1.0, 0.0); + ray_2.TMax_0 = 10000.0; + uint _S9 = uint(idx_0); + uint _S10 = uint(idx_0 * 2); + uint _S11 = uint(idx_0 * 3); + RayDesc_0 _S12 = ray_2; + hitObjectNV hitObj_0; + int _S13 = int(_S9); + int _S14 = int(_S10); + int _S15 = int(_S11); + hitObjectRecordHitWithIndexNV(hitObj_0, scene_0, _S13, _S14, _S15, 0U, 0U, _S12.Origin_0, _S12.TMin_0, _S12.Direction_0, _S12.TMax_0, (0)); + hitObjectNV hit_1 = hitObj_0; + uint r_3 = calcValue_0(hit_1); + RayDesc_0 _S16 = ray_2; hitObjectNV hitObj_1; - hitObjectRecordHitNV(hitObj_1, scene_0, _S7, _S9, _S8, 0U, 0U, 4U, _S16.Origin_0, _S16.TMin_0, _S16.Direction_0, _S16.TMax_0, (0)); - bool _S17 = (hitObjectIsHitNV((hitObj_1))); - uint r_3; - if(_S17) - { - uint instanceIndex_1 = (hitObjectGetInstanceCustomIndexNV((hitObj_1))); - uint instanceID_1 = (hitObjectGetInstanceIdNV((hitObj_1))); - uint geometryIndex_1 = (hitObjectGetGeometryIndexNV((hitObj_1))); - uint primitiveIndex_1 = (hitObjectGetPrimitiveIndexNV((hitObj_1))); - uint hitKind_1 = (hitObjectGetHitKindNV((hitObj_1))); - uint r_4 = hitKind_1 + instanceIndex_1 + instanceID_1 + geometryIndex_1 + primitiveIndex_1; - vec3 _S18 = (hitObjectGetWorldRayOriginNV((hitObj_1))); - float _S19 = (hitObjectGetRayTMinNV((hitObj_1))); - vec3 _S20 = (hitObjectGetObjectRayDirectionNV((hitObj_1))); - float _S21 = (hitObjectGetRayTMaxNV((hitObj_1))); - uint r_5 = r_4 + uint(_S19 > 0.0) + uint(_S21 < _S19); - hitObjectGetAttributesNV((hitObj_1), ((0))); - r_3 = uint(int(r_5) + t_0.a_0); - } - else - { - bool _S22 = (hitObjectIsMissNV((hitObj_1))); - if(_S22) - { - r_3 = 1U; - } - else - { - r_3 = 0U; - } - } - outputBuffer_0._data[_S3] = r_0 + r_3; + hitObjectRecordHitNV(hitObj_1, scene_0, _S13, _S15, _S14, 0U, 0U, 4U, _S16.Origin_0, _S16.TMin_0, _S16.Direction_0, _S16.TMax_0, (0)); + hitObjectNV hit_2 = hitObj_1; + uint _S17 = calcValue_0(hit_2); + outputBuffer_0._data[_S9] = r_3 + _S17; return; } diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-output.slang.1.expected b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-output.slang.1.expected index 0eb445ba5..778aa0e58 100644 --- a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-output.slang.1.expected +++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-output.slang.1.expected @@ -5,6 +5,7 @@ standard output = { #version 460 #extension GL_EXT_ray_tracing : require #extension GL_NV_shader_invocation_reorder : require +#extension GL_EXT_spirv_intrinsics : require layout(row_major) uniform; layout(row_major) buffer; layout(binding = 0) @@ -58,58 +59,54 @@ hitObjectNV myTraceRay_0(uint idx_1) return hitObj_0; } -void main() +MyAttributes_0 HitObject_GetAttributes_0(hitObjectNV this_0) { - uvec3 _S1 = ((gl_LaunchIDEXT)); - uint idx_2 = _S1.x; - bool _S2 = (hitObjectIsHitNV((myTraceRay_0(idx_2)))); - uint r_0; - if(_S2) - { - hitObjectGetAttributesNV((myTraceRay_0(idx_2)), ((0))); - r_0 = 16U + t_0.value_0; - } - else - { - r_0 = 0U; - } - uint r_1 = r_0 * 256U; - bool _S3 = (hitObjectIsHitNV((myTraceRay_0(idx_2)))); - if(_S3) - { - hitObjectGetAttributesNV((myTraceRay_0(idx_2)), ((0))); - r_0 = r_1 + (16U + t_0.value_0); - } - else + hitObjectGetAttributesNV((this_0), ((0))); + return t_0; +} + +void accumulate_0(inout uint value_2, spirv_by_reference hitObjectNV hit_0) +{ + value_2 = value_2 * 256U; + bool _S1 = (hitObjectIsHitNV((hit_0))); + if(_S1) { - r_0 = r_1; + MyAttributes_0 _S2 = HitObject_GetAttributes_0(hit_0); + value_2 = value_2 + (16U + _S2.value_0); } + return; +} + +void copyHitObjectHandle_0(spirv_by_reference hitObjectNV dst_0, spirv_by_reference hitObjectNV src_0) +{ + dst_0 = src_0; + return; +} + +void myMakeMiss_0(uint idx_2, spirv_by_reference hitObjectNV h_0) +{ RayDesc_0 ray_2 = makeRay_0(idx_2, 1U); hitObjectNV hitObj_1; hitObjectRecordMissNV(hitObj_1, idx_2, ray_2.Origin_0, ray_2.TMin_0, ray_2.Direction_0, ray_2.TMax_0); - uint r_2 = r_0 * 256U; - bool _S4 = (hitObjectIsHitNV((hitObj_1))); - if(_S4) - { - hitObjectGetAttributesNV((hitObj_1), ((0))); - r_0 = r_2 + (16U + t_0.value_0); - } - else - { - r_0 = r_2; - } - uint r_3 = r_0 * 256U; - bool _S5 = (hitObjectIsHitNV((myTraceRay_0(idx_2)))); - if(_S5) - { - hitObjectGetAttributesNV((myTraceRay_0(idx_2)), ((0))); - r_0 = r_3 + (16U + t_0.value_0); - } - else - { - r_0 = r_3; - } - outputBuffer_0._data[idx_2] = r_0; + h_0 = hitObj_1; + return; +} + +void main() +{ + uvec3 _S3 = ((gl_LaunchIDEXT)); + uint idx_3 = _S3.x; + uint r_0 = 0U; + hitObjectNV hit_1 = myTraceRay_0(idx_3); + accumulate_0(r_0, hit_1); + hitObjectNV hit2_0; + copyHitObjectHandle_0(hit2_0, hit_1); + accumulate_0(r_0, hit2_0); + hitObjectNV hitBackup_0 = hit_1; + myMakeMiss_0(idx_3, hit_1); + accumulate_0(r_0, hit_1); + accumulate_0(r_0, hitBackup_0); + outputBuffer_0._data[idx_3] = r_0; return; } diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang.1.expected b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang.1.expected index 29fee14ab..167d27514 100644 --- a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang.1.expected +++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang.1.expected @@ -5,6 +5,7 @@ standard output = { #version 460 #extension GL_EXT_ray_tracing : require #extension GL_NV_shader_invocation_reorder : require +#extension GL_EXT_spirv_intrinsics : require layout(row_major) uniform; layout(row_major) buffer; layout(binding = 0) @@ -31,6 +32,40 @@ layout(location = 1) rayPayloadEXT SomeValues_0 p_1; +SomeValues_0 HitObject_GetAttributes_0(hitObjectNV this_0) +{ + hitObjectGetAttributesNV((this_0), ((0))); + return t_0; +} + +uint calcValue_0(spirv_by_reference hitObjectNV hit_0) +{ + bool _S1 = (hitObjectIsHitNV((hit_0))); + uint r_0; + if(_S1) + { + uint instanceIndex_0 = (hitObjectGetInstanceCustomIndexNV((hit_0))); + uint instanceID_0 = (hitObjectGetInstanceIdNV((hit_0))); + uint geometryIndex_0 = (hitObjectGetGeometryIndexNV((hit_0))); + uint primitiveIndex_0 = (hitObjectGetPrimitiveIndexNV((hit_0))); + SomeValues_0 objSomeValues_0 = HitObject_GetAttributes_0(hit_0); + r_0 = uint(int(instanceIndex_0 + instanceID_0 + geometryIndex_0 + primitiveIndex_0) + objSomeValues_0.a_0); + } + else + { + r_0 = 0U; + } + return r_0; +} + +void HitObject_Invoke_0(accelerationStructureEXT AccelerationStructure_0, spirv_by_reference hitObjectNV HitOrMiss_0, inout SomeValues_0 Payload_0) +{ + p_0 = Payload_0; + hitObjectExecuteShaderNV(HitOrMiss_0, (0)); + Payload_0 = p_0; + return; +} + struct RayDesc_0 { vec3 Origin_0; @@ -41,104 +76,46 @@ struct RayDesc_0 void main() { - uvec3 _S1 = ((gl_LaunchIDEXT)); - ivec2 launchID_0 = ivec2(_S1.xy); - uvec3 _S2 = ((gl_LaunchSizeEXT)); + uvec3 _S2 = ((gl_LaunchIDEXT)); + ivec2 launchID_0 = ivec2(_S2.xy); + uvec3 _S3 = ((gl_LaunchSizeEXT)); int idx_0 = launchID_0.x; - float _S3 = float(idx_0); - float _S4 = _S3 * 2.0; + float _S4 = float(idx_0); + float _S5 = _S4 * 2.0; RayDesc_0 ray_0; - ray_0.Origin_0 = vec3(_S3, 0.0, 0.0); + ray_0.Origin_0 = vec3(_S4, 0.0, 0.0); ray_0.TMin_0 = 0.00999999977648258209; ray_0.Direction_0 = vec3(0.0, 1.0, 0.0); ray_0.TMax_0 = 10000.0; - RayDesc_0 _S5 = ray_0; + RayDesc_0 _S6 = ray_0; hitObjectNV hitObj_0; p_1.a_0 = idx_0; - p_1.b_0 = _S4; - hitObjectTraceRayNV(hitObj_0, scene_0, 20U, 255U, 0U, 4U, 0U, _S5.Origin_0, _S5.TMin_0, _S5.Direction_0, _S5.TMax_0, (1)); - int _S6 = idx_0 * -1; - float _S7 = _S3 * 4.0; - uint _S8 = uint(idx_0 & 3); - int _S9 = idx_0 * -2; - float _S10 = _S3 * 8.0; - uint _S11 = uint(idx_0 & 1); - int _S12 = idx_0 * -4; - float _S13 = _S3 * 16.0; - uint _S14 = uint(idx_0); - bool _S15 = (hitObjectIsHitNV((hitObj_0))); - uint r_0; - if(_S15) - { - uint instanceIndex_0 = (hitObjectGetInstanceCustomIndexNV((hitObj_0))); - uint instanceID_0 = (hitObjectGetInstanceIdNV((hitObj_0))); - uint geometryIndex_0 = (hitObjectGetGeometryIndexNV((hitObj_0))); - uint primitiveIndex_0 = (hitObjectGetPrimitiveIndexNV((hitObj_0))); - hitObjectGetAttributesNV((hitObj_0), ((0))); - r_0 = uint(int(instanceIndex_0 + instanceID_0 + geometryIndex_0 + primitiveIndex_0) + t_0.a_0); - } - else - { - r_0 = 0U; - } - reorderThreadNV(hitObj_0); - p_0.a_0 = _S6; - p_0.b_0 = _S7; - hitObjectExecuteShaderNV(hitObj_0, (0)); - bool _S16 = (hitObjectIsHitNV((hitObj_0))); - uint r_1; - if(_S16) - { - uint instanceIndex_1 = (hitObjectGetInstanceCustomIndexNV((hitObj_0))); - uint instanceID_1 = (hitObjectGetInstanceIdNV((hitObj_0))); - uint geometryIndex_1 = (hitObjectGetGeometryIndexNV((hitObj_0))); - uint primitiveIndex_1 = (hitObjectGetPrimitiveIndexNV((hitObj_0))); - hitObjectGetAttributesNV((hitObj_0), ((0))); - r_1 = uint(int(instanceIndex_1 + instanceID_1 + geometryIndex_1 + primitiveIndex_1) + t_0.a_0); - } - else - { - r_1 = 0U; - } - uint r_2 = r_0 + r_1; - reorderThreadNV(hitObj_0, _S8, 2U); - p_0.a_0 = _S9; - p_0.b_0 = _S10; - hitObjectExecuteShaderNV(hitObj_0, (0)); - bool _S17 = (hitObjectIsHitNV((hitObj_0))); - if(_S17) - { - uint instanceIndex_2 = (hitObjectGetInstanceCustomIndexNV((hitObj_0))); - uint instanceID_2 = (hitObjectGetInstanceIdNV((hitObj_0))); - uint geometryIndex_2 = (hitObjectGetGeometryIndexNV((hitObj_0))); - uint primitiveIndex_2 = (hitObjectGetPrimitiveIndexNV((hitObj_0))); - hitObjectGetAttributesNV((hitObj_0), ((0))); - r_0 = uint(int(instanceIndex_2 + instanceID_2 + geometryIndex_2 + primitiveIndex_2) + t_0.a_0); - } - else - { - r_0 = 0U; - } - uint r_3 = r_2 + r_0; - reorderThreadNV(_S11, 1U); - p_0.a_0 = _S12; - p_0.b_0 = _S13; - hitObjectExecuteShaderNV(hitObj_0, (0)); - bool _S18 = (hitObjectIsHitNV((hitObj_0))); - if(_S18) - { - uint instanceIndex_3 = (hitObjectGetInstanceCustomIndexNV((hitObj_0))); - uint instanceID_3 = (hitObjectGetInstanceIdNV((hitObj_0))); - uint geometryIndex_3 = (hitObjectGetGeometryIndexNV((hitObj_0))); - uint primitiveIndex_3 = (hitObjectGetPrimitiveIndexNV((hitObj_0))); - hitObjectGetAttributesNV((hitObj_0), ((0))); - r_0 = uint(int(instanceIndex_3 + instanceID_3 + geometryIndex_3 + primitiveIndex_3) + t_0.a_0); - } - else - { - r_0 = 0U; - } - outputBuffer_0._data[_S14] = r_3 + r_0; + p_1.b_0 = _S5; + hitObjectTraceRayNV(hitObj_0, scene_0, 20U, 255U, 0U, 4U, 0U, _S6.Origin_0, _S6.TMin_0, _S6.Direction_0, _S6.TMax_0, (1)); + hitObjectNV hit_1 = hitObj_0; + uint r_1 = calcValue_0(hit_1); + reorderThreadNV(hit_1); + float _S7 = _S4 * 4.0; + SomeValues_0 otherValues_0; + otherValues_0.a_0 = idx_0 * -1; + otherValues_0.b_0 = _S7; + HitObject_Invoke_0(scene_0, hit_1, otherValues_0); + uint _S8 = calcValue_0(hit_1); + uint r_2 = r_1 + _S8; + reorderThreadNV(hit_1, uint(idx_0 & 3), 2U); + float _S9 = _S4 * 8.0; + otherValues_0.a_0 = idx_0 * -2; + otherValues_0.b_0 = _S9; + HitObject_Invoke_0(scene_0, hit_1, otherValues_0); + uint _S10 = calcValue_0(hit_1); + uint r_3 = r_2 + _S10; + reorderThreadNV(uint(idx_0 & 1), 1U); + float _S11 = _S4 * 16.0; + otherValues_0.a_0 = idx_0 * -4; + otherValues_0.b_0 = _S11; + HitObject_Invoke_0(scene_0, hit_1, otherValues_0); + uint _S12 = calcValue_0(hit_1); + outputBuffer_0._data[uint(idx_0)] = r_3 + _S12; return; } diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-motion-ray.slang.1.expected b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-motion-ray.slang.1.expected index 2b86e9613..298edfa02 100644 --- a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-motion-ray.slang.1.expected +++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-motion-ray.slang.1.expected @@ -4,8 +4,9 @@ standard error = { standard output = { #version 460 #extension GL_EXT_ray_tracing : require -#extension GL_NV_ray_tracing_motion_blur : require #extension GL_NV_shader_invocation_reorder : require +#extension GL_EXT_spirv_intrinsics : require +#extension GL_NV_ray_tracing_motion_blur : require layout(row_major) uniform; layout(row_major) buffer; layout(binding = 0) @@ -28,6 +29,32 @@ layout(location = 0) rayPayloadEXT SomeValues_0 p_0; +SomeValues_0 HitObject_GetAttributes_0(hitObjectNV this_0) +{ + hitObjectGetAttributesNV((this_0), ((0))); + return t_0; +} + +uint calcValue_0(spirv_by_reference hitObjectNV hit_0) +{ + bool _S1 = (hitObjectIsHitNV((hit_0))); + uint r_0; + if(_S1) + { + uint instanceIndex_0 = (hitObjectGetInstanceCustomIndexNV((hit_0))); + uint instanceID_0 = (hitObjectGetInstanceIdNV((hit_0))); + uint geometryIndex_0 = (hitObjectGetGeometryIndexNV((hit_0))); + uint primitiveIndex_0 = (hitObjectGetPrimitiveIndexNV((hit_0))); + SomeValues_0 objSomeValues_0 = HitObject_GetAttributes_0(hit_0); + r_0 = uint(int(instanceIndex_0 + instanceID_0 + geometryIndex_0 + primitiveIndex_0) + objSomeValues_0.a_0); + } + else + { + r_0 = 0U; + } + return r_0; +} + struct RayDesc_0 { vec3 Origin_0; @@ -38,40 +65,27 @@ struct RayDesc_0 void main() { - uvec3 _S1 = ((gl_LaunchIDEXT)); - ivec2 launchID_0 = ivec2(_S1.xy); - uvec3 _S2 = ((gl_LaunchSizeEXT)); + uvec3 _S2 = ((gl_LaunchIDEXT)); + ivec2 launchID_0 = ivec2(_S2.xy); + uvec3 _S3 = ((gl_LaunchSizeEXT)); int idx_0 = launchID_0.x; float currentTime_0 = float(idx_0 / 4); - float _S3 = float(idx_0); - float _S4 = _S3 * 2.0; + float _S4 = float(idx_0); + float _S5 = _S4 * 2.0; RayDesc_0 ray_0; - ray_0.Origin_0 = vec3(_S3, 0.0, 0.0); + ray_0.Origin_0 = vec3(_S4, 0.0, 0.0); ray_0.TMin_0 = 0.00999999977648258209; ray_0.Direction_0 = vec3(0.0, 1.0, 0.0); ray_0.TMax_0 = 10000.0; - RayDesc_0 _S5 = ray_0; + RayDesc_0 _S6 = ray_0; hitObjectNV hitObj_0; p_0.a_0 = idx_0; - p_0.b_0 = _S4; - hitObjectTraceRayMotionNV(hitObj_0, scene_0, 20U, 255U, 0U, 4U, 0U, _S5.Origin_0, _S5.TMin_0, _S5.Direction_0, _S5.TMax_0, currentTime_0, (0)); - uint _S6 = uint(idx_0); - bool _S7 = (hitObjectIsHitNV((hitObj_0))); - uint r_0; - if(_S7) - { - uint instanceIndex_0 = (hitObjectGetInstanceCustomIndexNV((hitObj_0))); - uint instanceID_0 = (hitObjectGetInstanceIdNV((hitObj_0))); - uint geometryIndex_0 = (hitObjectGetGeometryIndexNV((hitObj_0))); - uint primitiveIndex_0 = (hitObjectGetPrimitiveIndexNV((hitObj_0))); - hitObjectGetAttributesNV((hitObj_0), ((0))); - r_0 = uint(int(instanceIndex_0 + instanceID_0 + geometryIndex_0 + primitiveIndex_0) + t_0.a_0); - } - else - { - r_0 = 0U; - } - outputBuffer_0._data[_S6] = r_0; + p_0.b_0 = _S5; + hitObjectTraceRayMotionNV(hitObj_0, scene_0, 20U, 255U, 0U, 4U, 0U, _S6.Origin_0, _S6.TMin_0, _S6.Direction_0, _S6.TMax_0, currentTime_0, (0)); + hitObjectNV hit_1 = hitObj_0; + uint _S7 = uint(idx_0); + uint _S8 = calcValue_0(hit_1); + outputBuffer_0._data[_S7] = _S8; return; } diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang.1.expected b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang.1.expected index 8e89ec1c5..e6091a555 100644 --- a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang.1.expected +++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang.1.expected @@ -5,6 +5,7 @@ standard output = { #version 460 #extension GL_EXT_ray_tracing : require #extension GL_NV_shader_invocation_reorder : require +#extension GL_EXT_spirv_intrinsics : require layout(row_major) uniform; layout(row_major) buffer; layout(binding = 0) @@ -27,6 +28,32 @@ layout(location = 0) rayPayloadEXT SomeValues_0 p_0; +SomeValues_0 HitObject_GetAttributes_0(hitObjectNV this_0) +{ + hitObjectGetAttributesNV((this_0), ((0))); + return t_0; +} + +uint calcValue_0(spirv_by_reference hitObjectNV hit_0) +{ + bool _S1 = (hitObjectIsHitNV((hit_0))); + uint r_0; + if(_S1) + { + uint instanceIndex_0 = (hitObjectGetInstanceCustomIndexNV((hit_0))); + uint instanceID_0 = (hitObjectGetInstanceIdNV((hit_0))); + uint geometryIndex_0 = (hitObjectGetGeometryIndexNV((hit_0))); + uint primitiveIndex_0 = (hitObjectGetPrimitiveIndexNV((hit_0))); + SomeValues_0 objSomeValues_0 = HitObject_GetAttributes_0(hit_0); + r_0 = uint(int(instanceIndex_0 + instanceID_0 + geometryIndex_0 + primitiveIndex_0) + objSomeValues_0.a_0); + } + else + { + r_0 = 0U; + } + return r_0; +} + struct RayDesc_0 { vec3 Origin_0; @@ -37,39 +64,26 @@ struct RayDesc_0 void main() { - uvec3 _S1 = ((gl_LaunchIDEXT)); - ivec2 launchID_0 = ivec2(_S1.xy); - uvec3 _S2 = ((gl_LaunchSizeEXT)); + uvec3 _S2 = ((gl_LaunchIDEXT)); + ivec2 launchID_0 = ivec2(_S2.xy); + uvec3 _S3 = ((gl_LaunchSizeEXT)); int idx_0 = launchID_0.x; - float _S3 = float(idx_0); - float _S4 = _S3 * 2.0; + float _S4 = float(idx_0); + float _S5 = _S4 * 2.0; RayDesc_0 ray_0; - ray_0.Origin_0 = vec3(_S3, 0.0, 0.0); + ray_0.Origin_0 = vec3(_S4, 0.0, 0.0); ray_0.TMin_0 = 0.00999999977648258209; ray_0.Direction_0 = vec3(0.0, 1.0, 0.0); ray_0.TMax_0 = 10000.0; - RayDesc_0 _S5 = ray_0; + RayDesc_0 _S6 = ray_0; hitObjectNV hitObj_0; p_0.a_0 = idx_0; - p_0.b_0 = _S4; - hitObjectTraceRayNV(hitObj_0, scene_0, 20U, 255U, 0U, 4U, 0U, _S5.Origin_0, _S5.TMin_0, _S5.Direction_0, _S5.TMax_0, (0)); - uint _S6 = uint(idx_0); - bool _S7 = (hitObjectIsHitNV((hitObj_0))); - uint r_0; - if(_S7) - { - uint instanceIndex_0 = (hitObjectGetInstanceCustomIndexNV((hitObj_0))); - uint instanceID_0 = (hitObjectGetInstanceIdNV((hitObj_0))); - uint geometryIndex_0 = (hitObjectGetGeometryIndexNV((hitObj_0))); - uint primitiveIndex_0 = (hitObjectGetPrimitiveIndexNV((hitObj_0))); - hitObjectGetAttributesNV((hitObj_0), ((0))); - r_0 = uint(int(instanceIndex_0 + instanceID_0 + geometryIndex_0 + primitiveIndex_0) + t_0.a_0); - } - else - { - r_0 = 0U; - } - outputBuffer_0._data[_S6] = r_0; + p_0.b_0 = _S5; + hitObjectTraceRayNV(hitObj_0, scene_0, 20U, 255U, 0U, 4U, 0U, _S6.Origin_0, _S6.TMin_0, _S6.Direction_0, _S6.TMax_0, (0)); + hitObjectNV hit_1 = hitObj_0; + uint _S7 = uint(idx_0); + uint _S8 = calcValue_0(hit_1); + outputBuffer_0._data[_S7] = _S8; return; } |
