@@ -29,6 +29,20 @@ static void rewriteOffsetToCurrentByte(raw_svector_ostream &Stream,
2929 Stream.pwrite (reinterpret_cast <const char *>(&Value), sizeof (Value), Offset);
3030}
3131
32+ size_t RootSignatureDesc::getSize () const {
33+ size_t Size = sizeof (dxbc::RootSignatureHeader);
34+
35+ for (const auto &P : Parameters) {
36+ Size += sizeof (P.Header );
37+ switch (P.Header .ParameterType ) {
38+ case dxbc::RootParameterType::Constants32Bit:
39+ Size += sizeof (dxbc::RootConstants);
40+ break ;
41+ }
42+ }
43+ return Size;
44+ }
45+
3246void RootSignatureDesc::write (raw_ostream &OS) const {
3347 SmallString<256 > Storage;
3448 raw_svector_ostream BOS (Storage);
@@ -38,11 +52,8 @@ void RootSignatureDesc::write(raw_ostream &OS) const {
3852
3953 support::endian::write (BOS, Header.Version , llvm::endianness::little);
4054 support::endian::write (BOS, NumParameters, llvm::endianness::little);
41-
42- // Root Parameters offset should always start after the
4355 support::endian::write (BOS, (uint32_t )sizeof (dxbc::RootSignatureHeader),
4456 llvm::endianness::little);
45-
4657 support::endian::write (BOS, Zero, llvm::endianness::little);
4758 support::endian::write (BOS, Zero, llvm::endianness::little);
4859 support::endian::write (BOS, Header.Flags , llvm::endianness::little);
0 commit comments