Skip to content

Commit 2203885

Browse files
author
joaosaffran
committed
Merge branch 'obj2yaml/root-constants' into metadata/root-constants
2 parents a968d81 + bb6c0cf commit 2203885

File tree

12 files changed

+147
-34
lines changed

12 files changed

+147
-34
lines changed

llvm/include/llvm/BinaryFormat/DXContainer.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ enum class RootElementFlag : uint32_t {
159159
};
160160

161161
#define ROOT_PARAMETER(Val, Enum) Enum = Val,
162-
enum RootParameterType : uint32_t {
162+
enum class RootParameterType : uint32_t {
163163
#include "DXContainerConstants.def"
164164
};
165165

@@ -176,7 +176,7 @@ inline bool isValidParameterType(uint32_t V) {
176176
}
177177

178178
#define SHADER_VISIBILITY(Val, Enum) Enum = Val,
179-
enum ShaderVisibility : uint32_t {
179+
enum class ShaderVisibility : uint32_t {
180180
#include "DXContainerConstants.def"
181181
};
182182

llvm/include/llvm/MC/DXContainerRootSignature.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ struct RootSignatureDesc {
2525

2626
uint32_t Version = 2U;
2727
uint32_t Flags = 0U;
28+
uint32_t RootParameterOffset = 0U;
29+
uint32_t StaticSamplersOffset = 0u;
30+
uint32_t NumStaticSamplers = 0u;
2831
SmallVector<mcdxbc::RootParameter> Parameters;
2932

3033
void write(raw_ostream &OS) const;

llvm/include/llvm/Object/DXContainer.h

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "llvm/Support/MemoryBufferRef.h"
2424
#include "llvm/TargetParser/Triple.h"
2525
#include <array>
26+
#include <cstddef>
2627
#include <variant>
2728

2829
namespace llvm {
@@ -139,7 +140,8 @@ struct RootParameterView {
139140

140141
struct RootConstantView : RootParameterView {
141142
static bool classof(const RootParameterView *V) {
142-
return V->Header.ParameterType == dxbc::RootParameterType::Constants32Bit;
143+
return V->Header.ParameterType ==
144+
(uint32_t)dxbc::RootParameterType::Constants32Bit;
143145
}
144146

145147
llvm::Expected<dxbc::RootConstants> read() {
@@ -183,14 +185,17 @@ class RootSignature {
183185
getParameter(const dxbc::RootParameterHeader &Header) const {
184186
size_t DataSize;
185187

186-
switch (Header.ParameterType) {
188+
if (!dxbc::isValidParameterType(Header.ParameterType))
189+
return parseFailed("invalid parameter type");
190+
191+
switch (static_cast<dxbc::RootParameterType>(Header.ParameterType)) {
187192
case dxbc::RootParameterType::Constants32Bit:
188193
DataSize = sizeof(dxbc::RootConstants);
189194
break;
190195
}
191-
auto EndOfSectionByte = getNumStaticSamplers() == 0
192-
? PartData.size()
193-
: getStaticSamplersOffset();
196+
size_t EndOfSectionByte = getNumStaticSamplers() == 0
197+
? PartData.size()
198+
: getStaticSamplersOffset();
194199

195200
if (Header.ParameterOffset + DataSize > EndOfSectionByte)
196201
return parseFailed("Reading structure out of file bounds");

llvm/lib/MC/DXContainerRootSignature.cpp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ size_t RootSignatureDesc::getSize() const {
3232
size_t Size = sizeof(dxbc::RootSignatureHeader) +
3333
Parameters.size() * sizeof(dxbc::RootParameterHeader);
3434

35-
for (const auto &P : Parameters) {
35+
for (const mcdxbc::RootParameter &P : Parameters) {
3636
switch (P.Header.ParameterType) {
37-
case dxbc::RootParameterType::Constants32Bit:
37+
case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit):
3838
Size += sizeof(dxbc::RootConstants);
3939
break;
4040
}
@@ -48,19 +48,16 @@ void RootSignatureDesc::write(raw_ostream &OS) const {
4848
BOS.reserveExtraSpace(getSize());
4949

5050
const uint32_t NumParameters = Parameters.size();
51-
const uint32_t StaticSamplerOffset = 0u;
52-
const uint32_t NumStaticSamplers = 0u;
5351

5452
support::endian::write(BOS, Version, llvm::endianness::little);
5553
support::endian::write(BOS, NumParameters, llvm::endianness::little);
56-
support::endian::write(BOS, (uint32_t)sizeof(dxbc::RootSignatureHeader),
57-
llvm::endianness::little);
58-
support::endian::write(BOS, StaticSamplerOffset, llvm::endianness::little);
54+
support::endian::write(BOS, RootParameterOffset, llvm::endianness::little);
5955
support::endian::write(BOS, NumStaticSamplers, llvm::endianness::little);
56+
support::endian::write(BOS, StaticSamplersOffset, llvm::endianness::little);
6057
support::endian::write(BOS, Flags, llvm::endianness::little);
6158

6259
SmallVector<uint32_t> ParamsOffsets;
63-
for (const auto &P : Parameters) {
60+
for (const mcdxbc::RootParameter &P : Parameters) {
6461
support::endian::write(BOS, P.Header.ParameterType,
6562
llvm::endianness::little);
6663
support::endian::write(BOS, P.Header.ShaderVisibility,
@@ -72,10 +69,10 @@ void RootSignatureDesc::write(raw_ostream &OS) const {
7269
assert(NumParameters == ParamsOffsets.size());
7370
for (size_t I = 0; I < NumParameters; ++I) {
7471
rewriteOffsetToCurrentByte(BOS, ParamsOffsets[I]);
75-
const auto &P = Parameters[I];
72+
const mcdxbc::RootParameter &P = Parameters[I];
7673

7774
switch (P.Header.ParameterType) {
78-
case dxbc::RootParameterType::Constants32Bit:
75+
case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit):
7976
support::endian::write(BOS, P.Constants.ShaderRegister,
8077
llvm::endianness::little);
8178
support::endian::write(BOS, P.Constants.RegisterSpace,

llvm/lib/Object/DXContainer.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,6 @@ Error DirectX::RootSignature::parse() {
272272
Flags = support::endian::read<uint32_t, llvm::endianness::little>(Current);
273273
Current += sizeof(uint32_t);
274274

275-
assert(Current == PartData.begin() + RootParametersOffset);
276-
277275
ParametersHeaders.Data = PartData.substr(
278276
RootParametersOffset, NumParameters * sizeof(dxbc::RootParameterHeader));
279277

llvm/lib/ObjectYAML/DXContainerEmitter.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,14 +269,17 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
269269
mcdxbc::RootSignatureDesc RS;
270270
RS.Flags = P.RootSignature->getEncodedFlags();
271271
RS.Version = P.RootSignature->Version;
272+
RS.RootParameterOffset = P.RootSignature->RootParametersOffset;
273+
RS.NumStaticSamplers = P.RootSignature->NumStaticSamplers;
274+
RS.StaticSamplersOffset = P.RootSignature->StaticSamplersOffset;
275+
272276
for (const auto &Param : P.RootSignature->Parameters) {
273277
mcdxbc::RootParameter NewParam;
274278
NewParam.Header = dxbc::RootParameterHeader{
275279
Param.Type, Param.Visibility, Param.Offset};
276280

277281
switch (Param.Type) {
278-
279-
case dxbc::RootParameterType::Constants32Bit:
282+
case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit):
280283
NewParam.Constants.Num32BitValues = Param.Constants.Num32BitValues;
281284
NewParam.Constants.RegisterSpace = Param.Constants.RegisterSpace;
282285
NewParam.Constants.ShaderRegister = Param.Constants.ShaderRegister;

llvm/lib/ObjectYAML/DXContainerYAML.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@
1212
//===----------------------------------------------------------------------===//
1313

1414
#include "llvm/ObjectYAML/DXContainerYAML.h"
15+
#include "llvm/ADT/STLForwardCompat.h"
1516
#include "llvm/ADT/ScopeExit.h"
1617
#include "llvm/BinaryFormat/DXContainer.h"
1718
#include "llvm/Support/Error.h"
1819
#include "llvm/Support/ScopedPrinter.h"
20+
#include <cstdint>
1921
#include <system_error>
2022

2123
namespace llvm {
@@ -44,7 +46,7 @@ DXContainerYAML::RootSignatureYamlDesc::create(
4446
RootSigDesc.RootParametersOffset = Data.getRootParametersOffset();
4547

4648
uint32_t Flags = Data.getFlags();
47-
for (const auto &PH : Data.param_headers()) {
49+
for (const dxbc::RootParameterHeader &PH : Data.param_headers()) {
4850

4951
RootParameterYamlDesc NewP;
5052
NewP.Offset = PH.ParameterOffset;
@@ -83,7 +85,8 @@ DXContainerYAML::RootSignatureYamlDesc::create(
8385
RootSigDesc.Parameters.push_back(NewP);
8486
}
8587
#define ROOT_ELEMENT_FLAG(Num, Val) \
86-
RootSigDesc.Val = (Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0;
88+
RootSigDesc.Val = \
89+
(Flags & llvm::to_underlying(dxbc::RootElementFlag::Val)) > 0;
8790
#include "llvm/BinaryFormat/DXContainerConstants.def"
8891
return RootSigDesc;
8992
}
@@ -279,8 +282,9 @@ void MappingTraits<llvm::DXContainerYAML::RootParameterYamlDesc>::mapping(
279282
IO &IO, llvm::DXContainerYAML::RootParameterYamlDesc &P) {
280283
IO.mapRequired("ParameterType", P.Type);
281284
IO.mapRequired("ShaderVisibility", P.Visibility);
285+
282286
switch (P.Type) {
283-
case dxbc::RootParameterType::Constants32Bit:
287+
case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit):
284288
IO.mapRequired("Constants", P.Constants);
285289
break;
286290
}

llvm/test/CodeGen/DirectX/ContainerData/RootSignature-Flags.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" }
2323
; DXC-NEXT: RootSignature:
2424
; DXC-NEXT: Version: 2
2525
; DXC-NEXT: NumRootParameters: 0
26-
; DXC-NEXT: RootParametersOffset: 24
26+
; DXC-NEXT: RootParametersOffset: 0
2727
; DXC-NEXT: NumStaticSamplers: 0
2828
; DXC-NEXT: StaticSamplersOffset: 0
2929
; DXC-NEXT: Parameters: []

llvm/test/ObjectYAML/DXContainer/RootSignature-Flags.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ Parts:
1616
Version: 2
1717
NumRootParameters: 0
1818
RootParametersOffset: 24
19-
NumStaticSamplers: 4
20-
StaticSamplersOffset: 5
19+
NumStaticSamplers: 0
20+
StaticSamplersOffset: 60
2121
Parameters: []
2222
AllowInputAssemblerInputLayout: true
2323
DenyGeometryShaderRootAccess: true
@@ -29,7 +29,7 @@ Parts:
2929
# CHECK-NEXT: NumRootParameters: 0
3030
# CHECK-NEXT: RootParametersOffset: 24
3131
# CHECK-NEXT: NumStaticSamplers: 0
32-
# CHECK-NEXT: StaticSamplersOffset: 0
32+
# CHECK-NEXT: StaticSamplersOffset: 60
3333
# CHECK-NEXT: Parameters: []
3434
# CHECK-NEXT: AllowInputAssemblerInputLayout: true
3535
# CHECK-NEXT: DenyGeometryShaderRootAccess: true

llvm/test/ObjectYAML/DXContainer/RootSignature-MultipleParameters.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Parts:
1717
NumRootParameters: 2
1818
RootParametersOffset: 24
1919
NumStaticSamplers: 0
20-
StaticSamplersOffset: 64
20+
StaticSamplersOffset: 60
2121
Parameters:
2222
- ParameterType: 1 # Constants32Bit
2323
ShaderVisibility: 2 # Hull
@@ -41,7 +41,7 @@ Parts:
4141
# CHECK-NEXT: NumRootParameters: 2
4242
# CHECK-NEXT: RootParametersOffset: 24
4343
# CHECK-NEXT: NumStaticSamplers: 0
44-
# CHECK-NEXT: StaticSamplersOffset: 0
44+
# CHECK-NEXT: StaticSamplersOffset: 60
4545
# CHECK-NEXT: Parameters:
4646
# CHECK-NEXT: - ParameterType: 1
4747
# CHECK-NEXT: ShaderVisibility: 2

0 commit comments

Comments
 (0)