23static_assert((
uint64_t)dxbc::FeatureFlags::NextUnusedBit <= 1ull << 63,
24 "Shader flag bits exceed enum size.");
27#define SHADER_FLAG(Num, Val, Str) \
28 Val = (FlagData & (uint64_t)dxbc::FeatureFlags::Val) > 0;
29#include "llvm/BinaryFormat/DXContainerConstants.def"
34#define SHADER_FLAG(Num, Val, Str) \
36 Flag |= (uint64_t)dxbc::FeatureFlags::Val;
37#include "llvm/BinaryFormat/DXContainerConstants.def"
43 dxbc::HashFlags::IncludesSource)) != 0),
58 assert(Stage < std::numeric_limits<uint8_t>::max() &&
59 "Stage should be a very small number");
81 IO.mapRequired(
"Major", Version.Major);
82 IO.mapRequired(
"Minor", Version.Minor);
87 IO.mapRequired(
"Hash", Header.Hash);
88 IO.mapRequired(
"Version", Header.Version);
89 IO.mapOptional(
"FileSize", Header.FileSize);
90 IO.mapRequired(
"PartCount", Header.PartCount);
91 IO.mapOptional(
"PartOffsets", Header.PartOffsets);
98 IO.mapRequired(
"ShaderKind", Program.
ShaderKind);
99 IO.mapOptional(
"Size", Program.
Size);
102 IO.mapOptional(
"DXILSize", Program.
DXILSize);
103 IO.mapOptional(
"DXIL", Program.
DXIL);
108#define SHADER_FLAG(Num, Val, Str) IO.mapRequired(#Val, Flags.Val);
109#include "llvm/BinaryFormat/DXContainerConstants.def"
115 IO.mapRequired(
"Digest", Hash.
Digest);
120 IO.mapRequired(
"Version", PSV.
Version);
123 void *OldContext = IO.getContext();
125 IO.setContext(&Version);
128 auto RestoreContext =
make_scope_exit([&]() { IO.setContext(OldContext); });
136 IO.mapRequired(
"Resources", PSV.
Resources);
147 IO.mapRequired(
"OutputVectorMasks", MutableOutMasks);
148 if (Stage == Triple::EnvironmentType::Hull)
153 IO.mapRequired(
"InputOutputMap", MutableIOMap);
155 if (Stage == Triple::EnvironmentType::Hull)
158 if (Stage == Triple::EnvironmentType::Domain)
164 IO.mapRequired(
"Name",
P.Name);
165 IO.mapRequired(
"Size",
P.Size);
166 IO.mapOptional(
"Program",
P.Program);
167 IO.mapOptional(
"Flags",
P.Flags);
168 IO.mapOptional(
"Hash",
P.Hash);
169 IO.mapOptional(
"PSVInfo",
P.Info);
174 IO.mapTag(
"!dxcontainer",
true);
175 IO.mapRequired(
"Header", Obj.
Header);
176 IO.mapRequired(
"Parts", Obj.
Parts);
181 IO.mapRequired(
"Type", Res.
Type);
182 IO.mapRequired(
"Space", Res.
Space);
190 IO.mapRequired(
"Kind", Res.
Kind);
191 IO.mapRequired(
"Flags", Res.
Flags);
196 IO.mapRequired(
"Name", El.
Name);
197 IO.mapRequired(
"Indices", El.
Indices);
198 IO.mapRequired(
"StartRow", El.
StartRow);
199 IO.mapRequired(
"Cols", El.
Cols);
200 IO.mapRequired(
"StartCol", El.
StartCol);
201 IO.mapRequired(
"Allocated", El.
Allocated);
202 IO.mapRequired(
"Kind", El.
Kind);
203 IO.mapRequired(
"ComponentType", El.
Type);
204 IO.mapRequired(
"Interpolation", El.
Mode);
206 IO.mapRequired(
"Stream", El.
Stream);
209void ScalarEnumerationTraits<dxbc::PSV::SemanticKind>::enumeration(
211 for (
const auto &
E : dxbc::PSV::getSemanticKinds())
212 IO.enumCase(
Value,
E.Name.str().c_str(),
E.Value);
215void ScalarEnumerationTraits<dxbc::PSV::ComponentType>::enumeration(
217 for (
const auto &
E : dxbc::PSV::getComponentTypes())
218 IO.enumCase(
Value,
E.Name.str().c_str(),
E.Value);
221void ScalarEnumerationTraits<dxbc::PSV::InterpolationMode>::enumeration(
222 IO &IO, dxbc::PSV::InterpolationMode &Value) {
223 for (
const auto &
E : dxbc::PSV::getInterpolationModes())
224 IO.enumCase(Value,
E.Name.str().c_str(),
E.Value);
248 IO.mapRequired(
"InputControlPointCount",
250 IO.mapRequired(
"OutputControlPointCount",
253 IO.mapRequired(
"TessellatorOutputPrimitive",
257 IO.mapRequired(
"InputControlPointCount",
264 IO.mapRequired(
"GroupSharedBytesDependentOnViewID",
277 IO.mapRequired(
"MinimumWaveLaneCount",
Info.MinimumWaveLaneCount);
278 IO.mapRequired(
"MaximumWaveLaneCount",
Info.MaximumWaveLaneCount);
283 IO.mapRequired(
"UsesViewID",
Info.UsesViewID);
287 IO.mapRequired(
"MaxVertexCount",
Info.GeomData.MaxVertexCount);
291 IO.mapRequired(
"SigPatchConstOrPrimVectors",
292 Info.GeomData.SigPatchConstOrPrimVectors);
295 IO.mapRequired(
"SigPrimVectors",
Info.GeomData.MeshInfo.SigPrimVectors);
296 IO.mapRequired(
"MeshOutputTopology",
297 Info.GeomData.MeshInfo.MeshOutputTopology);
303 IO.mapRequired(
"SigInputVectors",
Info.SigInputVectors);
305 IO.mapRequired(
"SigOutputVectors", Vec);
310 IO.mapRequired(
"NumThreadsX",
Info.NumThreadsX);
311 IO.mapRequired(
"NumThreadsY",
Info.NumThreadsY);
312 IO.mapRequired(
"NumThreadsZ",
Info.NumThreadsZ);
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
Analysis containing CSE Info
This file declares classes for handling the YAML representation of DXContainer.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This file defines the make_scope_exit function, which executes user-defined cleanup logic at scope ex...
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
LLVM Value Representation.
Triple::EnvironmentType getShaderStage(uint32_t Kind)
This is an optimization pass for GlobalISel generic memory operations.
detail::scope_exit< std::decay_t< Callable > > make_scope_exit(Callable &&F)
uint16_t DXILMajorVersion
std::optional< uint32_t > Size
uint16_t DXILMinorVersion
std::optional< std::vector< llvm::yaml::Hex8 > > DXIL
std::optional< uint32_t > DXILSize
std::vector< Part > Parts
std::array< MaskVector, 4 > InputOutputMap
MaskVector PatchOutputMap
SmallVector< SignatureElement > SigOutputElements
dxbc::PSV::v2::RuntimeInfo Info
MaskVector PatchOrPrimMasks
SmallVector< SignatureElement > SigPatchOrPrimElements
SmallVector< ResourceBindInfo > Resources
SmallVector< SignatureElement > SigInputElements
void mapInfoForVersion(yaml::IO &IO)
std::array< MaskVector, 4 > OutputVectorMasks
uint64_t getEncodedFlags()
std::vector< llvm::yaml::Hex8 > Digest
dxbc::PSV::ComponentType Type
dxbc::PSV::InterpolationMode Mode
llvm::yaml::Hex8 DynamicMask
dxbc::PSV::SemanticKind Kind
SmallVector< uint32_t > Indices
uint32_t PayloadSizeInBytes
uint32_t InputControlPointCount
uint32_t TessellatorDomain
uint8_t OutputPositionPresent
uint8_t OutputPositionPresent
uint32_t OutputStreamMask
uint32_t TessellatorOutputPrimitive
uint32_t OutputControlPointCount
uint32_t InputControlPointCount
uint32_t TessellatorDomain
uint32_t PayloadSizeInBytes
uint16_t MaxOutputVertices
uint16_t MaxOutputPrimitives
uint32_t GroupSharedBytesDependentOnViewID
uint32_t GroupSharedBytesUsed
uint8_t OutputPositionPresent