From 408d968de57aba18ec4b07bda79288766a74e317 Mon Sep 17 00:00:00 2001 From: Simon Moll Date: Tue, 17 Jun 2025 07:59:47 +0200 Subject: [PATCH] [SER] Move AST tests to SemaHLSL Closes #7359 --- .../hlsl/intrinsics/maybereorder.hlsl | 19 ---- .../objects/HitObject/hitobject_make.hlsl | 38 -------- .../HitObject/hitobject_traceinvoke.hlsl | 57 ------------ .../intrinsics/reorder/maybereorder_ast.hlsl | 27 ++++++ .../objects/HitObject/hitobject_make_ast.hlsl | 61 +++++++++++++ .../HitObject/hitobject_traceinvoke_ast.hlsl | 89 +++++++++++++++++++ 6 files changed, 177 insertions(+), 114 deletions(-) create mode 100644 tools/clang/test/SemaHLSL/hlsl/intrinsics/reorder/maybereorder_ast.hlsl create mode 100644 tools/clang/test/SemaHLSL/hlsl/objects/HitObject/hitobject_make_ast.hlsl create mode 100644 tools/clang/test/SemaHLSL/hlsl/objects/HitObject/hitobject_traceinvoke_ast.hlsl diff --git a/tools/clang/test/CodeGenDXIL/hlsl/intrinsics/maybereorder.hlsl b/tools/clang/test/CodeGenDXIL/hlsl/intrinsics/maybereorder.hlsl index 08836dfbaf..8c594fb251 100644 --- a/tools/clang/test/CodeGenDXIL/hlsl/intrinsics/maybereorder.hlsl +++ b/tools/clang/test/CodeGenDXIL/hlsl/intrinsics/maybereorder.hlsl @@ -1,24 +1,5 @@ // RUN: %dxc -T lib_6_9 -E main %s | FileCheck %s --check-prefix DXIL // RUN: %dxc -T lib_6_9 -E main %s -fcgl | FileCheck %s --check-prefix FCGL -// RUN: %dxc -T lib_6_9 -E main %s -ast-dump-implicit | FileCheck %s --check-prefix AST - -// AST: |-FunctionDecl {{[^ ]+}} <> implicit used MaybeReorderThread 'void (dx::HitObject)' extern -// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <> HitObject 'dx::HitObject':'dx::HitObject' -// AST-NEXT: | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 359 -// AST-NEXT: | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" - -// AST: |-FunctionDecl {{[^ ]+}} <> implicit used MaybeReorderThread 'void (dx::HitObject, unsigned int, unsigned int)' extern -// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <> HitObject 'dx::HitObject':'dx::HitObject' -// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <> CoherenceHint 'unsigned int' -// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <> NumCoherenceHintBitsFromLSB 'unsigned int' -// AST-NEXT: | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 359 -// AST-NEXT: | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" - -// AST: `-FunctionDecl {{[^ ]+}} <> implicit used MaybeReorderThread 'void (unsigned int, unsigned int)' extern -// AST-NEXT: |-ParmVarDecl {{[^ ]+}} <> CoherenceHint 'unsigned int' -// AST-NEXT: |-ParmVarDecl {{[^ ]+}} <> NumCoherenceHintBitsFromLSB 'unsigned int' -// AST-NEXT: |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 359 -// AST-NEXT: `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" // FCGL: call void @"dx.hl.op..void (i32, %dx.types.HitObject*)"(i32 359, %dx.types.HitObject* %[[NOP:[^ ]+]]) // FCGL-NEXT: call void @"dx.hl.op..void (i32, %dx.types.HitObject*, i32, i32)"(i32 359, %dx.types.HitObject* %[[NOP]], i32 241, i32 3) diff --git a/tools/clang/test/CodeGenDXIL/hlsl/objects/HitObject/hitobject_make.hlsl b/tools/clang/test/CodeGenDXIL/hlsl/objects/HitObject/hitobject_make.hlsl index cc9515d7c1..b93bba4ded 100644 --- a/tools/clang/test/CodeGenDXIL/hlsl/objects/HitObject/hitobject_make.hlsl +++ b/tools/clang/test/CodeGenDXIL/hlsl/objects/HitObject/hitobject_make.hlsl @@ -1,43 +1,5 @@ // RUN: %dxc -T lib_6_9 -E main %s | FileCheck %s --check-prefix DXIL // RUN: %dxc -T lib_6_9 -E main %s -fcgl | FileCheck %s --check-prefix FCGL -// RUN: %dxc -T lib_6_9 -E main %s -ast-dump-implicit | FileCheck %s --check-prefix AST - -// AST: | |-CXXRecordDecl {{[^ ]+}} <> implicit referenced class HitObject definition -// AST-NEXT: | | |-FinalAttr {{[^ ]+}} <> Implicit final -// AST-NEXT: | | |-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" -// AST-NEXT: | | |-HLSLHitObjectAttr {{[^ ]+}} <> Implicit -// AST-NEXT: | | |-FieldDecl {{[^ ]+}} <> implicit h 'int' -// AST-NEXT: | | |-CXXConstructorDecl {{[^ ]+}} <> used HitObject 'void ()' -// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 358 -// AST-NEXT: | | | `-HLSLCXXOverloadAttr {{[^ ]+}} <> Implicit - -// AST: | | |-FunctionTemplateDecl {{[^ ]+}} <> MakeMiss -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TResult -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TRayFlags -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TMissShaderIndex -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TRay -// AST-NEXT: | | | |-CXXMethodDecl {{[^ ]+}} <> implicit MakeMiss 'TResult (TRayFlags, TMissShaderIndex, TRay) const' static -// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> RayFlags 'TRayFlags' -// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> MissShaderIndex 'TMissShaderIndex' -// AST-NEXT: | | | | `-ParmVarDecl {{[^ ]+}} <> Ray 'TRay' -// AST-NEXT: | | | `-CXXMethodDecl {{[^ ]+}} <> used MakeMiss 'dx::HitObject (unsigned int, unsigned int, RayDesc)' static -// AST-NEXT: | | | |-TemplateArgument type 'dx::HitObject' -// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' -// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' -// AST-NEXT: | | | |-TemplateArgument type 'RayDesc' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> RayFlags 'unsigned int' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> MissShaderIndex 'unsigned int' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> Ray 'RayDesc' -// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 387 -// AST-NEXT: | | | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" - -// AST: | | |-FunctionTemplateDecl {{[^ ]+}} <> MakeNop -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TResult -// AST-NEXT: | | | |-CXXMethodDecl {{[^ ]+}} <> implicit MakeNop 'TResult () const' static -// AST-NEXT: | | | `-CXXMethodDecl {{[^ ]+}} <> used MakeNop 'dx::HitObject ()' static -// AST-NEXT: | | | |-TemplateArgument type 'dx::HitObject' -// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 358 -// AST-NEXT: | | | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" // FCGL: %{{[^ ]+}} = call %dx.types.HitObject* @"dx.hl.op..%dx.types.HitObject* (i32, %dx.types.HitObject*)"(i32 358, %dx.types.HitObject* %{{[^ ]+}}) // FCGL: call void @"dx.hl.op..void (i32, %dx.types.HitObject*)"(i32 358, %dx.types.HitObject* %{{[^ ]+}}) diff --git a/tools/clang/test/CodeGenDXIL/hlsl/objects/HitObject/hitobject_traceinvoke.hlsl b/tools/clang/test/CodeGenDXIL/hlsl/objects/HitObject/hitobject_traceinvoke.hlsl index 4ea00475f1..5642e70174 100644 --- a/tools/clang/test/CodeGenDXIL/hlsl/objects/HitObject/hitobject_traceinvoke.hlsl +++ b/tools/clang/test/CodeGenDXIL/hlsl/objects/HitObject/hitobject_traceinvoke.hlsl @@ -1,63 +1,6 @@ -// RUN: %dxc -T lib_6_9 -E main %s -ast-dump-implicit | FileCheck %s --check-prefix AST // RUN: %dxc -T lib_6_9 -E main %s -fcgl | FileCheck %s --check-prefix FCGL // RUN: %dxc -T lib_6_9 -E main %s | FileCheck %s --check-prefix DXIL -// AST: | | |-FunctionTemplateDecl {{[^ ]+}} <> Invoke -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TResult -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class Tho -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TPayload -// AST-NEXT: | | | |-CXXMethodDecl {{[^ ]+}} <> implicit Invoke 'TResult (Tho, TPayload &) const' static -// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> ho 'Tho' -// AST-NEXT: | | | | `-ParmVarDecl {{[^ ]+}} <> Payload 'TPayload &' -// AST-NEXT: | | | `-CXXMethodDecl {{[^ ]+}} <> used Invoke 'void (dx::HitObject, Payload &)' static -// AST-NEXT: | | | |-TemplateArgument type 'void' -// AST-NEXT: | | | |-TemplateArgument type 'dx::HitObject':'dx::HitObject' -// AST-NEXT: | | | |-TemplateArgument type 'Payload' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> ho 'dx::HitObject':'dx::HitObject' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> Payload 'Payload &&__restrict' -// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 382 -// AST-NEXT: | | | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" - -// AST: | | |-FunctionTemplateDecl {{[^ ]+}} <> TraceRay -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TResult -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TAccelerationStructure -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TRayFlags -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TInstanceInclusionMask -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TRayContributionToHitGroupIndex -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TMultiplierForGeometryContributionToHitGroupIndex -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TMissShaderIndex -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TRay -// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TPayload -// AST-NEXT: | | | |-CXXMethodDecl {{[^ ]+}} <> implicit TraceRay 'TResult (TAccelerationStructure, TRayFlags, TInstanceInclusionMask, TRayContributionToHitGroupIndex, TMultiplierForGeometryContributionToHitGroupIndex, TMissShaderIndex, TRay, TPayload &) const' static -// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> AccelerationStructure 'TAccelerationStructure' -// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> RayFlags 'TRayFlags' -// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> InstanceInclusionMask 'TInstanceInclusionMask' -// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> RayContributionToHitGroupIndex 'TRayContributionToHitGroupIndex' -// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> MultiplierForGeometryContributionToHitGroupIndex 'TMultiplierForGeometryContributionToHitGroupIndex' -// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> MissShaderIndex 'TMissShaderIndex' -// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> Ray 'TRay' -// AST-NEXT: | | | | `-ParmVarDecl {{[^ ]+}} <> Payload 'TPayload &' -// AST-NEXT: | | | `-CXXMethodDecl {{[^ ]+}} <> used TraceRay 'dx::HitObject (RaytracingAccelerationStructure, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, RayDesc, Payload &)' static -// AST-NEXT: | | | |-TemplateArgument type 'dx::HitObject' -// AST-NEXT: | | | |-TemplateArgument type 'RaytracingAccelerationStructure' -// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' -// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' -// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' -// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' -// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' -// AST-NEXT: | | | |-TemplateArgument type 'RayDesc' -// AST-NEXT: | | | |-TemplateArgument type 'Payload' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> AccelerationStructure 'RaytracingAccelerationStructure' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> RayFlags 'unsigned int' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> InstanceInclusionMask 'unsigned int' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> RayContributionToHitGroupIndex 'unsigned int' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> MultiplierForGeometryContributionToHitGroupIndex 'unsigned int' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> MissShaderIndex 'unsigned int' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> Ray 'RayDesc' -// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> Payload 'Payload &&__restrict' -// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 389 -// AST-NEXT: | | | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" - // FCGL: %[[HANDLE:[^ ]+]] = call %dx.types.Handle @"dx.hl.annotatehandle..%dx.types.Handle (i32, %dx.types.Handle, %dx.types.ResourceProperties, %struct.RaytracingAccelerationStructure)"(i32 14, %dx.types.Handle %{{[^ ]+}}, %dx.types.ResourceProperties { i32 16, i32 0 }, %struct.RaytracingAccelerationStructure undef) // FCGL-NEXT: call void @"dx.hl.op..void (i32, %dx.types.HitObject*, %dx.types.Handle, i32, i32, i32, i32, i32, %struct.RayDesc*, %struct.Payload*)"(i32 389, %dx.types.HitObject* %{{[^ ]+}}, %dx.types.Handle %[[HANDLE]], i32 513, i32 1, i32 2, i32 4, i32 0, %struct.RayDesc* %{{[^ ]+}}, %struct.Payload* %{{[^ ]+}}) // FCGL-NEXT: call void @"dx.hl.op..void (i32, %dx.types.HitObject*, %struct.Payload*)"(i32 382, %dx.types.HitObject* %{{[^ ]+}}, %struct.Payload* %{{[^ ]+}}) diff --git a/tools/clang/test/SemaHLSL/hlsl/intrinsics/reorder/maybereorder_ast.hlsl b/tools/clang/test/SemaHLSL/hlsl/intrinsics/reorder/maybereorder_ast.hlsl new file mode 100644 index 0000000000..37dcb084aa --- /dev/null +++ b/tools/clang/test/SemaHLSL/hlsl/intrinsics/reorder/maybereorder_ast.hlsl @@ -0,0 +1,27 @@ +// RUN: %dxc -T lib_6_9 -E main %s -ast-dump-implicit | FileCheck %s --check-prefix AST + +// AST: |-FunctionDecl {{[^ ]+}} <> implicit used MaybeReorderThread 'void (dx::HitObject)' extern +// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <> HitObject 'dx::HitObject':'dx::HitObject' +// AST-NEXT: | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 359 +// AST-NEXT: | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" + +// AST: |-FunctionDecl {{[^ ]+}} <> implicit used MaybeReorderThread 'void (dx::HitObject, unsigned int, unsigned int)' extern +// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <> HitObject 'dx::HitObject':'dx::HitObject' +// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <> CoherenceHint 'unsigned int' +// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <> NumCoherenceHintBitsFromLSB 'unsigned int' +// AST-NEXT: | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 359 +// AST-NEXT: | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" + +// AST: `-FunctionDecl {{[^ ]+}} <> implicit used MaybeReorderThread 'void (unsigned int, unsigned int)' extern +// AST-NEXT: |-ParmVarDecl {{[^ ]+}} <> CoherenceHint 'unsigned int' +// AST-NEXT: |-ParmVarDecl {{[^ ]+}} <> NumCoherenceHintBitsFromLSB 'unsigned int' +// AST-NEXT: |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 359 +// AST-NEXT: `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" + +[shader("raygeneration")] +void main() { + dx::HitObject hit; + dx::MaybeReorderThread(hit); + dx::MaybeReorderThread(hit, 0xf1, 3); + dx::MaybeReorderThread(0xf2, 7); +} \ No newline at end of file diff --git a/tools/clang/test/SemaHLSL/hlsl/objects/HitObject/hitobject_make_ast.hlsl b/tools/clang/test/SemaHLSL/hlsl/objects/HitObject/hitobject_make_ast.hlsl new file mode 100644 index 0000000000..ab604b9213 --- /dev/null +++ b/tools/clang/test/SemaHLSL/hlsl/objects/HitObject/hitobject_make_ast.hlsl @@ -0,0 +1,61 @@ +// RUN: %dxc -T lib_6_9 -E main %s -ast-dump-implicit | FileCheck %s --check-prefix AST + +// AST: | |-CXXRecordDecl {{[^ ]+}} <> implicit referenced class HitObject definition +// AST-NEXT: | | |-FinalAttr {{[^ ]+}} <> Implicit final +// AST-NEXT: | | |-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" +// AST-NEXT: | | |-HLSLHitObjectAttr {{[^ ]+}} <> Implicit +// AST-NEXT: | | |-FieldDecl {{[^ ]+}} <> implicit h 'int' +// AST-NEXT: | | |-CXXConstructorDecl {{[^ ]+}} <> used HitObject 'void ()' +// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 358 +// AST-NEXT: | | | `-HLSLCXXOverloadAttr {{[^ ]+}} <> Implicit + +// AST: | | |-FunctionTemplateDecl {{[^ ]+}} <> MakeMiss +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TResult +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TRayFlags +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TMissShaderIndex +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TRay +// AST-NEXT: | | | |-CXXMethodDecl {{[^ ]+}} <> implicit MakeMiss 'TResult (TRayFlags, TMissShaderIndex, TRay) const' static +// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> RayFlags 'TRayFlags' +// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> MissShaderIndex 'TMissShaderIndex' +// AST-NEXT: | | | | `-ParmVarDecl {{[^ ]+}} <> Ray 'TRay' +// AST-NEXT: | | | `-CXXMethodDecl {{[^ ]+}} <> used MakeMiss 'dx::HitObject (unsigned int, unsigned int, RayDesc)' static +// AST-NEXT: | | | |-TemplateArgument type 'dx::HitObject' +// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' +// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' +// AST-NEXT: | | | |-TemplateArgument type 'RayDesc' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> RayFlags 'unsigned int' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> MissShaderIndex 'unsigned int' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> Ray 'RayDesc' +// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 387 +// AST-NEXT: | | | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" + +// AST: | | |-FunctionTemplateDecl {{[^ ]+}} <> MakeNop +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TResult +// AST-NEXT: | | | |-CXXMethodDecl {{[^ ]+}} <> implicit MakeNop 'TResult () const' static +// AST-NEXT: | | | `-CXXMethodDecl {{[^ ]+}} <> used MakeNop 'dx::HitObject ()' static +// AST-NEXT: | | | |-TemplateArgument type 'dx::HitObject' +// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 358 +// AST-NEXT: | | | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" + +void Use(in dx::HitObject hit) { + dx::MaybeReorderThread(hit); +} + +[shader("raygeneration")] +void main() { + dx::HitObject nop; + Use(nop); + + dx::HitObject nop2 = dx::HitObject::MakeNop(); + Use(nop2); + + RayDesc ray = {{0,0,0}, {0,0,1}, 0.05, 1000.0}; + dx::HitObject miss = dx::HitObject::MakeMiss(0, 1, ray); + Use(miss); + + dx::HitObject miss2 = dx::HitObject::MakeMiss(0, 1, ray); + Use(miss2); + + dx::HitObject miss3 = dx::HitObject::MakeMiss(0, 2, ray); + Use(miss3); +} \ No newline at end of file diff --git a/tools/clang/test/SemaHLSL/hlsl/objects/HitObject/hitobject_traceinvoke_ast.hlsl b/tools/clang/test/SemaHLSL/hlsl/objects/HitObject/hitobject_traceinvoke_ast.hlsl new file mode 100644 index 0000000000..d979c7301f --- /dev/null +++ b/tools/clang/test/SemaHLSL/hlsl/objects/HitObject/hitobject_traceinvoke_ast.hlsl @@ -0,0 +1,89 @@ +// RUN: %dxc -T lib_6_9 -E main %s -ast-dump-implicit | FileCheck %s --check-prefix AST + +// AST: | | |-FunctionTemplateDecl {{[^ ]+}} <> Invoke +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TResult +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class Tho +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TPayload +// AST-NEXT: | | | |-CXXMethodDecl {{[^ ]+}} <> implicit Invoke 'TResult (Tho, TPayload &) const' static +// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> ho 'Tho' +// AST-NEXT: | | | | `-ParmVarDecl {{[^ ]+}} <> Payload 'TPayload &' +// AST-NEXT: | | | `-CXXMethodDecl {{[^ ]+}} <> used Invoke 'void (dx::HitObject, Payload &)' static +// AST-NEXT: | | | |-TemplateArgument type 'void' +// AST-NEXT: | | | |-TemplateArgument type 'dx::HitObject':'dx::HitObject' +// AST-NEXT: | | | |-TemplateArgument type 'Payload' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> ho 'dx::HitObject':'dx::HitObject' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> Payload 'Payload &&__restrict' +// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 382 +// AST-NEXT: | | | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" + +// AST: | | |-FunctionTemplateDecl {{[^ ]+}} <> TraceRay +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TResult +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TAccelerationStructure +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TRayFlags +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TInstanceInclusionMask +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TRayContributionToHitGroupIndex +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TMultiplierForGeometryContributionToHitGroupIndex +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TMissShaderIndex +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TRay +// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <> class TPayload +// AST-NEXT: | | | |-CXXMethodDecl {{[^ ]+}} <> implicit TraceRay 'TResult (TAccelerationStructure, TRayFlags, TInstanceInclusionMask, TRayContributionToHitGroupIndex, TMultiplierForGeometryContributionToHitGroupIndex, TMissShaderIndex, TRay, TPayload &) const' static +// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> AccelerationStructure 'TAccelerationStructure' +// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> RayFlags 'TRayFlags' +// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> InstanceInclusionMask 'TInstanceInclusionMask' +// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> RayContributionToHitGroupIndex 'TRayContributionToHitGroupIndex' +// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> MultiplierForGeometryContributionToHitGroupIndex 'TMultiplierForGeometryContributionToHitGroupIndex' +// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> MissShaderIndex 'TMissShaderIndex' +// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <> Ray 'TRay' +// AST-NEXT: | | | | `-ParmVarDecl {{[^ ]+}} <> Payload 'TPayload &' +// AST-NEXT: | | | `-CXXMethodDecl {{[^ ]+}} <> used TraceRay 'dx::HitObject (RaytracingAccelerationStructure, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, RayDesc, Payload &)' static +// AST-NEXT: | | | |-TemplateArgument type 'dx::HitObject' +// AST-NEXT: | | | |-TemplateArgument type 'RaytracingAccelerationStructure' +// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' +// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' +// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' +// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' +// AST-NEXT: | | | |-TemplateArgument type 'unsigned int' +// AST-NEXT: | | | |-TemplateArgument type 'RayDesc' +// AST-NEXT: | | | |-TemplateArgument type 'Payload' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> AccelerationStructure 'RaytracingAccelerationStructure' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> RayFlags 'unsigned int' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> InstanceInclusionMask 'unsigned int' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> RayContributionToHitGroupIndex 'unsigned int' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> MultiplierForGeometryContributionToHitGroupIndex 'unsigned int' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> MissShaderIndex 'unsigned int' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> Ray 'RayDesc' +// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <> Payload 'Payload &&__restrict' +// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <> Implicit "op" "" 389 +// AST-NEXT: | | | `-AvailabilityAttr {{[^ ]+}} <> Implicit 6.9 0 0 "" + +RaytracingAccelerationStructure RTAS; +RWStructuredBuffer UAV : register(u0); + +struct [raypayload] +Payload { + float3 dummy : read(closesthit) : write(caller, anyhit); +}; + +[shader("raygeneration")] +void main() { + RayDesc rayDesc; + rayDesc.Origin = float3(0.0, 1.0, 2.0); + rayDesc.TMin = 3.0f; + rayDesc.Direction = float3(4.0, 5.0, 6.0); + rayDesc.TMax = 7.0f; + + Payload pld; + pld.dummy = float3(7.0, 8.0, 9.0); + + dx::HitObject hit = dx::HitObject::TraceRay( + RTAS, + RAY_FLAG_FORCE_OPAQUE | RAY_FLAG_SKIP_PROCEDURAL_PRIMITIVES, + 1, + 2, + 4, + 0, + rayDesc, + pld); + + dx::HitObject::Invoke(hit, pld); +} \ No newline at end of file