|
@@ -62,6 +62,7 @@
|
|
|
// CHECK: OpDecorate [[nu50:%\d+]] NonUniform
|
|
|
// CHECK: OpDecorate [[nu51:%\d+]] NonUniform
|
|
|
// CHECK: OpDecorate [[nu52:%\d+]] NonUniform
|
|
|
+// CHECK: OpDecorate [[nu53:%\d+]] NonUniform
|
|
|
|
|
|
Texture2D gTextures[32];
|
|
|
SamplerState gSamplers[];
|
|
@@ -71,101 +72,118 @@ RWBuffer<uint> gRWBuffers[32];
|
|
|
SubpassInput gSubpassInputs[32];
|
|
|
|
|
|
float4 main(uint index : A, float2 loc : B, int2 offset : C) : SV_Target {
|
|
|
-// CHECK: [[nu1]] = OpLoad %uint %index
|
|
|
-// CHECK: [[nu2]] = OpAccessChain %_ptr_UniformConstant_type_2d_image %gTextures [[nu1]]
|
|
|
-// CHECK: [[nu3]] = OpLoad %type_2d_image
|
|
|
-// CHECK: [[nu4]] = OpIAdd %uint {{%\d+}} %uint_1
|
|
|
-// CHECK: [[nu5]] = OpAccessChain %_ptr_UniformConstant_type_sampler %gSamplers [[nu4]]
|
|
|
-// CHECK: [[nu6]] = OpLoad %type_sampler
|
|
|
-// CHECK: [[nu7]] = OpSampledImage %type_sampled_image
|
|
|
-// CHECK: OpImageSampleImplicitLod
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu1]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu2]] = OpAccessChain %_ptr_UniformConstant_type_2d_image %gTextures [[nu1]]
|
|
|
+// CHECK: [[nu3]] = OpLoad %type_2d_image
|
|
|
+// CHECK: [[i:%\d+]] = OpIAdd %uint {{%\d+}} %uint_1
|
|
|
+// CHECK: [[nu4]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu5]] = OpAccessChain %_ptr_UniformConstant_type_sampler %gSamplers [[nu4]]
|
|
|
+// CHECK: [[nu6]] = OpLoad %type_sampler
|
|
|
+// CHECK: [[nu7]] = OpSampledImage %type_sampled_image
|
|
|
+// CHECK: OpImageSampleImplicitLod
|
|
|
float4 v1 = gTextures[NonUniformResourceIndex(index)].Sample(
|
|
|
gSamplers[NonUniformResourceIndex(index + 1)], loc);
|
|
|
|
|
|
-// CHECK: [[nu8]] = OpLoad %uint %index
|
|
|
-// CHECK: OpIAdd %uint {{%\d+}} %uint_1
|
|
|
-// CHECK: [[nu9]] = OpAccessChain %_ptr_UniformConstant_type_sampler %gSamplers [[nu8]]
|
|
|
-// CHECK: [[nu10]] = OpLoad %type_sampler
|
|
|
-// CHECK: [[nu11]] = OpSampledImage %type_sampled_image
|
|
|
-// CHECK: OpImageSampleImplicitLod
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[iplus1:%\d+]] = OpIAdd %uint [[i]] %uint_1
|
|
|
+// CHECK: OpStore %index [[iplus1]]
|
|
|
+// CHECK: [[nu8]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu9]] = OpAccessChain %_ptr_UniformConstant_type_sampler %gSamplers [[nu8]]
|
|
|
+// CHECK: [[nu10]] = OpLoad %type_sampler
|
|
|
+// CHECK: [[nu11]] = OpSampledImage %type_sampled_image
|
|
|
+// CHECK: OpImageSampleImplicitLod
|
|
|
float4 v2 = gTextures[0].Sample(
|
|
|
gSamplers[NonUniformResourceIndex(index++)], loc);
|
|
|
|
|
|
-// CHECK: OpLoad %uint %index
|
|
|
-// CHECK: OpISub %uint {{%\d+}} %uint_1
|
|
|
-// CHECK: [[nu12]] = OpLoad %uint %index
|
|
|
-// CHECK: [[nu13]] = OpAccessChain %_ptr_UniformConstant_type_2d_image %gTextures [[nu12]]
|
|
|
-// CHECK: [[nu14]] = OpLoad %type_2d_image
|
|
|
-// CHECK: [[nu15]] = OpSampledImage %type_sampled_image
|
|
|
-// CHECK: OpImageSampleImplicitLod
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[iminus1:%\d+]] = OpISub %uint [[i]] %uint_1
|
|
|
+// CHECK: OpStore %index [[iminus1]]
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu12]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu13]] = OpAccessChain %_ptr_UniformConstant_type_2d_image %gTextures [[nu12]]
|
|
|
+// CHECK: [[nu14]] = OpLoad %type_2d_image
|
|
|
+// CHECK: [[nu15]] = OpSampledImage %type_sampled_image
|
|
|
+// CHECK: OpImageSampleImplicitLod
|
|
|
float4 v3 = gTextures[NonUniformResourceIndex(--index)].Sample(
|
|
|
gSamplers[0], loc);
|
|
|
|
|
|
-// CHECK: [[nu16]] = OpIMul %uint
|
|
|
-// CHECK: [[nu17]] = OpAccessChain %_ptr_UniformConstant_type_2d_image_0 %gRWTextures [[nu16]]
|
|
|
-// CHECK: [[nu18]] = OpLoad %type_2d_image_0
|
|
|
-// CHECK: OpImageRead
|
|
|
+// CHECK: [[mul:%\d+]] = OpIMul %uint
|
|
|
+// CHECK: [[nu16]] = OpCopyObject %uint [[mul]]
|
|
|
+// CHECK: [[nu17]] = OpAccessChain %_ptr_UniformConstant_type_2d_image_0 %gRWTextures [[nu16]]
|
|
|
+// CHECK: [[nu18]] = OpLoad %type_2d_image_0
|
|
|
+// CHECK: OpImageRead
|
|
|
float4 v4 = gRWTextures[NonUniformResourceIndex(index * index)].Load(loc);
|
|
|
|
|
|
-// CHECK: [[nu19]] = OpLoad %uint %index
|
|
|
+// CHECK:[[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu19]] = OpCopyObject %uint [[i]]
|
|
|
// CHECK: [[nu20]] = OpUMod %uint [[nu19]] %uint_3
|
|
|
// CHECK: [[nu21]] = OpAccessChain %_ptr_UniformConstant_type_2d_image_0 %gRWTextures [[nu20]]
|
|
|
// CHECK: [[nu22]] = OpLoad %type_2d_image_0
|
|
|
// CHECK: OpImageWrite
|
|
|
gRWTextures[NonUniformResourceIndex(index) % 3][loc] = 4;
|
|
|
|
|
|
-// CHECK: [[nu23]] = OpLoad %uint %index
|
|
|
-// CHECK: OpLoad %uint %index
|
|
|
-// CHECK: [[nu24]] = OpIMul %uint [[nu23]] {{%\d+}}
|
|
|
-// CHECK: [[nu25]] = OpAccessChain %_ptr_UniformConstant_type_buffer_image %gBuffers [[nu24]]
|
|
|
-// CHECK: [[nu26]] = OpLoad %type_buffer_image
|
|
|
-// CHECK: OpImageFetch
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu23]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu24]] = OpIMul %uint [[nu23]] [[i]]
|
|
|
+// CHECK: [[nu25]] = OpAccessChain %_ptr_UniformConstant_type_buffer_image %gBuffers [[nu24]]
|
|
|
+// CHECK: [[nu26]] = OpLoad %type_buffer_image
|
|
|
+// CHECK: OpImageFetch
|
|
|
float4 v5 = gBuffers[NonUniformResourceIndex(index) * index][5];
|
|
|
|
|
|
-// CHECK: [[nu27]] = OpLoad %uint %index
|
|
|
-// CHECK: [[nu28]] = OpAccessChain %_ptr_UniformConstant_type_buffer_image_0 %gRWBuffers [[nu27]]
|
|
|
-// CHECK: [[nu29]] = OpLoad %type_buffer_image_0
|
|
|
-// CHECK: OpImageRead
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu27]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu28]] = OpAccessChain %_ptr_UniformConstant_type_buffer_image_0 %gRWBuffers [[nu27]]
|
|
|
+// CHECK: [[nu29]] = OpLoad %type_buffer_image_0
|
|
|
+// CHECK: OpImageRead
|
|
|
float4 v6 = gRWBuffers[NonUniformResourceIndex(index)].Load(6);
|
|
|
|
|
|
-// CHECK: [[nu30]] = OpLoad %uint %index
|
|
|
-// CHECK: [[nu31]] = OpAccessChain %_ptr_UniformConstant_type_buffer_image_0 %gRWBuffers [[nu30]]
|
|
|
-// CHECK: [[nu32]] = OpLoad %type_buffer_image_0
|
|
|
-// CHECK: OpImageWrite
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu30]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu31]] = OpAccessChain %_ptr_UniformConstant_type_buffer_image_0 %gRWBuffers [[nu30]]
|
|
|
+// CHECK: [[nu32]] = OpLoad %type_buffer_image_0
|
|
|
+// CHECK: OpImageWrite
|
|
|
gRWBuffers[NonUniformResourceIndex(index)][8] = 9;
|
|
|
|
|
|
-// CHECK: [[nu33]] = OpLoad %uint %index
|
|
|
-// CHECK: [[nu34]] = OpLoad %uint %index
|
|
|
-// CHECK: [[nu35]] = OpIMul %uint [[nu33]] [[nu34]]
|
|
|
-// CHECK: [[nu36]] = OpAccessChain %_ptr_UniformConstant_type_buffer_image_0 %gRWBuffers [[nu35]]
|
|
|
-// CHECK: [[nu37]] = OpImageTexelPointer %_ptr_Image_uint {{%\d+}} %uint_10 %uint_0
|
|
|
-// CHECK: OpAtomicIAdd
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu33]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu34]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu35]] = OpIMul %uint [[nu33]] [[nu34]]
|
|
|
+// CHECK: [[nu36]] = OpAccessChain %_ptr_UniformConstant_type_buffer_image_0 %gRWBuffers [[nu35]]
|
|
|
+// CHECK: [[nu37]] = OpImageTexelPointer %_ptr_Image_uint {{%\d+}} %uint_10 %uint_0
|
|
|
+// CHECK: [[nu38]] = OpAtomicIAdd
|
|
|
uint old = 0;
|
|
|
InterlockedAdd(gRWBuffers[NonUniformResourceIndex(index) * NonUniformResourceIndex(index)][10], 1, old);
|
|
|
|
|
|
-// CHECK: [[nu38]] = OpLoad %uint %index
|
|
|
-// CHECK: [[nu39]] = OpAccessChain %_ptr_UniformConstant_type_subpass_image %gSubpassInputs [[nu38]]
|
|
|
-// CHECK: [[nu40]] = OpLoad %type_subpass_image
|
|
|
-// CHECK: OpImageRead
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu39]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu40]] = OpAccessChain %_ptr_UniformConstant_type_subpass_image %gSubpassInputs [[nu39]]
|
|
|
+// CHECK: [[nu41]] = OpLoad %type_subpass_image
|
|
|
+// CHECK: OpImageRead
|
|
|
float4 v7 = gSubpassInputs[NonUniformResourceIndex(index)].SubpassLoad();
|
|
|
|
|
|
-// CHECK: [[nu41]] = OpLoad %uint %index
|
|
|
-// CHECK: [[nu42]] = OpAccessChain %_ptr_UniformConstant_type_2d_image %gTextures [[nu41]]
|
|
|
-// CHECK: [[nu43]] = OpLoad %type_2d_image
|
|
|
-// CHECK: [[nu44]] = OpSampledImage %type_sampled_image
|
|
|
-// CHECK: OpImageGather
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu42]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu43]] = OpAccessChain %_ptr_UniformConstant_type_2d_image %gTextures [[nu42]]
|
|
|
+// CHECK: [[nu44]] = OpLoad %type_2d_image
|
|
|
+// CHECK: [[nu45]] = OpSampledImage %type_sampled_image
|
|
|
+// CHECK: OpImageGather
|
|
|
float4 v8 = gTextures[NonUniformResourceIndex(index)].Gather(gSamplers[0], loc, offset);
|
|
|
|
|
|
-// CHECK: [[nu45]] = OpLoad %uint %index
|
|
|
-// CHECK: [[nu46]] = OpAccessChain %_ptr_UniformConstant_type_2d_image %gTextures [[nu45]]
|
|
|
-// CHECK: [[nu47]] = OpLoad %type_2d_image
|
|
|
-// CHECK: [[nu48]] = OpSampledImage %type_sampled_image
|
|
|
-// CHECK: OpImageQueryLod
|
|
|
-// CHECK: [[nu49]] = OpLoad %uint %index
|
|
|
-// CHECK: [[nu50]] = OpAccessChain %_ptr_UniformConstant_type_2d_image %gTextures [[nu49]]
|
|
|
-// CHECK: [[nu51]] = OpLoad %type_2d_image
|
|
|
-// CHECK: [[nu52]] = OpSampledImage %type_sampled_image
|
|
|
-// CHECK: OpImageQueryLod
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu46]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu47]] = OpAccessChain %_ptr_UniformConstant_type_2d_image %gTextures [[nu46]]
|
|
|
+// CHECK: [[nu48]] = OpLoad %type_2d_image
|
|
|
+// CHECK: [[nu49]] = OpSampledImage %type_sampled_image
|
|
|
+// CHECK: OpImageQueryLod
|
|
|
+// CHECK: [[i:%\d+]] = OpLoad %uint %index
|
|
|
+// CHECK: [[nu50]] = OpCopyObject %uint [[i]]
|
|
|
+// CHECK: [[nu51]] = OpAccessChain %_ptr_UniformConstant_type_2d_image %gTextures [[nu50]]
|
|
|
+// CHECK: [[nu52]] = OpLoad %type_2d_image
|
|
|
+// CHECK: [[nu53]] = OpSampledImage %type_sampled_image
|
|
|
+// CHECK: OpImageQueryLod
|
|
|
float v9 = gTextures[NonUniformResourceIndex(index)].CalculateLevelOfDetail(gSamplers[0], 0.5);
|
|
|
|
|
|
return v1 + v2 + v3 + v4 + v5 + v6 + v7;
|