[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