Skip to content

Commit f93d42d

Browse files
author
joaosaffran
committed
addressing test concerns
1 parent e3206c9 commit f93d42d

File tree

10 files changed

+129
-222
lines changed

10 files changed

+129
-222
lines changed

llvm/include/llvm/MC/DXContainerRootSignature.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@ class raw_ostream;
1515

1616
namespace mcdxbc {
1717
struct RootSignatureHeader {
18-
uint32_t Flags;
18+
uint32_t Version = 2;
19+
uint32_t NumParameters = 0;
20+
uint32_t RootParametersOffset = 0;
21+
uint32_t NumStaticSamplers = 0;
22+
uint32_t StaticSamplersOffset = 0;
23+
uint32_t Flags = 0;
1924

20-
void swapBytes();
2125
void write(raw_ostream &OS);
2226
};
2327
} // namespace mcdxbc

llvm/include/llvm/Object/DXContainer.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,16 +120,22 @@ namespace DirectX {
120120
class RootSignature {
121121
private:
122122
StringRef Data;
123-
uint32_t Size;
123+
uint32_t Version;
124+
uint32_t NumParameters;
125+
uint32_t RootParametersOffset;
126+
uint32_t NumStaticSamplers;
127+
uint32_t StaticSamplersOffset;
124128
uint32_t Flags;
125129

126130
public:
127131
RootSignature(StringRef Data) : Data(Data) {}
128132

129133
Error parse();
130-
131-
uint32_t getSize() const { return Size; }
132-
134+
uint32_t getVersion() const { return Version; }
135+
uint32_t getNumParameters() const { return NumParameters; }
136+
uint32_t getRootParametersOffset() const { return RootParametersOffset; }
137+
uint32_t getNumStaticSamplers() const { return NumStaticSamplers; }
138+
uint32_t getStaticSamplersOffset() const { return StaticSamplersOffset; }
133139
uint32_t getFlags() const { return Flags; }
134140
};
135141

llvm/include/llvm/ObjectYAML/DXContainerYAML.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,11 @@ struct RootSignatureDesc {
7979
RootSignatureDesc(const object::DirectX::RootSignature &Data);
8080

8181
uint32_t getEncodedFlags();
82-
uint32_t Size;
82+
uint32_t Version;
83+
uint32_t NumParameters;
84+
uint32_t RootParametersOffset;
85+
uint32_t NumStaticSamplers;
86+
uint32_t StaticSamplersOffset;
8387

8488
#include "llvm/BinaryFormat/DXContainerConstants.def"
8589
};

llvm/lib/MC/DXContainerRootSignature.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,16 @@
88

99
#include "llvm/MC/DXContainerRootSignature.h"
1010
#include "llvm/Support/EndianStream.h"
11-
#include "llvm/Support/SwapByteOrder.h"
12-
#include <iterator>
1311

1412
using namespace llvm;
1513
using namespace llvm::mcdxbc;
1614

1715
void RootSignatureHeader::write(raw_ostream &OS) {
1816

19-
uint32_t SizeInfo = sizeof(this);
20-
support::endian::write(OS, SizeInfo, llvm::endianness::little);
17+
support::endian::write(OS, Version, llvm::endianness::little);
18+
support::endian::write(OS, NumParameters, llvm::endianness::little);
19+
support::endian::write(OS, RootParametersOffset, llvm::endianness::little);
20+
support::endian::write(OS, NumStaticSamplers, llvm::endianness::little);
21+
support::endian::write(OS, StaticSamplersOffset, llvm::endianness::little);
2122
support::endian::write(OS, Flags, llvm::endianness::little);
2223
}

llvm/lib/Object/DXContainer.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,23 @@ void DXContainer::PartIterator::updateIteratorImpl(const uint32_t Offset) {
245245
Error DirectX::RootSignature::parse() {
246246
const char *Current = Data.begin();
247247

248-
Size = support::endian::read<uint32_t, llvm::endianness::little>(Current);
248+
Version = support::endian::read<uint32_t, llvm::endianness::little>(Current);
249+
Current += sizeof(uint32_t);
250+
251+
NumParameters =
252+
support::endian::read<uint32_t, llvm::endianness::little>(Current);
253+
Current += sizeof(uint32_t);
254+
255+
RootParametersOffset =
256+
support::endian::read<uint32_t, llvm::endianness::little>(Current);
257+
Current += sizeof(uint32_t);
258+
259+
NumStaticSamplers =
260+
support::endian::read<uint32_t, llvm::endianness::little>(Current);
261+
Current += sizeof(uint32_t);
262+
263+
StaticSamplersOffset =
264+
support::endian::read<uint32_t, llvm::endianness::little>(Current);
249265
Current += sizeof(uint32_t);
250266

251267
Flags = support::endian::read<uint32_t, llvm::endianness::little>(Current);

llvm/lib/ObjectYAML/DXContainerYAML.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) {
3232

3333
DXContainerYAML::RootSignatureDesc::RootSignatureDesc(
3434
const object::DirectX::RootSignature &Data)
35-
: Size(Data.getSize()) {
35+
: Version(Data.getVersion()), NumParameters(Data.getNumParameters()),
36+
RootParametersOffset(Data.getRootParametersOffset()),
37+
NumStaticSamplers(Data.getNumStaticSamplers()),
38+
StaticSamplersOffset(Data.getStaticSamplersOffset()) {
3639
uint32_t Flags = Data.getFlags();
3740
#define ROOT_ELEMENT_FLAG(Num, Val, Str) \
3841
Val = (Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0;
@@ -209,7 +212,11 @@ void MappingTraits<DXContainerYAML::Signature>::mapping(
209212

210213
void MappingTraits<DXContainerYAML::RootSignatureDesc>::mapping(
211214
IO &IO, DXContainerYAML::RootSignatureDesc &S) {
212-
IO.mapRequired("Size", S.Size);
215+
IO.mapRequired("Version", S.Version);
216+
IO.mapRequired("NumParameters", S.NumParameters);
217+
IO.mapRequired("RootParametersOffset", S.RootParametersOffset);
218+
IO.mapRequired("NumStaticSamplers", S.NumStaticSamplers);
219+
IO.mapRequired("StaticSamplersOffset", S.StaticSamplersOffset);
213220
#define ROOT_ELEMENT_FLAG(Num, Val, Str) IO.mapOptional(#Val, S.Val, false);
214221
#include "llvm/BinaryFormat/DXContainerConstants.def"
215222
}

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,21 @@ Header:
1111
PartOffsets: [ 60 ]
1212
Parts:
1313
- Name: RTS0
14-
Size: 8
14+
Size: 24
1515
RootSignature:
16-
Size: 8
16+
Version: 2
17+
NumParameters: 0
18+
RootParametersOffset: 0
19+
NumStaticSamplers: 0
20+
StaticSamplersOffset: 0
1721
AllowInputAssemblerInputLayout: true
1822

19-
#CHECK: - Name: RTS0
20-
#CHECK-NEXT: Size: 8
21-
#CHECK-NEXT: RootSignature:
22-
#CHECK-NEXT: Size: 8
23-
#CHECK-NEXT: AllowInputAssemblerInputLayout: true
23+
# CHECK: - Name: RTS0
24+
# CHECK-NEXT: Size: 24
25+
# CHECK-NEXT: RootSignature:
26+
# CHECK-NEXT: Version: 2
27+
# CHECK-NEXT: NumParameters: 0
28+
# CHECK-NEXT: RootParametersOffset: 0
29+
# CHECK-NEXT: NumStaticSamplers: 0
30+
# CHECK-NEXT: StaticSamplersOffset: 0
31+
# CHECK-NEXT: AllowInputAssemblerInputLayout: true

llvm/test/tools/dxil-dis/root-signature.yaml

Lines changed: 0 additions & 201 deletions
This file was deleted.

llvm/unittests/Object/DXContainerTest.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,3 +821,25 @@ TEST(DXCFile, MalformedSignature) {
821821
"the end of the part data"));
822822
}
823823
}
824+
825+
TEST(RootSignature, ParseRootFlags) {
826+
uint8_t Buffer[] = {
827+
0x44, 0x58, 0x42, 0x43, 0x32, 0x9A, 0x53, 0xD8, 0xEC, 0xBE, 0x35, 0x6F,
828+
0x05, 0x39, 0xE1, 0xFE, 0x31, 0x20, 0xF0, 0xC1, 0x01, 0x00, 0x00, 0x00,
829+
0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
830+
0x52, 0x54, 0x53, 0x30, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
831+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
832+
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
833+
};
834+
DXContainer C =
835+
llvm::cantFail(DXContainer::create(getMemoryBuffer<180>(Buffer)));
836+
837+
const auto &RS = C.getRootSignature();
838+
ASSERT_TRUE(RS.has_value());
839+
ASSERT_EQ(RS->getVersion(), 2);
840+
ASSERT_EQ(RS->getNumParameters(), 0);
841+
ASSERT_EQ(RS->getRootParametersOffset(), 0);
842+
ASSERT_EQ(RS->getNumStaticSamplers(), 0);
843+
ASSERT_EQ(RS->getStaticSamplersOffset(), 0);
844+
ASSERT_EQ(RS->getFlags(), 0x01);
845+
}

0 commit comments

Comments
 (0)