[llvm] [HLSLSemanticSignatures] Implement the stacked packing of elements (PR #218060)
Finn Plummer via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 10 11:54:05 PDT 2026
================
@@ -0,0 +1,63 @@
+//===- SemanticSignaturePacking.cpp - HLSL signature packing helpers -----===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file This file implements helpers for packing HLSL semantic signatures.
+///
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Frontend/HLSL/SemanticSignaturePacking.h"
+#include "llvm/ADT/STLExtras.h"
+#include <cassert>
+
+using namespace llvm;
+using namespace llvm::hlsl;
+
+char SignaturePackingError::ID;
+
+void SignaturePackingError::log(raw_ostream &OS) const {
+ switch (Kind) {
+ case SignatureOverflow:
+ OS << "signature elements do not fit in 32 rows";
+ break;
+ }
+ OS << " (element " << ElementIndex << ")";
+}
+
+Error llvm::hlsl::packSignatureStacked(
+ MutableArrayRef<SemanticSignatureElement> Elements,
+ Triple::EnvironmentType ShaderStage, IOType IOTy) {
+ unsigned NextRow = 0;
+ for (const auto &[Index, Element] : enumerate(Elements)) {
+ assert(Element.StartRow == UnallocatedRow &&
+ Element.StartCol == UnallocatedCol && "already allocated?");
+ assert(Element.Rows > 0 && "signature element must have at least one row");
+ assert(Element.Cols > 0 && Element.Cols <= MaxSignatureCols &&
+ "signature element must have between 1 and 4 columns");
+
+ SemanticInterpretation Interpretation =
+ getInterpretationKind(Element.SemanticKind, ShaderStage, IOTy);
+ if (Interpretation == SemanticInterpretation::NotAllocated)
+ continue;
----------------
inbelic wrote:
In a release sema should always catch an invalid semantic kind, updated the assert to make that more clear
https://github.com/llvm/llvm-project/pull/218060
More information about the llvm-commits
mailing list