Skip to content

Commit 71bf911

Browse files
authored
[SPIR-V][vk::SampledTexture] #11. Support vk::SampledTexture1D and vk::SampledTexture1DArray type. (#8212)
Part of #7979 The function definitions are equivalent to that of Texture1D counterparts, just without Sampler argument.
1 parent 5f8d05f commit 71bf911

File tree

43 files changed

+1372
-25
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1372
-25
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: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -929,11 +929,7 @@ bool isTexture(QualType type) {
929929
bool isSampledTexture(QualType type) {
930930
if (const auto *rt = type->getAs<RecordType>()) {
931931
const auto name = rt->getDecl()->getName();
932-
// TODO(https://github.com/microsoft/DirectXShaderCompiler/issues/7979): Add
933-
// other sampled texture types as needed.
934-
if (name == "SampledTexture2D" || name == "SampledTexture2DArray" ||
935-
name == "SampledTexture2DMS" || name == "SampledTexture2DMSArray")
936-
return true;
932+
return name.startswith("SampledTexture");
937933
}
938934
return false;
939935
}
@@ -950,6 +946,9 @@ bool isTextureMS(QualType type) {
950946
bool isSampledTextureMS(QualType type) {
951947
if (const auto *rt = type->getAs<RecordType>()) {
952948
const auto name = rt->getDecl()->getName();
949+
if (!name.startswith("SampledTexture"))
950+
return false;
951+
953952
if (name == "SampledTexture2DMS" || name == "SampledTexture2DMSArray")
954953
return true;
955954
}

tools/clang/lib/SPIRV/LowerTypeVisitor.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -850,8 +850,7 @@ const SpirvType *LowerTypeVisitor::lowerVkTypeInVkNamespace(
850850
assert(visitedTypeStack.size() == visitedTypeStackSize);
851851
return pointerType;
852852
}
853-
if (name == "SampledTexture2D" || name == "SampledTexture2DArray" ||
854-
name == "SampledTexture2DMS" || name == "SampledTexture2DMSArray") {
853+
if (name.startswith("SampledTexture")) {
855854
const auto sampledType = hlsl::GetHLSLResourceResultType(type);
856855
auto loweredType = lowerType(getElementType(astContext, sampledType), rule,
857856
/*isRowMajor*/ llvm::None, srcLoc);
@@ -862,13 +861,15 @@ const SpirvType *LowerTypeVisitor::lowerVkTypeInVkNamespace(
862861
loweredType = spvContext.getUIntType(32);
863862
}
864863

865-
const bool isArray =
866-
(name == "SampledTexture2DArray" || name == "SampledTexture2DMSArray");
867-
const bool isMS =
868-
(name == "SampledTexture2DMS" || name == "SampledTexture2DMSArray");
864+
constexpr size_t sampledTexturePrefixLength = sizeof("SampledTexture") - 1;
865+
StringRef suffix = name.drop_front(sampledTexturePrefixLength);
866+
const spv::Dim dimension =
867+
suffix.startswith("1D") ? spv::Dim::Dim1D : spv::Dim::Dim2D;
868+
const bool isArray = suffix.endswith("Array");
869+
const bool isMS = suffix.find("MS") != StringRef::npos;
869870

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

tools/clang/lib/SPIRV/SpirvEmitter.cpp

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

44144414
if ((typeName == "Texture1D" && numArgs > 1) ||
44154415
(typeName == "Texture2D" && numArgs > 2) ||
4416+
(typeName == "SampledTexture1D" && numArgs > 1) ||
4417+
(typeName == "SampledTexture1DArray" && numArgs > 2) ||
44164418
(typeName == "SampledTexture2D" && numArgs > 2) ||
44174419
(typeName == "SampledTexture2DArray" && numArgs > 3) ||
44184420
(typeName == "TextureCube" && numArgs > 2) ||

tools/clang/lib/Sema/SemaHLSL.cpp

Lines changed: 39 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",
@@ -2514,6 +2531,14 @@ static void GetIntrinsicMethods(ArBasicKind kind,
25142531
*intrinsicCount = _countof(g_RayQueryMethods);
25152532
break;
25162533
#ifdef ENABLE_SPIRV_CODEGEN
2534+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D:
2535+
*intrinsics = g_VkSampledTexture1DMethods;
2536+
*intrinsicCount = _countof(g_VkSampledTexture1DMethods);
2537+
break;
2538+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY:
2539+
*intrinsics = g_VkSampledTexture1DArrayMethods;
2540+
*intrinsicCount = _countof(g_VkSampledTexture1DArrayMethods);
2541+
break;
25172542
case AR_OBJECT_VK_SAMPLED_TEXTURE2D:
25182543
*intrinsics = g_VkSampledTexture2DMethods;
25192544
*intrinsicCount = _countof(g_VkSampledTexture2DMethods);
@@ -4135,7 +4160,9 @@ class HLSLExternalSource : public ExternalSemaSource {
41354160
recordDecl = DeclareVkBufferPointerType(*m_context, m_vkNSDecl);
41364161
recordDecl->setImplicit(true);
41374162
m_vkBufferPointerTemplateDecl = recordDecl->getDescribedClassTemplate();
4138-
} else if (kind == AR_OBJECT_VK_SAMPLED_TEXTURE2D ||
4163+
} else if (kind == AR_OBJECT_VK_SAMPLED_TEXTURE1D ||
4164+
kind == AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY ||
4165+
kind == AR_OBJECT_VK_SAMPLED_TEXTURE2D ||
41394166
kind == AR_OBJECT_VK_SAMPLED_TEXTURE2D_ARRAY ||
41404167
kind == AR_OBJECT_VK_SAMPLED_TEXTURE2DMS ||
41414168
kind == AR_OBJECT_VK_SAMPLED_TEXTURE2DMS_ARRAY) {
@@ -4969,7 +4996,9 @@ class HLSLExternalSource : public ExternalSemaSource {
49694996
case AR_OBJECT_LEGACY_EFFECT: // used for all legacy effect object types
49704997

49714998
case AR_OBJECT_TEXTURE1D:
4999+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D:
49725000
case AR_OBJECT_TEXTURE1D_ARRAY:
5001+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY:
49735002
case AR_OBJECT_TEXTURE2D:
49745003
case AR_OBJECT_TEXTURE2D_ARRAY:
49755004
case AR_OBJECT_TEXTURE3D:
@@ -5074,6 +5103,9 @@ class HLSLExternalSource : public ExternalSemaSource {
50745103
DXASSERT_VALIDBASICKIND(BasicKind);
50755104
switch (BasicKind) {
50765105
case AR_OBJECT_TEXTURE1D:
5106+
#ifdef ENABLE_SPIRV_CODEGEN
5107+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D:
5108+
#endif
50775109
ResKind = DXIL::ResourceKind::Texture1D;
50785110
ResClass = DXIL::ResourceClass::SRV;
50795111
return true;
@@ -5083,6 +5115,9 @@ class HLSLExternalSource : public ExternalSemaSource {
50835115
ResClass = DXIL::ResourceClass::UAV;
50845116
return true;
50855117
case AR_OBJECT_TEXTURE1D_ARRAY:
5118+
#ifdef ENABLE_SPIRV_CODEGEN
5119+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY:
5120+
#endif
50865121
ResKind = DXIL::ResourceKind::Texture1DArray;
50875122
ResClass = DXIL::ResourceClass::SRV;
50885123
return true;
@@ -11690,7 +11725,9 @@ void hlsl::DiagnoseRegisterType(clang::Sema *self, clang::SourceLocation loc,
1169011725
break;
1169111726

1169211727
case AR_OBJECT_TEXTURE1D:
11728+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D:
1169311729
case AR_OBJECT_TEXTURE1D_ARRAY:
11730+
case AR_OBJECT_VK_SAMPLED_TEXTURE1D_ARRAY:
1169411731
case AR_OBJECT_TEXTURE2D:
1169511732
case AR_OBJECT_TEXTURE2D_ARRAY:
1169611733
case AR_OBJECT_TEXTURE3D:
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// RUN: %dxc -T ps_6_7 -E main -fcgl %s -spirv | FileCheck %s
2+
// RUN: not %dxc -T ps_6_7 -E main -fcgl %s -spirv -DERROR 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR
3+
4+
// CHECK: %type_1d_image = OpTypeImage %float 1D 0 0 0 1 Unknown
5+
// CHECK: %type_sampled_image = OpTypeSampledImage %type_1d_image
6+
7+
vk::SampledTexture1D<float4> tex1d;
8+
9+
struct S { int a; };
10+
11+
void main() {
12+
// CHECK: OpStore %pos1 %uint_1
13+
uint pos1 = 1;
14+
15+
// CHECK: [[pos1:%[a-zA-Z0-9_]+]] = OpLoad %uint %pos1
16+
// CHECK: [[tex1_load:%[a-zA-Z0-9_]+]] = OpLoad %type_sampled_image %tex1d
17+
// CHECK: [[tex_image:%[a-zA-Z0-9_]+]] = OpImage %type_1d_image [[tex1_load]]
18+
// CHECK: [[fetch_result:%[a-zA-Z0-9_]+]] = OpImageFetch %v4float [[tex_image]] [[pos1]] Lod %uint_0
19+
// CHECK: OpStore %a1 [[fetch_result]]
20+
float4 a1 = tex1d[pos1];
21+
22+
#ifdef ERROR
23+
S s = { 1 };
24+
// CHECK-ERROR: error: no viable overloaded operator[]
25+
// CHECK-ERROR: note: candidate function {{.*}} no known conversion from 'S' to 'unsigned int' for 1st argument
26+
float4 val2 = tex1d[s];
27+
28+
int2 i2 = int2(1, 2);
29+
// CHECK-ERROR: error: no viable overloaded operator[]
30+
// CHECK-ERROR: note: candidate function {{.*}} no known conversion from '{{int2|vector<int, 2>}}' to 'unsigned int' for 1st argument
31+
float4 val3 = tex1d[i2];
32+
33+
int3 i3 = int3(1, 2, 3);
34+
// CHECK-ERROR: error: no viable overloaded operator[]
35+
// CHECK-ERROR: note: candidate function {{.*}} no known conversion from '{{int3|vector<int, 3>}}' to 'unsigned int' for 1st argument
36+
float4 val4 = tex1d[i3];
37+
#endif
38+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: %dxc -T ps_6_8 -E main -fcgl %s -spirv | FileCheck %s
2+
3+
// CHECK: %type_1d_image = OpTypeImage %float 1D 0 0 0 1 Unknown
4+
// CHECK: %type_sampled_image = OpTypeSampledImage %type_1d_image
5+
6+
vk::SampledTexture1D<float4> tex1d;
7+
8+
void main() {
9+
// CHECK: OpStore %x %float_0_5
10+
float x = 0.5;
11+
12+
// CHECK: [[tex1_load:%[a-zA-Z0-9_]+]] = OpLoad %type_sampled_image %tex1d
13+
// CHECK: [[x:%[a-zA-Z0-9_]+]] = OpLoad %float %x
14+
// CHECK: [[lod_query:%[a-zA-Z0-9_]+]] = OpImageQueryLod %v2float [[tex1_load]] [[x]]
15+
// CHECK: [[unclamped_lod:%[a-zA-Z0-9_]+]] = OpCompositeExtract %float [[lod_query]] 1
16+
// CHECK: OpStore %lod1 [[unclamped_lod]]
17+
float lod1 = tex1d.CalculateLevelOfDetailUnclamped(x);
18+
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: %dxc -T ps_6_0 -E main -fcgl %s -spirv | FileCheck %s
2+
3+
// CHECK: %type_1d_image = OpTypeImage %float 1D 0 0 0 1 Unknown
4+
// CHECK: %type_sampled_image = OpTypeSampledImage %type_1d_image
5+
6+
vk::SampledTexture1D<float4> tex1d;
7+
8+
void main() {
9+
// CHECK: OpStore %x %float_0_5
10+
float x = 0.5;
11+
12+
// CHECK: [[tex1_load:%[a-zA-Z0-9_]+]] = OpLoad %type_sampled_image %tex1d
13+
// CHECK: [[x:%[a-zA-Z0-9_]+]] = OpLoad %float %x
14+
// CHECK: [[lod_query:%[a-zA-Z0-9_]+]] = OpImageQueryLod %v2float [[tex1_load]] [[x]]
15+
// CHECK: [[lod:%[a-zA-Z0-9_]+]] = OpCompositeExtract %float [[lod_query]] 0
16+
// CHECK: OpStore %lod [[lod]]
17+
float lod = tex1d.CalculateLevelOfDetail(x);
18+
19+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// RUN: %dxc -T ps_6_0 -E main -fcgl %s -spirv | FileCheck %s
2+
// RUN: not %dxc -T ps_6_0 -E main -fcgl %s -spirv -DERROR 2>&1 | FileCheck %s --check-prefix=ERROR
3+
4+
// CHECK: OpCapability ImageQuery
5+
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+
9+
vk::SampledTexture1D<float4> tex1d;
10+
11+
void main() {
12+
uint mipLevel = 1;
13+
uint width, height, numLevels, elements, numSamples;
14+
15+
// CHECK: [[t1_load:%[0-9]+]] = OpLoad [[type_1d_sampled_image]] %tex1d
16+
// CHECK-NEXT: [[image1:%[0-9]+]] = OpImage [[type_1d_image]] [[t1_load]]
17+
// CHECK-NEXT: [[query1:%[0-9]+]] = OpImageQuerySizeLod %uint [[image1]] %int_0
18+
// CHECK-NEXT: OpStore %width [[query1]]
19+
tex1d.GetDimensions(width);
20+
21+
// CHECK: [[t2_load:%[0-9]+]] = OpLoad [[type_1d_sampled_image]] %tex1d
22+
// CHECK-NEXT: [[image2:%[0-9]+]] = OpImage [[type_1d_image]] [[t2_load]]
23+
// CHECK-NEXT: [[mip:%[0-9]+]] = OpLoad %uint %mipLevel
24+
// CHECK-NEXT: [[query2:%[0-9]+]] = OpImageQuerySizeLod %uint [[image2]] [[mip]]
25+
// CHECK-NEXT: OpStore %width [[query2]]
26+
// CHECK-NEXT: [[query_level_2:%[0-9]+]] = OpImageQueryLevels %uint [[image2]]
27+
// CHECK-NEXT: OpStore %numLevels [[query_level_2]]
28+
tex1d.GetDimensions(mipLevel, width, numLevels);
29+
30+
float f_width, f_height, f_numLevels;
31+
// CHECK: [[t3_load:%[0-9]+]] = OpLoad [[type_1d_sampled_image]] %tex1d
32+
// CHECK-NEXT: [[image3:%[0-9]+]] = OpImage [[type_1d_image]] [[t3_load]]
33+
// CHECK-NEXT: [[query3:%[0-9]+]] = OpImageQuerySizeLod %uint [[image3]] %int_0
34+
// CHECK-NEXT: [[f_query3:%[0-9]+]] = OpConvertUToF %float [[query3]]
35+
// CHECK-NEXT: OpStore %f_width [[f_query3]]
36+
tex1d.GetDimensions(f_width);
37+
38+
// CHECK: [[t4_load:%[0-9]+]] = OpLoad [[type_1d_sampled_image]] %tex1d
39+
// CHECK-NEXT: [[image4:%[0-9]+]] = OpImage [[type_1d_image]] [[t4_load]]
40+
// CHECK-NEXT: [[mip4:%[0-9]+]] = OpLoad %uint %mipLevel
41+
// CHECK-NEXT: [[query4:%[0-9]+]] = OpImageQuerySizeLod %uint [[image4]] [[mip4]]
42+
// CHECK-NEXT: [[f_query4:%[0-9]+]] = OpConvertUToF %float [[query4]]
43+
// CHECK-NEXT: OpStore %f_width [[f_query4]]
44+
// CHECK-NEXT: [[query_level_4:%[0-9]+]] = OpImageQueryLevels %uint [[image4]]
45+
// CHECK-NEXT: [[f_query_level_4:%[0-9]+]] = OpConvertUToF %float [[query_level_4]]
46+
// CHECK-NEXT: OpStore %f_numLevels [[f_query_level_4]]
47+
tex1d.GetDimensions(mipLevel, f_width, f_numLevels);
48+
49+
int i_width, i_height, i_numLevels;
50+
// CHECK: [[t5_load:%[0-9]+]] = OpLoad [[type_1d_sampled_image]] %tex1d
51+
// CHECK-NEXT: [[image5:%[0-9]+]] = OpImage [[type_1d_image]] [[t5_load]]
52+
// CHECK-NEXT: [[query5:%[0-9]+]] = OpImageQuerySizeLod %uint [[image5]] %int_0
53+
// CHECK-NEXT: [[query5_i:%[0-9]+]] = OpBitcast %int [[query5]]
54+
// CHECK-NEXT: OpStore %i_width [[query5_i]]
55+
tex1d.GetDimensions(i_width);
56+
57+
// CHECK: [[t6_load:%[0-9]+]] = OpLoad [[type_1d_sampled_image]] %tex1d
58+
// CHECK-NEXT: [[image6:%[0-9]+]] = OpImage [[type_1d_image]] [[t6_load]]
59+
// CHECK-NEXT: [[mip6:%[0-9]+]] = OpLoad %uint %mipLevel
60+
// CHECK-NEXT: [[query6:%[0-9]+]] = OpImageQuerySizeLod %uint [[image6]] [[mip6]]
61+
// CHECK-NEXT: [[query6_i:%[0-9]+]] = OpBitcast %int [[query6]]
62+
// CHECK-NEXT: OpStore %i_width [[query6_i]]
63+
// CHECK-NEXT: [[query_level_6:%[0-9]+]] = OpImageQueryLevels %uint [[image6]]
64+
// CHECK-NEXT: [[query_level_6_i:%[0-9]+]] = OpBitcast %int [[query_level_6]]
65+
// CHECK-NEXT: OpStore %i_numLevels [[query_level_6_i]]
66+
tex1d.GetDimensions(mipLevel, i_width, i_numLevels);
67+
68+
#ifdef ERROR
69+
// ERROR: error: no matching member function for call to 'GetDimensions'
70+
tex1d.GetDimensions(mipLevel, 0, height, numLevels);
71+
72+
// ERROR: error: no matching member function for call to 'GetDimensions'
73+
tex1d.GetDimensions(width, 20);
74+
#endif
75+
}

0 commit comments

Comments
 (0)