Skip to content

Commit

Permalink
[mlir][spirv] Support for a few more decorations in (de)serialization
Browse files Browse the repository at this point in the history
Reviewed By: mravishankar

Differential Revision: https://reviews.llvm.org/D90655
  • Loading branch information
antiagainst committed Nov 3, 2020
1 parent 9af561e commit d5bf727
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 6 deletions.
4 changes: 4 additions & 0 deletions mlir/lib/Dialect/SPIRV/Serialization/Deserializer.cpp
Expand Up @@ -780,10 +780,14 @@ LogicalResult Deserializer::processDecoration(ArrayRef<uint32_t> words) {
}
typeDecorations[words[0]] = words[2];
break;
case spirv::Decoration::Aliased:
case spirv::Decoration::Block:
case spirv::Decoration::BufferBlock:
case spirv::Decoration::Flat:
case spirv::Decoration::NonReadable:
case spirv::Decoration::NonWritable:
case spirv::Decoration::NoPerspective:
case spirv::Decoration::Restrict:
if (words.size() != 2) {
return emitError(unknownLoc, "OpDecoration with ")
<< decorationName << "needs a single target <id>";
Expand Down
9 changes: 6 additions & 3 deletions mlir/lib/Dialect/SPIRV/Serialization/Serializer.cpp
Expand Up @@ -751,12 +751,15 @@ LogicalResult Serializer::processDecoration(Location loc, uint32_t resultID,
<< attrName << " attribute " << strAttr.getValue();
}
return emitError(loc, "expected string attribute for ") << attrName;
case spirv::Decoration::Aliased:
case spirv::Decoration::Flat:
case spirv::Decoration::NonReadable:
case spirv::Decoration::NonWritable:
case spirv::Decoration::NoPerspective:
if (auto unitAttr = attr.second.dyn_cast<UnitAttr>()) {
// For unit attributes, the args list has no values so we do nothing
case spirv::Decoration::Restrict:
// For unit attributes, the args list has no values so we do nothing
if (auto unitAttr = attr.second.dyn_cast<UnitAttr>())
break;
}
return emitError(loc, "expected unit attribute for ") << attrName;
default:
return emitError(loc, "unhandled decoration ") << decorationName;
Expand Down
36 changes: 33 additions & 3 deletions mlir/test/Dialect/SPIRV/Serialization/decorations.mlir
Expand Up @@ -2,20 +2,50 @@

spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
// CHECK: location = 0 : i32
spv.globalVariable @var1 {location = 0 : i32} : !spv.ptr<vector<4xf32>, Input>
spv.globalVariable @var {location = 0 : i32} : !spv.ptr<vector<4xf32>, Input>
}

// -----

spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
// CHECK: no_perspective
spv.globalVariable @var1 {no_perspective} : !spv.ptr<vector<4xf32>, Input>
spv.globalVariable @var {no_perspective} : !spv.ptr<vector<4xf32>, Input>
}

// -----

spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
// CHECK: flat
spv.globalVariable @var2 {flat} : !spv.ptr<si32, Input>
spv.globalVariable @var {flat} : !spv.ptr<si32, Input>
}

// -----

spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
// CHECK: aliased
// CHECK: aliased
spv.globalVariable @var1 bind(0, 0) {aliased} : !spv.ptr<!spv.struct<(!spv.array<4xf32, stride=4>[0])>, StorageBuffer>
spv.globalVariable @var2 bind(0, 0) {aliased} : !spv.ptr<!spv.struct<(vector<4xf32>[0])>, StorageBuffer>
}

// -----

spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
// CHECK: non_readable
spv.globalVariable @var bind(0, 0) {non_readable} : !spv.ptr<!spv.struct<(!spv.array<4xf32, stride=4>[0])>, StorageBuffer>
}

// -----

spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
// CHECK: non_writable
spv.globalVariable @var bind(0, 0) {non_writable} : !spv.ptr<!spv.struct<(!spv.array<4xf32, stride=4>[0])>, StorageBuffer>
}

// -----

spv.module Logical GLSL450 requires #spv.vce<v1.0, [Shader], []> {
// CHECK: restrict
spv.globalVariable @var bind(0, 0) {restrict} : !spv.ptr<!spv.struct<(!spv.array<4xf32, stride=4>[0])>, StorageBuffer>
}

0 comments on commit d5bf727

Please sign in to comment.