[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);
+ } else {
----------------
bogner wrote:
Might be better to explicitly not handle versions other than 1 or 2 so that if we add versions in the future and forget to update this it's very obvious. At this point we've validated that the version is something we expect, right? In that case, we can just throw an unreachable here.
```c++
if (Version == 1) {
if (Error E = readDescriptorRanges<dxbc::RTS0::v1::DescriptorRange>(
Header, RootSigDesc, DTV))
return std::move(E);
} else if (Version == 2) {
if (Error E = readDescriptorRanges<dxbc::RTS0::v2::DescriptorRange>(
Header, RootSigDesc, DTV))
return std::move(E);
} else
llvm_unreachable("Unknown version for DescriptorRanges");
```
https://github.com/llvm/llvm-project/pull/145555
More information about the llvm-commits
mailing list