summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/cross-compile/dxc-error.hlsl.expected6
-rw-r--r--tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang85
-rw-r--r--tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang.expected347
-rw-r--r--tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-miss.slang28
-rw-r--r--tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-miss.slang.expected139
-rw-r--r--tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang86
-rw-r--r--tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang.expected321
-rw-r--r--tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang74
-rw-r--r--tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang.expected225
9 files changed, 1308 insertions, 3 deletions
diff --git a/tests/cross-compile/dxc-error.hlsl.expected b/tests/cross-compile/dxc-error.hlsl.expected
index 5fdc2362b..c47ca80a6 100644
--- a/tests/cross-compile/dxc-error.hlsl.expected
+++ b/tests/cross-compile/dxc-error.hlsl.expected
@@ -1,8 +1,8 @@
result code = -1
standard error = {
-dxc: tests/cross-compile/dxc-error.hlsl(8): error : use of undeclared identifier 'gOutputBuffer'
-dxc: note : gOutputBuffer[tid] = dispatchThreadID.x * 0.5f;
-dxc: note : ^
+dxc 1.7: tests/cross-compile/dxc-error.hlsl(8): error : use of undeclared identifier 'gOutputBuffer'
+dxc 1.7: note : gOutputBuffer[tid] = dispatchThreadID.x * 0.5f;
+dxc 1.7: note : ^
}
standard output = {
}
diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang
new file mode 100644
index 000000000..a754ff408
--- /dev/null
+++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang
@@ -0,0 +1,85 @@
+// hit-object-make-hit.slang
+
+//TEST:SIMPLE: -target dxil -entry rayGenerationMain -stage raygeneration -profile sm_6_5 -DNV_SHADER_EXTN_SLOT=u0
+
+//DISABLE_TEST(compute):COMPARE_COMPUTE:-d3d12 -output-using-type -use-dxil -profile sm_6_5 -render-feature ray-query
+//DISABLE_TEST(compute):COMPARE_COMPUTE:-vk -output-using-type -render-feature ray-query
+
+//TEST_INPUT: set scene = AccelerationStructure
+uniform RaytracingAccelerationStructure scene;
+
+//TEST_INPUT:set outputBuffer = out ubuffer(data=[0, 0, 0, 0], stride=4)
+RWStructuredBuffer<uint> outputBuffer;
+
+struct SomeValues
+{
+ int a;
+ float b;
+};
+
+uint calcValue(HitObject hit)
+{
+ uint r = 0;
+
+ if (!hit.IsMiss())
+ {
+ uint instanceIndex = hit.GetInstanceIndex();
+ uint instanceID = hit.GetInstanceID();
+ uint geometryIndex = hit.GetGeometryIndex();
+ uint primitiveIndex = hit.GetPrimitiveIndex();
+
+ SomeValues objSomeValues = hit.GetAttributes<SomeValues>();
+
+ r += instanceIndex;
+ r += instanceID;
+ r += geometryIndex;
+ r += primitiveIndex;
+ r += objSomeValues.a;
+ }
+
+ return r;
+}
+
+void rayGenerationMain()
+{
+ int2 launchID = int2(DispatchRaysIndex().xy);
+ int2 launchSize = int2(DispatchRaysDimensions().xy);
+
+ int idx = launchID.x;
+
+ SomeValues someValues = { idx, idx * 2.0f };
+
+ RayDesc ray;
+ ray.Origin = float3(idx, 0, 0);
+ ray.TMin = 0.01f;
+ ray.Direction = float3(0, 1, 0);
+ ray.TMax = 1e4f;
+
+ uint hitKind = 0;
+
+ uint r = 0;
+ {
+ HitObject hit = HitObject::MakeHit(0, scene, idx, idx * 2, idx * 3, hitKind, ray, someValues);
+
+ r = calcValue(hit);
+ }
+
+ {
+ int rayContributionToHitGroupIndex = 0;
+ int multiplierForGeometryContributionToHitGroupIndex = 4;
+
+ HitObject hit = HitObject::MakeHit(scene,
+ idx,
+ idx * 2,
+ idx * 3,
+ hitKind,
+ rayContributionToHitGroupIndex,
+ multiplierForGeometryContributionToHitGroupIndex,
+ ray,
+ someValues);
+
+ r += calcValue(hit);
+ }
+
+ outputBuffer[idx] = r;
+}
diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang.expected b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang.expected
new file mode 100644
index 000000000..f481d22f3
--- /dev/null
+++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-hit.slang.expected
@@ -0,0 +1,347 @@
+result code = 0
+standard error = {
+}
+standard output = {
+;
+; Note: shader requires additional functionality:
+; UAVs at every shader stage
+;
+; shader hash: 98c6f18c569b635938f62584ccf64bbf
+;
+; Buffer Definitions:
+;
+; Resource bind info for g_NvidiaExt
+; {
+;
+; struct struct.NvShaderExtnStruct
+; {
+;
+; uint opcode; ; Offset: 0
+; uint rid; ; Offset: 4
+; uint sid; ; Offset: 8
+; uint4 dst1u; ; Offset: 12
+; uint4 src3u; ; Offset: 28
+; uint4 src4u; ; Offset: 44
+; uint4 src5u; ; Offset: 60
+; uint4 src0u; ; Offset: 76
+; uint4 src1u; ; Offset: 92
+; uint4 src2u; ; Offset: 108
+; uint4 dst0u; ; Offset: 124
+; uint markUavRef; ; Offset: 140
+; uint numOutputsForIncCounter; ; Offset: 144
+; float padding1[27]; ; Offset: 148
+;
+; } $Element; ; Offset: 0 Size: 256
+;
+; }
+;
+; Resource bind info for outputBuffer_0
+; {
+;
+; uint $Element; ; Offset: 0 Size: 4
+;
+; }
+;
+;
+; Resource Bindings:
+;
+; Name Type Format Dim ID HLSL Bind Count
+; ------------------------------ ---------- ------- ----------- ------- -------------- ------
+; scene_0 texture i32 ras T0 t0 1
+; g_NvidiaExt UAV struct r/w+cnt U0 u0 1
+; outputBuffer_0 UAV struct r/w U1 u1 1
+;
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-ms-dx"
+
+%"class.RWStructuredBuffer<NvShaderExtnStruct>" = type { %struct.NvShaderExtnStruct }
+%struct.NvShaderExtnStruct = type { i32, i32, i32, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32, [27 x float] }
+%struct.RaytracingAccelerationStructure = type { i32 }
+%"class.RWStructuredBuffer<unsigned int>" = type { i32 }
+%struct.SomeValues_0 = type { i32, float }
+%struct.AttrWrapper.0 = type { %struct.SomeValues_0 }
+%struct.DummyPayload.1 = type { i32 }
+%struct.AttrWrapper = type { %struct.SomeValues_0 }
+%struct.DummyPayload = type { i32 }
+%dx.types.Handle = type { i8* }
+
+@"\01?g_NvidiaExt@@3V?$RWStructuredBuffer@UNvShaderExtnStruct@@@@A" = external constant %"class.RWStructuredBuffer<NvShaderExtnStruct>", align 4
+@"\01?scene_0@@3URaytracingAccelerationStructure@@A" = external constant %struct.RaytracingAccelerationStructure, align 4
+@"\01?outputBuffer_0@@3V?$RWStructuredBuffer@I@@A" = external constant %"class.RWStructuredBuffer<unsigned int>", align 4
+
+; Function Attrs: nounwind
+define void @"\01?rayGenerationMain@@YAXXZ"() #0 {
+ %1 = load %struct.RaytracingAccelerationStructure, %struct.RaytracingAccelerationStructure* @"\01?scene_0@@3URaytracingAccelerationStructure@@A", align 4, !noalias !18
+ %2 = load %"class.RWStructuredBuffer<unsigned int>", %"class.RWStructuredBuffer<unsigned int>"* @"\01?outputBuffer_0@@3V?$RWStructuredBuffer@I@@A", align 4
+ %3 = load %"class.RWStructuredBuffer<NvShaderExtnStruct>", %"class.RWStructuredBuffer<NvShaderExtnStruct>"* @"\01?g_NvidiaExt@@3V?$RWStructuredBuffer@UNvShaderExtnStruct@@@@A", align 4, !noalias !21
+ %4 = alloca %struct.SomeValues_0, align 8
+ %5 = alloca %struct.AttrWrapper.0, align 4
+ %6 = alloca %struct.DummyPayload.1, align 4
+ %7 = alloca %struct.SomeValues_0, align 8
+ %8 = alloca %struct.AttrWrapper, align 4
+ %9 = alloca %struct.DummyPayload, align 4
+ %10 = call i32 @dx.op.dispatchRaysIndex.i32(i32 145, i8 0) ; DispatchRaysIndex(col)
+ %11 = sitofp i32 %10 to float
+ %12 = fmul fast float %11, 2.000000e+00
+ %13 = sitofp i32 %10 to float
+ %14 = mul nsw i32 %10, 3
+ %15 = shl nsw i32 %10, 1
+ %16 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %17 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %16, i8 1) ; BufferUpdateCounter(uav,inc)
+ %18 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %18, i32 %17, i32 0, i32 69, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %19 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %19, i32 %17, i32 144, i32 2, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %20 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %20, i32 %17, i32 76, i32 %10, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %21 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %21, i32 %17, i32 80, i32 %15, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %22 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %22, i32 %17, i32 84, i32 %14, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %23 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %23, i32 %17, i32 88, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %24 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %24, i32 %17, i32 92, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %25 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %26 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %25, i8 1) ; BufferUpdateCounter(uav,inc)
+ %27 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %28 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %27, i8 1) ; BufferUpdateCounter(uav,inc)
+ %29 = getelementptr inbounds %struct.AttrWrapper, %struct.AttrWrapper* %8, i32 0, i32 0, i32 0
+ store i32 %10, i32* %29, align 4
+ %30 = getelementptr inbounds %struct.AttrWrapper, %struct.AttrWrapper* %8, i32 0, i32 0, i32 1
+ store float %12, float* %30, align 4
+ call void @dx.op.callShader.struct.AttrWrapper(i32 159, i32 %28, %struct.AttrWrapper* nonnull %8) ; CallShader(ShaderIndex,Parameter)
+ %31 = call %dx.types.Handle @dx.op.createHandleForLib.struct.RaytracingAccelerationStructure(i32 160, %struct.RaytracingAccelerationStructure %1) ; CreateHandleForLib(Resource)
+ call void @dx.op.traceRay.struct.DummyPayload(i32 157, %dx.types.Handle %31, i32 0, i32 0, i32 0, i32 0, i32 %28, float %13, float 0.000000e+00, float 0.000000e+00, float 0x3F847AE140000000, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+04, %struct.DummyPayload* nonnull %9) ; TraceRay(AccelerationStructure,RayFlags,InstanceInclusionMask,RayContributionToHitGroupIndex,MultiplierForGeometryContributionToShaderIndex,MissShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax,payload)
+ %32 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %33 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %32, i8 1) ; BufferUpdateCounter(uav,inc)
+ %34 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %34, i32 %33, i32 0, i32 73, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %35 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %35, i32 %33, i32 76, i32 %26, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %36 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %37 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %36, i8 1) ; BufferUpdateCounter(uav,inc)
+ %38 = icmp eq i32 %37, 0
+ br i1 %38, label %39, label %76
+
+; <label>:39 ; preds = %0
+ %40 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %41 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %40, i8 1) ; BufferUpdateCounter(uav,inc)
+ %42 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %42, i32 %41, i32 0, i32 75, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %43 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %43, i32 %41, i32 76, i32 %26, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %44 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %45 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %44, i8 1) ; BufferUpdateCounter(uav,inc)
+ %46 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %47 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %46, i8 1) ; BufferUpdateCounter(uav,inc)
+ %48 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %48, i32 %47, i32 0, i32 74, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %49 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %49, i32 %47, i32 76, i32 %26, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %50 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %51 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %50, i8 1) ; BufferUpdateCounter(uav,inc)
+ %52 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %53 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %52, i8 1) ; BufferUpdateCounter(uav,inc)
+ %54 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %54, i32 %53, i32 0, i32 77, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %55 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %55, i32 %53, i32 76, i32 %26, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %56 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %57 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %56, i8 1) ; BufferUpdateCounter(uav,inc)
+ %58 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %59 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %58, i8 1) ; BufferUpdateCounter(uav,inc)
+ %60 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %60, i32 %59, i32 0, i32 76, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %61 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %61, i32 %59, i32 76, i32 %26, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %62 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %63 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %62, i8 1) ; BufferUpdateCounter(uav,inc)
+ %64 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %65 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %64, i8 1) ; BufferUpdateCounter(uav,inc)
+ %66 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %66, i32 %65, i32 0, i32 80, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %67 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %67, i32 %65, i32 76, i32 %26, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %68 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %69 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %68, i8 1) ; BufferUpdateCounter(uav,inc)
+ call void @dx.op.callShader.struct.SomeValues_0(i32 159, i32 %69, %struct.SomeValues_0* nonnull %7) ; CallShader(ShaderIndex,Parameter)
+ %70 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %7, i32 0, i32 0
+ %71 = load i32, i32* %70, align 8
+ %72 = add i32 %51, %45
+ %73 = add i32 %72, %57
+ %74 = add i32 %73, %63
+ %75 = add i32 %74, %71
+ br label %76
+
+; <label>:76 ; preds = %39, %0
+ %77 = phi i32 [ %75, %39 ], [ 0, %0 ]
+ %78 = mul nsw i32 %10, 3
+ %79 = shl nsw i32 %10, 1
+ %80 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %81 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %80, i8 1) ; BufferUpdateCounter(uav,inc)
+ %82 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %82, i32 %81, i32 0, i32 68, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %83 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %83, i32 %81, i32 144, i32 2, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %84 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %84, i32 %81, i32 76, i32 %10, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %85 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %85, i32 %81, i32 80, i32 %79, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %86 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %86, i32 %81, i32 84, i32 %78, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %87 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %87, i32 %81, i32 88, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %88 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %88, i32 %81, i32 92, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %89 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %89, i32 %81, i32 96, i32 4, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %90 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %91 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %90, i8 1) ; BufferUpdateCounter(uav,inc)
+ %92 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %93 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %92, i8 1) ; BufferUpdateCounter(uav,inc)
+ %94 = getelementptr inbounds %struct.AttrWrapper.0, %struct.AttrWrapper.0* %5, i32 0, i32 0, i32 0
+ store i32 %10, i32* %94, align 4
+ %95 = getelementptr inbounds %struct.AttrWrapper.0, %struct.AttrWrapper.0* %5, i32 0, i32 0, i32 1
+ store float %12, float* %95, align 4
+ call void @dx.op.callShader.struct.AttrWrapper.0(i32 159, i32 %93, %struct.AttrWrapper.0* nonnull %5) ; CallShader(ShaderIndex,Parameter)
+ %96 = call %dx.types.Handle @dx.op.createHandleForLib.struct.RaytracingAccelerationStructure(i32 160, %struct.RaytracingAccelerationStructure %1) ; CreateHandleForLib(Resource)
+ call void @dx.op.traceRay.struct.DummyPayload.1(i32 157, %dx.types.Handle %96, i32 0, i32 0, i32 0, i32 0, i32 %93, float %13, float 0.000000e+00, float 0.000000e+00, float 0x3F847AE140000000, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+04, %struct.DummyPayload.1* nonnull %6) ; TraceRay(AccelerationStructure,RayFlags,InstanceInclusionMask,RayContributionToHitGroupIndex,MultiplierForGeometryContributionToShaderIndex,MissShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax,payload)
+ %97 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %98 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %97, i8 1) ; BufferUpdateCounter(uav,inc)
+ %99 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %99, i32 %98, i32 0, i32 73, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %100 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %100, i32 %98, i32 76, i32 %91, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %101 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %102 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %101, i8 1) ; BufferUpdateCounter(uav,inc)
+ %103 = icmp eq i32 %102, 0
+ br i1 %103, label %104, label %141
+
+; <label>:104 ; preds = %76
+ %105 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %106 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %105, i8 1) ; BufferUpdateCounter(uav,inc)
+ %107 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %107, i32 %106, i32 0, i32 75, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %108 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %108, i32 %106, i32 76, i32 %91, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %109 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %110 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %109, i8 1) ; BufferUpdateCounter(uav,inc)
+ %111 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %112 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %111, i8 1) ; BufferUpdateCounter(uav,inc)
+ %113 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %113, i32 %112, i32 0, i32 74, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %114 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %114, i32 %112, i32 76, i32 %91, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %115 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %116 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %115, i8 1) ; BufferUpdateCounter(uav,inc)
+ %117 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %118 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %117, i8 1) ; BufferUpdateCounter(uav,inc)
+ %119 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %119, i32 %118, i32 0, i32 77, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %120 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %120, i32 %118, i32 76, i32 %91, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %121 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %122 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %121, i8 1) ; BufferUpdateCounter(uav,inc)
+ %123 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %124 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %123, i8 1) ; BufferUpdateCounter(uav,inc)
+ %125 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %125, i32 %124, i32 0, i32 76, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %126 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %126, i32 %124, i32 76, i32 %91, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %127 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %128 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %127, i8 1) ; BufferUpdateCounter(uav,inc)
+ %129 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %130 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %129, i8 1) ; BufferUpdateCounter(uav,inc)
+ %131 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %131, i32 %130, i32 0, i32 80, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %132 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %132, i32 %130, i32 76, i32 %91, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %133 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %134 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %133, i8 1) ; BufferUpdateCounter(uav,inc)
+ call void @dx.op.callShader.struct.SomeValues_0(i32 159, i32 %134, %struct.SomeValues_0* nonnull %4) ; CallShader(ShaderIndex,Parameter)
+ %135 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %4, i32 0, i32 0
+ %136 = load i32, i32* %135, align 8
+ %137 = add i32 %116, %110
+ %138 = add i32 %137, %122
+ %139 = add i32 %138, %128
+ %140 = add i32 %139, %136
+ br label %141
+
+; <label>:141 ; preds = %104, %76
+ %142 = phi i32 [ %140, %104 ], [ 0, %76 ]
+ %143 = add i32 %142, %77
+ %144 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<unsigned int>"(i32 160, %"class.RWStructuredBuffer<unsigned int>" %2) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %144, i32 %10, i32 0, i32 %143, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ ret void
+}
+
+; Function Attrs: nounwind
+declare i32 @dx.op.bufferUpdateCounter(i32, %dx.types.Handle, i8) #0
+
+; Function Attrs: nounwind
+declare void @dx.op.rawBufferStore.i32(i32, %dx.types.Handle, i32, i32, i32, i32, i32, i32, i8, i32) #0
+
+; Function Attrs: nounwind readnone
+declare i32 @dx.op.dispatchRaysIndex.i32(i32, i8) #1
+
+; Function Attrs: nounwind
+declare void @dx.op.callShader.struct.SomeValues_0(i32, i32, %struct.SomeValues_0*) #0
+
+; Function Attrs: nounwind
+declare void @dx.op.callShader.struct.AttrWrapper(i32, i32, %struct.AttrWrapper*) #0
+
+; Function Attrs: nounwind
+declare void @dx.op.traceRay.struct.DummyPayload(i32, %dx.types.Handle, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, %struct.DummyPayload*) #0
+
+; Function Attrs: nounwind
+declare void @dx.op.callShader.struct.AttrWrapper.0(i32, i32, %struct.AttrWrapper.0*) #0
+
+; Function Attrs: nounwind
+declare void @dx.op.traceRay.struct.DummyPayload.1(i32, %dx.types.Handle, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, %struct.DummyPayload.1*) #0
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32, %"class.RWStructuredBuffer<NvShaderExtnStruct>") #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<unsigned int>"(i32, %"class.RWStructuredBuffer<unsigned int>") #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @dx.op.createHandleForLib.struct.RaytracingAccelerationStructure(i32, %struct.RaytracingAccelerationStructure) #2
+
+attributes #0 = { nounwind }
+attributes #1 = { nounwind readnone }
+attributes #2 = { nounwind readonly }
+
+!llvm.ident = !{!0}
+!dx.version = !{!1}
+!dx.valver = !{!2}
+!dx.shaderModel = !{!3}
+!dx.resources = !{!4}
+!dx.entryPoints = !{!13, !15}
+
+!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
+!1 = !{i32 1, i32 5}
+!2 = !{i32 1, i32 7}
+!3 = !{!"lib", i32 6, i32 5}
+!4 = !{!5, !8, null, null}
+!5 = !{!6}
+!6 = !{i32 0, %struct.RaytracingAccelerationStructure* @"\01?scene_0@@3URaytracingAccelerationStructure@@A", !"scene_0", i32 0, i32 0, i32 1, i32 16, i32 0, !7}
+!7 = !{i32 0, i32 4}
+!8 = !{!9, !11}
+!9 = !{i32 0, %"class.RWStructuredBuffer<NvShaderExtnStruct>"* @"\01?g_NvidiaExt@@3V?$RWStructuredBuffer@UNvShaderExtnStruct@@@@A", !"g_NvidiaExt", i32 0, i32 0, i32 1, i32 12, i1 false, i1 true, i1 false, !10}
+!10 = !{i32 1, i32 256}
+!11 = !{i32 1, %"class.RWStructuredBuffer<unsigned int>"* @"\01?outputBuffer_0@@3V?$RWStructuredBuffer@I@@A", !"outputBuffer_0", i32 0, i32 1, i32 1, i32 12, i1 false, i1 false, i1 false, !12}
+!12 = !{i32 1, i32 4}
+!13 = !{null, !"", null, !4, !14}
+!14 = !{i32 0, i64 8454160}
+!15 = !{void ()* @"\01?rayGenerationMain@@YAXXZ", !"\01?rayGenerationMain@@YAXXZ", null, null, !16}
+!16 = !{i32 8, i32 7, i32 5, !17}
+!17 = !{i32 0}
+!18 = !{!19}
+!19 = distinct !{!19, !20, !"\01??$NvMakeHit@USomeValues_0@@@@YA?AUNvHitObject@@URaytracingAccelerationStructure@@IIIIIIURayDesc@@USomeValues_0@@@Z: %agg.result"}
+!20 = distinct !{!20, !"\01??$NvMakeHit@USomeValues_0@@@@YA?AUNvHitObject@@URaytracingAccelerationStructure@@IIIIIIURayDesc@@USomeValues_0@@@Z"}
+!21 = !{!22}
+!22 = distinct !{!22, !23, !"\01??$GetAttributes@USomeValues_0@@@NvHitObject@@QAA?AUSomeValues_0@@XZ: %agg.result"}
+!23 = distinct !{!23, !"\01??$GetAttributes@USomeValues_0@@@NvHitObject@@QAA?AUSomeValues_0@@XZ"}
+}
diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-miss.slang b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-miss.slang
new file mode 100644
index 000000000..cf4262c53
--- /dev/null
+++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-miss.slang
@@ -0,0 +1,28 @@
+// hit-object-make-miss.slang
+
+//TEST:SIMPLE: -target dxil -entry computeMain -stage compute -profile sm_6_5 -DNV_SHADER_EXTN_SLOT=u0
+
+//DISABLE_TEST:COMPARE_COMPUTE_EX:-slang -compute -dx12 -output-using-type -profile sm_6_5 -nvapi-slot u0
+//DISABLE_TEST(compute):COMPARE_COMPUTE:-d3d12 -output-using-type -use-dxil -profile sm_6_5 -render-feature ray-query
+//DISABLE_TEST(compute):COMPARE_COMPUTE:-vk -output-using-type -render-feature ray-query
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<uint> outputBuffer;
+
+[numthreads(4, 1, 1)]
+void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ int idx = int(dispatchThreadID.x);
+
+ RayDesc ray;
+ ray.Origin = float3(idx, 0, 0);
+ ray.TMin = 0.01f;
+ ray.Direction = float3(0, 1, 0);
+ ray.TMax = 1e4f;
+
+ HitObject hit = HitObject::MakeMiss(idx, ray);
+
+ int r = int(hit.IsMiss());
+
+ outputBuffer[idx] = r;
+}
diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-miss.slang.expected b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-miss.slang.expected
new file mode 100644
index 000000000..e8550c60c
--- /dev/null
+++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-make-miss.slang.expected
@@ -0,0 +1,139 @@
+result code = 0
+standard error = {
+}
+standard output = {
+;
+; Input signature:
+;
+; Name Index Mask Register SysValue Format Used
+; -------------------- ----- ------ -------- -------- ------- ------
+; no parameters
+;
+; Output signature:
+;
+; Name Index Mask Register SysValue Format Used
+; -------------------- ----- ------ -------- -------- ------- ------
+; no parameters
+; shader hash: 4aaa7c10f5b9989a1fa5a05376bb77c7
+;
+; Pipeline Runtime Information:
+;
+; Compute Shader
+; NumThreads=(4,1,1)
+;
+;
+; Buffer Definitions:
+;
+; Resource bind info for g_NvidiaExt
+; {
+;
+; struct struct.NvShaderExtnStruct
+; {
+;
+; uint opcode; ; Offset: 0
+; uint rid; ; Offset: 4
+; uint sid; ; Offset: 8
+; uint4 dst1u; ; Offset: 12
+; uint4 src3u; ; Offset: 28
+; uint4 src4u; ; Offset: 44
+; uint4 src5u; ; Offset: 60
+; uint4 src0u; ; Offset: 76
+; uint4 src1u; ; Offset: 92
+; uint4 src2u; ; Offset: 108
+; uint4 dst0u; ; Offset: 124
+; uint markUavRef; ; Offset: 140
+; uint numOutputsForIncCounter; ; Offset: 144
+; float padding1[27]; ; Offset: 148
+;
+; } $Element; ; Offset: 0 Size: 256
+;
+; }
+;
+; Resource bind info for outputBuffer_0
+; {
+;
+; uint $Element; ; Offset: 0 Size: 4
+;
+; }
+;
+;
+; Resource Bindings:
+;
+; Name Type Format Dim ID HLSL Bind Count
+; ------------------------------ ---------- ------- ----------- ------- -------------- ------
+; g_NvidiaExt UAV struct r/w+cnt U0 u0 1
+; outputBuffer_0 UAV struct r/w U1 u1 1
+;
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-ms-dx"
+
+%dx.types.Handle = type { i8* }
+%"class.RWStructuredBuffer<NvShaderExtnStruct>" = type { %struct.NvShaderExtnStruct }
+%struct.NvShaderExtnStruct = type { i32, i32, i32, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32, [27 x float] }
+%"class.RWStructuredBuffer<unsigned int>" = type { i32 }
+
+define void @computeMain() {
+ %1 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 1, i32 1, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
+ %2 = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 1, i32 0, i32 0, i1 false) ; CreateHandle(resourceClass,rangeId,index,nonUniformIndex)
+ %3 = call i32 @dx.op.threadId.i32(i32 93, i32 0) ; ThreadId(component)
+ %4 = sitofp i32 %3 to float
+ %5 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %2, i8 1) ; BufferUpdateCounter(uav,inc)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %5, i32 0, i32 70, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %5, i32 76, i32 %3, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %5, i32 80, i32 1008981770, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %5, i32 84, i32 1176256512, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %6 = bitcast float %4 to i32
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %5, i32 92, i32 %6, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %5, i32 96, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %5, i32 100, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %5, i32 108, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %5, i32 112, i32 1065353216, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %5, i32 116, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %7 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %2, i8 1) ; BufferUpdateCounter(uav,inc)
+ %8 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %2, i8 1) ; BufferUpdateCounter(uav,inc)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %8, i32 0, i32 73, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %2, i32 %8, i32 76, i32 %7, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %9 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %2, i8 1) ; BufferUpdateCounter(uav,inc)
+ %10 = icmp ne i32 %9, 0
+ %11 = zext i1 %10 to i32
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %1, i32 %3, i32 0, i32 %11, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ ret void
+}
+
+; Function Attrs: nounwind readnone
+declare i32 @dx.op.threadId.i32(i32, i32) #0
+
+; Function Attrs: nounwind
+declare void @dx.op.rawBufferStore.i32(i32, %dx.types.Handle, i32, i32, i32, i32, i32, i32, i8, i32) #1
+
+; Function Attrs: nounwind
+declare i32 @dx.op.bufferUpdateCounter(i32, %dx.types.Handle, i8) #1
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2
+
+attributes #0 = { nounwind readnone }
+attributes #1 = { nounwind }
+attributes #2 = { nounwind readonly }
+
+!llvm.ident = !{!0}
+!dx.version = !{!1}
+!dx.valver = !{!2}
+!dx.shaderModel = !{!3}
+!dx.resources = !{!4}
+!dx.entryPoints = !{!10}
+
+!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
+!1 = !{i32 1, i32 5}
+!2 = !{i32 1, i32 7}
+!3 = !{!"cs", i32 6, i32 5}
+!4 = !{null, !5, null, null}
+!5 = !{!6, !8}
+!6 = !{i32 0, %"class.RWStructuredBuffer<NvShaderExtnStruct>"* undef, !"", i32 0, i32 0, i32 1, i32 12, i1 false, i1 true, i1 false, !7}
+!7 = !{i32 1, i32 256}
+!8 = !{i32 1, %"class.RWStructuredBuffer<unsigned int>"* undef, !"", i32 0, i32 1, i32 1, i32 12, i1 false, i1 false, i1 false, !9}
+!9 = !{i32 1, i32 4}
+!10 = !{void ()* @computeMain, !"computeMain", null, !4, !11}
+!11 = !{i32 0, i64 8388624, i32 4, !12}
+!12 = !{i32 4, i32 1, i32 1}
+}
diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang
new file mode 100644
index 000000000..766565c76
--- /dev/null
+++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang
@@ -0,0 +1,86 @@
+// hit-object-reorder-thread.slang
+
+//TEST:SIMPLE: -target dxil -entry rayGenerationMain -stage raygeneration -profile sm_6_5 -DNV_SHADER_EXTN_SLOT=u0
+
+//DISABLE_TEST(compute):COMPARE_COMPUTE:-d3d12 -output-using-type -use-dxil -profile sm_6_5 -render-feature ray-query
+//DISABLE_TEST(compute):COMPARE_COMPUTE:-vk -output-using-type -render-feature ray-query
+
+//TEST_INPUT: set scene = AccelerationStructure
+uniform RaytracingAccelerationStructure scene;
+
+//TEST_INPUT:set outputBuffer = out ubuffer(data=[0, 0, 0, 0], stride=4)
+RWStructuredBuffer<uint> outputBuffer;
+
+struct SomeValues
+{
+ int a;
+ float b;
+};
+
+uint calcValue(HitObject hit)
+{
+ uint r = 0;
+
+ if (!hit.IsMiss())
+ {
+ uint instanceIndex = hit.GetInstanceIndex();
+ uint instanceID = hit.GetInstanceID();
+ uint geometryIndex = hit.GetGeometryIndex();
+ uint primitiveIndex = hit.GetPrimitiveIndex();
+
+ SomeValues objSomeValues = hit.GetAttributes<SomeValues>();
+
+ r += instanceIndex;
+ r += instanceID;
+ r += geometryIndex;
+ r += primitiveIndex;
+ r += objSomeValues.a;
+ }
+
+ return r;
+}
+
+void rayGenerationMain()
+{
+ int2 launchID = int2(DispatchRaysIndex().xy);
+ int2 launchSize = int2(DispatchRaysDimensions().xy);
+
+ int idx = launchID.x;
+
+ SomeValues someValues = { idx, idx * 2.0f };
+
+ RayDesc ray;
+ ray.Origin = float3(idx, 0, 0);
+ ray.TMin = 0.01f;
+ ray.Direction = float3(0, 1, 0);
+ ray.TMax = 1e4f;
+
+ RAY_FLAG rayFlags = RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH | RAY_FLAG_CULL_BACK_FACING_TRIANGLES;
+ uint instanceInclusionMask = 0xff;
+ uint rayContributionToHitGroupIndex = 0;
+ uint multiplierForGeometryContributionToHitGroupIndex = 4;
+ uint missShaderIndex = 0;
+
+ HitObject hit = HitObject::TraceRay(scene,
+ rayFlags,
+ instanceInclusionMask,
+ rayContributionToHitGroupIndex,
+ multiplierForGeometryContributionToHitGroupIndex,
+ missShaderIndex,
+ ray,
+ someValues);
+
+ uint r = calcValue(hit);
+
+ ReorderThread( hit );
+
+ // Change the payload
+ SomeValues otherValues = { idx * -1, idx * 4.0f };
+
+ // Now Invoke to cast another ray, with the new payload
+ HitObject::Invoke( scene, hit, otherValues );
+
+ r += calcValue(hit);
+
+ outputBuffer[idx] = r;
+}
diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang.expected b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang.expected
new file mode 100644
index 000000000..2c9969877
--- /dev/null
+++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-reorder-thread.slang.expected
@@ -0,0 +1,321 @@
+result code = 0
+standard error = {
+}
+standard output = {
+;
+; Note: shader requires additional functionality:
+; UAVs at every shader stage
+;
+; shader hash: a8939689e548eb162696bb329b53cb67
+;
+; Buffer Definitions:
+;
+; Resource bind info for g_NvidiaExt
+; {
+;
+; struct struct.NvShaderExtnStruct
+; {
+;
+; uint opcode; ; Offset: 0
+; uint rid; ; Offset: 4
+; uint sid; ; Offset: 8
+; uint4 dst1u; ; Offset: 12
+; uint4 src3u; ; Offset: 28
+; uint4 src4u; ; Offset: 44
+; uint4 src5u; ; Offset: 60
+; uint4 src0u; ; Offset: 76
+; uint4 src1u; ; Offset: 92
+; uint4 src2u; ; Offset: 108
+; uint4 dst0u; ; Offset: 124
+; uint markUavRef; ; Offset: 140
+; uint numOutputsForIncCounter; ; Offset: 144
+; float padding1[27]; ; Offset: 148
+;
+; } $Element; ; Offset: 0 Size: 256
+;
+; }
+;
+; Resource bind info for outputBuffer_0
+; {
+;
+; uint $Element; ; Offset: 0 Size: 4
+;
+; }
+;
+;
+; Resource Bindings:
+;
+; Name Type Format Dim ID HLSL Bind Count
+; ------------------------------ ---------- ------- ----------- ------- -------------- ------
+; scene_0 texture i32 ras T0 t0 1
+; g_NvidiaExt UAV struct r/w+cnt U0 u0 1
+; outputBuffer_0 UAV struct r/w U1 u1 1
+;
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-ms-dx"
+
+%"class.RWStructuredBuffer<NvShaderExtnStruct>" = type { %struct.NvShaderExtnStruct }
+%struct.NvShaderExtnStruct = type { i32, i32, i32, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32, [27 x float] }
+%struct.RaytracingAccelerationStructure = type { i32 }
+%"class.RWStructuredBuffer<unsigned int>" = type { i32 }
+%struct.SomeValues_0 = type { i32, float }
+%dx.types.Handle = type { i8* }
+
+@"\01?g_NvidiaExt@@3V?$RWStructuredBuffer@UNvShaderExtnStruct@@@@A" = external constant %"class.RWStructuredBuffer<NvShaderExtnStruct>", align 4
+@"\01?scene_0@@3URaytracingAccelerationStructure@@A" = external constant %struct.RaytracingAccelerationStructure, align 4
+@"\01?outputBuffer_0@@3V?$RWStructuredBuffer@I@@A" = external constant %"class.RWStructuredBuffer<unsigned int>", align 4
+
+; Function Attrs: nounwind
+define void @"\01?rayGenerationMain@@YAXXZ"() #0 {
+ %1 = load %struct.RaytracingAccelerationStructure, %struct.RaytracingAccelerationStructure* @"\01?scene_0@@3URaytracingAccelerationStructure@@A", align 4, !noalias !18
+ %2 = load %"class.RWStructuredBuffer<unsigned int>", %"class.RWStructuredBuffer<unsigned int>"* @"\01?outputBuffer_0@@3V?$RWStructuredBuffer@I@@A", align 4
+ %3 = load %"class.RWStructuredBuffer<NvShaderExtnStruct>", %"class.RWStructuredBuffer<NvShaderExtnStruct>"* @"\01?g_NvidiaExt@@3V?$RWStructuredBuffer@UNvShaderExtnStruct@@@@A", align 4, !noalias !21
+ %4 = alloca %struct.SomeValues_0, align 8
+ %5 = alloca %struct.SomeValues_0, align 8
+ %6 = alloca %struct.SomeValues_0, align 4
+ %7 = alloca %struct.SomeValues_0, align 4
+ %8 = call i32 @dx.op.dispatchRaysIndex.i32(i32 145, i8 0) ; DispatchRaysIndex(col)
+ %9 = sitofp i32 %8 to float
+ %10 = fmul fast float %9, 2.000000e+00
+ %11 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %6, i32 0, i32 0
+ store i32 %8, i32* %11, align 4
+ %12 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %6, i32 0, i32 1
+ store float %10, float* %12, align 4
+ %13 = sitofp i32 %8 to float
+ %14 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %15 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %14, i8 1) ; BufferUpdateCounter(uav,inc)
+ %16 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %16, i32 %15, i32 0, i32 67, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %17 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %17, i32 %15, i32 144, i32 2, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %18 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %18, i32 %15, i32 76, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %19 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %20 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %19, i8 1) ; BufferUpdateCounter(uav,inc)
+ %21 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %22 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %21, i8 1) ; BufferUpdateCounter(uav,inc)
+ %23 = call %dx.types.Handle @dx.op.createHandleForLib.struct.RaytracingAccelerationStructure(i32 160, %struct.RaytracingAccelerationStructure %1) ; CreateHandleForLib(Resource)
+ call void @dx.op.traceRay.struct.SomeValues_0(i32 157, %dx.types.Handle %23, i32 20, i32 255, i32 0, i32 4, i32 %22, float %13, float 0.000000e+00, float 0.000000e+00, float 0x3F847AE140000000, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+04, %struct.SomeValues_0* nonnull %6) ; TraceRay(AccelerationStructure,RayFlags,InstanceInclusionMask,RayContributionToHitGroupIndex,MultiplierForGeometryContributionToShaderIndex,MissShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax,payload)
+ %24 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %25 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %24, i8 1) ; BufferUpdateCounter(uav,inc)
+ %26 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %26, i32 %25, i32 0, i32 73, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %27 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %27, i32 %25, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %28 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %29 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %28, i8 1) ; BufferUpdateCounter(uav,inc)
+ %30 = icmp eq i32 %29, 0
+ br i1 %30, label %31, label %68
+
+; <label>:31 ; preds = %0
+ %32 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %33 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %32, i8 1) ; BufferUpdateCounter(uav,inc)
+ %34 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %34, i32 %33, i32 0, i32 75, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %35 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %35, i32 %33, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %36 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %37 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %36, i8 1) ; BufferUpdateCounter(uav,inc)
+ %38 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %39 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %38, i8 1) ; BufferUpdateCounter(uav,inc)
+ %40 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %40, i32 %39, i32 0, i32 74, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %41 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %41, i32 %39, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %42 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %43 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %42, i8 1) ; BufferUpdateCounter(uav,inc)
+ %44 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %45 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %44, i8 1) ; BufferUpdateCounter(uav,inc)
+ %46 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %46, i32 %45, i32 0, i32 77, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %47 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %47, i32 %45, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %48 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %49 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %48, i8 1) ; BufferUpdateCounter(uav,inc)
+ %50 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %51 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %50, i8 1) ; BufferUpdateCounter(uav,inc)
+ %52 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %52, i32 %51, i32 0, i32 76, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %53 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %53, i32 %51, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %54 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %55 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %54, i8 1) ; BufferUpdateCounter(uav,inc)
+ %56 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %57 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %56, i8 1) ; BufferUpdateCounter(uav,inc)
+ %58 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %58, i32 %57, i32 0, i32 80, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %59 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %59, i32 %57, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %60 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %61 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %60, i8 1) ; BufferUpdateCounter(uav,inc)
+ call void @dx.op.callShader.struct.SomeValues_0(i32 159, i32 %61, %struct.SomeValues_0* nonnull %5) ; CallShader(ShaderIndex,Parameter)
+ %62 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %5, i32 0, i32 0
+ %63 = load i32, i32* %62, align 8
+ %64 = add i32 %43, %37
+ %65 = add i32 %64, %49
+ %66 = add i32 %65, %55
+ %67 = add i32 %66, %63
+ br label %68
+
+; <label>:68 ; preds = %31, %0
+ %69 = phi i32 [ %67, %31 ], [ 0, %0 ]
+ %70 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %71 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %70, i8 1) ; BufferUpdateCounter(uav,inc)
+ %72 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %72, i32 %71, i32 0, i32 71, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %73 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %73, i32 %71, i32 76, i32 1, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %74 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %74, i32 %71, i32 80, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %75 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %75, i32 %71, i32 84, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %76 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %76, i32 %71, i32 88, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %77 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %78 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %77, i8 1) ; BufferUpdateCounter(uav,inc)
+ %79 = sub nsw i32 0, %8
+ %80 = sitofp i32 %8 to float
+ %81 = fmul fast float %80, 4.000000e+00
+ %82 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %7, i32 0, i32 0
+ store i32 %79, i32* %82, align 4
+ %83 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %7, i32 0, i32 1
+ store float %81, float* %83, align 4
+ %84 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %85 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %84, i8 1) ; BufferUpdateCounter(uav,inc)
+ %86 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %86, i32 %85, i32 0, i32 72, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %87 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %87, i32 %85, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %88 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %89 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %88, i8 1) ; BufferUpdateCounter(uav,inc)
+ %90 = call %dx.types.Handle @dx.op.createHandleForLib.struct.RaytracingAccelerationStructure(i32 160, %struct.RaytracingAccelerationStructure %1) ; CreateHandleForLib(Resource)
+ call void @dx.op.traceRay.struct.SomeValues_0(i32 157, %dx.types.Handle %90, i32 0, i32 0, i32 0, i32 0, i32 %89, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, %struct.SomeValues_0* nonnull %7) ; TraceRay(AccelerationStructure,RayFlags,InstanceInclusionMask,RayContributionToHitGroupIndex,MultiplierForGeometryContributionToShaderIndex,MissShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax,payload)
+ %91 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %92 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %91, i8 1) ; BufferUpdateCounter(uav,inc)
+ %93 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %93, i32 %92, i32 0, i32 73, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %94 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %94, i32 %92, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %95 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %96 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %95, i8 1) ; BufferUpdateCounter(uav,inc)
+ %97 = icmp eq i32 %96, 0
+ br i1 %97, label %98, label %135
+
+; <label>:98 ; preds = %68
+ %99 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %100 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %99, i8 1) ; BufferUpdateCounter(uav,inc)
+ %101 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %101, i32 %100, i32 0, i32 75, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %102 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %102, i32 %100, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %103 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %104 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %103, i8 1) ; BufferUpdateCounter(uav,inc)
+ %105 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %106 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %105, i8 1) ; BufferUpdateCounter(uav,inc)
+ %107 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %107, i32 %106, i32 0, i32 74, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %108 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %108, i32 %106, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %109 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %110 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %109, i8 1) ; BufferUpdateCounter(uav,inc)
+ %111 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %112 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %111, i8 1) ; BufferUpdateCounter(uav,inc)
+ %113 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %113, i32 %112, i32 0, i32 77, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %114 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %114, i32 %112, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %115 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %116 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %115, i8 1) ; BufferUpdateCounter(uav,inc)
+ %117 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %118 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %117, i8 1) ; BufferUpdateCounter(uav,inc)
+ %119 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %119, i32 %118, i32 0, i32 76, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %120 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %120, i32 %118, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %121 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %122 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %121, i8 1) ; BufferUpdateCounter(uav,inc)
+ %123 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %124 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %123, i8 1) ; BufferUpdateCounter(uav,inc)
+ %125 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %125, i32 %124, i32 0, i32 80, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %126 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %126, i32 %124, i32 76, i32 %20, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %127 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %128 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %127, i8 1) ; BufferUpdateCounter(uav,inc)
+ call void @dx.op.callShader.struct.SomeValues_0(i32 159, i32 %128, %struct.SomeValues_0* nonnull %4) ; CallShader(ShaderIndex,Parameter)
+ %129 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %4, i32 0, i32 0
+ %130 = load i32, i32* %129, align 8
+ %131 = add i32 %110, %104
+ %132 = add i32 %131, %116
+ %133 = add i32 %132, %122
+ %134 = add i32 %133, %130
+ br label %135
+
+; <label>:135 ; preds = %98, %68
+ %136 = phi i32 [ %134, %98 ], [ 0, %68 ]
+ %137 = add i32 %136, %69
+ %138 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<unsigned int>"(i32 160, %"class.RWStructuredBuffer<unsigned int>" %2) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %138, i32 %8, i32 0, i32 %137, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ ret void
+}
+
+; Function Attrs: nounwind
+declare i32 @dx.op.bufferUpdateCounter(i32, %dx.types.Handle, i8) #0
+
+; Function Attrs: nounwind
+declare void @dx.op.rawBufferStore.i32(i32, %dx.types.Handle, i32, i32, i32, i32, i32, i32, i8, i32) #0
+
+; Function Attrs: nounwind readnone
+declare i32 @dx.op.dispatchRaysIndex.i32(i32, i8) #1
+
+; Function Attrs: nounwind
+declare void @dx.op.callShader.struct.SomeValues_0(i32, i32, %struct.SomeValues_0*) #0
+
+; Function Attrs: nounwind
+declare void @dx.op.traceRay.struct.SomeValues_0(i32, %dx.types.Handle, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, %struct.SomeValues_0*) #0
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32, %"class.RWStructuredBuffer<NvShaderExtnStruct>") #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<unsigned int>"(i32, %"class.RWStructuredBuffer<unsigned int>") #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @dx.op.createHandleForLib.struct.RaytracingAccelerationStructure(i32, %struct.RaytracingAccelerationStructure) #2
+
+attributes #0 = { nounwind }
+attributes #1 = { nounwind readnone }
+attributes #2 = { nounwind readonly }
+
+!llvm.ident = !{!0}
+!dx.version = !{!1}
+!dx.valver = !{!2}
+!dx.shaderModel = !{!3}
+!dx.resources = !{!4}
+!dx.entryPoints = !{!13, !15}
+
+!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
+!1 = !{i32 1, i32 5}
+!2 = !{i32 1, i32 7}
+!3 = !{!"lib", i32 6, i32 5}
+!4 = !{!5, !8, null, null}
+!5 = !{!6}
+!6 = !{i32 0, %struct.RaytracingAccelerationStructure* @"\01?scene_0@@3URaytracingAccelerationStructure@@A", !"scene_0", i32 0, i32 0, i32 1, i32 16, i32 0, !7}
+!7 = !{i32 0, i32 4}
+!8 = !{!9, !11}
+!9 = !{i32 0, %"class.RWStructuredBuffer<NvShaderExtnStruct>"* @"\01?g_NvidiaExt@@3V?$RWStructuredBuffer@UNvShaderExtnStruct@@@@A", !"g_NvidiaExt", i32 0, i32 0, i32 1, i32 12, i1 false, i1 true, i1 false, !10}
+!10 = !{i32 1, i32 256}
+!11 = !{i32 1, %"class.RWStructuredBuffer<unsigned int>"* @"\01?outputBuffer_0@@3V?$RWStructuredBuffer@I@@A", !"outputBuffer_0", i32 0, i32 1, i32 1, i32 12, i1 false, i1 false, i1 false, !12}
+!12 = !{i32 1, i32 4}
+!13 = !{null, !"", null, !4, !14}
+!14 = !{i32 0, i64 8454160}
+!15 = !{void ()* @"\01?rayGenerationMain@@YAXXZ", !"\01?rayGenerationMain@@YAXXZ", null, null, !16}
+!16 = !{i32 8, i32 7, i32 5, !17}
+!17 = !{i32 0}
+!18 = !{!19}
+!19 = distinct !{!19, !20, !"\01??$NvInvokeHitObject@USomeValues_0@@@@YAXURaytracingAccelerationStructure@@UNvHitObject@@USomeValues_0@@@Z: %Payload"}
+!20 = distinct !{!20, !"\01??$NvInvokeHitObject@USomeValues_0@@@@YAXURaytracingAccelerationStructure@@UNvHitObject@@USomeValues_0@@@Z"}
+!21 = !{!22}
+!22 = distinct !{!22, !23, !"\01??$GetAttributes@USomeValues_0@@@NvHitObject@@QAA?AUSomeValues_0@@XZ: %agg.result"}
+!23 = distinct !{!23, !"\01??$GetAttributes@USomeValues_0@@@NvHitObject@@QAA?AUSomeValues_0@@XZ"}
+}
diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang
new file mode 100644
index 000000000..6ddd80305
--- /dev/null
+++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang
@@ -0,0 +1,74 @@
+// hit-object-trace-ray.slang
+
+//TEST:SIMPLE: -target dxil -entry rayGenerationMain -stage raygeneration -profile sm_6_5 -DNV_SHADER_EXTN_SLOT=u0
+
+//DISABLE_TEST(compute):COMPARE_COMPUTE:-d3d12 -output-using-type -use-dxil -profile sm_6_6 -render-feature ray-query
+//DISABLE_TEST(compute):COMPARE_COMPUTE:-vk -output-using-type -render-feature ray-query
+
+//TEST_INPUT: set scene = AccelerationStructure
+uniform RaytracingAccelerationStructure scene;
+
+//TEST_INPUT:set outputBuffer = out ubuffer(data=[0, 0, 0, 0], stride=4)
+RWStructuredBuffer<uint> outputBuffer;
+
+struct SomeValues
+{
+ int a;
+ float b;
+};
+
+uint calcValue(HitObject hit)
+{
+ uint r = 0;
+
+ if (!hit.IsMiss())
+ {
+ uint instanceIndex = hit.GetInstanceIndex();
+ uint instanceID = hit.GetInstanceID();
+ uint geometryIndex = hit.GetGeometryIndex();
+ uint primitiveIndex = hit.GetPrimitiveIndex();
+
+ SomeValues objSomeValues = hit.GetAttributes<SomeValues>();
+
+ r += instanceIndex;
+ r += instanceID;
+ r += geometryIndex;
+ r += primitiveIndex;
+ r += objSomeValues.a;
+ }
+
+ return r;
+}
+
+void rayGenerationMain()
+{
+ int2 launchID = int2(DispatchRaysIndex().xy);
+ int2 launchSize = int2(DispatchRaysDimensions().xy);
+
+ int idx = launchID.x;
+
+ SomeValues someValues = { idx, idx * 2.0f };
+
+ RayDesc ray;
+ ray.Origin = float3(idx, 0, 0);
+ ray.TMin = 0.01f;
+ ray.Direction = float3(0, 1, 0);
+ ray.TMax = 1e4f;
+
+ RAY_FLAG rayFlags = RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH | RAY_FLAG_CULL_BACK_FACING_TRIANGLES;
+ uint instanceInclusionMask = 0xff;
+ uint rayContributionToHitGroupIndex = 0;
+ uint multiplierForGeometryContributionToHitGroupIndex = 4;
+ uint missShaderIndex = 0;
+
+ HitObject hit = HitObject::TraceRay(scene,
+ rayFlags,
+ instanceInclusionMask,
+ rayContributionToHitGroupIndex,
+ multiplierForGeometryContributionToHitGroupIndex,
+ missShaderIndex,
+ ray,
+ someValues);
+
+ outputBuffer[idx] = calcValue(hit);
+}
diff --git a/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang.expected b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang.expected
new file mode 100644
index 000000000..dc2363bbb
--- /dev/null
+++ b/tests/hlsl-intrinsic/shader-execution-reordering/hit-object-trace-ray.slang.expected
@@ -0,0 +1,225 @@
+result code = 0
+standard error = {
+}
+standard output = {
+;
+; Note: shader requires additional functionality:
+; UAVs at every shader stage
+;
+; shader hash: ff1fe13c5791fdce780d64762ab25ff9
+;
+; Buffer Definitions:
+;
+; Resource bind info for g_NvidiaExt
+; {
+;
+; struct struct.NvShaderExtnStruct
+; {
+;
+; uint opcode; ; Offset: 0
+; uint rid; ; Offset: 4
+; uint sid; ; Offset: 8
+; uint4 dst1u; ; Offset: 12
+; uint4 src3u; ; Offset: 28
+; uint4 src4u; ; Offset: 44
+; uint4 src5u; ; Offset: 60
+; uint4 src0u; ; Offset: 76
+; uint4 src1u; ; Offset: 92
+; uint4 src2u; ; Offset: 108
+; uint4 dst0u; ; Offset: 124
+; uint markUavRef; ; Offset: 140
+; uint numOutputsForIncCounter; ; Offset: 144
+; float padding1[27]; ; Offset: 148
+;
+; } $Element; ; Offset: 0 Size: 256
+;
+; }
+;
+; Resource bind info for outputBuffer_0
+; {
+;
+; uint $Element; ; Offset: 0 Size: 4
+;
+; }
+;
+;
+; Resource Bindings:
+;
+; Name Type Format Dim ID HLSL Bind Count
+; ------------------------------ ---------- ------- ----------- ------- -------------- ------
+; scene_0 texture i32 ras T0 t0 1
+; g_NvidiaExt UAV struct r/w+cnt U0 u0 1
+; outputBuffer_0 UAV struct r/w U1 u1 1
+;
+target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
+target triple = "dxil-ms-dx"
+
+%"class.RWStructuredBuffer<NvShaderExtnStruct>" = type { %struct.NvShaderExtnStruct }
+%struct.NvShaderExtnStruct = type { i32, i32, i32, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32, i32, [27 x float] }
+%struct.RaytracingAccelerationStructure = type { i32 }
+%"class.RWStructuredBuffer<unsigned int>" = type { i32 }
+%struct.SomeValues_0 = type { i32, float }
+%dx.types.Handle = type { i8* }
+
+@"\01?g_NvidiaExt@@3V?$RWStructuredBuffer@UNvShaderExtnStruct@@@@A" = external constant %"class.RWStructuredBuffer<NvShaderExtnStruct>", align 4
+@"\01?scene_0@@3URaytracingAccelerationStructure@@A" = external constant %struct.RaytracingAccelerationStructure, align 4
+@"\01?outputBuffer_0@@3V?$RWStructuredBuffer@I@@A" = external constant %"class.RWStructuredBuffer<unsigned int>", align 4
+
+; Function Attrs: nounwind
+define void @"\01?rayGenerationMain@@YAXXZ"() #0 {
+ %1 = load %struct.RaytracingAccelerationStructure, %struct.RaytracingAccelerationStructure* @"\01?scene_0@@3URaytracingAccelerationStructure@@A", align 4, !noalias !18
+ %2 = load %"class.RWStructuredBuffer<unsigned int>", %"class.RWStructuredBuffer<unsigned int>"* @"\01?outputBuffer_0@@3V?$RWStructuredBuffer@I@@A", align 4
+ %3 = load %"class.RWStructuredBuffer<NvShaderExtnStruct>", %"class.RWStructuredBuffer<NvShaderExtnStruct>"* @"\01?g_NvidiaExt@@3V?$RWStructuredBuffer@UNvShaderExtnStruct@@@@A", align 4, !noalias !22
+ %4 = alloca %struct.SomeValues_0, align 8
+ %5 = alloca %struct.SomeValues_0, align 4
+ %6 = call i32 @dx.op.dispatchRaysIndex.i32(i32 145, i8 0) ; DispatchRaysIndex(col)
+ %7 = sitofp i32 %6 to float
+ %8 = fmul fast float %7, 2.000000e+00
+ %9 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %5, i32 0, i32 0
+ store i32 %6, i32* %9, align 4
+ %10 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %5, i32 0, i32 1
+ store float %8, float* %10, align 4
+ %11 = sitofp i32 %6 to float
+ %12 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %13 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %12, i8 1) ; BufferUpdateCounter(uav,inc)
+ %14 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %14, i32 %13, i32 0, i32 67, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %15 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %15, i32 %13, i32 144, i32 2, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %16 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %16, i32 %13, i32 76, i32 0, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %17 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %18 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %17, i8 1) ; BufferUpdateCounter(uav,inc)
+ %19 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %20 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %19, i8 1) ; BufferUpdateCounter(uav,inc)
+ %21 = call %dx.types.Handle @dx.op.createHandleForLib.struct.RaytracingAccelerationStructure(i32 160, %struct.RaytracingAccelerationStructure %1) ; CreateHandleForLib(Resource)
+ call void @dx.op.traceRay.struct.SomeValues_0(i32 157, %dx.types.Handle %21, i32 20, i32 255, i32 0, i32 4, i32 %20, float %11, float 0.000000e+00, float 0.000000e+00, float 0x3F847AE140000000, float 0.000000e+00, float 1.000000e+00, float 0.000000e+00, float 1.000000e+04, %struct.SomeValues_0* nonnull %5) ; TraceRay(AccelerationStructure,RayFlags,InstanceInclusionMask,RayContributionToHitGroupIndex,MultiplierForGeometryContributionToShaderIndex,MissShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax,payload)
+ %22 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %23 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %22, i8 1) ; BufferUpdateCounter(uav,inc)
+ %24 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %24, i32 %23, i32 0, i32 73, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %25 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %25, i32 %23, i32 76, i32 %18, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %26 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %27 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %26, i8 1) ; BufferUpdateCounter(uav,inc)
+ %28 = icmp eq i32 %27, 0
+ br i1 %28, label %29, label %66
+
+; <label>:29 ; preds = %0
+ %30 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %31 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %30, i8 1) ; BufferUpdateCounter(uav,inc)
+ %32 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %32, i32 %31, i32 0, i32 75, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %33 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %33, i32 %31, i32 76, i32 %18, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %34 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %35 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %34, i8 1) ; BufferUpdateCounter(uav,inc)
+ %36 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %37 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %36, i8 1) ; BufferUpdateCounter(uav,inc)
+ %38 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %38, i32 %37, i32 0, i32 74, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %39 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %39, i32 %37, i32 76, i32 %18, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %40 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %41 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %40, i8 1) ; BufferUpdateCounter(uav,inc)
+ %42 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %43 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %42, i8 1) ; BufferUpdateCounter(uav,inc)
+ %44 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %44, i32 %43, i32 0, i32 77, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %45 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %45, i32 %43, i32 76, i32 %18, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %46 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %47 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %46, i8 1) ; BufferUpdateCounter(uav,inc)
+ %48 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %49 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %48, i8 1) ; BufferUpdateCounter(uav,inc)
+ %50 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %50, i32 %49, i32 0, i32 76, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %51 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %51, i32 %49, i32 76, i32 %18, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %52 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %53 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %52, i8 1) ; BufferUpdateCounter(uav,inc)
+ %54 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %55 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %54, i8 1) ; BufferUpdateCounter(uav,inc)
+ %56 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %56, i32 %55, i32 0, i32 80, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %57 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %57, i32 %55, i32 76, i32 %18, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ %58 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32 160, %"class.RWStructuredBuffer<NvShaderExtnStruct>" %3) ; CreateHandleForLib(Resource)
+ %59 = call i32 @dx.op.bufferUpdateCounter(i32 70, %dx.types.Handle %58, i8 1) ; BufferUpdateCounter(uav,inc)
+ call void @dx.op.callShader.struct.SomeValues_0(i32 159, i32 %59, %struct.SomeValues_0* nonnull %4) ; CallShader(ShaderIndex,Parameter)
+ %60 = getelementptr inbounds %struct.SomeValues_0, %struct.SomeValues_0* %4, i32 0, i32 0
+ %61 = load i32, i32* %60, align 8
+ %62 = add i32 %41, %35
+ %63 = add i32 %62, %47
+ %64 = add i32 %63, %53
+ %65 = add i32 %64, %61
+ br label %66
+
+; <label>:66 ; preds = %29, %0
+ %67 = phi i32 [ %65, %29 ], [ 0, %0 ]
+ %68 = call %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<unsigned int>"(i32 160, %"class.RWStructuredBuffer<unsigned int>" %2) ; CreateHandleForLib(Resource)
+ call void @dx.op.rawBufferStore.i32(i32 140, %dx.types.Handle %68, i32 %6, i32 0, i32 %67, i32 undef, i32 undef, i32 undef, i8 1, i32 4) ; RawBufferStore(uav,index,elementOffset,value0,value1,value2,value3,mask,alignment)
+ ret void
+}
+
+; Function Attrs: nounwind
+declare i32 @dx.op.bufferUpdateCounter(i32, %dx.types.Handle, i8) #0
+
+; Function Attrs: nounwind
+declare void @dx.op.rawBufferStore.i32(i32, %dx.types.Handle, i32, i32, i32, i32, i32, i32, i8, i32) #0
+
+; Function Attrs: nounwind readnone
+declare i32 @dx.op.dispatchRaysIndex.i32(i32, i8) #1
+
+; Function Attrs: nounwind
+declare void @dx.op.callShader.struct.SomeValues_0(i32, i32, %struct.SomeValues_0*) #0
+
+; Function Attrs: nounwind
+declare void @dx.op.traceRay.struct.SomeValues_0(i32, %dx.types.Handle, i32, i32, i32, i32, i32, float, float, float, float, float, float, float, float, %struct.SomeValues_0*) #0
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<NvShaderExtnStruct>"(i32, %"class.RWStructuredBuffer<NvShaderExtnStruct>") #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @"dx.op.createHandleForLib.class.RWStructuredBuffer<unsigned int>"(i32, %"class.RWStructuredBuffer<unsigned int>") #2
+
+; Function Attrs: nounwind readonly
+declare %dx.types.Handle @dx.op.createHandleForLib.struct.RaytracingAccelerationStructure(i32, %struct.RaytracingAccelerationStructure) #2
+
+attributes #0 = { nounwind }
+attributes #1 = { nounwind readnone }
+attributes #2 = { nounwind readonly }
+
+!llvm.ident = !{!0}
+!dx.version = !{!1}
+!dx.valver = !{!2}
+!dx.shaderModel = !{!3}
+!dx.resources = !{!4}
+!dx.entryPoints = !{!13, !15}
+
+!0 = !{!"clang version 3.7 (tags/RELEASE_370/final)"}
+!1 = !{i32 1, i32 5}
+!2 = !{i32 1, i32 7}
+!3 = !{!"lib", i32 6, i32 5}
+!4 = !{!5, !8, null, null}
+!5 = !{!6}
+!6 = !{i32 0, %struct.RaytracingAccelerationStructure* @"\01?scene_0@@3URaytracingAccelerationStructure@@A", !"scene_0", i32 0, i32 0, i32 1, i32 16, i32 0, !7}
+!7 = !{i32 0, i32 4}
+!8 = !{!9, !11}
+!9 = !{i32 0, %"class.RWStructuredBuffer<NvShaderExtnStruct>"* @"\01?g_NvidiaExt@@3V?$RWStructuredBuffer@UNvShaderExtnStruct@@@@A", !"g_NvidiaExt", i32 0, i32 0, i32 1, i32 12, i1 false, i1 true, i1 false, !10}
+!10 = !{i32 1, i32 256}
+!11 = !{i32 1, %"class.RWStructuredBuffer<unsigned int>"* @"\01?outputBuffer_0@@3V?$RWStructuredBuffer@I@@A", !"outputBuffer_0", i32 0, i32 1, i32 1, i32 12, i1 false, i1 false, i1 false, !12}
+!12 = !{i32 1, i32 4}
+!13 = !{null, !"", null, !4, !14}
+!14 = !{i32 0, i64 8454160}
+!15 = !{void ()* @"\01?rayGenerationMain@@YAXXZ", !"\01?rayGenerationMain@@YAXXZ", null, null, !16}
+!16 = !{i32 8, i32 7, i32 5, !17}
+!17 = !{i32 0}
+!18 = !{!19, !21}
+!19 = distinct !{!19, !20, !"\01??$NvTraceRayHitObject@USomeValues_0@@@@YA?AUNvHitObject@@URaytracingAccelerationStructure@@IIIIIURayDesc@@USomeValues_0@@@Z: %agg.result"}
+!20 = distinct !{!20, !"\01??$NvTraceRayHitObject@USomeValues_0@@@@YA?AUNvHitObject@@URaytracingAccelerationStructure@@IIIIIURayDesc@@USomeValues_0@@@Z"}
+!21 = distinct !{!21, !20, !"\01??$NvTraceRayHitObject@USomeValues_0@@@@YA?AUNvHitObject@@URaytracingAccelerationStructure@@IIIIIURayDesc@@USomeValues_0@@@Z: %Payload"}
+!22 = !{!23}
+!23 = distinct !{!23, !24, !"\01??$GetAttributes@USomeValues_0@@@NvHitObject@@QAA?AUSomeValues_0@@XZ: %agg.result"}
+!24 = distinct !{!24, !"\01??$GetAttributes@USomeValues_0@@@NvHitObject@@QAA?AUSomeValues_0@@XZ"}
+}