DirectXShaderCompiler/include/dxc/DXIL/DxilSignatureElement.h

117 строки
3.8 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// //
// DxilSignatureElement.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 signature element. //
// //
///////////////////////////////////////////////////////////////////////////////
#pragma once
#include "llvm/ADT/StringRef.h"
#include "dxc/DXIL/DxilSemantic.h"
#include "dxc/DXIL/DxilInterpolationMode.h"
#include "dxc/DXIL/DxilCompType.h"
#include <string>
#include <vector>
#include <limits.h>
namespace hlsl {
class ShaderModel;
/// Use this class to represent HLSL signature elements.
class DxilSignatureElement {
friend class DxilSignature;
public:
using Kind = DXIL::SigPointKind;
static const unsigned kUndefinedID = UINT_MAX;
DxilSignatureElement(Kind K);
virtual ~DxilSignatureElement();
void Initialize(llvm::StringRef Name, const CompType &ElementType, const InterpolationMode &InterpMode,
unsigned Rows, unsigned Cols,
int StartRow = Semantic::kUndefinedRow, int StartCol = Semantic::kUndefinedCol,
unsigned ID = kUndefinedID, const std::vector<unsigned> &IndexVector = std::vector<unsigned>());
unsigned GetID() const;
void SetID(unsigned ID);
DXIL::ShaderKind GetShaderKind() const;
DXIL::SigPointKind GetSigPointKind() const;
void SetSigPointKind(DXIL::SigPointKind K);
bool IsInput() const;
bool IsOutput() const;
bool IsPatchConstOrPrim() const;
const char *GetName() const;
unsigned GetRows() const;
void SetRows(unsigned Rows);
unsigned GetCols() const;
void SetCols(unsigned Cols);
const InterpolationMode *GetInterpolationMode() const;
CompType GetCompType() const;
unsigned GetOutputStream() const;
void SetOutputStream(unsigned Stream);
// Semantic properties.
const Semantic *GetSemantic() const;
void SetKind(Semantic::Kind kind);
Semantic::Kind GetKind() const;
bool IsArbitrary() const;
bool IsDepth() const;
bool IsDepthLE() const;
bool IsDepthGE() const;
bool IsAnyDepth() const;
DXIL::SemanticInterpretationKind GetInterpretation() const;
llvm::StringRef GetSemanticName() const;
unsigned GetSemanticStartIndex() const;
// Low-level properties.
int GetStartRow() const;
void SetStartRow(int StartRow);
int GetStartCol() const;
void SetStartCol(int Component);
const std::vector<unsigned> &GetSemanticIndexVec() const;
void SetSemanticIndexVec(const std::vector<unsigned> &Vec);
void AppendSemanticIndex(unsigned SemIdx);
void SetCompType(CompType CT);
uint8_t GetColsAsMask() const;
bool IsAllocated() const;
unsigned GetDynIdxCompMask() const;
void SetDynIdxCompMask(unsigned DynIdxCompMask);
uint8_t GetUsageMask() const;
void SetUsageMask(unsigned UsageMask);
protected:
DXIL::SigPointKind m_sigPointKind;
const Semantic *m_pSemantic;
unsigned m_ID;
std::string m_Name;
llvm::StringRef m_SemanticName;
unsigned m_SemanticStartIndex;
CompType m_CompType;
InterpolationMode m_InterpMode;
std::vector<unsigned> m_SemanticIndex;
unsigned m_Rows;
unsigned m_Cols;
int m_StartRow;
int m_StartCol;
unsigned m_OutputStream;
unsigned m_DynIdxCompMask;
// UsageMask is meant to match the signature usage mask, used for validation:
// for output: may-write, for input: always-reads
unsigned m_UsageMask;
};
} // namespace hlsl