blob: 4d52851464c59d61a89ef3fb951d745342529252 [file] [edit]
///////////////////////////////////////////////////////////////////////////////
// //
// 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 <memory>
#include <string>
#include <vector>
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<DxilSignatureElement> CreateElement();
unsigned AppendElement(std::unique_ptr<DxilSignatureElement> pSE, bool bSetID = true);
DxilSignatureElement &GetElement(unsigned idx);
const DxilSignatureElement &GetElement(unsigned idx) const;
const std::vector<std::unique_ptr<DxilSignatureElement> > &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<std::unique_ptr<DxilSignatureElement> > 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