[llvm] [NFC] Refactoring MCDXBC to support out of order storage of root parameters (PR #137284)
via llvm-commits
llvm-commits at lists.llvm.org
Mon May 12 11:37:25 PDT 2025
================
@@ -9,18 +9,81 @@
#include "llvm/BinaryFormat/DXContainer.h"
#include <cstdint>
#include <limits>
+#include <variant>
namespace llvm {
class raw_ostream;
namespace mcdxbc {
-struct RootParameter {
+struct RootParameterInfo {
dxbc::RootParameterHeader Header;
- union {
- dxbc::RootConstants Constants;
- dxbc::RTS0::v2::RootDescriptor Descriptor;
- };
+ size_t Location;
+
+ RootParameterInfo() = default;
+
+ RootParameterInfo(dxbc::RootParameterHeader H, size_t L)
+ : Header(H), Location(L) {}
+};
+
+using RootDescriptor = std::variant<dxbc::RTS0::v1::RootDescriptor,
+ dxbc::RTS0::v2::RootDescriptor>;
+using ParametersView = std::variant<const dxbc::RootConstants *,
+ const dxbc::RTS0::v1::RootDescriptor *,
+ const dxbc::RTS0::v2::RootDescriptor *>;
+struct RootParametersContainer {
+ SmallVector<RootParameterInfo> ParametersInfo;
+
+ SmallVector<dxbc::RootConstants> Constants;
+ SmallVector<RootDescriptor> Descriptors;
+
+ void addInfo(dxbc::RootParameterHeader H, size_t L) {
+ ParametersInfo.push_back(RootParameterInfo(H, L));
+ }
+
+ void addParameter(dxbc::RootParameterHeader H, dxbc::RootConstants C) {
+ addInfo(H, Constants.size());
+ Constants.push_back(C);
+ }
+
+ void addParameter(dxbc::RootParameterHeader H,
+ dxbc::RTS0::v1::RootDescriptor D) {
+ addInfo(H, Descriptors.size());
+ Descriptors.push_back(D);
+ }
+
+ void addParameter(dxbc::RootParameterHeader H,
+ dxbc::RTS0::v2::RootDescriptor D) {
+ addInfo(H, Descriptors.size());
+ Descriptors.push_back(D);
+ }
+
+ std::optional<ParametersView> getParameter(const RootParameterInfo *H) const {
+ switch (H->Header.ParameterType) {
----------------
joaosaffran wrote:
Optional is necessary here, because yaml2obj needs to be able to write invalid root signatures representations, since we used it as a testing tool.
https://github.com/llvm/llvm-project/pull/137284
More information about the llvm-commits
mailing list