DxilSignature.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // //
  3. // DxilSignature.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. // Representation of HLSL shader signature. //
  9. // //
  10. ///////////////////////////////////////////////////////////////////////////////
  11. #pragma once
  12. #include "dxc/DXIL/DxilSignatureElement.h"
  13. #include <memory>
  14. #include <string>
  15. #include <vector>
  16. namespace hlsl {
  17. /// Use this class to represent HLSL signature.
  18. class DxilSignature {
  19. public:
  20. using Kind = DXIL::SignatureKind;
  21. DxilSignature(DXIL::ShaderKind shaderKind, DXIL::SignatureKind sigKind, bool useMinPrecision);
  22. DxilSignature(DXIL::SigPointKind sigPointKind, bool useMinPrecision);
  23. DxilSignature(const DxilSignature &src);
  24. virtual ~DxilSignature();
  25. bool IsInput() const;
  26. bool IsOutput() const;
  27. virtual std::unique_ptr<DxilSignatureElement> CreateElement();
  28. unsigned AppendElement(std::unique_ptr<DxilSignatureElement> pSE, bool bSetID = true);
  29. DxilSignatureElement &GetElement(unsigned idx);
  30. const DxilSignatureElement &GetElement(unsigned idx) const;
  31. const std::vector<std::unique_ptr<DxilSignatureElement> > &GetElements() const;
  32. // Returns true if all signature elements that should be allocated are allocated
  33. bool IsFullyAllocated() const;
  34. // Returns the number of allocated vectors used to contain signature
  35. unsigned NumVectorsUsed(unsigned streamIndex = 0) const;
  36. bool UseMinPrecision() const { return m_UseMinPrecision; }
  37. DXIL::SigPointKind GetSigPointKind() const { return m_sigPointKind; }
  38. static bool ShouldBeAllocated(DXIL::SemanticInterpretationKind);
  39. unsigned GetRowCount() const;
  40. private:
  41. DXIL::SigPointKind m_sigPointKind;
  42. std::vector<std::unique_ptr<DxilSignatureElement> > m_Elements;
  43. bool m_UseMinPrecision;
  44. };
  45. struct DxilEntrySignature {
  46. DxilEntrySignature(DXIL::ShaderKind shaderKind, bool useMinPrecision)
  47. : InputSignature(shaderKind, DxilSignature::Kind::Input, useMinPrecision),
  48. OutputSignature(shaderKind, DxilSignature::Kind::Output, useMinPrecision),
  49. PatchConstOrPrimSignature(shaderKind, DxilSignature::Kind::PatchConstOrPrim, useMinPrecision) {
  50. }
  51. DxilEntrySignature(const DxilEntrySignature &src);
  52. DxilSignature InputSignature;
  53. DxilSignature OutputSignature;
  54. DxilSignature PatchConstOrPrimSignature;
  55. };
  56. } // namespace hlsl