diff --git a/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp b/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp index 50883d9ed5e75..7724c8d49ece7 100644 --- a/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp +++ b/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp @@ -355,6 +355,7 @@ LogicalResult spirv::Deserializer::processDecoration(ArrayRef words) { break; case spirv::Decoration::Location: case spirv::Decoration::SpecId: + case spirv::Decoration::Index: if (words.size() != 3) { return emitError(unknownLoc, "OpDecoration with ") << decorationName << "needs a single integer literal"; diff --git a/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp b/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp index c879a2b3e0207..9ac1e5438e70b 100644 --- a/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp +++ b/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp @@ -338,6 +338,7 @@ LogicalResult Serializer::processDecorationAttr(Location loc, uint32_t resultID, case spirv::Decoration::Binding: case spirv::Decoration::DescriptorSet: case spirv::Decoration::Location: + case spirv::Decoration::Index: if (auto intAttr = dyn_cast(attr)) { args.push_back(intAttr.getValue().getZExtValue()); break; diff --git a/mlir/test/Target/SPIRV/decorations.mlir b/mlir/test/Target/SPIRV/decorations.mlir index 29b5d4fd5c743..f64d113ebba9d 100644 --- a/mlir/test/Target/SPIRV/decorations.mlir +++ b/mlir/test/Target/SPIRV/decorations.mlir @@ -84,6 +84,13 @@ spirv.module Logical GLSL450 requires #spirv.vce { // ----- +spirv.module Logical GLSL450 requires #spirv.vce { + // CHECK: index = 42 + spirv.GlobalVariable @var {index = 42 : i32} : !spirv.ptr, Output> +} + +// ----- + spirv.module Logical GLSL450 requires #spirv.vce { // CHECK: linkage_attributes = #spirv.linkage_attributes> spirv.GlobalVariable @var1 {