33 static_cast<uint32_t>(dxbc::PSV::SemanticKind::Invalid);
35 static_cast<uint32_t>(dxbc::PSV::InterpolationMode::Invalid);
44 return makeError(
"expected integer operand " +
Twine(OpId));
45 return CI->getZExtValue();
51 return dxbc::PSV::SemanticKind::Arbitrary;
57 return dxbc::PSV::SemanticKind::Invalid;
62 switch (SemanticKind) {
63 case dxbc::PSV::SemanticKind::Arbitrary: {
64 static constexpr IOType OutOrPatchConstant =
76 case dxbc::PSV::SemanticKind::DispatchThreadID:
77 case dxbc::PSV::SemanticKind::GroupID:
78 case dxbc::PSV::SemanticKind::GroupIndex:
79 case dxbc::PSV::SemanticKind::GroupThreadID: {
88 case dxbc::PSV::SemanticKind::ViewID: {
89 static constexpr IOType InOrPatchConstant =
104 case dxbc::PSV::SemanticKind::Target: {
109 case dxbc::PSV::SemanticKind::VertexID:
110 case dxbc::PSV::SemanticKind::InstanceID: {
115 case dxbc::PSV::SemanticKind::IsFrontFace: {
121 case dxbc::PSV::SemanticKind::Position: {
137 case dxbc::PSV::SemanticKind::ClipDistance:
138 case dxbc::PSV::SemanticKind::CullDistance: {
154 case dxbc::PSV::SemanticKind::TessFactor:
155 case dxbc::PSV::SemanticKind::InsideTessFactor: {
173 "a single IOType is expected, not a mask of IOTypes");
175 if (Info.Stage == ShaderStage && any(Info.AllowedIOTypesMask & IOTy))
176 return Info.Interpretation;
183 enum class OpIdx :
unsigned {
199 const unsigned NumElementOperands =
to_underlying(OpIdx::LastEntry) + 1;
202 return makeError(
"signature element node is null");
203 if (
Node->getNumOperands() != NumElementOperands)
204 return makeError(
"signature element node has wrong number of operands");
210 return SigId.takeError();
216 return makeError(
"expected semantic name string");
224 return makeError(
"invalid component type");
232 return makeError(
"invalid semantic kind");
238 return makeError(
"expected semantic indices node");
239 for (
unsigned I = 0, E = Indices->getNumOperands();
I != E; ++
I) {
242 return Index.takeError();
251 return makeError(
"invalid interpolation mode");
256 return Rows.takeError();
261 return Cols.takeError();
263 return makeError(
"number of components per row must be within 1-4");
277 return makeError(
"start column must be within 0-3 or unallocated");
282 return makeError(
"start row and column sentinels must be set together");
289 return makeError(
"usage mask must be a 4-bit value");
297 return makeError(
"dynamic index mask must be a 4-bit value");
305 return makeError(
"geometry shader stream index must be within 0-3");
310 "number of semantic indices must equal the number of rows");
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file contains library features backported from future STL versions.
This file implements the C++20 <bit> header.
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Lightweight error class with error context and mandatory checking.
Tagged union holding either a T or a Error.
This is an important class for using LLVM in a threaded context.
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
static LLVM_ABI MDString * get(LLVMContext &Context, StringRef Str)
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Represent a constant reference to a string, i.e.
bool equals_insensitive(StringRef RHS) const
Check for string equality, ignoring case.
bool consume_front_insensitive(StringRef Prefix)
Returns true if this StringRef has the given prefix, ignoring case, and removes that prefix.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
The instances of the Type class are immutable: once they are created, they are never changed.
static LLVM_ABI IntegerType * getInt32Ty(LLVMContext &C)
static LLVM_ABI IntegerType * getInt8Ty(LLVMContext &C)
LLVM_ABI EnumStrings< SemanticKind, 1 > getSemanticKinds()
ElementType
The element type of an SRV or UAV resource.
static constexpr uint32_t UnallocatedRow
@ PatchConstantOrPrimitive
LLVM_ABI SemanticInterpretation getInterpretationKind(dxbc::PSV::SemanticKind SemanticKind, Triple::EnvironmentType ShaderStage, IOType IOTy)
LLVM_ABI ArrayRef< SemanticStageInfo > getAvailableStages(dxbc::PSV::SemanticKind SemanticKind)
LLVM_ABI dxbc::PSV::SemanticKind getSemanticKind(StringRef SemanticName)
static constexpr uint8_t UnallocatedCol
std::enable_if_t< detail::IsValidPointer< X, Y >::value, X * > dyn_extract_or_null(Y &&MD)
Extract a Value from Metadata, if any, allowing null.
This is an optimization pass for GlobalISel generic memory operations.
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
LLVM_ABI std::error_code inconvertibleErrorCode()
The value returned by this function can be returned from convertToErrorCode for Error values where no...
Error createStringError(std::error_code EC, char const *Fmt, const Ts &... Vals)
Create formatted StringError object.
constexpr bool has_single_bit(T Value) noexcept
constexpr std::underlying_type_t< Enum > to_underlying(Enum E)
Returns underlying integer value of an enum.
static LLVM_ABI Expected< SemanticSignatureElement > fromMetadata(const MDNode *Node)
SmallVector< uint32_t > SemanticIndices
dxil::ElementType CompType
dxbc::PSV::SemanticKind SemanticKind
SemanticSignatureElement()=default
dxbc::PSV::InterpolationMode InterpMode
LLVM_ABI MDNode * toMetadata(LLVMContext &Ctx) const