Skip to content

Commit e0d3dcd

Browse files
author
joaosaffran
committed
addressing comments
1 parent 557075f commit e0d3dcd

File tree

7 files changed

+85
-237
lines changed

7 files changed

+85
-237
lines changed

llvm/include/llvm/BinaryFormat/DXContainer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,11 @@ enum class FeatureFlags : uint64_t {
161161
static_assert((uint64_t)FeatureFlags::NextUnusedBit <= 1ull << 63,
162162
"Shader flag bits exceed enum size.");
163163

164+
#define ROOT_ELEMENT_FLAG(Num, Val) Val = 1ull << Num,
165+
enum class RootElementFlag : uint32_t {
166+
#include "DXContainerConstants.def"
167+
};
168+
164169
PartType parsePartType(StringRef S);
165170

166171
struct VertexPSVInfo {

llvm/include/llvm/BinaryFormat/DXContainerConstants.def

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,25 @@ SHADER_FEATURE_FLAG(31, 36, NextUnusedBit, "Next reserved shader flag bit (not a
5353
#undef SHADER_FEATURE_FLAG
5454
#endif // SHADER_FEATURE_FLAG
5555

56+
#ifdef ROOT_ELEMENT_FLAG
57+
58+
59+
ROOT_ELEMENT_FLAG(0, AllowInputAssemblerInputLayout)
60+
ROOT_ELEMENT_FLAG(1, DenyVertexShaderRootAccess)
61+
ROOT_ELEMENT_FLAG(2, DenyHullShaderRootAccess)
62+
ROOT_ELEMENT_FLAG(3, DenyDomainShaderRootAccess)
63+
ROOT_ELEMENT_FLAG(4, DenyGeometryShaderRootAccess)
64+
ROOT_ELEMENT_FLAG(5, DenyPixelShaderRootAccess)
65+
ROOT_ELEMENT_FLAG(6, AllowStreamOutput)
66+
ROOT_ELEMENT_FLAG(7, LocalRootSignature)
67+
ROOT_ELEMENT_FLAG(8, DenyAmplificationShaderRootAccess)
68+
ROOT_ELEMENT_FLAG(9, DenyMeshShaderRootAccess)
69+
ROOT_ELEMENT_FLAG(10, CBVSRVUAVHeapDirectlyIndexed)
70+
ROOT_ELEMENT_FLAG(11, SamplerHeapDirectlyIndexed)
71+
#undef ROOT_ELEMENT_FLAG
72+
#endif // ROOT_ELEMENT_FLAG
73+
74+
5675
#ifdef DXIL_MODULE_FLAG
5776

5877
// Only save DXIL module flags which not map to feature flags here.

llvm/include/llvm/ObjectYAML/DXContainerYAML.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,14 @@ struct ShaderHash {
7373
};
7474

7575

76-
76+
#define ROOT_ELEMENT_FLAG(Num, Val) bool Val = false;
7777
struct RootSignatureDesc {
7878
RootSignatureDesc() = default;
7979
RootSignatureDesc(const dxbc::RootSignatureDesc &Data);
8080

81+
uint32_t getEncodedFlags();
8182
uint32_t Version;
82-
uint32_t Flags;
83+
#include "llvm/BinaryFormat/DXContainerConstants.def"
8384
};
8485

8586
using ResourceFlags = dxbc::PSV::ResourceFlags;

llvm/lib/Object/DXContainer.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include "llvm/Object/DXContainer.h"
1010
#include "llvm/BinaryFormat/DXContainer.h"
11+
#include "llvm/MC/DXContainerRootSignature.h"
1112
#include "llvm/Object/Error.h"
1213
#include "llvm/Support/Alignment.h"
1314
#include "llvm/Support/FormatVariadic.h"
@@ -93,6 +94,8 @@ Error DXContainer::parseHash(StringRef Part) {
9394
}
9495

9596
Error DXContainer::parseRootSignature(StringRef Part) {
97+
if (RootSignature)
98+
return parseFailed("More than one RTS0 part is present in the file");
9699
dxbc::RootSignatureDesc Desc;
97100
if (Error Err = readStruct(Part, Part.begin(), Desc))
98101
return Err;

llvm/lib/ObjectYAML/DXContainerEmitter.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,10 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
264264
case dxbc::PartType::RTS0:
265265
if (!P.RootSignature.has_value())
266266
continue;
267-
dxbc::RootSignatureDesc RS = {P.RootSignature->Version, P.RootSignature->Flags};
267+
uint32_t Flags = P.RootSignature->getEncodedFlags();
268+
if (sys::IsBigEndianHost)
269+
sys::swapByteOrder(Flags);
270+
dxbc::RootSignatureDesc RS = {P.RootSignature->Version, Flags};
268271
if (sys::IsBigEndianHost)
269272
RS.swapBytes();
270273
OS.write(reinterpret_cast<char *>(&RS), sizeof(dxbc::RootSignatureDesc));

llvm/lib/ObjectYAML/DXContainerYAML.cpp

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "llvm/ADT/ScopeExit.h"
1616
#include "llvm/BinaryFormat/DXContainer.h"
1717
#include "llvm/Support/ScopedPrinter.h"
18+
#include <cstdint>
1819

1920
namespace llvm {
2021

@@ -29,6 +30,23 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) {
2930
#include "llvm/BinaryFormat/DXContainerConstants.def"
3031
}
3132

33+
34+
DXContainerYAML::RootSignatureDesc::RootSignatureDesc(const dxbc::RootSignatureDesc &Data): Version(Data.Version) {
35+
#define ROOT_ELEMENT_FLAG(Num, Val) \
36+
Val = (Data.Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0;
37+
#include "llvm/BinaryFormat/DXContainerConstants.def"
38+
}
39+
40+
41+
uint32_t DXContainerYAML::RootSignatureDesc::getEncodedFlags() {
42+
uint64_t Flag = 0;
43+
#define ROOT_ELEMENT_FLAG(Num, Val) \
44+
if (Val) \
45+
Flag |= (uint32_t)dxbc::RootElementFlag::Val;
46+
#include "llvm/BinaryFormat/DXContainerConstants.def"
47+
return Flag;
48+
}
49+
3250
uint64_t DXContainerYAML::ShaderFeatureFlags::getEncodedFlags() {
3351
uint64_t Flag = 0;
3452
#define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str) \
@@ -45,10 +63,6 @@ DXContainerYAML::ShaderHash::ShaderHash(const dxbc::ShaderHash &Data)
4563
memcpy(Digest.data(), &Data.Digest[0], 16);
4664
}
4765

48-
DXContainerYAML::RootSignatureDesc::RootSignatureDesc(const dxbc::RootSignatureDesc &Data)
49-
: Version(Data.Version), Flags(Data.Flags) {
50-
}
51-
5266
DXContainerYAML::PSVInfo::PSVInfo() : Version(0) {
5367
memset(&Info, 0, sizeof(Info));
5468
}
@@ -195,7 +209,9 @@ void MappingTraits<DXContainerYAML::Signature>::mapping(
195209
void MappingTraits<DXContainerYAML::RootSignatureDesc>::mapping(
196210
IO &IO, DXContainerYAML::RootSignatureDesc &S) {
197211
IO.mapRequired("Version", S.Version);
198-
IO.mapRequired("Flags", S.Flags);
212+
#define ROOT_ELEMENT_FLAG(Num, Val) \
213+
IO.mapRequired(#Val, S.Val);
214+
#include "llvm/BinaryFormat/DXContainerConstants.def"
199215
}
200216

201217
void MappingTraits<DXContainerYAML::Part>::mapping(IO &IO,

0 commit comments

Comments
 (0)