[llvm] [DirectX] Fix order of `v2::DescriptorRange` (PR #145555)

Justin Bogner via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 24 11:11:38 PDT 2025


================
@@ -107,35 +140,23 @@ DXContainerYAML::RootSignatureYamlDesc::create(
       }
     } else if (auto *DTV =
                    dyn_cast<object::DirectX::DescriptorTableView>(&ParamView)) {
-      llvm::Expected<object::DirectX::DescriptorTable> TableOrErr =
-          DTV->read(Version);
-      if (Error E = TableOrErr.takeError())
-        return std::move(E);
-      auto Table = *TableOrErr;
-      RootParameterLocationYaml Location(Header);
-      DescriptorTableYaml &TableYaml =
-          RootSigDesc.Parameters.getOrInsertTable(Location);
-      RootSigDesc.Parameters.insertLocation(Location);
-
-      TableYaml.NumRanges = Table.NumRanges;
-      TableYaml.RangesOffset = Table.RangesOffset;
-
-      for (const auto &R : Table) {
-        DescriptorRangeYaml NewR;
 
-        NewR.OffsetInDescriptorsFromTableStart =
-            R.OffsetInDescriptorsFromTableStart;
-        NewR.NumDescriptors = R.NumDescriptors;
-        NewR.BaseShaderRegister = R.BaseShaderRegister;
-        NewR.RegisterSpace = R.RegisterSpace;
-        NewR.RangeType = R.RangeType;
-        if (Version > 1) {
-#define DESCRIPTOR_RANGE_FLAG(Num, Val)                                        \
-  NewR.Val =                                                                   \
-      (R.Flags & llvm::to_underlying(dxbc::DescriptorRangeFlag::Val)) > 0;
-#include "llvm/BinaryFormat/DXContainerConstants.def"
-        }
-        TableYaml.Ranges.push_back(NewR);
+      if (Version == 1) {
+        llvm::Expected<
+            object::DirectX::DescriptorTable<dxbc::RTS0::v1::DescriptorRange>>
+            TableOrErr = DTV->read<dxbc::RTS0::v1::DescriptorRange>();
+        if (Error E = TableOrErr.takeError())
+          return std::move(E);
+        auto Table = *TableOrErr;
+        addDescriptorRanges(Header, RootSigDesc, Table);
----------------
bogner wrote:

It would simplify things a bit to move the call to `read` into the templated function. That is,
```c++
template <typename T>
static llvm::Error
readDescriptorRanges(DXContainerYAML::RootParameterHeaderYaml &Header,
                     DXContainerYAML::RootSignatureYamlDesc &RootSigDesc,
                     object::DirectX::DescriptorTableView *DTV) {
  llvm::Expected<object::DirectX::DescriptorTable<T>> Table = DTV->read<T>();
  if (Error E = Table.takeError())
    return std::move(E);
  // Use Table->NumRanges, Table->Ranges, etc.
  return Error::success();
```


https://github.com/llvm/llvm-project/pull/145555


More information about the llvm-commits mailing list