Skip to content

Commit 7d4ff86

Browse files
committed
SampledTexture1D, SampledTexture1DArray
1 parent 8342003 commit 7d4ff86

21 files changed

+370
-20
lines changed

include/dxc/dxcapi.internal.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,13 @@ enum LEGAL_INTRINSIC_COMPTYPES {
140140

141141
#ifdef ENABLE_SPIRV_CODEGEN
142142
LICOMPTYPE_VK_BUFFER_POINTER = 56,
143-
LICOMPTYPE_VK_SAMPLED_TEXTURE2D = 57,
144-
LICOMPTYPE_VK_SAMPLED_TEXTURE2D_ARRAY = 58,
145-
LICOMPTYPE_VK_SAMPLED_TEXTURE2DMS = 59,
146-
LICOMPTYPE_VK_SAMPLED_TEXTURE2DMS_ARRAY = 60,
147-
LICOMPTYPE_COUNT = 61
143+
LICOMPTYPE_VK_SAMPLED_TEXTURE1D = 57,
144+
LICOMPTYPE_VK_SAMPLED_TEXTURE1D_ARRAY = 58,
145+
LICOMPTYPE_VK_SAMPLED_TEXTURE2D = 59,
146+
LICOMPTYPE_VK_SAMPLED_TEXTURE2D_ARRAY = 60,
147+
LICOMPTYPE_VK_SAMPLED_TEXTURE2DMS = 61,
148+
LICOMPTYPE_VK_SAMPLED_TEXTURE2DMS_ARRAY = 62,
149+
LICOMPTYPE_COUNT = 63
148150
#else
149151
LICOMPTYPE_COUNT = 56
150152
#endif

tools/clang/lib/SPIRV/AstTypeProbe.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -931,7 +931,9 @@ bool isSampledTexture(QualType type) {
931931
const auto name = rt->getDecl()->getName();
932932
// TODO(https://github.com/microsoft/DirectXShaderCompiler/issues/7979): Add
933933
// other sampled texture types as needed.
934-
if (name == "SampledTexture2D" || name == "SampledTexture2DArray" ||
934+
935+
if (name == "SampledTexture1D" || name == "SampledTexture1DArray" ||
936+
name == "SampledTexture2D" || name == "SampledTexture2DArray" ||
935937
name == "SampledTexture2DMS" || name == "SampledTexture2DMSArray")
936938
return true;
937939
}

tools/clang/lib/SPIRV/LowerTypeVisitor.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -849,7 +849,8 @@ const SpirvType *LowerTypeVisitor::lowerVkTypeInVkNamespace(
849849
assert(visitedTypeStack.size() == visitedTypeStackSize);
850850
return pointerType;
851851
}
852-
if (name == "SampledTexture2D" || name == "SampledTexture2DArray" ||
852+
if (name == "SampledTexture1D" || name == "SampledTexture1DArray" ||
853+
name == "SampledTexture2D" || name == "SampledTexture2DArray" ||
853854
name == "SampledTexture2DMS" || name == "SampledTexture2DMSArray") {
854855
const auto sampledType = hlsl::GetHLSLResourceResultType(type);
855856
auto loweredType = lowerType(getElementType(astContext, sampledType), rule,
@@ -861,13 +862,13 @@ const SpirvType *LowerTypeVisitor::lowerVkTypeInVkNamespace(
861862
loweredType = spvContext.getUIntType(32);
862863
}
863864

864-
const bool isArray =
865-
(name == "SampledTexture2DArray" || name == "SampledTexture2DMSArray");
866-
const bool isMS =
867-
(name == "SampledTexture2DMS" || name == "SampledTexture2DMSArray");
865+
const spv::Dim dimension =
866+
name.count("1D") > 0 ? spv::Dim::Dim1D : spv::Dim::Dim2D;
867+
const bool isArray = name.count("Array") > 0;
868+
const bool isMS = name.count("MS") > 0;
868869

869870
const auto *imageType = spvContext.getImageType(
870-
loweredType, spv::Dim::Dim2D, ImageType::WithDepth::No, isArray, isMS,
871+
loweredType, dimension, ImageType::WithDepth::No, isArray, isMS,
871872
ImageType::WithSampler::Yes, spv::ImageFormat::Unknown);
872873
return spvContext.getSampledImageType(imageType);
873874
}

tools/clang/lib/SPIRV/SpirvEmitter.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4405,6 +4405,8 @@ SpirvEmitter::processBufferTextureGetDimensions(const CXXMemberCallExpr *expr) {
44054405

44064406
if ((typeName == "Texture1D" && numArgs > 1) ||
44074407
(typeName == "Texture2D" && numArgs > 2) ||
4408+
(typeName == "SampledTexture1D" && numArgs > 1) ||
4409+
(typeName == "SampledTexture1DArray" && numArgs > 2) ||
44084410
(typeName == "SampledTexture2D" && numArgs > 2) ||
44094411
(typeName == "SampledTexture2DArray" && numArgs > 3) ||
44104412
(typeName == "TextureCube" && numArgs > 2) ||

tools/clang/lib/Sema/SemaHLSL.cpp

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,8 @@ enum ArBasicKind {
200200
AR_OBJECT_VK_SPV_INTRINSIC_TYPE,
201201
AR_OBJECT_VK_SPV_INTRINSIC_RESULT_ID,
202202
AR_OBJECT_VK_BUFFER_POINTER,
203+
AR_OBJECT_VK_SAMPLED_TEXTURE1D,
204+
AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY,
203205
AR_OBJECT_VK_SAMPLED_TEXTURE2D,
204206
AR_OBJECT_VK_SAMPLED_TEXTURE2D_ARRAY,
205207
AR_OBJECT_VK_SAMPLED_TEXTURE2DMS,
@@ -564,6 +566,8 @@ const UINT g_uBasicKindProps[] = {
564566
BPROP_OBJECT, // AR_OBJECT_VK_SPV_INTRINSIC_TYPE use recordType
565567
BPROP_OBJECT, // AR_OBJECT_VK_SPV_INTRINSIC_RESULT_ID use recordType
566568
BPROP_OBJECT, // AR_OBJECT_VK_BUFFER_POINTER use recordType
569+
BPROP_OBJECT | BPROP_RBUFFER, // AR_OBJECT_VK_SAMPLED_TEXTURE1D
570+
BPROP_OBJECT | BPROP_RBUFFER, // AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY
567571
BPROP_OBJECT | BPROP_RBUFFER, // AR_OBJECT_VK_SAMPLED_TEXTURE2D
568572
BPROP_OBJECT | BPROP_RBUFFER, // AR_OBJECT_VK_SAMPLED_TEXTURE2D_ARRAY
569573
BPROP_OBJECT | BPROP_RBUFFER, // AR_OBJECT_VK_SAMPLED_TEXTURE2DMS
@@ -1276,6 +1280,10 @@ static const ArBasicKind g_LinAlgMatrixCT[] = {AR_OBJECT_LINALG_MATRIX,
12761280
#ifdef ENABLE_SPIRV_CODEGEN
12771281
static const ArBasicKind g_VKBufferPointerCT[] = {AR_OBJECT_VK_BUFFER_POINTER,
12781282
AR_BASIC_UNKNOWN};
1283+
static const ArBasicKind g_VKSampledTexture1DCT[] = {
1284+
AR_OBJECT_VK_SAMPLED_TEXTURE1D, AR_BASIC_UNKNOWN};
1285+
static const ArBasicKind g_VKSampledTexture1DArrayCT[] = {
1286+
AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY, AR_BASIC_UNKNOWN};
12791287
static const ArBasicKind g_VKSampledTexture2DCT[] = {
12801288
AR_OBJECT_VK_SAMPLED_TEXTURE2D, AR_BASIC_UNKNOWN};
12811289
static const ArBasicKind g_VKSampledTexture2DArrayCT[] = {
@@ -1347,6 +1355,8 @@ const ArBasicKind *g_LegalIntrinsicCompTypes[] = {
13471355
g_BuiltInTrianglePositionsCT, // LICOMPTYPE_BUILTIN_TRIANGLE_POSITIONS
13481356
#ifdef ENABLE_SPIRV_CODEGEN
13491357
g_VKBufferPointerCT, // LICOMPTYPE_VK_BUFFER_POINTER
1358+
g_VKSampledTexture1DCT, // LICOMPTYPE_VK_SAMPLED_TEXTURE1D
1359+
g_VKSampledTexture1DArrayCT, // LICOMPTYPE_VK_SAMPLED_TEXTURE1D_ARRAY
13501360
g_VKSampledTexture2DCT, // LICOMPTYPE_VK_SAMPLED_TEXTURE2D
13511361
g_VKSampledTexture2DArrayCT, // LICOMPTYPE_VK_SAMPLED_TEXTURE2D_ARRAY
13521362
g_VKSampledTexture2DMSCT, // LICOMPTYPE_VK_SAMPLED_TEXTURE2DMS
@@ -1410,7 +1420,8 @@ static const ArBasicKind g_ArBasicKindsAsTypes[] = {
14101420
AR_OBJECT_VK_SPIRV_TYPE, AR_OBJECT_VK_SPIRV_OPAQUE_TYPE,
14111421
AR_OBJECT_VK_INTEGRAL_CONSTANT, AR_OBJECT_VK_LITERAL,
14121422
AR_OBJECT_VK_SPV_INTRINSIC_TYPE, AR_OBJECT_VK_SPV_INTRINSIC_RESULT_ID,
1413-
AR_OBJECT_VK_BUFFER_POINTER, AR_OBJECT_VK_SAMPLED_TEXTURE2D,
1423+
AR_OBJECT_VK_BUFFER_POINTER, AR_OBJECT_VK_SAMPLED_TEXTURE1D,
1424+
AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY, AR_OBJECT_VK_SAMPLED_TEXTURE2D,
14141425
AR_OBJECT_VK_SAMPLED_TEXTURE2D_ARRAY, AR_OBJECT_VK_SAMPLED_TEXTURE2DMS,
14151426
AR_OBJECT_VK_SAMPLED_TEXTURE2DMS_ARRAY,
14161427
#endif // ENABLE_SPIRV_CODEGEN
@@ -1524,6 +1535,8 @@ static const uint8_t g_ArBasicKindsTemplateCount[] = {
15241535
1, // AR_OBJECT_VK_SPV_INTRINSIC_TYPE
15251536
1, // AR_OBJECT_VK_SPV_INTRINSIC_RESULT_ID
15261537
2, // AR_OBJECT_VK_BUFFER_POINTER
1538+
1, // AR_OBJECT_VK_SAMPLED_TEXTURE1D
1539+
1, // AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY
15271540
1, // AR_OBJECT_VK_SAMPLED_TEXTURE2D
15281541
1, // AR_OBJECT_VK_SAMPLED_TEXTURE2D_ARRAY
15291542
1, // AR_OBJECT_VK_SAMPLED_TEXTURE2DMS
@@ -1681,6 +1694,8 @@ static const SubscriptOperatorRecord g_ArBasicKindsSubscripts[] = {
16811694
{0, MipsFalse, SampleFalse}, // AR_OBJECT_VK_SPV_INTRINSIC_TYPE
16821695
{0, MipsFalse, SampleFalse}, // AR_OBJECT_VK_SPV_INTRINSIC_RESULT_ID
16831696
{0, MipsFalse, SampleFalse}, // AR_OBJECT_VK_BUFFER_POINTER
1697+
{1, MipsTrue, SampleFalse}, // AR_OBJECT_VK_SAMPLED_TEXTURE1D
1698+
{2, MipsTrue, SampleFalse}, // AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY
16841699
{2, MipsTrue, SampleFalse}, // AR_OBJECT_VK_SAMPLED_TEXTURE2D
16851700
{3, MipsTrue, SampleFalse}, // AR_OBJECT_VK_SAMPLED_TEXTURE2D_ARRAY
16861701
{2, MipsFalse, SampleTrue}, // AR_OBJECT_VK_SAMPLED_TEXTURE2DMS
@@ -1854,6 +1869,8 @@ static const char *g_ArBasicTypeNames[] = {
18541869
"ext_type",
18551870
"ext_result_id",
18561871
"BufferPointer",
1872+
"SampledTexture1D",
1873+
"SampledTexture1DArray",
18571874
"SampledTexture2D",
18581875
"SampledTexture2DArray",
18591876
"SampledTexture2DMS",
@@ -2511,6 +2528,14 @@ static void GetIntrinsicMethods(ArBasicKind kind,
25112528
*intrinsicCount = _countof(g_RayQueryMethods);
25122529
break;
25132530
#ifdef ENABLE_SPIRV_CODEGEN
2531+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D:
2532+
*intrinsics = g_VkSampledTexture1DMethods;
2533+
*intrinsicCount = _countof(g_VkSampledTexture1DMethods);
2534+
break;
2535+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY:
2536+
*intrinsics = g_VkSampledTexture1DArrayMethods;
2537+
*intrinsicCount = _countof(g_VkSampledTexture1DArrayMethods);
2538+
break;
25142539
case AR_OBJECT_VK_SAMPLED_TEXTURE2D:
25152540
*intrinsics = g_VkSampledTexture2DMethods;
25162541
*intrinsicCount = _countof(g_VkSampledTexture2DMethods);
@@ -4132,7 +4157,9 @@ class HLSLExternalSource : public ExternalSemaSource {
41324157
recordDecl = DeclareVkBufferPointerType(*m_context, m_vkNSDecl);
41334158
recordDecl->setImplicit(true);
41344159
m_vkBufferPointerTemplateDecl = recordDecl->getDescribedClassTemplate();
4135-
} else if (kind == AR_OBJECT_VK_SAMPLED_TEXTURE2D ||
4160+
} else if (kind == AR_OBJECT_VK_SAMPLED_TEXTURE1D ||
4161+
kind == AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY ||
4162+
kind == AR_OBJECT_VK_SAMPLED_TEXTURE2D ||
41364163
kind == AR_OBJECT_VK_SAMPLED_TEXTURE2D_ARRAY ||
41374164
kind == AR_OBJECT_VK_SAMPLED_TEXTURE2DMS ||
41384165
kind == AR_OBJECT_VK_SAMPLED_TEXTURE2DMS_ARRAY) {
@@ -4966,7 +4993,9 @@ class HLSLExternalSource : public ExternalSemaSource {
49664993
case AR_OBJECT_LEGACY_EFFECT: // used for all legacy effect object types
49674994

49684995
case AR_OBJECT_TEXTURE1D:
4996+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D:
49694997
case AR_OBJECT_TEXTURE1D_ARRAY:
4998+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY:
49704999
case AR_OBJECT_TEXTURE2D:
49715000
case AR_OBJECT_TEXTURE2D_ARRAY:
49725001
case AR_OBJECT_TEXTURE3D:
@@ -5071,6 +5100,7 @@ class HLSLExternalSource : public ExternalSemaSource {
50715100
DXASSERT_VALIDBASICKIND(BasicKind);
50725101
switch (BasicKind) {
50735102
case AR_OBJECT_TEXTURE1D:
5103+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D:
50745104
ResKind = DXIL::ResourceKind::Texture1D;
50755105
ResClass = DXIL::ResourceClass::SRV;
50765106
return true;
@@ -5080,6 +5110,7 @@ class HLSLExternalSource : public ExternalSemaSource {
50805110
ResClass = DXIL::ResourceClass::UAV;
50815111
return true;
50825112
case AR_OBJECT_TEXTURE1D_ARRAY:
5113+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY:
50835114
ResKind = DXIL::ResourceKind::Texture1DArray;
50845115
ResClass = DXIL::ResourceClass::SRV;
50855116
return true;
@@ -11661,7 +11692,9 @@ void hlsl::DiagnoseRegisterType(clang::Sema *self, clang::SourceLocation loc,
1166111692
break;
1166211693

1166311694
case AR_OBJECT_TEXTURE1D:
11695+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D:
1166411696
case AR_OBJECT_TEXTURE1D_ARRAY:
11697+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY:
1166511698
case AR_OBJECT_TEXTURE2D:
1166611699
case AR_OBJECT_TEXTURE2D_ARRAY:
1166711700
case AR_OBJECT_TEXTURE3D:

tools/clang/test/CodeGenSPIRV/vk.sampledtexture.calculate-lod-unclamped.hlsl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
// CHECK: OpCapability ImageQuery
44

5+
// CHECK: [[type_1d_image:%[a-zA-Z0-9_]+]] = OpTypeImage %float 1D 0 0 0 1 Unknown
6+
// CHECK: [[type_1d_sampled_image:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_1d_image]]
7+
// CHECK: [[type_1d_image_array:%[a-zA-Z0-9_]+]] = OpTypeImage %float 1D 0 1 0 1 Unknown
8+
// CHECK: [[type_1d_sampled_image_array:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_1d_image_array]]
59
// CHECK: [[type_2d_image:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 0 0 1 Unknown
610
// CHECK: [[type_2d_sampled_image:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_2d_image]]
711
// CHECK: [[type_2d_image_array:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 1 0 1 Unknown
812
// CHECK: [[type_2d_sampled_image_array:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_2d_image_array]]
913

14+
vk::SampledTexture1D<float4> tex1d;
15+
vk::SampledTexture1DArray<float4> tex1dArray;
1016
vk::SampledTexture2D<float4> tex2d;
1117
vk::SampledTexture2DArray<float4> tex2dArray;
1218

@@ -24,4 +30,14 @@ void main() {
2430
//CHECK-NEXT: [[query2:%[a-zA-Z0-9_]+]] = OpImageQueryLod %v2float [[tex2_load]] [[xy_load_2]]
2531
//CHECK-NEXT: {{%[0-9]+}} = OpCompositeExtract %float [[query2]] 1
2632
float lod2 = tex2dArray.CalculateLevelOfDetailUnclamped(xy);
33+
34+
// CHECK: [[tex1d_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_1d_sampled_image]] %tex1d
35+
// CHECK-NEXT: [[query1d:%[a-zA-Z0-9_]+]] = OpImageQueryLod %v2float [[tex1d_load]] %float_0_5
36+
// CHECK-NEXT: {{%[0-9]+}} = OpCompositeExtract %float [[query1d]] 1
37+
float lod3 = tex1d.CalculateLevelOfDetailUnclamped(0.5);
38+
39+
// CHECK: [[tex1da_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_1d_sampled_image_array]] %tex1dArray
40+
// CHECK-NEXT: [[query1da:%[a-zA-Z0-9_]+]] = OpImageQueryLod %v2float [[tex1da_load]] %float_0_5
41+
// CHECK-NEXT: {{%[0-9]+}} = OpCompositeExtract %float [[query1da]] 1
42+
float lod4 = tex1dArray.CalculateLevelOfDetailUnclamped(0.5);
2743
}

tools/clang/test/CodeGenSPIRV/vk.sampledtexture.calculate-lod.hlsl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
// CHECK: OpCapability ImageQuery
44

5+
// CHECK: [[type_1d_image:%[a-zA-Z0-9_]+]] = OpTypeImage %float 1D 0 0 0 1 Unknown
6+
// CHECK: [[type_1d_sampled_image:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_1d_image]]
7+
// CHECK: [[type_1d_image_array:%[a-zA-Z0-9_]+]] = OpTypeImage %float 1D 0 1 0 1 Unknown
8+
// CHECK: [[type_1d_sampled_image_array:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_1d_image_array]]
59
// CHECK: [[type_2d_image:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 0 0 1 Unknown
610
// CHECK: [[type_2d_sampled_image:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_2d_image]]
711
// CHECK: [[type_2d_image_array:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 1 0 1 Unknown
812
// CHECK: [[type_2d_sampled_image_array:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_2d_image_array]]
913

14+
vk::SampledTexture1D<float4> tex1d;
15+
vk::SampledTexture1DArray<float4> tex1dArray;
1016
vk::SampledTexture2D<float4> tex2d;
1117
vk::SampledTexture2DArray<float4> tex2dArray;
1218

@@ -24,4 +30,14 @@ void main() {
2430
//CHECK-NEXT: [[query2:%[a-zA-Z0-9_]+]] = OpImageQueryLod %v2float [[tex2]] [[xy_load_2]]
2531
//CHECK-NEXT: {{%[0-9]+}} = OpCompositeExtract %float [[query2]] 0
2632
float lod2 = tex2dArray.CalculateLevelOfDetail(xy);
33+
34+
// CHECK: [[tex1d_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_1d_sampled_image]] %tex1d
35+
// CHECK-NEXT: [[query1d:%[a-zA-Z0-9_]+]] = OpImageQueryLod %v2float [[tex1d_load]] %float_0_5
36+
// CHECK-NEXT: {{%[0-9]+}} = OpCompositeExtract %float [[query1d]] 0
37+
float lod3 = tex1d.CalculateLevelOfDetail(0.5);
38+
39+
// CHECK: [[tex1da_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_1d_sampled_image_array]] %tex1dArray
40+
// CHECK-NEXT: [[query1da:%[a-zA-Z0-9_]+]] = OpImageQueryLod %v2float [[tex1da_load]] %float_0_5
41+
// CHECK-NEXT: {{%[0-9]+}} = OpCompositeExtract %float [[query1da]] 0
42+
float lod4 = tex1dArray.CalculateLevelOfDetail(0.5);
2743
}

tools/clang/test/CodeGenSPIRV/vk.sampledtexture.cmp-level.hlsl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,17 @@
66
// CHECK: [[v2ic:%[0-9]+]] = OpConstantComposite %v2int %int_2 %int_3
77
// CHECK: [[v3fc:%[0-9]+]] = OpConstantComposite %v3float %float_0_5 %float_0_25 %float_0
88

9+
// CHECK: [[type_1d_image:%[a-zA-Z0-9_]+]] = OpTypeImage %float 1D 0 0 0 1 Unknown
10+
// CHECK: [[type_1d_sampled_image:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_1d_image]]
11+
// CHECK: [[type_1d_image_array:%[a-zA-Z0-9_]+]] = OpTypeImage %float 1D 0 1 0 1 Unknown
12+
// CHECK: [[type_1d_sampled_image_array:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_1d_image_array]]
913
// CHECK: [[type_2d_image:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 0 0 1 Unknown
1014
// CHECK: [[type_2d_sampled_image:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_2d_image]]
1115
// CHECK: [[type_2d_image_array:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 1 0 1 Unknown
1216
// CHECK: [[type_2d_sampled_image_array:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_2d_image_array]]
1317

18+
vk::SampledTexture1D<float4> tex1d;
19+
vk::SampledTexture1DArray<float4> tex1dArray;
1420
vk::SampledTexture2D<float4> tex2d;
1521
vk::SampledTexture2DArray<float4> tex2dArray;
1622

@@ -34,5 +40,13 @@ float4 main() : SV_Target {
3440
// CHECK: [[sampled_arr1:%[a-zA-Z0-9_]+]] = OpImageSampleDrefExplicitLod %float [[load_arr1]] [[v3fc]] %float_2 Lod %float_1
3541
float val4 = tex2dArray.SampleCmpLevel(float3(0.5, 0.25, 0), 2.0f, 1.0f);
3642

43+
// CHECK: [[tex1d_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_1d_sampled_image]] %tex1d
44+
// CHECK: [[sampled_result_1d:%[a-zA-Z0-9_]+]] = OpImageSampleDrefExplicitLod %float [[tex1d_load]] %float_0_5 %float_2 Lod %float_1
45+
float val5 = tex1d.SampleCmpLevel(0.5, 2.0f, 1.0f);
46+
47+
// CHECK: [[tex1da_load:%[a-zA-Z0-9_]+]] = OpLoad [[type_1d_sampled_image_array]] %tex1dArray
48+
// CHECK: [[sampled_result_1da:%[a-zA-Z0-9_]+]] = OpImageSampleDrefExplicitLod %float [[tex1da_load]] {{%[0-9]+}} %float_2 Lod %float_1
49+
float val6 = tex1dArray.SampleCmpLevel(float2(0.5, 0), 2.0f, 1.0f);
50+
3751
return 1.0;
3852
}

tools/clang/test/CodeGenSPIRV/vk.sampledtexture.get-dimensions.hlsl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
// CHECK: OpCapability ImageQuery
55

6+
// CHECK: [[type_1d_image:%[a-zA-Z0-9_]+]] = OpTypeImage %float 1D 0 0 0 1 Unknown
7+
// CHECK: [[type_1d_sampled_image:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_1d_image]]
8+
// CHECK: [[type_1d_image_array:%[a-zA-Z0-9_]+]] = OpTypeImage %float 1D 0 1 0 1 Unknown
9+
// CHECK: [[type_1d_sampled_image_array:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_1d_image_array]]
610
// CHECK: [[type_2d_image:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 0 0 1 Unknown
711
// CHECK: [[type_2d_sampled_image:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_2d_image]]
812
// CHECK: [[type_2d_image_array:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 1 0 1 Unknown
@@ -12,6 +16,8 @@
1216
// CHECK: [[type_2d_image_ms_array:%[a-zA-Z0-9_]+]] = OpTypeImage %float 2D 0 1 1 1 Unknown
1317
// CHECK: [[type_2d_sampled_image_ms_array:%[a-zA-Z0-9_]+]] = OpTypeSampledImage [[type_2d_image_ms_array]]
1418

19+
vk::SampledTexture1D<float4> tex1d;
20+
vk::SampledTexture1DArray<float4> tex1dArray;
1521
vk::SampledTexture2D<float4> tex2d;
1622
vk::SampledTexture2DArray<float4> tex2dArray;
1723
vk::SampledTexture2DMS<float4> tex2dMS;
@@ -130,6 +136,21 @@ void main() {
130136
// CHECK-NEXT: OpStore %i_height [[query_1_int]]
131137
tex2d.GetDimensions(i_width, i_height);
132138

139+
// CHECK: [[t1d_load:%[0-9]+]] = OpLoad [[type_1d_sampled_image]] %tex1d
140+
// CHECK-NEXT: [[image1d:%[0-9]+]] = OpImage [[type_1d_image]] [[t1d_load]]
141+
// CHECK-NEXT: [[query1d:%[0-9]+]] = OpImageQuerySizeLod %uint [[image1d]] %int_0
142+
// CHECK-NEXT: OpStore %width [[query1d]]
143+
tex1d.GetDimensions(width);
144+
145+
// CHECK: [[t1da_load:%[0-9]+]] = OpLoad [[type_1d_sampled_image_array]] %tex1dArray
146+
// CHECK-NEXT: [[image1da:%[0-9]+]] = OpImage [[type_1d_image_array]] [[t1da_load]]
147+
// CHECK-NEXT: [[query1da:%[0-9]+]] = OpImageQuerySizeLod %v2uint [[image1da]] %int_0
148+
// CHECK-NEXT: [[query1da0:%[0-9]+]] = OpCompositeExtract %uint [[query1da]] 0
149+
// CHECK-NEXT: OpStore %width [[query1da0]]
150+
// CHECK-NEXT: [[query1da1:%[0-9]+]] = OpCompositeExtract %uint [[query1da]] 1
151+
// CHECK-NEXT: OpStore %elements [[query1da1]]
152+
tex1dArray.GetDimensions(width, elements);
153+
133154
// CHECK: [[t1_load:%[0-9]+]] = OpLoad [[type_2d_sampled_image]] %tex2d
134155
// CHECK-NEXT: [[image2:%[0-9]+]] = OpImage [[type_2d_image]] [[t1_load]]
135156
// CHECK-NEXT: [[mip:%[0-9]+]] = OpLoad %uint %mipLevel

0 commit comments

Comments
 (0)