Skip to content

Commit 42145c7

Browse files
committed
[HLSL][SPIR-V] Add capability for non-uniform indexing for types.
1 parent 3f9e712 commit 42145c7

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,6 +1200,18 @@ void addOpAccessChainReqs(const MachineInstr &Instr,
12001200
return;
12011201
}
12021202

1203+
bool IsNonUniform =
1204+
hasNonUniformDecoration(Instr.getOperand(0).getReg(), MRI);
1205+
if (StorageClass == SPIRV::StorageClass::StorageClass::StorageBuffer) {
1206+
if (IsNonUniform)
1207+
Handler.addRequirements(
1208+
SPIRV::Capability::StorageBufferArrayNonUniformIndexingEXT);
1209+
else
1210+
Handler.addRequirements(
1211+
SPIRV::Capability::StorageBufferArrayDynamicIndexing);
1212+
return;
1213+
}
1214+
12031215
Register PointeeTypeReg = ResTypeInst->getOperand(2).getReg();
12041216
MachineInstr *PointeeType = MRI.getUniqueVRegDef(PointeeTypeReg);
12051217
if (PointeeType->getOpcode() != SPIRV::OpTypeImage &&
@@ -1208,8 +1220,6 @@ void addOpAccessChainReqs(const MachineInstr &Instr,
12081220
return;
12091221
}
12101222

1211-
bool IsNonUniform =
1212-
hasNonUniformDecoration(Instr.getOperand(0).getReg(), MRI);
12131223
if (isUniformTexelBuffer(PointeeType)) {
12141224
if (IsNonUniform)
12151225
Handler.addRequirements(

llvm/test/CodeGen/SPIRV/hlsl-resources/NonUniformIdx/RWStructuredBufferNonUniformIdx.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
; CHECK-DAG: OpCapability Shader
55
; CHECK-DAG: OpCapability ShaderNonUniformEXT
6+
; CHECK-DAG: OpCapability StorageBufferArrayNonUniformIndexingEXT
67
; CHECK-DAG: OpDecorate {{%[0-9]+}} NonUniformEXT
78
; CHECK-DAG: OpDecorate {{%[0-9]+}} NonUniformEXT
89
; CHECK-DAG: OpDecorate {{%[0-9]+}} NonUniformEXT

0 commit comments

Comments
 (0)