[llvm-branch-commits] [clang] [HLSL] Implement Texture1D and its variants (PR #221061)
Deric C. via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Sep 11 13:52:52 PDT 2026
https://github.com/Icohedron updated https://github.com/llvm/llvm-project/pull/221061
>From 1b30e18e97dcaf21896f49f57e9a68f1a1c17c90 Mon Sep 17 00:00:00 2001
From: Deric Cheung <cheung.deric at gmail.com>
Date: Wed, 19 Aug 2026 15:32:55 -0700
Subject: [PATCH 1/6] [HLSL] Implement Texture1D and its variants
---
clang/lib/CodeGen/CGHLSLBuiltins.cpp | 19 +-
clang/lib/CodeGen/Targets/DirectX.cpp | 3 +-
clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp | 89 ++--
clang/lib/Sema/HLSLExternalSemaSource.cpp | 14 +
clang/test/AST/HLSL/Textures-AST.hlsl | 275 ++++++-----
clang/test/AST/HLSL/Textures-scalar-AST.hlsl | 388 ++++++++-------
.../test/AST/HLSL/Textures-shorthand-AST.hlsl | 23 +-
clang/test/AST/HLSL/Textures-vector-AST.hlsl | 388 ++++++++-------
.../Textures-CalculateLevelOfDetail.hlsl | 188 +++++---
.../CodeGenHLSL/resources/Textures-Load.hlsl | 452 ++++++++++++------
.../CodeGenHLSL/resources/Textures-Mips.hlsl | 109 +++--
.../resources/Textures-Sample.hlsl | 244 ++++++----
.../resources/Textures-SampleBias.hlsl | 213 ++++++---
.../resources/Textures-SampleCmp.hlsl | 196 +++++---
.../Textures-SampleCmpLevelZero.hlsl | 170 +++++--
.../resources/Textures-SampleGrad.hlsl | 296 ++++++++----
.../resources/Textures-SampleLevel.hlsl | 217 ++++++---
.../resources/Textures-Subscript.hlsl | 345 +++++++++----
.../resources/Textures-default.hlsl | 71 ++-
.../Textures-CalculateLevelOfDetail.hlsl | 9 +
.../Resources/Textures-SampleBias.hlsl | 8 +
.../Resources/Textures-SampleCmp.hlsl | 12 +-
.../Textures-SampleCmpLevelZero.hlsl | 12 +-
.../Resources/Textures-SampleGrad.hlsl | 8 +
.../Resources/Textures-SampleLevel.hlsl | 8 +
.../SemaHLSL/Resources/Textures-Sema.hlsl | 14 +-
.../Resources/Textures-Subscript.hlsl | 83 +++-
.../Resources/Textures-declaration-order.hlsl | 28 +-
.../Resources/Textures-mips-errors.hlsl | 20 +-
.../Textures-unsupported-methods-errors.hlsl | 42 +-
30 files changed, 2596 insertions(+), 1348 deletions(-)
diff --git a/clang/lib/CodeGen/CGHLSLBuiltins.cpp b/clang/lib/CodeGen/CGHLSLBuiltins.cpp
index 45b3d8ab27a25..9926cd78fd147 100644
--- a/clang/lib/CodeGen/CGHLSLBuiltins.cpp
+++ b/clang/lib/CodeGen/CGHLSLBuiltins.cpp
@@ -803,13 +803,18 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID,
unsigned NumElts = CoordLODVecTy->getNumElements();
assert(NumElts >= 2 && "CoordLOD must have at least 2 elements");
- // Split CoordLOD into Coord and LOD
- SmallVector<int, 4> Mask;
- for (unsigned I = 0; I < NumElts - 1; ++I)
- Mask.push_back(I);
-
- CoordOp =
- Builder.CreateShuffleVector(CoordLODOp, Mask, "hlsl.load.coord");
+ // Split CoordLOD into Coord and LOD. 1D resources use a scalar
+ // coordinate rather than a 1-element vector.
+ if (NumElts == 2) {
+ CoordOp = Builder.CreateExtractElement(CoordLODOp, uint64_t(0),
+ "hlsl.load.coord");
+ } else {
+ SmallVector<int, 4> Mask;
+ for (unsigned I = 0; I < NumElts - 1; ++I)
+ Mask.push_back(I);
+ CoordOp =
+ Builder.CreateShuffleVector(CoordLODOp, Mask, "hlsl.load.coord");
+ }
LODOp = Builder.CreateExtractElement(CoordLODOp, NumElts - 1,
"hlsl.load.lod");
}
diff --git a/clang/lib/CodeGen/Targets/DirectX.cpp b/clang/lib/CodeGen/Targets/DirectX.cpp
index e2c918d861e35..f5a5b565d948f 100644
--- a/clang/lib/CodeGen/Targets/DirectX.cpp
+++ b/clang/lib/CodeGen/Targets/DirectX.cpp
@@ -109,7 +109,8 @@ llvm::Type *DirectXTargetCodeGenInfo::getHLSLType(
llvm::dxil::ResourceKind RK = llvm::dxil::ResourceKind::Invalid;
switch (ResAttrs.ResourceDimension) {
case llvm::dxil::ResourceDimension::Dim1D:
- RK = llvm::dxil::ResourceKind::Texture1D;
+ RK = ResAttrs.IsArray ? llvm::dxil::ResourceKind::Texture1DArray
+ : llvm::dxil::ResourceKind::Texture1D;
break;
case llvm::dxil::ResourceDimension::Dim2D:
if (ResAttrs.isMultiSampled())
diff --git a/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp b/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp
index 5d499b7d6a96b..1e1cb97b0d132 100644
--- a/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp
+++ b/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp
@@ -88,6 +88,12 @@ convertParamModifierToParamABI(HLSLParamModifierAttr::Spelling Modifier) {
}
}
+QualType getVectorOrScalarType(ASTContext &AST, QualType Ty,
+ uint32_t NumElements) {
+ assert(NumElements > 0 && "Cannot create a zero-element type");
+ return NumElements > 1 ? AST.getExtVectorType(Ty, NumElements) : Ty;
+}
+
QualType getInoutParameterType(ASTContext &AST, QualType Ty) {
assert(!Ty->isReferenceType() &&
"Pointer and reference types cannot be inout or out parameters");
@@ -689,24 +695,27 @@ BuiltinTypeMethodBuilder &BuiltinTypeMethodBuilder::concat(V Vec, S Scalar,
QualType ResultTy) {
assert(ResultTy->isVectorType() && "The result type must be a vector type.");
Expr *VecExpr = convertPlaceholder(Vec);
- auto *VecTy = VecExpr->getType()->castAs<VectorType>();
Expr *ScalarExpr = convertPlaceholder(Scalar);
- // Save the vector to a local variable to avoid evaluating the placeholder
- // multiple times or sharing the AST node.
- LocalVar VecVar("vec_tmp", VecTy->desugar());
- declareLocalVar(VecVar);
- assign(VecVar, VecExpr);
-
- QualType EltTy = VecTy->getElementType();
- unsigned NumElts = VecTy->getNumElements();
-
ASTContext &AST = getASTContext();
SmallVector<Expr *, 4> Elts;
- for (unsigned I = 0; I < NumElts; ++I) {
- Elts.push_back(new (AST) ArraySubscriptExpr(
- convertPlaceholder(VecVar), DeclBuilder.getConstantIntExpr(I), EltTy,
- VK_PRValue, OK_Ordinary, SourceLocation()));
+ if (const auto *VecTy = VecExpr->getType()->getAs<VectorType>()) {
+ // Save the vector to a local variable to avoid evaluating the placeholder
+ // multiple times or sharing the AST node.
+ LocalVar VecVar("vec_tmp", VecTy->desugar());
+ declareLocalVar(VecVar);
+ assign(VecVar, VecExpr);
+
+ QualType EltTy = VecTy->getElementType();
+ unsigned NumElts = VecTy->getNumElements();
+
+ for (unsigned I = 0; I < NumElts; ++I) {
+ Elts.push_back(new (AST) ArraySubscriptExpr(
+ convertPlaceholder(VecVar), DeclBuilder.getConstantIntExpr(I), EltTy,
+ VK_PRValue, OK_Ordinary, SourceLocation()));
+ }
+ } else {
+ Elts.push_back(VecExpr);
}
Elts.push_back(ScalarExpr);
@@ -1456,9 +1465,7 @@ BuiltinTypeDeclBuilder::addArraySubscriptOperators(ResourceDimension Dim,
if (Dim != ResourceDimension::Unknown)
VecSize = getResourceDimensions(Dim) + (IsArray ? 1 : 0);
- QualType IndexTy = VecSize > 1
- ? AST.getExtVectorType(AST.UnsignedIntTy, VecSize)
- : AST.UnsignedIntTy;
+ QualType IndexTy = getVectorOrScalarType(AST, AST.UnsignedIntTy, VecSize);
DeclarationName Subscript =
AST.DeclarationNames.getCXXOperatorName(OO_Subscript);
@@ -1492,7 +1499,7 @@ CXXRecordDecl *BuiltinTypeDeclBuilder::addMipsSliceType(ResourceDimension Dim,
uint32_t VecSize =
getResourceDimensions(Dim) + (getResourceAttrs().IsArray ? 1 : 0);
QualType IntTy = AST.IntTy;
- QualType IndexTy = VecSize > 1 ? AST.getExtVectorType(IntTy, VecSize) : IntTy;
+ QualType IndexTy = getVectorOrScalarType(AST, IntTy, VecSize);
QualType CoordLevelTy = AST.getExtVectorType(IntTy, VecSize + 1);
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
@@ -1606,8 +1613,8 @@ BuiltinTypeDeclBuilder::addTextureLoadMethods(ResourceDimension Dim,
uint32_t OffsetSize = getResourceDimensions(Dim);
uint32_t CoordSize = OffsetSize + (IsArray ? 2 : 1);
QualType IntTy = AST.IntTy;
- QualType OffsetTy = AST.getExtVectorType(IntTy, OffsetSize);
- QualType LocationTy = AST.getExtVectorType(IntTy, CoordSize);
+ QualType OffsetTy = getVectorOrScalarType(AST, IntTy, OffsetSize);
+ QualType LocationTy = getVectorOrScalarType(AST, IntTy, CoordSize);
QualType ReturnType = getHandleElementType();
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
@@ -1638,7 +1645,7 @@ BuiltinTypeDeclBuilder::addRWTextureLoadMethods(ResourceDimension Dim,
ASTContext &AST = Record->getASTContext();
// A UAV binds a single mip slice: no mip component, no offset overload.
uint32_t CoordSize = getResourceDimensions(Dim) + (IsArray ? 1 : 0);
- QualType LocationTy = AST.getExtVectorType(AST.IntTy, CoordSize);
+ QualType LocationTy = getVectorOrScalarType(AST, AST.IntTy, CoordSize);
QualType ReturnType = getHandleElementType();
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
@@ -1662,8 +1669,8 @@ BuiltinTypeDeclBuilder::addTextureLoadMSMethods(ResourceDimension Dim,
// Multisampled textures use a plain location (no mip/LOD component).
uint32_t CoordSize = OffsetSize + (IsArray ? 1 : 0);
QualType IntTy = AST.IntTy;
- QualType OffsetTy = AST.getExtVectorType(IntTy, OffsetSize);
- QualType LocationTy = AST.getExtVectorType(IntTy, CoordSize);
+ QualType OffsetTy = getVectorOrScalarType(AST, IntTy, OffsetSize);
+ QualType LocationTy = getVectorOrScalarType(AST, IntTy, CoordSize);
QualType ReturnType = getHandleElementType();
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
@@ -1812,9 +1819,9 @@ BuiltinTypeDeclBuilder::addSampleMethods(ResourceDimension Dim, bool IsArray) {
uint32_t OffsetSize = getResourceDimensions(Dim);
uint32_t CoordSize = OffsetSize + (IsArray ? 1 : 0);
QualType FloatTy = AST.FloatTy;
- QualType CoordTy = AST.getExtVectorType(FloatTy, CoordSize);
+ QualType CoordTy = getVectorOrScalarType(AST, FloatTy, CoordSize);
QualType IntTy = AST.IntTy;
- QualType OffsetTy = AST.getExtVectorType(IntTy, OffsetSize);
+ QualType OffsetTy = getVectorOrScalarType(AST, IntTy, OffsetSize);
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
// T Sample(SamplerState s, float2 location)
@@ -1882,9 +1889,9 @@ BuiltinTypeDeclBuilder::addSampleBiasMethods(ResourceDimension Dim,
uint32_t OffsetSize = getResourceDimensions(Dim);
uint32_t CoordSize = OffsetSize + (IsArray ? 1 : 0);
QualType FloatTy = AST.FloatTy;
- QualType CoordTy = AST.getExtVectorType(FloatTy, CoordSize);
+ QualType CoordTy = getVectorOrScalarType(AST, FloatTy, CoordSize);
QualType IntTy = AST.IntTy;
- QualType OffsetTy = AST.getExtVectorType(IntTy, OffsetSize);
+ QualType OffsetTy = getVectorOrScalarType(AST, IntTy, OffsetSize);
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
// T SampleBias(SamplerState s, float2 location, float bias)
@@ -1957,10 +1964,10 @@ BuiltinTypeDeclBuilder::addSampleGradMethods(ResourceDimension Dim,
uint32_t OffsetSize = getResourceDimensions(Dim);
uint32_t CoordSize = OffsetSize + (IsArray ? 1 : 0);
QualType FloatTy = AST.FloatTy;
- QualType CoordTy = AST.getExtVectorType(FloatTy, CoordSize);
- QualType OffsetFloatTy = AST.getExtVectorType(FloatTy, OffsetSize);
+ QualType CoordTy = getVectorOrScalarType(AST, FloatTy, CoordSize);
+ QualType OffsetFloatTy = getVectorOrScalarType(AST, FloatTy, OffsetSize);
QualType IntTy = AST.IntTy;
- QualType OffsetTy = AST.getExtVectorType(IntTy, OffsetSize);
+ QualType OffsetTy = getVectorOrScalarType(AST, IntTy, OffsetSize);
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
// T SampleGrad(SamplerState s, float2 location, float2 ddx, float2 ddy)
@@ -2037,9 +2044,9 @@ BuiltinTypeDeclBuilder::addSampleLevelMethods(ResourceDimension Dim,
uint32_t OffsetSize = getResourceDimensions(Dim);
uint32_t CoordSize = OffsetSize + (IsArray ? 1 : 0);
QualType FloatTy = AST.FloatTy;
- QualType CoordTy = AST.getExtVectorType(FloatTy, CoordSize);
+ QualType CoordTy = getVectorOrScalarType(AST, FloatTy, CoordSize);
QualType IntTy = AST.IntTy;
- QualType OffsetTy = AST.getExtVectorType(IntTy, OffsetSize);
+ QualType OffsetTy = getVectorOrScalarType(AST, IntTy, OffsetSize);
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
// T SampleLevel(SamplerState s, float2 location, float lod)
@@ -2083,9 +2090,9 @@ BuiltinTypeDeclBuilder::addSampleCmpMethods(ResourceDimension Dim,
uint32_t OffsetSize = getResourceDimensions(Dim);
uint32_t CoordSize = OffsetSize + (IsArray ? 1 : 0);
QualType FloatTy = AST.FloatTy;
- QualType CoordTy = AST.getExtVectorType(FloatTy, CoordSize);
+ QualType CoordTy = getVectorOrScalarType(AST, FloatTy, CoordSize);
QualType IntTy = AST.IntTy;
- QualType OffsetTy = AST.getExtVectorType(IntTy, OffsetSize);
+ QualType OffsetTy = getVectorOrScalarType(AST, IntTy, OffsetSize);
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
// T SampleCmp(SamplerComparisonState s, float2 location, float compare_value)
@@ -2160,9 +2167,9 @@ BuiltinTypeDeclBuilder::addSampleCmpLevelZeroMethods(ResourceDimension Dim,
uint32_t OffsetSize = getResourceDimensions(Dim);
uint32_t CoordSize = OffsetSize + (IsArray ? 1 : 0);
QualType FloatTy = AST.FloatTy;
- QualType CoordTy = AST.getExtVectorType(FloatTy, CoordSize);
+ QualType CoordTy = getVectorOrScalarType(AST, FloatTy, CoordSize);
QualType IntTy = AST.IntTy;
- QualType OffsetTy = AST.getExtVectorType(IntTy, OffsetSize);
+ QualType OffsetTy = getVectorOrScalarType(AST, IntTy, OffsetSize);
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
// T SampleCmpLevelZero(SamplerComparisonState s, float2 location, float
@@ -2253,7 +2260,7 @@ BuiltinTypeDeclBuilder::addCalculateLodMethods(ResourceDimension Dim) {
lookupBuiltinType(SemaRef, "SamplerState", Record->getDeclContext());
uint32_t VecSize = getResourceDimensions(Dim);
QualType FloatTy = AST.FloatTy;
- QualType LocationTy = AST.getExtVectorType(FloatTy, VecSize);
+ QualType LocationTy = getVectorOrScalarType(AST, FloatTy, VecSize);
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
// float CalculateLevelOfDetail(SamplerState s, float2 location)
@@ -2304,9 +2311,9 @@ BuiltinTypeDeclBuilder::addGatherMethods(ResourceDimension Dim, bool IsArray) {
uint32_t OffsetSize = getResourceDimensions(Dim);
uint32_t CoordSize = OffsetSize + (IsArray ? 1 : 0);
QualType LocationTy = AST.FloatTy;
- QualType CoordTy = AST.getExtVectorType(LocationTy, CoordSize);
+ QualType CoordTy = getVectorOrScalarType(AST, LocationTy, CoordSize);
QualType IntTy = AST.IntTy;
- QualType OffsetTy = AST.getExtVectorType(IntTy, OffsetSize);
+ QualType OffsetTy = getVectorOrScalarType(AST, IntTy, OffsetSize);
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
// Overloads for Gather, GatherRed, GatherGreen, GatherBlue, GatherAlpha
@@ -2362,9 +2369,9 @@ BuiltinTypeDeclBuilder::addGatherCmpMethods(ResourceDimension Dim,
uint32_t OffsetSize = getResourceDimensions(Dim);
uint32_t CoordSize = OffsetSize + (IsArray ? 1 : 0);
QualType FloatTy = AST.FloatTy;
- QualType CoordTy = AST.getExtVectorType(FloatTy, CoordSize);
+ QualType CoordTy = getVectorOrScalarType(AST, FloatTy, CoordSize);
QualType IntTy = AST.IntTy;
- QualType OffsetTy = AST.getExtVectorType(IntTy, OffsetSize);
+ QualType OffsetTy = getVectorOrScalarType(AST, IntTy, OffsetSize);
using PH = BuiltinTypeMethodBuilder::PlaceHolder;
// Overloads for GatherCmp, GatherCmpRed, GatherCmpGreen, GatherCmpBlue,
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index bbd8ca99cb797..3f56792b5ff66 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -302,6 +302,20 @@ struct TextureTypeInfo {
} // namespace
static const TextureTypeInfo TextureTypes[] = {
+ {"Texture1D", ResourceClass::SRV, ResourceDimension::Dim1D,
+ /*IsArray=*/false, /*IsROV=*/false, TemplateShape::ElementType,
+ TexCap::Load | TexCap::Subscript | TexCap::Mips | TexCap::Sample |
+ TexCap::SampleCmp | TexCap::CalcLOD},
+ {"RWTexture1D", ResourceClass::UAV, ResourceDimension::Dim1D,
+ /*IsArray=*/false, /*IsROV=*/false, TemplateShape::ElementType,
+ TexCap::LoadRW | TexCap::Subscript},
+ {"Texture1DArray", ResourceClass::SRV, ResourceDimension::Dim1D,
+ /*IsArray=*/true, /*IsROV=*/false, TemplateShape::ElementType,
+ TexCap::Load | TexCap::Subscript | TexCap::Mips | TexCap::Sample |
+ TexCap::SampleCmp | TexCap::CalcLOD},
+ {"RWTexture1DArray", ResourceClass::UAV, ResourceDimension::Dim1D,
+ /*IsArray=*/true, /*IsROV=*/false, TemplateShape::ElementType,
+ TexCap::LoadRW | TexCap::Subscript},
{"Texture2D", ResourceClass::SRV, ResourceDimension::Dim2D,
/*IsArray=*/false, /*IsROV=*/false, TemplateShape::ElementType,
TexCap::Load | TexCap::Subscript | TexCap::Mips | TexCap::Sample |
diff --git a/clang/test/AST/HLSL/Textures-AST.hlsl b/clang/test/AST/HLSL/Textures-AST.hlsl
index 6e5655f0cbafd..9196c584d0767 100644
--- a/clang/test/AST/HLSL/Textures-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-AST.hlsl
@@ -1,23 +1,61 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_GETDIM \
+// RUN: -DINDEX_ARG_TYPE=uint3 -DINDEX_ARG="uint3(0, 0, 0)" \
+// RUN: -DTEXTURE=Texture2D -o - %s | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,GETDIM,GETDIM-SRV -DTEXTURE=Texture2D \
+// RUN: -DINDEX_DIM=2 -DDIM_NAME=2D -DINDEX_TYPE="vector<unsigned int, 2>" \
+// RUN: -DLOCATION_TYPE="vector<int, 2>"
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=Texture2D -o - %s \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SRV -DTEXTURE=Texture2D \
-// RUN: -DINDEX_DIM=2 -DDIM_NAME=2D
+// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=Texture1D -o - %s | FileCheck \
+// RUN: %s --check-prefixes=CHECK,SRV -DTEXTURE=Texture1D -DINDEX_DIM=1 \
+// RUN: -DDIM_NAME=1D -DINDEX_TYPE="unsigned int" -DLOCATION_TYPE=int
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_GETDIM \
+// RUN: -DINDEX_ARG_TYPE=uint3 -DINDEX_ARG="uint3(0, 0, 0)" \
+// RUN: -DTEXTURE=Texture2DArray -o - %s | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,SRV-ARRAY,GETDIM,GETDIM-SRV,GETDIM-SRV-ARRAY \
+// RUN: -DTEXTURE=Texture2DArray -DINDEX_DIM=3 -DDIM_NAME=2D \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" \
+// RUN: -DLOCATION_TYPE="vector<int, 3>"
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=Texture2DArray -o - %s \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,SRV-ARRAY \
-// RUN: -DTEXTURE=Texture2DArray -DINDEX_DIM=3 -DDIM_NAME=2D
+// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=Texture1DArray -o - %s | \
+// RUN: FileCheck %s --check-prefixes=CHECK,SRV,SRV-ARRAY \
+// RUN: -DTEXTURE=Texture1DArray -DINDEX_DIM=2 -DDIM_NAME=1D \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
+// RUN: -DLOCATION_TYPE="vector<int, 2>"
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_GETDIM \
+// RUN: -DINDEX_ARG_TYPE=uint3 -DINDEX_ARG="uint3(0, 0, 0)" \
+// RUN: -DTEXTURE=RWTexture2D -DRW=1 -o - %s | FileCheck %s \
+// RUN: --check-prefixes=CHECK,UAV,UAV-STORE,UAV-TRUNC,GETDIM,GETDIM-UAV \
+// RUN: -DTEXTURE=RWTexture2D -DINDEX_DIM=2 -DDIM_NAME=2D \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
+// RUN: -DLOCATION_TYPE="vector<int, 2>" -DTRUNC_TYPE="vector<uint, 2>"
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=RWTexture2D -DRW=1 -o - %s \
-// RUN: | FileCheck %s --check-prefixes=CHECK,UAV,UAV-STORE,UAV-TRUNC \
-// RUN: -DTEXTURE=RWTexture2D -DINDEX_DIM=2 -DDIM_NAME=2D
+// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=RWTexture1D -DRW=1 -o - %s | \
+// RUN: FileCheck %s --check-prefixes=CHECK,UAV,UAV-STORE,UAV-TRUNC \
+// RUN: -DTEXTURE=RWTexture1D -DINDEX_DIM=1 -DDIM_NAME=1D \
+// RUN: -DINDEX_TYPE="unsigned int" -DLOCATION_TYPE=int \
+// RUN: -DTRUNC_TYPE="uint':'unsigned int"
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_GETDIM \
+// RUN: -DINDEX_ARG_TYPE=uint3 -DINDEX_ARG="uint3(0, 0, 0)" \
+// RUN: -DTEXTURE=RWTexture2DArray -DRW=1 -o - %s | FileCheck %s \
+// RUN: --check-prefixes=CHECK,UAV,UAV-ARRAY,UAV-STORE,UAV-NOTRUNC,GETDIM,GETDIM-UAV,GETDIM-UAV-ARRAY \
+// RUN: -DTEXTURE=RWTexture2DArray -DINDEX_DIM=3 -DDIM_NAME=2D \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" \
+// RUN: -DLOCATION_TYPE="vector<int, 3>"
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=RWTexture2DArray -DRW=1 -o - %s \
-// RUN: | FileCheck %s --check-prefixes=CHECK,UAV,UAV-ARRAY,UAV-STORE,UAV-NOTRUNC \
-// RUN: -DTEXTURE=RWTexture2DArray -DINDEX_DIM=3 -DDIM_NAME=2D
+// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=RWTexture1DArray -DRW=1 -o - \
+// RUN: %s | FileCheck %s \
+// RUN: --check-prefixes=CHECK,UAV,UAV-ARRAY,UAV-STORE,UAV-TRUNC \
+// RUN: -DTEXTURE=RWTexture1DArray -DINDEX_DIM=2 -DDIM_NAME=1D \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
+// RUN: -DLOCATION_TYPE="vector<int, 2>" -DTRUNC_TYPE="vector<uint, 2>"
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -26,6 +64,8 @@
// INDEX_ARG a literal operator[] index
// TEXTURE resource type name
// INDEX_DIM operator[] index components
+// INDEX_TYPE operator[] index type
+// LOCATION_TYPE Load location type
// DIM_NAME hlsl::dimension spelling
// RW dx.Texture UAV operand
//
@@ -37,6 +77,11 @@
// UAV-TRUNC types whose index is narrower than INDEX_ARG_TYPE
// UAV-ARRAY writable array textures
// UAV-NOTRUNC types whose index matches INDEX_ARG_TYPE
+// GETDIM types that have the GetDimensions overloads
+// GETDIM-SRV read-only textures that have GetDimensions
+// GETDIM-UAV writable textures that have GetDimensions
+// GETDIM-SRV-ARRAY read-only array textures that have GetDimensions
+// GETDIM-UAV-ARRAY writable array textures that have GetDimensions
// CHECK: ClassTemplateDecl {{.*}} [[TEXTURE]]
// CHECK: TemplateTypeParmDecl {{.*}} element_type
@@ -50,8 +95,8 @@
// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
// CHECK-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
-// UAV: CXXMethodDecl {{.*}} Load 'element_type (vector<int, [[INDEX_DIM]]>)' inline
-// UAV-NEXT: ParmVarDecl {{.*}} Location 'vector<int, [[INDEX_DIM]]>'
+// UAV: CXXMethodDecl {{.*}} Load 'element_type ([[LOCATION_TYPE]])' inline
+// UAV-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// UAV-NEXT: CompoundStmt
// UAV-NEXT: ReturnStmt
// UAV-NEXT: CStyleCastExpr {{.*}} 'element_type' <Dependent>
@@ -64,11 +109,11 @@
// UAV-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
// UAV-SAME: ' lvalue .__handle
// UAV-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
-// UAV-NEXT: DeclRefExpr {{.*}} 'vector<int, [[INDEX_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<int, [[INDEX_DIM]]>'
+// UAV-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// UAV-NEXT: AlwaysInlineAttr
-// SRV: CXXMethodDecl {{.*}} operator[] 'const hlsl_device element_type &(vector<unsigned int, [[INDEX_DIM]]>) const' inline
-// SRV-NEXT: ParmVarDecl {{.*}} Index 'vector<unsigned int, [[INDEX_DIM]]>'
+// SRV: CXXMethodDecl {{.*}} operator[] 'const hlsl_device element_type &([[INDEX_TYPE]]) const' inline
+// SRV-NEXT: ParmVarDecl {{.*}} Index '[[INDEX_TYPE]]'
// SRV-NEXT: CompoundStmt
// SRV-NEXT: ReturnStmt
// SRV-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' lvalue prefix '*' cannot overflow
@@ -82,11 +127,11 @@
// SRV-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
// SRV-SAME: ' lvalue .__handle
// SRV-NEXT: CXXThisExpr {{.*}} 'const hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
-// SRV-NEXT: DeclRefExpr {{.*}} 'vector<unsigned int, [[INDEX_DIM]]>' lvalue ParmVar {{.*}} 'Index' 'vector<unsigned int, [[INDEX_DIM]]>'
+// SRV-NEXT: DeclRefExpr {{.*}} '[[INDEX_TYPE]]' lvalue ParmVar {{.*}} 'Index' '[[INDEX_TYPE]]'
// SRV-NEXT: AlwaysInlineAttr
-// UAV: CXXMethodDecl {{.*}} operator[] 'hlsl_device element_type &(vector<unsigned int, [[INDEX_DIM]]>) const' inline
-// UAV-NEXT: ParmVarDecl {{.*}} Index 'vector<unsigned int, [[INDEX_DIM]]>'
+// UAV: CXXMethodDecl {{.*}} operator[] 'hlsl_device element_type &([[INDEX_TYPE]]) const' inline
+// UAV-NEXT: ParmVarDecl {{.*}} Index '[[INDEX_TYPE]]'
// UAV-NEXT: CompoundStmt
// UAV-NEXT: ReturnStmt
// UAV-NEXT: UnaryOperator {{.*}} 'hlsl_device element_type' lvalue prefix '*' cannot overflow
@@ -100,102 +145,102 @@
// UAV-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
// UAV-SAME: ' lvalue .__handle
// UAV-NEXT: CXXThisExpr {{.*}} 'const hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
-// UAV-NEXT: DeclRefExpr {{.*}} 'vector<unsigned int, [[INDEX_DIM]]>' lvalue ParmVar {{.*}} 'Index' 'vector<unsigned int, [[INDEX_DIM]]>'
+// UAV-NEXT: DeclRefExpr {{.*}} '[[INDEX_TYPE]]' lvalue ParmVar {{.*}} 'Index' '[[INDEX_TYPE]]'
// UAV-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} GetDimensions 'void (out unsigned int, out unsigned int)'
-// CHECK-NEXT: ParmVarDecl {{.*}} width 'unsigned int &__restrict'
-// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
-// CHECK-NEXT: ParmVarDecl {{.*}} height 'unsigned int &__restrict'
-// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
-// CHECK-NEXT: CompoundStmt
-// CHECK-NEXT: CallExpr {{.*}} '<dependent type>'
-// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_xy' 'void (__hlsl_resource_t, unsigned int &, unsigned int &) noexcept'
-// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
-// SRV-SAME{LITERAL}: [[hlsl::resource_class("SRV")]]
-// UAV-SAME{LITERAL}: [[hlsl::resource_class("UAV")]]
-// SRV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
-// UAV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
-// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
-// CHECK-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
-// CHECK-SAME: ' lvalue .__handle
-// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
-// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'width' 'unsigned int &__restrict'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'height' 'unsigned int &__restrict'
-// CHECK-NEXT: AlwaysInlineAttr
+// GETDIM: CXXMethodDecl {{.*}} GetDimensions 'void (out unsigned int, out unsigned int)'
+// GETDIM-NEXT: ParmVarDecl {{.*}} width 'unsigned int &__restrict'
+// GETDIM-NEXT: HLSLParamModifierAttr {{.*}} out
+// GETDIM-NEXT: ParmVarDecl {{.*}} height 'unsigned int &__restrict'
+// GETDIM-NEXT: HLSLParamModifierAttr {{.*}} out
+// GETDIM-NEXT: CompoundStmt
+// GETDIM-NEXT: CallExpr {{.*}} '<dependent type>'
+// GETDIM-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_xy' 'void (__hlsl_resource_t, unsigned int &, unsigned int &) noexcept'
+// GETDIM-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
+// GETDIM-SRV-SAME{LITERAL}: [[hlsl::resource_class("SRV")]]
+// GETDIM-UAV-SAME{LITERAL}: [[hlsl::resource_class("UAV")]]
+// GETDIM-SRV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
+// GETDIM-UAV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
+// GETDIM-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
+// GETDIM-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
+// GETDIM-SAME: ' lvalue .__handle
+// GETDIM-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'width' 'unsigned int &__restrict'
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'height' 'unsigned int &__restrict'
+// GETDIM-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} GetDimensions 'void (unsigned int, out unsigned int, out unsigned int, out unsigned int)'
-// CHECK-NEXT: ParmVarDecl {{.*}} mipLevel 'unsigned int'
-// CHECK-NEXT: ParmVarDecl {{.*}} width 'unsigned int &__restrict'
-// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
-// CHECK-NEXT: ParmVarDecl {{.*}} height 'unsigned int &__restrict'
-// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
-// CHECK-NEXT: ParmVarDecl {{.*}} numberOfLevels 'unsigned int &__restrict'
-// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
-// CHECK-NEXT: CompoundStmt
-// CHECK-NEXT: CallExpr {{.*}} '<dependent type>'
-// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_levels_xy' 'void (__hlsl_resource_t, unsigned int, unsigned int &, unsigned int &, unsigned int &) noexcept'
-// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
-// SRV-SAME{LITERAL}: [[hlsl::resource_class("SRV")]]
-// UAV-SAME{LITERAL}: [[hlsl::resource_class("UAV")]]
-// SRV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
-// UAV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
-// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
-// CHECK-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
-// CHECK-SAME: ' lvalue .__handle
-// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
-// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'mipLevel' 'unsigned int'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'width' 'unsigned int &__restrict'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'height' 'unsigned int &__restrict'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'numberOfLevels' 'unsigned int &__restrict'
-// CHECK-NEXT: AlwaysInlineAttr
+// GETDIM: CXXMethodDecl {{.*}} GetDimensions 'void (unsigned int, out unsigned int, out unsigned int, out unsigned int)'
+// GETDIM-NEXT: ParmVarDecl {{.*}} mipLevel 'unsigned int'
+// GETDIM-NEXT: ParmVarDecl {{.*}} width 'unsigned int &__restrict'
+// GETDIM-NEXT: HLSLParamModifierAttr {{.*}} out
+// GETDIM-NEXT: ParmVarDecl {{.*}} height 'unsigned int &__restrict'
+// GETDIM-NEXT: HLSLParamModifierAttr {{.*}} out
+// GETDIM-NEXT: ParmVarDecl {{.*}} numberOfLevels 'unsigned int &__restrict'
+// GETDIM-NEXT: HLSLParamModifierAttr {{.*}} out
+// GETDIM-NEXT: CompoundStmt
+// GETDIM-NEXT: CallExpr {{.*}} '<dependent type>'
+// GETDIM-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_levels_xy' 'void (__hlsl_resource_t, unsigned int, unsigned int &, unsigned int &, unsigned int &) noexcept'
+// GETDIM-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
+// GETDIM-SRV-SAME{LITERAL}: [[hlsl::resource_class("SRV")]]
+// GETDIM-UAV-SAME{LITERAL}: [[hlsl::resource_class("UAV")]]
+// GETDIM-SRV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
+// GETDIM-UAV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
+// GETDIM-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
+// GETDIM-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
+// GETDIM-SAME: ' lvalue .__handle
+// GETDIM-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'mipLevel' 'unsigned int'
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'width' 'unsigned int &__restrict'
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'height' 'unsigned int &__restrict'
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'numberOfLevels' 'unsigned int &__restrict'
+// GETDIM-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} GetDimensions 'void (out float, out float)'
-// CHECK-NEXT: ParmVarDecl {{.*}} width 'float &__restrict'
-// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
-// CHECK-NEXT: ParmVarDecl {{.*}} height 'float &__restrict'
-// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
-// CHECK-NEXT: CompoundStmt
-// CHECK-NEXT: CallExpr {{.*}} '<dependent type>'
-// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_xy_float' 'void (__hlsl_resource_t, float &, float &) noexcept'
-// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
-// SRV-SAME{LITERAL}: [[hlsl::resource_class("SRV")]]
-// UAV-SAME{LITERAL}: [[hlsl::resource_class("UAV")]]
-// SRV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
-// UAV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
-// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
-// CHECK-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
-// CHECK-SAME: ' lvalue .__handle
-// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
-// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'width' 'float &__restrict'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'height' 'float &__restrict'
-// CHECK-NEXT: AlwaysInlineAttr
+// GETDIM: CXXMethodDecl {{.*}} GetDimensions 'void (out float, out float)'
+// GETDIM-NEXT: ParmVarDecl {{.*}} width 'float &__restrict'
+// GETDIM-NEXT: HLSLParamModifierAttr {{.*}} out
+// GETDIM-NEXT: ParmVarDecl {{.*}} height 'float &__restrict'
+// GETDIM-NEXT: HLSLParamModifierAttr {{.*}} out
+// GETDIM-NEXT: CompoundStmt
+// GETDIM-NEXT: CallExpr {{.*}} '<dependent type>'
+// GETDIM-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_xy_float' 'void (__hlsl_resource_t, float &, float &) noexcept'
+// GETDIM-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
+// GETDIM-SRV-SAME{LITERAL}: [[hlsl::resource_class("SRV")]]
+// GETDIM-UAV-SAME{LITERAL}: [[hlsl::resource_class("UAV")]]
+// GETDIM-SRV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
+// GETDIM-UAV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
+// GETDIM-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
+// GETDIM-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
+// GETDIM-SAME: ' lvalue .__handle
+// GETDIM-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'width' 'float &__restrict'
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'height' 'float &__restrict'
+// GETDIM-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} GetDimensions 'void (unsigned int, out float, out float, out float)'
-// CHECK-NEXT: ParmVarDecl {{.*}} mipLevel 'unsigned int'
-// CHECK-NEXT: ParmVarDecl {{.*}} width 'float &__restrict'
-// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
-// CHECK-NEXT: ParmVarDecl {{.*}} height 'float &__restrict'
-// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
-// CHECK-NEXT: ParmVarDecl {{.*}} numberOfLevels 'float &__restrict'
-// CHECK-NEXT: HLSLParamModifierAttr {{.*}} out
-// CHECK-NEXT: CompoundStmt
-// CHECK-NEXT: CallExpr {{.*}} '<dependent type>'
-// CHECK-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_levels_xy_float' 'void (__hlsl_resource_t, unsigned int, float &, float &, float &) noexcept'
-// CHECK-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
-// SRV-SAME{LITERAL}: [[hlsl::resource_class("SRV")]]
-// UAV-SAME{LITERAL}: [[hlsl::resource_class("UAV")]]
-// SRV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
-// UAV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
-// CHECK-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
-// CHECK-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
-// CHECK-SAME: ' lvalue .__handle
-// CHECK-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
-// CHECK-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'mipLevel' 'unsigned int'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'width' 'float &__restrict'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'height' 'float &__restrict'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'numberOfLevels' 'float &__restrict'
-// CHECK-NEXT: AlwaysInlineAttr
+// GETDIM: CXXMethodDecl {{.*}} GetDimensions 'void (unsigned int, out float, out float, out float)'
+// GETDIM-NEXT: ParmVarDecl {{.*}} mipLevel 'unsigned int'
+// GETDIM-NEXT: ParmVarDecl {{.*}} width 'float &__restrict'
+// GETDIM-NEXT: HLSLParamModifierAttr {{.*}} out
+// GETDIM-NEXT: ParmVarDecl {{.*}} height 'float &__restrict'
+// GETDIM-NEXT: HLSLParamModifierAttr {{.*}} out
+// GETDIM-NEXT: ParmVarDecl {{.*}} numberOfLevels 'float &__restrict'
+// GETDIM-NEXT: HLSLParamModifierAttr {{.*}} out
+// GETDIM-NEXT: CompoundStmt
+// GETDIM-NEXT: CallExpr {{.*}} '<dependent type>'
+// GETDIM-NEXT: DeclRefExpr {{.*}} '<builtin fn type>' Function {{.*}} '__builtin_hlsl_resource_getdimensions_levels_xy_float' 'void (__hlsl_resource_t, unsigned int, float &, float &, float &) noexcept'
+// GETDIM-NEXT: MemberExpr {{.*}} '__hlsl_resource_t
+// GETDIM-SRV-SAME{LITERAL}: [[hlsl::resource_class("SRV")]]
+// GETDIM-UAV-SAME{LITERAL}: [[hlsl::resource_class("UAV")]]
+// GETDIM-SRV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
+// GETDIM-UAV-ARRAY-SAME{LITERAL}: [[hlsl::is_array]]
+// GETDIM-SAME{LITERAL}: [[hlsl::contained_type(element_type)]]
+// GETDIM-SAME: {{\[\[}}hlsl::dimension("[[DIM_NAME]]"){{\]\]}}
+// GETDIM-SAME: ' lvalue .__handle
+// GETDIM-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'unsigned int' lvalue ParmVar {{.*}} 'mipLevel' 'unsigned int'
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'width' 'float &__restrict'
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'height' 'float &__restrict'
+// GETDIM-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'numberOfLevels' 'float &__restrict'
+// GETDIM-NEXT: AlwaysInlineAttr
// CHECK: ClassTemplatePartialSpecializationDecl {{.*}} class [[TEXTURE]] explicit_specialization
// CHECK: TemplateTypeParmDecl {{.*}} element_type
@@ -206,11 +251,11 @@
// UAV-STORE-LABEL: FunctionDecl {{.*}} main 'void ()'
// UAV-STORE: BinaryOperator {{.*}} 'hlsl_device float' lvalue '='
// UAV-STORE-NEXT: CXXOperatorCallExpr {{.*}} 'hlsl_device float' lvalue '[]'
-// UAV-STORE-NEXT: ImplicitCastExpr {{.*}} 'hlsl_device float &(*)(vector<unsigned int, [[INDEX_DIM]]>) const' <FunctionToPointerDecay>
-// UAV-STORE-NEXT: DeclRefExpr {{.*}} 'hlsl_device float &(vector<unsigned int, [[INDEX_DIM]]>) const' lvalue CXXMethod {{.*}} 'operator[]' 'hlsl_device float &(vector<unsigned int, [[INDEX_DIM]]>) const'
+// UAV-STORE-NEXT: ImplicitCastExpr {{.*}} 'hlsl_device float &(*)([[INDEX_TYPE]]) const' <FunctionToPointerDecay>
+// UAV-STORE-NEXT: DeclRefExpr {{.*}} 'hlsl_device float &([[INDEX_TYPE]]) const' lvalue CXXMethod {{.*}} 'operator[]' 'hlsl_device float &([[INDEX_TYPE]]) const'
// UAV-STORE-NEXT: ImplicitCastExpr {{.*}} 'const hlsl::[[TEXTURE]]<float>' lvalue <NoOp>
// UAV-STORE-NEXT: DeclRefExpr {{.*}} '[[TEXTURE]]<float>':'hlsl::[[TEXTURE]]<float>' lvalue Var {{.*}} 't' '[[TEXTURE]]<float>':'hlsl::[[TEXTURE]]<float>'
-// UAV-TRUNC-NEXT: ImplicitCastExpr {{.*}} 'vector<uint, 2>' <HLSLVectorTruncation>
+// UAV-TRUNC-NEXT: ImplicitCastExpr {{.*}} '[[TRUNC_TYPE]]' <HLSLVectorTruncation>
// UAV-TRUNC-NEXT: ImplicitCastExpr {{.*}} 'uint3':'vector<uint, 3>' <LValueToRValue>
// UAV-TRUNC-NEXT: DeclRefExpr {{.*}} 'uint3':'vector<uint, 3>' lvalue Var {{.*}} 'i' 'uint3':'vector<uint, 3>'
// UAV-NOTRUNC-NEXT: ImplicitCastExpr {{.*}} 'uint3':'vector<uint, 3>' <LValueToRValue>
@@ -226,6 +271,8 @@ void main() {
#endif
float x = t[i];
(void)x;
+#ifdef HAS_GETDIM
uint w, h;
t.GetDimensions(w, h);
+#endif
}
diff --git a/clang/test/AST/HLSL/Textures-scalar-AST.hlsl b/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
index 1335863aa9d8b..da9f410295fe0 100644
--- a/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
@@ -1,43 +1,81 @@
+// Texture1D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
+// RUN: -DHAS_SAMPLE_CMP -DTEXTURE=Texture1D -DCOORD_TYPE=float \
+// RUN: -DGRAD_TYPE=float -DLOD_LOCATION=loc -DOFFSET_ARG="1" -o - %s | \
+// RUN: FileCheck %s \
+// RUN: --check-prefixes=CHECK,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
+// RUN: -DTEXTURE=Texture1D -DDIM_NAME=1D -DDIM=1 -DCOORD_DIM=1 -DLOAD_DIM=2 \
+// RUN: -DINDEX_TYPE="unsigned int" -DIS_ARRAY="" -DLOCATION_TYPE=float \
+// RUN: -DGRADIENT_TYPE=float -DOFFSET_TYPE=int
+
+// Texture1DArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
+// RUN: -DHAS_SAMPLE_CMP -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 \
+// RUN: -DGRAD_TYPE=float -DLOD_LOCATION=loc.x -DOFFSET_ARG="1" -o - %s | \
+// RUN: FileCheck %s \
+// RUN: --check-prefixes=CHECK,ARRAY,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
+// RUN: -DTEXTURE=Texture1DArray -DDIM_NAME=1D -DDIM=1 -DCOORD_DIM=2 \
+// RUN: -DLOAD_DIM=3 -DINDEX_TYPE="vector<unsigned int, 2>" \
+// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 2>" \
+// RUN: -DGRADIENT_TYPE=float -DOFFSET_TYPE=int
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
// RUN: -DHAS_GETDIM_XY -DHAS_SAMPLE_CMP -DHAS_GATHER -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float2 -DLOD_LOCATION=loc \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -o - %s \
-// RUN: | FileCheck %s \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,TEXEL,OFFSET,GETDIM-XY,SAMPLECMP,SAMPLECMP-OFFSET,GATHER,GATHER-OFFSET \
// RUN: -DTEXTURE=Texture2D -DDIM_NAME=2D -DDIM=2 -DCOORD_DIM=2 -DLOAD_DIM=3 \
-// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" -DIS_ARRAY=""
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
-// RUN: -disable-llvm-passes -finclude-default-header -DHAS_SAMPLE_CMP \
-// RUN: -DHAS_GATHER -DTEXTURE=TextureCube -DCOORD_TYPE=float3 \
-// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc -o - %s \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SAMPLECMP,GATHER \
-// RUN: -DTEXTURE=TextureCube -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=3 \
-// RUN: -DIS_ARRAY=""
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
-// RUN: -disable-llvm-passes -finclude-default-header -DHAS_SAMPLE_CMP \
-// RUN: -DHAS_GATHER -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 \
-// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc.xyz -o - %s \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SAMPLECMP,GATHER \
-// RUN: -DTEXTURE=TextureCubeArray -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=4 \
-// RUN: -DIS_ARRAY=" [[hlsl::is_array]]"
+// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" -DIS_ARRAY="" \
+// RUN: -DLOCATION_TYPE="vector<float, 2>" \
+// RUN: -DGRADIENT_TYPE="vector<float, 2>" -DOFFSET_TYPE="vector<int, 2>"
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
// RUN: -DHAS_GETDIM_XY -DHAS_SAMPLE_CMP -DHAS_GATHER \
// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -DGRAD_TYPE=float2 \
-// RUN: -DLOD_LOCATION=loc.xy -DOFFSET_ARG="int2(1, 2)" -o - %s \
-// RUN: | FileCheck %s \
+// RUN: -DLOD_LOCATION=loc.xy -DOFFSET_ARG="int2(1, 2)" -o - %s | FileCheck \
+// RUN: %s \
// RUN: --check-prefixes=CHECK,ARRAY,TEXEL,OFFSET,GETDIM-XY,SAMPLECMP,SAMPLECMP-OFFSET,GATHER,GATHER-OFFSET \
// RUN: -DTEXTURE=Texture2DArray -DDIM_NAME=2D -DDIM=2 -DCOORD_DIM=3 \
// RUN: -DLOAD_DIM=4 -DINDEX_TYPE="vector<unsigned int, 3>" \
-// RUN: -DIS_ARRAY=" [[hlsl::is_array]]"
+// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 3>" \
+// RUN: -DGRADIENT_TYPE="vector<float, 2>" -DOFFSET_TYPE="vector<int, 2>"
+
+// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -DGRAD_TYPE=float3 \
-// RUN: -DLOD_LOCATION=loc -DOFFSET_ARG="int3(1, 2, 3)" -o - %s \
-// RUN: | FileCheck %s --check-prefixes=CHECK,TEXEL,OFFSET \
-// RUN: -DTEXTURE=Texture3D -DDIM_NAME=3D -DDIM=3 -DCOORD_DIM=3 -DLOAD_DIM=4 \
-// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" -DIS_ARRAY=""
+// RUN: -DLOD_LOCATION=loc -DOFFSET_ARG="int3(1, 2, 3)" -o - %s | FileCheck \
+// RUN: %s --check-prefixes=CHECK,TEXEL,OFFSET -DTEXTURE=Texture3D \
+// RUN: -DDIM_NAME=3D -DDIM=3 -DCOORD_DIM=3 -DLOAD_DIM=4 \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" -DIS_ARRAY="" \
+// RUN: -DLOCATION_TYPE="vector<float, 3>" \
+// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
+
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_SAMPLE_CMP \
+// RUN: -DHAS_GATHER -DTEXTURE=TextureCube -DCOORD_TYPE=float3 \
+// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc -o - %s | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SAMPLECMP,GATHER -DTEXTURE=TextureCube \
+// RUN: -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=3 -DIS_ARRAY="" \
+// RUN: -DLOCATION_TYPE="vector<float, 3>" \
+// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_SAMPLE_CMP \
+// RUN: -DHAS_GATHER -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 \
+// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc.xyz -o - %s | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SAMPLECMP,GATHER -DTEXTURE=TextureCubeArray \
+// RUN: -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=4 \
+// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 4>" \
+// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -113,9 +151,9 @@
// TEXEL-NEXT: DeclRefExpr {{.*}} 'vector<int, [[LOAD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<int, [[LOAD_DIM]]>'
// TEXEL-NEXT: AlwaysInlineAttr
-// TEXEL: CXXMethodDecl {{.*}} Load 'element_type (vector<int, [[LOAD_DIM]]>, vector<int, [[DIM]]>)'
+// TEXEL: CXXMethodDecl {{.*}} Load 'element_type (vector<int, [[LOAD_DIM]]>, [[OFFSET_TYPE]])'
// TEXEL-NEXT: ParmVarDecl {{.*}} Location 'vector<int, [[LOAD_DIM]]>'
-// TEXEL-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// TEXEL-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// TEXEL-NEXT: CompoundStmt
// TEXEL-NEXT: ReturnStmt
// TEXEL-NEXT: CStyleCastExpr {{.*}} 'element_type' <Dependent>
@@ -129,7 +167,7 @@
// TEXEL-SAME: ' lvalue .__handle
// TEXEL-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<element_type>' lvalue implicit this
// TEXEL-NEXT: DeclRefExpr {{.*}} 'vector<int, [[LOAD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<int, [[LOAD_DIM]]>'
-// TEXEL-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// TEXEL-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// TEXEL-NEXT: AlwaysInlineAttr
// TEXEL: CXXMethodDecl {{.*}} operator[] 'const hlsl_device element_type &([[INDEX_TYPE]]) const' inline
@@ -150,9 +188,9 @@
// TEXEL-NEXT: DeclRefExpr {{.*}} '[[INDEX_TYPE]]' lvalue ParmVar {{.*}} 'Index' '[[INDEX_TYPE]]'
// TEXEL-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} Sample 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)'
+// CHECK: CXXMethodDecl {{.*}} Sample 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]])'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
// CHECK-NEXT: CStyleCastExpr {{.*}} 'element_type' <Dependent>
@@ -167,13 +205,13 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// CHECK-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} Sample 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)'
+// OFFSET: CXXMethodDecl {{.*}} Sample 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
// OFFSET-NEXT: CStyleCastExpr {{.*}} 'element_type' <Dependent>
@@ -190,14 +228,14 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} Sample 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>, float)'
+// OFFSET: CXXMethodDecl {{.*}} Sample 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]], float)'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} Clamp 'float'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
@@ -215,14 +253,14 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Clamp' 'float'
// OFFSET-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} SampleBias 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, float)'
+// CHECK: CXXMethodDecl {{.*}} SampleBias 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]], float)'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// CHECK-NEXT: ParmVarDecl {{.*}} Bias 'float'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
@@ -238,15 +276,15 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Bias' 'float'
// CHECK-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} SampleBias 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)'
+// OFFSET: CXXMethodDecl {{.*}} SampleBias 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} Bias 'float'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
// OFFSET-NEXT: CStyleCastExpr {{.*}} 'element_type' <Dependent>
@@ -263,16 +301,16 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Bias' 'float'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} SampleBias 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>, float)'
+// OFFSET: CXXMethodDecl {{.*}} SampleBias 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]], float)'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} Bias 'float'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} Clamp 'float'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
@@ -290,17 +328,17 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Bias' 'float'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Clamp' 'float'
// OFFSET-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} SampleGrad 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<float, [[DIM]]>, vector<float, [[DIM]]>)'
+// CHECK: CXXMethodDecl {{.*}} SampleGrad 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]], [[GRADIENT_TYPE]], [[GRADIENT_TYPE]])'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// CHECK-NEXT: ParmVarDecl {{.*}} DDX 'vector<float, [[DIM]]>'
-// CHECK-NEXT: ParmVarDecl {{.*}} DDY 'vector<float, [[DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// CHECK-NEXT: ParmVarDecl {{.*}} DDX '[[GRADIENT_TYPE]]'
+// CHECK-NEXT: ParmVarDecl {{.*}} DDY '[[GRADIENT_TYPE]]'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
// CHECK-NEXT: CStyleCastExpr {{.*}} 'element_type' <Dependent>
@@ -315,17 +353,17 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDX' 'vector<float, [[DIM]]>'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDY' 'vector<float, [[DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDX' '[[GRADIENT_TYPE]]'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDY' '[[GRADIENT_TYPE]]'
// CHECK-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} SampleGrad 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<float, [[DIM]]>, vector<float, [[DIM]]>, vector<int, [[DIM]]>)'
+// OFFSET: CXXMethodDecl {{.*}} SampleGrad 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]], [[GRADIENT_TYPE]], [[GRADIENT_TYPE]], [[OFFSET_TYPE]])'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} DDX 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} DDY 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} DDX '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} DDY '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
// OFFSET-NEXT: CStyleCastExpr {{.*}} 'element_type' <Dependent>
@@ -342,18 +380,18 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDX' 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDY' 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDX' '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDY' '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} SampleGrad 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<float, [[DIM]]>, vector<float, [[DIM]]>, vector<int, [[DIM]]>, float)'
+// OFFSET: CXXMethodDecl {{.*}} SampleGrad 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]], [[GRADIENT_TYPE]], [[GRADIENT_TYPE]], [[OFFSET_TYPE]], float)'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} DDX 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} DDY 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} DDX '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} DDY '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} Clamp 'float'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
@@ -371,16 +409,16 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDX' 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDY' 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDX' '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDY' '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Clamp' 'float'
// OFFSET-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} SampleLevel 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, float)'
+// CHECK: CXXMethodDecl {{.*}} SampleLevel 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]], float)'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// CHECK-NEXT: ParmVarDecl {{.*}} LOD 'float'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
@@ -396,15 +434,15 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'LOD' 'float'
// CHECK-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} SampleLevel 'element_type (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)'
+// OFFSET: CXXMethodDecl {{.*}} SampleLevel 'element_type (hlsl::SamplerState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} LOD 'float'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
// OFFSET-NEXT: CStyleCastExpr {{.*}} 'element_type' <Dependent>
@@ -421,14 +459,14 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'LOD' 'float'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: AlwaysInlineAttr
-// SAMPLECMP: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)'
+// SAMPLECMP: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)'
// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// SAMPLECMP-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// SAMPLECMP-NEXT: CompoundStmt
// SAMPLECMP-NEXT: ReturnStmt
@@ -444,15 +482,15 @@
// SAMPLECMP-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// SAMPLECMP-SAME: ' lvalue .__handle
// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// SAMPLECMP-NEXT: AlwaysInlineAttr
-// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)'
+// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: CompoundStmt
// SAMPLECMP-OFFSET-NEXT: ReturnStmt
// SAMPLECMP-OFFSET-NEXT: CStyleCastExpr {{.*}} 'float' <Dependent>
@@ -469,16 +507,16 @@
// SAMPLECMP-OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// SAMPLECMP-OFFSET-SAME: ' lvalue .__handle
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: AlwaysInlineAttr
-// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>, float)'
+// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]], float)'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Clamp 'float'
// SAMPLECMP-OFFSET-NEXT: CompoundStmt
// SAMPLECMP-OFFSET-NEXT: ReturnStmt
@@ -496,15 +534,15 @@
// SAMPLECMP-OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// SAMPLECMP-OFFSET-SAME: ' lvalue .__handle
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Clamp' 'float'
// SAMPLECMP-OFFSET-NEXT: AlwaysInlineAttr
-// SAMPLECMP: CXXMethodDecl {{.*}} SampleCmpLevelZero 'float (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)'
+// SAMPLECMP: CXXMethodDecl {{.*}} SampleCmpLevelZero 'float (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)'
// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// SAMPLECMP-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// SAMPLECMP-NEXT: CompoundStmt
// SAMPLECMP-NEXT: ReturnStmt
@@ -520,15 +558,15 @@
// SAMPLECMP-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// SAMPLECMP-SAME: ' lvalue .__handle
// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// SAMPLECMP-NEXT: AlwaysInlineAttr
-// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmpLevelZero 'float (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)'
+// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmpLevelZero 'float (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: CompoundStmt
// SAMPLECMP-OFFSET-NEXT: ReturnStmt
// SAMPLECMP-OFFSET-NEXT: CStyleCastExpr {{.*}} 'float' <Dependent>
@@ -545,14 +583,14 @@
// SAMPLECMP-OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// SAMPLECMP-OFFSET-SAME: ' lvalue .__handle
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} CalculateLevelOfDetail 'float (hlsl::SamplerState, vector<float, [[DIM]]>)'
+// CHECK: CXXMethodDecl {{.*}} CalculateLevelOfDetail 'float (hlsl::SamplerState, [[GRADIENT_TYPE]])'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[GRADIENT_TYPE]]'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
// CHECK-NEXT: CStyleCastExpr {{.*}} 'float' <Dependent>
@@ -567,12 +605,12 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[GRADIENT_TYPE]]'
// CHECK-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} CalculateLevelOfDetailUnclamped 'float (hlsl::SamplerState, vector<float, [[DIM]]>)'
+// CHECK: CXXMethodDecl {{.*}} CalculateLevelOfDetailUnclamped 'float (hlsl::SamplerState, [[GRADIENT_TYPE]])'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[GRADIENT_TYPE]]'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
// CHECK-NEXT: CStyleCastExpr {{.*}} 'float' <Dependent>
@@ -587,7 +625,7 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[GRADIENT_TYPE]]'
// CHECK-NEXT: AlwaysInlineAttr
// GETDIM-XY: CXXMethodDecl {{.*}} GetDimensions 'void (out unsigned int, out unsigned int)'
@@ -676,9 +714,9 @@
// GETDIM-XY-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'numberOfLevels' 'float &__restrict'
// GETDIM-XY-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} Gather 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)' inline
+// GATHER: CXXMethodDecl {{.*}} Gather 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]])' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
// GATHER-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -688,14 +726,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} Gather 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} Gather 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -705,14 +743,14 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherRed 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherRed 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]])' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
// GATHER-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -722,14 +760,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherRed 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherRed 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -739,14 +777,14 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherGreen 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherGreen 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]])' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
// GATHER-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -756,14 +794,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 1
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherGreen 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherGreen 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -773,14 +811,14 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 1
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherBlue 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherBlue 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]])' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
// GATHER-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -790,14 +828,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 2
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherBlue 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherBlue 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -807,14 +845,14 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 2
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherAlpha 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherAlpha 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]])' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
// GATHER-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -824,14 +862,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 3
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherAlpha 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherAlpha 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -841,14 +879,14 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 3
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherCmp 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherCmp 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
@@ -859,16 +897,16 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherCmp 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherCmp 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<float, 4>' <Dependent>
@@ -878,15 +916,15 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherCmpRed 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherCmpRed 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
@@ -897,14 +935,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherCmpGreen 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherCmpGreen 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
@@ -915,14 +953,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 1
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherCmpBlue 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherCmpBlue 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
@@ -933,16 +971,16 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 2
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherCmpAlpha 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherCmpAlpha 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<float, 4>' <Dependent>
@@ -952,10 +990,10 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 3
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
TEXTURE<float> t;
diff --git a/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl b/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl
index 98d58726ec7fc..e359d00c05d29 100644
--- a/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl
@@ -1,19 +1,26 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture1D -o \
+// RUN: - %s | FileCheck %s -DTEXTURE=Texture1D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=Texture1DArray -o - %s | FileCheck %s \
+// RUN: -DTEXTURE=Texture1DArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2D -o \
-// RUN: - %s \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D
+// RUN: - %s | FileCheck %s -DTEXTURE=Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=TextureCube \
-// RUN: -o - %s \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube
+// RUN: -o - %s | FileCheck %s -DTEXTURE=TextureCube
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=TextureCubeArray -o - %s \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray
+// RUN: -DTEXTURE=TextureCubeArray -o - %s | FileCheck %s \
+// RUN: -DTEXTURE=TextureCubeArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=Texture2DArray -o - %s \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray
+// RUN: -DTEXTURE=Texture2DArray -o - %s | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray
+
+// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture3D \
// RUN: -o - %s \
diff --git a/clang/test/AST/HLSL/Textures-vector-AST.hlsl b/clang/test/AST/HLSL/Textures-vector-AST.hlsl
index 5086310bb7470..41f707ec8c182 100644
--- a/clang/test/AST/HLSL/Textures-vector-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-vector-AST.hlsl
@@ -1,43 +1,81 @@
+// Texture1D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
+// RUN: -DHAS_SAMPLE_CMP -DTEXTURE=Texture1D -DCOORD_TYPE=float \
+// RUN: -DGRAD_TYPE=float -DLOD_LOCATION=loc -DOFFSET_ARG="1" -o - %s | \
+// RUN: FileCheck %s \
+// RUN: --check-prefixes=CHECK,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
+// RUN: -DTEXTURE=Texture1D -DDIM_NAME=1D -DDIM=1 -DCOORD_DIM=1 -DLOAD_DIM=2 \
+// RUN: -DINDEX_TYPE="unsigned int" -DIS_ARRAY="" -DLOCATION_TYPE=float \
+// RUN: -DGRADIENT_TYPE=float -DOFFSET_TYPE=int
+
+// Texture1DArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
+// RUN: -DHAS_SAMPLE_CMP -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 \
+// RUN: -DGRAD_TYPE=float -DLOD_LOCATION=loc.x -DOFFSET_ARG="1" -o - %s | \
+// RUN: FileCheck %s \
+// RUN: --check-prefixes=CHECK,ARRAY,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
+// RUN: -DTEXTURE=Texture1DArray -DDIM_NAME=1D -DDIM=1 -DCOORD_DIM=2 \
+// RUN: -DLOAD_DIM=3 -DINDEX_TYPE="vector<unsigned int, 2>" \
+// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 2>" \
+// RUN: -DGRADIENT_TYPE=float -DOFFSET_TYPE=int
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
// RUN: -DHAS_GETDIM_XY -DHAS_SAMPLE_CMP -DHAS_GATHER -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float2 -DLOD_LOCATION=loc \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -o - %s \
-// RUN: | FileCheck %s \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,TEXEL,OFFSET,GETDIM-XY,SAMPLECMP,SAMPLECMP-OFFSET,GATHER,GATHER-OFFSET \
// RUN: -DTEXTURE=Texture2D -DDIM_NAME=2D -DDIM=2 -DCOORD_DIM=2 -DLOAD_DIM=3 \
-// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" -DIS_ARRAY=""
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
-// RUN: -disable-llvm-passes -finclude-default-header -DHAS_SAMPLE_CMP \
-// RUN: -DHAS_GATHER -DTEXTURE=TextureCube -DCOORD_TYPE=float3 \
-// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc -o - %s \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SAMPLECMP,GATHER \
-// RUN: -DTEXTURE=TextureCube -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=3 \
-// RUN: -DIS_ARRAY=""
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
-// RUN: -disable-llvm-passes -finclude-default-header -DHAS_SAMPLE_CMP \
-// RUN: -DHAS_GATHER -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 \
-// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc.xyz -o - %s \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SAMPLECMP,GATHER \
-// RUN: -DTEXTURE=TextureCubeArray -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=4 \
-// RUN: -DIS_ARRAY=" [[hlsl::is_array]]"
+// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" -DIS_ARRAY="" \
+// RUN: -DLOCATION_TYPE="vector<float, 2>" \
+// RUN: -DGRADIENT_TYPE="vector<float, 2>" -DOFFSET_TYPE="vector<int, 2>"
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
// RUN: -DHAS_GETDIM_XY -DHAS_SAMPLE_CMP -DHAS_GATHER \
// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -DGRAD_TYPE=float2 \
-// RUN: -DLOD_LOCATION=loc.xy -DOFFSET_ARG="int2(1, 2)" -o - %s \
-// RUN: | FileCheck %s \
+// RUN: -DLOD_LOCATION=loc.xy -DOFFSET_ARG="int2(1, 2)" -o - %s | FileCheck \
+// RUN: %s \
// RUN: --check-prefixes=CHECK,ARRAY,TEXEL,OFFSET,GETDIM-XY,SAMPLECMP,SAMPLECMP-OFFSET,GATHER,GATHER-OFFSET \
// RUN: -DTEXTURE=Texture2DArray -DDIM_NAME=2D -DDIM=2 -DCOORD_DIM=3 \
// RUN: -DLOAD_DIM=4 -DINDEX_TYPE="vector<unsigned int, 3>" \
-// RUN: -DIS_ARRAY=" [[hlsl::is_array]]"
+// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 3>" \
+// RUN: -DGRADIENT_TYPE="vector<float, 2>" -DOFFSET_TYPE="vector<int, 2>"
+
+// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -DGRAD_TYPE=float3 \
-// RUN: -DLOD_LOCATION=loc -DOFFSET_ARG="int3(1, 2, 3)" -o - %s \
-// RUN: | FileCheck %s --check-prefixes=CHECK,TEXEL,OFFSET \
-// RUN: -DTEXTURE=Texture3D -DDIM_NAME=3D -DDIM=3 -DCOORD_DIM=3 -DLOAD_DIM=4 \
-// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" -DIS_ARRAY=""
+// RUN: -DLOD_LOCATION=loc -DOFFSET_ARG="int3(1, 2, 3)" -o - %s | FileCheck \
+// RUN: %s --check-prefixes=CHECK,TEXEL,OFFSET -DTEXTURE=Texture3D \
+// RUN: -DDIM_NAME=3D -DDIM=3 -DCOORD_DIM=3 -DLOAD_DIM=4 \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" -DIS_ARRAY="" \
+// RUN: -DLOCATION_TYPE="vector<float, 3>" \
+// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
+
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_SAMPLE_CMP \
+// RUN: -DHAS_GATHER -DTEXTURE=TextureCube -DCOORD_TYPE=float3 \
+// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc -o - %s | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SAMPLECMP,GATHER -DTEXTURE=TextureCube \
+// RUN: -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=3 -DIS_ARRAY="" \
+// RUN: -DLOCATION_TYPE="vector<float, 3>" \
+// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DHAS_SAMPLE_CMP \
+// RUN: -DHAS_GATHER -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 \
+// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc.xyz -o - %s | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SAMPLECMP,GATHER -DTEXTURE=TextureCubeArray \
+// RUN: -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=4 \
+// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 4>" \
+// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -117,9 +155,9 @@
// TEXEL-NEXT: DeclRefExpr {{.*}} 'vector<int, [[LOAD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<int, [[LOAD_DIM]]>'
// TEXEL-NEXT: AlwaysInlineAttr
-// TEXEL: CXXMethodDecl {{.*}} Load 'vector<element_type, element_count> (vector<int, [[LOAD_DIM]]>, vector<int, [[DIM]]>)'
+// TEXEL: CXXMethodDecl {{.*}} Load 'vector<element_type, element_count> (vector<int, [[LOAD_DIM]]>, [[OFFSET_TYPE]])'
// TEXEL-NEXT: ParmVarDecl {{.*}} Location 'vector<int, [[LOAD_DIM]]>'
-// TEXEL-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// TEXEL-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// TEXEL-NEXT: CompoundStmt
// TEXEL-NEXT: ReturnStmt
// TEXEL-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, element_count>' <Dependent>
@@ -133,7 +171,7 @@
// TEXEL-SAME: ' lvalue .__handle
// TEXEL-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<vector<element_type, element_count>>' lvalue implicit this
// TEXEL-NEXT: DeclRefExpr {{.*}} 'vector<int, [[LOAD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<int, [[LOAD_DIM]]>'
-// TEXEL-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// TEXEL-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// TEXEL-NEXT: AlwaysInlineAttr
// TEXEL: CXXMethodDecl {{.*}} operator[] 'vector<element_type, element_count> const hlsl_device &([[INDEX_TYPE]]) const' inline
@@ -154,9 +192,9 @@
// TEXEL-NEXT: DeclRefExpr {{.*}} '[[INDEX_TYPE]]' lvalue ParmVar {{.*}} 'Index' '[[INDEX_TYPE]]'
// TEXEL-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} Sample 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)'
+// CHECK: CXXMethodDecl {{.*}} Sample 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]])'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
// CHECK-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, element_count>' <Dependent>
@@ -171,13 +209,13 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// CHECK-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} Sample 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)'
+// OFFSET: CXXMethodDecl {{.*}} Sample 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
// OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, element_count>' <Dependent>
@@ -194,14 +232,14 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} Sample 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>, float)'
+// OFFSET: CXXMethodDecl {{.*}} Sample 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]], float)'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} Clamp 'float'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
@@ -219,14 +257,14 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Clamp' 'float'
// OFFSET-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} SampleBias 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, float)'
+// CHECK: CXXMethodDecl {{.*}} SampleBias 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]], float)'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// CHECK-NEXT: ParmVarDecl {{.*}} Bias 'float'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
@@ -242,15 +280,15 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Bias' 'float'
// CHECK-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} SampleBias 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)'
+// OFFSET: CXXMethodDecl {{.*}} SampleBias 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} Bias 'float'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
// OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, element_count>' <Dependent>
@@ -267,16 +305,16 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Bias' 'float'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} SampleBias 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>, float)'
+// OFFSET: CXXMethodDecl {{.*}} SampleBias 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]], float)'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} Bias 'float'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} Clamp 'float'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
@@ -294,17 +332,17 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Bias' 'float'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Clamp' 'float'
// OFFSET-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} SampleGrad 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<float, [[DIM]]>, vector<float, [[DIM]]>)'
+// CHECK: CXXMethodDecl {{.*}} SampleGrad 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]], [[GRADIENT_TYPE]], [[GRADIENT_TYPE]])'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// CHECK-NEXT: ParmVarDecl {{.*}} DDX 'vector<float, [[DIM]]>'
-// CHECK-NEXT: ParmVarDecl {{.*}} DDY 'vector<float, [[DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// CHECK-NEXT: ParmVarDecl {{.*}} DDX '[[GRADIENT_TYPE]]'
+// CHECK-NEXT: ParmVarDecl {{.*}} DDY '[[GRADIENT_TYPE]]'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
// CHECK-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, element_count>' <Dependent>
@@ -319,17 +357,17 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDX' 'vector<float, [[DIM]]>'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDY' 'vector<float, [[DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDX' '[[GRADIENT_TYPE]]'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDY' '[[GRADIENT_TYPE]]'
// CHECK-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} SampleGrad 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<float, [[DIM]]>, vector<float, [[DIM]]>, vector<int, [[DIM]]>)'
+// OFFSET: CXXMethodDecl {{.*}} SampleGrad 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]], [[GRADIENT_TYPE]], [[GRADIENT_TYPE]], [[OFFSET_TYPE]])'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} DDX 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} DDY 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} DDX '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} DDY '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
// OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, element_count>' <Dependent>
@@ -346,18 +384,18 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDX' 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDY' 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDX' '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDY' '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} SampleGrad 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<float, [[DIM]]>, vector<float, [[DIM]]>, vector<int, [[DIM]]>, float)'
+// OFFSET: CXXMethodDecl {{.*}} SampleGrad 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]], [[GRADIENT_TYPE]], [[GRADIENT_TYPE]], [[OFFSET_TYPE]], float)'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} DDX 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} DDY 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} DDX '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} DDY '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} Clamp 'float'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
@@ -375,16 +413,16 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDX' 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'DDY' 'vector<float, [[DIM]]>'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDX' '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'DDY' '[[GRADIENT_TYPE]]'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Clamp' 'float'
// OFFSET-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} SampleLevel 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, float)'
+// CHECK: CXXMethodDecl {{.*}} SampleLevel 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]], float)'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// CHECK-NEXT: ParmVarDecl {{.*}} LOD 'float'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
@@ -400,15 +438,15 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// CHECK-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'LOD' 'float'
// CHECK-NEXT: AlwaysInlineAttr
-// OFFSET: CXXMethodDecl {{.*}} SampleLevel 'vector<element_type, element_count> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)'
+// OFFSET: CXXMethodDecl {{.*}} SampleLevel 'vector<element_type, element_count> (hlsl::SamplerState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])'
// OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// OFFSET-NEXT: ParmVarDecl {{.*}} LOD 'float'
-// OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// OFFSET-NEXT: CompoundStmt
// OFFSET-NEXT: ReturnStmt
// OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, element_count>' <Dependent>
@@ -425,14 +463,14 @@
// OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// OFFSET-SAME: ' lvalue .__handle
// OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'LOD' 'float'
-// OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// OFFSET-NEXT: AlwaysInlineAttr
-// SAMPLECMP: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)'
+// SAMPLECMP: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)'
// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// SAMPLECMP-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// SAMPLECMP-NEXT: CompoundStmt
// SAMPLECMP-NEXT: ReturnStmt
@@ -448,15 +486,15 @@
// SAMPLECMP-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// SAMPLECMP-SAME: ' lvalue .__handle
// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// SAMPLECMP-NEXT: AlwaysInlineAttr
-// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)'
+// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: CompoundStmt
// SAMPLECMP-OFFSET-NEXT: ReturnStmt
// SAMPLECMP-OFFSET-NEXT: CStyleCastExpr {{.*}} 'float' <Dependent>
@@ -473,16 +511,16 @@
// SAMPLECMP-OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// SAMPLECMP-OFFSET-SAME: ' lvalue .__handle
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: AlwaysInlineAttr
-// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>, float)'
+// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmp 'float (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]], float)'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Clamp 'float'
// SAMPLECMP-OFFSET-NEXT: CompoundStmt
// SAMPLECMP-OFFSET-NEXT: ReturnStmt
@@ -500,15 +538,15 @@
// SAMPLECMP-OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// SAMPLECMP-OFFSET-SAME: ' lvalue .__handle
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'Clamp' 'float'
// SAMPLECMP-OFFSET-NEXT: AlwaysInlineAttr
-// SAMPLECMP: CXXMethodDecl {{.*}} SampleCmpLevelZero 'float (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)'
+// SAMPLECMP: CXXMethodDecl {{.*}} SampleCmpLevelZero 'float (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)'
// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// SAMPLECMP-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// SAMPLECMP-NEXT: CompoundStmt
// SAMPLECMP-NEXT: ReturnStmt
@@ -524,15 +562,15 @@
// SAMPLECMP-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// SAMPLECMP-SAME: ' lvalue .__handle
// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// SAMPLECMP-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// SAMPLECMP-NEXT: AlwaysInlineAttr
-// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmpLevelZero 'float (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)'
+// SAMPLECMP-OFFSET: CXXMethodDecl {{.*}} SampleCmpLevelZero 'float (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
-// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: CompoundStmt
// SAMPLECMP-OFFSET-NEXT: ReturnStmt
// SAMPLECMP-OFFSET-NEXT: CStyleCastExpr {{.*}} 'float' <Dependent>
@@ -549,14 +587,14 @@
// SAMPLECMP-OFFSET-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// SAMPLECMP-OFFSET-SAME: ' lvalue .__handle
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
-// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// SAMPLECMP-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// SAMPLECMP-OFFSET-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} CalculateLevelOfDetail 'float (hlsl::SamplerState, vector<float, [[DIM]]>)'
+// CHECK: CXXMethodDecl {{.*}} CalculateLevelOfDetail 'float (hlsl::SamplerState, [[GRADIENT_TYPE]])'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[GRADIENT_TYPE]]'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
// CHECK-NEXT: CStyleCastExpr {{.*}} 'float' <Dependent>
@@ -571,12 +609,12 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[GRADIENT_TYPE]]'
// CHECK-NEXT: AlwaysInlineAttr
-// CHECK: CXXMethodDecl {{.*}} CalculateLevelOfDetailUnclamped 'float (hlsl::SamplerState, vector<float, [[DIM]]>)'
+// CHECK: CXXMethodDecl {{.*}} CalculateLevelOfDetailUnclamped 'float (hlsl::SamplerState, [[GRADIENT_TYPE]])'
// CHECK-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// CHECK-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[DIM]]>'
+// CHECK-NEXT: ParmVarDecl {{.*}} Location '[[GRADIENT_TYPE]]'
// CHECK-NEXT: CompoundStmt
// CHECK-NEXT: ReturnStmt
// CHECK-NEXT: CStyleCastExpr {{.*}} 'float' <Dependent>
@@ -591,7 +629,7 @@
// CHECK-SAME{LITERAL}: [[hlsl::resource_class("Sampler")]]
// CHECK-SAME: ' lvalue .__handle
// CHECK-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// CHECK-NEXT: DeclRefExpr {{.*}} 'vector<float, [[DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[DIM]]>'
+// CHECK-NEXT: DeclRefExpr {{.*}} '[[GRADIENT_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[GRADIENT_TYPE]]'
// CHECK-NEXT: AlwaysInlineAttr
// GETDIM-XY: CXXMethodDecl {{.*}} GetDimensions 'void (out unsigned int, out unsigned int)'
@@ -676,9 +714,9 @@
// GETDIM-XY-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'height' 'float &__restrict'
// GETDIM-XY-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'numberOfLevels' 'float &__restrict'
-// GATHER: CXXMethodDecl {{.*}} Gather 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)' inline
+// GATHER: CXXMethodDecl {{.*}} Gather 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]])' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
// GATHER-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -688,14 +726,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} Gather 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} Gather 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -705,14 +743,14 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherRed 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherRed 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]])' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
// GATHER-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -722,14 +760,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherRed 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherRed 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -739,14 +777,14 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherGreen 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherGreen 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]])' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
// GATHER-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -756,14 +794,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 1
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherGreen 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherGreen 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -773,14 +811,14 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 1
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherBlue 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherBlue 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]])' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
// GATHER-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -790,14 +828,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 2
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherBlue 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherBlue 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -807,14 +845,14 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 2
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherAlpha 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherAlpha 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]])' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
// GATHER-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -824,14 +862,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 3
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherAlpha 'vector<element_type, 4> (hlsl::SamplerState, vector<float, [[COORD_DIM]]>, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherAlpha 'vector<element_type, 4> (hlsl::SamplerState, [[LOCATION_TYPE]], [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<element_type, 4>' <Dependent>
@@ -841,14 +879,14 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 3
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherCmp 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherCmp 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
@@ -859,16 +897,16 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherCmp 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherCmp 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<float, 4>' <Dependent>
@@ -878,15 +916,15 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherCmpRed 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherCmpRed 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
@@ -897,14 +935,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 0
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherCmpGreen 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherCmpGreen 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
@@ -915,14 +953,14 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 1
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER: CXXMethodDecl {{.*}} GatherCmpBlue 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float)' inline
+// GATHER: CXXMethodDecl {{.*}} GatherCmpBlue 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float)' inline
// GATHER-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
// GATHER-NEXT: CompoundStmt
// GATHER-NEXT: ReturnStmt
@@ -933,16 +971,16 @@
// GATHER-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-NEXT: IntegerLiteral {{.*}} 'unsigned int' 2
// GATHER-NEXT: AlwaysInlineAttr
-// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherCmpAlpha 'vector<float, 4> (hlsl::SamplerComparisonState, vector<float, [[COORD_DIM]]>, float, vector<int, [[DIM]]>)' inline
+// GATHER-OFFSET: CXXMethodDecl {{.*}} GatherCmpAlpha 'vector<float, 4> (hlsl::SamplerComparisonState, [[LOCATION_TYPE]], float, [[OFFSET_TYPE]])' inline
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Sampler 'hlsl::SamplerComparisonState'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Location '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} CompareValue 'float'
-// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: ParmVarDecl {{.*}} Offset '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: CompoundStmt
// GATHER-OFFSET-NEXT: ReturnStmt
// GATHER-OFFSET-NEXT: CStyleCastExpr {{.*}} 'vector<float, 4>' <Dependent>
@@ -952,10 +990,10 @@
// GATHER-OFFSET-NEXT: CXXThisExpr {{.*}} 'hlsl::[[TEXTURE]]<{{.*}}>' lvalue implicit this
// GATHER-OFFSET-NEXT: MemberExpr {{.*}} lvalue .__handle
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'hlsl::SamplerComparisonState' lvalue ParmVar {{.*}} 'Sampler' 'hlsl::SamplerComparisonState'
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<float, [[COORD_DIM]]>' lvalue ParmVar {{.*}} 'Location' 'vector<float, [[COORD_DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[LOCATION_TYPE]]' lvalue ParmVar {{.*}} 'Location' '[[LOCATION_TYPE]]'
// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'float' lvalue ParmVar {{.*}} 'CompareValue' 'float'
// GATHER-OFFSET-NEXT: IntegerLiteral {{.*}} 'unsigned int' 3
-// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} 'vector<int, [[DIM]]>' lvalue ParmVar {{.*}} 'Offset' 'vector<int, [[DIM]]>'
+// GATHER-OFFSET-NEXT: DeclRefExpr {{.*}} '[[OFFSET_TYPE]]' lvalue ParmVar {{.*}} 'Offset' '[[OFFSET_TYPE]]'
// GATHER-OFFSET-NEXT: AlwaysInlineAttr
TEXTURE<float4> t;
diff --git a/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl b/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
index a7815f2f130f6..69a1363f56dc4 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
@@ -1,70 +1,144 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
-// RUN: -DTEXTURE=Texture2D %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D --check-prefixes=CHECK,DXIL \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float \
+// RUN: -DTEXTURE=Texture1D %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1D --check-prefixes=CHECK,DXIL -DDXIL_TY=1 -DRW=0 \
+// RUN: -DDIM=1 -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=Texture3D %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D --check-prefixes=CHECK,DXIL \
-// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float \
+// RUN: -DTEXTURE=Texture1DArray %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1DArray --check-prefixes=CHECK,DXIL -DDXIL_TY=6 \
+// RUN: -DRW=0 -DDIM=1 -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
+// RUN: -DTEXTURE=Texture2D %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D --check-prefixes=CHECK,DXIL -DDXIL_TY=2 -DRW=0 \
+// RUN: -DDIM=2 -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=TextureCube %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube --check-prefixes=CHECK,DXIL \
-// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3
+// RUN: -DTEXTURE=TextureCube %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=TextureCube --check-prefixes=CHECK,DXIL -DDXIL_TY=5 -DRW=0 \
+// RUN: -DDIM=3 -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=TextureCubeArray %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray \
-// RUN: --check-prefixes=CHECK,DXIL -DDXIL_TY=9 -DRW=0 -DDIM=3
+// RUN: -DTEXTURE=TextureCubeArray %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=TextureCubeArray --check-prefixes=CHECK,DXIL -DDXIL_TY=9 \
+// RUN: -DRW=0 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
-// RUN: -DTEXTURE=Texture2D %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D --check-prefixes=CHECK,SPIRV \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float \
+// RUN: -DTEXTURE=Texture1D %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1D --check-prefixes=CHECK,SPIRV -DARRAYED=0 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=Texture3D %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D --check-prefixes=CHECK,SPIRV \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float \
+// RUN: -DTEXTURE=Texture1DArray %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1DArray --check-prefixes=CHECK,SPIRV -DARRAYED=1 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
+// RUN: -DTEXTURE=Texture2D %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D --check-prefixes=CHECK,SPIRV -DARRAYED=0 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=TextureCube %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube --check-prefixes=CHECK,SPIRV \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DTEXTURE=TextureCube %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=TextureCube --check-prefixes=CHECK,SPIRV -DARRAYED=0 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=TextureCubeArray %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray \
-// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 \
-// RUN: -DSPV_DIM=3 -DDIM=3
+// RUN: -DTEXTURE=TextureCubeArray %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=TextureCubeArray --check-prefixes=CHECK,SPIRV -DARRAYED=1 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
-// RUN: -DTEXTURE=Texture2DArray %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray --check-prefixes=CHECK,DXIL \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2
+// RUN: -DTEXTURE=Texture2DArray %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray --check-prefixes=CHECK,DXIL -DDXIL_TY=7 \
+// RUN: -DRW=0 -DDIM=2 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
-// RUN: -DTEXTURE=Texture2DArray %s \
+// RUN: -DTEXTURE=Texture2DArray %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray --check-prefixes=CHECK,SPIRV -DARRAYED=1 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
+// RUN: -DTEXTURE=Texture3D %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D --check-prefixes=CHECK,DXIL \
+// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 \
+// RUN: -DGRAD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>"
+
+// Texture3D
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
+// RUN: -DTEXTURE=Texture3D %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray --check-prefixes=CHECK,SPIRV \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2
+// RUN: | FileCheck %s -DTEXTURE=Texture3D --check-prefixes=CHECK,SPIRV \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
+// RUN: -DGRAD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>"
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
// LOD_TYPE CalculateLevelOfDetail location type
// TEXTURE resource type name
+// GRAD_CXX ddx/ddy type in the C++ signature
+// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// DIM number of resource dimensions (offset, ddx/ddy, LOD
@@ -77,41 +151,41 @@
TEXTURE t;
SamplerState s;
-// CHECK: define hidden {{.*}} float @test_lod(float vector[[[DIM]]])(<[[DIM]] x float> {{.*}} %[[LOC:.*]])
-// CHECK: %[[CALL:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::CalculateLevelOfDetail(hlsl::SamplerState, float vector[[[DIM]]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[DIM]] x float> {{.*}} %{{.*}})
+// CHECK: define hidden {{.*}} float @test_lod([[GRAD_CXX]])([[GRAD_LLVM]] {{.*}} %[[LOC:.*]])
+// CHECK: %[[CALL:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::CalculateLevelOfDetail(hlsl::SamplerState, [[GRAD_CXX]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[GRAD_LLVM]] {{.*}} %{{.*}})
// CHECK: ret float %[[CALL]]
float test_lod(LOD_TYPE loc : LOC) : SV_Target {
return t.CalculateLevelOfDetail(s, loc);
}
-// CHECK: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::CalculateLevelOfDetail(hlsl::SamplerState, float vector[[[DIM]]])(ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], <[[DIM]] x float> {{.*}} %[[COORD:[^)]+]])
+// CHECK: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::CalculateLevelOfDetail(hlsl::SamplerState, [[GRAD_CXX]])(ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], [[GRAD_LLVM]] {{.*}} %[[COORD:[^)]+]])
// CHECK: %[[THIS_VAL:.*]] = load ptr, ptr %[[THIS]]
// CHECK: %[[HANDLE_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL]], i32 0, i32 0
// CHECK: %[[HANDLE:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP]]
// CHECK: %[[SAMPLER_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %[[SAMPLER]], i32 0, i32 0
// CHECK: %[[SAMPLER_H:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP]]
-// CHECK: %[[COORD_VAL:.*]] = load <[[DIM]] x float>, ptr %[[COORD]]
-// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.calculate.lod.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], target("dx.Sampler", 0) %[[SAMPLER_H]], <[[DIM]] x float> %[[COORD_VAL]]) [ "convergencectrl"(token %0) ]
-// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.calculate.lod.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE]], target("spirv.Sampler") %[[SAMPLER_H]], <[[DIM]] x float> %[[COORD_VAL]]) [ "convergencectrl"(token %0) ]
+// CHECK: %[[COORD_VAL:.*]] = load [[GRAD_LLVM]], ptr %[[COORD]]
+// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.calculate.lod.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], target("dx.Sampler", 0) %[[SAMPLER_H]], [[GRAD_LLVM]] %[[COORD_VAL]]) [ "convergencectrl"(token %0) ]
+// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.calculate.lod.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE]], target("spirv.Sampler") %[[SAMPLER_H]], [[GRAD_LLVM]] %[[COORD_VAL]]) [ "convergencectrl"(token %0) ]
// CHECK: ret float %[[RES]]
-// CHECK: define hidden {{.*}} float @test_lod_unclamped(float vector[[[DIM]]])(<[[DIM]] x float> noundef nofpclass(nan inf) %[[LOC:.*]])
-// CHECK: %[[LOC_VAL:.*]] = load <[[DIM]] x float>, ptr {{.*}}
-// CHECK: %[[CALL:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::CalculateLevelOfDetailUnclamped(hlsl::SamplerState, float vector[[[DIM]]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[DIM]] x float> {{.*}} %[[LOC_VAL]])
+// CHECK: define hidden {{.*}} float @test_lod_unclamped([[GRAD_CXX]])([[GRAD_LLVM]] noundef nofpclass(nan inf) %[[LOC:.*]])
+// CHECK: %[[LOC_VAL:.*]] = load [[GRAD_LLVM]], ptr {{.*}}
+// CHECK: %[[CALL:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::CalculateLevelOfDetailUnclamped(hlsl::SamplerState, [[GRAD_CXX]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[GRAD_LLVM]] {{.*}} %[[LOC_VAL]])
// CHECK: ret float %[[CALL]]
float test_lod_unclamped(LOD_TYPE loc : LOC) : SV_Target {
return t.CalculateLevelOfDetailUnclamped(s, loc);
}
-// CHECK: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::CalculateLevelOfDetailUnclamped(hlsl::SamplerState, float vector[[[DIM]]])(ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], <[[DIM]] x float> {{.*}} %[[COORD:[^)]+]])
+// CHECK: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::CalculateLevelOfDetailUnclamped(hlsl::SamplerState, [[GRAD_CXX]])(ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], [[GRAD_LLVM]] {{.*}} %[[COORD:[^)]+]])
// CHECK: %[[THIS_VAL:.*]] = load ptr, ptr %[[THIS]]
// CHECK: %[[HANDLE_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL]], i32 0, i32 0
// CHECK: %[[HANDLE:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP]]
// CHECK: %[[SAMPLER_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %[[SAMPLER]], i32 0, i32 0
// CHECK: %[[SAMPLER_H:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP]]
-// CHECK: %[[COORD_VAL:.*]] = load <[[DIM]] x float>, ptr %[[COORD]]
-// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.calculate.lod.unclamped.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], target("dx.Sampler", 0) %[[SAMPLER_H]], <[[DIM]] x float> %[[COORD_VAL]]) [ "convergencectrl"(token %0) ]
-// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.calculate.lod.unclamped.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE]], target("spirv.Sampler") %[[SAMPLER_H]], <[[DIM]] x float> %[[COORD_VAL]]) [ "convergencectrl"(token %0) ]
+// CHECK: %[[COORD_VAL:.*]] = load [[GRAD_LLVM]], ptr %[[COORD]]
+// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.calculate.lod.unclamped.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], target("dx.Sampler", 0) %[[SAMPLER_H]], [[GRAD_LLVM]] %[[COORD_VAL]]) [ "convergencectrl"(token %0) ]
+// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.calculate.lod.unclamped.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE]], target("spirv.Sampler") %[[SAMPLER_H]], [[GRAD_LLVM]] %[[COORD_VAL]]) [ "convergencectrl"(token %0) ]
// CHECK: ret float %[[RES]]
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
index 0c80f408afc3e..929cefa8f018e 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
@@ -1,104 +1,228 @@
+// Texture1D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1D \
+// RUN: -DLOAD_ARG="int2(loc, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,SCALAR-COORD,WIDE-LOC,DXIL,DXIL-SRV \
+// RUN: -DTEXTURE=Texture1D -D#LOAD_DIM=2 -DCOORD_DIM=1 -DDXIL_TY=1 -DRW=0 \
+// RUN: -DENTRY_DIM=1 -DDIM=1 -DCOORD_LLVM=i32 -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0 -DOFFSET_CONST=1 \
+// RUN: -DENTRY_CXX=int -DLOAD_LLVM="<2 x i32>" \
+// RUN: -DLOAD_CXX="int vector[2]"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1D \
+// RUN: -DLOAD_ARG="int2(loc, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,SCALAR-COORD,WIDE-LOC,SPIRV,SPIRV-SRV \
+// RUN: -DTEXTURE=Texture1D -D#LOAD_DIM=2 -DCOORD_DIM=1 -DARRAYED=0 \
+// RUN: -DSAMPLED=1 -DFORMAT1=0 -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 \
+// RUN: -DFORMAT24=0 -DFORMAT25=0 -DSPV_DIM=0 -DENTRY_DIM=1 -DDIM=1 \
+// RUN: -DCOORD_LLVM=i32 -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0 -DOFFSET_CONST=1 -DENTRY_CXX=int \
+// RUN: -DLOAD_LLVM="<2 x i32>" -DLOAD_CXX="int vector[2]"
+
+// Texture1DArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1DArray \
+// RUN: -DLOAD_ARG="int3(loc, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,DXIL,DXIL-SRV \
+// RUN: -DTEXTURE=Texture1DArray -D#LOAD_DIM=3 -DCOORD_DIM=2 \
+// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DDXIL_TY=6 -DRW=0 -DENTRY_DIM=2 \
+// RUN: -DDIM=1 -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0 -DOFFSET_CONST=1 \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<3 x i32>" \
+// RUN: -DLOAD_CXX="int vector[3]"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1DArray \
+// RUN: -DLOAD_ARG="int3(loc, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,SPIRV,SPIRV-SRV \
+// RUN: -DTEXTURE=Texture1DArray -D#LOAD_DIM=3 -DCOORD_DIM=2 \
+// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DARRAYED=1 -DSAMPLED=1 -DFORMAT1=0 \
+// RUN: -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 -DFORMAT24=0 -DFORMAT25=0 \
+// RUN: -DSPV_DIM=0 -DENTRY_DIM=2 -DDIM=1 -DCOORD_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0 \
+// RUN: -DOFFSET_CONST=1 -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_LLVM="<3 x i32>" -DLOAD_CXX="int vector[3]"
// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
// RUN: -DHAS_OFFSET -DOFFSET_ARG="int2(1, 1)" -DTEXTURE=Texture2D \
-// RUN: -DLOAD_ARG="int3(loc, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,WIDE-LOC,DXIL,DXIL-SRV \
+// RUN: -DLOAD_ARG="int3(loc, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,DXIL,DXIL-SRV \
// RUN: -DTEXTURE=Texture2D -D#LOAD_DIM=3 -DCOORD_DIM=2 \
-// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DDXIL_TY=2 -DRW=0 -DENTRY_DIM=2 -DDIM=2
+// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DDXIL_TY=2 -DRW=0 -DENTRY_DIM=2 \
+// RUN: -DDIM=2 -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
+// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_LLVM="<3 x i32>" -DLOAD_CXX="int vector[3]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
// RUN: -DHAS_OFFSET -DOFFSET_ARG="int2(1, 1)" -DTEXTURE=Texture2D \
-// RUN: -DLOAD_ARG="int3(loc, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,WIDE-LOC,SPIRV,SPIRV-SRV \
+// RUN: -DLOAD_ARG="int3(loc, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,SPIRV,SPIRV-SRV \
// RUN: -DTEXTURE=Texture2D -D#LOAD_DIM=3 -DCOORD_DIM=2 \
// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DARRAYED=0 -DSAMPLED=1 -DFORMAT1=0 \
// RUN: -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 -DFORMAT24=0 -DFORMAT25=0 \
-// RUN: -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2
+// RUN: -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2 -DCOORD_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<3 x i32>" \
+// RUN: -DLOAD_CXX="int vector[3]"
// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
// RUN: -DHAS_OFFSET -DOFFSET_ARG="int2(1, 1)" -DTEXTURE=Texture2DArray \
-// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,WIDE-LOC,DXIL,DXIL-SRV \
+// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,DXIL,DXIL-SRV \
// RUN: -DTEXTURE=Texture2DArray -D#LOAD_DIM=4 -DCOORD_DIM=3 \
-// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DDXIL_TY=7 -DRW=0 -DENTRY_DIM=2 \
-// RUN: -DDIM=2
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DHAS_OFFSET -DOFFSET_ARG="int3(1, 1, 1)" -DTEXTURE=Texture3D \
-// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,WIDE-LOC,DXIL,DXIL-SRV \
-// RUN: -DTEXTURE=Texture3D -D#LOAD_DIM=4 -DCOORD_DIM=3 \
-// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DDXIL_TY=4 -DRW=0 \
-// RUN: -DENTRY_DIM=2 -DDIM=3
+// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DDXIL_TY=7 -DRW=0 \
+// RUN: -DENTRY_DIM=2 -DDIM=2 -DCOORD_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<4 x i32>" \
+// RUN: -DLOAD_CXX="int vector[4]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
// RUN: -DHAS_OFFSET -DOFFSET_ARG="int2(1, 1)" -DTEXTURE=Texture2DArray \
-// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,WIDE-LOC,SPIRV,SPIRV-SRV \
+// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,SPIRV,SPIRV-SRV \
// RUN: -DTEXTURE=Texture2DArray -D#LOAD_DIM=4 -DCOORD_DIM=3 \
// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DARRAYED=1 -DSAMPLED=1 \
// RUN: -DFORMAT1=0 -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 -DFORMAT24=0 \
-// RUN: -DFORMAT25=0 -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DHAS_OFFSET -DOFFSET_ARG="int3(1, 1, 1)" -DTEXTURE=Texture3D \
-// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,WIDE-LOC,SPIRV,SPIRV-SRV \
-// RUN: -DTEXTURE=Texture3D -D#LOAD_DIM=4 -DCOORD_DIM=3 \
-// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DARRAYED=0 -DSAMPLED=1 \
-// RUN: -DFORMAT1=0 -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 -DFORMAT24=0 \
-// RUN: -DFORMAT25=0 -DSPV_DIM=2 -DENTRY_DIM=2 -DDIM=3
+// RUN: -DFORMAT25=0 -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2 \
+// RUN: -DCOORD_LLVM="<3 x i32>" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
+// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_LLVM="<4 x i32>" -DLOAD_CXX="int vector[4]"
+// RWTexture1D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
+// RUN: -DTEXTURE=RWTexture1D -DLOAD_ARG="loc" -o - %s | llvm-cxxfilt | \
+// RUN: FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,DXIL,DXIL-UAV \
+// RUN: -DTEXTURE=RWTexture1D -D#LOAD_DIM=1 -DCOORD_DIM=1 -DDXIL_TY=1 -DRW=1 \
+// RUN: -DENTRY_DIM=1 -DDIM=1 -DCOORD_LLVM=i32 -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0 -DOFFSET_CONST=1 \
+// RUN: -DENTRY_CXX=int -DLOAD_LLVM=i32 -DLOAD_CXX=int
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
+// RUN: -DTEXTURE=RWTexture1D -DLOAD_ARG="loc" -o - %s | llvm-cxxfilt | \
+// RUN: FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,SPIRV,SPIRV-UAV \
+// RUN: -DTEXTURE=RWTexture1D -D#LOAD_DIM=1 -DCOORD_DIM=1 -DARRAYED=0 \
+// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
+// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=0 -DENTRY_DIM=1 -DDIM=1 \
+// RUN: -DCOORD_LLVM=i32 -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0 -DOFFSET_CONST=1 -DENTRY_CXX=int -DLOAD_LLVM=i32 \
+// RUN: -DLOAD_CXX=int
// RWTexture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DTEXTURE=RWTexture2D -DLOAD_ARG="loc" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,DXIL,DXIL-UAV \
+// RUN: -DTEXTURE=RWTexture2D -DLOAD_ARG="loc" -o - %s | llvm-cxxfilt | \
+// RUN: FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,DXIL,DXIL-UAV \
// RUN: -DTEXTURE=RWTexture2D -D#LOAD_DIM=2 -DCOORD_DIM=2 -DDXIL_TY=2 -DRW=1 \
-// RUN: -DENTRY_DIM=2 -DDIM=2
+// RUN: -DENTRY_DIM=2 -DDIM=2 -DCOORD_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<2 x i32>" \
+// RUN: -DLOAD_CXX="int vector[2]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DTEXTURE=RWTexture2D -DLOAD_ARG="loc" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,SPIRV,SPIRV-UAV \
+// RUN: -DTEXTURE=RWTexture2D -DLOAD_ARG="loc" -o - %s | llvm-cxxfilt | \
+// RUN: FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,SPIRV,SPIRV-UAV \
// RUN: -DTEXTURE=RWTexture2D -D#LOAD_DIM=2 -DCOORD_DIM=2 -DARRAYED=0 \
// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
-// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2
+// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2 \
+// RUN: -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
+// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_LLVM="<2 x i32>" -DLOAD_CXX="int vector[2]"
+// RWTexture1DArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
+// RUN: -DTEXTURE=RWTexture1DArray -DLOAD_ARG="int2(loc, 0)" -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,UAV,WIDE-LOC,DXIL,DXIL-UAV \
+// RUN: -DTEXTURE=RWTexture1DArray -D#LOAD_DIM=2 -DCOORD_DIM=2 -DDXIL_TY=6 \
+// RUN: -DRW=1 -DENTRY_DIM=1 -DDIM=1 -DCOORD_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0 \
+// RUN: -DOFFSET_CONST=1 -DENTRY_CXX=int -DLOAD_LLVM="<2 x i32>" \
+// RUN: -DLOAD_CXX="int vector[2]"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
+// RUN: -DTEXTURE=RWTexture1DArray -DLOAD_ARG="int2(loc, 0)" -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,UAV,WIDE-LOC,SPIRV,SPIRV-UAV \
+// RUN: -DTEXTURE=RWTexture1DArray -D#LOAD_DIM=2 -DCOORD_DIM=2 -DARRAYED=1 \
+// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
+// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=0 -DENTRY_DIM=1 -DDIM=1 \
+// RUN: -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0 -DOFFSET_CONST=1 -DENTRY_CXX=int \
+// RUN: -DLOAD_LLVM="<2 x i32>" -DLOAD_CXX="int vector[2]"
// RWTexture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DTEXTURE=RWTexture2DArray -DLOAD_ARG="int3(loc, 0)" -o - %s \
+// RUN: -DTEXTURE=RWTexture2DArray -DLOAD_ARG="int3(loc, 0)" -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,UAV,WIDE-LOC,DXIL,DXIL-UAV \
+// RUN: -DTEXTURE=RWTexture2DArray -D#LOAD_DIM=3 -DCOORD_DIM=3 -DDXIL_TY=7 \
+// RUN: -DRW=1 -DENTRY_DIM=2 -DDIM=2 -DCOORD_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<3 x i32>" \
+// RUN: -DLOAD_CXX="int vector[3]"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
+// RUN: -DTEXTURE=RWTexture2DArray -DLOAD_ARG="int3(loc, 0)" -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,UAV,WIDE-LOC,SPIRV,SPIRV-UAV \
+// RUN: -DTEXTURE=RWTexture2DArray -D#LOAD_DIM=3 -DCOORD_DIM=3 -DARRAYED=1 \
+// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
+// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2 \
+// RUN: -DCOORD_LLVM="<3 x i32>" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
+// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_LLVM="<3 x i32>" -DLOAD_CXX="int vector[3]"
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="int3(1, 1, 1)" -DTEXTURE=Texture3D \
+// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,UAV,WIDE-LOC,DXIL,DXIL-UAV \
-// RUN: -DTEXTURE=RWTexture2DArray -D#LOAD_DIM=3 -DCOORD_DIM=3 \
-// RUN: -DDXIL_TY=7 -DRW=1 -DENTRY_DIM=2 -DDIM=2
+// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,WIDE-LOC,DXIL,DXIL-SRV \
+// RUN: -DTEXTURE=Texture3D -D#LOAD_DIM=4 -DCOORD_DIM=3 \
+// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DDXIL_TY=4 -DRW=0 \
+// RUN: -DENTRY_DIM=2 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x i32>" -DENTRY_CXX="int vector[2]" -DLOAD_CXX="int vector[4]" -DLOAD_LLVM="<4 x i32>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="int3(1, 1, 1)" -DTEXTURE=Texture3D \
+// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,WIDE-LOC,SPIRV,SPIRV-SRV \
+// RUN: -DTEXTURE=Texture3D -D#LOAD_DIM=4 -DCOORD_DIM=3 \
+// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DARRAYED=0 -DSAMPLED=1 \
+// RUN: -DFORMAT1=0 -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 -DFORMAT24=0 \
+// RUN: -DFORMAT25=0 -DSPV_DIM=2 -DENTRY_DIM=2 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x i32>" -DENTRY_CXX="int vector[2]" -DLOAD_CXX="int vector[4]" -DLOAD_LLVM="<4 x i32>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// RWTexture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
// RUN: -DTEXTURE=RWTexture3D -DLOAD_ARG="int3(loc, 0)" -o - %s \
// RUN: | llvm-cxxfilt \
// RUN: | FileCheck %s --check-prefixes=CHECK,UAV,WIDE-LOC,DXIL,DXIL-UAV \
// RUN: -DTEXTURE=RWTexture3D -D#LOAD_DIM=3 -DCOORD_DIM=3 -DDXIL_TY=4 -DRW=1 \
-// RUN: -DENTRY_DIM=2 -DDIM=3
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DTEXTURE=RWTexture2DArray -DLOAD_ARG="int3(loc, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,UAV,WIDE-LOC,SPIRV,SPIRV-UAV \
-// RUN: -DTEXTURE=RWTexture2DArray -D#LOAD_DIM=3 -DCOORD_DIM=3 \
-// RUN: -DARRAYED=1 -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 \
-// RUN: -DFORMAT21=21 -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=1 -DENTRY_DIM=2 \
-// RUN: -DDIM=2
+// RUN: -DENTRY_DIM=2 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x i32>" -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DENTRY_CXX="int vector[2]" -DLOAD_CXX="int vector[3]" -DLOAD_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// RWTexture3D
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
// RUN: -DTEXTURE=RWTexture3D -DLOAD_ARG="int3(loc, 0)" -o - %s \
@@ -106,7 +230,8 @@
// RUN: | FileCheck %s --check-prefixes=CHECK,UAV,WIDE-LOC,SPIRV,SPIRV-UAV \
// RUN: -DTEXTURE=RWTexture3D -D#LOAD_DIM=3 -DCOORD_DIM=3 -DARRAYED=0 \
// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
-// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=2 -DENTRY_DIM=2 -DDIM=3
+// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=2 -DENTRY_DIM=2 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x i32>" -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DENTRY_CXX="int vector[2]" -DLOAD_CXX="int vector[3]" -DLOAD_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -119,9 +244,17 @@
// LOAD_ARG the Load location, built from the entry point's `loc`
// LOAD_DIM Load location components; a FileCheck numeric variable,
// so the last component's index is [[#LOAD_DIM-1]]
+// LOAD_LLVM Load location type in the IR
+// LOAD_CXX Load location type in the C++ signature
// COORD_DIM sample location components (DIM plus the array slice)
// COORD_MASK shufflevector mask extracting the coordinate from a
-// location; only needed where LOAD_DIM > COORD_DIM
+// location; only needed where the coordinate is a vector
+// COORD_LLVM coordinate type in the IR
+// OFFSET_LLVM offset type in the IR
+// OFFSET_CXX offset type in the C++ signature
+// OFFSET_ZERO the all-zero offset as it appears in the IR
+// OFFSET_CONST OFFSET_ARG as it appears in the IR
+// ENTRY_CXX the entry point's coordinate type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// ENTRY_DIM the entry point's own coordinate components
@@ -144,41 +277,45 @@
// point's coordinate, so LOAD_ARG appends the array slice
// and/or the mip level to `loc`
// EXACT-LOC types whose Load location is exactly `loc`
+// VEC-COORD types whose coordinate is a vector, split out of the
+// location with a shufflevector
+// SCALAR-COORD 1D types, whose coordinate is a single element
TEXTURE<float4> t;
-// CHECK: define hidden {{.*}} <4 x float> @test_load(int vector[[[ENTRY_DIM]]])
-// WIDE-LOC: %[[COORD:.*]] = insertelement <[[#LOAD_DIM]] x i32> {{.*}}, i32 0, i32 [[#LOAD_DIM-1]]
-// WIDE-LOC: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} @t, <[[#LOAD_DIM]] x i32> noundef %[[COORD]])
-// EXACT-LOC: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} @t, <[[#LOAD_DIM]] x i32> noundef %{{.*}})
+// CHECK: define hidden {{.*}} <4 x float> @test_load([[ENTRY_CXX]])
+// WIDE-LOC: %[[COORD:.*]] = insertelement [[LOAD_LLVM]] {{.*}}, i32 0, i32 [[#LOAD_DIM-1]]
+// WIDE-LOC: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Load([[LOAD_CXX]])(ptr {{.*}} @t, [[LOAD_LLVM]] noundef %[[COORD]])
+// EXACT-LOC: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Load([[LOAD_CXX]])(ptr {{.*}} @t, [[LOAD_LLVM]] noundef %{{.*}})
// CHECK: ret <4 x float> %[[CALL]]
float4 test_load(ENTRY_TYPE loc : LOC) : SV_Target {
return t.Load(LOAD_ARG);
}
-// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]])
+// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Load([[LOAD_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]])
// CHECK: %[[THIS_ADDR:.*]] = alloca ptr
-// CHECK: %[[LOAD_ADDR:.*]] = alloca <[[#LOAD_DIM]] x i32>
+// CHECK: %[[LOAD_ADDR:.*]] = alloca [[LOAD_LLVM]]
// CHECK: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// CHECK: store <[[#LOAD_DIM]] x i32> %[[LOAD]], ptr %[[LOAD_ADDR]]
+// CHECK: store [[LOAD_LLVM]] %[[LOAD]], ptr %[[LOAD_ADDR]]
// CHECK: %[[THIS_VAL:.*]] = load ptr, ptr %[[THIS_ADDR]]
// CHECK: %[[HANDLE_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL]], i32 0, i32 0
// CHECK: %[[HANDLE:.*]] = load target("{{(dx.Texture|spirv.Image)}}", {{.*}}), ptr %[[HANDLE_GEP]]
-// CHECK: %[[LOAD_VAL:.*]] = load <[[#LOAD_DIM]] x i32>, ptr %[[LOAD_ADDR]]
+// CHECK: %[[LOAD_VAL:.*]] = load [[LOAD_LLVM]], ptr %[[LOAD_ADDR]]
// UAV-NOT: shufflevector
// UAV-NOT: extractelement
-// SRV: %[[COORD:.*]] = shufflevector <[[#LOAD_DIM]] x i32> %[[LOAD_VAL]], <[[#LOAD_DIM]] x i32> poison, <[[COORD_DIM]] x i32> [[COORD_MASK]]
-// SRV: %[[LOD:.*]] = extractelement <[[#LOAD_DIM]] x i32> %[[LOAD_VAL]], i64 [[COORD_DIM]]
-// DXIL-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.load.level.v4f32.tdx.Texture_v4f32_{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[COORD]], i32 %[[LOD]], <[[DIM]] x i32> zeroinitializer)
-// DXIL-UAV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.load.level.v4f32.tdx.Texture_v4f32_{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[LOAD_VAL]], i32 poison, <[[DIM]] x i32> zeroinitializer)
-// SPIRV-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.load.level.v4f32.tspirv.Image_f32_{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT1]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[COORD]], i32 %[[LOD]], <[[DIM]] x i32> zeroinitializer)
-// SPIRV-UAV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.load.level.v4f32.tspirv.Image_f32_{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT1]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[LOAD_VAL]], i32 poison, <[[DIM]] x i32> zeroinitializer)
+// VEC-COORD: %[[COORD:.*]] = shufflevector [[LOAD_LLVM]] %[[LOAD_VAL]], [[LOAD_LLVM]] poison, [[COORD_LLVM]] [[COORD_MASK]]
+// SCALAR-COORD: %[[COORD:.*]] = extractelement [[LOAD_LLVM]] %[[LOAD_VAL]], i64 0
+// SRV: %[[LOD:.*]] = extractelement [[LOAD_LLVM]] %[[LOAD_VAL]], i64 [[COORD_DIM]]
+// DXIL-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.load.level.v4f32.tdx.Texture_v4f32_{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], [[COORD_LLVM]] %[[COORD]], i32 %[[LOD]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// DXIL-UAV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.load.level.v4f32.tdx.Texture_v4f32_{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], [[COORD_LLVM]] %[[LOAD_VAL]], i32 poison, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.load.level.v4f32.tspirv.Image_f32_{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT1]]) %[[HANDLE]], [[COORD_LLVM]] %[[COORD]], i32 %[[LOD]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV-UAV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.load.level.v4f32.tspirv.Image_f32_{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT1]]) %[[HANDLE]], [[COORD_LLVM]] %[[LOAD_VAL]], i32 poison, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
// CHECK: ret <4 x float> %[[RES]]
-// SRV: define hidden {{.*}} <4 x float> @test_load_offset(int vector[[[ENTRY_DIM]]])
-// SRV: %[[COORD:.*]] = insertelement <[[#LOAD_DIM]] x i32> {{.*}}, i32 0, i32 [[#LOAD_DIM-1]]
-// SRV: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} @t, <[[#LOAD_DIM]] x i32> noundef %[[COORD]], <[[DIM]] x i32> noundef splat (i32 1))
+// SRV: define hidden {{.*}} <4 x float> @test_load_offset([[ENTRY_CXX]])
+// SRV: %[[COORD:.*]] = insertelement [[LOAD_LLVM]] {{.*}}, i32 0, i32 [[#LOAD_DIM-1]]
+// SRV: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} @t, [[LOAD_LLVM]] noundef %[[COORD]], [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// SRV: ret <4 x float> %[[CALL]]
#ifdef HAS_OFFSET
@@ -187,22 +324,23 @@ float4 test_load_offset(ENTRY_TYPE loc : LOC) : SV_Target {
}
#endif
-// SRV: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]], <[[DIM]] x i32> {{.*}} %[[OFFSET:.*]])
+// SRV: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:.*]])
// SRV: %[[THIS_ADDR:.*]] = alloca ptr
-// SRV: %[[LOAD_ADDR:.*]] = alloca <[[#LOAD_DIM]] x i32>
-// SRV: %[[OFFSET_ADDR:.*]] = alloca <[[DIM]] x i32>
+// SRV: %[[LOAD_ADDR:.*]] = alloca [[LOAD_LLVM]]
+// SRV: %[[OFFSET_ADDR:.*]] = alloca [[OFFSET_LLVM]]
// SRV: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// SRV: store <[[#LOAD_DIM]] x i32> %[[LOAD]], ptr %[[LOAD_ADDR]]
-// SRV: store <[[DIM]] x i32> %[[OFFSET]], ptr %[[OFFSET_ADDR]]
+// SRV: store [[LOAD_LLVM]] %[[LOAD]], ptr %[[LOAD_ADDR]]
+// SRV: store [[OFFSET_LLVM]] %[[OFFSET]], ptr %[[OFFSET_ADDR]]
// SRV: %[[THIS_VAL:.*]] = load ptr, ptr %[[THIS_ADDR]]
// SRV: %[[HANDLE_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL]], i32 0, i32 0
// SRV: %[[HANDLE:.*]] = load target("{{(dx.Texture|spirv.Image)}}", {{.*}}), ptr %[[HANDLE_GEP]]
-// SRV: %[[LOAD_VAL:.*]] = load <[[#LOAD_DIM]] x i32>, ptr %[[LOAD_ADDR]]
-// SRV: %[[COORD:.*]] = shufflevector <[[#LOAD_DIM]] x i32> %[[LOAD_VAL]], <[[#LOAD_DIM]] x i32> poison, <[[COORD_DIM]] x i32> [[COORD_MASK]]
-// SRV: %[[LOD:.*]] = extractelement <[[#LOAD_DIM]] x i32> %[[LOAD_VAL]], i64 [[COORD_DIM]]
-// SRV: %[[OFFSET_VAL:.*]] = load <[[DIM]] x i32>, ptr %[[OFFSET_ADDR]]
-// DXIL-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.load.level.v4f32.tdx.Texture_v4f32_{{.*}}("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[COORD]], i32 %[[LOD]], <[[DIM]] x i32> %[[OFFSET_VAL]])
-// SPIRV-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.load.level.v4f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT1]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[COORD]], i32 %[[LOD]], <[[DIM]] x i32> %[[OFFSET_VAL]])
+// SRV: %[[LOAD_VAL:.*]] = load [[LOAD_LLVM]], ptr %[[LOAD_ADDR]]
+// VEC-COORD: %[[COORD:.*]] = shufflevector [[LOAD_LLVM]] %[[LOAD_VAL]], [[LOAD_LLVM]] poison, [[COORD_LLVM]] [[COORD_MASK]]
+// SCALAR-COORD: %[[COORD:.*]] = extractelement [[LOAD_LLVM]] %[[LOAD_VAL]], i64 0
+// SRV: %[[LOD:.*]] = extractelement [[LOAD_LLVM]] %[[LOAD_VAL]], i64 [[COORD_DIM]]
+// SRV: %[[OFFSET_VAL:.*]] = load [[OFFSET_LLVM]], ptr %[[OFFSET_ADDR]]
+// DXIL-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.load.level.v4f32.tdx.Texture_v4f32_{{.*}}("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], [[COORD_LLVM]] %[[COORD]], i32 %[[LOD]], [[OFFSET_LLVM]] %[[OFFSET_VAL]])
+// SPIRV-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.load.level.v4f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT1]]) %[[HANDLE]], [[COORD_LLVM]] %[[COORD]], i32 %[[LOD]], [[OFFSET_LLVM]] %[[OFFSET_VAL]])
// SRV: ret <4 x float> %[[RES]]
@@ -211,193 +349,193 @@ float4 test_load_offset(ENTRY_TYPE loc : LOC) : SV_Target {
TEXTURE<float> t_float;
-// CHECK: define hidden {{.*}} float @test_load_float(int vector[[[ENTRY_DIM]]])
-// CHECK: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]])
-// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.load.level.f32.tdx.Texture_f32_{{.*}}("dx.Texture", float, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
-// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.load.level.f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT3]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
+// CHECK: define hidden {{.*}} float @test_load_float([[ENTRY_CXX]])
+// CHECK: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float>::Load([[LOAD_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]])
+// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.load.level.f32.tdx.Texture_f32_{{.*}}("dx.Texture", float, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.load.level.f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT3]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
// CHECK: ret float %[[RES]]
float test_load_float(ENTRY_TYPE loc : LOC) {
return t_float.Load(LOAD_ARG);
}
#ifdef HAS_OFFSET
-// SRV: define hidden {{.*}} float @test_load_offset_float(int vector[[[ENTRY_DIM]]])
-// SRV: %[[CALL:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} @t_float, <[[#LOAD_DIM]] x i32> noundef %{{.*}}, <[[DIM]] x i32> noundef splat (i32 1))
+// SRV: define hidden {{.*}} float @test_load_offset_float([[ENTRY_CXX]])
+// SRV: %[[CALL:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} @t_float, [[LOAD_LLVM]] noundef %{{.*}}, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// SRV: ret float %[[CALL]]
float test_load_offset_float(ENTRY_TYPE loc : LOC) {
return t_float.Load(LOAD_ARG, OFFSET_ARG);
}
#endif
-// SRV: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]], <[[DIM]] x i32> {{.*}} %[[OFFSET:.*]])
-// DXIL-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.load.level.f32.tdx.Texture_f32_{{.*}}("dx.Texture", float, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
-// SPIRV-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.load.level.f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT3]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
+// SRV: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:.*]])
+// DXIL-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.load.level.f32.tdx.Texture_f32_{{.*}}("dx.Texture", float, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
+// SPIRV-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.load.level.f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT3]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
// SRV: ret float %[[RES]]
TEXTURE<float2> t_float2;
-// CHECK: define hidden {{.*}} <2 x float> @test_load_float2(int vector[[[ENTRY_DIM]]])
-// CHECK: %[[CALL:.*]] = call {{.*}} <2 x float> @hlsl::[[TEXTURE]]<float vector[2]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} @t_float2, <[[#LOAD_DIM]] x i32> noundef %{{.*}})
+// CHECK: define hidden {{.*}} <2 x float> @test_load_float2([[ENTRY_CXX]])
+// CHECK: %[[CALL:.*]] = call {{.*}} <2 x float> @hlsl::[[TEXTURE]]<float vector[2]>::Load([[LOAD_CXX]])(ptr {{.*}} @t_float2, [[LOAD_LLVM]] noundef %{{.*}})
// CHECK: ret <2 x float> %[[CALL]]
float2 test_load_float2(ENTRY_TYPE loc : LOC) {
return t_float2.Load(LOAD_ARG);
}
-// CHECK: define linkonce_odr hidden {{.*}} <2 x float> @hlsl::[[TEXTURE]]<float vector[2]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]])
-// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.dx.resource.load.level.v2f32.tdx.Texture_v2f32_{{.*}}("dx.Texture", <2 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
-// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.spv.resource.load.level.v2f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT6]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
+// CHECK: define linkonce_odr hidden {{.*}} <2 x float> @hlsl::[[TEXTURE]]<float vector[2]>::Load([[LOAD_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]])
+// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.dx.resource.load.level.v2f32.tdx.Texture_v2f32_{{.*}}("dx.Texture", <2 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.spv.resource.load.level.v2f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT6]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
// CHECK: ret <2 x float> %[[RES]]
#ifdef HAS_OFFSET
-// SRV: define hidden {{.*}} <2 x float> @test_load_offset_float2(int vector[[[ENTRY_DIM]]])
-// SRV: %[[CALL:.*]] = call {{.*}} <2 x float> @hlsl::[[TEXTURE]]<float vector[2]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} @t_float2, <[[#LOAD_DIM]] x i32> noundef %{{.*}}, <[[DIM]] x i32> noundef splat (i32 1))
+// SRV: define hidden {{.*}} <2 x float> @test_load_offset_float2([[ENTRY_CXX]])
+// SRV: %[[CALL:.*]] = call {{.*}} <2 x float> @hlsl::[[TEXTURE]]<float vector[2]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} @t_float2, [[LOAD_LLVM]] noundef %{{.*}}, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// SRV: ret <2 x float> %[[CALL]]
float2 test_load_offset_float2(ENTRY_TYPE loc : LOC) {
return t_float2.Load(LOAD_ARG, OFFSET_ARG);
}
#endif
-// SRV: define linkonce_odr hidden {{.*}} <2 x float> @hlsl::[[TEXTURE]]<float vector[2]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]], <[[DIM]] x i32> {{.*}} %[[OFFSET:.*]])
-// DXIL-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.dx.resource.load.level.v2f32.tdx.Texture_v2f32_{{.*}}("dx.Texture", <2 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
-// SPIRV-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.spv.resource.load.level.v2f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT6]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
+// SRV: define linkonce_odr hidden {{.*}} <2 x float> @hlsl::[[TEXTURE]]<float vector[2]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:.*]])
+// DXIL-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.dx.resource.load.level.v2f32.tdx.Texture_v2f32_{{.*}}("dx.Texture", <2 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
+// SPIRV-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.spv.resource.load.level.v2f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT6]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
// SRV: ret <2 x float> %[[RES]]
TEXTURE<float3> t_float3;
-// CHECK: define hidden {{.*}} <3 x float> @test_load_float3(int vector[[[ENTRY_DIM]]])
-// CHECK: %[[CALL:.*]] = call {{.*}} <3 x float> @hlsl::[[TEXTURE]]<float vector[3]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} @t_float3, <[[#LOAD_DIM]] x i32> noundef %{{.*}})
+// CHECK: define hidden {{.*}} <3 x float> @test_load_float3([[ENTRY_CXX]])
+// CHECK: %[[CALL:.*]] = call {{.*}} <3 x float> @hlsl::[[TEXTURE]]<float vector[3]>::Load([[LOAD_CXX]])(ptr {{.*}} @t_float3, [[LOAD_LLVM]] noundef %{{.*}})
// CHECK: ret <3 x float> %[[CALL]]
float3 test_load_float3(ENTRY_TYPE loc : LOC) {
return t_float3.Load(LOAD_ARG);
}
-// CHECK: define linkonce_odr hidden {{.*}} <3 x float> @hlsl::[[TEXTURE]]<float vector[3]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]])
-// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.dx.resource.load.level.v3f32.tdx.Texture_v3f32_{{.*}}("dx.Texture", <3 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
-// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.spv.resource.load.level.v3f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], 0) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
+// CHECK: define linkonce_odr hidden {{.*}} <3 x float> @hlsl::[[TEXTURE]]<float vector[3]>::Load([[LOAD_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]])
+// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.dx.resource.load.level.v3f32.tdx.Texture_v3f32_{{.*}}("dx.Texture", <3 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.spv.resource.load.level.v3f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], 0) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
// CHECK: ret <3 x float> %[[RES]]
#ifdef HAS_OFFSET
-// SRV: define hidden {{.*}} <3 x float> @test_load_offset_float3(int vector[[[ENTRY_DIM]]])
-// SRV: %[[CALL:.*]] = call {{.*}} <3 x float> @hlsl::[[TEXTURE]]<float vector[3]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} @t_float3, <[[#LOAD_DIM]] x i32> noundef %{{.*}}, <[[DIM]] x i32> noundef splat (i32 1))
+// SRV: define hidden {{.*}} <3 x float> @test_load_offset_float3([[ENTRY_CXX]])
+// SRV: %[[CALL:.*]] = call {{.*}} <3 x float> @hlsl::[[TEXTURE]]<float vector[3]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} @t_float3, [[LOAD_LLVM]] noundef %{{.*}}, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// SRV: ret <3 x float> %[[CALL]]
float3 test_load_offset_float3(ENTRY_TYPE loc : LOC) {
return t_float3.Load(LOAD_ARG, OFFSET_ARG);
}
#endif
-// SRV: define linkonce_odr hidden {{.*}} <3 x float> @hlsl::[[TEXTURE]]<float vector[3]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]], <[[DIM]] x i32> {{.*}} %[[OFFSET:.*]])
-// DXIL-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.dx.resource.load.level.v3f32.tdx.Texture_v3f32_{{.*}}("dx.Texture", <3 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
-// SPIRV-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.spv.resource.load.level.v3f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], 0) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
+// SRV: define linkonce_odr hidden {{.*}} <3 x float> @hlsl::[[TEXTURE]]<float vector[3]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:.*]])
+// DXIL-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.dx.resource.load.level.v3f32.tdx.Texture_v3f32_{{.*}}("dx.Texture", <3 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
+// SPIRV-SRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.spv.resource.load.level.v3f32.tspirv.Image_f32_{{.*}}("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], 0) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
// SRV: ret <3 x float> %[[RES]]
TEXTURE<int> t_int;
-// CHECK: define hidden {{.*}} i32 @test_load_int(int vector[[[ENTRY_DIM]]])
-// CHECK: %[[CALL:.*]] = call {{.*}} i32 @hlsl::[[TEXTURE]]<int>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} @t_int, <[[#LOAD_DIM]] x i32> noundef %{{.*}})
+// CHECK: define hidden {{.*}} i32 @test_load_int([[ENTRY_CXX]])
+// CHECK: %[[CALL:.*]] = call {{.*}} i32 @hlsl::[[TEXTURE]]<int>::Load([[LOAD_CXX]])(ptr {{.*}} @t_int, [[LOAD_LLVM]] noundef %{{.*}})
// CHECK: ret i32 %[[CALL]]
int test_load_int(ENTRY_TYPE loc : LOC) {
return t_int.Load(LOAD_ARG);
}
-// CHECK: define linkonce_odr hidden {{.*}} i32 @hlsl::[[TEXTURE]]<int>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]])
-// DXIL: %[[RES:.*]] = call i32 @llvm.dx.resource.load.level.i32.tdx.Texture_i32_{{.*}}("dx.Texture", i32, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
-// SPIRV: %[[RES:.*]] = call i32 @llvm.spv.resource.load.level.i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT24]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
+// CHECK: define linkonce_odr hidden {{.*}} i32 @hlsl::[[TEXTURE]]<int>::Load([[LOAD_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]])
+// DXIL: %[[RES:.*]] = call i32 @llvm.dx.resource.load.level.i32.tdx.Texture_i32_{{.*}}("dx.Texture", i32, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: %[[RES:.*]] = call i32 @llvm.spv.resource.load.level.i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT24]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
// CHECK: ret i32 %[[RES]]
#ifdef HAS_OFFSET
-// SRV: define hidden {{.*}} i32 @test_load_offset_int(int vector[[[ENTRY_DIM]]])
-// SRV: %[[CALL:.*]] = call {{.*}} i32 @hlsl::[[TEXTURE]]<int>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} @t_int, <[[#LOAD_DIM]] x i32> noundef %{{.*}}, <[[DIM]] x i32> noundef splat (i32 1))
+// SRV: define hidden {{.*}} i32 @test_load_offset_int([[ENTRY_CXX]])
+// SRV: %[[CALL:.*]] = call {{.*}} i32 @hlsl::[[TEXTURE]]<int>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} @t_int, [[LOAD_LLVM]] noundef %{{.*}}, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// SRV: ret i32 %[[CALL]]
int test_load_offset_int(ENTRY_TYPE loc : LOC) {
return t_int.Load(LOAD_ARG, OFFSET_ARG);
}
#endif
-// SRV: define linkonce_odr hidden {{.*}} i32 @hlsl::[[TEXTURE]]<int>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]], <[[DIM]] x i32> {{.*}} %[[OFFSET:.*]])
-// DXIL-SRV: %[[RES:.*]] = call i32 @llvm.dx.resource.load.level.i32.tdx.Texture_i32_{{.*}}("dx.Texture", i32, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
-// SPIRV-SRV: %[[RES:.*]] = call i32 @llvm.spv.resource.load.level.i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT24]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
+// SRV: define linkonce_odr hidden {{.*}} i32 @hlsl::[[TEXTURE]]<int>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:.*]])
+// DXIL-SRV: %[[RES:.*]] = call i32 @llvm.dx.resource.load.level.i32.tdx.Texture_i32_{{.*}}("dx.Texture", i32, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
+// SPIRV-SRV: %[[RES:.*]] = call i32 @llvm.spv.resource.load.level.i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT24]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
// SRV: ret i32 %[[RES]]
TEXTURE<int2> t_int2;
-// CHECK: define hidden {{.*}} <2 x i32> @test_load_int2(int vector[[[ENTRY_DIM]]])
-// CHECK: %[[CALL:.*]] = call {{.*}} <2 x i32> @hlsl::[[TEXTURE]]<int vector[2]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} @t_int2, <[[#LOAD_DIM]] x i32> noundef %{{.*}})
+// CHECK: define hidden {{.*}} <2 x i32> @test_load_int2([[ENTRY_CXX]])
+// CHECK: %[[CALL:.*]] = call {{.*}} <2 x i32> @hlsl::[[TEXTURE]]<int vector[2]>::Load([[LOAD_CXX]])(ptr {{.*}} @t_int2, [[LOAD_LLVM]] noundef %{{.*}})
// CHECK: ret <2 x i32> %[[CALL]]
int2 test_load_int2(ENTRY_TYPE loc : LOC) {
return t_int2.Load(LOAD_ARG);
}
-// CHECK: define linkonce_odr hidden {{.*}} <2 x i32> @hlsl::[[TEXTURE]]<int vector[2]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]])
-// DXIL: %[[RES:.*]] = call <2 x i32> @llvm.dx.resource.load.level.v2i32.tdx.Texture_v2i32_{{.*}}("dx.Texture", <2 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
-// SPIRV: %[[RES:.*]] = call <2 x i32> @llvm.spv.resource.load.level.v2i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT25]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
+// CHECK: define linkonce_odr hidden {{.*}} <2 x i32> @hlsl::[[TEXTURE]]<int vector[2]>::Load([[LOAD_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]])
+// DXIL: %[[RES:.*]] = call <2 x i32> @llvm.dx.resource.load.level.v2i32.tdx.Texture_v2i32_{{.*}}("dx.Texture", <2 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: %[[RES:.*]] = call <2 x i32> @llvm.spv.resource.load.level.v2i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT25]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
// CHECK: ret <2 x i32> %[[RES]]
#ifdef HAS_OFFSET
-// SRV: define hidden {{.*}} <2 x i32> @test_load_offset_int2(int vector[[[ENTRY_DIM]]])
-// SRV: %[[CALL:.*]] = call {{.*}} <2 x i32> @hlsl::[[TEXTURE]]<int vector[2]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} @t_int2, <[[#LOAD_DIM]] x i32> noundef %{{.*}}, <[[DIM]] x i32> noundef splat (i32 1))
+// SRV: define hidden {{.*}} <2 x i32> @test_load_offset_int2([[ENTRY_CXX]])
+// SRV: %[[CALL:.*]] = call {{.*}} <2 x i32> @hlsl::[[TEXTURE]]<int vector[2]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} @t_int2, [[LOAD_LLVM]] noundef %{{.*}}, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// SRV: ret <2 x i32> %[[CALL]]
int2 test_load_offset_int2(ENTRY_TYPE loc : LOC) {
return t_int2.Load(LOAD_ARG, OFFSET_ARG);
}
#endif
-// SRV: define linkonce_odr hidden {{.*}} <2 x i32> @hlsl::[[TEXTURE]]<int vector[2]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]], <[[DIM]] x i32> {{.*}} %[[OFFSET:.*]])
-// DXIL-SRV: %[[RES:.*]] = call <2 x i32> @llvm.dx.resource.load.level.v2i32.tdx.Texture_v2i32_{{.*}}("dx.Texture", <2 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
-// SPIRV-SRV: %[[RES:.*]] = call <2 x i32> @llvm.spv.resource.load.level.v2i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT25]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
+// SRV: define linkonce_odr hidden {{.*}} <2 x i32> @hlsl::[[TEXTURE]]<int vector[2]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:.*]])
+// DXIL-SRV: %[[RES:.*]] = call <2 x i32> @llvm.dx.resource.load.level.v2i32.tdx.Texture_v2i32_{{.*}}("dx.Texture", <2 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
+// SPIRV-SRV: %[[RES:.*]] = call <2 x i32> @llvm.spv.resource.load.level.v2i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT25]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
// SRV: ret <2 x i32> %[[RES]]
TEXTURE<int3> t_int3;
-// CHECK: define hidden {{.*}} <3 x i32> @test_load_int3(int vector[[[ENTRY_DIM]]])
-// CHECK: %[[CALL:.*]] = call {{.*}} <3 x i32> @hlsl::[[TEXTURE]]<int vector[3]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} @t_int3, <[[#LOAD_DIM]] x i32> noundef %{{.*}})
+// CHECK: define hidden {{.*}} <3 x i32> @test_load_int3([[ENTRY_CXX]])
+// CHECK: %[[CALL:.*]] = call {{.*}} <3 x i32> @hlsl::[[TEXTURE]]<int vector[3]>::Load([[LOAD_CXX]])(ptr {{.*}} @t_int3, [[LOAD_LLVM]] noundef %{{.*}})
// CHECK: ret <3 x i32> %[[CALL]]
int3 test_load_int3(ENTRY_TYPE loc : LOC) {
return t_int3.Load(LOAD_ARG);
}
-// CHECK: define linkonce_odr hidden {{.*}} <3 x i32> @hlsl::[[TEXTURE]]<int vector[3]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]])
-// DXIL: %[[RES:.*]] = call <3 x i32> @llvm.dx.resource.load.level.v3i32.tdx.Texture_v3i32_{{.*}}("dx.Texture", <3 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
-// SPIRV: %[[RES:.*]] = call <3 x i32> @llvm.spv.resource.load.level.v3i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], 0) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
+// CHECK: define linkonce_odr hidden {{.*}} <3 x i32> @hlsl::[[TEXTURE]]<int vector[3]>::Load([[LOAD_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]])
+// DXIL: %[[RES:.*]] = call <3 x i32> @llvm.dx.resource.load.level.v3i32.tdx.Texture_v3i32_{{.*}}("dx.Texture", <3 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: %[[RES:.*]] = call <3 x i32> @llvm.spv.resource.load.level.v3i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], 0) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
// CHECK: ret <3 x i32> %[[RES]]
#ifdef HAS_OFFSET
-// SRV: define hidden {{.*}} <3 x i32> @test_load_offset_int3(int vector[[[ENTRY_DIM]]])
-// SRV: %[[CALL:.*]] = call {{.*}} <3 x i32> @hlsl::[[TEXTURE]]<int vector[3]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} @t_int3, <[[#LOAD_DIM]] x i32> noundef %{{.*}}, <[[DIM]] x i32> noundef splat (i32 1))
+// SRV: define hidden {{.*}} <3 x i32> @test_load_offset_int3([[ENTRY_CXX]])
+// SRV: %[[CALL:.*]] = call {{.*}} <3 x i32> @hlsl::[[TEXTURE]]<int vector[3]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} @t_int3, [[LOAD_LLVM]] noundef %{{.*}}, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// SRV: ret <3 x i32> %[[CALL]]
int3 test_load_offset_int3(ENTRY_TYPE loc : LOC) {
return t_int3.Load(LOAD_ARG, OFFSET_ARG);
}
#endif
-// SRV: define linkonce_odr hidden {{.*}} <3 x i32> @hlsl::[[TEXTURE]]<int vector[3]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]], <[[DIM]] x i32> {{.*}} %[[OFFSET:.*]])
-// DXIL-SRV: %[[RES:.*]] = call <3 x i32> @llvm.dx.resource.load.level.v3i32.tdx.Texture_v3i32_{{.*}}("dx.Texture", <3 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
-// SPIRV-SRV: %[[RES:.*]] = call <3 x i32> @llvm.spv.resource.load.level.v3i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], 0) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
+// SRV: define linkonce_odr hidden {{.*}} <3 x i32> @hlsl::[[TEXTURE]]<int vector[3]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:.*]])
+// DXIL-SRV: %[[RES:.*]] = call <3 x i32> @llvm.dx.resource.load.level.v3i32.tdx.Texture_v3i32_{{.*}}("dx.Texture", <3 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
+// SPIRV-SRV: %[[RES:.*]] = call <3 x i32> @llvm.spv.resource.load.level.v3i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], 0) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
// SRV: ret <3 x i32> %[[RES]]
TEXTURE<int4> t_int4;
-// CHECK: define hidden {{.*}} <4 x i32> @test_load_int4(int vector[[[ENTRY_DIM]]])
-// CHECK: %[[CALL:.*]] = call {{.*}} <4 x i32> @hlsl::[[TEXTURE]]<int vector[4]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} @t_int4, <[[#LOAD_DIM]] x i32> noundef %{{.*}})
+// CHECK: define hidden {{.*}} <4 x i32> @test_load_int4([[ENTRY_CXX]])
+// CHECK: %[[CALL:.*]] = call {{.*}} <4 x i32> @hlsl::[[TEXTURE]]<int vector[4]>::Load([[LOAD_CXX]])(ptr {{.*}} @t_int4, [[LOAD_LLVM]] noundef %{{.*}})
// CHECK: ret <4 x i32> %[[CALL]]
int4 test_load_int4(ENTRY_TYPE loc : LOC) {
return t_int4.Load(LOAD_ARG);
}
-// CHECK: define linkonce_odr hidden {{.*}} <4 x i32> @hlsl::[[TEXTURE]]<int vector[4]>::Load(int vector[[[#LOAD_DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]])
-// DXIL: %[[RES:.*]] = call <4 x i32> @llvm.dx.resource.load.level.v4i32.tdx.Texture_v4i32_{{.*}}("dx.Texture", <4 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
-// SPIRV: %[[RES:.*]] = call <4 x i32> @llvm.spv.resource.load.level.v4i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT21]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 {{[^,]*}}, <[[DIM]] x i32> zeroinitializer)
+// CHECK: define linkonce_odr hidden {{.*}} <4 x i32> @hlsl::[[TEXTURE]]<int vector[4]>::Load([[LOAD_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]])
+// DXIL: %[[RES:.*]] = call <4 x i32> @llvm.dx.resource.load.level.v4i32.tdx.Texture_v4i32_{{.*}}("dx.Texture", <4 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: %[[RES:.*]] = call <4 x i32> @llvm.spv.resource.load.level.v4i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT21]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 {{[^,]*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]])
// CHECK: ret <4 x i32> %[[RES]]
#ifdef HAS_OFFSET
-// SRV: define hidden {{.*}} <4 x i32> @test_load_offset_int4(int vector[[[ENTRY_DIM]]])
-// SRV: %[[CALL:.*]] = call {{.*}} <4 x i32> @hlsl::[[TEXTURE]]<int vector[4]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} @t_int4, <[[#LOAD_DIM]] x i32> noundef %{{.*}}, <[[DIM]] x i32> noundef splat (i32 1))
+// SRV: define hidden {{.*}} <4 x i32> @test_load_offset_int4([[ENTRY_CXX]])
+// SRV: %[[CALL:.*]] = call {{.*}} <4 x i32> @hlsl::[[TEXTURE]]<int vector[4]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} @t_int4, [[LOAD_LLVM]] noundef %{{.*}}, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// SRV: ret <4 x i32> %[[CALL]]
int4 test_load_offset_int4(ENTRY_TYPE loc : LOC) {
return t_int4.Load(LOAD_ARG, OFFSET_ARG);
}
#endif
-// SRV: define linkonce_odr hidden {{.*}} <4 x i32> @hlsl::[[TEXTURE]]<int vector[4]>::Load(int vector[[[#LOAD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} %[[THIS:.*]], <[[#LOAD_DIM]] x i32> {{.*}} %[[LOAD:.*]], <[[DIM]] x i32> {{.*}} %[[OFFSET:.*]])
-// DXIL-SRV: %[[RES:.*]] = call <4 x i32> @llvm.dx.resource.load.level.v4i32.tdx.Texture_v4i32_{{.*}}("dx.Texture", <4 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
-// SPIRV-SRV: %[[RES:.*]] = call <4 x i32> @llvm.spv.resource.load.level.v4i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT21]]) %{{.*}}, <[[COORD_DIM]] x i32> %{{.*}}, i32 %{{.*}}, <[[DIM]] x i32> %{{.*}})
+// SRV: define linkonce_odr hidden {{.*}} <4 x i32> @hlsl::[[TEXTURE]]<int vector[4]>::Load([[LOAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} %[[THIS:.*]], [[LOAD_LLVM]] {{.*}} %[[LOAD:.*]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:.*]])
+// DXIL-SRV: %[[RES:.*]] = call <4 x i32> @llvm.dx.resource.load.level.v4i32.tdx.Texture_v4i32_{{.*}}("dx.Texture", <4 x i32>, [[RW]], 0, 1, [[DXIL_TY]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
+// SPIRV-SRV: %[[RES:.*]] = call <4 x i32> @llvm.spv.resource.load.level.v4i32.tspirv.SignedImage_i32_{{.*}}("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[FORMAT21]]) %{{.*}}, [[COORD_LLVM]] %{{.*}}, i32 %{{.*}}, [[OFFSET_LLVM]] %{{.*}})
// SRV: ret <4 x i32> %[[RES]]
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl
index 7f258ec5b0c5f..70b1939116bf5 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl
@@ -1,36 +1,71 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,COORD2 -DTEXTURE=Texture2D \
-// RUN: -DCOORD_DIM=2 -DLOAD_DIM=3 -DDXIL_TY=2 -DDIM=2
+// RUN: -DTEXTURE=Texture1D -DCOORD_TYPE=float -DINDEX_TYPE=int -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,SCALAR-COORD \
+// RUN: -DTEXTURE=Texture1D -DCOORD_DIM=1 -DLOAD_DIM=2 -DDXIL_TY=1 -DDIM=1 \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX=int -DOFFSET_LLVM=i32 -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,COORD3 -DTEXTURE=Texture2DArray \
-// RUN: -DCOORD_DIM=3 -DLOAD_DIM=4 -DDXIL_TY=7 -DDIM=2
+// RUN: -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 -DINDEX_TYPE=int2 -o - \
+// RUN: %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,COORD2,VEC-COORD -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_DIM=2 -DLOAD_DIM=3 -DDXIL_TY=6 -DDIM=1 \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX="int vector[2]" \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
+// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 -DINDEX_TYPE=int2 -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,COORD2,VEC-COORD \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 -DLOAD_DIM=3 -DDXIL_TY=2 -DDIM=2 \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX="int vector[2]" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -DINDEX_TYPE=int3 -o - \
+// RUN: %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,COORD3,VEC-COORD -DTEXTURE=Texture2DArray \
+// RUN: -DCOORD_DIM=3 -DLOAD_DIM=4 -DDXIL_TY=7 -DDIM=2 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX="int vector[3]" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
// RUN: -DTEXTURE=Texture3D -DCOORD_DIM=3 -o - %s \
// RUN: | llvm-cxxfilt \
// RUN: | FileCheck %s --check-prefixes=CHECK,COORD3 -DTEXTURE=Texture3D \
-// RUN: -DCOORD_DIM=3 -DLOAD_DIM=4 -DDXIL_TY=4 -DDIM=3
+// RUN: -DCOORD_DIM=3 -DLOAD_DIM=4 -DDXIL_TY=4 -DDIM=3 \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DINDEX_CXX="int vector[3]" -DINDEX_LLVM="<3 x i32>" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
// TEXTURE resource type name
+// COORD_TYPE sample location type
+// INDEX_TYPE mips slice index type
// COORD_DIM sample location components (DIM plus the array slice)
+// COORD_LLVM sample location type in the IR
+// COORD_CXX sample location type in the C++ signature
+// INDEX_LLVM mips slice index type in the IR
+// INDEX_CXX mips slice index type in the C++ signature
+// OFFSET_LLVM offset type in the IR
+// OFFSET_ZERO the all-zero offset as it appears in the IR
// LOAD_DIM Load location components (COORD_DIM plus the mip level)
// DXIL_TY dx.Texture resource-kind operand
// DIM number of resource dimensions (offset, ddx/ddy, LOD
// location)
//
// Check prefixes:
-// COORD2 the coordinate has two components
-// COORD3 the coordinate has three components (an
-// array slice or a third resource dimension)
+// COORD2 the location is built from two coordinate components
+// COORD3 the location is built from three coordinate components
+// VEC-COORD the coordinate is a vector, so the location is built
+// element by element and the coordinate is shuffled back
+// out of it
+// SCALAR-COORD 1D types, whose coordinate is a single value
TEXTURE<float4> t;
@@ -47,20 +82,20 @@ TEXTURE<float4> t;
// CHECK: %[[MIPS_HANDLE_GEP:.*]] = getelementptr {{.*}} %"struct.hlsl::[[TEXTURE]]<>::mips_type", ptr %[[MIPS_GEP]], i32 0, i32 0
// CHECK: store target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]) %[[HANDLE]], ptr %[[MIPS_HANDLE_GEP]]
-// CHECK: define internal {{.*}} <4 x float> @test_mips(float vector[[[COORD_DIM]]])(<[[COORD_DIM]] x float> {{.*}} %loc)
+// CHECK: define internal {{.*}} <4 x float> @test_mips([[COORD_CXX]])([[COORD_LLVM]] {{.*}} %loc)
// CHECK: entry:
-// CHECK: %[[LOC_ADDR:.*]] = alloca <[[COORD_DIM]] x float>
+// CHECK: %[[LOC_ADDR:.*]] = alloca [[COORD_LLVM]]
// CHECK: %[[REF_TMP:.*]] = alloca %"struct.hlsl::[[TEXTURE]]<>::mips_slice_type"
-// CHECK: store <[[COORD_DIM]] x float> %loc, ptr %[[LOC_ADDR]]
+// CHECK: store [[COORD_LLVM]] %loc, ptr %[[LOC_ADDR]]
// CHECK: call void @hlsl::[[TEXTURE]]<float vector[4]>::mips_type::operator[](int) const(ptr {{.*}} %[[REF_TMP]], ptr {{.*}} getelementptr {{.*}} (i8, ptr @t, i32 4), i32 noundef 0)
-// CHECK: %[[V0:.*]] = load <[[COORD_DIM]] x float>, ptr %[[LOC_ADDR]]
-// CHECK: %[[CONV:.*]] = fptosi <[[COORD_DIM]] x float> %[[V0]] to <[[COORD_DIM]] x i32>
-// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::operator[](int vector[[[COORD_DIM]]]) const(ptr {{.*}} %[[REF_TMP]], <[[COORD_DIM]] x i32> {{.*}} %[[CONV]])
+// CHECK: %[[V0:.*]] = load [[COORD_LLVM]], ptr %[[LOC_ADDR]]
+// CHECK: %[[CONV:.*]] = fptosi [[COORD_LLVM]] %[[V0]] to [[INDEX_LLVM]]
+// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::operator[]([[INDEX_CXX]]) const(ptr {{.*}} %[[REF_TMP]], [[INDEX_LLVM]] {{.*}} %[[CONV]])
// CHECK: ret <4 x float> %[[CALL]]
[shader("pixel")]
-float4 test_mips(vector<float, COORD_DIM> loc : LOC) : SV_Target {
- return t.mips[0][(vector<int, COORD_DIM>)loc];
+float4 test_mips(COORD_TYPE loc : LOC) : SV_Target {
+ return t.mips[0][(INDEX_TYPE)loc];
}
// CHECK: define linkonce_odr hidden void @hlsl::[[TEXTURE]]<float vector[4]>::mips_type::operator[](int) const(ptr {{.*}} %agg.result, ptr {{.*}} %this, i32 {{.*}} %Level)
@@ -83,30 +118,36 @@ float4 test_mips(vector<float, COORD_DIM> loc : LOC) : SV_Target {
// CHECK: store i32 %[[L_VAL]], ptr %[[LEVEL_GEP]]
// CHECK: call void @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::mips_slice_type(hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type const&)(ptr noundef nonnull align 4 dereferenceable(8) %agg.result, ptr noundef nonnull align 4 dereferenceable(8) %[[SLICE]])
-// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::operator[](int vector[[[COORD_DIM]]]) const(ptr {{.*}} %[[THIS:.*]], <[[COORD_DIM]] x i32> noundef %[[COORD:.*]])
+// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::operator[]([[INDEX_CXX]]) const(ptr {{.*}} %[[THIS:.*]], [[INDEX_LLVM]] noundef %[[COORD:.*]])
// CHECK: entry:
-// CHECK: %[[COORD_ADDR:.*]] = alloca <[[COORD_DIM]] x i32>
-// CHECK: %[[VEC_TMP:.*]] = alloca <[[COORD_DIM]] x i32>
-// CHECK: store <[[COORD_DIM]] x i32> %[[COORD]], ptr %[[COORD_ADDR]]
+// CHECK: %[[COORD_ADDR:.*]] = alloca [[INDEX_LLVM]]
+// VEC-COORD: %[[VEC_TMP:.*]] = alloca [[INDEX_LLVM]]
+// CHECK: store [[INDEX_LLVM]] %[[COORD]], ptr %[[COORD_ADDR]]
// CHECK: %[[THIS1:.*]] = load ptr, ptr %{{.*}}
-// CHECK: %[[COORD_PARAM:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[COORD_ADDR]]
-// CHECK: store <[[COORD_DIM]] x i32> %[[COORD_PARAM]], ptr %[[VEC_TMP]]
+// VEC-COORD: %[[COORD_PARAM:.*]] = load [[INDEX_LLVM]], ptr %[[COORD_ADDR]]
+// VEC-COORD: store [[INDEX_LLVM]] %[[COORD_PARAM]], ptr %[[VEC_TMP]]
// CHECK: %[[HANDLE_PTR:.*]] = getelementptr {{.*}} %"struct.hlsl::[[TEXTURE]]<>::mips_slice_type", ptr %[[THIS1]], i32 0, i32 0
// CHECK: %[[HANDLE:.*]] = load target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]), ptr %[[HANDLE_PTR]]
-// CHECK: %[[COORD_VAL:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[VEC_TMP]]
-// CHECK: %[[VECEXT:.*]] = extractelement <[[COORD_DIM]] x i32> %[[COORD_VAL]], i32 0
-// CHECK: %[[VECINIT:.*]] = insertelement <[[LOAD_DIM]] x i32> poison, i32 %[[VECEXT]], i32 0
-// CHECK: %[[COORD_VAL2:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[VEC_TMP]]
-// CHECK: %[[VECEXT2:.*]] = extractelement <[[COORD_DIM]] x i32> %[[COORD_VAL2]], i32 1
-// CHECK: %[[VECINIT3:.*]] = insertelement <[[LOAD_DIM]] x i32> %[[VECINIT]], i32 %[[VECEXT2]], i32 1
+// A 1D coordinate is a single value, so it goes straight into the location.
+// SCALAR-COORD: %[[COORD_VAL:.*]] = load i32, ptr %[[COORD_ADDR]]
+// SCALAR-COORD: %[[VECINIT3:.*]] = insertelement <[[LOAD_DIM]] x i32> poison, i32 %[[COORD_VAL]], i32 0
+
+// VEC-COORD: %[[COORD_VAL:.*]] = load [[INDEX_LLVM]], ptr %[[VEC_TMP]]
+// VEC-COORD: %[[VECEXT:.*]] = extractelement [[INDEX_LLVM]] %[[COORD_VAL]], i32 0
+// VEC-COORD: %[[VECINIT:.*]] = insertelement <[[LOAD_DIM]] x i32> poison, i32 %[[VECEXT]], i32 0
+// VEC-COORD: %[[COORD_VAL2:.*]] = load [[INDEX_LLVM]], ptr %[[VEC_TMP]]
+// VEC-COORD: %[[VECEXT2:.*]] = extractelement [[INDEX_LLVM]] %[[COORD_VAL2]], i32 1
+// VEC-COORD: %[[VECINIT3:.*]] = insertelement <[[LOAD_DIM]] x i32> %[[VECINIT]], i32 %[[VECEXT2]], i32 1
// COORD3: %[[COORD_VAL3:.*]] = load <3 x i32>, ptr %[[VEC_TMP]]
// COORD3: %[[VECEXT3:.*]] = extractelement <3 x i32> %[[COORD_VAL3]], i32 2
// COORD3: %[[VECINIT3B:.*]] = insertelement <4 x i32> %[[VECINIT3]], i32 %[[VECEXT3]], i32 2
// CHECK: %[[LEVEL_PTR:.*]] = getelementptr {{.*}} %"struct.hlsl::[[TEXTURE]]<>::mips_slice_type", ptr %[[THIS1]], i32 0, i32 1
// CHECK: %[[LEVEL_VAL:.*]] = load i32, ptr %[[LEVEL_PTR]]
+// SCALAR-COORD: %[[VECINITL:.*]] = insertelement <2 x i32> %[[VECINIT3]], i32 %[[LEVEL_VAL]], i32 1
// COORD2: %[[VECINITL:.*]] = insertelement <3 x i32> %[[VECINIT3]], i32 %[[LEVEL_VAL]], i32 2
// COORD3: %[[VECINITL:.*]] = insertelement <4 x i32> %[[VECINIT3B]], i32 %[[LEVEL_VAL]], i32 3
-// CHECK: %[[COORD_X:.*]] = shufflevector <[[LOAD_DIM]] x i32> %[[VECINITL]], <[[LOAD_DIM]] x i32> poison, <[[COORD_DIM]] x i32> {{.*}}
+// SCALAR-COORD: %[[COORD_X:.*]] = extractelement <[[LOAD_DIM]] x i32> %[[VECINITL]], i64 0
+// VEC-COORD: %[[COORD_X:.*]] = shufflevector <[[LOAD_DIM]] x i32> %[[VECINITL]], <[[LOAD_DIM]] x i32> poison, [[INDEX_LLVM]] {{.*}}
// CHECK: %[[LOD:.*]] = extractelement <[[LOAD_DIM]] x i32> %[[VECINITL]], i64 [[COORD_DIM]]
-// CHECK: %[[RES:.*]] = call {{.*}} <4 x float> @llvm.dx.resource.load.level.v4f32.tdx.Texture_v4f32_0_0_0_[[DXIL_TY]]t.v[[COORD_DIM]]i32.i32.v[[DIM]]i32(target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[COORD_X]], i32 %[[LOD]], <[[DIM]] x i32> zeroinitializer)
+// CHECK: %[[RES:.*]] = call {{.*}} <4 x float> @llvm.dx.resource.load.level.v4f32.tdx.Texture_v4f32_0_0_0_[[DXIL_TY]]t{{.*}}(target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]) %[[HANDLE]], [[INDEX_LLVM]] %[[COORD_X]], i32 %[[LOD]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
// CHECK: ret <4 x float> %[[RES]]
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
index 01107d08f72fb..59e448efd1f68 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
@@ -1,82 +1,163 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DDXIL_TY=1 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=6 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>"
+// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3
+// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3
+// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
+// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int" \
+// RUN: -DINDEX_CXX_I=int -DGRAD_LLVM=float -DGRAD_CXX=float \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
// RUN: -DCOORD_TYPE=float3 %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
+// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
// RUN: -DCOORD_TYPE=float3 %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -88,6 +169,8 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_DIM sample location components (DIM plus the array slice)
+// GRAD_CXX ddx/ddy type in the C++ signature
+// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// DIM number of resource dimensions (offset, ddx/ddy, LOD
@@ -119,31 +202,31 @@
TEXTURE<float4> t;
SamplerState s;
-// CHECK: define hidden {{.*}} <4 x float> @main(float vector[[[COORD_DIM]]])(<[[COORD_DIM]] x float> noundef nofpclass(nan inf) %[[LOC:.*]])
-// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, float vector[[[COORD_DIM]]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}})
+// CHECK: define hidden {{.*}} <4 x float> @main([[COORD_CXX]])([[COORD_LLVM]] noundef nofpclass(nan inf) %[[LOC:.*]])
+// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, [[COORD_CXX]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}})
// CHECK: ret <4 x float> %[[CALL]]
float4 main(COORD_TYPE loc : LOC) : SV_Target {
return t.Sample(s, loc);
}
-// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, float vector[[[COORD_DIM]]])(ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], <[[COORD_DIM]] x float> {{.*}} %[[COORD:[^)]+]])
+// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, [[COORD_CXX]])(ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], [[COORD_LLVM]] {{.*}} %[[COORD:[^)]+]])
// CHECK: %[[THIS_ADDR:.*]] = alloca ptr
-// CHECK: %[[COORD_ADDR:.*]] = alloca <[[COORD_DIM]] x float>
+// CHECK: %[[COORD_ADDR:.*]] = alloca [[COORD_LLVM]]
// CHECK: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// CHECK: store <[[COORD_DIM]] x float> %[[COORD]], ptr %[[COORD_ADDR]]
+// CHECK: store [[COORD_LLVM]] %[[COORD]], ptr %[[COORD_ADDR]]
// CHECK: %[[THIS_VAL:.*]] = load ptr, ptr %[[THIS_ADDR]]
// CHECK: %[[HANDLE_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL]], i32 0, i32 0
// CHECK: %[[HANDLE:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP]]
// CHECK: %[[SAMPLER_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %[[SAMPLER]], i32 0, i32 0
// CHECK: %[[SAMPLER_H:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP]]
-// CHECK: %[[COORD_VAL:.*]] = load <[[COORD_DIM]] x float>, ptr %[[COORD_ADDR]]
-// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.sample.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], target("dx.Sampler", 0) %[[SAMPLER_H]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x i32> zeroinitializer) [ "convergencectrl"(token %0) ]
-// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.sample.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE]], target("spirv.Sampler") %[[SAMPLER_H]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x i32> zeroinitializer) [ "convergencectrl"(token %0) ]
+// CHECK: %[[COORD_VAL:.*]] = load [[COORD_LLVM]], ptr %[[COORD_ADDR]]
+// DXIL: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.sample.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], target("dx.Sampler", 0) %[[SAMPLER_H]], [[COORD_LLVM]] %[[COORD_VAL]], [[OFFSET_LLVM]] [[OFFSET_ZERO]]) [ "convergencectrl"(token %0) ]
+// SPIRV: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.sample.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE]], target("spirv.Sampler") %[[SAMPLER_H]], [[COORD_LLVM]] %[[COORD_VAL]], [[OFFSET_LLVM]] [[OFFSET_ZERO]]) [ "convergencectrl"(token %0) ]
// CHECK: ret <4 x float> %[[RES]]
-// CHECK-OFFSET: define hidden {{.*}} <4 x float> @test_offset(float vector[[[COORD_DIM]]])(<[[COORD_DIM]] x float> noundef nofpclass(nan inf) %[[LOC:.*]])
-// CHECK-OFFSET: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, float vector[[[COORD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x i32> {{.*}} [[OFFSET_CONST]])
+// CHECK-OFFSET: define hidden {{.*}} <4 x float> @test_offset([[COORD_CXX]])([[COORD_LLVM]] noundef nofpclass(nan inf) %[[LOC:.*]])
+// CHECK-OFFSET: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, [[COORD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, [[OFFSET_LLVM]] {{.*}} [[OFFSET_CONST]])
// CHECK-OFFSET: ret <4 x float> %[[CALL]]
@@ -153,30 +236,30 @@ float4 test_offset(COORD_TYPE loc : LOC) : SV_Target {
}
#endif
-// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, float vector[[[COORD_DIM]]], int vector[[[DIM]]])(ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], <[[COORD_DIM]] x float> {{.*}} %[[COORD:[^,]+]], <[[DIM]] x i32> {{.*}} %[[OFFSET:[^)]+]])
+// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, [[COORD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], [[COORD_LLVM]] {{.*}} %[[COORD:[^,]+]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:[^)]+]])
// CHECK-OFFSET: %[[THIS_ADDR:.*]] = alloca ptr
-// CHECK-OFFSET: %[[COORD_ADDR:.*]] = alloca <[[COORD_DIM]] x float>
-// CHECK-OFFSET: %[[OFFSET_ADDR:.*]] = alloca <[[DIM]] x i32>
+// CHECK-OFFSET: %[[COORD_ADDR:.*]] = alloca [[COORD_LLVM]]
+// CHECK-OFFSET: %[[OFFSET_ADDR:.*]] = alloca [[OFFSET_LLVM]]
// CHECK-OFFSET: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// CHECK-OFFSET: store <[[COORD_DIM]] x float> %[[COORD]], ptr %[[COORD_ADDR]]
-// CHECK-OFFSET: store <[[DIM]] x i32> %[[OFFSET]], ptr %[[OFFSET_ADDR]]
+// CHECK-OFFSET: store [[COORD_LLVM]] %[[COORD]], ptr %[[COORD_ADDR]]
+// CHECK-OFFSET: store [[OFFSET_LLVM]] %[[OFFSET]], ptr %[[OFFSET_ADDR]]
// CHECK-OFFSET: %[[THIS_VAL:.*]] = load ptr, ptr %[[THIS_ADDR]]
// CHECK-OFFSET: %[[HANDLE_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL]], i32 0, i32 0
// CHECK-OFFSET: %[[HANDLE:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP]]
// CHECK-OFFSET: %[[SAMPLER_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %[[SAMPLER]], i32 0, i32 0
// CHECK-OFFSET: %[[SAMPLER_H:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP]]
-// CHECK-OFFSET: %[[COORD_VAL:.*]] = load <[[COORD_DIM]] x float>, ptr %[[COORD_ADDR]]
-// CHECK-OFFSET: %[[OFFSET_VAL:.*]] = load <[[DIM]] x i32>, ptr %[[OFFSET_ADDR]]
-// DXIL-OFFSET: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.sample.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], target("dx.Sampler", 0) %[[SAMPLER_H]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x i32> %[[OFFSET_VAL]]) [ "convergencectrl"(token %0) ]
-// SPIRV-OFFSET: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.sample.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE]], target("spirv.Sampler") %[[SAMPLER_H]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x i32> %[[OFFSET_VAL]]) [ "convergencectrl"(token %0) ]
+// CHECK-OFFSET: %[[COORD_VAL:.*]] = load [[COORD_LLVM]], ptr %[[COORD_ADDR]]
+// CHECK-OFFSET: %[[OFFSET_VAL:.*]] = load [[OFFSET_LLVM]], ptr %[[OFFSET_ADDR]]
+// DXIL-OFFSET: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.sample.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], target("dx.Sampler", 0) %[[SAMPLER_H]], [[COORD_LLVM]] %[[COORD_VAL]], [[OFFSET_LLVM]] %[[OFFSET_VAL]]) [ "convergencectrl"(token %0) ]
+// SPIRV-OFFSET: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.sample.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE]], target("spirv.Sampler") %[[SAMPLER_H]], [[COORD_LLVM]] %[[COORD_VAL]], [[OFFSET_LLVM]] %[[OFFSET_VAL]]) [ "convergencectrl"(token %0) ]
// CHECK-OFFSET: ret <4 x float> %[[RES]]
-// CHECK-OFFSET: define hidden {{.*}} <4 x float> @test_clamp(float vector[[[COORD_DIM]]])(<[[COORD_DIM]] x float> noundef nofpclass(nan inf) %[[LOC:.*]])
-// CHECK-OFFSET: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, float vector[[[COORD_DIM]]], int vector[[[DIM]]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}}, <[[DIM]] x i32> {{.*}} [[OFFSET_CONST]], float {{.*}} 1.000000e+00)
+// CHECK-OFFSET: define hidden {{.*}} <4 x float> @test_clamp([[COORD_CXX]])([[COORD_LLVM]] noundef nofpclass(nan inf) %[[LOC:.*]])
+// CHECK-OFFSET: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, [[COORD_CXX]], [[OFFSET_CXX]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}}, [[OFFSET_LLVM]] {{.*}} [[OFFSET_CONST]], float {{.*}} 1.000000e+00)
// CHECK-OFFSET: ret <4 x float> %[[CALL]]
// CHECK-NOOFFSET: @test_clamp(
-// CHECK-NOOFFSET: %[[CALL_NC:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, float vector[[[COORD_DIM]]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}}, float {{.*}} 1.000000e+00)
+// CHECK-NOOFFSET: %[[CALL_NC:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, [[COORD_CXX]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}}, float {{.*}} 1.000000e+00)
// CHECK-NOOFFSET: ret <4 x float> %[[CALL_NC]]
#ifdef HAS_OFFSET
@@ -191,33 +274,34 @@ float4 test_clamp(COORD_TYPE loc : LOC) : SV_Target {
}
#endif
-// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, float vector[[[COORD_DIM]]], int vector[[[DIM]]], float)(ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], <[[COORD_DIM]] x float> {{.*}} %[[COORD:[^,]+]], <[[DIM]] x i32> {{.*}} %[[OFFSET:[^,]+]], float {{.*}} %[[CLAMP:[^)]+]])
+// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, [[COORD_CXX]], [[OFFSET_CXX]], float)(ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], [[COORD_LLVM]] {{.*}} %[[COORD:[^,]+]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:[^,]+]], float {{.*}} %[[CLAMP:[^)]+]])
// CHECK-OFFSET: %[[THIS_ADDR:.*]] = alloca ptr
-// CHECK-OFFSET: %[[COORD_ADDR:.*]] = alloca <[[COORD_DIM]] x float>
-// CHECK-OFFSET: %[[OFFSET_ADDR:.*]] = alloca <[[DIM]] x i32>
+// CHECK-OFFSET: %[[COORD_ADDR:.*]] = alloca [[COORD_LLVM]]
+// CHECK-OFFSET: %[[OFFSET_ADDR:.*]] = alloca [[OFFSET_LLVM]]
// CHECK-OFFSET: %[[CLAMP_ADDR:.*]] = alloca float
// CHECK-OFFSET: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// CHECK-OFFSET: store <[[COORD_DIM]] x float> %[[COORD]], ptr %[[COORD_ADDR]]
-// CHECK-OFFSET: store <[[DIM]] x i32> %[[OFFSET]], ptr %[[OFFSET_ADDR]]
+// CHECK-OFFSET: store [[COORD_LLVM]] %[[COORD]], ptr %[[COORD_ADDR]]
+// CHECK-OFFSET: store [[OFFSET_LLVM]] %[[OFFSET]], ptr %[[OFFSET_ADDR]]
// CHECK-OFFSET: store float %[[CLAMP]], ptr %[[CLAMP_ADDR]]
// CHECK-OFFSET: %[[THIS_VAL:.*]] = load ptr, ptr %[[THIS_ADDR]]
// CHECK-OFFSET: %[[HANDLE_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL]], i32 0, i32 0
// CHECK-OFFSET: %[[HANDLE:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP]]
// CHECK-OFFSET: %[[SAMPLER_GEP:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %[[SAMPLER]], i32 0, i32 0
// CHECK-OFFSET: %[[SAMPLER_H:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP]]
-// CHECK-OFFSET: %[[COORD_VAL:.*]] = load <[[COORD_DIM]] x float>, ptr %[[COORD_ADDR]]
-// CHECK-OFFSET: %[[OFFSET_VAL:.*]] = load <[[DIM]] x i32>, ptr %[[OFFSET_ADDR]]
+// CHECK-OFFSET: %[[COORD_VAL:.*]] = load [[COORD_LLVM]], ptr %[[COORD_ADDR]]
+// CHECK-OFFSET: %[[OFFSET_VAL:.*]] = load [[OFFSET_LLVM]], ptr %[[OFFSET_ADDR]]
// CHECK-OFFSET: %[[CLAMP_VAL:.*]] = load float, ptr %[[CLAMP_ADDR]]
-// DXIL-OFFSET: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.sample.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], target("dx.Sampler", 0) %[[SAMPLER_H]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x i32> %[[OFFSET_VAL]], float %[[CLAMP_VAL]]) [ "convergencectrl"(token %0) ]
-// SPIRV-OFFSET: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.sample.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE]], target("spirv.Sampler") %[[SAMPLER_H]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x i32> %[[OFFSET_VAL]], float %[[CLAMP_VAL]]) [ "convergencectrl"(token %0) ]
+// DXIL-OFFSET: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.sample.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE]], target("dx.Sampler", 0) %[[SAMPLER_H]], [[COORD_LLVM]] %[[COORD_VAL]], [[OFFSET_LLVM]] %[[OFFSET_VAL]], float %[[CLAMP_VAL]]) [ "convergencectrl"(token %0) ]
+// SPIRV-OFFSET: %[[RES:.*]] = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.sample.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE]], target("spirv.Sampler") %[[SAMPLER_H]], [[COORD_LLVM]] %[[COORD_VAL]], [[OFFSET_LLVM]] %[[OFFSET_VAL]], float %[[CLAMP_VAL]]) [ "convergencectrl"(token %0) ]
// CHECK-OFFSET: ret <4 x float> %[[RES]]
-// CHECK-NOOFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, float vector[[[COORD_DIM]]], float)(
+// CHECK-NOOFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::Sample(hlsl::SamplerState, [[COORD_CXX]], float)(
// CHECK-NOOFFSET: %[[THIS_VAL_NC:.*]] = load ptr, ptr %{{.*}}
// CHECK-NOOFFSET: %[[HANDLE_GEP_NC:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL_NC]], i32 0, i32 0
// CHECK-NOOFFSET: %[[HANDLE_NC:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP_NC]]
// CHECK-NOOFFSET: %[[SAMPLER_GEP_NC:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %{{.*}}, i32 0, i32 0
// CHECK-NOOFFSET: %[[SAMPLER_H_NC:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP_NC]]
+// CHECK-NOOFFSET: %[[COORD_VAL_NC:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK-NOOFFSET: %[[CLAMP_VAL_NC:.*]] = load float, ptr %{{.*}}
-// DXIL-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.sample.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE_NC]], target("dx.Sampler", 0) %[[SAMPLER_H_NC]], <[[COORD_DIM]] x float> %{{.*}}, <[[DIM]] x i32> zeroinitializer, float %[[CLAMP_VAL_NC]])
-// SPIRV-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.sample.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE_NC]], target("spirv.Sampler") %[[SAMPLER_H_NC]], <[[COORD_DIM]] x float> %{{.*}}, <[[DIM]] x i32> zeroinitializer, float %[[CLAMP_VAL_NC]])
+// DXIL-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.sample.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE_NC]], target("dx.Sampler", 0) %[[SAMPLER_H_NC]], [[COORD_LLVM]] %{{.*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]], float %[[CLAMP_VAL_NC]])
+// SPIRV-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.sample.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE_NC]], target("spirv.Sampler") %[[SAMPLER_H_NC]], [[COORD_LLVM]] %{{.*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]], float %[[CLAMP_VAL_NC]])
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
index 1de79c9db3b58..6889b4e9eb694 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
@@ -1,82 +1,163 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DDXIL_TY=1 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=6 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>"
+// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3
+// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3
+// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
+// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int" \
+// RUN: -DINDEX_CXX_I=int -DGRAD_LLVM=float -DGRAD_CXX=float \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
// RUN: -DCOORD_TYPE=float3 %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
+// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
// RUN: -DCOORD_TYPE=float3 %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -88,6 +169,8 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_DIM sample location components (DIM plus the array slice)
+// GRAD_CXX ddx/ddy type in the C++ signature
+// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// DIM number of resource dimensions (offset, ddx/ddy, LOD
@@ -119,26 +202,27 @@
TEXTURE<float4> t;
SamplerState s;
-// CHECK: @test_bias(float vector[[[COORD_DIM]]])
-// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, float vector[[[COORD_DIM]]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00)
+// CHECK: @test_bias([[COORD_CXX]])
+// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, [[COORD_CXX]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00)
// CHECK: ret <4 x float> %[[CALL]]
float4 test_bias(COORD_TYPE loc : LOC) : SV_Target {
return t.SampleBias(s, loc, 0.0f);
}
-// CHECK: define linkonce_odr {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, float vector[[[COORD_DIM]]], float)(
+// CHECK: define linkonce_odr {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, [[COORD_CXX]], float)(
// CHECK: %[[THIS_VAL1:.*]] = load ptr, ptr %{{.*}}
// CHECK: %[[HANDLE_GEP1:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL1]], i32 0, i32 0
// CHECK: %[[HANDLE1:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP1]]
// CHECK: %[[SAMPLER_GEP1:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %{{.*}}, i32 0, i32 0
// CHECK: %[[SAMPLER_H1:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP1]]
+// CHECK: %[[COORD_VAL1:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK: %[[BIAS_VAL1:.*]] = load float, ptr %{{.*}}
-// DXIL: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplebias.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE1]], target("dx.Sampler", 0) %[[SAMPLER_H1]], <[[COORD_DIM]] x float> %{{.*}}, float %[[BIAS_VAL1]], <[[DIM]] x i32> zeroinitializer) [ "convergencectrl"(token %0) ]
-// SPIRV: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplebias.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE1]], target("spirv.Sampler") %[[SAMPLER_H1]], <[[COORD_DIM]] x float> %{{.*}}, float %[[BIAS_VAL1]], <[[DIM]] x i32> zeroinitializer) [ "convergencectrl"(token %0) ]
+// DXIL: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplebias.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE1]], target("dx.Sampler", 0) %[[SAMPLER_H1]], [[COORD_LLVM]] %[[COORD_VAL1]], float %[[BIAS_VAL1]], [[OFFSET_LLVM]] [[OFFSET_ZERO]]) [ "convergencectrl"(token %0) ]
+// SPIRV: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplebias.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE1]], target("spirv.Sampler") %[[SAMPLER_H1]], [[COORD_LLVM]] %[[COORD_VAL1]], float %[[BIAS_VAL1]], [[OFFSET_LLVM]] [[OFFSET_ZERO]]) [ "convergencectrl"(token %0) ]
-// CHECK-OFFSET: @test_offset(float vector[[[COORD_DIM]]])
-// CHECK-OFFSET: %[[CALL_OFFSET:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, <[[DIM]] x i32> noundef [[OFFSET_CONST]])
+// CHECK-OFFSET: @test_offset([[COORD_CXX]])
+// CHECK-OFFSET: %[[CALL_OFFSET:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, [[COORD_CXX]], float, [[OFFSET_CXX]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// CHECK-OFFSET: ret <4 x float> %[[CALL_OFFSET]]
@@ -148,22 +232,23 @@ float4 test_offset(COORD_TYPE loc : LOC) : SV_Target {
}
#endif
-// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]])(
+// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, [[COORD_CXX]], float, [[OFFSET_CXX]])(
// CHECK-OFFSET: %[[THIS_VAL2:.*]] = load ptr, ptr %{{.*}}
// CHECK-OFFSET: %[[HANDLE_GEP2:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL2]], i32 0, i32 0
// CHECK-OFFSET: %[[HANDLE2:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP2]]
// CHECK-OFFSET: %[[SAMPLER_GEP2:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %{{.*}}, i32 0, i32 0
// CHECK-OFFSET: %[[SAMPLER_H2:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP2]]
+// CHECK-OFFSET: %[[COORD_VAL2:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK-OFFSET: %[[BIAS_VAL2:.*]] = load float, ptr %{{.*}}
// DXIL-OFFSET: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplebias.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]])
// SPIRV-OFFSET: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplebias.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]])
-// CHECK-OFFSET: @test_clamp(float vector[[[COORD_DIM]]])
-// CHECK-OFFSET: %[[CALL_CLAMP:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, <[[DIM]] x i32> noundef [[OFFSET_CONST]], float {{.*}} 1.000000e+00)
+// CHECK-OFFSET: @test_clamp([[COORD_CXX]])
+// CHECK-OFFSET: %[[CALL_CLAMP:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, [[COORD_CXX]], float, [[OFFSET_CXX]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]], float {{.*}} 1.000000e+00)
// CHECK-OFFSET: ret <4 x float> %[[CALL_CLAMP]]
// CHECK-NOOFFSET: @test_clamp(
-// CHECK-NOOFFSET: %[[CALL_NC:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, float vector[[[COORD_DIM]]], float, float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, float {{.*}} 1.000000e+00)
+// CHECK-NOOFFSET: %[[CALL_NC:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, [[COORD_CXX]], float, float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, float {{.*}} 1.000000e+00)
// CHECK-NOOFFSET: ret <4 x float> %[[CALL_NC]]
#ifdef HAS_OFFSET
@@ -178,24 +263,26 @@ float4 test_clamp(COORD_TYPE loc : LOC) : SV_Target {
}
#endif
-// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]], float)(
+// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, [[COORD_CXX]], float, [[OFFSET_CXX]], float)(
// CHECK-OFFSET: %[[THIS_VAL3:.*]] = load ptr, ptr %{{.*}}
// CHECK-OFFSET: %[[HANDLE_GEP3:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL3]], i32 0, i32 0
// CHECK-OFFSET: %[[HANDLE3:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP3]]
// CHECK-OFFSET: %[[SAMPLER_GEP3:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %{{.*}}, i32 0, i32 0
// CHECK-OFFSET: %[[SAMPLER_H3:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP3]]
+// CHECK-OFFSET: %[[COORD_VAL3:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK-OFFSET: %[[BIAS_VAL3:.*]] = load float, ptr %{{.*}}
// CHECK-OFFSET: %[[CLAMP_VAL3:.*]] = load float, ptr %{{.*}}
-// DXIL-OFFSET: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplebias.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE3]], target("dx.Sampler", 0) %[[SAMPLER_H3]], <[[COORD_DIM]] x float> %{{.*}}, float %[[BIAS_VAL3]], <[[DIM]] x i32> %{{.*}}, float %[[CLAMP_VAL3]]) [ "convergencectrl"(token %0) ]
-// SPIRV-OFFSET: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplebias.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE3]], target("spirv.Sampler") %[[SAMPLER_H3]], <[[COORD_DIM]] x float> %{{.*}}, float %[[BIAS_VAL3]], <[[DIM]] x i32> %{{.*}}, float %[[CLAMP_VAL3]]) [ "convergencectrl"(token %0) ]
+// DXIL-OFFSET: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplebias.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE3]], target("dx.Sampler", 0) %[[SAMPLER_H3]], [[COORD_LLVM]] %{{.*}}, float %[[BIAS_VAL3]], [[OFFSET_LLVM]] %{{.*}}, float %[[CLAMP_VAL3]]) [ "convergencectrl"(token %0) ]
+// SPIRV-OFFSET: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplebias.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE3]], target("spirv.Sampler") %[[SAMPLER_H3]], [[COORD_LLVM]] %{{.*}}, float %[[BIAS_VAL3]], [[OFFSET_LLVM]] %{{.*}}, float %[[CLAMP_VAL3]]) [ "convergencectrl"(token %0) ]
-// CHECK-NOOFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, float vector[[[COORD_DIM]]], float, float)(
+// CHECK-NOOFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleBias(hlsl::SamplerState, [[COORD_CXX]], float, float)(
// CHECK-NOOFFSET: %[[THIS_VAL_NC:.*]] = load ptr, ptr %{{.*}}
// CHECK-NOOFFSET: %[[HANDLE_GEP_NC:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL_NC]], i32 0, i32 0
// CHECK-NOOFFSET: %[[HANDLE_NC:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP_NC]]
// CHECK-NOOFFSET: %[[SAMPLER_GEP_NC:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %{{.*}}, i32 0, i32 0
// CHECK-NOOFFSET: %[[SAMPLER_H_NC:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP_NC]]
+// CHECK-NOOFFSET: %[[COORD_VAL_NC:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK-NOOFFSET: %[[BIAS_VAL_NC:.*]] = load float, ptr %{{.*}}
// CHECK-NOOFFSET: %[[CLAMP_VAL_NC:.*]] = load float, ptr %{{.*}}
-// DXIL-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplebias.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE_NC]], target("dx.Sampler", 0) %[[SAMPLER_H_NC]], <[[COORD_DIM]] x float> %{{.*}}, float %[[BIAS_VAL_NC]], <[[DIM]] x i32> zeroinitializer, float %[[CLAMP_VAL_NC]])
-// SPIRV-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplebias.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE_NC]], target("spirv.Sampler") %[[SAMPLER_H_NC]], <[[COORD_DIM]] x float> %{{.*}}, float %[[BIAS_VAL_NC]], <[[DIM]] x i32> zeroinitializer, float %[[CLAMP_VAL_NC]])
+// DXIL-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplebias.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE_NC]], target("dx.Sampler", 0) %[[SAMPLER_H_NC]], [[COORD_LLVM]] %{{.*}}, float %[[BIAS_VAL_NC]], [[OFFSET_LLVM]] [[OFFSET_ZERO]], float %[[CLAMP_VAL_NC]])
+// SPIRV-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplebias.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE_NC]], target("spirv.Sampler") %[[SAMPLER_H_NC]], [[COORD_LLVM]] %{{.*}}, float %[[BIAS_VAL_NC]], [[OFFSET_LLVM]] [[OFFSET_ZERO]], float %[[CLAMP_VAL_NC]])
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
index babfb6086385a..f4daf941f63f8 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
@@ -1,65 +1,140 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=1 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=6 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3
+// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3
+// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
+// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int" \
+// RUN: -DINDEX_CXX_I=int -DGRAD_LLVM=float -DGRAD_CXX=float \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -71,6 +146,8 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_DIM sample location components (DIM plus the array slice)
+// GRAD_CXX ddx/ddy type in the C++ signature
+// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// DIM number of resource dimensions (offset, ddx/ddy, LOD
@@ -102,28 +179,28 @@
TEXTURE<float4> t;
SamplerComparisonState s;
-// CHECK: @test_cmp(float vector[[[COORD_DIM]]], float)
-// CHECK: %[[CALL:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00)
+// CHECK: @test_cmp([[COORD_CXX]], float)
+// CHECK: %[[CALL:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, [[COORD_CXX]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00)
// CHECK: ret float %[[CALL]]
float test_cmp(COORD_TYPE loc : LOC, float cmp : CMP) : SV_Target {
return t.SampleCmp(s, loc, 0.0f);
}
-// CHECK: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float)(
-// CHECK-SAME: ptr noundef nonnull {{.*}} %[[THIS1:[^,]+]], ptr noundef byval(%"class.hlsl::SamplerComparisonState") {{.*}} %[[SAMPLER1:[^,]+]], <[[COORD_DIM]] x float> noundef nofpclass(nan inf) %[[COORD1:[^,]+]], float noundef nofpclass(nan inf) %[[CMP1:[^)]+]])
+// CHECK: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, [[COORD_CXX]], float)(
+// CHECK-SAME: ptr noundef nonnull {{.*}} %[[THIS1:[^,]+]], ptr noundef byval(%"class.hlsl::SamplerComparisonState") {{.*}} %[[SAMPLER1:[^,]+]], [[COORD_LLVM]] noundef nofpclass(nan inf) %[[COORD1:[^,]+]], float noundef nofpclass(nan inf) %[[CMP1:[^)]+]])
// CHECK: %[[THIS_VAL1:.*]] = load ptr, ptr %{{.*}}
// CHECK: %[[HANDLE_GEP1:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL1]], i32 0, i32 0
// CHECK: %[[HANDLE1:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP1]]
// CHECK: %[[SAMPLER_GEP1:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerComparisonState", ptr %[[SAMPLER1]], i32 0, i32 0
// CHECK: %[[SAMPLER_H1:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP1]]
-// CHECK: %[[COORD_VAL1:.*]] = load <[[COORD_DIM]] x float>, ptr %{{.*}}
+// CHECK: %[[COORD_VAL1:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK: %[[CMP_VAL1:.*]] = load float, ptr %{{.*}}
-// DXIL: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmp.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE1]], target("dx.Sampler", 0) %[[SAMPLER_H1]], <[[COORD_DIM]] x float> %[[COORD_VAL1]], float %[[CMP_VAL1]], <[[DIM]] x i32> zeroinitializer)
-// SPIRV: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmp.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE1]], target("spirv.Sampler") %[[SAMPLER_H1]], <[[COORD_DIM]] x float> %[[COORD_VAL1]], float %[[CMP_VAL1]], <[[DIM]] x i32> zeroinitializer)
+// DXIL: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmp.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE1]], target("dx.Sampler", 0) %[[SAMPLER_H1]], [[COORD_LLVM]] %[[COORD_VAL1]], float %[[CMP_VAL1]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmp.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE1]], target("spirv.Sampler") %[[SAMPLER_H1]], [[COORD_LLVM]] %[[COORD_VAL1]], float %[[CMP_VAL1]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
-// CHECK-OFFSET: @test_offset(float vector[[[COORD_DIM]]], float)
-// CHECK-OFFSET: %[[CALL_OFFSET:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, <[[DIM]] x i32> noundef [[OFFSET_CONST]])
+// CHECK-OFFSET: @test_offset([[COORD_CXX]], float)
+// CHECK-OFFSET: %[[CALL_OFFSET:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, [[COORD_CXX]], float, [[OFFSET_CXX]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// CHECK-OFFSET: ret float %[[CALL_OFFSET]]
@@ -133,25 +210,25 @@ float test_offset(COORD_TYPE loc : LOC, float cmp : CMP) : SV_Target {
}
#endif
-// CHECK-OFFSET: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]])(
-// CHECK-OFFSET-SAME: ptr noundef nonnull {{.*}} %[[THIS2:[^,]+]], ptr noundef byval(%"class.hlsl::SamplerComparisonState") {{.*}} %[[SAMPLER2:[^,]+]], <[[COORD_DIM]] x float> noundef nofpclass(nan inf) %[[COORD2:[^,]+]], float noundef nofpclass(nan inf) %[[CMP2:[^,]+]], <[[DIM]] x i32> noundef %[[OFFSET2:[^)]+]])
+// CHECK-OFFSET: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, [[COORD_CXX]], float, [[OFFSET_CXX]])(
+// CHECK-OFFSET-SAME: ptr noundef nonnull {{.*}} %[[THIS2:[^,]+]], ptr noundef byval(%"class.hlsl::SamplerComparisonState") {{.*}} %[[SAMPLER2:[^,]+]], [[COORD_LLVM]] noundef nofpclass(nan inf) %[[COORD2:[^,]+]], float noundef nofpclass(nan inf) %[[CMP2:[^,]+]], [[OFFSET_LLVM]] noundef %[[OFFSET2:[^)]+]])
// CHECK-OFFSET: %[[THIS_VAL2:.*]] = load ptr, ptr %{{.*}}
// CHECK-OFFSET: %[[HANDLE_GEP2:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL2]], i32 0, i32 0
// CHECK-OFFSET: %[[HANDLE2:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP2]]
// CHECK-OFFSET: %[[SAMPLER_GEP2:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerComparisonState", ptr %[[SAMPLER2]], i32 0, i32 0
// CHECK-OFFSET: %[[SAMPLER_H2:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP2]]
-// CHECK-OFFSET: %[[COORD_VAL2:.*]] = load <[[COORD_DIM]] x float>, ptr %{{.*}}
+// CHECK-OFFSET: %[[COORD_VAL2:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK-OFFSET: %[[CMP_VAL2:.*]] = load float, ptr %{{.*}}
-// CHECK-OFFSET: %[[OFFSET_VAL2:.*]] = load <[[DIM]] x i32>, ptr %{{.*}}
-// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmp.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE2]], target("dx.Sampler", 0) %[[SAMPLER_H2]], <[[COORD_DIM]] x float> %[[COORD_VAL2]], float %[[CMP_VAL2]], <[[DIM]] x i32> %[[OFFSET_VAL2]])
-// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmp.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE2]], target("spirv.Sampler") %[[SAMPLER_H2]], <[[COORD_DIM]] x float> %[[COORD_VAL2]], float %[[CMP_VAL2]], <[[DIM]] x i32> %[[OFFSET_VAL2]])
+// CHECK-OFFSET: %[[OFFSET_VAL2:.*]] = load [[OFFSET_LLVM]], ptr %{{.*}}
+// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmp.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE2]], target("dx.Sampler", 0) %[[SAMPLER_H2]], [[COORD_LLVM]] %[[COORD_VAL2]], float %[[CMP_VAL2]], [[OFFSET_LLVM]] %[[OFFSET_VAL2]])
+// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmp.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE2]], target("spirv.Sampler") %[[SAMPLER_H2]], [[COORD_LLVM]] %[[COORD_VAL2]], float %[[CMP_VAL2]], [[OFFSET_LLVM]] %[[OFFSET_VAL2]])
-// CHECK-OFFSET: @test_clamp(float vector[[[COORD_DIM]]], float)
-// CHECK-OFFSET: %[[CALL_CLAMP:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, <[[DIM]] x i32> noundef [[OFFSET_CONST]], float {{.*}} 1.000000e+00)
+// CHECK-OFFSET: @test_clamp([[COORD_CXX]], float)
+// CHECK-OFFSET: %[[CALL_CLAMP:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, [[COORD_CXX]], float, [[OFFSET_CXX]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]], float {{.*}} 1.000000e+00)
// CHECK-OFFSET: ret float %[[CALL_CLAMP]]
// CHECK-NOOFFSET: @test_clamp(
-// CHECK-NOOFFSET: %[[CALL_NC:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float, float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, float {{.*}} 1.000000e+00)
+// CHECK-NOOFFSET: %[[CALL_NC:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, [[COORD_CXX]], float, float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, float {{.*}} 1.000000e+00)
// CHECK-NOOFFSET: ret float %[[CALL_NC]]
#ifdef HAS_OFFSET
@@ -166,27 +243,28 @@ float test_clamp(COORD_TYPE loc : LOC, float cmp : CMP) : SV_Target {
}
#endif
-// CHECK-OFFSET: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]], float)(
-// CHECK-OFFSET-SAME: ptr noundef nonnull {{.*}} %[[THIS3:[^,]+]], ptr noundef byval(%"class.hlsl::SamplerComparisonState") {{.*}} %[[SAMPLER3:[^,]+]], <[[COORD_DIM]] x float> noundef nofpclass(nan inf) %[[COORD3:[^,]+]], float noundef nofpclass(nan inf) %[[CMP3:[^,]+]], <[[DIM]] x i32> noundef %[[OFFSET3:[^,]+]], float noundef nofpclass(nan inf) %[[CLAMP3:[^)]+]])
+// CHECK-OFFSET: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, [[COORD_CXX]], float, [[OFFSET_CXX]], float)(
+// CHECK-OFFSET-SAME: ptr noundef nonnull {{.*}} %[[THIS3:[^,]+]], ptr noundef byval(%"class.hlsl::SamplerComparisonState") {{.*}} %[[SAMPLER3:[^,]+]], [[COORD_LLVM]] noundef nofpclass(nan inf) %[[COORD3:[^,]+]], float noundef nofpclass(nan inf) %[[CMP3:[^,]+]], [[OFFSET_LLVM]] noundef %[[OFFSET3:[^,]+]], float noundef nofpclass(nan inf) %[[CLAMP3:[^)]+]])
// CHECK-OFFSET: %[[THIS_VAL3:.*]] = load ptr, ptr %{{.*}}
// CHECK-OFFSET: %[[HANDLE_GEP3:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL3]], i32 0, i32 0
// CHECK-OFFSET: %[[HANDLE3:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP3]]
// CHECK-OFFSET: %[[SAMPLER_GEP3:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerComparisonState", ptr %[[SAMPLER3]], i32 0, i32 0
// CHECK-OFFSET: %[[SAMPLER_H3:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP3]]
-// CHECK-OFFSET: %[[COORD_VAL3:.*]] = load <[[COORD_DIM]] x float>, ptr %{{.*}}
+// CHECK-OFFSET: %[[COORD_VAL3:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK-OFFSET: %[[CMP_VAL3:.*]] = load float, ptr %{{.*}}
-// CHECK-OFFSET: %[[OFFSET_VAL3:.*]] = load <[[DIM]] x i32>, ptr %{{.*}}
+// CHECK-OFFSET: %[[OFFSET_VAL3:.*]] = load [[OFFSET_LLVM]], ptr %{{.*}}
// CHECK-OFFSET: %[[CLAMP_VAL3:.*]] = load float, ptr %{{.*}}
-// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmp.clamp.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE3]], target("dx.Sampler", 0) %[[SAMPLER_H3]], <[[COORD_DIM]] x float> %[[COORD_VAL3]], float %[[CMP_VAL3]], <[[DIM]] x i32> %[[OFFSET_VAL3]], float %[[CLAMP_VAL3]])
-// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmp.clamp.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE3]], target("spirv.Sampler") %[[SAMPLER_H3]], <[[COORD_DIM]] x float> %[[COORD_VAL3]], float %[[CMP_VAL3]], <[[DIM]] x i32> %[[OFFSET_VAL3]], float %[[CLAMP_VAL3]])
+// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmp.clamp.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE3]], target("dx.Sampler", 0) %[[SAMPLER_H3]], [[COORD_LLVM]] %[[COORD_VAL3]], float %[[CMP_VAL3]], [[OFFSET_LLVM]] %[[OFFSET_VAL3]], float %[[CLAMP_VAL3]])
+// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmp.clamp.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE3]], target("spirv.Sampler") %[[SAMPLER_H3]], [[COORD_LLVM]] %[[COORD_VAL3]], float %[[CMP_VAL3]], [[OFFSET_LLVM]] %[[OFFSET_VAL3]], float %[[CLAMP_VAL3]])
-// CHECK-NOOFFSET: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float, float)(
+// CHECK-NOOFFSET: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmp(hlsl::SamplerComparisonState, [[COORD_CXX]], float, float)(
// CHECK-NOOFFSET: %[[THIS_VAL_NC:.*]] = load ptr, ptr %{{.*}}
// CHECK-NOOFFSET: %[[HANDLE_GEP_NC:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL_NC]], i32 0, i32 0
// CHECK-NOOFFSET: %[[HANDLE_NC:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP_NC]]
// CHECK-NOOFFSET: %[[SAMPLER_GEP_NC:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerComparisonState", ptr %{{.*}}, i32 0, i32 0
// CHECK-NOOFFSET: %[[SAMPLER_H_NC:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP_NC]]
+// CHECK-NOOFFSET: %[[COORD_VAL_NC:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK-NOOFFSET: %[[CMP_VAL_NC:.*]] = load float, ptr %{{.*}}
// CHECK-NOOFFSET: %[[CLAMP_VAL_NC:.*]] = load float, ptr %{{.*}}
-// DXIL-NOOFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmp.clamp.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE_NC]], target("dx.Sampler", 0) %[[SAMPLER_H_NC]], <[[COORD_DIM]] x float> %{{.*}}, float %[[CMP_VAL_NC]], <[[DIM]] x i32> zeroinitializer, float %[[CLAMP_VAL_NC]])
-// SPIRV-NOOFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmp.clamp.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE_NC]], target("spirv.Sampler") %[[SAMPLER_H_NC]], <[[COORD_DIM]] x float> %{{.*}}, float %[[CMP_VAL_NC]], <[[DIM]] x i32> zeroinitializer, float %[[CLAMP_VAL_NC]])
+// DXIL-NOOFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmp.clamp.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE_NC]], target("dx.Sampler", 0) %[[SAMPLER_H_NC]], [[COORD_LLVM]] %{{.*}}, float %[[CMP_VAL_NC]], [[OFFSET_LLVM]] [[OFFSET_ZERO]], float %[[CLAMP_VAL_NC]])
+// SPIRV-NOOFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmp.clamp.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE_NC]], target("spirv.Sampler") %[[SAMPLER_H_NC]], [[COORD_LLVM]] %{{.*}}, float %[[CMP_VAL_NC]], [[OFFSET_LLVM]] [[OFFSET_ZERO]], float %[[CLAMP_VAL_NC]])
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
index c2593ac370cbc..0b02ccefc8227 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
@@ -1,63 +1,137 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
+// RUN: --check-prefixes=CHECK,DXIL,CHECK-OFFSET,DXIL-OFFSET -DDXIL_TY=1 \
+// RUN: -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,DXIL,CHECK-OFFSET,DXIL-OFFSET -DDXIL_TY=6 \
+// RUN: -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,DXIL,CHECK-OFFSET,DXIL-OFFSET -DDXIL_TY=2 \
-// RUN: -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL -DDXIL_TY=5 -DRW=0 -DDIM=3
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,DXIL -DDXIL_TY=5 -DRW=0 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,DXIL -DDXIL_TY=9 -DRW=0 -DDIM=3
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: --check-prefixes=CHECK,DXIL -DDXIL_TY=9 -DRW=0 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
+// RUN: --check-prefixes=CHECK,SPIRV,CHECK-OFFSET,SPIRV-OFFSET -DARRAYED=0 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,SPIRV,CHECK-OFFSET,SPIRV-OFFSET -DARRAYED=1 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,SPIRV,CHECK-OFFSET,SPIRV-OFFSET -DARRAYED=0 \
// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 \
-// RUN: -DSPV_DIM=3 -DDIM=3
+// RUN: -DSPV_DIM=3 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 \
-// RUN: -DSPV_DIM=3 -DDIM=3
+// RUN: -DSPV_DIM=3 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,DXIL,CHECK-OFFSET,DXIL-OFFSET -DDXIL_TY=7 \
-// RUN: -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,CHECK-OFFSET,SPIRV-OFFSET -DARRAYED=1 \
// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -69,6 +143,8 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_DIM sample location components (DIM plus the array slice)
+// GRAD_CXX ddx/ddy type in the C++ signature
+// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// DIM number of resource dimensions (offset, ddx/ddy, LOD
@@ -86,28 +162,28 @@
TEXTURE<float4> t;
SamplerComparisonState s;
-// CHECK: @test_cmp_level_zero(float vector[[[COORD_DIM]]], float)
-// CHECK: %[[CALL:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmpLevelZero(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00)
+// CHECK: @test_cmp_level_zero([[COORD_CXX]], float)
+// CHECK: %[[CALL:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmpLevelZero(hlsl::SamplerComparisonState, [[COORD_CXX]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00)
// CHECK: ret float %[[CALL]]
float test_cmp_level_zero(COORD_TYPE loc : LOC, float cmp : CMP) : SV_Target {
return t.SampleCmpLevelZero(s, loc, 0.0f);
}
-// CHECK: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmpLevelZero(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float)(
-// CHECK-SAME: ptr noundef nonnull {{.*}} %[[THIS1:[^,]+]], ptr noundef byval(%"class.hlsl::SamplerComparisonState") {{.*}} %[[SAMPLER1:[^,]+]], <[[COORD_DIM]] x float> noundef nofpclass(nan inf) %[[COORD1:[^,]+]], float noundef nofpclass(nan inf) %[[CMP1:[^)]+]])
+// CHECK: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmpLevelZero(hlsl::SamplerComparisonState, [[COORD_CXX]], float)(
+// CHECK-SAME: ptr noundef nonnull {{.*}} %[[THIS1:[^,]+]], ptr noundef byval(%"class.hlsl::SamplerComparisonState") {{.*}} %[[SAMPLER1:[^,]+]], [[COORD_LLVM]] noundef nofpclass(nan inf) %[[COORD1:[^,]+]], float noundef nofpclass(nan inf) %[[CMP1:[^)]+]])
// CHECK: %[[THIS_VAL1:.*]] = load ptr, ptr %{{.*}}
// CHECK: %[[HANDLE_GEP1:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL1]], i32 0, i32 0
// CHECK: %[[HANDLE1:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP1]]
// CHECK: %[[SAMPLER_GEP1:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerComparisonState", ptr %[[SAMPLER1]], i32 0, i32 0
// CHECK: %[[SAMPLER_H1:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP1]]
-// CHECK: %[[COORD_VAL1:.*]] = load <[[COORD_DIM]] x float>, ptr %{{.*}}
+// CHECK: %[[COORD_VAL1:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK: %[[CMP_VAL1:.*]] = load float, ptr %{{.*}}
-// DXIL: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmplevelzero.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE1]], target("dx.Sampler", 0) %[[SAMPLER_H1]], <[[COORD_DIM]] x float> %[[COORD_VAL1]], float %[[CMP_VAL1]], <[[DIM]] x i32> zeroinitializer)
-// SPIRV: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmplevelzero.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE1]], target("spirv.Sampler") %[[SAMPLER_H1]], <[[COORD_DIM]] x float> %[[COORD_VAL1]], float %[[CMP_VAL1]], <[[DIM]] x i32> zeroinitializer)
+// DXIL: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmplevelzero.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE1]], target("dx.Sampler", 0) %[[SAMPLER_H1]], [[COORD_LLVM]] %[[COORD_VAL1]], float %[[CMP_VAL1]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmplevelzero.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE1]], target("spirv.Sampler") %[[SAMPLER_H1]], [[COORD_LLVM]] %[[COORD_VAL1]], float %[[CMP_VAL1]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
-// CHECK-OFFSET: @test_cmp_level_zero_offset(float vector[[[COORD_DIM]]], float)
-// CHECK-OFFSET: %[[CALL_OFFSET:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmpLevelZero(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, <[[DIM]] x i32> noundef [[OFFSET_CONST]])
+// CHECK-OFFSET: @test_cmp_level_zero_offset([[COORD_CXX]], float)
+// CHECK-OFFSET: %[[CALL_OFFSET:.*]] = call {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmpLevelZero(hlsl::SamplerComparisonState, [[COORD_CXX]], float, [[OFFSET_CXX]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerComparisonState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// CHECK-OFFSET: ret float %[[CALL_OFFSET]]
#ifdef HAS_OFFSET
@@ -116,15 +192,15 @@ float test_cmp_level_zero_offset(COORD_TYPE loc : LOC, float cmp : CMP) : SV_Tar
}
#endif
-// CHECK-OFFSET: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmpLevelZero(hlsl::SamplerComparisonState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]])(
-// CHECK-OFFSET-SAME: ptr noundef nonnull {{.*}} %[[THIS2:[^,]+]], ptr noundef byval(%"class.hlsl::SamplerComparisonState") {{.*}} %[[SAMPLER2:[^,]+]], <[[COORD_DIM]] x float> noundef nofpclass(nan inf) %[[COORD2:[^,]+]], float noundef nofpclass(nan inf) %[[CMP2:[^,]+]], <[[DIM]] x i32> noundef %[[OFFSET2:[^)]+]])
+// CHECK-OFFSET: define linkonce_odr hidden {{.*}} float @hlsl::[[TEXTURE]]<float vector[4]>::SampleCmpLevelZero(hlsl::SamplerComparisonState, [[COORD_CXX]], float, [[OFFSET_CXX]])(
+// CHECK-OFFSET-SAME: ptr noundef nonnull {{.*}} %[[THIS2:[^,]+]], ptr noundef byval(%"class.hlsl::SamplerComparisonState") {{.*}} %[[SAMPLER2:[^,]+]], [[COORD_LLVM]] noundef nofpclass(nan inf) %[[COORD2:[^,]+]], float noundef nofpclass(nan inf) %[[CMP2:[^,]+]], [[OFFSET_LLVM]] noundef %[[OFFSET2:[^)]+]])
// CHECK-OFFSET: %[[THIS_VAL2:.*]] = load ptr, ptr %{{.*}}
// CHECK-OFFSET: %[[HANDLE_GEP2:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL2]], i32 0, i32 0
// CHECK-OFFSET: %[[HANDLE2:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP2]]
// CHECK-OFFSET: %[[SAMPLER_GEP2:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerComparisonState", ptr %[[SAMPLER2]], i32 0, i32 0
// CHECK-OFFSET: %[[SAMPLER_H2:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP2]]
-// CHECK-OFFSET: %[[COORD_VAL2:.*]] = load <[[COORD_DIM]] x float>, ptr %{{.*}}
+// CHECK-OFFSET: %[[COORD_VAL2:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK-OFFSET: %[[CMP_VAL2:.*]] = load float, ptr %{{.*}}
-// CHECK-OFFSET: %[[OFFSET_VAL2:.*]] = load <[[DIM]] x i32>, ptr %{{.*}}
-// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmplevelzero.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE2]], target("dx.Sampler", 0) %[[SAMPLER_H2]], <[[COORD_DIM]] x float> %[[COORD_VAL2]], float %[[CMP_VAL2]], <[[DIM]] x i32> %[[OFFSET_VAL2]])
-// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmplevelzero.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE2]], target("spirv.Sampler") %[[SAMPLER_H2]], <[[COORD_DIM]] x float> %[[COORD_VAL2]], float %[[CMP_VAL2]], <[[DIM]] x i32> %[[OFFSET_VAL2]])
+// CHECK-OFFSET: %[[OFFSET_VAL2:.*]] = load [[OFFSET_LLVM]], ptr %{{.*}}
+// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.dx.resource.samplecmplevelzero.f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE2]], target("dx.Sampler", 0) %[[SAMPLER_H2]], [[COORD_LLVM]] %[[COORD_VAL2]], float %[[CMP_VAL2]], [[OFFSET_LLVM]] %[[OFFSET_VAL2]])
+// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn float @llvm.spv.resource.samplecmplevelzero.f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE2]], target("spirv.Sampler") %[[SAMPLER_H2]], [[COORD_LLVM]] %[[COORD_VAL2]], float %[[CMP_VAL2]], [[OFFSET_LLVM]] %[[OFFSET_VAL2]])
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
index 5a1e8a640c321..82d01e36f40b1 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
@@ -1,82 +1,169 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1D \
+// RUN: -DCOORD_TYPE=float %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1D -DCOORD_DIM=1 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DDXIL_TY=1 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=6 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DGRAD_TYPE=float3 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
+// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>"
+// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3
+// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: | llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3
+// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1D \
+// RUN: -DCOORD_TYPE=float %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1D -DCOORD_DIM=1 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
+// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int" \
+// RUN: -DINDEX_CXX_I=int -DGRAD_LLVM=float -DGRAD_CXX=float \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DGRAD_TYPE=float3 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
+// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: | llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DGRAD_TYPE=float3 -DHAS_OFFSET \
+// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DGRAD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DGRAD_TYPE=float3 -DHAS_OFFSET \
+// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DGRAD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -90,6 +177,8 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_DIM sample location components (DIM plus the array slice)
+// GRAD_CXX ddx/ddy type in the C++ signature
+// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// DIM number of resource dimensions (offset, ddx/ddy, LOD
@@ -121,37 +210,37 @@
TEXTURE<float4> t;
SamplerState s;
-// CHECK: @test_grad(float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]])
-// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x float> {{.*}} %{{.*}})
+// CHECK: @test_grad([[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]])
+// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, [[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, [[GRAD_LLVM]] {{.*}} %{{.*}}, [[GRAD_LLVM]] {{.*}} %{{.*}})
// CHECK: ret <4 x float> %[[CALL]]
float4 test_grad(COORD_TYPE loc : LOC, GRAD_TYPE ddx : DDX, GRAD_TYPE ddy : DDY) : SV_Target {
return t.SampleGrad(s, loc, ddx, ddy);
}
-// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]])(
-// CHECK-SAME: ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], <[[COORD_DIM]] x float> {{.*}} %[[COORD:[^,]+]], <[[DIM]] x float> {{.*}} %[[DDX:[^,]+]], <[[DIM]] x float> {{.*}} %[[DDY:[^)]+]])
+// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, [[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]])(
+// CHECK-SAME: ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], [[COORD_LLVM]] {{.*}} %[[COORD:[^,]+]], [[GRAD_LLVM]] {{.*}} %[[DDX:[^,]+]], [[GRAD_LLVM]] {{.*}} %[[DDY:[^)]+]])
// CHECK: %[[THIS_ADDR:.*]] = alloca ptr
-// CHECK: %[[COORD_ADDR:.*]] = alloca <[[COORD_DIM]] x float>
-// CHECK: %[[DDX_ADDR:.*]] = alloca <[[DIM]] x float>
-// CHECK: %[[DDY_ADDR:.*]] = alloca <[[DIM]] x float>
+// CHECK: %[[COORD_ADDR:.*]] = alloca [[COORD_LLVM]]
+// CHECK: %[[DDX_ADDR:.*]] = alloca [[GRAD_LLVM]]
+// CHECK: %[[DDY_ADDR:.*]] = alloca [[GRAD_LLVM]]
// CHECK: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// CHECK: store <[[COORD_DIM]] x float> %[[COORD]], ptr %[[COORD_ADDR]]
-// CHECK: store <[[DIM]] x float> %[[DDX]], ptr %[[DDX_ADDR]]
-// CHECK: store <[[DIM]] x float> %[[DDY]], ptr %[[DDY_ADDR]]
+// CHECK: store [[COORD_LLVM]] %[[COORD]], ptr %[[COORD_ADDR]]
+// CHECK: store [[GRAD_LLVM]] %[[DDX]], ptr %[[DDX_ADDR]]
+// CHECK: store [[GRAD_LLVM]] %[[DDY]], ptr %[[DDY_ADDR]]
// CHECK: %[[THIS_VAL1:.*]] = load ptr, ptr %[[THIS_ADDR]]
// CHECK: %[[HANDLE_GEP1:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL1]], i32 0, i32 0
// CHECK: %[[HANDLE1:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP1]]
// CHECK: %[[SAMPLER_GEP1:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %[[SAMPLER]], i32 0, i32 0
// CHECK: %[[SAMPLER_H1:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP1]]
-// CHECK: %[[COORD_VAL:.*]] = load <[[COORD_DIM]] x float>, ptr %[[COORD_ADDR]]
-// CHECK: %[[DDX_VAL:.*]] = load <[[DIM]] x float>, ptr %[[DDX_ADDR]]
-// CHECK: %[[DDY_VAL:.*]] = load <[[DIM]] x float>, ptr %[[DDY_ADDR]]
-// DXIL: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplegrad.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE1]], target("dx.Sampler", 0) %[[SAMPLER_H1]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x float> %[[DDX_VAL]], <[[DIM]] x float> %[[DDY_VAL]], <[[DIM]] x i32> zeroinitializer)
-// SPIRV: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplegrad.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE1]], target("spirv.Sampler") %[[SAMPLER_H1]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x float> %[[DDX_VAL]], <[[DIM]] x float> %[[DDY_VAL]], <[[DIM]] x i32> zeroinitializer)
-
-// CHECK-OFFSET: @test_offset(float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]])
-// CHECK-OFFSET: %[[CALL_OFFSET:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]], int vector[[[DIM]]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x i32> noundef [[OFFSET_CONST]])
+// CHECK: %[[COORD_VAL:.*]] = load [[COORD_LLVM]], ptr %[[COORD_ADDR]]
+// CHECK: %[[DDX_VAL:.*]] = load [[GRAD_LLVM]], ptr %[[DDX_ADDR]]
+// CHECK: %[[DDY_VAL:.*]] = load [[GRAD_LLVM]], ptr %[[DDY_ADDR]]
+// DXIL: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplegrad.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE1]], target("dx.Sampler", 0) %[[SAMPLER_H1]], [[COORD_LLVM]] %[[COORD_VAL]], [[GRAD_LLVM]] %[[DDX_VAL]], [[GRAD_LLVM]] %[[DDY_VAL]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplegrad.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE1]], target("spirv.Sampler") %[[SAMPLER_H1]], [[COORD_LLVM]] %[[COORD_VAL]], [[GRAD_LLVM]] %[[DDX_VAL]], [[GRAD_LLVM]] %[[DDY_VAL]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+
+// CHECK-OFFSET: @test_offset([[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]])
+// CHECK-OFFSET: %[[CALL_OFFSET:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, [[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]], [[OFFSET_CXX]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, [[GRAD_LLVM]] {{.*}} %{{.*}}, [[GRAD_LLVM]] {{.*}} %{{.*}}, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// CHECK-OFFSET: ret <4 x float> %[[CALL_OFFSET]]
@@ -161,36 +250,36 @@ float4 test_offset(COORD_TYPE loc : LOC, GRAD_TYPE ddx : DDX, GRAD_TYPE ddy : DD
}
#endif
-// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]], int vector[[[DIM]]])(
-// CHECK-OFFSET-SAME: ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], <[[COORD_DIM]] x float> {{.*}} %[[COORD:[^,]+]], <[[DIM]] x float> {{.*}} %[[DDX:[^,]+]], <[[DIM]] x float> {{.*}} %[[DDY:[^,]+]], <[[DIM]] x i32> {{.*}} %[[OFFSET:[^)]+]])
+// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, [[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]], [[OFFSET_CXX]])(
+// CHECK-OFFSET-SAME: ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], [[COORD_LLVM]] {{.*}} %[[COORD:[^,]+]], [[GRAD_LLVM]] {{.*}} %[[DDX:[^,]+]], [[GRAD_LLVM]] {{.*}} %[[DDY:[^,]+]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:[^)]+]])
// CHECK-OFFSET: %[[THIS_ADDR:.*]] = alloca ptr
-// CHECK-OFFSET: %[[COORD_ADDR:.*]] = alloca <[[COORD_DIM]] x float>
-// CHECK-OFFSET: %[[DDX_ADDR:.*]] = alloca <[[DIM]] x float>
-// CHECK-OFFSET: %[[DDY_ADDR:.*]] = alloca <[[DIM]] x float>
-// CHECK-OFFSET: %[[OFFSET_ADDR:.*]] = alloca <[[DIM]] x i32>
+// CHECK-OFFSET: %[[COORD_ADDR:.*]] = alloca [[COORD_LLVM]]
+// CHECK-OFFSET: %[[DDX_ADDR:.*]] = alloca [[GRAD_LLVM]]
+// CHECK-OFFSET: %[[DDY_ADDR:.*]] = alloca [[GRAD_LLVM]]
+// CHECK-OFFSET: %[[OFFSET_ADDR:.*]] = alloca [[OFFSET_LLVM]]
// CHECK-OFFSET: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// CHECK-OFFSET: store <[[COORD_DIM]] x float> %[[COORD]], ptr %[[COORD_ADDR]]
-// CHECK-OFFSET: store <[[DIM]] x float> %[[DDX]], ptr %[[DDX_ADDR]]
-// CHECK-OFFSET: store <[[DIM]] x float> %[[DDY]], ptr %[[DDY_ADDR]]
-// CHECK-OFFSET: store <[[DIM]] x i32> %[[OFFSET]], ptr %[[OFFSET_ADDR]]
+// CHECK-OFFSET: store [[COORD_LLVM]] %[[COORD]], ptr %[[COORD_ADDR]]
+// CHECK-OFFSET: store [[GRAD_LLVM]] %[[DDX]], ptr %[[DDX_ADDR]]
+// CHECK-OFFSET: store [[GRAD_LLVM]] %[[DDY]], ptr %[[DDY_ADDR]]
+// CHECK-OFFSET: store [[OFFSET_LLVM]] %[[OFFSET]], ptr %[[OFFSET_ADDR]]
// CHECK-OFFSET: %[[THIS_VAL2:.*]] = load ptr, ptr %[[THIS_ADDR]]
// CHECK-OFFSET: %[[HANDLE_GEP2:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL2]], i32 0, i32 0
// CHECK-OFFSET: %[[HANDLE2:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP2]]
// CHECK-OFFSET: %[[SAMPLER_GEP2:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %[[SAMPLER]], i32 0, i32 0
// CHECK-OFFSET: %[[SAMPLER_H2:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP2]]
-// CHECK-OFFSET: %[[COORD_VAL:.*]] = load <[[COORD_DIM]] x float>, ptr %[[COORD_ADDR]]
-// CHECK-OFFSET: %[[DDX_VAL:.*]] = load <[[DIM]] x float>, ptr %[[DDX_ADDR]]
-// CHECK-OFFSET: %[[DDY_VAL:.*]] = load <[[DIM]] x float>, ptr %[[DDY_ADDR]]
-// CHECK-OFFSET: %[[OFFSET_VAL:.*]] = load <[[DIM]] x i32>, ptr %[[OFFSET_ADDR]]
-// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplegrad.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE2]], target("dx.Sampler", 0) %[[SAMPLER_H2]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x float> %[[DDX_VAL]], <[[DIM]] x float> %[[DDY_VAL]], <[[DIM]] x i32> %[[OFFSET_VAL]])
-// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplegrad.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE2]], target("spirv.Sampler") %[[SAMPLER_H2]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x float> %[[DDX_VAL]], <[[DIM]] x float> %[[DDY_VAL]], <[[DIM]] x i32> %[[OFFSET_VAL]])
-
-// CHECK-OFFSET: @test_clamp(float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]])
-// CHECK-OFFSET: %[[CALL_CLAMP:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]], int vector[[[DIM]]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x i32> noundef [[OFFSET_CONST]], float {{.*}} 1.000000e+00)
+// CHECK-OFFSET: %[[COORD_VAL:.*]] = load [[COORD_LLVM]], ptr %[[COORD_ADDR]]
+// CHECK-OFFSET: %[[DDX_VAL:.*]] = load [[GRAD_LLVM]], ptr %[[DDX_ADDR]]
+// CHECK-OFFSET: %[[DDY_VAL:.*]] = load [[GRAD_LLVM]], ptr %[[DDY_ADDR]]
+// CHECK-OFFSET: %[[OFFSET_VAL:.*]] = load [[OFFSET_LLVM]], ptr %[[OFFSET_ADDR]]
+// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplegrad.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE2]], target("dx.Sampler", 0) %[[SAMPLER_H2]], [[COORD_LLVM]] %[[COORD_VAL]], [[GRAD_LLVM]] %[[DDX_VAL]], [[GRAD_LLVM]] %[[DDY_VAL]], [[OFFSET_LLVM]] %[[OFFSET_VAL]])
+// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplegrad.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE2]], target("spirv.Sampler") %[[SAMPLER_H2]], [[COORD_LLVM]] %[[COORD_VAL]], [[GRAD_LLVM]] %[[DDX_VAL]], [[GRAD_LLVM]] %[[DDY_VAL]], [[OFFSET_LLVM]] %[[OFFSET_VAL]])
+
+// CHECK-OFFSET: @test_clamp([[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]])
+// CHECK-OFFSET: %[[CALL_CLAMP:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, [[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]], [[OFFSET_CXX]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, [[GRAD_LLVM]] {{.*}} %{{.*}}, [[GRAD_LLVM]] {{.*}} %{{.*}}, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]], float {{.*}} 1.000000e+00)
// CHECK-OFFSET: ret <4 x float> %[[CALL_CLAMP]]
// CHECK-NOOFFSET: @test_clamp(
-// CHECK-NOOFFSET: %[[CALL_NC:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x float> {{.*}} %{{.*}}, <[[DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 1.000000e+00)
+// CHECK-NOOFFSET: %[[CALL_NC:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, [[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, [[GRAD_LLVM]] {{.*}} %{{.*}}, [[GRAD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 1.000000e+00)
// CHECK-NOOFFSET: ret <4 x float> %[[CALL_NC]]
#ifdef HAS_OFFSET
@@ -205,39 +294,40 @@ float4 test_clamp(COORD_TYPE loc : LOC, GRAD_TYPE ddx : DDX, GRAD_TYPE ddy : DDY
}
#endif
-// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]], int vector[[[DIM]]], float)(
-// CHECK-OFFSET-SAME: ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], <[[COORD_DIM]] x float> {{.*}} %[[COORD:[^,]+]], <[[DIM]] x float> {{.*}} %[[DDX:[^,]+]], <[[DIM]] x float> {{.*}} %[[DDY:[^,]+]], <[[DIM]] x i32> {{.*}} %[[OFFSET:[^,]+]], float {{.*}} %[[CLAMP:[^)]+]])
+// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, [[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]], [[OFFSET_CXX]], float)(
+// CHECK-OFFSET-SAME: ptr {{.*}} %[[THIS:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER:[^,]+]], [[COORD_LLVM]] {{.*}} %[[COORD:[^,]+]], [[GRAD_LLVM]] {{.*}} %[[DDX:[^,]+]], [[GRAD_LLVM]] {{.*}} %[[DDY:[^,]+]], [[OFFSET_LLVM]] {{.*}} %[[OFFSET:[^,]+]], float {{.*}} %[[CLAMP:[^)]+]])
// CHECK-OFFSET: %[[THIS_ADDR:.*]] = alloca ptr
-// CHECK-OFFSET: %[[COORD_ADDR:.*]] = alloca <[[COORD_DIM]] x float>
-// CHECK-OFFSET: %[[DDX_ADDR:.*]] = alloca <[[DIM]] x float>
-// CHECK-OFFSET: %[[DDY_ADDR:.*]] = alloca <[[DIM]] x float>
-// CHECK-OFFSET: %[[OFFSET_ADDR:.*]] = alloca <[[DIM]] x i32>
+// CHECK-OFFSET: %[[COORD_ADDR:.*]] = alloca [[COORD_LLVM]]
+// CHECK-OFFSET: %[[DDX_ADDR:.*]] = alloca [[GRAD_LLVM]]
+// CHECK-OFFSET: %[[DDY_ADDR:.*]] = alloca [[GRAD_LLVM]]
+// CHECK-OFFSET: %[[OFFSET_ADDR:.*]] = alloca [[OFFSET_LLVM]]
// CHECK-OFFSET: %[[CLAMP_ADDR:.*]] = alloca float
// CHECK-OFFSET: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// CHECK-OFFSET: store <[[COORD_DIM]] x float> %[[COORD]], ptr %[[COORD_ADDR]]
-// CHECK-OFFSET: store <[[DIM]] x float> %[[DDX]], ptr %[[DDX_ADDR]]
-// CHECK-OFFSET: store <[[DIM]] x float> %[[DDY]], ptr %[[DDY_ADDR]]
-// CHECK-OFFSET: store <[[DIM]] x i32> %[[OFFSET]], ptr %[[OFFSET_ADDR]]
+// CHECK-OFFSET: store [[COORD_LLVM]] %[[COORD]], ptr %[[COORD_ADDR]]
+// CHECK-OFFSET: store [[GRAD_LLVM]] %[[DDX]], ptr %[[DDX_ADDR]]
+// CHECK-OFFSET: store [[GRAD_LLVM]] %[[DDY]], ptr %[[DDY_ADDR]]
+// CHECK-OFFSET: store [[OFFSET_LLVM]] %[[OFFSET]], ptr %[[OFFSET_ADDR]]
// CHECK-OFFSET: store float %[[CLAMP]], ptr %[[CLAMP_ADDR]]
// CHECK-OFFSET: %[[THIS_VAL3:.*]] = load ptr, ptr %[[THIS_ADDR]]
// CHECK-OFFSET: %[[HANDLE_GEP3:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL3]], i32 0, i32 0
// CHECK-OFFSET: %[[HANDLE3:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP3]]
// CHECK-OFFSET: %[[SAMPLER_GEP3:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %[[SAMPLER]], i32 0, i32 0
// CHECK-OFFSET: %[[SAMPLER_H3:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP3]]
-// CHECK-OFFSET: %[[COORD_VAL:.*]] = load <[[COORD_DIM]] x float>, ptr %[[COORD_ADDR]]
-// CHECK-OFFSET: %[[DDX_VAL:.*]] = load <[[DIM]] x float>, ptr %[[DDX_ADDR]]
-// CHECK-OFFSET: %[[DDY_VAL:.*]] = load <[[DIM]] x float>, ptr %[[DDY_ADDR]]
-// CHECK-OFFSET: %[[OFFSET_VAL:.*]] = load <[[DIM]] x i32>, ptr %[[OFFSET_ADDR]]
+// CHECK-OFFSET: %[[COORD_VAL:.*]] = load [[COORD_LLVM]], ptr %[[COORD_ADDR]]
+// CHECK-OFFSET: %[[DDX_VAL:.*]] = load [[GRAD_LLVM]], ptr %[[DDX_ADDR]]
+// CHECK-OFFSET: %[[DDY_VAL:.*]] = load [[GRAD_LLVM]], ptr %[[DDY_ADDR]]
+// CHECK-OFFSET: %[[OFFSET_VAL:.*]] = load [[OFFSET_LLVM]], ptr %[[OFFSET_ADDR]]
// CHECK-OFFSET: %[[CLAMP_VAL:.*]] = load float, ptr %[[CLAMP_ADDR]]
-// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplegrad.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE3]], target("dx.Sampler", 0) %[[SAMPLER_H3]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x float> %[[DDX_VAL]], <[[DIM]] x float> %[[DDY_VAL]], <[[DIM]] x i32> %[[OFFSET_VAL]], float %[[CLAMP_VAL]])
-// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplegrad.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE3]], target("spirv.Sampler") %[[SAMPLER_H3]], <[[COORD_DIM]] x float> %[[COORD_VAL]], <[[DIM]] x float> %[[DDX_VAL]], <[[DIM]] x float> %[[DDY_VAL]], <[[DIM]] x i32> %[[OFFSET_VAL]], float %[[CLAMP_VAL]])
+// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplegrad.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE3]], target("dx.Sampler", 0) %[[SAMPLER_H3]], [[COORD_LLVM]] %[[COORD_VAL]], [[GRAD_LLVM]] %[[DDX_VAL]], [[GRAD_LLVM]] %[[DDY_VAL]], [[OFFSET_LLVM]] %[[OFFSET_VAL]], float %[[CLAMP_VAL]])
+// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplegrad.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE3]], target("spirv.Sampler") %[[SAMPLER_H3]], [[COORD_LLVM]] %[[COORD_VAL]], [[GRAD_LLVM]] %[[DDX_VAL]], [[GRAD_LLVM]] %[[DDY_VAL]], [[OFFSET_LLVM]] %[[OFFSET_VAL]], float %[[CLAMP_VAL]])
-// CHECK-NOOFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, float vector[[[COORD_DIM]]], float vector[[[DIM]]], float vector[[[DIM]]], float)(
+// CHECK-NOOFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleGrad(hlsl::SamplerState, [[COORD_CXX]], [[GRAD_CXX]], [[GRAD_CXX]], float)(
// CHECK-NOOFFSET: %[[THIS_VAL_NC:.*]] = load ptr, ptr %{{.*}}
// CHECK-NOOFFSET: %[[HANDLE_GEP_NC:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL_NC]], i32 0, i32 0
// CHECK-NOOFFSET: %[[HANDLE_NC:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP_NC]]
// CHECK-NOOFFSET: %[[SAMPLER_GEP_NC:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %{{.*}}, i32 0, i32 0
// CHECK-NOOFFSET: %[[SAMPLER_H_NC:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP_NC]]
+// CHECK-NOOFFSET: %[[COORD_VAL_NC:.*]] = load [[COORD_LLVM]], ptr %{{.*}}
// CHECK-NOOFFSET: %[[CLAMP_VAL_NC:.*]] = load float, ptr %{{.*}}
-// DXIL-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplegrad.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE_NC]], target("dx.Sampler", 0) %[[SAMPLER_H_NC]], <[[COORD_DIM]] x float> %{{.*}}, <[[DIM]] x float> %{{.*}}, <[[DIM]] x float> %{{.*}}, <[[DIM]] x i32> zeroinitializer, float %[[CLAMP_VAL_NC]])
-// SPIRV-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplegrad.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE_NC]], target("spirv.Sampler") %[[SAMPLER_H_NC]], <[[COORD_DIM]] x float> %{{.*}}, <[[DIM]] x float> %{{.*}}, <[[DIM]] x float> %{{.*}}, <[[DIM]] x i32> zeroinitializer, float %[[CLAMP_VAL_NC]])
+// DXIL-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplegrad.clamp.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE_NC]], target("dx.Sampler", 0) %[[SAMPLER_H_NC]], [[COORD_LLVM]] %{{.*}}, [[GRAD_LLVM]] %{{.*}}, [[GRAD_LLVM]] %{{.*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]], float %[[CLAMP_VAL_NC]])
+// SPIRV-NOOFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplegrad.clamp.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE_NC]], target("spirv.Sampler") %[[SAMPLER_H_NC]], [[COORD_LLVM]] %{{.*}}, [[GRAD_LLVM]] %{{.*}}, [[GRAD_LLVM]] %{{.*}}, [[OFFSET_LLVM]] [[OFFSET_ZERO]], float %[[CLAMP_VAL_NC]])
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
index 7a0dc8c723c02..9bb4d20dd3799 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
@@ -1,80 +1,161 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DDXIL_TY=1 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=6 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>"
+// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=5 -DRW=0 -DDIM=3
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=5 -DRW=0 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=9 -DRW=0 -DDIM=3
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=9 -DRW=0 -DDIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
+// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int" \
+// RUN: -DINDEX_CXX_I=int -DGRAD_LLVM=float -DGRAD_CXX=float \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
+// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL -DARRAYED=0 -DSAMPLED=1 \
-// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL -DARRAYED=1 -DSAMPLED=1 \
-// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
// RUN: -DCOORD_TYPE=float3 %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
+// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
// RUN: -DCOORD_TYPE=float3 %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -86,6 +167,8 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_DIM sample location components (DIM plus the array slice)
+// GRAD_CXX ddx/ddy type in the C++ signature
+// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// DIM number of resource dimensions (offset, ddx/ddy, LOD
@@ -115,34 +198,34 @@
TEXTURE<float4> t;
SamplerState s;
-// CHECK: @test_level(float vector[[[COORD_DIM]]], float)
-// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleLevel(hlsl::SamplerState, float vector[[[COORD_DIM]]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00)
+// CHECK: @test_level([[COORD_CXX]], float)
+// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleLevel(hlsl::SamplerState, [[COORD_CXX]], float)(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00)
// CHECK: ret <4 x float> %[[CALL]]
float4 test_level(COORD_TYPE loc : LOC, float lod : LOD) : SV_Target {
return t.SampleLevel(s, loc, 0.0f);
}
-// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleLevel(hlsl::SamplerState, float vector[[[COORD_DIM]]], float)(
-// CHECK-SAME: ptr {{.*}} %[[THIS1:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER1:[^,]+]], <[[COORD_DIM]] x float> noundef nofpclass(nan inf) %[[COORD1:[^,]+]], float noundef nofpclass(nan inf) %[[LOD1:[^)]+]])
+// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleLevel(hlsl::SamplerState, [[COORD_CXX]], float)(
+// CHECK-SAME: ptr {{.*}} %[[THIS1:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER1:[^,]+]], [[COORD_LLVM]] noundef nofpclass(nan inf) %[[COORD1:[^,]+]], float noundef nofpclass(nan inf) %[[LOD1:[^)]+]])
// CHECK: %[[THIS_ADDR1:.*]] = alloca ptr
-// CHECK: %[[COORD_ADDR1:.*]] = alloca <[[COORD_DIM]] x float>
+// CHECK: %[[COORD_ADDR1:.*]] = alloca [[COORD_LLVM]]
// CHECK: %[[LOD_ADDR1:.*]] = alloca float
// CHECK: store ptr %[[THIS1]], ptr %[[THIS_ADDR1]]
-// CHECK: store <[[COORD_DIM]] x float> %[[COORD1]], ptr %[[COORD_ADDR1]]
+// CHECK: store [[COORD_LLVM]] %[[COORD1]], ptr %[[COORD_ADDR1]]
// CHECK: store float %[[LOD1]], ptr %[[LOD_ADDR1]]
// CHECK: %[[THIS_VAL1:.*]] = load ptr, ptr %[[THIS_ADDR1]]
// CHECK: %[[HANDLE_GEP1:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL1]], i32 0, i32 0
// CHECK: %[[HANDLE1:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP1]]
// CHECK: %[[SAMPLER_GEP1:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %[[SAMPLER1]], i32 0, i32 0
// CHECK: %[[SAMPLER_H1:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP1]]
-// CHECK: %[[COORD_VAL1:.*]] = load <[[COORD_DIM]] x float>, ptr %[[COORD_ADDR1]]
+// CHECK: %[[COORD_VAL1:.*]] = load [[COORD_LLVM]], ptr %[[COORD_ADDR1]]
// CHECK: %[[LOD_VAL1:.*]] = load float, ptr %[[LOD_ADDR1]]
-// DXIL: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplelevel.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE1]], target("dx.Sampler", 0) %[[SAMPLER_H1]], <[[COORD_DIM]] x float> %[[COORD_VAL1]], float %[[LOD_VAL1]], <[[DIM]] x i32> zeroinitializer)
-// SPIRV: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplelevel.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE1]], target("spirv.Sampler") %[[SAMPLER_H1]], <[[COORD_DIM]] x float> %[[COORD_VAL1]], float %[[LOD_VAL1]], <[[DIM]] x i32> zeroinitializer)
+// DXIL: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplelevel.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE1]], target("dx.Sampler", 0) %[[SAMPLER_H1]], [[COORD_LLVM]] %[[COORD_VAL1]], float %[[LOD_VAL1]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// SPIRV: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplelevel.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE1]], target("spirv.Sampler") %[[SAMPLER_H1]], [[COORD_LLVM]] %[[COORD_VAL1]], float %[[LOD_VAL1]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
-// CHECK-OFFSET: @test_offset(float vector[[[COORD_DIM]]], float)
-// CHECK-OFFSET: %[[CALL_OFFSET:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleLevel(hlsl::SamplerState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, <[[COORD_DIM]] x float> {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, <[[DIM]] x i32> noundef [[OFFSET_CONST]])
+// CHECK-OFFSET: @test_offset([[COORD_CXX]], float)
+// CHECK-OFFSET: %[[CALL_OFFSET:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleLevel(hlsl::SamplerState, [[COORD_CXX]], float, [[OFFSET_CXX]])(ptr {{.*}} @t, ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}}, [[COORD_LLVM]] {{.*}} %{{.*}}, float {{.*}} 0.000000e+00, [[OFFSET_LLVM]] noundef [[OFFSET_CONST]])
// CHECK-OFFSET: ret <4 x float> %[[CALL_OFFSET]]
#ifdef HAS_OFFSET
@@ -151,23 +234,23 @@ float4 test_offset(COORD_TYPE loc : LOC, float lod : LOD) : SV_Target {
}
#endif
-// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleLevel(hlsl::SamplerState, float vector[[[COORD_DIM]]], float, int vector[[[DIM]]])(
-// CHECK-OFFSET-SAME: ptr {{.*}} %[[THIS2:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER2:[^,]+]], <[[COORD_DIM]] x float> noundef nofpclass(nan inf) %[[COORD2:[^,]+]], float noundef nofpclass(nan inf) %[[LOD2:[^,]+]], <[[DIM]] x i32> noundef %[[OFFSET2:[^)]+]])
+// CHECK-OFFSET: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::SampleLevel(hlsl::SamplerState, [[COORD_CXX]], float, [[OFFSET_CXX]])(
+// CHECK-OFFSET-SAME: ptr {{.*}} %[[THIS2:[^,]+]], ptr {{.*}} byval(%"class.hlsl::SamplerState") {{.*}} %[[SAMPLER2:[^,]+]], [[COORD_LLVM]] noundef nofpclass(nan inf) %[[COORD2:[^,]+]], float noundef nofpclass(nan inf) %[[LOD2:[^,]+]], [[OFFSET_LLVM]] noundef %[[OFFSET2:[^)]+]])
// CHECK-OFFSET: %[[THIS_ADDR2:.*]] = alloca ptr
-// CHECK-OFFSET: %[[COORD_ADDR2:.*]] = alloca <[[COORD_DIM]] x float>
+// CHECK-OFFSET: %[[COORD_ADDR2:.*]] = alloca [[COORD_LLVM]]
// CHECK-OFFSET: %[[LOD_ADDR2:.*]] = alloca float
-// CHECK-OFFSET: %[[OFFSET_ADDR2:.*]] = alloca <[[DIM]] x i32>
+// CHECK-OFFSET: %[[OFFSET_ADDR2:.*]] = alloca [[OFFSET_LLVM]]
// CHECK-OFFSET: store ptr %[[THIS2]], ptr %[[THIS_ADDR2]]
-// CHECK-OFFSET: store <[[COORD_DIM]] x float> %[[COORD2]], ptr %[[COORD_ADDR2]]
+// CHECK-OFFSET: store [[COORD_LLVM]] %[[COORD2]], ptr %[[COORD_ADDR2]]
// CHECK-OFFSET: store float %[[LOD2]], ptr %[[LOD_ADDR2]]
-// CHECK-OFFSET: store <[[DIM]] x i32> %[[OFFSET2]], ptr %[[OFFSET_ADDR2]]
+// CHECK-OFFSET: store [[OFFSET_LLVM]] %[[OFFSET2]], ptr %[[OFFSET_ADDR2]]
// CHECK-OFFSET: %[[THIS_VAL2:.*]] = load ptr, ptr %[[THIS_ADDR2]]
// CHECK-OFFSET: %[[HANDLE_GEP2:.*]] = getelementptr inbounds nuw %"class.hlsl::[[TEXTURE]]", ptr %[[THIS_VAL2]], i32 0, i32 0
// CHECK-OFFSET: %[[HANDLE2:.*]] = load target{{.*}}, ptr %[[HANDLE_GEP2]]
// CHECK-OFFSET: %[[SAMPLER_GEP2:.*]] = getelementptr inbounds nuw %"class.hlsl::SamplerState", ptr %[[SAMPLER2]], i32 0, i32 0
// CHECK-OFFSET: %[[SAMPLER_H2:.*]] = load target{{.*}}, ptr %[[SAMPLER_GEP2]]
-// CHECK-OFFSET: %[[COORD_VAL2:.*]] = load <[[COORD_DIM]] x float>, ptr %[[COORD_ADDR2]]
+// CHECK-OFFSET: %[[COORD_VAL2:.*]] = load [[COORD_LLVM]], ptr %[[COORD_ADDR2]]
// CHECK-OFFSET: %[[LOD_VAL2:.*]] = load float, ptr %[[LOD_ADDR2]]
-// CHECK-OFFSET: %[[OFFSET_VAL2:.*]] = load <[[DIM]] x i32>, ptr %[[OFFSET_ADDR2]]
-// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplelevel.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE2]], target("dx.Sampler", 0) %[[SAMPLER_H2]], <[[COORD_DIM]] x float> %[[COORD_VAL2]], float %[[LOD_VAL2]], <[[DIM]] x i32> %[[OFFSET_VAL2]])
-// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplelevel.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE2]], target("spirv.Sampler") %[[SAMPLER_H2]], <[[COORD_DIM]] x float> %[[COORD_VAL2]], float %[[LOD_VAL2]], <[[DIM]] x i32> %[[OFFSET_VAL2]])
+// CHECK-OFFSET: %[[OFFSET_VAL2:.*]] = load [[OFFSET_LLVM]], ptr %[[OFFSET_ADDR2]]
+// DXIL-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.dx.resource.samplelevel.v4f32.{{.*}}(target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) %[[HANDLE2]], target("dx.Sampler", 0) %[[SAMPLER_H2]], [[COORD_LLVM]] %[[COORD_VAL2]], float %[[LOD_VAL2]], [[OFFSET_LLVM]] %[[OFFSET_VAL2]])
+// SPIRV-OFFSET: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.spv.resource.samplelevel.v4f32.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], 0, [[SAMPLED]], [[IMG_FMT]]) %[[HANDLE2]], target("spirv.Sampler") %[[SAMPLER_H2]], [[COORD_LLVM]] %[[COORD_VAL2]], float %[[LOD_VAL2]], [[OFFSET_LLVM]] %[[OFFSET_VAL2]])
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
index b098682e09e64..53eba7cdf9641 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
@@ -1,115 +1,252 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2D -DCOORD_TYPE=uint2 \
-// RUN: -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=2 -DRW=0
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture1D -DCOORD_TYPE=uint \
+// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
+// RUN: -DCOORD_DIM=1 --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=1 -DRW=0 -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture3D -DCOORD_TYPE=uint3 \
-// RUN: -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=4 -DRW=0
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1DArray -DCOORD_DIM=2 --check-prefixes=CHECK,DXIL \
+// RUN: -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.Texture -DDXIL_TY=6 -DRW=0 \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2D -DCOORD_TYPE=uint2 \
-// RUN: -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 -DSAMPLED=1 \
-// RUN: -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=1
+// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture2D \
+// RUN: -DCOORD_DIM=2 --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=2 -DRW=0 \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture3D -DCOORD_TYPE=uint3 \
-// RUN: -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 -DSAMPLED=1 \
-// RUN: -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=2
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture1D -DCOORD_TYPE=uint \
+// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
+// RUN: -DCOORD_DIM=1 --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 \
+// RUN: -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=0 \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1DArray -DCOORD_DIM=2 --check-prefixes=CHECK,SPIRV \
+// RUN: -DARRAYED=1 -DMS=0 -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 \
+// RUN: -DFMT_INT3=0 -DSPV_DIM=0 -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2D -DCOORD_TYPE=uint2 \
+// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture2D \
+// RUN: -DCOORD_DIM=2 --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 \
+// RUN: -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=1 \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2DArray \
-// RUN: -DCOORD_TYPE=uint3 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=7 -DRW=0
+// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 --check-prefixes=CHECK,DXIL \
+// RUN: -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.Texture -DDXIL_TY=7 -DRW=0 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2DArray \
-// RUN: -DCOORD_TYPE=uint3 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=1 -DMS=0 -DSAMPLED=1 \
-// RUN: -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=1
+// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 --check-prefixes=CHECK,SPIRV \
+// RUN: -DARRAYED=1 -DMS=0 -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 \
+// RUN: -DFMT_INT3=0 -DSPV_DIM=1 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2DMS \
-// RUN: -DCOORD_TYPE=uint2 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DMS -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.MSTexture -DDXIL_TY=3 -DRW=0
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DMS -DCOORD_DIM=2 --check-prefixes=CHECK,DXIL \
+// RUN: -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.MSTexture -DDXIL_TY=3 -DRW=0 \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2DMS \
-// RUN: -DCOORD_TYPE=uint2 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DMS -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=1 -DSAMPLED=1 \
-// RUN: -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=1
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DMS -DCOORD_DIM=2 --check-prefixes=CHECK,SPIRV \
+// RUN: -DARRAYED=0 -DMS=1 -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 \
+// RUN: -DFMT_INT3=0 -DSPV_DIM=1 -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2D \
-// RUN: -DCOORD_TYPE=uint2 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=RWTexture2D -DCOORD_DIM=2 \
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=2
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=2 -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture3D \
-// RUN: -DCOORD_TYPE=uint3 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=RWTexture3D -DCOORD_DIM=3 \
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture1D \
+// RUN: -DCOORD_TYPE=uint -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture1D -DCOORD_DIM=1 \
// RUN: --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=4
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=1 -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2D \
-// RUN: -DCOORD_TYPE=uint2 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=RWTexture2D -DCOORD_DIM=2 \
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=0 -DMS=0 \
-// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=1
+// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=1 \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture3D \
-// RUN: -DCOORD_TYPE=uint3 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=RWTexture3D -DCOORD_DIM=3 \
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture1D \
+// RUN: -DCOORD_TYPE=uint -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture1D -DCOORD_DIM=1 \
// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=0 -DMS=0 \
-// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=2
+// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=0 \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2DArray \
+// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture2DArray -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 -DROV_OR_COUNT=0 \
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=7 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture1DArray \
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 -DROV_OR_COUNT=0 \
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=6 -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2DArray \
+// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture2DArray -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=1 -DMS=0 \
+// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=1 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture1DArray \
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture1DArray -DCOORD_DIM=2 \
+// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=1 -DMS=0 \
+// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=0 \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture3D -DCOORD_TYPE=uint3 \
+// RUN: -o - %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=4 -DRW=0 \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" -DINDEX_LLVM="<3 x i32>"
+
+// Texture3D
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture3D -DCOORD_TYPE=uint3 \
+// RUN: -o - %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 -DSAMPLED=1 \
+// RUN: -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=2 \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" -DINDEX_LLVM="<3 x i32>"
+
+// RWTexture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture3D \
// RUN: -DCOORD_TYPE=uint3 -o - %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=RWTexture2DArray -DCOORD_DIM=3 \
+// RUN: | FileCheck %s -DTEXTURE=RWTexture3D -DCOORD_DIM=3 \
// RUN: --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=7
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=4 \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" -DINDEX_LLVM="<3 x i32>"
+
+// RWTexture3D
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2DArray \
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture3D \
// RUN: -DCOORD_TYPE=uint3 -o - %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=RWTexture2DArray -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=1 -DMS=0 \
-// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=1
+// RUN: | FileCheck %s -DTEXTURE=RWTexture3D -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=0 -DMS=0 \
+// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=2 \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" -DINDEX_LLVM="<3 x i32>"
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -125,6 +262,8 @@
// ROV_OR_COUNT the overloaded second dx handle operand: IsROV for
// dx.Texture, the sample count for dx.MSTexture
// DXIL_HANDLE DXIL resource handle type (dx.Texture or dx.MSTexture)
+// GRAD_CXX ddx/ddy type in the C++ signature
+// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// ARRAYED spirv.Image Arrayed operand
@@ -170,85 +309,85 @@ void main(COORD_TYPE DTid : SV_DispatchThreadID) {
#endif
}
-// CHECK: define hidden {{.*}}void @main(unsigned int vector[[[COORD_DIM]]])(<[[COORD_DIM]] x i32> noundef %[[DTID:.*]])
-// CHECK: %[[DTID_ADDR:.*]] = alloca <[[COORD_DIM]] x i32>
+// CHECK: define hidden {{.*}}void @main([[INDEX_CXX_U]])([[INDEX_LLVM]] noundef %[[DTID:.*]])
+// CHECK: %[[DTID_ADDR:.*]] = alloca [[INDEX_LLVM]]
// CHECK: %[[VAL:.*]] = alloca <4 x float>
// CHECK: %[[VAL2:.*]] = alloca float
// CHECK: %[[VAL3:.*]] = alloca <3 x i32>
-// CHECK: store <[[COORD_DIM]] x i32> %[[DTID]], ptr %[[DTID_ADDR]]
-// CHECK: %[[DTID_VAL:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[DTID_ADDR]]
-// CHECK: %[[CALL1:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float vector[4]{{(, [0-9]+)?}}>::operator[](unsigned int vector[[[COORD_DIM]]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) @Tex, <[[COORD_DIM]] x i32> noundef %[[DTID_VAL]])
+// CHECK: store [[INDEX_LLVM]] %[[DTID]], ptr %[[DTID_ADDR]]
+// CHECK: %[[DTID_VAL:.*]] = load [[INDEX_LLVM]], ptr %[[DTID_ADDR]]
+// CHECK: %[[CALL1:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float vector[4]{{(, [0-9]+)?}}>::operator[]([[INDEX_CXX_U]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) @Tex, [[INDEX_LLVM]] noundef %[[DTID_VAL]])
// CHECK: %[[LOAD_VAL:.*]] = load <4 x float>, ptr{{.*}} %[[CALL1]]
// CHECK: store <4 x float> %[[LOAD_VAL]], ptr %[[VAL]]
-// CHECK: %[[DTID_VAL2:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[DTID_ADDR]]
-// CHECK: %[[CALL2:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float{{(, [0-9]+)?}}>::operator[](unsigned int vector[[[COORD_DIM]]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) @Tex2, <[[COORD_DIM]] x i32> noundef %[[DTID_VAL2]])
+// CHECK: %[[DTID_VAL2:.*]] = load [[INDEX_LLVM]], ptr %[[DTID_ADDR]]
+// CHECK: %[[CALL2:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float{{(, [0-9]+)?}}>::operator[]([[INDEX_CXX_U]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) @Tex2, [[INDEX_LLVM]] noundef %[[DTID_VAL2]])
// CHECK: %[[LOAD_VAL2:.*]] = load float, ptr{{.*}} %[[CALL2]]
// CHECK: store float %[[LOAD_VAL2]], ptr %[[VAL2]]
-// CHECK: %[[DTID_VAL3:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[DTID_ADDR]]
-// CHECK: %[[CALL3:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<int vector[3]{{(, [0-9]+)?}}>::operator[](unsigned int vector[[[COORD_DIM]]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) @Tex3, <[[COORD_DIM]] x i32> noundef %[[DTID_VAL3]])
+// CHECK: %[[DTID_VAL3:.*]] = load [[INDEX_LLVM]], ptr %[[DTID_ADDR]]
+// CHECK: %[[CALL3:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<int vector[3]{{(, [0-9]+)?}}>::operator[]([[INDEX_CXX_U]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) @Tex3, [[INDEX_LLVM]] noundef %[[DTID_VAL3]])
// CHECK: %[[LOAD_VAL3:.*]] = load <3 x i32>, ptr{{.*}} %[[CALL3]]
// CHECK: store <3 x i32> %[[LOAD_VAL3]], ptr %[[VAL3]]
// Store a whole texel.
-// CHECK-STORE: %[[DTID_VAL:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[DTID_ADDR]]
-// CHECK-STORE: %[[CALL1:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float vector[4]{{(, [0-9]+)?}}>::operator[](unsigned int vector[[[COORD_DIM]]]) const(ptr {{.*}} @Tex, <[[COORD_DIM]] x i32> noundef %[[DTID_VAL]])
+// CHECK-STORE: %[[DTID_VAL:.*]] = load [[INDEX_LLVM]], ptr %[[DTID_ADDR]]
+// CHECK-STORE: %[[CALL1:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float vector[4]{{(, [0-9]+)?}}>::operator[]([[INDEX_CXX_U]]) const(ptr {{.*}} @Tex, [[INDEX_LLVM]] noundef %[[DTID_VAL]])
// CHECK-STORE: store <4 x float> <float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00>, ptr{{.*}} %[[CALL1]]
// Store a single component: a GEP off the texel pointer, which the DXIL
// backend later expands into a read-modify-write of the whole texel.
-// CHECK-STORE: %[[DTID_VAL2:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[DTID_ADDR]]
-// CHECK-STORE: %[[CALL2:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float vector[4]{{(, [0-9]+)?}}>::operator[](unsigned int vector[[[COORD_DIM]]]) const(ptr {{.*}} @Tex, <[[COORD_DIM]] x i32> noundef %[[DTID_VAL2]])
+// CHECK-STORE: %[[DTID_VAL2:.*]] = load [[INDEX_LLVM]], ptr %[[DTID_ADDR]]
+// CHECK-STORE: %[[CALL2:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float vector[4]{{(, [0-9]+)?}}>::operator[]([[INDEX_CXX_U]]) const(ptr {{.*}} @Tex, [[INDEX_LLVM]] noundef %[[DTID_VAL2]])
// CHECK-STORE: %[[ELEM:.*]] = getelementptr <4 x float>, ptr{{.*}} %[[CALL2]], i32 0, i32 1
// CHECK-STORE: store float 5.000000e+00, ptr{{.*}} %[[ELEM]]
// Store to a scalar texture.
-// CHECK-STORE: %[[DTID_VAL3:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[DTID_ADDR]]
-// CHECK-STORE: %[[CALL3:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float{{(, [0-9]+)?}}>::operator[](unsigned int vector[[[COORD_DIM]]]) const(ptr {{.*}} @Tex2, <[[COORD_DIM]] x i32> noundef %[[DTID_VAL3]])
+// CHECK-STORE: %[[DTID_VAL3:.*]] = load [[INDEX_LLVM]], ptr %[[DTID_ADDR]]
+// CHECK-STORE: %[[CALL3:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float{{(, [0-9]+)?}}>::operator[]([[INDEX_CXX_U]]) const(ptr {{.*}} @Tex2, [[INDEX_LLVM]] noundef %[[DTID_VAL3]])
// CHECK-STORE: store float 6.000000e+00, ptr{{.*}} %[[CALL3]]
// Store to an integer texture.
-// CHECK-STORE: %[[DTID_VAL4:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[DTID_ADDR]]
-// CHECK-STORE: %[[CALL4:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<int vector[3]{{(, [0-9]+)?}}>::operator[](unsigned int vector[[[COORD_DIM]]]) const(ptr {{.*}} @Tex3, <[[COORD_DIM]] x i32> noundef %[[DTID_VAL4]])
+// CHECK-STORE: %[[DTID_VAL4:.*]] = load [[INDEX_LLVM]], ptr %[[DTID_ADDR]]
+// CHECK-STORE: %[[CALL4:.*]] = call {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<int vector[3]{{(, [0-9]+)?}}>::operator[]([[INDEX_CXX_U]]) const(ptr {{.*}} @Tex3, [[INDEX_LLVM]] noundef %[[DTID_VAL4]])
// CHECK-STORE: store <3 x i32> <i32 7, i32 8, i32 9>, ptr{{.*}} %[[CALL4]]
-// CHECK: define linkonce_odr hidden {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float vector[4]{{(, [0-9]+)?}}>::operator[](unsigned int vector[[[COORD_DIM]]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %[[THIS:.*]], <[[COORD_DIM]] x i32> noundef %[[INDEX:.*]])
+// CHECK: define linkonce_odr hidden {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float vector[4]{{(, [0-9]+)?}}>::operator[]([[INDEX_CXX_U]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %[[THIS:.*]], [[INDEX_LLVM]] noundef %[[INDEX:.*]])
// CHECK: %[[THIS_ADDR:.*]] = alloca ptr
-// CHECK: %[[INDEX_ADDR:.*]] = alloca <[[COORD_DIM]] x i32>
+// CHECK: %[[INDEX_ADDR:.*]] = alloca [[INDEX_LLVM]]
// CHECK: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// CHECK: store <[[COORD_DIM]] x i32> %[[INDEX]], ptr %[[INDEX_ADDR]]
+// CHECK: store [[INDEX_LLVM]] %[[INDEX]], ptr %[[INDEX_ADDR]]
// CHECK: %[[THIS1:.*]] = load ptr, ptr %[[THIS_ADDR]]
// CHECK: %[[HANDLE_PTR:.*]] = getelementptr {{.*}} %"class.hlsl::[[TEXTURE]]", ptr %[[THIS1]], i32 0, i32 0
// DXIL: %[[HANDLE:.*]] = load target("[[DXIL_HANDLE]]", <4 x float>, [[RW]], [[ROV_OR_COUNT]], 0, [[DXIL_TY]]), ptr %[[HANDLE_PTR]]
// SPIRV: %[[HANDLE:.*]] = load target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], [[MS]], [[SAMPLED]], [[FMT_FLOAT4]]), ptr %[[HANDLE_PTR]]
-// CHECK: %[[INDEX_VAL:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[INDEX_ADDR]]
-// DXIL: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.{{.*}}(target("[[DXIL_HANDLE]]", <4 x float>, [[RW]], [[ROV_OR_COUNT]], 0, [[DXIL_TY]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[INDEX_VAL]])
-// SPIRV: %[[PTR:.*]] = call ptr addrspace(11) @llvm.spv.resource.getpointer.p11.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], [[MS]], [[SAMPLED]], [[FMT_FLOAT4]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[INDEX_VAL]])
+// CHECK: %[[INDEX_VAL:.*]] = load [[INDEX_LLVM]], ptr %[[INDEX_ADDR]]
+// DXIL: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.{{.*}}(target("[[DXIL_HANDLE]]", <4 x float>, [[RW]], [[ROV_OR_COUNT]], 0, [[DXIL_TY]]) %[[HANDLE]], [[INDEX_LLVM]] %[[INDEX_VAL]])
+// SPIRV: %[[PTR:.*]] = call ptr addrspace(11) @llvm.spv.resource.getpointer.p11.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], [[MS]], [[SAMPLED]], [[FMT_FLOAT4]]) %[[HANDLE]], [[INDEX_LLVM]] %[[INDEX_VAL]])
// CHECK: ret ptr {{.*}}%[[PTR]]
-// CHECK: define linkonce_odr hidden {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float{{(, [0-9]+)?}}>::operator[](unsigned int vector[[[COORD_DIM]]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %[[THIS:.*]], <[[COORD_DIM]] x i32> noundef %[[INDEX:.*]])
+// CHECK: define linkonce_odr hidden {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<float{{(, [0-9]+)?}}>::operator[]([[INDEX_CXX_U]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %[[THIS:.*]], [[INDEX_LLVM]] noundef %[[INDEX:.*]])
// CHECK: %[[THIS_ADDR:.*]] = alloca ptr
-// CHECK: %[[INDEX_ADDR:.*]] = alloca <[[COORD_DIM]] x i32>
+// CHECK: %[[INDEX_ADDR:.*]] = alloca [[INDEX_LLVM]]
// CHECK: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// CHECK: store <[[COORD_DIM]] x i32> %[[INDEX]], ptr %[[INDEX_ADDR]]
+// CHECK: store [[INDEX_LLVM]] %[[INDEX]], ptr %[[INDEX_ADDR]]
// CHECK: %[[THIS1:.*]] = load ptr, ptr %[[THIS_ADDR]]
// CHECK: %[[HANDLE_PTR:.*]] = getelementptr {{.*}} %"class.hlsl::[[TEXTURE]].0", ptr %[[THIS1]], i32 0, i32 0
// DXIL: %[[HANDLE:.*]] = load target("[[DXIL_HANDLE]]", float, [[RW]], [[ROV_OR_COUNT]], 0, [[DXIL_TY]]), ptr %[[HANDLE_PTR]]
// SPIRV: %[[HANDLE:.*]] = load target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], [[MS]], [[SAMPLED]], [[FMT_FLOAT]]), ptr %[[HANDLE_PTR]]
-// CHECK: %[[INDEX_VAL:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[INDEX_ADDR]]
-// DXIL: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.{{.*}}(target("[[DXIL_HANDLE]]", float, [[RW]], [[ROV_OR_COUNT]], 0, [[DXIL_TY]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[INDEX_VAL]])
-// SPIRV: %[[PTR:.*]] = call ptr addrspace(11) @llvm.spv.resource.getpointer.p11.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], [[MS]], [[SAMPLED]], [[FMT_FLOAT]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[INDEX_VAL]])
+// CHECK: %[[INDEX_VAL:.*]] = load [[INDEX_LLVM]], ptr %[[INDEX_ADDR]]
+// DXIL: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.{{.*}}(target("[[DXIL_HANDLE]]", float, [[RW]], [[ROV_OR_COUNT]], 0, [[DXIL_TY]]) %[[HANDLE]], [[INDEX_LLVM]] %[[INDEX_VAL]])
+// SPIRV: %[[PTR:.*]] = call ptr addrspace(11) @llvm.spv.resource.getpointer.p11.{{.*}}(target("spirv.Image", float, [[SPV_DIM]], 2, [[ARRAYED]], [[MS]], [[SAMPLED]], [[FMT_FLOAT]]) %[[HANDLE]], [[INDEX_LLVM]] %[[INDEX_VAL]])
// CHECK: ret ptr {{.*}}%[[PTR]]
-// CHECK: define linkonce_odr hidden {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<int vector[3]{{(, [0-9]+)?}}>::operator[](unsigned int vector[[[COORD_DIM]]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %[[THIS:.*]], <[[COORD_DIM]] x i32> noundef %[[INDEX:.*]])
+// CHECK: define linkonce_odr hidden {{(spir_func )?}}noundef {{.*}}ptr{{.*}} @hlsl::[[TEXTURE]]<int vector[3]{{(, [0-9]+)?}}>::operator[]([[INDEX_CXX_U]]) const(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %[[THIS:.*]], [[INDEX_LLVM]] noundef %[[INDEX:.*]])
// CHECK: %[[THIS_ADDR:.*]] = alloca ptr
-// CHECK: %[[INDEX_ADDR:.*]] = alloca <[[COORD_DIM]] x i32>
+// CHECK: %[[INDEX_ADDR:.*]] = alloca [[INDEX_LLVM]]
// CHECK: store ptr %[[THIS]], ptr %[[THIS_ADDR]]
-// CHECK: store <[[COORD_DIM]] x i32> %[[INDEX]], ptr %[[INDEX_ADDR]]
+// CHECK: store [[INDEX_LLVM]] %[[INDEX]], ptr %[[INDEX_ADDR]]
// CHECK: %[[THIS1:.*]] = load ptr, ptr %[[THIS_ADDR]]
// CHECK: %[[HANDLE_PTR:.*]] = getelementptr {{.*}} %"class.hlsl::[[TEXTURE]].1", ptr %[[THIS1]], i32 0, i32 0
// DXIL: %[[HANDLE:.*]] = load target("[[DXIL_HANDLE]]", <3 x i32>, [[RW]], [[ROV_OR_COUNT]], 1, [[DXIL_TY]]), ptr %[[HANDLE_PTR]]
// SPIRV: %[[HANDLE:.*]] = load target("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], [[MS]], [[SAMPLED]], [[FMT_INT3]]), ptr %[[HANDLE_PTR]]
-// CHECK: %[[INDEX_VAL:.*]] = load <[[COORD_DIM]] x i32>, ptr %[[INDEX_ADDR]]
-// DXIL: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.{{.*}}(target("[[DXIL_HANDLE]]", <3 x i32>, [[RW]], [[ROV_OR_COUNT]], 1, [[DXIL_TY]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[INDEX_VAL]])
-// SPIRV: %[[PTR:.*]] = call ptr addrspace(11) @llvm.spv.resource.getpointer.p11.{{.*}}(target("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], [[MS]], [[SAMPLED]], [[FMT_INT3]]) %[[HANDLE]], <[[COORD_DIM]] x i32> %[[INDEX_VAL]])
+// CHECK: %[[INDEX_VAL:.*]] = load [[INDEX_LLVM]], ptr %[[INDEX_ADDR]]
+// DXIL: %[[PTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.{{.*}}(target("[[DXIL_HANDLE]]", <3 x i32>, [[RW]], [[ROV_OR_COUNT]], 1, [[DXIL_TY]]) %[[HANDLE]], [[INDEX_LLVM]] %[[INDEX_VAL]])
+// SPIRV: %[[PTR:.*]] = call ptr addrspace(11) @llvm.spv.resource.getpointer.p11.{{.*}}(target("spirv.SignedImage", i32, [[SPV_DIM]], 2, [[ARRAYED]], [[MS]], [[SAMPLED]], [[FMT_INT3]]) %[[HANDLE]], [[INDEX_LLVM]] %[[INDEX_VAL]])
// CHECK: ret ptr {{.*}}%[[PTR]]
diff --git a/clang/test/CodeGenHLSL/resources/Textures-default.hlsl b/clang/test/CodeGenHLSL/resources/Textures-default.hlsl
index 41c71a7bf4d9a..e2a43bcdc0a1a 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-default.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-default.hlsl
@@ -1,33 +1,76 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
-// RUN: -finclude-default-header -DTEXTURE=Texture2D -o - %s \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DDXIL_TY=2 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-TEXEL
+// RUN: -finclude-default-header -DTEXTURE=Texture1D -o - %s | FileCheck %s \
+// RUN: -DTEXTURE=Texture1D -DDXIL_TY=1 -DRW=0 \
+// RUN: --check-prefixes=CHECK,CHECK-TEXEL -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
-// RUN: -finclude-default-header -DTEXTURE=Texture3D -o - %s \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DDXIL_TY=4 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-TEXEL
+// RUN: -finclude-default-header -DTEXTURE=Texture1DArray -o - %s | \
+// RUN: FileCheck %s -DTEXTURE=Texture1DArray -DDXIL_TY=6 -DRW=0 \
+// RUN: --check-prefixes=CHECK,CHECK-TEXEL -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
+// RUN: -finclude-default-header -DTEXTURE=Texture2D -o - %s | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D -DDXIL_TY=2 -DRW=0 \
+// RUN: --check-prefixes=CHECK,CHECK-TEXEL -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
+// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
-// RUN: -finclude-default-header -DTEXTURE=TextureCube -o - %s \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DDXIL_TY=5 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-NOTEXEL
+// RUN: -finclude-default-header -DTEXTURE=TextureCube -o - %s | FileCheck \
+// RUN: %s -DTEXTURE=TextureCube -DDXIL_TY=5 -DRW=0 \
+// RUN: --check-prefixes=CHECK,CHECK-NOTEXEL -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
-// RUN: -finclude-default-header -DTEXTURE=TextureCubeArray -o - %s \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DDXIL_TY=9 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-NOTEXEL
+// RUN: -finclude-default-header -DTEXTURE=TextureCubeArray -o - %s | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DDXIL_TY=9 -DRW=0 \
+// RUN: --check-prefixes=CHECK,CHECK-NOTEXEL -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
+// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
-// RUN: -finclude-default-header -DTEXTURE=Texture2DArray -o - %s \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DDXIL_TY=7 -DRW=0 \
+// RUN: -finclude-default-header -DTEXTURE=Texture2DArray -o - %s | \
+// RUN: FileCheck %s -DTEXTURE=Texture2DArray -DDXIL_TY=7 -DRW=0 \
+// RUN: --check-prefixes=CHECK,CHECK-TEXEL -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
+// RUN: -finclude-default-header -DTEXTURE=Texture3D -o - %s \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DDXIL_TY=4 -DRW=0 \
// RUN: --check-prefixes=CHECK,CHECK-TEXEL
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
// TEXTURE resource type name
+// GRAD_CXX ddx/ddy type in the C++ signature
+// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
//
diff --git a/clang/test/SemaHLSL/Resources/Textures-CalculateLevelOfDetail.hlsl b/clang/test/SemaHLSL/Resources/Textures-CalculateLevelOfDetail.hlsl
index dbaab1b9f8e64..8ce078b40b390 100644
--- a/clang/test/SemaHLSL/Resources/Textures-CalculateLevelOfDetail.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-CalculateLevelOfDetail.hlsl
@@ -1,4 +1,10 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
+// RUN: -finclude-default-header -fsyntax-only -verify=expected,dim1 \
+// RUN: -DTEXTURE=Texture1D -DLOD_TYPE=float %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
+// RUN: -finclude-default-header -fsyntax-only -verify=expected,dim1 \
+// RUN: -DTEXTURE=Texture1DArray -DLOD_TYPE=float %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
// RUN: -finclude-default-header -fsyntax-only -verify=expected,dim2 \
// RUN: -DTEXTURE=Texture2D -DLOD_TYPE=float2 %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
@@ -25,6 +31,7 @@
// vector
// dim3 diagnostics naming a 3-component offset or location
// vector
+// dim1 diagnostics naming a scalar offset or location
TEXTURE<float4> tex;
SamplerState samp;
@@ -51,10 +58,12 @@ void main() {
// expected-note@* {{'CalculateLevelOfDetailUnclamped' declared here}}
tex.CalculateLevelOfDetailUnclamped(samp, loc, 0);
+ // dim1-error at +3 {{cannot initialize a parameter of type 'float' with an lvalue of type 'const char[8]'}}
// dim2-error at +2 {{cannot initialize a parameter of type 'vector<float, 2>' (vector of 2 'float' values) with an lvalue of type 'const char[8]'}}
// dim3-error at +1 {{cannot initialize a parameter of type 'vector<float, 3>' (vector of 3 'float' values) with an lvalue of type 'const char[8]'}}
tex.CalculateLevelOfDetail(samp, "invalid");
+ // dim1-error at +3 {{cannot initialize a parameter of type 'float' with an lvalue of type 'const char[8]'}}
// dim2-error at +2 {{cannot initialize a parameter of type 'vector<float, 2>' (vector of 2 'float' values) with an lvalue of type 'const char[8]'}}
// dim3-error at +1 {{cannot initialize a parameter of type 'vector<float, 3>' (vector of 3 'float' values) with an lvalue of type 'const char[8]'}}
tex.CalculateLevelOfDetailUnclamped(samp, "invalid");
diff --git a/clang/test/SemaHLSL/Resources/Textures-SampleBias.hlsl b/clang/test/SemaHLSL/Resources/Textures-SampleBias.hlsl
index f7ebbafc19df0..7a9f2bf34dca4 100644
--- a/clang/test/SemaHLSL/Resources/Textures-SampleBias.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-SampleBias.hlsl
@@ -1,4 +1,12 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
+// RUN: -finclude-default-header -fsyntax-only -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_TYPE=int -DTEXTURE=Texture1D \
+// RUN: -DCOORD_TYPE=float %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
+// RUN: -finclude-default-header -fsyntax-only -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_TYPE=int -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=float2 %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
// RUN: -finclude-default-header -fsyntax-only -verify=expected,offset,dim2 \
// RUN: -DHAS_OFFSET -DOFFSET_TYPE=int2 -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s
diff --git a/clang/test/SemaHLSL/Resources/Textures-SampleCmp.hlsl b/clang/test/SemaHLSL/Resources/Textures-SampleCmp.hlsl
index 30705360319a2..e97db852e8df1 100644
--- a/clang/test/SemaHLSL/Resources/Textures-SampleCmp.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-SampleCmp.hlsl
@@ -1,4 +1,12 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -fsyntax-only -finclude-default-header -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1D -DCOORD_TYPE=float \
+// RUN: %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -fsyntax-only -finclude-default-header -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=float2 %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -fsyntax-only -finclude-default-header -verify=expected,offset,dim2 \
// RUN: -DHAS_OFFSET -DOFFSET_ARG="int2(1, 2)" -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s
@@ -30,6 +38,7 @@
// dim2 diagnostics naming a 2-component offset or location
// vector
// nooffset diagnostics for types that have no offset overloads
+// dim1 diagnostics naming a scalar offset or location
// dim3 diagnostics naming a 3-component offset or location
// vector
//
@@ -80,7 +89,8 @@ void main(COORD_TYPE loc, float cmp) {
t.SampleCmp(s2, loc, cmp);
#ifdef HAS_OFFSET
- // expected-error at +4 {{no matching member function for call to 'SampleCmp'}}
+ // expected-error at +5 {{no matching member function for call to 'SampleCmp'}}
+ // dim1-note@*:* {{candidate function not viable: no known conversion from 'SamplerComparisonState' to 'int' for 4th argument}}
// dim2-note@*:* {{candidate function not viable: no known conversion from 'SamplerComparisonState' to 'vector<int, 2>' (vector of 2 'int' values) for 4th argument}}
// expected-note@*:* {{candidate function not viable: requires 3 arguments, but 4 were provided}}
// expected-note@*:* {{candidate function not viable: requires 5 arguments, but 4 were provided}}
diff --git a/clang/test/SemaHLSL/Resources/Textures-SampleCmpLevelZero.hlsl b/clang/test/SemaHLSL/Resources/Textures-SampleCmpLevelZero.hlsl
index c3d7b41fba2ea..e30c2d47560d3 100644
--- a/clang/test/SemaHLSL/Resources/Textures-SampleCmpLevelZero.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-SampleCmpLevelZero.hlsl
@@ -1,4 +1,12 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -fsyntax-only -finclude-default-header -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1D -DCOORD_TYPE=float \
+// RUN: %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -fsyntax-only -finclude-default-header -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=float2 %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -fsyntax-only -finclude-default-header -verify=expected,offset,dim2 \
// RUN: -DHAS_OFFSET -DOFFSET_ARG="int2(1, 2)" -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s
@@ -30,6 +38,7 @@
// dim2 diagnostics naming a 2-component offset or location
// vector
// nooffset diagnostics for types that have no offset overloads
+// dim1 diagnostics naming a scalar offset or location
// dim3 diagnostics naming a 3-component offset or location
// vector
//
@@ -79,7 +88,8 @@ void main(COORD_TYPE loc, float cmp) {
t.SampleCmpLevelZero(s2, loc, cmp);
#ifdef HAS_OFFSET
- // expected-error at +3 {{no matching member function for call to 'SampleCmpLevelZero'}}
+ // expected-error at +4 {{no matching member function for call to 'SampleCmpLevelZero'}}
+ // dim1-note@*:* {{candidate function not viable: no known conversion from 'SamplerComparisonState' to 'int' for 4th argument}}
// dim2-note@*:* {{candidate function not viable: no known conversion from 'SamplerComparisonState' to 'vector<int, 2>' (vector of 2 'int' values) for 4th argument}}
// expected-note@*:* {{candidate function not viable: requires 3 arguments, but 4 were provided}}
t.SampleCmpLevelZero(s, loc, cmp, s);
diff --git a/clang/test/SemaHLSL/Resources/Textures-SampleGrad.hlsl b/clang/test/SemaHLSL/Resources/Textures-SampleGrad.hlsl
index 649fbb3d27897..f9a01ffaf5049 100644
--- a/clang/test/SemaHLSL/Resources/Textures-SampleGrad.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-SampleGrad.hlsl
@@ -1,4 +1,12 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
+// RUN: -finclude-default-header -fsyntax-only -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_TYPE=int -DTEXTURE=Texture1D \
+// RUN: -DCOORD_TYPE=float -DGRAD_TYPE=float %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
+// RUN: -finclude-default-header -fsyntax-only -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_TYPE=int -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
// RUN: -finclude-default-header -fsyntax-only -verify=expected,offset,dim2 \
// RUN: -DHAS_OFFSET -DOFFSET_TYPE=int2 -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float2 %s
diff --git a/clang/test/SemaHLSL/Resources/Textures-SampleLevel.hlsl b/clang/test/SemaHLSL/Resources/Textures-SampleLevel.hlsl
index 594e101740f67..151035639f7c9 100644
--- a/clang/test/SemaHLSL/Resources/Textures-SampleLevel.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-SampleLevel.hlsl
@@ -1,4 +1,12 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
+// RUN: -finclude-default-header -fsyntax-only -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_TYPE=int -DTEXTURE=Texture1D \
+// RUN: -DCOORD_TYPE=float %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
+// RUN: -finclude-default-header -fsyntax-only -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_TYPE=int -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=float2 %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library \
// RUN: -finclude-default-header -fsyntax-only -verify=expected,offset,dim2 \
// RUN: -DHAS_OFFSET -DOFFSET_TYPE=int2 -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s
diff --git a/clang/test/SemaHLSL/Resources/Textures-Sema.hlsl b/clang/test/SemaHLSL/Resources/Textures-Sema.hlsl
index 8ea48f8dc2872..579f9c045b929 100644
--- a/clang/test/SemaHLSL/Resources/Textures-Sema.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-Sema.hlsl
@@ -1,4 +1,12 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -fsyntax-only -finclude-default-header -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1D -DCOORD_TYPE=float \
+// RUN: %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -fsyntax-only -finclude-default-header -verify=expected,offset,dim1 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=float2 %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -fsyntax-only -finclude-default-header -verify=expected,offset,dim2 \
// RUN: -DHAS_OFFSET -DOFFSET_ARG="int2(1, 2)" -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s
@@ -31,9 +39,10 @@
//
// Check prefixes:
// offset diagnostics for types that have offset overloads
+// nooffset diagnostics for types that have no offset overloads
+// dim1 diagnostics naming a scalar offset or location
// dim2 diagnostics naming a 2-component offset or location
// vector
-// nooffset diagnostics for types that have no offset overloads
// dim3 diagnostics naming a 3-component offset or location
// vector
//
@@ -70,7 +79,8 @@ void main(COORD_TYPE loc) {
t.Sample(s, loc, OFFSET_ARG, 1.0);
- // expected-error at +5 {{no matching member function for call to 'Sample'}}
+ // expected-error at +6 {{no matching member function for call to 'Sample'}}
+ // dim1-note@*:* {{candidate function not viable: no known conversion from 'SamplerState' to 'int' for 3rd argument}}
// dim2-note@*:* {{candidate function not viable: no known conversion from 'SamplerState' to 'vector<int, 2>' (vector of 2 'int' values) for 3rd argument}}
// dim3-note@*:* {{candidate function not viable: no known conversion from 'SamplerState' to 'vector<int, 3>' (vector of 3 'int' values) for 3rd argument}}
// expected-note@*:* {{candidate function not viable: requires 2 arguments, but 3 were provided}}
diff --git a/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl b/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl
index e1e55497af1fa..ab666a914d899 100644
--- a/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl
@@ -1,43 +1,73 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=Texture2D -DINDEX_TYPE=uint2 \
// RUN: -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
-// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify -o - %s
+// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=Texture1D -DINDEX_TYPE=uint \
+// RUN: -DINDEX_ARG="1" -DWIDE_INDEX_TYPE=int2 -DWIDE_INDEX_ARG="int2(1, 2)" \
+// RUN: -verify=expected,scalaridx -o - %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=Texture2DArray -DINDEX_TYPE=uint3 \
// RUN: -DINDEX_ARG="uint3(1, 2, 0)" -DWIDE_INDEX_TYPE=int4 \
// RUN: -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" -DNARROW_INDEX_TYPE=uint2 \
-// RUN: -DNARROW_INDEX_ARG="uint2(1, 2)" -verify -o - %s
+// RUN: -DNARROW_INDEX_ARG="uint2(1, 2)" -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DTEXTURE=Texture3D -DINDEX_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(1, 2, 0)" -DWIDE_INDEX_TYPE=int4 \
-// RUN: -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" -DNARROW_INDEX_TYPE=uint2 \
-// RUN: -DNARROW_INDEX_ARG="uint2(1, 2)" -verify -o - %s
+// RUN: -finclude-default-header -DTEXTURE=Texture1DArray -DINDEX_TYPE=uint2 \
+// RUN: -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
+// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture2D -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint2 -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
-// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify -o - %s
+// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=RWTexture1D -DHAS_STORE \
+// RUN: -DINDEX_TYPE=uint -DINDEX_ARG="1" -DWIDE_INDEX_TYPE=int2 \
+// RUN: -DWIDE_INDEX_ARG="int2(1, 2)" -verify=expected,scalaridx -o - %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture2DArray -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint3 -DINDEX_ARG="uint3(1, 2, 0)" \
// RUN: -DWIDE_INDEX_TYPE=int4 -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" \
-// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" -verify \
-// RUN: -o - %s
+// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" \
+// RUN: -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DTEXTURE=RWTexture3D -DHAS_STORE \
-// RUN: -DINDEX_TYPE=uint3 -DINDEX_ARG="uint3(1, 2, 0)" \
-// RUN: -DWIDE_INDEX_TYPE=int4 -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" \
-// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" -verify \
-// RUN: -o - %s
+// RUN: -finclude-default-header -DTEXTURE=RWTexture1DArray -DHAS_STORE \
+// RUN: -DINDEX_TYPE=uint2 -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
+// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture2D -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint2 -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
-// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify -o - %s
+// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=RWTexture1D -DHAS_STORE \
+// RUN: -DINDEX_TYPE=uint -DINDEX_ARG="1" -DWIDE_INDEX_TYPE=int2 \
+// RUN: -DWIDE_INDEX_ARG="int2(1, 2)" -verify=expected,scalaridx -o - %s
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture2DArray -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint3 -DINDEX_ARG="uint3(1, 2, 0)" \
// RUN: -DWIDE_INDEX_TYPE=int4 -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" \
+// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" \
+// RUN: -verify=expected,vecidx -o - %s
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=RWTexture1DArray -DHAS_STORE \
+// RUN: -DINDEX_TYPE=uint2 -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
+// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=Texture3D -DINDEX_TYPE=uint3 \
+// RUN: -DINDEX_ARG="uint3(1, 2, 0)" -DWIDE_INDEX_TYPE=int4 \
+// RUN: -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" -DNARROW_INDEX_TYPE=uint2 \
+// RUN: -DNARROW_INDEX_ARG="uint2(1, 2)" -verify -o - %s
+
+// RWTexture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=RWTexture3D -DHAS_STORE \
+// RUN: -DINDEX_TYPE=uint3 -DINDEX_ARG="uint3(1, 2, 0)" \
+// RUN: -DWIDE_INDEX_TYPE=int4 -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" \
// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" -verify \
// RUN: -o - %s
+
+// RWTexture3D
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture3D -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint3 -DINDEX_ARG="uint3(1, 2, 0)" \
@@ -61,6 +91,10 @@
//
// The diagnostics use `-re` directives so that neither the type name nor the
// index width has to be spelled out per texture type.
+//
+// Verify prefixes:
+// vecidx the index is a coordinate vector
+// scalaridx 1D textures, whose index is a scalar
TEXTURE<float4> Tex;
TEXTURE<float> Tex2;
@@ -74,20 +108,25 @@ void main() {
// Reading through the subscript works for every texture type.
float4 val1 = Tex[valid_index];
- // The index has to be convertible to the coordinate vector.
+ // The index has to be convertible to the coordinate.
S s = { 1 };
- // expected-error-re at +2 {{no viable overloaded operator[] for type '{{.*}}Texture{{.*}}<float4>'}}
- // expected-note-re@*:* {{candidate function not viable: no known conversion from 'S' to 'vector<unsigned int, {{[0-9]}}>'}}
+ // expected-error-re at +3 {{no viable overloaded operator[] for type '{{.*}}Texture{{.*}}<float4>'}}
+ // vecidx-note-re@*:* {{candidate function not viable: no known conversion from 'S' to 'vector<unsigned int, {{[0-9]}}>'}}
+ // scalaridx-note@*:* {{candidate function not viable: no known conversion from 'S' to 'unsigned int'}}
float4 val2 = Tex[s];
- // A scalar index is splatted, which changes signedness.
+ // A signed scalar index is splatted into the coordinate vector, or used
+ // directly on a 1D texture; either way the signedness changes.
int i = 1;
- float4 val3 = Tex[i]; // expected-warning-re {{implicit conversion changes signedness: 'int' to 'vector<unsigned int, {{[0-9]}}>' (vector of {{[0-9]}} 'unsigned int' values)}}
+ // vecidx-warning-re at +2 {{implicit conversion changes signedness: 'int' to 'vector<unsigned int, {{[0-9]}}>' (vector of {{[0-9]}} 'unsigned int' values)}}
+ // scalaridx-warning at +1 {{implicit conversion changes signedness: 'int' to 'unsigned int'}}
+ float4 val3 = Tex[i];
// An index with one component too many is truncated.
WIDE_INDEX_TYPE big = WIDE_INDEX_ARG;
- // expected-warning-re at +2 {{implicit conversion truncates vector: 'int{{[0-9]}}' (aka 'vector<int, {{[0-9]}}>') to 'vector<unsigned int, {{[0-9]}}>' (vector of {{[0-9]}} 'unsigned int' values)}}
- // expected-warning-re at +1 {{implicit conversion changes signedness: 'int{{[0-9]}}' (aka 'vector<int, {{[0-9]}}>') to 'vector<unsigned int, {{[0-9]}}>' (vector of {{[0-9]}} 'unsigned int' values)}}
+ // vecidx-warning-re at +3 {{implicit conversion truncates vector: 'int{{[0-9]}}' (aka 'vector<int, {{[0-9]}}>') to 'vector<unsigned int, {{[0-9]}}>' (vector of {{[0-9]}} 'unsigned int' values)}}
+ // vecidx-warning-re at +2 {{implicit conversion changes signedness: 'int{{[0-9]}}' (aka 'vector<int, {{[0-9]}}>') to 'vector<unsigned int, {{[0-9]}}>' (vector of {{[0-9]}} 'unsigned int' values)}}
+ // scalaridx-warning-re at +1 {{implicit conversion turns vector to scalar: 'int{{[0-9]}}' (aka 'vector<int, {{[0-9]}}>') to 'unsigned int'}}
float4 val4 = Tex[big];
#ifdef NARROW_INDEX_TYPE
diff --git a/clang/test/SemaHLSL/Resources/Textures-declaration-order.hlsl b/clang/test/SemaHLSL/Resources/Textures-declaration-order.hlsl
index fc4a6555759ca..557a5a648475f 100644
--- a/clang/test/SemaHLSL/Resources/Textures-declaration-order.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-declaration-order.hlsl
@@ -12,6 +12,14 @@
// expected-no-diagnostics
#ifdef SCALAR_FIRST
+Texture1D<float> Tex1D;
+Texture1D<float2> Tex1DVec;
+RWTexture1D<float> RWTex1D;
+RWTexture1D<float2> RWTex1DVec;
+Texture1DArray<float> Tex1DArray;
+Texture1DArray<float2> Tex1DArrayVec;
+RWTexture1DArray<float> RWTex1DArray;
+RWTexture1DArray<float2> RWTex1DArrayVec;
Texture2D<float> Tex2D;
Texture2D<float2> Tex2DVec;
RWTexture2D<float> RWTex2D;
@@ -29,6 +37,14 @@ Texture3D<float2> Tex3DVec;
RWTexture3D<float> RWTex3D;
RWTexture3D<float2> RWTex3DVec;
#else
+Texture1D<float2> Tex1DVec;
+Texture1D<float> Tex1D;
+RWTexture1D<float2> RWTex1DVec;
+RWTexture1D<float> RWTex1D;
+Texture1DArray<float2> Tex1DArrayVec;
+Texture1DArray<float> Tex1DArray;
+RWTexture1DArray<float2> RWTex1DArrayVec;
+RWTexture1DArray<float> RWTex1DArray;
Texture2D<float2> Tex2DVec;
Texture2D<float> Tex2D;
RWTexture2D<float2> RWTex2DVec;
@@ -51,7 +67,17 @@ SamplerState Samp;
// Use members of both the primary template and the partial specialization to
// make sure both patterns really have been completed.
-export void useTextures(float2 UV, float3 UVW, float4 UVWA) {
+export void useTextures(float U, float2 UV, float3 UVW, float4 UVWA) {
+ float S1 = Tex1D.Sample(Samp, U);
+ float2 V1 = Tex1DVec.Sample(Samp, U);
+ RWTex1D[0] = S1;
+ RWTex1DVec[0] = V1;
+
+ float S1A = Tex1DArray.Sample(Samp, UV);
+ float2 V1A = Tex1DArrayVec.Sample(Samp, UV);
+ RWTex1DArray[uint2(0, 0)] = S1A;
+ RWTex1DArrayVec[uint2(0, 0)] = V1A;
+
float S = Tex2D.Sample(Samp, UV);
float2 V = Tex2DVec.Sample(Samp, UV);
RWTex2D[uint2(0, 0)] = S;
diff --git a/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl b/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl
index e89d9b9331f65..d4783aec5616c 100644
--- a/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl
@@ -3,26 +3,42 @@
// RUN: -DTEXTURE=Texture2D -DINDEX_TYPE=int2 -DHAS_MIPS -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=Texture3D -DINDEX_TYPE=int3 -DHAS_MIPS -verify %s
+// RUN: -DTEXTURE=Texture1D -DINDEX_TYPE=int -DHAS_MIPS -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=Texture2DArray -DINDEX_TYPE=int3 -DHAS_MIPS -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=Texture1DArray -DINDEX_TYPE=int2 -DHAS_MIPS -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=RWTexture2D -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=RWTexture3D -verify %s
+// RUN: -DTEXTURE=RWTexture1D -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=RWTexture2DArray -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=RWTexture1DArray -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=TextureCube -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=TextureCubeArray -verify %s
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=Texture3D -DINDEX_TYPE=int3 -DHAS_MIPS -verify %s
+
+// RWTexture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=RWTexture3D -verify %s
+
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
diff --git a/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl b/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl
index 518079a22cea4..4f202e9698efc 100644
--- a/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl
@@ -1,27 +1,45 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DHAS_TEXEL -DHAS_SAMPLE -DHAS_LOD \
+// RUN: -DTEXTURE=Texture1D -DCOORD_TYPE=float -DGRAD_TYPE=float \
+// RUN: -DOFFSET_TYPE=int -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DHAS_TEXEL -DHAS_SAMPLE -DHAS_LOD \
+// RUN: -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 -DGRAD_TYPE=float \
+// RUN: -DOFFSET_TYPE=int -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture2D \
// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float2 -DOFFSET_TYPE=int2 -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture3D \
-// RUN: -DCOORD_TYPE=float3 -DGRAD_TYPE=float3 -DOFFSET_TYPE=int3 -verify %s
+// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture1D \
+// RUN: -DCOORD_TYPE=float -DGRAD_TYPE=float -DOFFSET_TYPE=int -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture2DArray \
// RUN: -DCOORD_TYPE=float3 -DGRAD_TYPE=float2 -DOFFSET_TYPE=int2 -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DHAS_SAMPLE -DHAS_SAMPLE_CMP -DHAS_GATHER -DHAS_LOD \
+// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture1DArray \
+// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float -DOFFSET_TYPE=int -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DHAS_SAMPLE -DHAS_GATHER -DHAS_LOD \
// RUN: -DLOAD_ARG="int4(0, 0, 0, 0)" -DINDEX_ARG="uint3(0, 0, 0)" \
// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 -DOFFSET_TYPE=int3 -verify \
// RUN: %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DHAS_TEXEL -DHAS_SAMPLE -DHAS_LOD \
-// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -DOFFSET_TYPE=int3 \
-// RUN: -DGRAD_TYPE=float3 -verify %s
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DHAS_SAMPLE -DHAS_SAMPLE_CMP -DHAS_GATHER -DHAS_LOD \
+// RUN: -finclude-default-header -DHAS_SAMPLE -DHAS_GATHER -DHAS_LOD \
// RUN: -DLOAD_ARG="int4(0, 0, 0, 0)" -DINDEX_ARG="uint3(0, 0, 0)" \
// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 -DOFFSET_TYPE=int3 \
// RUN: -verify %s
+// RWTexture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture3D \
+// RUN: -DCOORD_TYPE=float3 -DGRAD_TYPE=float3 -DOFFSET_TYPE=int3 -verify %s
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DHAS_TEXEL -DHAS_SAMPLE -DHAS_LOD \
+// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -DOFFSET_TYPE=int3 \
+// RUN: -DGRAD_TYPE=float3 -verify %s
+
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
@@ -35,12 +53,11 @@
// dimension
// OFFSET_TYPE offset type, one component per resource dimension
// HAS_SAMPLE defined for types that have the Sample* methods
-// HAS_SAMPLE_CMP defined for types that have the comparison sampling
-// methods
// HAS_GATHER defined for types that have the Gather* methods
// HAS_LOD defined for types that have CalculateLevelOfDetail*
//
-// Writable (UAV) textures have no sampling, gathering or LOD methods.
+// Writable (UAV) textures have no sampling, gathering or LOD methods, and
+// 1D textures have no gathering methods.
TEXTURE<float4> Tex;
SamplerState Samp;
@@ -59,9 +76,6 @@ void main(COORD_TYPE uv) {
Tex.SampleBias(Samp, uv, 0.0f);
// expected-error-re at +1 {{no member named 'SampleGrad' in 'hlsl::{{.*}}Texture}}
Tex.SampleGrad(Samp, uv, (GRAD_TYPE)0, (GRAD_TYPE)0);
-#endif
-
-#ifndef HAS_SAMPLE_CMP
// expected-error-re at +1 {{no member named 'SampleCmp' in 'hlsl::{{.*}}Texture}}
Tex.SampleCmp(SampCmp, uv, compare);
// expected-error-re at +1 {{no member named 'SampleCmpLevelZero' in 'hlsl::{{.*}}Texture}}
>From 2f20ecf84c32dae1e966cc298ed752c6b08a8246 Mon Sep 17 00:00:00 2001
From: Deric Cheung <cheung.deric at gmail.com>
Date: Wed, 9 Sep 2026 15:59:51 -0700
Subject: [PATCH 2/6] Assert that result ty vec and the Elts size are the same
---
clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp b/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp
index 1e1cb97b0d132..e49b1cba7b1dd 100644
--- a/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp
+++ b/clang/lib/Sema/HLSLBuiltinTypeDeclBuilder.cpp
@@ -718,6 +718,8 @@ BuiltinTypeMethodBuilder &BuiltinTypeMethodBuilder::concat(V Vec, S Scalar,
Elts.push_back(VecExpr);
}
Elts.push_back(ScalarExpr);
+ assert(ResultTy->castAs<VectorType>()->getNumElements() == Elts.size() &&
+ "The result type must have one element per concatenated value.");
auto *InitList = new (AST) InitListExpr(
AST, SourceLocation(), Elts, SourceLocation(), /*isExplicit=*/false);
>From 54607254946069666b26f58f12a1e059cc5eeceb Mon Sep 17 00:00:00 2001
From: Deric Cheung <cheung.deric at gmail.com>
Date: Wed, 9 Sep 2026 16:00:10 -0700
Subject: [PATCH 3/6] Reorganize RUN lines in tests. Remove unused macros
---
clang/test/AST/HLSL/Textures-AST.hlsl | 71 +++--
clang/test/AST/HLSL/Textures-scalar-AST.hlsl | 28 +-
.../test/AST/HLSL/Textures-shorthand-AST.hlsl | 25 +-
clang/test/AST/HLSL/Textures-vector-AST.hlsl | 28 +-
.../Textures-CalculateLevelOfDetail.hlsl | 147 ++++------
.../resources/Textures-Gather.hlsl | 59 ++--
.../CodeGenHLSL/resources/Textures-Load.hlsl | 153 +++++------
.../CodeGenHLSL/resources/Textures-Mips.hlsl | 96 +++++--
.../resources/Textures-Sample.hlsl | 210 +++++++--------
.../resources/Textures-SampleBias.hlsl | 210 +++++++--------
.../resources/Textures-SampleCmp.hlsl | 185 ++++++-------
.../Textures-SampleCmpLevelZero.hlsl | 184 ++++++-------
.../resources/Textures-SampleGrad.hlsl | 196 +++++++-------
.../resources/Textures-SampleLevel.hlsl | 206 +++++++-------
.../resources/Textures-Subscript.hlsl | 252 +++++++-----------
.../Textures-default-explicit-binding.hlsl | 67 +++--
.../resources/Textures-default.hlsl | 136 ++++++----
.../Textures-shorthand-contexts.hlsl | 21 +-
.../Textures-CalculateLevelOfDetail.hlsl | 2 +-
.../Resources/Textures-SampleBias.hlsl | 3 +-
.../Resources/Textures-SampleCmp.hlsl | 4 +-
.../Textures-SampleCmpLevelZero.hlsl | 4 +-
.../Resources/Textures-SampleGrad.hlsl | 3 +-
.../Resources/Textures-SampleLevel.hlsl | 3 +-
.../Resources/Textures-Subscript.hlsl | 48 ++--
.../Resources/Textures-mips-errors.hlsl | 18 +-
.../Textures-unsupported-methods-errors.hlsl | 24 +-
27 files changed, 1126 insertions(+), 1257 deletions(-)
diff --git a/clang/test/AST/HLSL/Textures-AST.hlsl b/clang/test/AST/HLSL/Textures-AST.hlsl
index 9196c584d0767..5a456170501cd 100644
--- a/clang/test/AST/HLSL/Textures-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-AST.hlsl
@@ -1,61 +1,75 @@
+// Texture1D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
+// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=Texture1D -o - %s | FileCheck \
+// RUN: %s --check-prefixes=CHECK,SRV -DTEXTURE=Texture1D -DDIM_NAME=1D \
+// RUN: -DINDEX_TYPE="unsigned int" -DLOCATION_TYPE=int
+
+// Texture1DArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
+// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=Texture1DArray -o - %s | \
+// RUN: FileCheck %s --check-prefixes=CHECK,SRV,SRV-ARRAY \
+// RUN: -DTEXTURE=Texture1DArray -DDIM_NAME=1D \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
+// RUN: -DLOCATION_TYPE="vector<int, 2>"
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_GETDIM \
// RUN: -DINDEX_ARG_TYPE=uint3 -DINDEX_ARG="uint3(0, 0, 0)" \
// RUN: -DTEXTURE=Texture2D -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,SRV,GETDIM,GETDIM-SRV -DTEXTURE=Texture2D \
-// RUN: -DINDEX_DIM=2 -DDIM_NAME=2D -DINDEX_TYPE="vector<unsigned int, 2>" \
+// RUN: -DDIM_NAME=2D -DINDEX_TYPE="vector<unsigned int, 2>" \
// RUN: -DLOCATION_TYPE="vector<int, 2>"
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
-// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=Texture1D -o - %s | FileCheck \
-// RUN: %s --check-prefixes=CHECK,SRV -DTEXTURE=Texture1D -DINDEX_DIM=1 \
-// RUN: -DDIM_NAME=1D -DINDEX_TYPE="unsigned int" -DLOCATION_TYPE=int
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_GETDIM \
// RUN: -DINDEX_ARG_TYPE=uint3 -DINDEX_ARG="uint3(0, 0, 0)" \
// RUN: -DTEXTURE=Texture2DArray -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,SRV,SRV-ARRAY,GETDIM,GETDIM-SRV,GETDIM-SRV-ARRAY \
-// RUN: -DTEXTURE=Texture2DArray -DINDEX_DIM=3 -DDIM_NAME=2D \
+// RUN: -DTEXTURE=Texture2DArray -DDIM_NAME=2D \
// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" \
// RUN: -DLOCATION_TYPE="vector<int, 3>"
+
+// RWTexture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=Texture1DArray -o - %s | \
-// RUN: FileCheck %s --check-prefixes=CHECK,SRV,SRV-ARRAY \
-// RUN: -DTEXTURE=Texture1DArray -DINDEX_DIM=2 -DDIM_NAME=1D \
+// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=RWTexture1D -DRW=1 -o - %s | \
+// RUN: FileCheck %s --check-prefixes=CHECK,UAV,UAV-STORE,UAV-TRUNC \
+// RUN: -DTEXTURE=RWTexture1D -DDIM_NAME=1D -DINDEX_TYPE="unsigned int" \
+// RUN: -DLOCATION_TYPE=int -DTRUNC_TYPE="uint':'unsigned int"
+
+// RWTexture1DArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
+// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=RWTexture1DArray -DRW=1 -o - \
+// RUN: %s | FileCheck %s \
+// RUN: --check-prefixes=CHECK,UAV,UAV-ARRAY,UAV-STORE,UAV-TRUNC \
+// RUN: -DTEXTURE=RWTexture1DArray -DDIM_NAME=1D \
// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
-// RUN: -DLOCATION_TYPE="vector<int, 2>"
+// RUN: -DLOCATION_TYPE="vector<int, 2>" -DTRUNC_TYPE="vector<uint, 2>"
+
+// RWTexture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_GETDIM \
// RUN: -DINDEX_ARG_TYPE=uint3 -DINDEX_ARG="uint3(0, 0, 0)" \
// RUN: -DTEXTURE=RWTexture2D -DRW=1 -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,UAV,UAV-STORE,UAV-TRUNC,GETDIM,GETDIM-UAV \
-// RUN: -DTEXTURE=RWTexture2D -DINDEX_DIM=2 -DDIM_NAME=2D \
+// RUN: -DTEXTURE=RWTexture2D -DDIM_NAME=2D \
// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
// RUN: -DLOCATION_TYPE="vector<int, 2>" -DTRUNC_TYPE="vector<uint, 2>"
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
-// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=RWTexture1D -DRW=1 -o - %s | \
-// RUN: FileCheck %s --check-prefixes=CHECK,UAV,UAV-STORE,UAV-TRUNC \
-// RUN: -DTEXTURE=RWTexture1D -DINDEX_DIM=1 -DDIM_NAME=1D \
-// RUN: -DINDEX_TYPE="unsigned int" -DLOCATION_TYPE=int \
-// RUN: -DTRUNC_TYPE="uint':'unsigned int"
+
+// RWTexture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_GETDIM \
// RUN: -DINDEX_ARG_TYPE=uint3 -DINDEX_ARG="uint3(0, 0, 0)" \
// RUN: -DTEXTURE=RWTexture2DArray -DRW=1 -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,UAV,UAV-ARRAY,UAV-STORE,UAV-NOTRUNC,GETDIM,GETDIM-UAV,GETDIM-UAV-ARRAY \
-// RUN: -DTEXTURE=RWTexture2DArray -DINDEX_DIM=3 -DDIM_NAME=2D \
+// RUN: -DTEXTURE=RWTexture2DArray -DDIM_NAME=2D \
// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" \
// RUN: -DLOCATION_TYPE="vector<int, 3>"
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
-// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=RWTexture1DArray -DRW=1 -o - \
-// RUN: %s | FileCheck %s \
-// RUN: --check-prefixes=CHECK,UAV,UAV-ARRAY,UAV-STORE,UAV-TRUNC \
-// RUN: -DTEXTURE=RWTexture1DArray -DINDEX_DIM=2 -DDIM_NAME=1D \
-// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
-// RUN: -DLOCATION_TYPE="vector<int, 2>" -DTRUNC_TYPE="vector<uint, 2>"
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -63,7 +77,6 @@
// INDEX_ARG_TYPE the declared type of INDEX_ARG
// INDEX_ARG a literal operator[] index
// TEXTURE resource type name
-// INDEX_DIM operator[] index components
// INDEX_TYPE operator[] index type
// LOCATION_TYPE Load location type
// DIM_NAME hlsl::dimension spelling
diff --git a/clang/test/AST/HLSL/Textures-scalar-AST.hlsl b/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
index da9f410295fe0..69f7c731d0900 100644
--- a/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
@@ -1,11 +1,12 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
// RUN: -DHAS_SAMPLE_CMP -DTEXTURE=Texture1D -DCOORD_TYPE=float \
// RUN: -DGRAD_TYPE=float -DLOD_LOCATION=loc -DOFFSET_ARG="1" -o - %s | \
// RUN: FileCheck %s \
// RUN: --check-prefixes=CHECK,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
-// RUN: -DTEXTURE=Texture1D -DDIM_NAME=1D -DDIM=1 -DCOORD_DIM=1 -DLOAD_DIM=2 \
+// RUN: -DTEXTURE=Texture1D -DDIM_NAME=1D -DLOAD_DIM=2 \
// RUN: -DINDEX_TYPE="unsigned int" -DIS_ARRAY="" -DLOCATION_TYPE=float \
// RUN: -DGRADIENT_TYPE=float -DOFFSET_TYPE=int
@@ -16,8 +17,8 @@
// RUN: -DGRAD_TYPE=float -DLOD_LOCATION=loc.x -DOFFSET_ARG="1" -o - %s | \
// RUN: FileCheck %s \
// RUN: --check-prefixes=CHECK,ARRAY,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
-// RUN: -DTEXTURE=Texture1DArray -DDIM_NAME=1D -DDIM=1 -DCOORD_DIM=2 \
-// RUN: -DLOAD_DIM=3 -DINDEX_TYPE="vector<unsigned int, 2>" \
+// RUN: -DTEXTURE=Texture1DArray -DDIM_NAME=1D -DLOAD_DIM=3 \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 2>" \
// RUN: -DGRADIENT_TYPE=float -DOFFSET_TYPE=int
@@ -28,7 +29,7 @@
// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float2 -DLOD_LOCATION=loc \
// RUN: -DOFFSET_ARG="int2(1, 2)" -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,TEXEL,OFFSET,GETDIM-XY,SAMPLECMP,SAMPLECMP-OFFSET,GATHER,GATHER-OFFSET \
-// RUN: -DTEXTURE=Texture2D -DDIM_NAME=2D -DDIM=2 -DCOORD_DIM=2 -DLOAD_DIM=3 \
+// RUN: -DTEXTURE=Texture2D -DDIM_NAME=2D -DLOAD_DIM=3 \
// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" -DIS_ARRAY="" \
// RUN: -DLOCATION_TYPE="vector<float, 2>" \
// RUN: -DGRADIENT_TYPE="vector<float, 2>" -DOFFSET_TYPE="vector<int, 2>"
@@ -41,8 +42,8 @@
// RUN: -DLOD_LOCATION=loc.xy -DOFFSET_ARG="int2(1, 2)" -o - %s | FileCheck \
// RUN: %s \
// RUN: --check-prefixes=CHECK,ARRAY,TEXEL,OFFSET,GETDIM-XY,SAMPLECMP,SAMPLECMP-OFFSET,GATHER,GATHER-OFFSET \
-// RUN: -DTEXTURE=Texture2DArray -DDIM_NAME=2D -DDIM=2 -DCOORD_DIM=3 \
-// RUN: -DLOAD_DIM=4 -DINDEX_TYPE="vector<unsigned int, 3>" \
+// RUN: -DTEXTURE=Texture2DArray -DDIM_NAME=2D -DLOAD_DIM=4 \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" \
// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 3>" \
// RUN: -DGRADIENT_TYPE="vector<float, 2>" -DOFFSET_TYPE="vector<int, 2>"
@@ -52,9 +53,8 @@
// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -DGRAD_TYPE=float3 \
// RUN: -DLOD_LOCATION=loc -DOFFSET_ARG="int3(1, 2, 3)" -o - %s | FileCheck \
// RUN: %s --check-prefixes=CHECK,TEXEL,OFFSET -DTEXTURE=Texture3D \
-// RUN: -DDIM_NAME=3D -DDIM=3 -DCOORD_DIM=3 -DLOAD_DIM=4 \
-// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" -DIS_ARRAY="" \
-// RUN: -DLOCATION_TYPE="vector<float, 3>" \
+// RUN: -DDIM_NAME=3D -DLOAD_DIM=4 -DINDEX_TYPE="vector<unsigned int, 3>" \
+// RUN: -DIS_ARRAY="" -DLOCATION_TYPE="vector<float, 3>" \
// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
// TextureCube
@@ -63,8 +63,7 @@
// RUN: -DHAS_GATHER -DTEXTURE=TextureCube -DCOORD_TYPE=float3 \
// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,SAMPLECMP,GATHER -DTEXTURE=TextureCube \
-// RUN: -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=3 -DIS_ARRAY="" \
-// RUN: -DLOCATION_TYPE="vector<float, 3>" \
+// RUN: -DDIM_NAME=Cube -DIS_ARRAY="" -DLOCATION_TYPE="vector<float, 3>" \
// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
// TextureCubeArray
@@ -73,8 +72,8 @@
// RUN: -DHAS_GATHER -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 \
// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc.xyz -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,SAMPLECMP,GATHER -DTEXTURE=TextureCubeArray \
-// RUN: -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=4 \
-// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 4>" \
+// RUN: -DDIM_NAME=Cube -DIS_ARRAY=" [[hlsl::is_array]]" \
+// RUN: -DLOCATION_TYPE="vector<float, 4>" \
// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
// Parameterized over the texture types in the RUN lines above; adding a texture
@@ -95,9 +94,6 @@
// LOD_LOCATION expression producing a LOD_TYPE location from `loc`
// OFFSET_ARG a literal offset argument
// DIM_NAME hlsl::dimension spelling
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
-// COORD_DIM sample location components (DIM plus the array slice)
// LOAD_DIM Load location components (COORD_DIM plus the mip level)
// INDEX_TYPE operator[] index type
//
diff --git a/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl b/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl
index e359d00c05d29..4250f8d7843d1 100644
--- a/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl
@@ -1,20 +1,20 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture1D -o \
// RUN: - %s | FileCheck %s -DTEXTURE=Texture1D
+
+// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=Texture1DArray -o - %s | FileCheck %s \
// RUN: -DTEXTURE=Texture1DArray
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2D -o \
// RUN: - %s | FileCheck %s -DTEXTURE=Texture2D
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
-// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=TextureCube \
-// RUN: -o - %s | FileCheck %s -DTEXTURE=TextureCube
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
-// RUN: -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=TextureCubeArray -o - %s | FileCheck %s \
-// RUN: -DTEXTURE=TextureCubeArray
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=Texture2DArray -o - %s | FileCheck %s \
@@ -26,6 +26,17 @@
// RUN: -o - %s \
// RUN: | FileCheck %s -DTEXTURE=Texture3D
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=TextureCube \
+// RUN: -o - %s | FileCheck %s -DTEXTURE=TextureCube
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
+// RUN: -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=TextureCubeArray -o - %s | FileCheck %s \
+// RUN: -DTEXTURE=TextureCubeArray
+
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
diff --git a/clang/test/AST/HLSL/Textures-vector-AST.hlsl b/clang/test/AST/HLSL/Textures-vector-AST.hlsl
index 41f707ec8c182..80c75d640f3a6 100644
--- a/clang/test/AST/HLSL/Textures-vector-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-vector-AST.hlsl
@@ -1,11 +1,12 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
// RUN: -DHAS_SAMPLE_CMP -DTEXTURE=Texture1D -DCOORD_TYPE=float \
// RUN: -DGRAD_TYPE=float -DLOD_LOCATION=loc -DOFFSET_ARG="1" -o - %s | \
// RUN: FileCheck %s \
// RUN: --check-prefixes=CHECK,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
-// RUN: -DTEXTURE=Texture1D -DDIM_NAME=1D -DDIM=1 -DCOORD_DIM=1 -DLOAD_DIM=2 \
+// RUN: -DTEXTURE=Texture1D -DDIM_NAME=1D -DLOAD_DIM=2 \
// RUN: -DINDEX_TYPE="unsigned int" -DIS_ARRAY="" -DLOCATION_TYPE=float \
// RUN: -DGRADIENT_TYPE=float -DOFFSET_TYPE=int
@@ -16,8 +17,8 @@
// RUN: -DGRAD_TYPE=float -DLOD_LOCATION=loc.x -DOFFSET_ARG="1" -o - %s | \
// RUN: FileCheck %s \
// RUN: --check-prefixes=CHECK,ARRAY,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
-// RUN: -DTEXTURE=Texture1DArray -DDIM_NAME=1D -DDIM=1 -DCOORD_DIM=2 \
-// RUN: -DLOAD_DIM=3 -DINDEX_TYPE="vector<unsigned int, 2>" \
+// RUN: -DTEXTURE=Texture1DArray -DDIM_NAME=1D -DLOAD_DIM=3 \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 2>" \
// RUN: -DGRADIENT_TYPE=float -DOFFSET_TYPE=int
@@ -28,7 +29,7 @@
// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float2 -DLOD_LOCATION=loc \
// RUN: -DOFFSET_ARG="int2(1, 2)" -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,TEXEL,OFFSET,GETDIM-XY,SAMPLECMP,SAMPLECMP-OFFSET,GATHER,GATHER-OFFSET \
-// RUN: -DTEXTURE=Texture2D -DDIM_NAME=2D -DDIM=2 -DCOORD_DIM=2 -DLOAD_DIM=3 \
+// RUN: -DTEXTURE=Texture2D -DDIM_NAME=2D -DLOAD_DIM=3 \
// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" -DIS_ARRAY="" \
// RUN: -DLOCATION_TYPE="vector<float, 2>" \
// RUN: -DGRADIENT_TYPE="vector<float, 2>" -DOFFSET_TYPE="vector<int, 2>"
@@ -41,8 +42,8 @@
// RUN: -DLOD_LOCATION=loc.xy -DOFFSET_ARG="int2(1, 2)" -o - %s | FileCheck \
// RUN: %s \
// RUN: --check-prefixes=CHECK,ARRAY,TEXEL,OFFSET,GETDIM-XY,SAMPLECMP,SAMPLECMP-OFFSET,GATHER,GATHER-OFFSET \
-// RUN: -DTEXTURE=Texture2DArray -DDIM_NAME=2D -DDIM=2 -DCOORD_DIM=3 \
-// RUN: -DLOAD_DIM=4 -DINDEX_TYPE="vector<unsigned int, 3>" \
+// RUN: -DTEXTURE=Texture2DArray -DDIM_NAME=2D -DLOAD_DIM=4 \
+// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" \
// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 3>" \
// RUN: -DGRADIENT_TYPE="vector<float, 2>" -DOFFSET_TYPE="vector<int, 2>"
@@ -52,9 +53,8 @@
// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -DGRAD_TYPE=float3 \
// RUN: -DLOD_LOCATION=loc -DOFFSET_ARG="int3(1, 2, 3)" -o - %s | FileCheck \
// RUN: %s --check-prefixes=CHECK,TEXEL,OFFSET -DTEXTURE=Texture3D \
-// RUN: -DDIM_NAME=3D -DDIM=3 -DCOORD_DIM=3 -DLOAD_DIM=4 \
-// RUN: -DINDEX_TYPE="vector<unsigned int, 3>" -DIS_ARRAY="" \
-// RUN: -DLOCATION_TYPE="vector<float, 3>" \
+// RUN: -DDIM_NAME=3D -DLOAD_DIM=4 -DINDEX_TYPE="vector<unsigned int, 3>" \
+// RUN: -DIS_ARRAY="" -DLOCATION_TYPE="vector<float, 3>" \
// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
// TextureCube
@@ -63,8 +63,7 @@
// RUN: -DHAS_GATHER -DTEXTURE=TextureCube -DCOORD_TYPE=float3 \
// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,SAMPLECMP,GATHER -DTEXTURE=TextureCube \
-// RUN: -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=3 -DIS_ARRAY="" \
-// RUN: -DLOCATION_TYPE="vector<float, 3>" \
+// RUN: -DDIM_NAME=Cube -DIS_ARRAY="" -DLOCATION_TYPE="vector<float, 3>" \
// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
// TextureCubeArray
@@ -73,8 +72,8 @@
// RUN: -DHAS_GATHER -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 \
// RUN: -DGRAD_TYPE=float3 -DLOD_LOCATION=loc.xyz -o - %s | FileCheck %s \
// RUN: --check-prefixes=CHECK,SAMPLECMP,GATHER -DTEXTURE=TextureCubeArray \
-// RUN: -DDIM_NAME=Cube -DDIM=3 -DCOORD_DIM=4 \
-// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 4>" \
+// RUN: -DDIM_NAME=Cube -DIS_ARRAY=" [[hlsl::is_array]]" \
+// RUN: -DLOCATION_TYPE="vector<float, 4>" \
// RUN: -DGRADIENT_TYPE="vector<float, 3>" -DOFFSET_TYPE="vector<int, 3>"
// Parameterized over the texture types in the RUN lines above; adding a texture
@@ -95,9 +94,6 @@
// LOD_LOCATION expression producing a LOD_TYPE location from `loc`
// OFFSET_ARG a literal offset argument
// DIM_NAME hlsl::dimension spelling
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
-// COORD_DIM sample location components (DIM plus the array slice)
// LOAD_DIM Load location components (COORD_DIM plus the mip level)
// INDEX_TYPE operator[] index type
//
diff --git a/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl b/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
index 69a1363f56dc4..9d784aa953b75 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
@@ -1,118 +1,80 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float \
// RUN: -DTEXTURE=Texture1D %s | llvm-cxxfilt | FileCheck %s \
// RUN: -DTEXTURE=Texture1D --check-prefixes=CHECK,DXIL -DDXIL_TY=1 -DRW=0 \
-// RUN: -DDIM=1 -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float \
-// RUN: -DTEXTURE=Texture1DArray %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture1DArray --check-prefixes=CHECK,DXIL -DDXIL_TY=6 \
-// RUN: -DRW=0 -DDIM=1 -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
-// RUN: -DTEXTURE=Texture2D %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D --check-prefixes=CHECK,DXIL -DDXIL_TY=2 -DRW=0 \
-// RUN: -DDIM=2 -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=TextureCube %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=TextureCube --check-prefixes=CHECK,DXIL -DDXIL_TY=5 -DRW=0 \
-// RUN: -DDIM=3 -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=TextureCubeArray %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=TextureCubeArray --check-prefixes=CHECK,DXIL -DDXIL_TY=9 \
-// RUN: -DRW=0 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
-// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float \
// RUN: -DTEXTURE=Texture1D %s | llvm-cxxfilt | FileCheck %s \
// RUN: -DTEXTURE=Texture1D --check-prefixes=CHECK,SPIRV -DARRAYED=0 \
-// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 -DCOORD_LLVM=float \
-// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float
+
+// Texture1DArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float \
+// RUN: -DTEXTURE=Texture1DArray %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1DArray --check-prefixes=CHECK,DXIL -DDXIL_TY=6 \
+// RUN: -DRW=0 -DGRAD_LLVM=float -DGRAD_CXX=float
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float \
// RUN: -DTEXTURE=Texture1DArray %s | llvm-cxxfilt | FileCheck %s \
// RUN: -DTEXTURE=Texture1DArray --check-prefixes=CHECK,SPIRV -DARRAYED=1 \
-// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float
+
+// Texture2D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
+// RUN: -DTEXTURE=Texture2D %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D --check-prefixes=CHECK,DXIL -DDXIL_TY=2 -DRW=0 \
+// RUN: -DGRAD_LLVM="<2 x float>" -DGRAD_CXX="float vector[2]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
// RUN: -DTEXTURE=Texture2D %s | llvm-cxxfilt | FileCheck %s \
// RUN: -DTEXTURE=Texture2D --check-prefixes=CHECK,SPIRV -DARRAYED=0 \
-// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=TextureCube %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=TextureCube --check-prefixes=CHECK,SPIRV -DARRAYED=0 \
-// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=TextureCubeArray %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=TextureCubeArray --check-prefixes=CHECK,SPIRV -DARRAYED=1 \
-// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
-// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]"
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
// RUN: -DTEXTURE=Texture2DArray %s | llvm-cxxfilt | FileCheck %s \
// RUN: -DTEXTURE=Texture2DArray --check-prefixes=CHECK,DXIL -DDXIL_TY=7 \
-// RUN: -DRW=0 -DDIM=2 -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DRW=0 -DGRAD_LLVM="<2 x float>" -DGRAD_CXX="float vector[2]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float2 \
// RUN: -DTEXTURE=Texture2DArray %s | llvm-cxxfilt | FileCheck %s \
// RUN: -DTEXTURE=Texture2DArray --check-prefixes=CHECK,SPIRV -DARRAYED=1 \
-// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_CXX="float vector[2]"
+
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
+// RUN: -DTEXTURE=TextureCube %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=TextureCube --check-prefixes=CHECK,DXIL -DDXIL_TY=5 -DRW=0 \
+// RUN: -DGRAD_LLVM="<3 x float>" -DGRAD_CXX="float vector[3]"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
+// RUN: -DTEXTURE=TextureCube %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=TextureCube --check-prefixes=CHECK,SPIRV -DARRAYED=0 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]"
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
+// RUN: -DTEXTURE=TextureCubeArray %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=TextureCubeArray --check-prefixes=CHECK,DXIL -DDXIL_TY=9 \
+// RUN: -DRW=0 -DGRAD_LLVM="<3 x float>" -DGRAD_CXX="float vector[3]"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
+// RUN: -DTEXTURE=TextureCubeArray %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=TextureCubeArray --check-prefixes=CHECK,SPIRV -DARRAYED=1 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]"
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
@@ -138,11 +100,8 @@
// LOD_TYPE CalculateLevelOfDetail location type
// TEXTURE resource type name
// GRAD_CXX ddx/ddy type in the C++ signature
-// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
// ARRAYED spirv.Image Arrayed operand
// SAMPLED spirv.Image Sampled operand
// IMG_FMT spirv.Image Image Format operand
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Gather.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Gather.hlsl
index 86da05951fb6f..2ddebfaf037dd 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Gather.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Gather.hlsl
@@ -1,3 +1,4 @@
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
@@ -6,18 +7,6 @@
// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>"
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=5 -DRW=0 -DDIM=3
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=9 -DRW=0 -DDIM=3
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
@@ -27,20 +16,8 @@
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL -DARRAYED=0 -DSAMPLED=1 \
-// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL -DARRAYED=1 -DSAMPLED=1 \
-// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
@@ -59,6 +36,36 @@
// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
// RUN: -DOFFSET_CONST="<i32 1, i32 2>"
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=5 -DRW=0 -DDIM=3
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL -DARRAYED=0 -DSAMPLED=1 \
+// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=9 -DRW=0 -DDIM=3
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL -DARRAYED=1 -DSAMPLED=1 \
+// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3
+
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
index 929cefa8f018e..604c446e124a8 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
@@ -5,9 +5,8 @@
// RUN: -DLOAD_ARG="int2(loc, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
// RUN: --check-prefixes=CHECK,SRV,SCALAR-COORD,WIDE-LOC,DXIL,DXIL-SRV \
// RUN: -DTEXTURE=Texture1D -D#LOAD_DIM=2 -DCOORD_DIM=1 -DDXIL_TY=1 -DRW=0 \
-// RUN: -DENTRY_DIM=1 -DDIM=1 -DCOORD_LLVM=i32 -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0 -DOFFSET_CONST=1 \
-// RUN: -DENTRY_CXX=int -DLOAD_LLVM="<2 x i32>" \
+// RUN: -DCOORD_LLVM=i32 -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0 \
+// RUN: -DOFFSET_CONST=1 -DENTRY_CXX=int -DLOAD_LLVM="<2 x i32>" \
// RUN: -DLOAD_CXX="int vector[2]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
@@ -16,10 +15,9 @@
// RUN: --check-prefixes=CHECK,SRV,SCALAR-COORD,WIDE-LOC,SPIRV,SPIRV-SRV \
// RUN: -DTEXTURE=Texture1D -D#LOAD_DIM=2 -DCOORD_DIM=1 -DARRAYED=0 \
// RUN: -DSAMPLED=1 -DFORMAT1=0 -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 \
-// RUN: -DFORMAT24=0 -DFORMAT25=0 -DSPV_DIM=0 -DENTRY_DIM=1 -DDIM=1 \
-// RUN: -DCOORD_LLVM=i32 -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0 -DOFFSET_CONST=1 -DENTRY_CXX=int \
-// RUN: -DLOAD_LLVM="<2 x i32>" -DLOAD_CXX="int vector[2]"
+// RUN: -DFORMAT24=0 -DFORMAT25=0 -DSPV_DIM=0 -DCOORD_LLVM=i32 \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0 -DOFFSET_CONST=1 \
+// RUN: -DENTRY_CXX=int -DLOAD_LLVM="<2 x i32>" -DLOAD_CXX="int vector[2]"
// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
@@ -28,11 +26,10 @@
// RUN: -DLOAD_ARG="int3(loc, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,DXIL,DXIL-SRV \
// RUN: -DTEXTURE=Texture1DArray -D#LOAD_DIM=3 -DCOORD_DIM=2 \
-// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DDXIL_TY=6 -DRW=0 -DENTRY_DIM=2 \
-// RUN: -DDIM=1 -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0 -DOFFSET_CONST=1 \
-// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<3 x i32>" \
-// RUN: -DLOAD_CXX="int vector[3]"
+// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DDXIL_TY=6 -DRW=0 \
+// RUN: -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0 -DOFFSET_CONST=1 -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_LLVM="<3 x i32>" -DLOAD_CXX="int vector[3]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1DArray \
@@ -41,10 +38,11 @@
// RUN: -DTEXTURE=Texture1DArray -D#LOAD_DIM=3 -DCOORD_DIM=2 \
// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DARRAYED=1 -DSAMPLED=1 -DFORMAT1=0 \
// RUN: -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 -DFORMAT24=0 -DFORMAT25=0 \
-// RUN: -DSPV_DIM=0 -DENTRY_DIM=2 -DDIM=1 -DCOORD_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0 \
-// RUN: -DOFFSET_CONST=1 -DENTRY_CXX="int vector[2]" \
-// RUN: -DLOAD_LLVM="<3 x i32>" -DLOAD_CXX="int vector[3]"
+// RUN: -DSPV_DIM=0 -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0 -DOFFSET_CONST=1 \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<3 x i32>" \
+// RUN: -DLOAD_CXX="int vector[3]"
+
// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
@@ -52,8 +50,8 @@
// RUN: -DLOAD_ARG="int3(loc, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,DXIL,DXIL-SRV \
// RUN: -DTEXTURE=Texture2D -D#LOAD_DIM=3 -DCOORD_DIM=2 \
-// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DDXIL_TY=2 -DRW=0 -DENTRY_DIM=2 \
-// RUN: -DDIM=2 -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DDXIL_TY=2 -DRW=0 \
+// RUN: -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
// RUN: -DLOAD_LLVM="<3 x i32>" -DLOAD_CXX="int vector[3]"
@@ -65,11 +63,10 @@
// RUN: -DTEXTURE=Texture2D -D#LOAD_DIM=3 -DCOORD_DIM=2 \
// RUN: -DCOORD_MASK="<i32 0, i32 1>" -DARRAYED=0 -DSAMPLED=1 -DFORMAT1=0 \
// RUN: -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 -DFORMAT24=0 -DFORMAT25=0 \
-// RUN: -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2 -DCOORD_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
-// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
-// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<3 x i32>" \
-// RUN: -DLOAD_CXX="int vector[3]"
+// RUN: -DSPV_DIM=1 -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
+// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_LLVM="<3 x i32>" -DLOAD_CXX="int vector[3]"
// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
@@ -79,11 +76,10 @@
// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,DXIL,DXIL-SRV \
// RUN: -DTEXTURE=Texture2DArray -D#LOAD_DIM=4 -DCOORD_DIM=3 \
// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DDXIL_TY=7 -DRW=0 \
-// RUN: -DENTRY_DIM=2 -DDIM=2 -DCOORD_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
-// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
-// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<4 x i32>" \
-// RUN: -DLOAD_CXX="int vector[4]"
+// RUN: -DCOORD_LLVM="<3 x i32>" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
+// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_LLVM="<4 x i32>" -DLOAD_CXX="int vector[4]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
// RUN: -DHAS_OFFSET -DOFFSET_ARG="int2(1, 1)" -DTEXTURE=Texture2DArray \
@@ -92,11 +88,11 @@
// RUN: -DTEXTURE=Texture2DArray -D#LOAD_DIM=4 -DCOORD_DIM=3 \
// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DARRAYED=1 -DSAMPLED=1 \
// RUN: -DFORMAT1=0 -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 -DFORMAT24=0 \
-// RUN: -DFORMAT25=0 -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2 \
-// RUN: -DCOORD_LLVM="<3 x i32>" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
-// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
-// RUN: -DLOAD_LLVM="<4 x i32>" -DLOAD_CXX="int vector[4]"
+// RUN: -DFORMAT25=0 -DSPV_DIM=1 -DCOORD_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<4 x i32>" \
+// RUN: -DLOAD_CXX="int vector[4]"
// RWTexture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
@@ -104,41 +100,17 @@
// RUN: -DTEXTURE=RWTexture1D -DLOAD_ARG="loc" -o - %s | llvm-cxxfilt | \
// RUN: FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,DXIL,DXIL-UAV \
// RUN: -DTEXTURE=RWTexture1D -D#LOAD_DIM=1 -DCOORD_DIM=1 -DDXIL_TY=1 -DRW=1 \
-// RUN: -DENTRY_DIM=1 -DDIM=1 -DCOORD_LLVM=i32 -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0 -DOFFSET_CONST=1 \
-// RUN: -DENTRY_CXX=int -DLOAD_LLVM=i32 -DLOAD_CXX=int
+// RUN: -DCOORD_LLVM=i32 -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0 \
+// RUN: -DOFFSET_CONST=1 -DENTRY_CXX=int -DLOAD_LLVM=i32 -DLOAD_CXX=int
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
// RUN: -DTEXTURE=RWTexture1D -DLOAD_ARG="loc" -o - %s | llvm-cxxfilt | \
// RUN: FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,SPIRV,SPIRV-UAV \
// RUN: -DTEXTURE=RWTexture1D -D#LOAD_DIM=1 -DCOORD_DIM=1 -DARRAYED=0 \
// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
-// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=0 -DENTRY_DIM=1 -DDIM=1 \
-// RUN: -DCOORD_LLVM=i32 -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0 -DOFFSET_CONST=1 -DENTRY_CXX=int -DLOAD_LLVM=i32 \
-// RUN: -DLOAD_CXX=int
-// RWTexture2D
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DTEXTURE=RWTexture2D -DLOAD_ARG="loc" -o - %s | llvm-cxxfilt | \
-// RUN: FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,DXIL,DXIL-UAV \
-// RUN: -DTEXTURE=RWTexture2D -D#LOAD_DIM=2 -DCOORD_DIM=2 -DDXIL_TY=2 -DRW=1 \
-// RUN: -DENTRY_DIM=2 -DDIM=2 -DCOORD_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
-// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
-// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<2 x i32>" \
-// RUN: -DLOAD_CXX="int vector[2]"
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DTEXTURE=RWTexture2D -DLOAD_ARG="loc" -o - %s | llvm-cxxfilt | \
-// RUN: FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,SPIRV,SPIRV-UAV \
-// RUN: -DTEXTURE=RWTexture2D -D#LOAD_DIM=2 -DCOORD_DIM=2 -DARRAYED=0 \
-// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
-// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2 \
-// RUN: -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
-// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
-// RUN: -DLOAD_LLVM="<2 x i32>" -DLOAD_CXX="int vector[2]"
+// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=0 -DCOORD_LLVM=i32 \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0 -DOFFSET_CONST=1 \
+// RUN: -DENTRY_CXX=int -DLOAD_LLVM=i32 -DLOAD_CXX=int
// RWTexture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
@@ -147,10 +119,9 @@
// RUN: llvm-cxxfilt | FileCheck %s \
// RUN: --check-prefixes=CHECK,UAV,WIDE-LOC,DXIL,DXIL-UAV \
// RUN: -DTEXTURE=RWTexture1DArray -D#LOAD_DIM=2 -DCOORD_DIM=2 -DDXIL_TY=6 \
-// RUN: -DRW=1 -DENTRY_DIM=1 -DDIM=1 -DCOORD_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0 \
-// RUN: -DOFFSET_CONST=1 -DENTRY_CXX=int -DLOAD_LLVM="<2 x i32>" \
-// RUN: -DLOAD_CXX="int vector[2]"
+// RUN: -DRW=1 -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DOFFSET_ZERO=0 -DOFFSET_CONST=1 -DENTRY_CXX=int \
+// RUN: -DLOAD_LLVM="<2 x i32>" -DLOAD_CXX="int vector[2]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
// RUN: -DTEXTURE=RWTexture1DArray -DLOAD_ARG="int2(loc, 0)" -o - %s | \
@@ -158,10 +129,32 @@
// RUN: --check-prefixes=CHECK,UAV,WIDE-LOC,SPIRV,SPIRV-UAV \
// RUN: -DTEXTURE=RWTexture1DArray -D#LOAD_DIM=2 -DCOORD_DIM=2 -DARRAYED=1 \
// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
-// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=0 -DENTRY_DIM=1 -DDIM=1 \
-// RUN: -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0 -DOFFSET_CONST=1 -DENTRY_CXX=int \
+// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=0 -DCOORD_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0 -DOFFSET_CONST=1 \
+// RUN: -DENTRY_CXX=int -DLOAD_LLVM="<2 x i32>" -DLOAD_CXX="int vector[2]"
+
+// RWTexture2D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
+// RUN: -DTEXTURE=RWTexture2D -DLOAD_ARG="loc" -o - %s | llvm-cxxfilt | \
+// RUN: FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,DXIL,DXIL-UAV \
+// RUN: -DTEXTURE=RWTexture2D -D#LOAD_DIM=2 -DCOORD_DIM=2 -DDXIL_TY=2 -DRW=1 \
+// RUN: -DCOORD_LLVM="<2 x i32>" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
+// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
// RUN: -DLOAD_LLVM="<2 x i32>" -DLOAD_CXX="int vector[2]"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
+// RUN: -DTEXTURE=RWTexture2D -DLOAD_ARG="loc" -o - %s | llvm-cxxfilt | \
+// RUN: FileCheck %s --check-prefixes=CHECK,UAV,EXACT-LOC,SPIRV,SPIRV-UAV \
+// RUN: -DTEXTURE=RWTexture2D -D#LOAD_DIM=2 -DCOORD_DIM=2 -DARRAYED=0 \
+// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
+// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=1 -DCOORD_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<2 x i32>" \
+// RUN: -DLOAD_CXX="int vector[2]"
+
// RWTexture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
@@ -169,11 +162,10 @@
// RUN: llvm-cxxfilt | FileCheck %s \
// RUN: --check-prefixes=CHECK,UAV,WIDE-LOC,DXIL,DXIL-UAV \
// RUN: -DTEXTURE=RWTexture2DArray -D#LOAD_DIM=3 -DCOORD_DIM=3 -DDXIL_TY=7 \
-// RUN: -DRW=1 -DENTRY_DIM=2 -DDIM=2 -DCOORD_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
-// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
-// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<3 x i32>" \
-// RUN: -DLOAD_CXX="int vector[3]"
+// RUN: -DRW=1 -DCOORD_LLVM="<3 x i32>" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
+// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_LLVM="<3 x i32>" -DLOAD_CXX="int vector[3]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
// RUN: -DTEXTURE=RWTexture2DArray -DLOAD_ARG="int3(loc, 0)" -o - %s | \
@@ -181,11 +173,11 @@
// RUN: --check-prefixes=CHECK,UAV,WIDE-LOC,SPIRV,SPIRV-UAV \
// RUN: -DTEXTURE=RWTexture2DArray -D#LOAD_DIM=3 -DCOORD_DIM=3 -DARRAYED=1 \
// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
-// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=1 -DENTRY_DIM=2 -DDIM=2 \
-// RUN: -DCOORD_LLVM="<3 x i32>" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer \
-// RUN: -DOFFSET_CONST="splat (i32 1)" -DENTRY_CXX="int vector[2]" \
-// RUN: -DLOAD_LLVM="<3 x i32>" -DLOAD_CXX="int vector[3]"
+// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=1 -DCOORD_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)" \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<3 x i32>" \
+// RUN: -DLOAD_CXX="int vector[3]"
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
@@ -257,9 +249,6 @@
// ENTRY_CXX the entry point's coordinate type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
-// ENTRY_DIM the entry point's own coordinate components
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
// ARRAYED spirv.Image Arrayed operand
// SAMPLED spirv.Image Sampled operand
// SPV_DIM spirv.Image Dim operand
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl
index 70b1939116bf5..80b892f2a525b 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl
@@ -1,33 +1,89 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
// RUN: -DTEXTURE=Texture1D -DCOORD_TYPE=float -DINDEX_TYPE=int -o - %s | \
// RUN: llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,SCALAR-COORD \
-// RUN: -DTEXTURE=Texture1D -DCOORD_DIM=1 -DLOAD_DIM=2 -DDXIL_TY=1 -DDIM=1 \
+// RUN: -DTEXTURE=Texture1D -DCOORD_DIM=1 -DLOAD_DIM=2 \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 1)' \
+// RUN: -DMIPS_OFFSET='i32 4' \
// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
// RUN: -DINDEX_CXX=int -DOFFSET_LLVM=i32 -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-unknown-vulkan-pixel -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
+// RUN: -DTEXTURE=Texture1D -DCOORD_TYPE=float -DINDEX_TYPE=int -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,SCALAR-COORD \
+// RUN: -DTEXTURE=Texture1D -DCOORD_DIM=1 -DLOAD_DIM=2 \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 0, 2, 0, 0, 1, 0)' \
+// RUN: -DMIPS_OFFSET='i64 8' \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX=int -DOFFSET_LLVM=i32 -DOFFSET_ZERO=0
+
+// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
// RUN: -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 -DINDEX_TYPE=int2 -o - \
// RUN: %s | llvm-cxxfilt | FileCheck %s \
// RUN: --check-prefixes=CHECK,COORD2,VEC-COORD -DTEXTURE=Texture1DArray \
-// RUN: -DCOORD_DIM=2 -DLOAD_DIM=3 -DDXIL_TY=6 -DDIM=1 \
+// RUN: -DCOORD_DIM=2 -DLOAD_DIM=3 \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 6)' \
+// RUN: -DMIPS_OFFSET='i32 4' \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX="int vector[2]" \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-unknown-vulkan-pixel -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
+// RUN: -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 -DINDEX_TYPE=int2 -o - \
+// RUN: %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,COORD2,VEC-COORD -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_DIM=2 -DLOAD_DIM=3 \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 0, 2, 1, 0, 1, 0)' \
+// RUN: -DMIPS_OFFSET='i64 8' \
// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX="int vector[2]" \
// RUN: -DOFFSET_LLVM=i32 -DOFFSET_ZERO=0
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 -DINDEX_TYPE=int2 -o - %s | \
// RUN: llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,COORD2,VEC-COORD \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 -DLOAD_DIM=3 -DDXIL_TY=2 -DDIM=2 \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 -DLOAD_DIM=3 \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 2)' \
+// RUN: -DMIPS_OFFSET='i32 4' \
// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX="int vector[2]" \
// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-unknown-vulkan-pixel -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
+// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 -DINDEX_TYPE=int2 -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,COORD2,VEC-COORD \
+// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 -DLOAD_DIM=3 \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 1, 2, 0, 0, 1, 0)' \
+// RUN: -DMIPS_OFFSET='i64 8' \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX="int vector[2]" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -DINDEX_TYPE=int3 -o - \
// RUN: %s | llvm-cxxfilt | FileCheck %s \
// RUN: --check-prefixes=CHECK,COORD3,VEC-COORD -DTEXTURE=Texture2DArray \
-// RUN: -DCOORD_DIM=3 -DLOAD_DIM=4 -DDXIL_TY=7 -DDIM=2 \
+// RUN: -DCOORD_DIM=3 -DLOAD_DIM=4 \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 7)' \
+// RUN: -DMIPS_OFFSET='i32 4' \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX="int vector[3]" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-unknown-vulkan-pixel -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -DINDEX_TYPE=int3 -o - \
+// RUN: %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,COORD3,VEC-COORD -DTEXTURE=Texture2DArray \
+// RUN: -DCOORD_DIM=3 -DLOAD_DIM=4 \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 1, 2, 1, 0, 1, 0)' \
+// RUN: -DMIPS_OFFSET='i64 8' \
// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX="int vector[3]" \
// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_ZERO=zeroinitializer
@@ -55,9 +111,9 @@
// OFFSET_LLVM offset type in the IR
// OFFSET_ZERO the all-zero offset as it appears in the IR
// LOAD_DIM Load location components (COORD_DIM plus the mip level)
-// DXIL_TY dx.Texture resource-kind operand
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
+// HANDLE_TY the resource handle type in the IR
+// MIPS_OFFSET the offset of the `mips` field in the texture, as the
+// index operand of a getelementptr
//
// Check prefixes:
// COORD2 the location is built from two coordinate components
@@ -72,22 +128,22 @@ TEXTURE<float4> t;
// `mips` caches its own copy of the resource handle, so the initializer has to
// write `__handle` into it as well. Leaving it uninitialized makes
// `t.mips[N][...]` load from a poison handle.
-// CHECK: define linkonce_odr hidden void @hlsl::[[TEXTURE]]<float vector[4]>::__createFromImplicitBinding(
-// CHECK: %[[NEW_HANDLE:.*]] = call target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]) @llvm.dx.resource.handlefromimplicitbinding
+// CHECK: define linkonce_odr hidden {{(spir_func )?}}void @hlsl::[[TEXTURE]]<float vector[4]>::__createFromImplicitBinding(
+// CHECK: %[[NEW_HANDLE:.*]] = call [[HANDLE_TY]] @llvm.{{dx|spv}}.resource.handlefromimplicitbinding
// CHECK: %[[HANDLE_GEP:.*]] = getelementptr {{.*}} %"class.hlsl::[[TEXTURE]]", ptr %[[TMP:.*]], i32 0, i32 0
-// CHECK: store target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]) %[[NEW_HANDLE]], ptr %[[HANDLE_GEP]]
+// CHECK: store [[HANDLE_TY]] %[[NEW_HANDLE]], ptr %[[HANDLE_GEP]]
// CHECK: %[[HANDLE_GEP2:.*]] = getelementptr {{.*}} %"class.hlsl::[[TEXTURE]]", ptr %[[TMP]], i32 0, i32 0
-// CHECK: %[[HANDLE:.*]] = load target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]), ptr %[[HANDLE_GEP2]]
+// CHECK: %[[HANDLE:.*]] = load [[HANDLE_TY]], ptr %[[HANDLE_GEP2]]
// CHECK: %[[MIPS_GEP:.*]] = getelementptr {{.*}} %"class.hlsl::[[TEXTURE]]", ptr %[[TMP]], i32 0, i32 1
// CHECK: %[[MIPS_HANDLE_GEP:.*]] = getelementptr {{.*}} %"struct.hlsl::[[TEXTURE]]<>::mips_type", ptr %[[MIPS_GEP]], i32 0, i32 0
-// CHECK: store target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]) %[[HANDLE]], ptr %[[MIPS_HANDLE_GEP]]
+// CHECK: store [[HANDLE_TY]] %[[HANDLE]], ptr %[[MIPS_HANDLE_GEP]]
// CHECK: define internal {{.*}} <4 x float> @test_mips([[COORD_CXX]])([[COORD_LLVM]] {{.*}} %loc)
// CHECK: entry:
// CHECK: %[[LOC_ADDR:.*]] = alloca [[COORD_LLVM]]
// CHECK: %[[REF_TMP:.*]] = alloca %"struct.hlsl::[[TEXTURE]]<>::mips_slice_type"
// CHECK: store [[COORD_LLVM]] %loc, ptr %[[LOC_ADDR]]
-// CHECK: call void @hlsl::[[TEXTURE]]<float vector[4]>::mips_type::operator[](int) const(ptr {{.*}} %[[REF_TMP]], ptr {{.*}} getelementptr {{.*}} (i8, ptr @t, i32 4), i32 noundef 0)
+// CHECK: call {{(spir_func )?}}void @hlsl::[[TEXTURE]]<float vector[4]>::mips_type::operator[](int) const(ptr {{.*}} %[[REF_TMP]], ptr {{.*}} getelementptr {{.*}} (i8, ptr @t, [[MIPS_OFFSET]]), i32 noundef 0)
// CHECK: %[[V0:.*]] = load [[COORD_LLVM]], ptr %[[LOC_ADDR]]
// CHECK: %[[CONV:.*]] = fptosi [[COORD_LLVM]] %[[V0]] to [[INDEX_LLVM]]
// CHECK: %[[CALL:.*]] = call {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::operator[]([[INDEX_CXX]]) const(ptr {{.*}} %[[REF_TMP]], [[INDEX_LLVM]] {{.*}} %[[CONV]])
@@ -98,7 +154,7 @@ float4 test_mips(COORD_TYPE loc : LOC) : SV_Target {
return t.mips[0][(INDEX_TYPE)loc];
}
-// CHECK: define linkonce_odr hidden void @hlsl::[[TEXTURE]]<float vector[4]>::mips_type::operator[](int) const(ptr {{.*}} %agg.result, ptr {{.*}} %this, i32 {{.*}} %Level)
+// CHECK: define linkonce_odr hidden {{(spir_func )?}}void @hlsl::[[TEXTURE]]<float vector[4]>::mips_type::operator[](int) const(ptr {{.*}} %agg.result, ptr {{.*}} %this, i32 {{.*}} %Level)
// CHECK: entry:
// CHECK: %{{.*}} = alloca ptr
// CHECK: %[[THIS_ADDR:.*]] = alloca ptr
@@ -108,15 +164,15 @@ float4 test_mips(COORD_TYPE loc : LOC) : SV_Target {
// CHECK: store ptr %this, ptr %[[THIS_ADDR]]
// CHECK: store i32 %Level, ptr %[[LEVEL_ADDR]]
// CHECK: %[[THIS1:.*]] = load ptr, ptr %[[THIS_ADDR]]
-// CHECK: call void @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::mips_slice_type()(ptr {{.*}} %[[SLICE]])
+// CHECK: call {{(spir_func )?}}void @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::mips_slice_type()(ptr {{.*}} %[[SLICE]])
// CHECK: %[[HANDLE_GEP:.*]] = getelementptr {{.*}} %"struct.hlsl::[[TEXTURE]]<>::mips_type", ptr %[[THIS1]], i32 0, i32 0
-// CHECK: %[[HANDLE:.*]] = load target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]), ptr %[[HANDLE_GEP]]
+// CHECK: %[[HANDLE:.*]] = load [[HANDLE_TY]], ptr %[[HANDLE_GEP]]
// CHECK: %[[HANDLE_GEP2:.*]] = getelementptr {{.*}} %"struct.hlsl::[[TEXTURE]]<>::mips_slice_type", ptr %[[SLICE]], i32 0, i32 0
-// CHECK: store target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]) %[[HANDLE]], ptr %[[HANDLE_GEP2]]
+// CHECK: store [[HANDLE_TY]] %[[HANDLE]], ptr %[[HANDLE_GEP2]]
// CHECK: %[[L_VAL:.*]] = load i32, ptr %[[LEVEL_ADDR]]
// CHECK: %[[LEVEL_GEP:.*]] = getelementptr {{.*}} %"struct.hlsl::[[TEXTURE]]<>::mips_slice_type", ptr %[[SLICE]], i32 0, i32 1
// CHECK: store i32 %[[L_VAL]], ptr %[[LEVEL_GEP]]
-// CHECK: call void @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::mips_slice_type(hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type const&)(ptr noundef nonnull align 4 dereferenceable(8) %agg.result, ptr noundef nonnull align 4 dereferenceable(8) %[[SLICE]])
+// CHECK: call {{(spir_func )?}}void @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::mips_slice_type(hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type const&)(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %agg.result, ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %[[SLICE]])
// CHECK: define linkonce_odr hidden {{.*}} <4 x float> @hlsl::[[TEXTURE]]<float vector[4]>::mips_slice_type::operator[]([[INDEX_CXX]]) const(ptr {{.*}} %[[THIS:.*]], [[INDEX_LLVM]] noundef %[[COORD:.*]])
// CHECK: entry:
@@ -127,7 +183,7 @@ float4 test_mips(COORD_TYPE loc : LOC) : SV_Target {
// VEC-COORD: %[[COORD_PARAM:.*]] = load [[INDEX_LLVM]], ptr %[[COORD_ADDR]]
// VEC-COORD: store [[INDEX_LLVM]] %[[COORD_PARAM]], ptr %[[VEC_TMP]]
// CHECK: %[[HANDLE_PTR:.*]] = getelementptr {{.*}} %"struct.hlsl::[[TEXTURE]]<>::mips_slice_type", ptr %[[THIS1]], i32 0, i32 0
-// CHECK: %[[HANDLE:.*]] = load target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]), ptr %[[HANDLE_PTR]]
+// CHECK: %[[HANDLE:.*]] = load [[HANDLE_TY]], ptr %[[HANDLE_PTR]]
// A 1D coordinate is a single value, so it goes straight into the location.
// SCALAR-COORD: %[[COORD_VAL:.*]] = load i32, ptr %[[COORD_ADDR]]
// SCALAR-COORD: %[[VECINIT3:.*]] = insertelement <[[LOAD_DIM]] x i32> poison, i32 %[[COORD_VAL]], i32 0
@@ -149,5 +205,5 @@ float4 test_mips(COORD_TYPE loc : LOC) : SV_Target {
// SCALAR-COORD: %[[COORD_X:.*]] = extractelement <[[LOAD_DIM]] x i32> %[[VECINITL]], i64 0
// VEC-COORD: %[[COORD_X:.*]] = shufflevector <[[LOAD_DIM]] x i32> %[[VECINITL]], <[[LOAD_DIM]] x i32> poison, [[INDEX_LLVM]] {{.*}}
// CHECK: %[[LOD:.*]] = extractelement <[[LOAD_DIM]] x i32> %[[VECINITL]], i64 [[COORD_DIM]]
-// CHECK: %[[RES:.*]] = call {{.*}} <4 x float> @llvm.dx.resource.load.level.v4f32.tdx.Texture_v4f32_0_0_0_[[DXIL_TY]]t{{.*}}(target("dx.Texture", <4 x float>, 0, 0, 0, [[DXIL_TY]]) %[[HANDLE]], [[INDEX_LLVM]] %[[COORD_X]], i32 %[[LOD]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
+// CHECK: %[[RES:.*]] = call {{.*}} <4 x float> @llvm.{{dx|spv}}.resource.load.level.v4f32.{{[^(]*}}([[HANDLE_TY]] %[[HANDLE]], [[INDEX_LLVM]] %[[COORD_X]], i32 %[[LOD]], [[OFFSET_LLVM]] [[OFFSET_ZERO]])
// CHECK: ret <4 x float> %[[RES]]
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
index 59e448efd1f68..48442a12b5da0 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
@@ -1,163 +1,141 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=1 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
-// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DDXIL_TY=1 -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DOFFSET_LLVM=i32 \
// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=6 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DDXIL_TY=6 -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DTEXTURE=Texture2D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DDXIL_TY=2 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" \
// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
-// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
-// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int" \
-// RUN: -DINDEX_CXX_I=int -DGRAD_LLVM=float -DGRAD_CXX=float \
-// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DTEXTURE=Texture2D \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 \
// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
-// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DDXIL_TY=7 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" \
// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 \
// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture3D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
-
-// Texture3D
+// RUN: -DDXIL_TY=4 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture3D \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
+// RUN: -DDXIL_TY=5 -DRW=0 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
+// RUN: -DDXIL_TY=9 -DRW=0 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -168,13 +146,9 @@
// TEXTURE resource type name
// COORD_TYPE sample location type (DIM components plus the array
// slice)
-// COORD_DIM sample location components (DIM plus the array slice)
-// GRAD_CXX ddx/ddy type in the C++ signature
// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
// OFFSET_CONST the offset literal as it appears in the IR
// ARRAYED spirv.Image Arrayed operand
// SAMPLED spirv.Image Sampled operand
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
index 6889b4e9eb694..4456bb653ea43 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
@@ -1,163 +1,141 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=1 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
-// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DDXIL_TY=1 -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DOFFSET_LLVM=i32 \
// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=6 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DDXIL_TY=6 -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DTEXTURE=Texture2D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DDXIL_TY=2 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" \
// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
-// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
-// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int" \
-// RUN: -DINDEX_CXX_I=int -DGRAD_LLVM=float -DGRAD_CXX=float \
-// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DTEXTURE=Texture2D \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 \
// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
-// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DDXIL_TY=7 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" \
// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 \
// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture3D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
-
-// Texture3D
+// RUN: -DDXIL_TY=4 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture3D \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
+// RUN: -DDXIL_TY=5 -DRW=0 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
+// RUN: -DDXIL_TY=9 -DRW=0 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -168,13 +146,9 @@
// TEXTURE resource type name
// COORD_TYPE sample location type (DIM components plus the array
// slice)
-// COORD_DIM sample location components (DIM plus the array slice)
-// GRAD_CXX ddx/ddy type in the C++ signature
// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
// OFFSET_CONST the offset literal as it appears in the IR
// ARRAYED spirv.Image Arrayed operand
// SAMPLED spirv.Image Sampled operand
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
index f4daf941f63f8..e533ee05171d4 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
@@ -1,141 +1,120 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=1 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
-// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DDXIL_TY=1 -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DOFFSET_LLVM=i32 \
// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=6 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DDXIL_TY=6 -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DTEXTURE=Texture2D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DDXIL_TY=2 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" \
// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
-// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
-// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int" \
-// RUN: -DINDEX_CXX_I=int -DGRAD_LLVM=float -DGRAD_CXX=float \
-// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DTEXTURE=Texture2D \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 \
// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
-// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DDXIL_TY=7 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" \
// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 \
// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
+// RUN: -DDXIL_TY=5 -DRW=0 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
+// RUN: -DDXIL_TY=9 -DRW=0 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
@@ -145,13 +124,9 @@
// TEXTURE resource type name
// COORD_TYPE sample location type (DIM components plus the array
// slice)
-// COORD_DIM sample location components (DIM plus the array slice)
-// GRAD_CXX ddx/ddy type in the C++ signature
// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
// OFFSET_CONST the offset literal as it appears in the IR
// ARRAYED spirv.Image Arrayed operand
// SAMPLED spirv.Image Sampled operand
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
index 0b02ccefc8227..d58a2e8dfa966 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
@@ -1,137 +1,113 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
// RUN: --check-prefixes=CHECK,DXIL,CHECK-OFFSET,DXIL-OFFSET -DDXIL_TY=1 \
-// RUN: -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
-// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
+// RUN: --check-prefixes=CHECK,SPIRV,CHECK-OFFSET,SPIRV-OFFSET -DARRAYED=0 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DOFFSET_LLVM=i32 \
// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray \
// RUN: --check-prefixes=CHECK,DXIL,CHECK-OFFSET,DXIL-OFFSET -DDXIL_TY=6 \
-// RUN: -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
// RUN: -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,DXIL,CHECK-OFFSET,DXIL-OFFSET -DDXIL_TY=2 \
-// RUN: -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL -DDXIL_TY=5 -DRW=0 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,DXIL -DDXIL_TY=9 -DRW=0 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
-// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
-// RUN: --check-prefixes=CHECK,SPIRV,CHECK-OFFSET,SPIRV-OFFSET -DARRAYED=0 \
-// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 -DOFFSET_CONST="1" \
-// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray \
// RUN: --check-prefixes=CHECK,SPIRV,CHECK-OFFSET,SPIRV-OFFSET -DARRAYED=1 \
-// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 -DOFFSET_CONST="1" \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture2D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,SPIRV,CHECK-OFFSET,SPIRV-OFFSET -DARRAYED=0 \
-// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DTEXTURE=Texture2D \
+// RUN: --check-prefixes=CHECK,DXIL,CHECK-OFFSET,DXIL-OFFSET -DDXIL_TY=2 \
+// RUN: -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 \
-// RUN: -DSPV_DIM=3 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 \
-// RUN: -DSPV_DIM=3 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
-// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture2D \
+// RUN: --check-prefixes=CHECK,SPIRV,CHECK-OFFSET,SPIRV-OFFSET -DARRAYED=0 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,DXIL,CHECK-OFFSET,DXIL-OFFSET -DDXIL_TY=7 \
-// RUN: -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,SPIRV,CHECK-OFFSET,SPIRV-OFFSET -DARRAYED=1 \
-// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube --check-prefixes=CHECK,DXIL \
+// RUN: -DDXIL_TY=5 -DRW=0 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube --check-prefixes=CHECK,SPIRV \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray --check-prefixes=CHECK,DXIL \
+// RUN: -DDXIL_TY=9 -DRW=0 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray --check-prefixes=CHECK,SPIRV \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -142,13 +118,9 @@
// TEXTURE resource type name
// COORD_TYPE sample location type (DIM components plus the array
// slice)
-// COORD_DIM sample location components (DIM plus the array slice)
-// GRAD_CXX ddx/ddy type in the C++ signature
// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
// OFFSET_CONST the offset literal as it appears in the IR
// ARRAYED spirv.Image Arrayed operand
// SAMPLED spirv.Image Sampled operand
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
index 82d01e36f40b1..8940baf921dc7 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
@@ -1,146 +1,133 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1D \
// RUN: -DCOORD_TYPE=float %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture1D -DCOORD_DIM=1 \
+// RUN: -DTEXTURE=Texture1D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=1 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
-// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: -DDXIL_TY=1 -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DGRAD_LLVM=float -DGRAD_CXX=float \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1D \
+// RUN: -DCOORD_TYPE=float %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1D \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DGRAD_LLVM=float \
+// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1DArray \
// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: -DTEXTURE=Texture1DArray \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=6 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" \
+// RUN: -DDXIL_TY=6 -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DGRAD_LLVM=float -DGRAD_CXX=float \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1DArray \
+// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture1DArray \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
+// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: FileCheck %s -DTEXTURE=Texture2D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DDXIL_TY=2 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" \
// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DGRAD_LLVM="<2 x float>" -DGRAD_CXX="float vector[2]" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
+// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=Texture2D \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DGRAD_LLVM="<2 x float>" \
// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=5 -DRW=0 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
-// RUN: | llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCubeArray \
-// RUN: -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
-// RUN: -DDXIL_TY=9 -DRW=0 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
-// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1D \
-// RUN: -DCOORD_TYPE=float %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture1D -DCOORD_DIM=1 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
-// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int" \
-// RUN: -DINDEX_CXX_I=int -DGRAD_LLVM=float -DGRAD_CXX=float \
-// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1DArray \
-// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
+// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=Texture2DArray \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=7 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DGRAD_LLVM="<2 x float>" -DGRAD_CXX="float vector[2]" \
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DGRAD_LLVM="<2 x float>" \
// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCube \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
+// RUN: -DDXIL_TY=5 -DRW=0 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCube \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 \
// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DGRAD_LLVM="<3 x float>" -DGRAD_CXX="float vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
+// RUN: | llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL,CHECK-NOOFFSET,DXIL-NOOFFSET \
+// RUN: -DDXIL_TY=9 -DRW=0 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DGRAD_LLVM="<3 x float>" \
// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DGRAD_TYPE=float3 -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s \
// RUN: | llvm-cxxfilt | FileCheck %s -DTEXTURE=TextureCubeArray \
-// RUN: -DCOORD_DIM=4 \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL,CHECK-NOOFFSET,SPIRV-NOOFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 \
// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
-// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int2(1, 2)" -DGRAD_TYPE=float2 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DGRAD_LLVM="<3 x float>" -DGRAD_CXX="float vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
@@ -176,13 +163,10 @@
// TEXTURE resource type name
// COORD_TYPE sample location type (DIM components plus the array
// slice)
-// COORD_DIM sample location components (DIM plus the array slice)
// GRAD_CXX ddx/ddy type in the C++ signature
// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
// OFFSET_CONST the offset literal as it appears in the IR
// ARRAYED spirv.Image Arrayed operand
// SAMPLED spirv.Image Sampled operand
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
index 9bb4d20dd3799..19a70a4047d64 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
@@ -1,161 +1,139 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=1 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
-// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
+// RUN: -DDXIL_TY=1 -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM=float \
+// RUN: -DCOORD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DOFFSET_LLVM=i32 \
// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=6 -DRW=0 -DDIM=1 -DOFFSET_CONST="1" \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
+// RUN: -DDXIL_TY=6 -DRW=0 -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
// RUN: -DOFFSET_ZERO=0
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
+// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
+// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DOFFSET_CONST="1" \
+// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
+// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DTEXTURE=Texture2D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=2 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DDXIL_TY=2 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" \
// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=5 -DRW=0 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=9 -DRW=0 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
-// RUN: -DINDEX_LLVM="<4 x i32>" -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D -DCOORD_DIM=1 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM=float -DCOORD_CXX=float \
-// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int" \
-// RUN: -DINDEX_CXX_I=int -DGRAD_LLVM=float -DGRAD_CXX=float \
-// RUN: -DOFFSET_LLVM=i32 -DOFFSET_CXX=int -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
-// RUN: -DHAS_OFFSET -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 %s | \
-// RUN: llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1DArray -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=0 -DDIM=1 \
-// RUN: -DOFFSET_CONST="1" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DCOORD_DIM=2 \
+// RUN: -DTEXTURE=Texture2D \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 \
// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DCOORD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL -DARRAYED=0 -DSAMPLED=1 \
-// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL -DARRAYED=1 -DSAMPLED=1 \
-// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DDIM=3 -DCOORD_LLVM="<4 x float>" \
-// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=7 -DRW=0 -DDIM=2 -DOFFSET_CONST="<i32 1, i32 2>" \
+// RUN: -DDXIL_TY=7 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2>" \
// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DOFFSET_LLVM="<2 x i32>" -DOFFSET_CXX="int vector[2]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 \
+// RUN: -DTEXTURE=Texture2DArray \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DDIM=2 \
+// RUN: -DARRAYED=1 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 \
// RUN: -DOFFSET_CONST="<i32 1, i32 2>" -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture3D \
// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
-
-// Texture3D
+// RUN: -DDXIL_TY=4 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DHAS_OFFSET -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
+// RUN: -DCOORD_TYPE=float3 %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture3D \
// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=5 -DRW=0 \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCube \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL -DARRAYED=0 -DSAMPLED=1 \
+// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DCOORD_LLVM="<3 x float>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+
+// TextureCubeArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-NOTEXEL -DDXIL_TY=9 -DRW=0 \
+// RUN: -DCOORD_LLVM="<4 x float>" -DCOORD_CXX="float vector[4]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-NOTEXEL -DARRAYED=1 -DSAMPLED=1 \
+// RUN: -DIMG_FMT=0 -DSPV_DIM=3 -DCOORD_LLVM="<4 x float>" \
+// RUN: -DCOORD_CXX="float vector[4]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
@@ -166,13 +144,9 @@
// TEXTURE resource type name
// COORD_TYPE sample location type (DIM components plus the array
// slice)
-// COORD_DIM sample location components (DIM plus the array slice)
-// GRAD_CXX ddx/ddy type in the C++ signature
// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
-// DIM number of resource dimensions (offset, ddx/ddy, LOD
-// location)
// OFFSET_CONST the offset literal as it appears in the IR
// ARRAYED spirv.Image Arrayed operand
// SAMPLED spirv.Image Sampled operand
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
index 53eba7cdf9641..c1bf4267e49bc 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
@@ -1,208 +1,153 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture1D -DCOORD_TYPE=uint \
// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
-// RUN: -DCOORD_DIM=1 --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=1 -DRW=0 -DCOORD_LLVM=float \
-// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=1 -DRW=0 -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture1D -DCOORD_TYPE=uint \
+// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
+// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 -DSAMPLED=1 \
+// RUN: -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=0 \
+// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int"
+
+// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture1DArray \
// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture1DArray -DCOORD_DIM=2 --check-prefixes=CHECK,DXIL \
+// RUN: -DTEXTURE=Texture1DArray --check-prefixes=CHECK,DXIL \
// RUN: -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.Texture -DDXIL_TY=6 -DRW=0 \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2D -DCOORD_TYPE=uint2 \
-// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture2D \
-// RUN: -DCOORD_DIM=2 --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=2 -DRW=0 \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture1D -DCOORD_TYPE=uint \
-// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture1D \
-// RUN: -DCOORD_DIM=1 --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 \
-// RUN: -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=0 \
-// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture1DArray \
// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture1DArray -DCOORD_DIM=2 --check-prefixes=CHECK,SPIRV \
-// RUN: -DARRAYED=1 -DMS=0 -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 \
-// RUN: -DFMT_INT3=0 -DSPV_DIM=0 -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
+// RUN: -DTEXTURE=Texture1DArray --check-prefixes=CHECK,SPIRV -DARRAYED=1 \
+// RUN: -DMS=0 -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 \
+// RUN: -DSPV_DIM=0 -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]"
+
+// Texture2D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2D -DCOORD_TYPE=uint2 \
+// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture2D \
+// RUN: --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=2 -DRW=0 -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2D -DCOORD_TYPE=uint2 \
// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture2D \
-// RUN: -DCOORD_DIM=2 --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 \
-// RUN: -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=1 \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 -DSAMPLED=1 \
+// RUN: -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=1 \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]"
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 --check-prefixes=CHECK,DXIL \
+// RUN: -DTEXTURE=Texture2DArray --check-prefixes=CHECK,DXIL \
// RUN: -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.Texture -DDXIL_TY=7 -DRW=0 \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2DArray \
// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_DIM=3 --check-prefixes=CHECK,SPIRV \
-// RUN: -DARRAYED=1 -DMS=0 -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 \
-// RUN: -DFMT_INT3=0 -DSPV_DIM=1 -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DTEXTURE=Texture2DArray --check-prefixes=CHECK,SPIRV -DARRAYED=1 \
+// RUN: -DMS=0 -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 \
+// RUN: -DSPV_DIM=1 -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]"
+
+// Texture2DMS
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2DMS \
// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DMS -DCOORD_DIM=2 --check-prefixes=CHECK,DXIL \
-// RUN: -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.MSTexture -DDXIL_TY=3 -DRW=0 \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DTEXTURE=Texture2DMS --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
+// RUN: -DDXIL_HANDLE=dx.MSTexture -DDXIL_TY=3 -DRW=0 \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture2DMS \
// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=Texture2DMS -DCOORD_DIM=2 --check-prefixes=CHECK,SPIRV \
-// RUN: -DARRAYED=0 -DMS=1 -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 \
-// RUN: -DFMT_INT3=0 -DSPV_DIM=1 -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2D \
-// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=RWTexture2D -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=2 -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DTEXTURE=Texture2DMS --check-prefixes=CHECK,SPIRV -DARRAYED=0 \
+// RUN: -DMS=1 -DSAMPLED=1 -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 \
+// RUN: -DSPV_DIM=1 -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]"
+
+// RWTexture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture1D \
// RUN: -DCOORD_TYPE=uint -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=RWTexture1D -DCOORD_DIM=1 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=1 -DCOORD_LLVM=float \
-// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2D \
-// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=RWTexture2D -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=0 -DMS=0 \
-// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=1 \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DTEXTURE=RWTexture1D --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 \
+// RUN: -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.Texture -DDXIL_TY=1 \
+// RUN: -DINDEX_LLVM=i32 -DINDEX_CXX_U="unsigned int"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture1D \
// RUN: -DCOORD_TYPE=uint -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=RWTexture1D -DCOORD_DIM=1 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=0 -DMS=0 \
-// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=0 \
-// RUN: -DCOORD_LLVM=float -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: -DTEXTURE=RWTexture1D --check-prefixes=CHECK,CHECK-STORE,SPIRV \
+// RUN: -DARRAYED=0 -DMS=0 -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 \
+// RUN: -DFMT_INT3=0 -DSPV_DIM=0 -DINDEX_LLVM=i32 \
+// RUN: -DINDEX_CXX_U="unsigned int"
+
+// RWTexture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2DArray \
-// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=RWTexture2DArray -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=7 -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture1DArray \
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture1DArray --check-prefixes=CHECK,CHECK-STORE,DXIL \
+// RUN: -DRW=1 -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.Texture -DDXIL_TY=6 \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture1DArray \
// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=RWTexture1DArray -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=6 -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: -DTEXTURE=RWTexture1DArray --check-prefixes=CHECK,CHECK-STORE,SPIRV \
+// RUN: -DARRAYED=1 -DMS=0 -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 \
+// RUN: -DFMT_INT3=0 -DSPV_DIM=0 -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]"
+
+// RWTexture2D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2D \
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture2D --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 \
+// RUN: -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.Texture -DDXIL_TY=2 \
+// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2D \
+// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture2D --check-prefixes=CHECK,CHECK-STORE,SPIRV \
+// RUN: -DARRAYED=0 -DMS=0 -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 \
+// RUN: -DFMT_INT3=0 -DSPV_DIM=1 -DINDEX_LLVM="<2 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[2]"
+
+// RWTexture2DArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2DArray \
// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=RWTexture2DArray -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=1 -DMS=0 \
-// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=1 \
-// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
-// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DTEXTURE=RWTexture2DArray --check-prefixes=CHECK,CHECK-STORE,DXIL \
+// RUN: -DRW=1 -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.Texture -DDXIL_TY=7 \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX_U="unsigned int vector[3]"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture1DArray \
-// RUN: -DCOORD_TYPE=uint2 -o - %s | llvm-cxxfilt | FileCheck %s \
-// RUN: -DTEXTURE=RWTexture1DArray -DCOORD_DIM=2 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=1 -DMS=0 \
-// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=0 \
-// RUN: -DCOORD_LLVM="<2 x float>" -DCOORD_CXX="float vector[2]" \
-// RUN: -DINDEX_LLVM="<2 x i32>" -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture2DArray \
+// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture2DArray --check-prefixes=CHECK,CHECK-STORE,SPIRV \
+// RUN: -DARRAYED=1 -DMS=0 -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 \
+// RUN: -DFMT_INT3=0 -DSPV_DIM=1 -DINDEX_LLVM="<3 x i32>" \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]"
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
@@ -258,12 +203,9 @@
// TEXTURE resource type name
// COORD_TYPE sample location type (DIM components plus the array
// slice)
-// COORD_DIM sample location components (DIM plus the array slice)
// ROV_OR_COUNT the overloaded second dx handle operand: IsROV for
// dx.Texture, the sample count for dx.MSTexture
// DXIL_HANDLE DXIL resource handle type (dx.Texture or dx.MSTexture)
-// GRAD_CXX ddx/ddy type in the C++ signature
-// COORD_CXX sample location type in the C++ signature
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// ARRAYED spirv.Image Arrayed operand
diff --git a/clang/test/CodeGenHLSL/resources/Textures-default-explicit-binding.hlsl b/clang/test/CodeGenHLSL/resources/Textures-default-explicit-binding.hlsl
index b2cd56e0a8959..331d814c170b9 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-default-explicit-binding.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-default-explicit-binding.hlsl
@@ -1,63 +1,72 @@
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 -o - %s \
// RUN: | llvm-cxxfilt \
// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 -DDXIL_TY=2 -DRW=0 \
// RUN: --check-prefixes=CHECK,CHECK-TEXEL
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture3D \
-// RUN: -DCOORD_TYPE=float3 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 -DDXIL_TY=4 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-TEXEL
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=TextureCube \
-// RUN: -DCOORD_TYPE=float3 -o - %s \
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2D \
+// RUN: -DCOORD_TYPE=float2 -o - %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 -DDXIL_TY=5 \
-// RUN: -DRW=0 --check-prefixes=CHECK,CHECK-NOTEXEL
+// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 -DARRAYED=0 \
+// RUN: --check-prefixes=SPIRV,SPIRV-TEXEL -DSPV_DIM=1
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 -o - %s \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -o - %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 -DDXIL_TY=9 \
-// RUN: -DRW=0 --check-prefixes=CHECK,CHECK-NOTEXEL
+// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 -DDXIL_TY=7 \
+// RUN: -DRW=0 --check-prefixes=CHECK,CHECK-TEXEL
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2D \
-// RUN: -DCOORD_TYPE=float2 -o - %s \
+// RUN: -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -o - %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 -DARRAYED=0 \
+// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 -DARRAYED=1 \
// RUN: --check-prefixes=SPIRV,SPIRV-TEXEL -DSPV_DIM=1
+
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture3D \
+// RUN: -DCOORD_TYPE=float3 -o - %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 -DDXIL_TY=4 -DRW=0 \
+// RUN: --check-prefixes=CHECK,CHECK-TEXEL
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture3D \
// RUN: -DCOORD_TYPE=float3 -o - %s \
// RUN: | llvm-cxxfilt \
// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 -DARRAYED=0 \
// RUN: --check-prefixes=SPIRV,SPIRV-TEXEL -DSPV_DIM=2
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+
+// TextureCube
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=TextureCube \
// RUN: -DCOORD_TYPE=float3 -o - %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 -DARRAYED=0 \
-// RUN: --check-prefixes=SPIRV,SPIRV-NOTEXEL -DSPV_DIM=3
+// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 -DDXIL_TY=5 \
+// RUN: -DRW=0 --check-prefixes=CHECK,CHECK-NOTEXEL
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 -o - %s \
+// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=TextureCube \
+// RUN: -DCOORD_TYPE=float3 -o - %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 -DARRAYED=1 \
+// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 -DARRAYED=0 \
// RUN: --check-prefixes=SPIRV,SPIRV-NOTEXEL -DSPV_DIM=3
+
+// TextureCubeArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -o - %s \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 -o - %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 -DDXIL_TY=7 \
-// RUN: -DRW=0 --check-prefixes=CHECK,CHECK-TEXEL
+// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 -DDXIL_TY=9 \
+// RUN: -DRW=0 --check-prefixes=CHECK,CHECK-NOTEXEL
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -o - %s \
+// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 -o - %s \
// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 -DARRAYED=1 \
-// RUN: --check-prefixes=SPIRV,SPIRV-TEXEL -DSPV_DIM=1
+// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 -DARRAYED=1 \
+// RUN: --check-prefixes=SPIRV,SPIRV-NOTEXEL -DSPV_DIM=3
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
diff --git a/clang/test/CodeGenHLSL/resources/Textures-default.hlsl b/clang/test/CodeGenHLSL/resources/Textures-default.hlsl
index e2a43bcdc0a1a..4e205f9d7de7e 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-default.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-default.hlsl
@@ -1,62 +1,89 @@
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
// RUN: -finclude-default-header -DTEXTURE=Texture1D -o - %s | FileCheck %s \
-// RUN: -DTEXTURE=Texture1D -DDXIL_TY=1 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-TEXEL -DCOORD_LLVM=float \
-// RUN: -DCOORD_CXX=float -DINDEX_LLVM=i32 \
-// RUN: -DINDEX_CXX_U="unsigned int" -DINDEX_CXX_I=int \
-// RUN: -DGRAD_LLVM=float -DGRAD_CXX=float -DOFFSET_LLVM=i32 \
-// RUN: -DOFFSET_CXX=int -DOFFSET_ZERO=0
+// RUN: -DTEXTURE=Texture1D --check-prefixes=CHECK,CHECK-TEXEL \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 1)' \
+// RUN: -DSCALAR_HANDLE_TY='target("dx.Texture", float, 0, 0, 0, 1)'
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -std=hlsl202x \
+// RUN: -emit-llvm -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=Texture1D -o - %s | FileCheck %s -DTEXTURE=Texture1D \
+// RUN: --check-prefixes=CHECK,CHECK-TEXEL \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 0, 2, 0, 0, 1, 0)' \
+// RUN: -DSCALAR_HANDLE_TY='target("spirv.Image", float, 0, 2, 0, 0, 1, 0)'
+
+// Texture1DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
// RUN: -finclude-default-header -DTEXTURE=Texture1DArray -o - %s | \
-// RUN: FileCheck %s -DTEXTURE=Texture1DArray -DDXIL_TY=6 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-TEXEL -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM=float \
-// RUN: -DGRAD_CXX=float -DOFFSET_LLVM=i32 -DOFFSET_CXX=int \
-// RUN: -DOFFSET_ZERO=0
+// RUN: FileCheck %s -DTEXTURE=Texture1DArray \
+// RUN: --check-prefixes=CHECK,CHECK-TEXEL \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 6)' \
+// RUN: -DSCALAR_HANDLE_TY='target("dx.Texture", float, 0, 0, 0, 6)'
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -std=hlsl202x \
+// RUN: -emit-llvm -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=Texture1DArray -o - %s | FileCheck %s \
+// RUN: -DTEXTURE=Texture1DArray --check-prefixes=CHECK,CHECK-TEXEL \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 0, 2, 1, 0, 1, 0)' \
+// RUN: -DSCALAR_HANDLE_TY='target("spirv.Image", float, 0, 2, 1, 0, 1, 0)'
+
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
// RUN: -finclude-default-header -DTEXTURE=Texture2D -o - %s | FileCheck %s \
-// RUN: -DTEXTURE=Texture2D -DDXIL_TY=2 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-TEXEL -DCOORD_LLVM="<2 x float>" \
-// RUN: -DCOORD_CXX="float vector[2]" -DINDEX_LLVM="<2 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[2]" \
-// RUN: -DINDEX_CXX_I="int vector[2]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DTEXTURE=Texture2D --check-prefixes=CHECK,CHECK-TEXEL \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 2)' \
+// RUN: -DSCALAR_HANDLE_TY='target("dx.Texture", float, 0, 0, 0, 2)'
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -std=hlsl202x \
+// RUN: -emit-llvm -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=Texture2D -o - %s | FileCheck %s -DTEXTURE=Texture2D \
+// RUN: --check-prefixes=CHECK,CHECK-TEXEL \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 1, 2, 0, 0, 1, 0)' \
+// RUN: -DSCALAR_HANDLE_TY='target("spirv.Image", float, 1, 2, 0, 0, 1, 0)'
+
+// Texture2DArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
-// RUN: -finclude-default-header -DTEXTURE=TextureCube -o - %s | FileCheck \
-// RUN: %s -DTEXTURE=TextureCube -DDXIL_TY=5 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-NOTEXEL -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -finclude-default-header -DTEXTURE=Texture2DArray -o - %s | \
+// RUN: FileCheck %s -DTEXTURE=Texture2DArray \
+// RUN: --check-prefixes=CHECK,CHECK-TEXEL \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 7)' \
+// RUN: -DSCALAR_HANDLE_TY='target("dx.Texture", float, 0, 0, 0, 7)'
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -std=hlsl202x \
+// RUN: -emit-llvm -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=Texture2DArray -o - %s | FileCheck %s \
+// RUN: -DTEXTURE=Texture2DArray --check-prefixes=CHECK,CHECK-TEXEL \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 1, 2, 1, 0, 1, 0)' \
+// RUN: -DSCALAR_HANDLE_TY='target("spirv.Image", float, 1, 2, 1, 0, 1, 0)'
+
+// TextureCube
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
-// RUN: -finclude-default-header -DTEXTURE=TextureCubeArray -o - %s | \
-// RUN: FileCheck %s -DTEXTURE=TextureCubeArray -DDXIL_TY=9 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-NOTEXEL -DCOORD_LLVM="<4 x float>" \
-// RUN: -DCOORD_CXX="float vector[4]" -DINDEX_LLVM="<4 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[4]" \
-// RUN: -DINDEX_CXX_I="int vector[4]" -DGRAD_LLVM="<3 x float>" \
-// RUN: -DGRAD_CXX="float vector[3]" -DOFFSET_LLVM="<3 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -finclude-default-header -DTEXTURE=TextureCube -o - %s | FileCheck \
+// RUN: %s -DTEXTURE=TextureCube --check-prefixes=CHECK,CHECK-NOTEXEL \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 5)' \
+// RUN: -DSCALAR_HANDLE_TY='target("dx.Texture", float, 0, 0, 0, 5)'
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -std=hlsl202x \
+// RUN: -emit-llvm -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=TextureCube -o - %s | FileCheck %s -DTEXTURE=TextureCube \
+// RUN: --check-prefixes=CHECK,CHECK-NOTEXEL \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 3, 2, 0, 0, 1, 0)' \
+// RUN: -DSCALAR_HANDLE_TY='target("spirv.Image", float, 3, 2, 0, 0, 1, 0)'
+
+// TextureCubeArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
-// RUN: -finclude-default-header -DTEXTURE=Texture2DArray -o - %s | \
-// RUN: FileCheck %s -DTEXTURE=Texture2DArray -DDXIL_TY=7 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-TEXEL -DCOORD_LLVM="<3 x float>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DINDEX_LLVM="<3 x i32>" \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" \
-// RUN: -DINDEX_CXX_I="int vector[3]" -DGRAD_LLVM="<2 x float>" \
-// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
-// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// RUN: -finclude-default-header -DTEXTURE=TextureCubeArray -o - %s | \
+// RUN: FileCheck %s -DTEXTURE=TextureCubeArray \
+// RUN: --check-prefixes=CHECK,CHECK-NOTEXEL \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 9)' \
+// RUN: -DSCALAR_HANDLE_TY='target("dx.Texture", float, 0, 0, 0, 9)'
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -std=hlsl202x \
+// RUN: -emit-llvm -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=TextureCubeArray -o - %s | FileCheck %s \
+// RUN: -DTEXTURE=TextureCubeArray --check-prefixes=CHECK,CHECK-NOTEXEL \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 3, 2, 1, 0, 1, 0)' \
+// RUN: -DSCALAR_HANDLE_TY='target("spirv.Image", float, 3, 2, 1, 0, 1, 0)'
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
@@ -69,10 +96,9 @@
// of another dimension only requires new RUN lines.
//
// TEXTURE resource type name
-// GRAD_CXX ddx/ddy type in the C++ signature
-// COORD_CXX sample location type in the C++ signature
-// DXIL_TY dx.Texture resource-kind operand
-// RW dx.Texture UAV operand
+// HANDLE_TY the resource handle type of the float4 texture in the
+// IR
+// SCALAR_HANDLE_TY the resource handle type of the float texture in the IR
//
// Check prefixes:
// TEXEL the type has integer texel addressing (Load,
@@ -80,18 +106,18 @@
// layout
// NOTEXEL the type has no integer texel addressing
-// CHECK-TEXEL: %"class.hlsl::[[TEXTURE]]" = type { target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]), %"struct.hlsl::[[TEXTURE]]<>::mips_type" }
-// CHECK-NOTEXEL: %"class.hlsl::[[TEXTURE]]" = type { target("dx.Texture", <4 x float>, [[RW]], 0, 0, [[DXIL_TY]]) }
-// CHECK-TEXEL: %"class.hlsl::[[TEXTURE]].0" = type { target("dx.Texture", float, [[RW]], 0, 0, [[DXIL_TY]]), %"struct.hlsl::[[TEXTURE]]<float>::mips_type" }
-// CHECK-NOTEXEL: %"class.hlsl::[[TEXTURE]].0" = type { target("dx.Texture", float, [[RW]], 0, 0, [[DXIL_TY]]) }
+// CHECK-TEXEL: %"class.hlsl::[[TEXTURE]]" = type { [[HANDLE_TY]], %"struct.hlsl::[[TEXTURE]]<>::mips_type" }
+// CHECK-NOTEXEL: %"class.hlsl::[[TEXTURE]]" = type { [[HANDLE_TY]] }
+// CHECK-TEXEL: %"class.hlsl::[[TEXTURE]].0" = type { [[SCALAR_HANDLE_TY]], %"struct.hlsl::[[TEXTURE]]<float>::mips_type" }
+// CHECK-NOTEXEL: %"class.hlsl::[[TEXTURE]].0" = type { [[SCALAR_HANDLE_TY]] }
-// CHECK: @{{.*}}t1 = internal global %"class.hlsl::[[TEXTURE]]" poison, align 4
+// CHECK: @{{.*}}t1 = internal global %"class.hlsl::[[TEXTURE]]" poison, align {{[0-9]+}}
TEXTURE<> t1;
-// CHECK: @{{.*}}t2 = internal global %"class.hlsl::[[TEXTURE]].0" poison, align 4
+// CHECK: @{{.*}}t2 = internal global %"class.hlsl::[[TEXTURE]].0" poison, align {{[0-9]+}}
TEXTURE<float> t2;
-// CHECK: @{{.*}}t3 = internal global %"class.hlsl::[[TEXTURE]]" poison, align 4
+// CHECK: @{{.*}}t3 = internal global %"class.hlsl::[[TEXTURE]]" poison, align {{[0-9]+}}
TEXTURE t3;
void main() {
diff --git a/clang/test/CodeGenHLSL/resources/Textures-shorthand-contexts.hlsl b/clang/test/CodeGenHLSL/resources/Textures-shorthand-contexts.hlsl
index 0210feff458e7..99ec66f6254f0 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-shorthand-contexts.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-shorthand-contexts.hlsl
@@ -1,33 +1,42 @@
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -emit-llvm -disable-llvm-passes \
// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 -o - %s \
// RUN: | llvm-cxxfilt \
// RUN: | FileCheck %s -DTEXTURE=Texture2D -DCOORD_DIM=2 -DDXIL_TY=2 -DRW=0 \
// RUN: --check-prefixes=CHECK,CHECK-TEXEL
+
+// Texture2DArray
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -emit-llvm -disable-llvm-passes \
+// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -o - %s \
+// RUN: | llvm-cxxfilt \
+// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 -DDXIL_TY=7 \
+// RUN: -DRW=0 --check-prefixes=CHECK,CHECK-TEXEL
+
+// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -emit-llvm -disable-llvm-passes \
// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -o - %s \
// RUN: | llvm-cxxfilt \
// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 -DDXIL_TY=4 -DRW=0 \
// RUN: --check-prefixes=CHECK,CHECK-TEXEL
+
+// TextureCube
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -emit-llvm -disable-llvm-passes \
// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 -o - %s \
// RUN: | llvm-cxxfilt \
// RUN: | FileCheck %s -DTEXTURE=TextureCube -DCOORD_DIM=3 -DDXIL_TY=5 \
// RUN: -DRW=0 --check-prefixes=CHECK,CHECK-NOTEXEL
+
+// TextureCubeArray
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -emit-llvm -disable-llvm-passes \
// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 -o - %s \
// RUN: | llvm-cxxfilt \
// RUN: | FileCheck %s -DTEXTURE=TextureCubeArray -DCOORD_DIM=4 -DDXIL_TY=9 \
// RUN: -DRW=0 --check-prefixes=CHECK,CHECK-NOTEXEL
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -emit-llvm -disable-llvm-passes \
-// RUN: -DTEXTURE=Texture2DArray -DCOORD_TYPE=float3 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture2DArray -DCOORD_DIM=3 -DDXIL_TY=7 \
-// RUN: -DRW=0 --check-prefixes=CHECK,CHECK-TEXEL
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
diff --git a/clang/test/SemaHLSL/Resources/Textures-CalculateLevelOfDetail.hlsl b/clang/test/SemaHLSL/Resources/Textures-CalculateLevelOfDetail.hlsl
index 8ce078b40b390..ac91fb789dd8d 100644
--- a/clang/test/SemaHLSL/Resources/Textures-CalculateLevelOfDetail.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-CalculateLevelOfDetail.hlsl
@@ -27,11 +27,11 @@
// LOD_TYPE CalculateLevelOfDetail location type
//
// Check prefixes:
+// dim1 diagnostics naming a scalar offset or location
// dim2 diagnostics naming a 2-component offset or location
// vector
// dim3 diagnostics naming a 3-component offset or location
// vector
-// dim1 diagnostics naming a scalar offset or location
TEXTURE<float4> tex;
SamplerState samp;
diff --git a/clang/test/SemaHLSL/Resources/Textures-SampleBias.hlsl b/clang/test/SemaHLSL/Resources/Textures-SampleBias.hlsl
index 7a9f2bf34dca4..ca24ff804a739 100644
--- a/clang/test/SemaHLSL/Resources/Textures-SampleBias.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-SampleBias.hlsl
@@ -39,9 +39,10 @@
//
// Check prefixes:
// offset diagnostics for types that have offset overloads
+// nooffset diagnostics for types that have no offset overloads
+// dim1 diagnostics naming a scalar offset or location
// dim2 diagnostics naming a 2-component offset or location
// vector
-// nooffset diagnostics for types that have no offset overloads
// dim3 diagnostics naming a 3-component offset or location
// vector
//
diff --git a/clang/test/SemaHLSL/Resources/Textures-SampleCmp.hlsl b/clang/test/SemaHLSL/Resources/Textures-SampleCmp.hlsl
index e97db852e8df1..d7509b583285d 100644
--- a/clang/test/SemaHLSL/Resources/Textures-SampleCmp.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-SampleCmp.hlsl
@@ -35,10 +35,10 @@
//
// Check prefixes:
// offset diagnostics for types that have offset overloads
-// dim2 diagnostics naming a 2-component offset or location
-// vector
// nooffset diagnostics for types that have no offset overloads
// dim1 diagnostics naming a scalar offset or location
+// dim2 diagnostics naming a 2-component offset or location
+// vector
// dim3 diagnostics naming a 3-component offset or location
// vector
//
diff --git a/clang/test/SemaHLSL/Resources/Textures-SampleCmpLevelZero.hlsl b/clang/test/SemaHLSL/Resources/Textures-SampleCmpLevelZero.hlsl
index e30c2d47560d3..78709ff47809e 100644
--- a/clang/test/SemaHLSL/Resources/Textures-SampleCmpLevelZero.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-SampleCmpLevelZero.hlsl
@@ -35,10 +35,10 @@
//
// Check prefixes:
// offset diagnostics for types that have offset overloads
-// dim2 diagnostics naming a 2-component offset or location
-// vector
// nooffset diagnostics for types that have no offset overloads
// dim1 diagnostics naming a scalar offset or location
+// dim2 diagnostics naming a 2-component offset or location
+// vector
// dim3 diagnostics naming a 3-component offset or location
// vector
//
diff --git a/clang/test/SemaHLSL/Resources/Textures-SampleGrad.hlsl b/clang/test/SemaHLSL/Resources/Textures-SampleGrad.hlsl
index f9a01ffaf5049..f4accded102d9 100644
--- a/clang/test/SemaHLSL/Resources/Textures-SampleGrad.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-SampleGrad.hlsl
@@ -41,9 +41,10 @@
//
// Check prefixes:
// offset diagnostics for types that have offset overloads
+// nooffset diagnostics for types that have no offset overloads
+// dim1 diagnostics naming a scalar offset or location
// dim2 diagnostics naming a 2-component offset or location
// vector
-// nooffset diagnostics for types that have no offset overloads
// dim3 diagnostics naming a 3-component offset or location
// vector
//
diff --git a/clang/test/SemaHLSL/Resources/Textures-SampleLevel.hlsl b/clang/test/SemaHLSL/Resources/Textures-SampleLevel.hlsl
index 151035639f7c9..2b95584c58b60 100644
--- a/clang/test/SemaHLSL/Resources/Textures-SampleLevel.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-SampleLevel.hlsl
@@ -39,9 +39,10 @@
//
// Check prefixes:
// offset diagnostics for types that have offset overloads
+// nooffset diagnostics for types that have no offset overloads
+// dim1 diagnostics naming a scalar offset or location
// dim2 diagnostics naming a 2-component offset or location
// vector
-// nooffset diagnostics for types that have no offset overloads
// dim3 diagnostics naming a 3-component offset or location
// vector
//
diff --git a/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl b/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl
index ab666a914d899..c0ee382b6dd56 100644
--- a/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl
@@ -1,56 +1,56 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DTEXTURE=Texture2D -DINDEX_TYPE=uint2 \
-// RUN: -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
-// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=Texture1D -DINDEX_TYPE=uint \
// RUN: -DINDEX_ARG="1" -DWIDE_INDEX_TYPE=int2 -DWIDE_INDEX_ARG="int2(1, 2)" \
// RUN: -verify=expected,scalaridx -o - %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DTEXTURE=Texture2DArray -DINDEX_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(1, 2, 0)" -DWIDE_INDEX_TYPE=int4 \
-// RUN: -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" -DNARROW_INDEX_TYPE=uint2 \
-// RUN: -DNARROW_INDEX_ARG="uint2(1, 2)" -verify=expected,vecidx -o - %s
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=Texture1DArray -DINDEX_TYPE=uint2 \
// RUN: -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DTEXTURE=RWTexture2D -DHAS_STORE \
-// RUN: -DINDEX_TYPE=uint2 -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
+// RUN: -finclude-default-header -DTEXTURE=Texture2D -DINDEX_TYPE=uint2 \
+// RUN: -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=Texture2DArray -DINDEX_TYPE=uint3 \
+// RUN: -DINDEX_ARG="uint3(1, 2, 0)" -DWIDE_INDEX_TYPE=int4 \
+// RUN: -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" -DNARROW_INDEX_TYPE=uint2 \
+// RUN: -DNARROW_INDEX_ARG="uint2(1, 2)" -verify=expected,vecidx -o - %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=RWTexture1D -DHAS_STORE \
+// RUN: -DINDEX_TYPE=uint -DINDEX_ARG="1" -DWIDE_INDEX_TYPE=int2 \
+// RUN: -DWIDE_INDEX_ARG="int2(1, 2)" -verify=expected,scalaridx -o - %s
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture1D -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint -DINDEX_ARG="1" -DWIDE_INDEX_TYPE=int2 \
// RUN: -DWIDE_INDEX_ARG="int2(1, 2)" -verify=expected,scalaridx -o - %s
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DTEXTURE=RWTexture2DArray -DHAS_STORE \
-// RUN: -DINDEX_TYPE=uint3 -DINDEX_ARG="uint3(1, 2, 0)" \
-// RUN: -DWIDE_INDEX_TYPE=int4 -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" \
-// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" \
-// RUN: -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture1DArray -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint2 -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=RWTexture1DArray -DHAS_STORE \
+// RUN: -DINDEX_TYPE=uint2 -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
+// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture2D -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint2 -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
-// RUN: -finclude-default-header -DTEXTURE=RWTexture1D -DHAS_STORE \
-// RUN: -DINDEX_TYPE=uint -DINDEX_ARG="1" -DWIDE_INDEX_TYPE=int2 \
-// RUN: -DWIDE_INDEX_ARG="int2(1, 2)" -verify=expected,scalaridx -o - %s
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=RWTexture2D -DHAS_STORE \
+// RUN: -DINDEX_TYPE=uint2 -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
+// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture2DArray -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint3 -DINDEX_ARG="uint3(1, 2, 0)" \
// RUN: -DWIDE_INDEX_TYPE=int4 -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" \
// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" \
// RUN: -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
-// RUN: -finclude-default-header -DTEXTURE=RWTexture1DArray -DHAS_STORE \
-// RUN: -DINDEX_TYPE=uint2 -DINDEX_ARG="uint2(1, 2)" -DWIDE_INDEX_TYPE=int3 \
-// RUN: -DWIDE_INDEX_ARG="int3(1, 2, 3)" -verify=expected,vecidx -o - %s
+// RUN: -finclude-default-header -DTEXTURE=RWTexture2DArray -DHAS_STORE \
+// RUN: -DINDEX_TYPE=uint3 -DINDEX_ARG="uint3(1, 2, 0)" \
+// RUN: -DWIDE_INDEX_TYPE=int4 -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" \
+// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" \
+// RUN: -verify=expected,vecidx -o - %s
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
diff --git a/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl b/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl
index d4783aec5616c..daca84b3802e8 100644
--- a/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl
@@ -1,33 +1,33 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=Texture2D -DINDEX_TYPE=int2 -DHAS_MIPS -verify %s
+// RUN: -DTEXTURE=Texture1D -DINDEX_TYPE=int -DHAS_MIPS -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=Texture1D -DINDEX_TYPE=int -DHAS_MIPS -verify %s
+// RUN: -DTEXTURE=Texture1DArray -DINDEX_TYPE=int2 -DHAS_MIPS -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=Texture2DArray -DINDEX_TYPE=int3 -DHAS_MIPS -verify %s
+// RUN: -DTEXTURE=Texture2D -DINDEX_TYPE=int2 -DHAS_MIPS -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=Texture1DArray -DINDEX_TYPE=int2 -DHAS_MIPS -verify %s
+// RUN: -DTEXTURE=Texture2DArray -DINDEX_TYPE=int3 -DHAS_MIPS -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=RWTexture2D -verify %s
+// RUN: -DTEXTURE=TextureCube -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=RWTexture1D -verify %s
+// RUN: -DTEXTURE=TextureCubeArray -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=RWTexture2DArray -verify %s
+// RUN: -DTEXTURE=RWTexture1D -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=RWTexture1DArray -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=TextureCube -verify %s
+// RUN: -DTEXTURE=RWTexture2D -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=TextureCubeArray -verify %s
+// RUN: -DTEXTURE=RWTexture2DArray -verify %s
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
diff --git a/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl b/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl
index 4f202e9698efc..2c0247931d3d8 100644
--- a/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl
@@ -7,18 +7,6 @@
// RUN: -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 -DGRAD_TYPE=float \
// RUN: -DOFFSET_TYPE=int -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture2D \
-// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float2 -DOFFSET_TYPE=int2 -verify %s
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture1D \
-// RUN: -DCOORD_TYPE=float -DGRAD_TYPE=float -DOFFSET_TYPE=int -verify %s
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture2DArray \
-// RUN: -DCOORD_TYPE=float3 -DGRAD_TYPE=float2 -DOFFSET_TYPE=int2 -verify %s
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture1DArray \
-// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float -DOFFSET_TYPE=int -verify %s
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DHAS_SAMPLE -DHAS_GATHER -DHAS_LOD \
// RUN: -DLOAD_ARG="int4(0, 0, 0, 0)" -DINDEX_ARG="uint3(0, 0, 0)" \
// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 -DOFFSET_TYPE=int3 -verify \
@@ -28,6 +16,18 @@
// RUN: -DLOAD_ARG="int4(0, 0, 0, 0)" -DINDEX_ARG="uint3(0, 0, 0)" \
// RUN: -DTEXTURE=TextureCubeArray -DCOORD_TYPE=float4 -DOFFSET_TYPE=int3 \
// RUN: -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture1D \
+// RUN: -DCOORD_TYPE=float -DGRAD_TYPE=float -DOFFSET_TYPE=int -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture1DArray \
+// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float -DOFFSET_TYPE=int -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture2D \
+// RUN: -DCOORD_TYPE=float2 -DGRAD_TYPE=float2 -DOFFSET_TYPE=int2 -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture2DArray \
+// RUN: -DCOORD_TYPE=float3 -DGRAD_TYPE=float2 -DOFFSET_TYPE=int2 -verify %s
// RWTexture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
>From 8d6ce2f12ca95a3a4bf43e97c5ba8498890879e8 Mon Sep 17 00:00:00 2001
From: Deric Cheung <cheung.deric at gmail.com>
Date: Thu, 10 Sep 2026 15:07:49 -0700
Subject: [PATCH 4/6] Derive the coordinate width from the resource attribute
for better readability
---
clang/lib/CodeGen/CGHLSLBuiltins.cpp | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/clang/lib/CodeGen/CGHLSLBuiltins.cpp b/clang/lib/CodeGen/CGHLSLBuiltins.cpp
index 9926cd78fd147..b1ec72ae46242 100644
--- a/clang/lib/CodeGen/CGHLSLBuiltins.cpp
+++ b/clang/lib/CodeGen/CGHLSLBuiltins.cpp
@@ -791,32 +791,37 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID,
Value *CoordLODOp = EmitScalarExpr(E->getArg(1));
const HLSLAttributedResourceType *RT = getRequiredHandleType(E, 0);
+ const auto &Attrs = RT->getAttrs();
+
Value *CoordOp = nullptr;
Value *LODOp = nullptr;
- if (RT->getAttrs().ResourceClass == llvm::dxil::ResourceClass::UAV) {
+ if (Attrs.ResourceClass == llvm::dxil::ResourceClass::UAV) {
// A UAV descriptor binds a single mip slice, so a RWTexture location is
// all coordinate and there is no mip level to select.
CoordOp = CoordLODOp;
LODOp = llvm::PoisonValue::get(Int32Ty);
} else {
- auto *CoordLODVecTy = cast<llvm::FixedVectorType>(CoordLODOp->getType());
- unsigned NumElts = CoordLODVecTy->getNumElements();
- assert(NumElts >= 2 && "CoordLOD must have at least 2 elements");
-
// Split CoordLOD into Coord and LOD. 1D resources use a scalar
// coordinate rather than a 1-element vector.
- if (NumElts == 2) {
+ unsigned CoordSize =
+ clang::hlsl::getResourceDimensions(Attrs.ResourceDimension) +
+ (Attrs.IsArray ? 1 : 0);
+ assert(cast<llvm::FixedVectorType>(CoordLODOp->getType())
+ ->getNumElements() == CoordSize + 1 &&
+ "CoordLOD must have one element per coordinate, plus the level");
+
+ if (CoordSize == 1) {
CoordOp = Builder.CreateExtractElement(CoordLODOp, uint64_t(0),
"hlsl.load.coord");
} else {
SmallVector<int, 4> Mask;
- for (unsigned I = 0; I < NumElts - 1; ++I)
+ for (unsigned I = 0; I < CoordSize; ++I)
Mask.push_back(I);
CoordOp =
Builder.CreateShuffleVector(CoordLODOp, Mask, "hlsl.load.coord");
}
- LODOp = Builder.CreateExtractElement(CoordLODOp, NumElts - 1,
- "hlsl.load.lod");
+ LODOp =
+ Builder.CreateExtractElement(CoordLODOp, CoordSize, "hlsl.load.lod");
}
SmallVector<Value *, 4> Args;
>From 0cf16f9631a66bcaa3d21093c84aa5bc6ca1047a Mon Sep 17 00:00:00 2001
From: Deric Cheung <cheung.deric at gmail.com>
Date: Thu, 10 Sep 2026 15:08:18 -0700
Subject: [PATCH 5/6] Add missing macro descriptions to tests
---
clang/test/AST/HLSL/Textures-AST.hlsl | 4 ++++
clang/test/AST/HLSL/Textures-scalar-AST.hlsl | 2 ++
clang/test/AST/HLSL/Textures-vector-AST.hlsl | 2 ++
.../resources/Textures-CalculateLevelOfDetail.hlsl | 1 +
clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl | 4 ++++
clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl | 4 ++++
clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl | 4 ++++
.../CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl | 4 ++++
clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl | 5 +++++
clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl | 4 ++++
clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl | 2 ++
.../test/SemaHLSL/Resources/Textures-declaration-order.hlsl | 4 ++++
12 files changed, 40 insertions(+)
diff --git a/clang/test/AST/HLSL/Textures-AST.hlsl b/clang/test/AST/HLSL/Textures-AST.hlsl
index 5a456170501cd..f0a39dc7dc281 100644
--- a/clang/test/AST/HLSL/Textures-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-AST.hlsl
@@ -78,9 +78,13 @@
// INDEX_ARG a literal operator[] index
// TEXTURE resource type name
// INDEX_TYPE operator[] index type
+// TRUNC_TYPE the operator[] index type as the truncating cast of
+// INDEX_ARG spells it; only used by UAV-TRUNC
// LOCATION_TYPE Load location type
// DIM_NAME hlsl::dimension spelling
// RW dx.Texture UAV operand
+// HAS_GETDIM defined for types that have the GetDimensions
+// overloads
//
// Check prefixes:
// SRV read-only (SRV) textures
diff --git a/clang/test/AST/HLSL/Textures-scalar-AST.hlsl b/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
index 69f7c731d0900..587a8bdb41fe8 100644
--- a/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
@@ -87,6 +87,8 @@
// methods
// HAS_GATHER defined for types that have the Gather* methods
// TEXTURE resource type name
+// IS_ARRAY the hlsl::is_array attribute as it appears on the
+// handle of an array texture, empty otherwise
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// GRAD_TYPE SampleGrad ddx/ddy type, one component per resource
diff --git a/clang/test/AST/HLSL/Textures-vector-AST.hlsl b/clang/test/AST/HLSL/Textures-vector-AST.hlsl
index 80c75d640f3a6..92c53c2edec4e 100644
--- a/clang/test/AST/HLSL/Textures-vector-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-vector-AST.hlsl
@@ -87,6 +87,8 @@
// methods
// HAS_GATHER defined for types that have the Gather* methods
// TEXTURE resource type name
+// IS_ARRAY the hlsl::is_array attribute as it appears on the
+// handle of an array texture, empty otherwise
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// GRAD_TYPE SampleGrad ddx/ddy type, one component per resource
diff --git a/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl b/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
index 9d784aa953b75..7b04ffd9e6a3c 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
@@ -100,6 +100,7 @@
// LOD_TYPE CalculateLevelOfDetail location type
// TEXTURE resource type name
// GRAD_CXX ddx/ddy type in the C++ signature
+// GRAD_LLVM ddx/ddy type in the IR
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// ARRAYED spirv.Image Arrayed operand
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
index 48442a12b5da0..e2af245ec9939 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
@@ -147,6 +147,10 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_CXX sample location type in the C++ signature
+// COORD_LLVM sample location type in the IR
+// OFFSET_CXX offset type in the C++ signature
+// OFFSET_LLVM offset type in the IR
+// OFFSET_ZERO the all-zero offset as it appears in the IR
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// OFFSET_CONST the offset literal as it appears in the IR
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
index 4456bb653ea43..e117ed939eba0 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
@@ -147,6 +147,10 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_CXX sample location type in the C++ signature
+// COORD_LLVM sample location type in the IR
+// OFFSET_CXX offset type in the C++ signature
+// OFFSET_LLVM offset type in the IR
+// OFFSET_ZERO the all-zero offset as it appears in the IR
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// OFFSET_CONST the offset literal as it appears in the IR
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
index e533ee05171d4..d3a8d53d5e615 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
@@ -125,6 +125,10 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_CXX sample location type in the C++ signature
+// COORD_LLVM sample location type in the IR
+// OFFSET_CXX offset type in the C++ signature
+// OFFSET_LLVM offset type in the IR
+// OFFSET_ZERO the all-zero offset as it appears in the IR
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// OFFSET_CONST the offset literal as it appears in the IR
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
index d58a2e8dfa966..18e4c2632d228 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
@@ -119,6 +119,10 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_CXX sample location type in the C++ signature
+// COORD_LLVM sample location type in the IR
+// OFFSET_CXX offset type in the C++ signature
+// OFFSET_LLVM offset type in the IR
+// OFFSET_ZERO the all-zero offset as it appears in the IR
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// OFFSET_CONST the offset literal as it appears in the IR
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
index 8940baf921dc7..0ea68e5f3e635 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
@@ -164,7 +164,12 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// GRAD_CXX ddx/ddy type in the C++ signature
+// GRAD_LLVM ddx/ddy type in the IR
// COORD_CXX sample location type in the C++ signature
+// COORD_LLVM sample location type in the IR
+// OFFSET_CXX offset type in the C++ signature
+// OFFSET_LLVM offset type in the IR
+// OFFSET_ZERO the all-zero offset as it appears in the IR
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// OFFSET_CONST the offset literal as it appears in the IR
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
index 19a70a4047d64..157fa04e114b3 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
@@ -145,6 +145,10 @@
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// COORD_CXX sample location type in the C++ signature
+// COORD_LLVM sample location type in the IR
+// OFFSET_CXX offset type in the C++ signature
+// OFFSET_LLVM offset type in the IR
+// OFFSET_ZERO the all-zero offset as it appears in the IR
// DXIL_TY dx.Texture resource-kind operand
// RW dx.Texture UAV operand
// OFFSET_CONST the offset literal as it appears in the IR
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
index c1bf4267e49bc..64e6c3654a52c 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
@@ -201,6 +201,8 @@
// REG1 register binding for Tex2
// REG2 register binding for Tex3
// TEXTURE resource type name
+// INDEX_CXX_U operator[] index type in the C++ signature
+// INDEX_LLVM operator[] index type in the IR
// COORD_TYPE sample location type (DIM components plus the array
// slice)
// ROV_OR_COUNT the overloaded second dx handle operand: IsROV for
diff --git a/clang/test/SemaHLSL/Resources/Textures-declaration-order.hlsl b/clang/test/SemaHLSL/Resources/Textures-declaration-order.hlsl
index 557a5a648475f..74103d9b65e57 100644
--- a/clang/test/SemaHLSL/Resources/Textures-declaration-order.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-declaration-order.hlsl
@@ -8,6 +8,10 @@
// types. Both patterns are only defined on demand by HLSLExternalSemaSource, so
// completing one of them must not prevent the other one from being completed.
// See https://github.com/llvm/llvm-project/issues/212575.
+//
+// SCALAR_FIRST defined to declare the scalar element types first, and
+// left undefined to declare the vector ones first, so
+// that both orders are covered
// expected-no-diagnostics
>From c782d0a4d098faddfbd2ca23efb6d1a276276881 Mon Sep 17 00:00:00 2001
From: Deric Cheung <cheung.deric at gmail.com>
Date: Thu, 10 Sep 2026 22:35:44 +0000
Subject: [PATCH 6/6] Fold Texture3D into the texture tests after the rebase
---
clang/test/AST/HLSL/Textures-AST.hlsl | 1 +
clang/test/AST/HLSL/Textures-scalar-AST.hlsl | 9 ++-
.../test/AST/HLSL/Textures-shorthand-AST.hlsl | 1 +
clang/test/AST/HLSL/Textures-vector-AST.hlsl | 9 ++-
.../Textures-CalculateLevelOfDetail.hlsl | 32 ++++----
.../resources/Textures-Gather.hlsl | 1 +
.../resources/Textures-GetDimensions.hlsl | 1 +
.../CodeGenHLSL/resources/Textures-Load.hlsl | 80 ++++++++++---------
.../CodeGenHLSL/resources/Textures-Mips.hlsl | 24 ++++--
.../resources/Textures-Sample.hlsl | 1 +
.../resources/Textures-SampleBias.hlsl | 1 +
.../resources/Textures-SampleCmp.hlsl | 1 +
.../Textures-SampleCmpLevelZero.hlsl | 1 +
.../resources/Textures-SampleGrad.hlsl | 48 +++++------
.../resources/Textures-SampleLevel.hlsl | 1 +
.../resources/Textures-Subscript.hlsl | 60 ++++++--------
.../Textures-default-explicit-binding.hlsl | 1 +
.../resources/Textures-default.hlsl | 22 +++--
.../Textures-shorthand-contexts.hlsl | 1 +
.../Resources/Textures-Subscript.hlsl | 23 +++---
.../Resources/Textures-mips-errors.hlsl | 10 +--
.../Textures-unsupported-methods-errors.hlsl | 12 +--
22 files changed, 185 insertions(+), 155 deletions(-)
diff --git a/clang/test/AST/HLSL/Textures-AST.hlsl b/clang/test/AST/HLSL/Textures-AST.hlsl
index f0a39dc7dc281..839da416c714c 100644
--- a/clang/test/AST/HLSL/Textures-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-AST.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DINDEX_ARG_TYPE=uint3 \
// RUN: -DINDEX_ARG="uint3(0, 0, 0)" -DTEXTURE=Texture1D -o - %s | FileCheck \
diff --git a/clang/test/AST/HLSL/Textures-scalar-AST.hlsl b/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
index 587a8bdb41fe8..643b5f553741e 100644
--- a/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-scalar-AST.hlsl
@@ -1,5 +1,6 @@
// Texture1D
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
// RUN: -DHAS_SAMPLE_CMP -DTEXTURE=Texture1D -DCOORD_TYPE=float \
@@ -16,7 +17,7 @@
// RUN: -DHAS_SAMPLE_CMP -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 \
// RUN: -DGRAD_TYPE=float -DLOD_LOCATION=loc.x -DOFFSET_ARG="1" -o - %s | \
// RUN: FileCheck %s \
-// RUN: --check-prefixes=CHECK,ARRAY,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
+// RUN: --check-prefixes=CHECK,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
// RUN: -DTEXTURE=Texture1DArray -DDIM_NAME=1D -DLOAD_DIM=3 \
// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 2>" \
@@ -96,6 +97,12 @@
// LOD_LOCATION expression producing a LOD_TYPE location from `loc`
// OFFSET_ARG a literal offset argument
// DIM_NAME hlsl::dimension spelling
+// LOCATION_TYPE sample location type in the declarations, one
+// component per resource dimension plus the array slice
+// GRADIENT_TYPE ddx/ddy type in the declarations, one component per
+// resource dimension
+// OFFSET_TYPE offset type in the declarations, one component per
+// resource dimension
// LOAD_DIM Load location components (COORD_DIM plus the mip level)
// INDEX_TYPE operator[] index type
//
diff --git a/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl b/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl
index 4250f8d7843d1..a7d6f9d3d9897 100644
--- a/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-shorthand-AST.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture1D -o \
// RUN: - %s | FileCheck %s -DTEXTURE=Texture1D
diff --git a/clang/test/AST/HLSL/Textures-vector-AST.hlsl b/clang/test/AST/HLSL/Textures-vector-AST.hlsl
index 92c53c2edec4e..b0f19a8923c9e 100644
--- a/clang/test/AST/HLSL/Textures-vector-AST.hlsl
+++ b/clang/test/AST/HLSL/Textures-vector-AST.hlsl
@@ -1,5 +1,6 @@
// Texture1D
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -ast-dump \
// RUN: -disable-llvm-passes -finclude-default-header -DHAS_OFFSET \
// RUN: -DHAS_SAMPLE_CMP -DTEXTURE=Texture1D -DCOORD_TYPE=float \
@@ -16,7 +17,7 @@
// RUN: -DHAS_SAMPLE_CMP -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 \
// RUN: -DGRAD_TYPE=float -DLOD_LOCATION=loc.x -DOFFSET_ARG="1" -o - %s | \
// RUN: FileCheck %s \
-// RUN: --check-prefixes=CHECK,ARRAY,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
+// RUN: --check-prefixes=CHECK,TEXEL,OFFSET,SAMPLECMP,SAMPLECMP-OFFSET \
// RUN: -DTEXTURE=Texture1DArray -DDIM_NAME=1D -DLOAD_DIM=3 \
// RUN: -DINDEX_TYPE="vector<unsigned int, 2>" \
// RUN: -DIS_ARRAY=" [[hlsl::is_array]]" -DLOCATION_TYPE="vector<float, 2>" \
@@ -96,6 +97,12 @@
// LOD_LOCATION expression producing a LOD_TYPE location from `loc`
// OFFSET_ARG a literal offset argument
// DIM_NAME hlsl::dimension spelling
+// LOCATION_TYPE sample location type in the declarations, one
+// component per resource dimension plus the array slice
+// GRADIENT_TYPE ddx/ddy type in the declarations, one component per
+// resource dimension
+// OFFSET_TYPE offset type in the declarations, one component per
+// resource dimension
// LOAD_DIM Load location components (COORD_DIM plus the mip level)
// INDEX_TYPE operator[] index type
//
diff --git a/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl b/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
index 7b04ffd9e6a3c..9dcc077677eea 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-CalculateLevelOfDetail.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float \
// RUN: -DTEXTURE=Texture1D %s | llvm-cxxfilt | FileCheck %s \
@@ -50,6 +51,19 @@
// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=1 -DGRAD_LLVM="<2 x float>" \
// RUN: -DGRAD_CXX="float vector[2]"
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
+// RUN: -DTEXTURE=Texture3D %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture3D --check-prefixes=CHECK,DXIL -DDXIL_TY=4 -DRW=0 \
+// RUN: -DGRAD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
+// RUN: -DTEXTURE=Texture3D %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=Texture3D --check-prefixes=CHECK,SPIRV -DARRAYED=0 \
+// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DGRAD_CXX="float vector[3]" \
+// RUN: -DGRAD_LLVM="<3 x float>"
+
// TextureCube
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
@@ -76,24 +90,6 @@
// RUN: -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=3 -DGRAD_LLVM="<3 x float>" \
// RUN: -DGRAD_CXX="float vector[3]"
-// Texture3D
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=Texture3D %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D --check-prefixes=CHECK,DXIL \
-// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 \
-// RUN: -DGRAD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>"
-
-// Texture3D
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - -DLOD_TYPE=float3 \
-// RUN: -DTEXTURE=Texture3D %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D --check-prefixes=CHECK,SPIRV \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
-// RUN: -DGRAD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>"
-
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Gather.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Gather.hlsl
index 2ddebfaf037dd..6ea41a88891d4 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Gather.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Gather.hlsl
@@ -1,4 +1,5 @@
// Texture2D
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
// RUN: -DOFFSET_ARG="int2(1, 2)" -DHAS_OFFSET -DTEXTURE=Texture2D \
diff --git a/clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl b/clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl
index 93cd5620198af..8c7c078cd0d0b 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-GetDimensions.hlsl
@@ -1,4 +1,5 @@
// Texture2D
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2D -o \
// RUN: - %s \
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
index 604c446e124a8..67b87daab860c 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Load.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
// RUN: -DHAS_OFFSET -DOFFSET_ARG="1" -DTEXTURE=Texture1D \
@@ -94,6 +95,32 @@
// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<4 x i32>" \
// RUN: -DLOAD_CXX="int vector[4]"
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="int3(1, 1, 1)" -DTEXTURE=Texture3D \
+// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,DXIL,DXIL-SRV \
+// RUN: -DTEXTURE=Texture3D -D#LOAD_DIM=4 -DCOORD_DIM=3 \
+// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DDXIL_TY=4 -DRW=0 \
+// RUN: -DCOORD_LLVM="<3 x i32>" -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_CXX="int vector[4]" -DLOAD_LLVM="<4 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
+// RUN: -DHAS_OFFSET -DOFFSET_ARG="int3(1, 1, 1)" -DTEXTURE=Texture3D \
+// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,SRV,VEC-COORD,WIDE-LOC,SPIRV,SPIRV-SRV \
+// RUN: -DTEXTURE=Texture3D -D#LOAD_DIM=4 -DCOORD_DIM=3 \
+// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DARRAYED=0 -DSAMPLED=1 \
+// RUN: -DFORMAT1=0 -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 -DFORMAT24=0 \
+// RUN: -DFORMAT25=0 -DSPV_DIM=2 -DCOORD_LLVM="<3 x i32>" \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_CXX="int vector[4]" \
+// RUN: -DLOAD_LLVM="<4 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer \
+// RUN: -DOFFSET_CONST="splat (i32 1)"
+
// RWTexture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int \
@@ -179,51 +206,30 @@
// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_LLVM="<3 x i32>" \
// RUN: -DLOAD_CXX="int vector[3]"
-// Texture3D
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DHAS_OFFSET -DOFFSET_ARG="int3(1, 1, 1)" -DTEXTURE=Texture3D \
-// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,WIDE-LOC,DXIL,DXIL-SRV \
-// RUN: -DTEXTURE=Texture3D -D#LOAD_DIM=4 -DCOORD_DIM=3 \
-// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DDXIL_TY=4 -DRW=0 \
-// RUN: -DENTRY_DIM=2 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<3 x i32>" -DENTRY_CXX="int vector[2]" -DLOAD_CXX="int vector[4]" -DLOAD_LLVM="<4 x i32>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
-
-// Texture3D
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DHAS_OFFSET -DOFFSET_ARG="int3(1, 1, 1)" -DTEXTURE=Texture3D \
-// RUN: -DLOAD_ARG="int4(loc, 0, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,SRV,WIDE-LOC,SPIRV,SPIRV-SRV \
-// RUN: -DTEXTURE=Texture3D -D#LOAD_DIM=4 -DCOORD_DIM=3 \
-// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DARRAYED=0 -DSAMPLED=1 \
-// RUN: -DFORMAT1=0 -DFORMAT3=0 -DFORMAT6=0 -DFORMAT21=0 -DFORMAT24=0 \
-// RUN: -DFORMAT25=0 -DSPV_DIM=2 -DENTRY_DIM=2 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<3 x i32>" -DENTRY_CXX="int vector[2]" -DLOAD_CXX="int vector[4]" -DLOAD_LLVM="<4 x i32>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
-
// RWTexture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DTEXTURE=RWTexture3D -DLOAD_ARG="int3(loc, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,UAV,WIDE-LOC,DXIL,DXIL-UAV \
+// RUN: -DTEXTURE=RWTexture3D -DLOAD_ARG="int3(loc, 0)" -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,UAV,WIDE-LOC,DXIL,DXIL-UAV \
// RUN: -DTEXTURE=RWTexture3D -D#LOAD_DIM=3 -DCOORD_DIM=3 -DDXIL_TY=4 -DRW=1 \
-// RUN: -DENTRY_DIM=2 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<3 x i32>" -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DENTRY_CXX="int vector[2]" -DLOAD_CXX="int vector[3]" -DLOAD_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
-
-// RWTexture3D
+// RUN: -DCOORD_LLVM="<3 x i32>" -DCOORD_MASK="<i32 0, i32 1, i32 2>" \
+// RUN: -DENTRY_CXX="int vector[2]" -DLOAD_CXX="int vector[3]" \
+// RUN: -DLOAD_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer \
+// RUN: -DOFFSET_CONST="splat (i32 1)"
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DENTRY_TYPE=int2 \
-// RUN: -DTEXTURE=RWTexture3D -DLOAD_ARG="int3(loc, 0)" -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,UAV,WIDE-LOC,SPIRV,SPIRV-UAV \
+// RUN: -DTEXTURE=RWTexture3D -DLOAD_ARG="int3(loc, 0)" -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s \
+// RUN: --check-prefixes=CHECK,UAV,WIDE-LOC,SPIRV,SPIRV-UAV \
// RUN: -DTEXTURE=RWTexture3D -D#LOAD_DIM=3 -DCOORD_DIM=3 -DARRAYED=0 \
// RUN: -DSAMPLED=2 -DFORMAT1=1 -DFORMAT3=3 -DFORMAT6=6 -DFORMAT21=21 \
-// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=2 -DENTRY_DIM=2 -DDIM=3 \
-// RUN: -DCOORD_LLVM="<3 x i32>" -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DENTRY_CXX="int vector[2]" -DLOAD_CXX="int vector[3]" -DLOAD_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DFORMAT24=24 -DFORMAT25=25 -DSPV_DIM=2 -DCOORD_LLVM="<3 x i32>" \
+// RUN: -DCOORD_MASK="<i32 0, i32 1, i32 2>" -DENTRY_CXX="int vector[2]" \
+// RUN: -DLOAD_CXX="int vector[3]" -DLOAD_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_ZERO=zeroinitializer -DOFFSET_CONST="splat (i32 1)"
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl
index 80b892f2a525b..354aa39b2f6a6 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Mips.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
// RUN: -DTEXTURE=Texture1D -DCOORD_TYPE=float -DINDEX_TYPE=int -o - %s | \
@@ -91,11 +92,24 @@
// Texture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-pixel -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
-// RUN: -DTEXTURE=Texture3D -DCOORD_DIM=3 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s --check-prefixes=CHECK,COORD3 -DTEXTURE=Texture3D \
-// RUN: -DCOORD_DIM=3 -DLOAD_DIM=4 -DDXIL_TY=4 -DDIM=3 \
-// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DINDEX_CXX="int vector[3]" -DINDEX_LLVM="<3 x i32>" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -DINDEX_TYPE=int3 -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,COORD3,VEC-COORD \
+// RUN: -DTEXTURE=Texture3D -DCOORD_DIM=3 -DLOAD_DIM=4 \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 4)' \
+// RUN: -DMIPS_OFFSET='i32 4' \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX="int vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-unknown-vulkan-pixel -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -hlsl-entry test_mips \
+// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -DINDEX_TYPE=int3 -o - %s | \
+// RUN: llvm-cxxfilt | FileCheck %s --check-prefixes=CHECK,COORD3,VEC-COORD \
+// RUN: -DTEXTURE=Texture3D -DCOORD_DIM=3 -DLOAD_DIM=4 \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 2, 2, 0, 0, 1, 0)' \
+// RUN: -DMIPS_OFFSET='i64 8' \
+// RUN: -DCOORD_LLVM="<3 x float>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>" -DINDEX_CXX="int vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
index e2af245ec9939..2959e12696ae5 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Sample.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
index e117ed939eba0..4c9d52081735d 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleBias.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
index d3a8d53d5e615..b08e3dd477cf9 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleCmp.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
index 18e4c2632d228..2d5eda66d00fc 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleCmpLevelZero.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
index 0ea68e5f3e635..a9e676b3b65c3 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleGrad.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DGRAD_TYPE=float -DHAS_OFFSET -DTEXTURE=Texture1D \
@@ -87,6 +88,30 @@
// RUN: -DGRAD_CXX="float vector[2]" -DOFFSET_LLVM="<2 x i32>" \
// RUN: -DOFFSET_CXX="int vector[2]" -DOFFSET_ZERO=zeroinitializer
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DGRAD_TYPE=float3 -DHAS_OFFSET \
+// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=Texture3D \
+// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
+// RUN: -DDXIL_TY=4 -DRW=0 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
+// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" \
+// RUN: -DGRAD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>" \
+// RUN: -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" \
+// RUN: -DOFFSET_ZERO=zeroinitializer
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -o - \
+// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DGRAD_TYPE=float3 -DHAS_OFFSET \
+// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 %s | llvm-cxxfilt | \
+// RUN: FileCheck %s -DTEXTURE=Texture3D \
+// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
+// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 \
+// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" -DCOORD_CXX="float vector[3]" \
+// RUN: -DCOORD_LLVM="<3 x float>" -DGRAD_CXX="float vector[3]" \
+// RUN: -DGRAD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" \
+// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
+
// TextureCube
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - \
@@ -129,29 +154,6 @@
// RUN: -DOFFSET_LLVM="<3 x i32>" -DOFFSET_CXX="int vector[3]" \
// RUN: -DOFFSET_ZERO=zeroinitializer
-// Texture3D
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DGRAD_TYPE=float3 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL,DXIL-TEXEL,CHECK-OFFSET,DXIL-OFFSET \
-// RUN: -DDXIL_TY=4 -DRW=0 -DDIM=3 -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DGRAD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
-
-// Texture3D
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -o - \
-// RUN: -DOFFSET_ARG="int3(1, 2, 3)" -DGRAD_TYPE=float3 -DHAS_OFFSET \
-// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV,SPIRV-TEXEL,CHECK-OFFSET,SPIRV-OFFSET \
-// RUN: -DARRAYED=0 -DSAMPLED=1 -DIMG_FMT=0 -DSPV_DIM=2 -DDIM=3 \
-// RUN: -DOFFSET_CONST="<i32 1, i32 2, i32 3>" \
-// RUN: -DCOORD_CXX="float vector[3]" -DCOORD_LLVM="<3 x float>" -DGRAD_CXX="float vector[3]" -DGRAD_LLVM="<3 x float>" -DOFFSET_CXX="int vector[3]" -DOFFSET_LLVM="<3 x i32>" -DOFFSET_ZERO=zeroinitializer
-
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
diff --git a/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl b/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
index 157fa04e114b3..18975646e8442 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-SampleLevel.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -o - -DOFFSET_ARG="1" \
// RUN: -DHAS_OFFSET -DTEXTURE=Texture1D -DCOORD_TYPE=float %s | \
diff --git a/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl b/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
index 64e6c3654a52c..7dd765da8104a 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-Subscript.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture1D -DCOORD_TYPE=uint \
@@ -81,6 +82,22 @@
// RUN: -DSPV_DIM=1 -DINDEX_LLVM="<2 x i32>" \
// RUN: -DINDEX_CXX_U="unsigned int vector[2]"
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture3D -DCOORD_TYPE=uint3 \
+// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture3D \
+// RUN: --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
+// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=4 -DRW=0 \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" -DINDEX_LLVM="<3 x i32>"
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
+// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
+// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture3D -DCOORD_TYPE=uint3 \
+// RUN: -o - %s | llvm-cxxfilt | FileCheck %s -DTEXTURE=Texture3D \
+// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 -DSAMPLED=1 \
+// RUN: -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=2 \
+// RUN: -DINDEX_CXX_U="unsigned int vector[3]" -DINDEX_LLVM="<3 x i32>"
+
// RWTexture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
@@ -149,49 +166,22 @@
// RUN: -DFMT_INT3=0 -DSPV_DIM=1 -DINDEX_LLVM="<3 x i32>" \
// RUN: -DINDEX_CXX_U="unsigned int vector[3]"
-// Texture3D
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture3D -DCOORD_TYPE=uint3 \
-// RUN: -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,DXIL -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=4 -DRW=0 \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" -DINDEX_LLVM="<3 x i32>"
-
-// Texture3D
-// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
-// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
-// RUN: -DREG0=t0 -DREG1=t1 -DREG2=t2 -DTEXTURE=Texture3D -DCOORD_TYPE=uint3 \
-// RUN: -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,SPIRV -DARRAYED=0 -DMS=0 -DSAMPLED=1 \
-// RUN: -DFMT_FLOAT4=0 -DFMT_FLOAT=0 -DFMT_INT3=0 -DSPV_DIM=2 \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" -DINDEX_LLVM="<3 x i32>"
-
// RWTexture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture3D \
-// RUN: -DCOORD_TYPE=uint3 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=RWTexture3D -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 -DROV_OR_COUNT=0 \
-// RUN: -DDXIL_HANDLE=dx.Texture -DDXIL_TY=4 \
+// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture3D --check-prefixes=CHECK,CHECK-STORE,DXIL -DRW=1 \
+// RUN: -DROV_OR_COUNT=0 -DDXIL_HANDLE=dx.Texture -DDXIL_TY=4 \
// RUN: -DINDEX_CXX_U="unsigned int vector[3]" -DINDEX_LLVM="<3 x i32>"
-
-// RWTexture3D
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -Wno-sign-conversion \
// RUN: -DHAS_STORE -DREG0=u0 -DREG1=u1 -DREG2=u2 -DTEXTURE=RWTexture3D \
-// RUN: -DCOORD_TYPE=uint3 -o - %s \
-// RUN: | llvm-cxxfilt \
-// RUN: | FileCheck %s -DTEXTURE=RWTexture3D -DCOORD_DIM=3 \
-// RUN: --check-prefixes=CHECK,CHECK-STORE,SPIRV -DARRAYED=0 -DMS=0 \
-// RUN: -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 -DFMT_INT3=0 -DSPV_DIM=2 \
-// RUN: -DINDEX_CXX_U="unsigned int vector[3]" -DINDEX_LLVM="<3 x i32>"
+// RUN: -DCOORD_TYPE=uint3 -o - %s | llvm-cxxfilt | FileCheck %s \
+// RUN: -DTEXTURE=RWTexture3D --check-prefixes=CHECK,CHECK-STORE,SPIRV \
+// RUN: -DARRAYED=0 -DMS=0 -DSAMPLED=2 -DFMT_FLOAT4=1 -DFMT_FLOAT=3 \
+// RUN: -DFMT_INT3=0 -DSPV_DIM=2 -DINDEX_CXX_U="unsigned int vector[3]" \
+// RUN: -DINDEX_LLVM="<3 x i32>"
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
diff --git a/clang/test/CodeGenHLSL/resources/Textures-default-explicit-binding.hlsl b/clang/test/CodeGenHLSL/resources/Textures-default-explicit-binding.hlsl
index 331d814c170b9..f736241027a3a 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-default-explicit-binding.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-default-explicit-binding.hlsl
@@ -1,4 +1,5 @@
// Texture2D
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl -emit-llvm \
// RUN: -disable-llvm-passes -finclude-default-header -DTEXTURE=Texture2D \
// RUN: -DCOORD_TYPE=float2 -o - %s \
diff --git a/clang/test/CodeGenHLSL/resources/Textures-default.hlsl b/clang/test/CodeGenHLSL/resources/Textures-default.hlsl
index 4e205f9d7de7e..69762453f7189 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-default.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-default.hlsl
@@ -1,4 +1,5 @@
// Texture1D
+// Texture1D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
// RUN: -finclude-default-header -DTEXTURE=Texture1D -o - %s | FileCheck %s \
@@ -56,6 +57,20 @@
// RUN: -DHANDLE_TY='target("spirv.Image", float, 1, 2, 1, 0, 1, 0)' \
// RUN: -DSCALAR_HANDLE_TY='target("spirv.Image", float, 1, 2, 1, 0, 1, 0)'
+// Texture3D
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
+// RUN: -finclude-default-header -DTEXTURE=Texture3D -o - %s | FileCheck %s \
+// RUN: -DTEXTURE=Texture3D --check-prefixes=CHECK,CHECK-TEXEL \
+// RUN: -DHANDLE_TY='target("dx.Texture", <4 x float>, 0, 0, 0, 4)' \
+// RUN: -DSCALAR_HANDLE_TY='target("dx.Texture", float, 0, 0, 0, 4)'
+// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl -std=hlsl202x \
+// RUN: -emit-llvm -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=Texture3D -o - %s | FileCheck %s -DTEXTURE=Texture3D \
+// RUN: --check-prefixes=CHECK,CHECK-TEXEL \
+// RUN: -DHANDLE_TY='target("spirv.Image", float, 2, 2, 0, 0, 1, 0)' \
+// RUN: -DSCALAR_HANDLE_TY='target("spirv.Image", float, 2, 2, 0, 0, 1, 0)'
+
// TextureCube
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
@@ -85,13 +100,6 @@
// RUN: -DHANDLE_TY='target("spirv.Image", float, 3, 2, 1, 0, 1, 0)' \
// RUN: -DSCALAR_HANDLE_TY='target("spirv.Image", float, 3, 2, 1, 0, 1, 0)'
-// Texture3D
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -std=hlsl202x -emit-llvm -disable-llvm-passes \
-// RUN: -finclude-default-header -DTEXTURE=Texture3D -o - %s \
-// RUN: | FileCheck %s -DTEXTURE=Texture3D -DDXIL_TY=4 -DRW=0 \
-// RUN: --check-prefixes=CHECK,CHECK-TEXEL
-
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
diff --git a/clang/test/CodeGenHLSL/resources/Textures-shorthand-contexts.hlsl b/clang/test/CodeGenHLSL/resources/Textures-shorthand-contexts.hlsl
index 99ec66f6254f0..46a24b7b078fd 100644
--- a/clang/test/CodeGenHLSL/resources/Textures-shorthand-contexts.hlsl
+++ b/clang/test/CodeGenHLSL/resources/Textures-shorthand-contexts.hlsl
@@ -1,4 +1,5 @@
// Texture2D
+// Texture2D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -emit-llvm -disable-llvm-passes \
// RUN: -DTEXTURE=Texture2D -DCOORD_TYPE=float2 -o - %s \
diff --git a/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl b/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl
index c0ee382b6dd56..191744b8c979f 100644
--- a/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-Subscript.hlsl
@@ -16,6 +16,12 @@
// RUN: -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" -DNARROW_INDEX_TYPE=uint2 \
// RUN: -DNARROW_INDEX_ARG="uint2(1, 2)" -verify=expected,vecidx -o - %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DTEXTURE=Texture3D -DINDEX_TYPE=uint3 \
+// RUN: -DINDEX_ARG="uint3(1, 2, 0)" -DWIDE_INDEX_TYPE=int4 \
+// RUN: -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" -DNARROW_INDEX_TYPE=uint2 \
+// RUN: -DNARROW_INDEX_ARG="uint2(1, 2)" \
+// RUN: -verify=expected,vecidx -o - %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture1D -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint -DINDEX_ARG="1" -DWIDE_INDEX_TYPE=int2 \
// RUN: -DWIDE_INDEX_ARG="int2(1, 2)" -verify=expected,scalaridx -o - %s
@@ -51,28 +57,19 @@
// RUN: -DWIDE_INDEX_TYPE=int4 -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" \
// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" \
// RUN: -verify=expected,vecidx -o - %s
-
-// Texture3D
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DTEXTURE=Texture3D -DINDEX_TYPE=uint3 \
-// RUN: -DINDEX_ARG="uint3(1, 2, 0)" -DWIDE_INDEX_TYPE=int4 \
-// RUN: -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" -DNARROW_INDEX_TYPE=uint2 \
-// RUN: -DNARROW_INDEX_ARG="uint2(1, 2)" -verify -o - %s
-
-// RWTexture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture3D -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint3 -DINDEX_ARG="uint3(1, 2, 0)" \
// RUN: -DWIDE_INDEX_TYPE=int4 -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" \
-// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" -verify \
+// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" \
+// RUN: -verify=expected,vecidx \
// RUN: -o - %s
-
-// RWTexture3D
// RUN: %clang_cc1 -triple spirv-vulkan-library -x hlsl \
// RUN: -finclude-default-header -DTEXTURE=RWTexture3D -DHAS_STORE \
// RUN: -DINDEX_TYPE=uint3 -DINDEX_ARG="uint3(1, 2, 0)" \
// RUN: -DWIDE_INDEX_TYPE=int4 -DWIDE_INDEX_ARG="int4(1, 2, 3, 4)" \
-// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" -verify \
+// RUN: -DNARROW_INDEX_TYPE=uint2 -DNARROW_INDEX_ARG="uint2(1, 2)" \
+// RUN: -verify=expected,vecidx \
// RUN: -o - %s
// Parameterized over the texture types in the RUN lines above; adding a texture
diff --git a/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl b/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl
index daca84b3802e8..d521e11463afc 100644
--- a/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-mips-errors.hlsl
@@ -12,6 +12,9 @@
// RUN: -DTEXTURE=Texture2DArray -DINDEX_TYPE=int3 -DHAS_MIPS -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
+// RUN: -DTEXTURE=Texture3D -DINDEX_TYPE=int3 -DHAS_MIPS -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=TextureCube -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
@@ -28,13 +31,6 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=RWTexture2DArray -verify %s
-
-// Texture3D
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
-// RUN: -DTEXTURE=Texture3D -DINDEX_TYPE=int3 -DHAS_MIPS -verify %s
-
-// RWTexture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -emit-llvm-only -disable-llvm-passes -finclude-default-header \
// RUN: -DTEXTURE=RWTexture3D -verify %s
diff --git a/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl b/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl
index 2c0247931d3d8..856c5b00c1820 100644
--- a/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl
+++ b/clang/test/SemaHLSL/Resources/Textures-unsupported-methods-errors.hlsl
@@ -7,6 +7,10 @@
// RUN: -DTEXTURE=Texture1DArray -DCOORD_TYPE=float2 -DGRAD_TYPE=float \
// RUN: -DOFFSET_TYPE=int -verify %s
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
+// RUN: -finclude-default-header -DHAS_TEXEL -DHAS_SAMPLE -DHAS_LOD \
+// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -DOFFSET_TYPE=int3 \
+// RUN: -DGRAD_TYPE=float3 -verify %s
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DHAS_SAMPLE -DHAS_GATHER -DHAS_LOD \
// RUN: -DLOAD_ARG="int4(0, 0, 0, 0)" -DINDEX_ARG="uint3(0, 0, 0)" \
// RUN: -DTEXTURE=TextureCube -DCOORD_TYPE=float3 -DOFFSET_TYPE=int3 -verify \
@@ -28,18 +32,10 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture2DArray \
// RUN: -DCOORD_TYPE=float3 -DGRAD_TYPE=float2 -DOFFSET_TYPE=int2 -verify %s
-
-// RWTexture3D
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
// RUN: -finclude-default-header -DHAS_TEXEL -DTEXTURE=RWTexture3D \
// RUN: -DCOORD_TYPE=float3 -DGRAD_TYPE=float3 -DOFFSET_TYPE=int3 -verify %s
-// Texture3D
-// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-library -x hlsl \
-// RUN: -finclude-default-header -DHAS_TEXEL -DHAS_SAMPLE -DHAS_LOD \
-// RUN: -DTEXTURE=Texture3D -DCOORD_TYPE=float3 -DOFFSET_TYPE=int3 \
-// RUN: -DGRAD_TYPE=float3 -verify %s
-
// Parameterized over the texture types in the RUN lines above; adding a texture
// of another dimension only requires new RUN lines.
//
More information about the llvm-branch-commits
mailing list