@@ -30,10 +30,10 @@ static void rewriteOffsetToCurrentByte(raw_svector_ostream &Stream,
3030}
3131
3232size_t RootSignatureDesc::getSize () const {
33- size_t Size = sizeof (dxbc::RootSignatureHeader);
33+ size_t Size = sizeof (dxbc::RootSignatureHeader) +
34+ Parameters.size () * sizeof (dxbc::RootParameterHeader);
3435
3536 for (const auto &P : Parameters) {
36- Size += sizeof (P.Header );
3737 switch (P.Header .ParameterType ) {
3838 case dxbc::RootParameterType::Constants32Bit:
3939 Size += sizeof (dxbc::RootConstants);
@@ -47,15 +47,17 @@ void RootSignatureDesc::write(raw_ostream &OS) const {
4747 SmallString<256 > Storage;
4848 raw_svector_ostream BOS (Storage);
4949 BOS.reserveExtraSpace (getSize ());
50+
5051 const uint32_t NumParameters = Parameters.size ();
51- const uint32_t Zero = 0u ;
52+ const uint32_t StaticSamplerOffset = 0u ;
53+ const uint32_t NumStaticSamplers = 0u ;
5254
5355 support::endian::write (BOS, Header.Version , llvm::endianness::little);
5456 support::endian::write (BOS, NumParameters, llvm::endianness::little);
5557 support::endian::write (BOS, (uint32_t )sizeof (dxbc::RootSignatureHeader),
5658 llvm::endianness::little);
57- support::endian::write (BOS, Zero , llvm::endianness::little);
58- support::endian::write (BOS, Zero , llvm::endianness::little);
59+ support::endian::write (BOS, StaticSamplerOffset , llvm::endianness::little);
60+ support::endian::write (BOS, NumStaticSamplers , llvm::endianness::little);
5961 support::endian::write (BOS, Header.Flags , llvm::endianness::little);
6062
6163 SmallVector<uint32_t > ParamsOffsets;
@@ -75,14 +77,15 @@ void RootSignatureDesc::write(raw_ostream &OS) const {
7577
7678 switch (P.Header .ParameterType ) {
7779 case dxbc::RootParameterType::Constants32Bit:
78- support::endian::write (BOS, P.Constants .Register ,
80+ support::endian::write (BOS, P.Constants .ShaderRegister ,
81+ llvm::endianness::little);
82+ support::endian::write (BOS, P.Constants .RegisterSpace ,
7983 llvm::endianness::little);
80- support::endian::write (BOS, P.Constants .Space , llvm::endianness::little);
81- support::endian::write (BOS, P.Constants .NumOfConstants ,
84+ support::endian::write (BOS, P.Constants .Num32BitValues ,
8285 llvm::endianness::little);
8386 break ;
8487 }
8588 }
86-
89+ assert (Storage. size () == getSize ());
8790 OS.write (Storage.data (), Storage.size ());
8891}
0 commit comments