DxilContainerAssembler.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // //
  3. // DxilContainerAssembler.h //
  4. // Copyright (C) Microsoft Corporation. All rights reserved. //
  5. // This file is distributed under the University of Illinois Open Source //
  6. // License. See LICENSE.TXT for details. //
  7. // //
  8. // Helpers for writing to dxil container. //
  9. // //
  10. ///////////////////////////////////////////////////////////////////////////////
  11. #pragma once
  12. #include <functional>
  13. #include "dxc/DxilContainer/DxilContainer.h"
  14. #include "llvm/ADT/StringRef.h"
  15. namespace hlsl {
  16. class AbstractMemoryStream;
  17. class DxilModule;
  18. class RootSignatureHandle;
  19. namespace DXIL {
  20. enum class SignatureKind;
  21. }
  22. class DxilPartWriter {
  23. public:
  24. virtual ~DxilPartWriter() {}
  25. virtual uint32_t size() const = 0;
  26. virtual void write(AbstractMemoryStream *pStream) = 0;
  27. };
  28. class DxilContainerWriter : public DxilPartWriter {
  29. public:
  30. typedef std::function<void(AbstractMemoryStream*)> WriteFn;
  31. virtual ~DxilContainerWriter() {}
  32. virtual void AddPart(uint32_t FourCC, uint32_t Size, WriteFn Write) = 0;
  33. };
  34. DxilPartWriter *NewProgramSignatureWriter(const DxilModule &M, DXIL::SignatureKind Kind);
  35. DxilPartWriter *NewRootSignatureWriter(const RootSignatureHandle &S);
  36. DxilPartWriter *NewFeatureInfoWriter(const DxilModule &M);
  37. DxilPartWriter *NewPSVWriter(const DxilModule &M, uint32_t PSVVersion = 0);
  38. DxilPartWriter *NewRDATWriter(const DxilModule &M, uint32_t InfoVersion = 0);
  39. DxilContainerWriter *NewDxilContainerWriter();
  40. void SerializeDxilContainerForModule(hlsl::DxilModule *pModule,
  41. AbstractMemoryStream *pModuleBitcode,
  42. AbstractMemoryStream *pStream,
  43. llvm::StringRef DebugName,
  44. SerializeDxilFlags Flags,
  45. DxilShaderHash *pShaderHashOut = nullptr,
  46. AbstractMemoryStream *pReflectionStreamOut = nullptr,
  47. AbstractMemoryStream *pRootSigStreamOut = nullptr);
  48. void SerializeDxilContainerForRootSignature(hlsl::RootSignatureHandle *pRootSigHandle,
  49. AbstractMemoryStream *pStream);
  50. } // namespace hlsl