[llvm] [DirectX] adding support to read/write descriptor table data using obj2yaml/yaml2obj (PR #138315)

Justin Bogner via llvm-commits llvm-commits at lists.llvm.org
Thu May 22 09:48:53 PDT 2025


================
@@ -295,16 +295,33 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
             Descriptor.Flags = Param.Descriptor.getEncodedFlags();
           RS.ParametersContainer.addParameter(Header, Descriptor);
           break;
+        case llvm::to_underlying(dxbc::RootParameterType::DescriptorTable): {
+          mcdxbc::DescriptorTable Table;
+          for (const auto &R : Param.Table.Ranges) {
+
+            dxbc::RTS0::v2::DescriptorRange Range;
+            Range.RangeType = R.RangeType;
+            Range.NumDescriptors = R.NumDescriptors;
+            Range.BaseShaderRegister = R.BaseShaderRegister;
+            Range.RegisterSpace = R.RegisterSpace;
+            Range.OffsetInDescriptorsFromTableStart =
+                R.OffsetInDescriptorsFromTableStart;
+            if (RS.Version > 1)
+              Range.Flags = R.getEncodedFlags();
+            Table.Ranges.push_back(Range);
+          }
+          RS.ParametersContainer.addParameter(Header, Table);
+        } break;
         default:
           // Handling invalid parameter type edge case. We intentionally let
           // obj2yaml/yaml2obj parse and emit invalid dxcontainer data, in order
           // for that to be used as a testing tool more effectively.
           RS.ParametersContainer.addInvalidParameter(Header);
+          break;
         }
       }
 
       RS.write(OS);
-      break;
----------------
bogner wrote:

Why remove this break? Isn't this the break for the outer `switch (PT)`?

Aside: as a follow up we should really consider breaking this function up into smaller parts - it's getting very hard to follow.

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


More information about the llvm-commits mailing list