21#include <system_error> 
   27static_assert((uint64_t)dxbc::FeatureFlags::NextUnusedBit <= 1ull << 63,
 
   28              "Shader flag bits exceed enum size.");
 
   31#define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str)                      \ 
   32  Val = (FlagData & (uint64_t)dxbc::FeatureFlags::Val) > 0; 
   33#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
   46  auto Table = *TableOrErr;
 
   56  for (
const auto &R : Table.Ranges) {
 
   59        R.OffsetInDescriptorsFromTableStart;
 
   65                               "Invalid value for descriptor range type");
 
   67    if constexpr (std::is_same_v<T, dxbc::RTS0::v2::DescriptorRange>) {
 
   69#define DESCRIPTOR_RANGE_FLAG(Num, Enum, Flag)                                 \ 
   71      (R.Flags & llvm::to_underlying(dxbc::DescriptorRangeFlags::Enum)) != 0; 
   72#include "llvm/BinaryFormat/DXContainerConstants.def" 
   74    TableYaml.
Ranges.push_back(NewR);
 
 
   98                               "Invalid value for parameter type");
 
  101    Header.Offset = PH.ParameterOffset;
 
  105                               "Invalid value for shader visibility");
 
  110        Data.getParameter(PH);
 
  121      auto Constants = *ConstantsOrErr;
 
  130    } 
else if (
auto *RDV =
 
  136      auto Descriptor = *DescriptorOrErr;
 
  145#define ROOT_DESCRIPTOR_FLAG(Num, Enum, Flag)                                  \ 
  146  YamlDescriptor.Enum =                                                        \ 
  147      (Descriptor.Flags &                                                      \ 
  148       llvm::to_underlying(dxbc::RootDescriptorFlags::Enum)) > 0; 
  149#include "llvm/BinaryFormat/DXContainerConstants.def" 
  151    } 
else if (
auto *DTV =
 
  155                Header, RootSigDesc, DTV))
 
  159                Header, RootSigDesc, DTV))
 
  166  for (
const auto &S : 
Data.samplers()) {
 
  169                               "Invalid value for static sampler filter");
 
  173                               "Invalid value for static sampler AddressU");
 
  177                               "Invalid value for static sampler AddressV");
 
  181                               "Invalid value for static sampler AddressW");
 
  185          std::errc::invalid_argument,
 
  186          "Invalid value for static sampler ComparisonFunc");
 
  190                               "Invalid value for static sampler BorderColor");
 
  194          std::errc::invalid_argument,
 
  195          "Invalid value for static sampler ShaderVisibility");
 
  213#define STATIC_SAMPLER_FLAG(Num, Enum, Flag)                                   \ 
  214  NewS.Enum = (S.Flags & llvm::to_underlying(dxbc::StaticSamplerFlags::Enum)); 
  215#include "llvm/BinaryFormat/DXContainerConstants.def" 
  220#define ROOT_SIGNATURE_FLAG(Num, Val)                                          \ 
  221  RootSigDesc.Val = (Flags & llvm::to_underlying(dxbc::RootFlags::Val)) > 0; 
  222#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  228#define ROOT_DESCRIPTOR_FLAG(Num, Enum, Flag)                                  \ 
  230    Flags |= (uint32_t)dxbc::RootDescriptorFlags::Enum; 
  231#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  237#define ROOT_SIGNATURE_FLAG(Num, Val)                                          \ 
  239    Flag |= (uint32_t)dxbc::RootFlags::Val; 
  240#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  246#define DESCRIPTOR_RANGE_FLAG(Num, Enum, Flag)                                 \ 
  248    Flags |= (uint32_t)dxbc::DescriptorRangeFlags::Enum; 
  249#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  255#define STATIC_SAMPLER_FLAG(Num, Enum, Flag)                                   \ 
  257    Flags |= (uint32_t)dxbc::StaticSamplerFlags::Enum; 
  258#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  264#define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str)                      \ 
  266    Flag |= (uint64_t)dxbc::FeatureFlags::Val; 
  267#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  288  assert(Stage < std::numeric_limits<uint8_t>::max() &&
 
  289         "Stage should be a very small number");
 
 
  312                                       P->EntryNameOffset)) {
 
 
  348#define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str)                      \ 
  349  IO.mapRequired(#Val, Flags.Val); 
  350#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  430#define ROOT_SIGNATURE_FLAG(Num, Val) IO.mapOptional(#Val, S.Val, false); 
  431#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  439    if (R.NumDescriptors == UINT_MAX) {
 
  445    int32_t TmpNumDesc = 0;
 
  447    R.NumDescriptors = 
static_cast<uint32_t>(TmpNumDesc);
 
  453                 R.OffsetInDescriptorsFromTableStart);
 
  454#define DESCRIPTOR_RANGE_FLAG(Num, Enum, Flag)                                 \ 
  455  IO.mapOptional(#Flag, R.Enum, false); 
  456#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  473  switch (L.Header.Type) {
 
  474  case dxbc::RootParameterType::Constants32Bit: {
 
  480  case dxbc::RootParameterType::CBV:
 
  481  case dxbc::RootParameterType::SRV:
 
  482  case dxbc::RootParameterType::UAV: {
 
  488  case dxbc::RootParameterType::DescriptorTable: {
 
 
  508#define ROOT_DESCRIPTOR_FLAG(Num, Enum, Flag)                                  \ 
  509  IO.mapOptional(#Flag, D.Enum, false); 
  510#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  529#define STATIC_SAMPLER_FLAG(Num, Enum, Flag)                                   \ 
  530  IO.mapOptional(#Flag, S.Enum, false); 
  531#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  555#define RESOURCE_FLAG(FlagIndex, Enum) IO.mapRequired(#Enum, Flags.Bits.Enum); 
  556#include "llvm/BinaryFormat/DXContainerConstants.def" 
 
  595void ScalarEnumerationTraits<dxbc::PSV::ComponentType>::enumeration(
 
  598    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  601void ScalarEnumerationTraits<dxbc::PSV::InterpolationMode>::enumeration(
 
  602    IO &IO, dxbc::PSV::InterpolationMode &Value) {
 
  603  for (
const auto &
E : dxbc::PSV::getInterpolationModes())
 
  604    IO.enumCase(Value, 
E.Name.str().c_str(), 
E.Value);
 
  607void ScalarEnumerationTraits<dxbc::PSV::ResourceType>::enumeration(
 
  608    IO &IO, dxbc::PSV::ResourceType &
Value) {
 
  609  for (
const auto &
E : dxbc::PSV::getResourceTypes())
 
  610    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  613void ScalarEnumerationTraits<dxbc::PSV::ResourceKind>::enumeration(
 
  614    IO &IO, dxbc::PSV::ResourceKind &
Value) {
 
  615  for (
const auto &
E : dxbc::PSV::getResourceKinds())
 
  616    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  619void ScalarEnumerationTraits<dxbc::D3DSystemValue>::enumeration(
 
  620    IO &IO, dxbc::D3DSystemValue &
Value) {
 
  621  for (
const auto &
E : dxbc::getD3DSystemValues())
 
  622    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  625void ScalarEnumerationTraits<dxbc::SigMinPrecision>::enumeration(
 
  626    IO &IO, dxbc::SigMinPrecision &
Value) {
 
  627  for (
const auto &
E : dxbc::getSigMinPrecisions())
 
  628    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  631void ScalarEnumerationTraits<dxbc::SigComponentType>::enumeration(
 
  632    IO &IO, dxbc::SigComponentType &
Value) {
 
  633  for (
const auto &
E : dxbc::getSigComponentTypes())
 
  634    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  637void ScalarEnumerationTraits<dxbc::RootParameterType>::enumeration(
 
  638    IO &IO, dxbc::RootParameterType &
Value) {
 
  639  for (
const auto &
E : dxbc::getRootParameterTypes())
 
  640    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  643void ScalarEnumerationTraits<dxil::ResourceClass>::enumeration(
 
  644    IO &IO, dxil::ResourceClass &
Value) {
 
  645  const EnumEntry<dxil::ResourceClass> ResourceClasses[] = {
 
  646      {
"CBuffer", dxil::ResourceClass::CBuffer},
 
  647      {
"SRV", dxil::ResourceClass::SRV},
 
  648      {
"UAV", dxil::ResourceClass::UAV},
 
  649      {
"Sampler", dxil::ResourceClass::Sampler},
 
  652  for (
const auto &
E : ResourceClasses)
 
  653    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  656void ScalarEnumerationTraits<dxbc::SamplerFilter>::enumeration(
 
  657    IO &IO, dxbc::SamplerFilter &
Value) {
 
  658  for (
const auto &
E : dxbc::getSamplerFilters())
 
  659    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  662void ScalarEnumerationTraits<dxbc::StaticBorderColor>::enumeration(
 
  663    IO &IO, dxbc::StaticBorderColor &
Value) {
 
  664  for (
const auto &
E : dxbc::getStaticBorderColors())
 
  665    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  668void ScalarEnumerationTraits<dxbc::TextureAddressMode>::enumeration(
 
  669    IO &IO, dxbc::TextureAddressMode &
Value) {
 
  670  for (
const auto &
E : dxbc::getTextureAddressModes())
 
  671    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  674void ScalarEnumerationTraits<dxbc::ShaderVisibility>::enumeration(
 
  675    IO &IO, dxbc::ShaderVisibility &
Value) {
 
  676  for (
const auto &
E : dxbc::getShaderVisibility())
 
  677    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  680void ScalarEnumerationTraits<dxbc::ComparisonFunc>::enumeration(
 
  681    IO &IO, dxbc::ComparisonFunc &
Value) {
 
  682  for (
const auto &
E : dxbc::getComparisonFuncs())
 
  683    IO.enumCase(
Value, 
E.Name.str().c_str(), 
E.Value);
 
  723    IO.
mapRequired(
"GroupSharedBytesDependentOnViewID",
 
  751                   Info.GeomData.SigPatchConstOrPrimVectors);
 
  754    IO.
mapRequired(
"SigPrimVectors", 
Info.GeomData.MeshInfo.SigPrimVectors);
 
  756                   Info.GeomData.MeshInfo.MeshOutputTopology);
 
 
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
 
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
 
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
 
This file declares classes for handling the YAML representation of DXContainer.
 
This file contains library features backported from future STL versions.
 
This file defines the make_scope_exit function, which executes user-defined cleanup logic at scope ex...
 
static StringRef substr(StringRef Str, uint64_t Len)
 
Lightweight error class with error context and mandatory checking.
 
static ErrorSuccess success()
Create a success value.
 
Tagged union holding either a T or a Error.
 
Error takeError()
Take ownership of the stored error.
 
reference get()
Returns a reference to the stored T value.
 
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
 
StringRef - Represent a constant reference to a string, i.e.
 
A table of densely packed, null-terminated strings indexed by offset.
 
LLVM Value Representation.
 
virtual bool outputting() const =0
 
virtual bool mapTag(StringRef Tag, bool Default=false)=0
 
void enumCase(T &Val, StringRef Str, const T ConstVal)
 
void mapOptional(StringRef Key, T &Val)
 
void * getContext() const
 
void mapRequired(StringRef Key, T &Val)
 
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
 
@ C
The default llvm calling convention, compatible with C.
 
dxbc::PSV::ResourceFlags ResourceFlags
 
dxbc::PSV::v2::ResourceBindInfo ResourceBindInfo
 
LLVM_ABI ArrayRef< EnumEntry< ComponentType > > getComponentTypes()
 
LLVM_ABI ArrayRef< EnumEntry< SemanticKind > > getSemanticKinds()
 
bool isValidShaderVisibility(uint32_t V)
 
bool isValidSamplerFilter(uint32_t V)
 
Triple::EnvironmentType getShaderStage(uint32_t Kind)
 
bool isValidBorderColor(uint32_t V)
 
bool isValidComparisonFunc(uint32_t V)
 
bool isValidParameterType(uint32_t V)
 
bool isValidAddress(uint32_t V)
 
bool isValidRangeType(uint32_t V)
 
This is an optimization pass for GlobalISel generic memory operations.
 
auto find(R &&Range, const T &Val)
Provide wrappers to std::find which take ranges instead of having to pass begin/end explicitly.
 
detail::scope_exit< std::decay_t< Callable > > make_scope_exit(Callable &&F)
 
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
 
Error createStringError(std::error_code EC, char const *Fmt, const Ts &... Vals)
Create formatted StringError object.
 
FunctionAddr VTableAddr uintptr_t uintptr_t Version
 
static llvm::Error readDescriptorRanges(DXContainerYAML::RootParameterHeaderYaml &Header, DXContainerYAML::RootSignatureYamlDesc &RootSigDesc, object::DirectX::DescriptorTableView *DTV)
 
FunctionAddr VTableAddr uintptr_t uintptr_t Data
 
uint16_t DXILMajorVersion
 
std::optional< uint32_t > Size
 
uint16_t DXILMinorVersion
 
std::optional< std::vector< llvm::yaml::Hex8 > > DXIL
 
std::optional< uint32_t > DXILSize
 
uint32_t OffsetInDescriptorsFromTableStart
 
uint32_t BaseShaderRegister
 
LLVM_ABI uint32_t getEncodedFlags() const
 
dxil::ResourceClass RangeType
 
SmallVector< DescriptorRangeYaml > Ranges
 
std::vector< Part > Parts
 
std::array< MaskVector, 4 > InputOutputMap
 
MaskVector PatchOutputMap
 
SmallVector< SignatureElement > SigOutputElements
 
MaskVector PatchOrPrimMasks
 
SmallVector< SignatureElement > SigPatchOrPrimElements
 
SmallVector< ResourceBindInfo > Resources
 
SmallVector< SignatureElement > SigInputElements
 
LLVM_ABI void mapInfoForVersion(yaml::IO &IO)
 
dxbc::PSV::v3::RuntimeInfo Info
 
std::array< MaskVector, 4 > OutputVectorMasks
 
LLVM_ABI uint32_t getEncodedFlags() const
 
RootDescriptorYaml & getOrInsertDescriptor(RootParameterLocationYaml &ParamDesc)
 
SmallVector< RootParameterLocationYaml > Locations
 
RootConstantsYaml & getOrInsertConstants(RootParameterLocationYaml &ParamDesc)
 
void insertLocation(RootParameterLocationYaml &Location)
 
DescriptorTableYaml & getOrInsertTable(RootParameterLocationYaml &ParamDesc)
 
uint32_t NumRootParameters
 
uint32_t NumStaticSamplers
 
SmallVector< StaticSamplerYamlDesc > StaticSamplers
 
std::optional< uint32_t > RootParametersOffset
 
RootSignatureYamlDesc()=default
 
LLVM_ABI uint32_t getEncodedFlags()
 
static LLVM_ABI llvm::Expected< DXContainerYAML::RootSignatureYamlDesc > create(const object::DirectX::RootSignature &Data)
 
RootParameterYamlDesc Parameters
 
std::optional< uint32_t > StaticSamplersOffset
 
ShaderFeatureFlags()=default
 
LLVM_ABI 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
 
dxbc::SigComponentType CompType
 
dxbc::SigMinPrecision MinPrecision
 
dxbc::D3DSystemValue SystemValue
 
llvm::SmallVector< SignatureParameter > Parameters
 
dxbc::StaticBorderColor BorderColor
 
dxbc::ShaderVisibility ShaderVisibility
 
dxbc::TextureAddressMode AddressU
 
dxbc::SamplerFilter Filter
 
dxbc::ComparisonFunc ComparisonFunc
 
dxbc::TextureAddressMode AddressV
 
LLVM_ABI uint32_t getEncodedFlags() const
 
dxbc::TextureAddressMode AddressW
 
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
 
llvm::Expected< DescriptorTable< T > > read()
 
This class is similar to MappingTraits<T> but allows you to pass in additional context for each map o...
 
This class should be specialized by any type that needs to be converted to/from a YAML mapping.
 
This class should be specialized by any integral type that converts to/from a YAML scalar where there...