[Mlir-commits] [mlir] [mlir][SPIR-V] Serialize BufferBlock struct decoration (PR #202870)
Arseniy Obolenskiy
llvmlistbot at llvm.org
Wed Jun 10 00:02:19 PDT 2026
https://github.com/aobolensk created https://github.com/llvm/llvm-project/pull/202870
Add BufferBlock to the no-operand decoration switch
>From 2d71c01385579f8588b231d01026d2b5692b989f Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Wed, 10 Jun 2026 08:59:41 +0200
Subject: [PATCH] [mlir][SPIR-V] Serialize BufferBlock struct decoration
Add BufferBlock to the no-operand decoration switch
---
mlir/lib/Target/SPIRV/Serialization/Serializer.cpp | 4 +++-
mlir/test/Target/SPIRV/struct.mlir | 3 +++
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp b/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp
index 136a7f27a6e1d..455e4af1a5e80 100644
--- a/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp
+++ b/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp
@@ -418,6 +418,7 @@ LogicalResult Serializer::processDecorationAttr(Location loc, uint32_t resultID,
case spirv::Decoration::NoContraction:
case spirv::Decoration::Constant:
case spirv::Decoration::Block:
+ case spirv::Decoration::BufferBlock:
case spirv::Decoration::Invariant:
case spirv::Decoration::Patch:
case spirv::Decoration::Coherent:
@@ -771,7 +772,8 @@ LogicalResult Serializer::prepareBasicType(
// Ideally, Block decorations should be inserted when converting to SPIR-V.
if (isInterfaceStructPtrType(ptrType)) {
auto structType = cast<spirv::StructType>(ptrType.getPointeeType());
- if (!structType.hasDecoration(spirv::Decoration::Block))
+ if (!structType.hasDecoration(spirv::Decoration::Block) &&
+ !structType.hasDecoration(spirv::Decoration::BufferBlock))
if (failed(emitDecoration(getTypeID(pointeeStruct),
spirv::Decoration::Block)))
return emitError(loc, "cannot decorate ")
diff --git a/mlir/test/Target/SPIRV/struct.mlir b/mlir/test/Target/SPIRV/struct.mlir
index 36a73cd38461f..bd039ff565588 100644
--- a/mlir/test/Target/SPIRV/struct.mlir
+++ b/mlir/test/Target/SPIRV/struct.mlir
@@ -18,6 +18,9 @@ spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, Addresses, Float
// CHECK: !spirv.ptr<!spirv.struct<(!spirv.array<128 x !spirv.struct<(!spirv.array<128 x f32, stride=4> [0])>, stride=512> [0]), Block>, StorageBuffer>
spirv.GlobalVariable @var3 : !spirv.ptr<!spirv.struct<(!spirv.array<128 x !spirv.struct<(!spirv.array<128 x f32, stride=4> [0])>, stride=512> [0]), Block>, StorageBuffer>
+ // CHECK: !spirv.ptr<!spirv.struct<(!spirv.array<128 x f32, stride=4> [0]), BufferBlock>, Uniform>
+ spirv.GlobalVariable @var_buffer_block : !spirv.ptr<!spirv.struct<(!spirv.array<128 x f32, stride=4> [0]), BufferBlock>, Uniform>
+
// CHECK: !spirv.ptr<!spirv.struct<(f32 [0, NonWritable], i32 [4]), Block>, StorageBuffer>
spirv.GlobalVariable @var4 : !spirv.ptr<!spirv.struct<(f32 [0, NonWritable], i32 [4]), Block>, StorageBuffer>
More information about the Mlir-commits
mailing list