[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