/////////////////////////////////////////////////////////////////////////////// // // // DxilSignature.h // // Copyright (C) Microsoft Corporation. All rights reserved. // // This file is distributed under the University of Illinois Open Source // // License. See LICENSE.TXT for details. // // // // Representation of HLSL shader signature. // // // /////////////////////////////////////////////////////////////////////////////// #pragma once #include "dxc/DXIL/DxilSignatureElement.h" #include #include #include namespace hlsl { /// Use this class to represent HLSL signature. class DxilSignature { public: using Kind = DXIL::SignatureKind; DxilSignature(DXIL::ShaderKind shaderKind, DXIL::SignatureKind sigKind, bool useMinPrecision); DxilSignature(DXIL::SigPointKind sigPointKind, bool useMinPrecision); DxilSignature(const DxilSignature &src); virtual ~DxilSignature(); bool IsInput() const; bool IsOutput() const; virtual std::unique_ptr CreateElement(); unsigned AppendElement(std::unique_ptr pSE, bool bSetID = true); DxilSignatureElement &GetElement(unsigned idx); const DxilSignatureElement &GetElement(unsigned idx) const; const std::vector > &GetElements() const; // Returns true if all signature elements that should be allocated are allocated bool IsFullyAllocated() const; // Returns the number of allocated vectors used to contain signature unsigned NumVectorsUsed(unsigned streamIndex = 0) const; bool UseMinPrecision() const { return m_UseMinPrecision; } DXIL::SigPointKind GetSigPointKind() const { return m_sigPointKind; } static bool ShouldBeAllocated(DXIL::SemanticInterpretationKind); unsigned GetRowCount() const; private: DXIL::SigPointKind m_sigPointKind; std::vector > m_Elements; bool m_UseMinPrecision; }; struct DxilEntrySignature { DxilEntrySignature(DXIL::ShaderKind shaderKind, bool useMinPrecision) : InputSignature(shaderKind, DxilSignature::Kind::Input, useMinPrecision), OutputSignature(shaderKind, DxilSignature::Kind::Output, useMinPrecision), PatchConstOrPrimSignature(shaderKind, DxilSignature::Kind::PatchConstOrPrim, useMinPrecision) { } DxilEntrySignature(const DxilEntrySignature &src); DxilSignature InputSignature; DxilSignature OutputSignature; DxilSignature PatchConstOrPrimSignature; }; } // namespace hlsl