Skip to content

Commit d14471b

Browse files
author
joaosaffran
committed
using buffer_ostream
1 parent 23069ab commit d14471b

File tree

2 files changed

+29
-63
lines changed

2 files changed

+29
-63
lines changed

llvm/include/llvm/MC/DXContainerRootSignature.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "llvm/ADT/IndexedMap.h"
109
#include "llvm/BinaryFormat/DXContainer.h"
11-
#include "llvm/Support/BinaryStreamWriter.h"
1210
#include "llvm/Support/raw_ostream.h"
1311

1412
namespace llvm {

llvm/lib/MC/DXContainerRootSignature.cpp

Lines changed: 29 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -9,104 +9,72 @@
99
#include "llvm/MC/DXContainerRootSignature.h"
1010
#include "llvm/ADT/SmallVector.h"
1111
#include "llvm/ADT/Twine.h"
12-
#include "llvm/Support/BinaryStreamWriter.h"
12+
#include "llvm/Support/EndianStream.h"
13+
#include "llvm/Support/Error.h"
1314
#include <cstdint>
14-
#include <sys/types.h>
1515

1616
using namespace llvm;
1717
using namespace llvm::mcdxbc;
1818

19-
Error setRewrite(BinaryStreamWriter &Stream, uint32_t &Offset) {
19+
void setRewrite(raw_ostream &Stream, uint32_t &Offset) {
2020
const uint32_t DummyValue = std::numeric_limits<uint32_t>::max();
21-
22-
Offset = Stream.getOffset();
23-
24-
if (Error Err = Stream.writeInteger(DummyValue))
25-
return Err;
26-
27-
return Error::success();
21+
Offset = Stream.tell();
22+
support::endian::write(Stream, DummyValue, llvm::endianness::little);
2823
}
2924

30-
Error rewriteOffset(BinaryStreamWriter &Stream, uint32_t Offset) {
31-
uint64_t Value = Stream.getOffset();
32-
Stream.setOffset(Offset);
33-
if (Error Err = Stream.writeInteger((uint32_t)Value))
34-
return Err;
35-
36-
Stream.setOffset(Value);
37-
38-
return Error::success();
25+
void rewriteOffset(buffer_ostream &Stream, uint32_t Offset) {
26+
uint32_t Value = Stream.tell();
27+
auto *InsertPoint = &Stream.buffer()[Offset];
28+
support::endian::write(InsertPoint, Value, llvm::endianness::little);
3929
}
4030

4131
Error RootSignatureDesc::write(raw_ostream &OS) const {
42-
std::vector<uint8_t> Buffer(getSizeInBytes());
43-
BinaryStreamWriter Writer(Buffer, llvm::endianness::little);
44-
32+
buffer_ostream Writer(OS);
4533
const uint32_t NumParameters = Parameters.size();
4634
const uint32_t Zero = 0;
4735

48-
if (Error Err = Writer.writeInteger(Header.Version))
49-
return Err;
50-
51-
if (Error Err = Writer.writeInteger(NumParameters))
52-
return Err;
36+
support::endian::write(Writer, Header.Version, llvm::endianness::little);
37+
support::endian::write(Writer, NumParameters, llvm::endianness::little);
5338

5439
uint32_t HeaderPoint;
55-
if (Error Err = setRewrite(Writer, HeaderPoint))
56-
return Err;
57-
58-
// Static samplers still not implemented
59-
if (Error Err = Writer.writeInteger(Zero))
60-
return Err;
40+
setRewrite(Writer, HeaderPoint);
6141

62-
if (Error Err = Writer.writeInteger(Zero))
63-
return Err;
42+
support::endian::write(Writer, Zero, llvm::endianness::little);
43+
support::endian::write(Writer, Zero, llvm::endianness::little);
44+
support::endian::write(Writer, Header.Flags, llvm::endianness::little);
6445

65-
if (Error Err = Writer.writeInteger(Header.Flags))
66-
return Err;
67-
68-
if (Error Err = rewriteOffset(Writer, HeaderPoint))
69-
return Err;
46+
rewriteOffset(Writer, HeaderPoint);
7047

7148
SmallVector<uint32_t> ParamsOffset;
7249
for (const auto &P : Parameters) {
73-
74-
if (Error Err = Writer.writeEnum(P.ParameterType))
75-
return Err;
76-
77-
if (Error Err = Writer.writeEnum(P.ShaderVisibility))
78-
return Err;
50+
support::endian::write(Writer, P.ParameterType, llvm::endianness::little);
51+
support::endian::write(Writer, P.ShaderVisibility,
52+
llvm::endianness::little);
7953

8054
uint32_t Offset;
81-
if (Error Err = setRewrite(Writer, Offset))
82-
return Err;
55+
setRewrite(Writer, Offset);
56+
8357
ParamsOffset.push_back(Offset);
8458
}
8559

8660
assert(NumParameters == ParamsOffset.size());
8761
for (size_t I = 0; I < NumParameters; ++I) {
88-
if (Error Err = rewriteOffset(Writer, ParamsOffset[I]))
89-
return Err;
90-
62+
rewriteOffset(Writer, ParamsOffset[I]);
9163
const auto &P = Parameters[I];
9264

9365
switch (P.ParameterType) {
9466
case dxbc::RootParameterType::Constants32Bit: {
95-
if (Error Err = Writer.writeInteger(P.Constants.ShaderRegister))
96-
return Err;
97-
if (Error Err = Writer.writeInteger(P.Constants.RegisterSpace))
98-
return Err;
99-
if (Error Err = Writer.writeInteger(P.Constants.Num32BitValues))
100-
return Err;
67+
support::endian::write(Writer, P.Constants.ShaderRegister,
68+
llvm::endianness::little);
69+
support::endian::write(Writer, P.Constants.RegisterSpace,
70+
llvm::endianness::little);
71+
support::endian::write(Writer, P.Constants.Num32BitValues,
72+
llvm::endianness::little);
10173
} break;
10274
case dxbc::RootParameterType::Empty:
10375
llvm_unreachable("Invalid RootParameterType");
10476
}
10577
}
10678

107-
llvm::ArrayRef<char> BufferRef(reinterpret_cast<char *>(Buffer.data()),
108-
Buffer.size());
109-
OS.write(BufferRef.data(), BufferRef.size());
110-
11179
return Error::success();
11280
}

0 commit comments

Comments
 (0)