35 static_cast<uint32_t>(dxbc::PSV::SemanticKind::Invalid);
37 static_cast<uint32_t>(dxbc::PSV::InterpolationMode::Invalid);
46 return makeError(
"expected integer operand " +
Twine(OpId));
47 return CI->getZExtValue();
61 return InterpolationMode::Undefined;
64 ? InterpolationMode::Constant
65 : InterpolationMode::Invalid;
70 return NoPerspective ? InterpolationMode::LinearNoperspectiveSample
71 : InterpolationMode::LinearSample;
73 return NoPerspective ? InterpolationMode::LinearNoperspectiveCentroid
74 : InterpolationMode::LinearCentroid;
78 : InterpolationMode::Linear;
89 return InterpolationMode::Undefined;
91 if (Mode == InterpolationMode::Undefined) {
99 Mode = InterpolationMode::Linear;
102 Mode = InterpolationMode::Constant;
107 if (Kind == dxbc::PSV::SemanticKind::Position) {
109 case InterpolationMode::Linear:
110 return InterpolationMode::LinearNoperspective;
111 case InterpolationMode::LinearCentroid:
112 return InterpolationMode::LinearNoperspectiveCentroid;
113 case InterpolationMode::LinearSample:
114 return InterpolationMode::LinearNoperspectiveSample;
124 return dxbc::PSV::SemanticKind::Arbitrary;
130 return dxbc::PSV::SemanticKind::Invalid;
135 switch (SemanticKind) {
136 case dxbc::PSV::SemanticKind::Arbitrary: {
137 static constexpr IOType OutOrPatchConstant =
149 case dxbc::PSV::SemanticKind::DispatchThreadID:
150 case dxbc::PSV::SemanticKind::GroupID:
151 case dxbc::PSV::SemanticKind::GroupIndex:
152 case dxbc::PSV::SemanticKind::GroupThreadID: {
161 case dxbc::PSV::SemanticKind::ViewID: {
162 static constexpr IOType InOrPatchConstant =
177 case dxbc::PSV::SemanticKind::Target: {
182 case dxbc::PSV::SemanticKind::VertexID:
183 case dxbc::PSV::SemanticKind::InstanceID: {
188 case dxbc::PSV::SemanticKind::IsFrontFace: {
194 case dxbc::PSV::SemanticKind::ShadingRate: {
205 case dxbc::PSV::SemanticKind::Position: {
221 case dxbc::PSV::SemanticKind::ClipDistance:
222 case dxbc::PSV::SemanticKind::CullDistance: {
238 case dxbc::PSV::SemanticKind::TessFactor:
239 case dxbc::PSV::SemanticKind::InsideTessFactor: {
257 "a single IOType is expected, not a mask of IOTypes");
259 if (Info.Stage == ShaderStage && any(Info.AllowedIOTypesMask & IOTy))
260 return Info.Interpretation;
267 enum class OpIdx :
unsigned {
283 const unsigned NumElementOperands =
to_underlying(OpIdx::LastEntry) + 1;
286 return makeError(
"signature element node is null");
287 if (
Node->getNumOperands() != NumElementOperands)
288 return makeError(
"signature element node has wrong number of operands");
294 return SigId.takeError();
300 return makeError(
"expected semantic name string");
308 return makeError(
"invalid component type");
316 return makeError(
"invalid semantic kind");
322 return makeError(
"expected semantic indices node");
323 for (
unsigned I = 0, E = Indices->getNumOperands();
I != E; ++
I) {
326 return Index.takeError();
335 return makeError(
"invalid interpolation mode");
340 return Rows.takeError();
345 return Cols.takeError();
347 return makeError(
"number of components per row must be within 1-4");
361 return makeError(
"start column must be within 0-3 or unallocated");
366 return makeError(
"start row and column sentinels must be set together");
373 return makeError(
"usage mask must be a 4-bit value");
381 return makeError(
"dynamic index mask must be a 4-bit value");
389 return makeError(
"geometry shader stream index must be within 0-3");
394 "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)
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
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::InterpolationMode getInterpolationMode(InterpolationModifier Modifiers)
LLVM_ABI dxbc::PSV::InterpolationMode normalizeInterpolationMode(dxbc::PSV::InterpolationMode Mode, dxil::ElementType CompType, dxbc::PSV::SemanticKind Kind, Triple::EnvironmentType Stage, IOType IO)
LLVM_ABI InterpolationModifier getInterpolationSamplingLocation(InterpolationModifier Modifiers)
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