Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
353 changes: 222 additions & 131 deletions tools/clang/lib/SPIRV/SpirvEmitter.cpp

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions tools/clang/test/CodeGenSPIRV/texture.array.sample-bias.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ float4 main(int2 offset : A) : SV_Target {
float4 val3 = t3.SampleBias(gSampler, float4(1, 2, 3, 1), 0.5);

float clamp;
// CHECK: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t1_0:%[0-9]+]] = OpLoad %type_1d_image_array %t1
// CHECK: [[t1_0:%[0-9]+]] = OpLoad %type_1d_image_array %t1
// CHECK-NEXT: [[gSampler_2:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_2:%[0-9]+]] = OpSampledImage %type_sampled_image [[t1_0]] [[gSampler_2]]
// CHECK-NEXT: {{%[0-9]+}} = OpImageSampleImplicitLod %v4float [[sampledImg_2]] [[v2fc]] Bias|ConstOffset|MinLod %float_0_5 %int_1 [[clamp]]
float4 val4 = t1.SampleBias(gSampler, float2(1, 1), 0.5, 1, clamp);
Expand All @@ -57,9 +57,9 @@ float4 main(int2 offset : A) : SV_Target {
float4 val5 = t3.SampleBias(gSampler, float4(1, 2, 3, 1), 0.5, /*clamp*/ 2.5f);

uint status;
// CHECK: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t1_1:%[0-9]+]] = OpLoad %type_1d_image_array %t1
// CHECK: [[t1_1:%[0-9]+]] = OpLoad %type_1d_image_array %t1
// CHECK-NEXT: [[gSampler_4:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_4:%[0-9]+]] = OpSampledImage %type_sampled_image [[t1_1]] [[gSampler_4]]
// CHECK-NEXT: [[structResult:%[0-9]+]] = OpImageSparseSampleImplicitLod %SparseResidencyStruct [[sampledImg_4]] [[v2fc]] Bias|ConstOffset|MinLod %float_0_5 %int_1 [[clamp_0]]
// CHECK-NEXT: [[status:%[0-9]+]] = OpCompositeExtract %uint [[structResult]] 0
Expand Down
8 changes: 4 additions & 4 deletions tools/clang/test/CodeGenSPIRV/texture.array.sample-cmp.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ float4 main(int2 offset: A, float comparator: B) : SV_Target {
float val3 = t3.SampleCmp(gSampler, float4(1, 2, 3, 1), comparator);

float clamp;
// CHECK: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t2_0:%[0-9]+]] = OpLoad %type_2d_image_array %t2
// CHECK: [[t2_0:%[0-9]+]] = OpLoad %type_2d_image_array %t2
// CHECK-NEXT: [[gSampler_2:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[comparator_2:%[0-9]+]] = OpLoad %float %comparator
// CHECK-NEXT: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_2:%[0-9]+]] = OpSampledImage %type_sampled_image_0 [[t2_0]] [[gSampler_2]]
// CHECK-NEXT: {{%[0-9]+}} = OpImageSampleDrefImplicitLod %float [[sampledImg_2]] [[v3fc]] [[comparator_2]] ConstOffset|MinLod [[v2ic]] [[clamp]]
float val4 = t2.SampleCmp(gSampler, float3(1, 2, 1), comparator, 1, clamp);
Expand All @@ -55,10 +55,10 @@ float4 main(int2 offset: A, float comparator: B) : SV_Target {
float val5 = t3.SampleCmp(gSampler, float4(1, 2, 3, 1), comparator, /*clamp*/ 1.5);

uint status;
// CHECK: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t2_1:%[0-9]+]] = OpLoad %type_2d_image_array %t2
// CHECK: [[t2_1:%[0-9]+]] = OpLoad %type_2d_image_array %t2
// CHECK-NEXT: [[gSampler_4:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[comparator_4:%[0-9]+]] = OpLoad %float %comparator
// CHECK-NEXT: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_4:%[0-9]+]] = OpSampledImage %type_sampled_image_0 [[t2_1]] [[gSampler_4]]
// CHECK-NEXT: [[structResult:%[0-9]+]] = OpImageSparseSampleDrefImplicitLod %SparseResidencyStruct [[sampledImg_4]] [[v3fc]] [[comparator_4]] ConstOffset|MinLod [[v2ic]] [[clamp_0]]
// CHECK-NEXT: [[status:%[0-9]+]] = OpCompositeExtract %uint [[structResult]] 0
Expand Down
8 changes: 4 additions & 4 deletions tools/clang/test/CodeGenSPIRV/texture.array.sample-grad.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ float4 main(int2 offset : A) : SV_Target {
float4 val4 = t2.SampleGrad(gSampler, float3(1, 1, 1), float2(2, 2), float2(3, 3), 1, /*clamp*/2.5);

float clamp;
// CHECK: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t3_0:%[0-9]+]] = OpLoad %type_cube_image_array %t3
// CHECK: [[t3_0:%[0-9]+]] = OpLoad %type_cube_image_array %t3
// CHECK-NEXT: [[gSampler_3:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_3:%[0-9]+]] = OpSampledImage %type_sampled_image_1 [[t3_0]] [[gSampler_3]]
// CHECK-NEXT: {{%[0-9]+}} = OpImageSampleExplicitLod %v4float [[sampledImg_3]] [[v4f_1]] Grad|MinLod [[v3f_2]] [[v3f_3]] [[clamp]]
float4 val5 = t3.SampleGrad(gSampler, float4(1, 1, 1, 1), float3(2, 2, 2), float3(3, 3, 3), clamp);
Expand All @@ -72,9 +72,9 @@ float4 main(int2 offset : A) : SV_Target {
// CHECK-NEXT: OpStore %val6 [[result]]
float4 val6 = t2.SampleGrad(gSampler, float3(1, 1, 1), float2(2, 2), float2(3, 3), 1, /*clamp*/2.5, status);

// CHECK: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t3_1:%[0-9]+]] = OpLoad %type_cube_image_array %t3
// CHECK: [[t3_1:%[0-9]+]] = OpLoad %type_cube_image_array %t3
// CHECK-NEXT: [[gSampler_5:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_5:%[0-9]+]] = OpSampledImage %type_sampled_image_1 [[t3_1]] [[gSampler_5]]
// CHECK-NEXT: [[structResult_0:%[0-9]+]] = OpImageSparseSampleExplicitLod %SparseResidencyStruct [[sampledImg_5]] [[v4f_1]] Grad|MinLod [[v3f_2]] [[v3f_3]] [[clamp_0]]
// CHECK-NEXT: [[status_0:%[0-9]+]] = OpCompositeExtract %uint [[structResult_0]] 0
Expand Down
8 changes: 4 additions & 4 deletions tools/clang/test/CodeGenSPIRV/texture.array.sample.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ float4 main() : SV_Target {
float4 val3 = t3.Sample(gSampler, float4(0.5, 0.25, 0.125, 1));

float clamp;
// CHECK: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t1_0:%[0-9]+]] = OpLoad %type_1d_image_array %t1
// CHECK: [[t1_0:%[0-9]+]] = OpLoad %type_1d_image_array %t1
// CHECK-NEXT: [[gSampler_2:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_2:%[0-9]+]] = OpSampledImage %type_sampled_image [[t1_0]] [[gSampler_2]]
// CHECK-NEXT: {{%[0-9]+}} = OpImageSampleImplicitLod %v4float [[sampledImg_2]] [[v2fc]] ConstOffset|MinLod %int_1 [[clamp]]
float4 val4 = t1.Sample(gSampler, float2(0.5, 1), 1, clamp);
Expand All @@ -56,9 +56,9 @@ float4 main() : SV_Target {
float4 val5 = t3.Sample(gSampler, float4(0.5, 0.25, 0.125, 1), /*clamp*/ 1.5);

uint status;
// CHECK: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t1_1:%[0-9]+]] = OpLoad %type_1d_image_array %t1
// CHECK: [[t1_1:%[0-9]+]] = OpLoad %type_1d_image_array %t1
// CHECK-NEXT: [[gSampler_4:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_4:%[0-9]+]] = OpSampledImage %type_sampled_image [[t1_1]] [[gSampler_4]]
// CHECK-NEXT: [[structResult:%[0-9]+]] = OpImageSparseSampleImplicitLod %SparseResidencyStruct [[sampledImg_4]] [[v2fc]] ConstOffset|MinLod %int_1 [[clamp_0]]
// CHECK-NEXT: [[status:%[0-9]+]] = OpCompositeExtract %uint [[structResult]] 0
Expand Down
8 changes: 4 additions & 4 deletions tools/clang/test/CodeGenSPIRV/texture.sample-bias.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ float4 main(int3 offset: A) : SV_Target {
float4 val4 = t4.SampleBias(gSampler, float3(1, 2, 3), 0.5);

float clamp;
// CHECK: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t3_0:%[0-9]+]] = OpLoad %type_3d_image %t3
// CHECK: [[t3_0:%[0-9]+]] = OpLoad %type_3d_image %t3
// CHECK-NEXT: [[gSampler_3:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_3:%[0-9]+]] = OpSampledImage %type_sampled_image_1 [[t3_0]] [[gSampler_3]]
// CHECK-NEXT: {{%[0-9]+}} = OpImageSampleImplicitLod %v4float [[sampledImg_3]] [[v3fc]] Bias|ConstOffset|MinLod %float_0_5 [[v3ic]] [[clamp]]
float4 val5 = t3.SampleBias(gSampler, float3(1, 2, 3), 0.5, 1, clamp);
Expand All @@ -65,9 +65,9 @@ float4 main(int3 offset: A) : SV_Target {
float4 val6 = t4.SampleBias(gSampler, float3(1, 2, 3), 0.5, /*clamp*/ 2.5);

uint status;
// CHECK: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t3_1:%[0-9]+]] = OpLoad %type_3d_image %t3
// CHECK: [[t3_1:%[0-9]+]] = OpLoad %type_3d_image %t3
// CHECK-NEXT: [[gSampler_5:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_5:%[0-9]+]] = OpSampledImage %type_sampled_image_1 [[t3_1]] [[gSampler_5]]
// CHECK-NEXT: [[structResult:%[0-9]+]] = OpImageSparseSampleImplicitLod %SparseResidencyStruct [[sampledImg_5]] [[v3fc]] Bias|ConstOffset|MinLod %float_0_5 [[v3ic]] [[clamp_0]]
// CHECK-NEXT: [[status:%[0-9]+]] = OpCompositeExtract %uint [[structResult]] 0
Expand Down
8 changes: 4 additions & 4 deletions tools/clang/test/CodeGenSPIRV/texture.sample-cmp.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ float4 main(int2 offset: A, float comparator: B) : SV_Target {
float val4 = t4.SampleCmp(gSampler, float3(1, 2, 3), comparator);

float clamp;
// CHECK: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t2_0:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK: [[t2_0:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK-NEXT: [[gSampler_2:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[comparator_2:%[0-9]+]] = OpLoad %float %comparator
// CHECK-NEXT: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_2:%[0-9]+]] = OpSampledImage %type_sampled_image_0 [[t2_0]] [[gSampler_2]]
// CHECK-NEXT: {{%[0-9]+}} = OpImageSampleDrefImplicitLod %float [[sampledImg_2]] [[v2fc]] [[comparator_2]] ConstOffset|MinLod [[v2ic]] [[clamp]]
float val5 = t2.SampleCmp(gSampler, float2(1, 2), comparator, 1, clamp);
Expand All @@ -55,10 +55,10 @@ float4 main(int2 offset: A, float comparator: B) : SV_Target {
float val6 = t4.SampleCmp(gSampler, float3(1, 2, 3), comparator, /*clamp*/2.5);

uint status;
// CHECK: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t2_1:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK: [[t2_1:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK-NEXT: [[gSampler_4:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[comparator_4:%[0-9]+]] = OpLoad %float %comparator
// CHECK-NEXT: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_4:%[0-9]+]] = OpSampledImage %type_sampled_image_0 [[t2_1]] [[gSampler_4]]
// CHECK-NEXT: [[structResult:%[0-9]+]] = OpImageSparseSampleDrefImplicitLod %SparseResidencyStruct [[sampledImg_4]] [[v2fc]] [[comparator_4]] ConstOffset|MinLod [[v2ic]] [[clamp_0]]
// CHECK-NEXT: [[status:%[0-9]+]] = OpCompositeExtract %uint [[structResult]] 0
Expand Down
8 changes: 4 additions & 4 deletions tools/clang/test/CodeGenSPIRV/texture.sample-grad.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ float4 main(int2 offset : A) : SV_Target {
float4 val4 = t4.SampleGrad(gSampler, float3(1, 1, 1), float3(2, 2, 2), float3(3, 3, 3));

float clamp;
// CHECK: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t2_0:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK: [[t2_0:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK-NEXT: [[gSampler_3:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_3:%[0-9]+]] = OpSampledImage %type_sampled_image_0 [[t2_0]] [[gSampler_3]]
// CHECK-NEXT: {{%[0-9]+}} = OpImageSampleExplicitLod %v4float [[sampledImg_3]] [[v2f_1]] Grad|ConstOffset|MinLod [[v2f_2]] [[v2f_3]] [[v2i_3]] [[clamp]]
float4 val5 = t2.SampleGrad(gSampler, float2(1, 1), float2(2, 2), float2(3, 3), 3, clamp);
Expand All @@ -69,9 +69,9 @@ float4 main(int2 offset : A) : SV_Target {
float4 val6 = t4.SampleGrad(gSampler, float3(1, 1, 1), float3(2, 2, 2), float3(3, 3, 3), /*clamp*/3.5);

uint status;
// CHECK: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t2_1:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK: [[t2_1:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK-NEXT: [[gSampler_5:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_5:%[0-9]+]] = OpSampledImage %type_sampled_image_0 [[t2_1]] [[gSampler_5]]
// CHECK-NEXT: [[structResult:%[0-9]+]] = OpImageSparseSampleExplicitLod %SparseResidencyStruct [[sampledImg_5]] [[v2f_1]] Grad|ConstOffset|MinLod [[v2f_2]] [[v2f_3]] [[v2i_3]] [[clamp_0]]
// CHECK-NEXT: [[status:%[0-9]+]] = OpCompositeExtract %uint [[structResult]] 0
Expand Down
8 changes: 4 additions & 4 deletions tools/clang/test/CodeGenSPIRV/texture.sample.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ float4 main(int2 offset: A) : SV_Target {
float4 val4 = t4.Sample(gSampler, float3(0.5, 0.25, 0.3));

float clamp;
// CHECK: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t2_0:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK: [[t2_0:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK-NEXT: [[gSampler_3:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_3:%[0-9]+]] = OpSampledImage %type_sampled_image_0 [[t2_0]] [[gSampler_3]]
// CHECK-NEXT: {{%[0-9]+}} = OpImageSampleImplicitLod %v4float [[sampledImg_3]] [[v2fc]] ConstOffset|MinLod [[v2ic]] [[clamp]]
float4 val5 = t2.Sample(gSampler, float2(0.5, 0.25), int2(2, 3), clamp);
Expand All @@ -65,9 +65,9 @@ float4 main(int2 offset: A) : SV_Target {
float4 val6 = t4.Sample(gSampler, float3(0.5, 0.25, 0.3), /*clamp*/ 2.0f);

uint status;
// CHECK: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[t2_1:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK: [[t2_1:%[0-9]+]] = OpLoad %type_2d_image %t2
// CHECK-NEXT: [[gSampler_5:%[0-9]+]] = OpLoad %type_sampler %gSampler
// CHECK-NEXT: [[clamp_0:%[0-9]+]] = OpLoad %float %clamp
// CHECK-NEXT: [[sampledImg_5:%[0-9]+]] = OpSampledImage %type_sampled_image_0 [[t2_1]] [[gSampler_5]]
// CHECK-NEXT: [[structResult:%[0-9]+]] = OpImageSparseSampleImplicitLod %SparseResidencyStruct [[sampledImg_5]] [[v2fc]] ConstOffset|MinLod [[v2ic]] [[clamp_0]]
// CHECK-NEXT: [[status:%[0-9]+]] = OpCompositeExtract %uint [[structResult]] 0
Expand Down
32 changes: 32 additions & 0 deletions tools/clang/test/CodeGenSPIRV/vk.sampledtexture.cmp-level.hlsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// RUN: %dxc -T ps_6_0 -E main -fcgl %s -spirv | FileCheck %s

// CHECK: OpCapability SparseResidency

// CHECK: [[v2fc:%[0-9]+]] = OpConstantComposite %v2float %float_0_5 %float_0_25
// CHECK: [[v2ic:%[0-9]+]] = OpConstantComposite %v2int %int_2 %int_3

// CHECK: [[type_2d_image_1:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 0 0 1 Unknown
// CHECK: [[type_sampled_image_1:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_2d_image_1]]
// CHECK: [[ptr_type_1:%[a-zA-Z0-9_]+]] = OpTypePointer UniformConstant [[type_sampled_image_1]]

// CHECK: [[tex1:%[a-zA-Z0-9_]+]] = OpVariable [[ptr_type_1]] UniformConstant

vk::SampledTexture2D<float4> tex1 : register(t0);

float4 main() : SV_Target {
// CHECK: [[tex1_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_sampled_image_1]] [[tex1]]
// CHECK: [[sampled_result1:%[a-zA-Z0-9_]+]] = OpImageSampleDrefExplicitLod %float [[tex1_load]] [[v2fc]] %float_2 Lod %float_1
float val1 = tex1.SampleCmpLevel(float2(0.5, 0.25), 2.0f, 1.0f);

// CHECK: [[tex2_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_sampled_image_1]] [[tex1]]
// CHECK: [[sampled_result2:%[a-zA-Z0-9_]+]] = OpImageSampleDrefExplicitLod %float [[tex2_load]] [[v2fc]] %float_2 Lod|ConstOffset %float_1 [[v2ic]]
float val2 = tex1.SampleCmpLevel(float2(0.5, 0.25), 2.0f, 1.0f, int2(2,3));

// CHECK: [[tex3_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_sampled_image_1]] [[tex1]]
// CHECK: [[sampled_result3:%[a-zA-Z0-9_]+]] = OpImageSparseSampleDrefExplicitLod %SparseResidencyStruct [[tex3_load]] [[v2fc]] %float_2 Lod|ConstOffset %float_1 [[v2ic]]
// CHECK: [[status_0:%[a-zA-Z0-9_]+]] = OpCompositeExtract %uint [[sampled_result3]] 0
// CHECK: OpStore %status [[status_0]]
uint status;
float val3 = tex1.SampleCmpLevel(float2(0.5, 0.25), 2.0f, 1.0f, int2(2,3), status);
return 1.0;
}
48 changes: 48 additions & 0 deletions tools/clang/test/CodeGenSPIRV/vk.sampledtexture.load.hlsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// RUN: %dxc -T ps_6_0 -E main -fcgl %s -spirv | FileCheck %s


vk::SampledTexture2D<float4> tex2D_F4 : register(t1);

// CHECK: OpCapability SparseResidency

// CHECK: [[v2ic:%[0-9]+]] = OpConstantComposite %v2int %int_1 %int_2

// CHECK: %SparseResidencyStruct = OpTypeStruct %uint %v4float

float4 main(int3 location: A) : SV_Target {
uint status;

// CHECK: [[loc:%[0-9]+]] = OpLoad %v3int %location
// CHECK-NEXT: [[coord_0:%[0-9]+]] = OpVectorShuffle %v2int [[loc]] [[loc]] 0 1
// CHECK-NEXT: [[lod_0:%[0-9]+]] = OpCompositeExtract %int [[loc]] 2
// CHECK-NEXT: [[tex:%[0-9]+]] = OpLoad %type_sampled_image %tex2D_F4
// CHECK-NEXT: [[tex_img:%[0-9]+]] = OpImage %type_2d_image [[tex]]
// CHECK-NEXT: {{%[0-9]+}} = OpImageFetch %v4float [[tex_img]] [[coord_0]] Lod [[lod_0]]
float4 val1 = tex2D_F4.Load(location);

// CHECK: [[loc:%[0-9]+]] = OpLoad %v3int %location
// CHECK-NEXT: [[coord_0:%[0-9]+]] = OpVectorShuffle %v2int [[loc]] [[loc]] 0 1
// CHECK-NEXT: [[lod_0:%[0-9]+]] = OpCompositeExtract %int [[loc]] 2
// CHECK-NEXT: [[tex:%[0-9]+]] = OpLoad %type_sampled_image %tex2D_F4
// CHECK-NEXT: [[tex_img:%[0-9]+]] = OpImage %type_2d_image [[tex]]
// CHECK-NEXT: {{%[0-9]+}} = OpImageFetch %v4float [[tex_img]] [[coord_0]] Lod|ConstOffset [[lod_0]] [[v2ic]]
float4 val2 = tex2D_F4.Load(location, int2(1, 2));

/////////////////////////////////
/// Using the Status argument ///
/////////////////////////////////

// CHECK: [[loc:%[0-9]+]] = OpLoad %v3int %location
// CHECK-NEXT: [[coord_0:%[0-9]+]] = OpVectorShuffle %v2int [[loc]] [[loc]] 0 1
// CHECK-NEXT: [[lod_0:%[0-9]+]] = OpCompositeExtract %int [[loc]] 2
// CHECK-NEXT: [[tex:%[0-9]+]] = OpLoad %type_sampled_image %tex2D_F4
// CHECK-NEXT: [[tex_img:%[0-9]+]] = OpImage %type_2d_image [[tex]]
// CHECK-NEXT:[[structResult:%[0-9]+]] = OpImageSparseFetch %SparseResidencyStruct [[tex_img]] [[coord_0]] Lod|ConstOffset [[lod_0]] [[v2ic]]
// CHECK-NEXT: [[status:%[0-9]+]] = OpCompositeExtract %uint [[structResult]] 0
// CHECK-NEXT: OpStore %status [[status]]
// CHECK-NEXT: [[v4result:%[0-9]+]] = OpCompositeExtract %v4float [[structResult]] 1
// CHECK-NEXT: OpStore %val3 [[v4result]]
float4 val3 = tex2D_F4.Load(location, int2(1, 2), status);

return 1.0;
}
33 changes: 33 additions & 0 deletions tools/clang/test/CodeGenSPIRV/vk.sampledtexture.sample-bias.hlsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// RUN: %dxc -T ps_6_0 -E main -fcgl %s -spirv | FileCheck %s

// CHECK: OpCapability MinLod
// CHECK: OpCapability SparseResidency

// CHECK: [[v2fc:%[0-9]+]] = OpConstantComposite %v2float %float_0_5 %float_0_25
// CHECK: [[v2ic:%[0-9]+]] = OpConstantComposite %v2int %int_2 %int_3

// CHECK: [[type_2d_image_1:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 0 0 1 Unknown
// CHECK: [[type_sampled_image_1:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_2d_image_1]]
// CHECK: [[ptr_type_1:%[a-zA-Z0-9_]+]] = OpTypePointer UniformConstant [[type_sampled_image_1]]

// CHECK: [[tex1:%[a-zA-Z0-9_]+]] = OpVariable [[ptr_type_1]] UniformConstant

vk::SampledTexture2D<float4> tex1 : register(t0);

float4 main() : SV_Target {
// CHECK: [[tex1_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_sampled_image_1]] [[tex1]]
// CHECK: [[sampled_result1:%[a-zA-Z0-9_]+]] = OpImageSampleImplicitLod %v4float [[tex1_load]] [[v2fc]] Bias|ConstOffset %float_0_5 [[v2ic]]
float4 val1 = tex1.SampleBias(float2(0.5, 0.25), 0.5f, int2(2, 3));

// CHECK: [[tex2_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_sampled_image_1]] [[tex1]]
// CHECK: [[sampled_result2:%[a-zA-Z0-9_]+]] = OpImageSampleImplicitLod %v4float [[tex2_load]] [[v2fc]] Bias|ConstOffset|MinLod %float_0_5 [[v2ic]] %float_2_5
float4 val2 = tex1.SampleBias(float2(0.5, 0.25), 0.5f, int2(2, 3), 2.5f);

// CHECK: [[tex3_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_sampled_image_1]] [[tex1]]
// CHECK: [[sampled_result3:%[a-zA-Z0-9_]+]] = OpImageSparseSampleImplicitLod %SparseResidencyStruct [[tex3_load]] [[v2fc]] Bias|ConstOffset|MinLod %float_0_5 [[v2ic]] %float_2_5
// CHECK: [[status_0:%[a-zA-Z0-9_]+]] = OpCompositeExtract %uint [[sampled_result3]] 0
// CHECK: OpStore %status [[status_0]]
uint status;
float4 val3 = tex1.SampleBias(float2(0.5, 0.25), 0.5f, int2(2, 3), 2.5f, status);
return 1.0;
}
Loading