Skip to content

Commit 7a7c34d

Browse files
author
joaosaffran
committed
addressing pr comments
1 parent 5cd0044 commit 7a7c34d

File tree

2 files changed

+32
-32
lines changed

2 files changed

+32
-32
lines changed

llvm/lib/MC/DXContainerRootSignature.cpp

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -8,63 +8,61 @@
88

99
#include "llvm/MC/DXContainerRootSignature.h"
1010
#include "llvm/Support/EndianStream.h"
11+
#include <cstdint>
1112

1213
using namespace llvm;
1314
using namespace llvm::mcdxbc;
1415

15-
void setRewrite(raw_ostream &Stream, uint32_t &Offset) {
16+
static uint32_t writePlaceholder(raw_ostream &Stream) {
1617
const uint32_t DummyValue = std::numeric_limits<uint32_t>::max();
17-
Offset = Stream.tell();
18+
uint32_t Offset = Stream.tell();
1819
support::endian::write(Stream, DummyValue, llvm::endianness::little);
20+
return Offset;
1921
}
2022

21-
void rewriteOffset(buffer_ostream &Stream, uint32_t Offset) {
22-
uint32_t Value = Stream.tell();
23-
auto *InsertPoint = &Stream.buffer()[Offset];
24-
support::endian::write(InsertPoint, Value, llvm::endianness::little);
23+
static void rewriteOffset(buffer_ostream &Stream, uint32_t Offset) {
24+
uint32_t Value =
25+
support::endian::byte_swap<uint32_t, llvm::endianness::little>(
26+
Stream.tell());
27+
Stream.pwrite(reinterpret_cast<const char *>(&Value), sizeof(Value), Offset);
2528
}
2629

2730
void RootSignatureDesc::write(raw_ostream &OS) const {
28-
buffer_ostream Writer(OS);
31+
buffer_ostream BOS(OS);
2932
const uint32_t NumParameters = Parameters.size();
3033
const uint32_t Zero = 0;
3134

32-
support::endian::write(Writer, Header.Version, llvm::endianness::little);
33-
support::endian::write(Writer, NumParameters, llvm::endianness::little);
35+
support::endian::write(BOS, Header.Version, llvm::endianness::little);
36+
support::endian::write(BOS, NumParameters, llvm::endianness::little);
3437

35-
uint32_t HeaderPoint;
36-
setRewrite(Writer, HeaderPoint);
38+
uint32_t HeaderPoint = writePlaceholder(BOS);
3739

38-
support::endian::write(Writer, Zero, llvm::endianness::little);
39-
support::endian::write(Writer, Zero, llvm::endianness::little);
40-
support::endian::write(Writer, Header.Flags, llvm::endianness::little);
40+
support::endian::write(BOS, Zero, llvm::endianness::little);
41+
support::endian::write(BOS, Zero, llvm::endianness::little);
42+
support::endian::write(BOS, Header.Flags, llvm::endianness::little);
4143

42-
rewriteOffset(Writer, HeaderPoint);
44+
rewriteOffset(BOS, HeaderPoint);
4345

44-
SmallVector<uint32_t> ParamsOffset;
46+
SmallVector<uint32_t> ParamsOffsets;
4547
for (const auto &P : Parameters) {
46-
support::endian::write(Writer, P.ParameterType, llvm::endianness::little);
47-
support::endian::write(Writer, P.ShaderVisibility,
48-
llvm::endianness::little);
48+
support::endian::write(BOS, P.ParameterType, llvm::endianness::little);
49+
support::endian::write(BOS, P.ShaderVisibility, llvm::endianness::little);
4950

50-
uint32_t Offset;
51-
setRewrite(Writer, Offset);
52-
53-
ParamsOffset.push_back(Offset);
51+
ParamsOffsets.push_back(writePlaceholder(BOS));
5452
}
5553

56-
assert(NumParameters == ParamsOffset.size());
54+
assert(NumParameters == ParamsOffsets.size());
5755
for (size_t I = 0; I < NumParameters; ++I) {
58-
rewriteOffset(Writer, ParamsOffset[I]);
56+
rewriteOffset(BOS, ParamsOffsets[I]);
5957
const auto &P = Parameters[I];
6058

6159
switch (P.ParameterType) {
6260
case dxbc::RootParameterType::Constants32Bit: {
63-
support::endian::write(Writer, P.Constants.ShaderRegister,
61+
support::endian::write(BOS, P.Constants.ShaderRegister,
6462
llvm::endianness::little);
65-
support::endian::write(Writer, P.Constants.RegisterSpace,
63+
support::endian::write(BOS, P.Constants.RegisterSpace,
6664
llvm::endianness::little);
67-
support::endian::write(Writer, P.Constants.Num32BitValues,
65+
support::endian::write(BOS, P.Constants.Num32BitValues,
6866
llvm::endianness::little);
6967
} break;
7068
case dxbc::RootParameterType::Empty:

llvm/lib/Object/DXContainer.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -296,16 +296,18 @@ Error DirectX::RootSignature::parse(StringRef Data) {
296296
NewParam.ParameterType =
297297
support::endian::read<dxbc::RootParameterType,
298298
llvm::endianness::little>(Current);
299-
if (!dxbc::RootSignatureValidations::isValidParameterType(NewParam.ParameterType))
299+
if (!dxbc::RootSignatureValidations::isValidParameterType(
300+
NewParam.ParameterType))
300301
return validationFailed("unsupported parameter type value read: " +
301302
llvm::Twine((uint32_t)NewParam.ParameterType));
302303

303304
Current += sizeof(dxbc::RootParameterType);
304305

305306
NewParam.ShaderVisibility =
306-
support::endian::read<dxbc::ShaderVisibility,
307-
llvm::endianness::little>(Current);
308-
if (!dxbc::RootSignatureValidations::isValidShaderVisibility(NewParam.ShaderVisibility))
307+
support::endian::read<dxbc::ShaderVisibility, llvm::endianness::little>(
308+
Current);
309+
if (!dxbc::RootSignatureValidations::isValidShaderVisibility(
310+
NewParam.ShaderVisibility))
309311
return validationFailed("unsupported shader visility flag value read: " +
310312
llvm::Twine((uint32_t)NewParam.ShaderVisibility));
311313

0 commit comments

Comments
 (0)