Skip to content

Commit a0cee57

Browse files
author
joaosaffran
committed
refactoring to follow llvm standards
1 parent e7676ed commit a0cee57

File tree

9 files changed

+109
-16
lines changed

9 files changed

+109
-16
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//===- llvm/MC/DXContainerRootSignature.h - DXContainer RootSignature -*- C++
2+
//-------*-===//
3+
//
4+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5+
// See https://llvm.org/LICENSE.txt for license information.
6+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7+
//
8+
//===----------------------------------------------------------------------===//
9+
10+
#include <cstdint>
11+
#include <limits>
12+
13+
namespace llvm {
14+
15+
class raw_ostream;
16+
17+
namespace mcdxbc {
18+
struct RootSignatureHeader {
19+
uint32_t Version;
20+
uint32_t Flags;
21+
22+
void swapBytes();
23+
void write(raw_ostream &OS,
24+
uint32_t Version = std::numeric_limits<uint32_t>::max());
25+
};
26+
} // namespace mcdxbc
27+
} // namespace llvm

llvm/include/llvm/Object/DXContainer.h

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
#include "llvm/Support/MemoryBufferRef.h"
2323
#include "llvm/TargetParser/Triple.h"
2424
#include <array>
25+
#include <cstdint>
26+
#include <sys/types.h>
2527
#include <variant>
2628

2729
namespace llvm {
@@ -116,6 +118,23 @@ template <typename T> struct ViewArray {
116118
};
117119

118120
namespace DirectX {
121+
122+
class RootSignature {
123+
private:
124+
StringRef Data;
125+
uint32_t Version;
126+
uint32_t Flags;
127+
128+
public:
129+
RootSignature(StringRef Data) : Data(Data) {}
130+
131+
Error parse();
132+
133+
uint32_t getVersion() const { return Version; }
134+
135+
uint32_t getFlags() const { return Flags; }
136+
};
137+
119138
class PSVRuntimeInfo {
120139

121140
using ResourceArray = ViewArray<dxbc::PSV::v2::ResourceBindInfo>;
@@ -287,7 +306,7 @@ class DXContainer {
287306
std::optional<uint64_t> ShaderFeatureFlags;
288307
std::optional<dxbc::ShaderHash> Hash;
289308
std::optional<DirectX::PSVRuntimeInfo> PSVInfo;
290-
std::optional<dxbc::RootSignatureDesc> RootSignature;
309+
std::optional<DirectX::RootSignature> RootSignature;
291310
DirectX::Signature InputSignature;
292311
DirectX::Signature OutputSignature;
293312
DirectX::Signature PatchConstantSignature;
@@ -384,7 +403,7 @@ class DXContainer {
384403

385404
std::optional<dxbc::ShaderHash> getShaderHash() const { return Hash; }
386405

387-
std::optional<dxbc::RootSignatureDesc> getRootSignature() const {
406+
std::optional<DirectX::RootSignature> getRootSignature() const {
388407
return RootSignature;
389408
}
390409

llvm/include/llvm/ObjectYAML/DXContainerYAML.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "llvm/ADT/StringRef.h"
1919
#include "llvm/BinaryFormat/DXContainer.h"
20+
#include "llvm/Object/DXContainer.h"
2021
#include "llvm/ObjectYAML/YAML.h"
2122
#include "llvm/Support/YAMLTraits.h"
2223
#include <array>
@@ -75,7 +76,7 @@ struct ShaderHash {
7576
#define ROOT_ELEMENT_FLAG(Num, Val, Str) bool Val = false;
7677
struct RootSignatureDesc {
7778
RootSignatureDesc() = default;
78-
RootSignatureDesc(const dxbc::RootSignatureDesc &Data);
79+
RootSignatureDesc(const object::DirectX::RootSignature &Data);
7980

8081
uint32_t getEncodedFlags();
8182
uint32_t Version;

llvm/lib/MC/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
add_llvm_component_library(LLVMMC
22
ConstantPools.cpp
33
DXContainerPSVInfo.cpp
4+
DXContainerRootSignature.cpp
45
ELFObjectWriter.cpp
56
GOFFObjectWriter.cpp
67
MCAsmBackend.cpp
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//===- llvm/MC/DXContainerRootSignature.cpp - DXContainer RootSignature -*- C++
2+
//-------*-===//
3+
//
4+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5+
// See https://llvm.org/LICENSE.txt for license information.
6+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7+
//
8+
//===----------------------------------------------------------------------===//
9+
10+
#include "llvm/MC/DXContainerRootSignature.h"
11+
#include "llvm/Support/EndianStream.h"
12+
#include "llvm/Support/SwapByteOrder.h"
13+
#include <iterator>
14+
15+
using namespace llvm;
16+
using namespace llvm::mcdxbc;
17+
18+
void RootSignatureHeader::write(raw_ostream &OS, uint32_t Version) {
19+
20+
uint32_t SizeInfo = sizeof(this);
21+
// support::endian::write(OS, SizeInfo, llvm::endianness::little);
22+
23+
if (sys::IsBigEndianHost) {
24+
sys::swapByteOrder(Version);
25+
sys::swapByteOrder(Flags);
26+
}
27+
28+
OS.write(reinterpret_cast<const char *>(this), SizeInfo);
29+
}

llvm/lib/Object/DXContainer.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ Error DXContainer::parseHash(StringRef Part) {
9595
Error DXContainer::parseRootSignature(StringRef Part) {
9696
if (RootSignature)
9797
return parseFailed("More than one RTS0 part is present in the file");
98-
dxbc::RootSignatureDesc Desc;
99-
if (Error Err = readStruct(Part, Part.begin(), Desc))
98+
DirectX::RootSignature Desc(Part);
99+
if (Error Err = Desc.parse())
100100
return Err;
101101
RootSignature = Desc;
102102
return Error::success();
@@ -242,6 +242,20 @@ void DXContainer::PartIterator::updateIteratorImpl(const uint32_t Offset) {
242242
IteratorState.Offset = Offset;
243243
}
244244

245+
Error DirectX::RootSignature::parse() {
246+
const char *Current = Data.begin();
247+
dxbc::RootSignatureDesc Desc;
248+
if (Error Err = readStruct(Data, Current, Desc))
249+
return Err;
250+
251+
if (sys::IsBigEndianHost)
252+
Desc.swapBytes();
253+
254+
Version = Desc.Version;
255+
Flags = Desc.Flags;
256+
return Error::success();
257+
}
258+
245259
Error DirectX::PSVRuntimeInfo::parse(uint16_t ShaderKind) {
246260
Triple::EnvironmentType ShaderStage = dxbc::getShaderStage(ShaderKind);
247261

llvm/lib/ObjectYAML/DXContainerEmitter.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
#include "llvm/BinaryFormat/DXContainer.h"
1515
#include "llvm/MC/DXContainerPSVInfo.h"
16+
#include "llvm/MC/DXContainerRootSignature.h"
1617
#include "llvm/ObjectYAML/ObjectYAML.h"
1718
#include "llvm/ObjectYAML/yaml2obj.h"
1819
#include "llvm/Support/Errc.h"
@@ -264,13 +265,12 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
264265
case dxbc::PartType::RTS0:
265266
if (!P.RootSignature.has_value())
266267
continue;
267-
uint32_t Flags = P.RootSignature->getEncodedFlags();
268-
if (sys::IsBigEndianHost)
269-
sys::swapByteOrder(Flags);
270-
dxbc::RootSignatureDesc RS = {P.RootSignature->Version, Flags};
271-
if (sys::IsBigEndianHost)
272-
RS.swapBytes();
273-
OS.write(reinterpret_cast<char *>(&RS), sizeof(dxbc::RootSignatureDesc));
268+
269+
mcdxbc::RootSignatureHeader Header;
270+
Header.Version = P.RootSignature->Version;
271+
Header.Flags = P.RootSignature->getEncodedFlags();
272+
273+
Header.write(OS);
274274
break;
275275
}
276276
uint64_t BytesWritten = OS.tell() - DataStart;

llvm/lib/ObjectYAML/DXContainerYAML.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "llvm/ObjectYAML/DXContainerYAML.h"
1515
#include "llvm/ADT/ScopeExit.h"
1616
#include "llvm/BinaryFormat/DXContainer.h"
17+
#include "llvm/Object/DXContainer.h"
1718
#include "llvm/Support/ScopedPrinter.h"
1819
#include <cstdint>
1920

@@ -31,10 +32,11 @@ DXContainerYAML::ShaderFeatureFlags::ShaderFeatureFlags(uint64_t FlagData) {
3132
}
3233

3334
DXContainerYAML::RootSignatureDesc::RootSignatureDesc(
34-
const dxbc::RootSignatureDesc &Data)
35-
: Version(Data.Version) {
35+
const object::DirectX::RootSignature &Data)
36+
: Version(Data.getVersion()) {
37+
uint32_t Flags = Data.getFlags();
3638
#define ROOT_ELEMENT_FLAG(Num, Val, Str) \
37-
Val = (Data.Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0;
39+
Val = (Flags & (uint32_t)dxbc::RootElementFlag::Val) > 0;
3840
#include "llvm/BinaryFormat/DXContainerConstants.def"
3941
}
4042

llvm/tools/obj2yaml/dxcontainer2yaml.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ dumpDXContainer(MemoryBufferRef Source) {
154154
case dxbc::PartType::Unknown:
155155
break;
156156
case dxbc::PartType::RTS0:
157-
std::optional<dxbc::RootSignatureDesc> RS = Container.getRootSignature();
157+
std::optional<DirectX::RootSignature> RS = Container.getRootSignature();
158158
if (RS.has_value())
159159
NewPart.RootSignature = DXContainerYAML::RootSignatureDesc(*RS);
160160
break;

0 commit comments

Comments
 (0)