1//===-- llvm/BinaryFormat/DXContainer.h - The DXBC file format --*- C++/-*-===//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//===----------------------------------------------------------------------===//
9// This file defines manifest constants for the DXContainer object file format.
11//===----------------------------------------------------------------------===//
13#ifndef LLVM_BINARYFORMAT_DXCONTAINER_H
14#define LLVM_BINARYFORMAT_DXCONTAINER_H
29// The DXContainer file format is arranged as a header and "parts". Semantically
30// parts are similar to sections in other object file formats. The File format
31// structure is roughly:
33// ┌────────────────────────────────┐
35// ├────────────────────────────────┤
37// ├────────────────────────────────┤
39// ├────────────────────────────────┤
41// └────────────────────────────────┘
49 "Shader kind out of expected range.");
58 None = 0,
// No flags defined.
60 // taking into account source information (-Zss)
94 // Structure is followed by part offsets: uint32_t PartOffset[PartCount];
95 // The offset is to a PartHeader, which is followed by the Part Data.
98/// Use this type to describe the size and type of a DXIL container part.
105 return StringRef(
reinterpret_cast<const char *
>(&
Name[0]), 4);
107 // Structure is followed directly by part data: uint8_t PartData[PartSize].
117 // Followed by uint8_t[BitcodeHeader.Size] at &BitcodeHeader + Header.Offset
142 return (Major << 4) | Minor;
146static_assert(
sizeof(ProgramHeader) == 24,
"ProgramHeader Size incorrect!");
148 #define CONTAINER_PART(Part) Part,
151#include "DXContainerConstants.def"
154 #define SHADER_FEATURE_FLAG(Num, DxilModuleNum, Val, Str) Val = 1ull << Num,
156#include "DXContainerConstants.def"
158static_assert((
uint64_t)FeatureFlags::NextUnusedBit <= 1ull << 63,
159 "Shader flag bits exceed enum size.");
161 #define ROOT_SIGNATURE_FLAG(Num, Val) Val = Num,
163#include "DXContainerConstants.def"
170 #define ROOT_DESCRIPTOR_FLAG(Num, Enum, Flag) Enum = Num,
172#include "DXContainerConstants.def"
179 #define DESCRIPTOR_RANGE_FLAG(Num, Enum, Flag) Enum = Num,
181#include "DXContainerConstants.def"
188 #define STATIC_SAMPLER_FLAG(Num, Enum, Flag) Enum = Num,
190#include "DXContainerConstants.def"
197 #define ROOT_PARAMETER(Val, Enum) Enum = Val,
199#include "DXContainerConstants.def"
208 #define SHADER_VISIBILITY(Val, Enum) Enum = Val,
210#include "DXContainerConstants.def"
217 #define FILTER(Val, Enum) Enum = Val,
219#include "DXContainerConstants.def"
226 #define TEXTURE_ADDRESS_MODE(Val, Enum) Enum = Val,
228#include "DXContainerConstants.def"
235 #define COMPARISON_FUNC(Val, Enum) Enum = Val,
237#include "DXContainerConstants.def"
244 #define STATIC_BORDER_COLOR(Val, Enum) Enum = Val,
246#include "DXContainerConstants.def"
380static_assert(
sizeof(PipelinePSVInfo) == 4 *
sizeof(
uint32_t),
381 "Pipeline-specific PSV info must fit in 16 bytes.");
385 #define SEMANTIC_KIND(Val, Enum) Enum = Val,
387#include "DXContainerConstants.def"
392 #define COMPONENT_TYPE(Val, Enum) Enum = Val,
394#include "DXContainerConstants.def"
399 #define INTERPOLATION_MODE(Val, Enum) Enum = Val,
401#include "DXContainerConstants.def"
406 #define RESOURCE_TYPE(Val, Enum) Enum = Val,
408#include "DXContainerConstants.def"
413 #define RESOURCE_KIND(Val, Enum) Enum = Val,
415#include "DXContainerConstants.def"
420 #define RESOURCE_FLAG(Index, Enum) bool Enum = false;
424#include "llvm/BinaryFormat/DXContainerConstants.def"
438 // 0xffffffff if unused
440 // Skip the union because we don't know which field it has
487static_assert(
sizeof(SignatureElement) == 4 *
sizeof(
uint32_t),
488 "PSV Signature elements must fit in 16 bytes.");
502 // Primitive output for MS (overlaps
503 // MeshInfo::SigPrimVectors)
511 // PSVSignatureElement counts
516 // Number of packed vectors per signature
521 // nothing to swap since everything is single-byte or a union field
580 #define COMPONENT_PRECISION(Val, Enum) Enum = Val,
582#include "DXContainerConstants.def"
587 #define D3D_SYSTEM_VALUE(Val, Enum) Enum = Val,
589#include "DXContainerConstants.def"
594#define COMPONENT_TYPE(Val, Enum) Enum = Val,
596#include "DXContainerConstants.def"
615 // the start of the null terminated string for the name.
622 // The ExclusiveMask has a different meaning for input and output signatures.
623 // For an output signature, masked components of the output register are never
625 // For an input signature, masked components of the input register are always
645static_assert(
sizeof(ProgramSignatureElement) == 32,
646 "ProgramSignatureElement is misaligned");
705// following dx12 naming
706// https://learn.microsoft.com/en-us/windows/win32/api/d3d12/ns-d3d12-d3d12_root_constants
799// D3D_ROOT_SIGNATURE_VERSION
809#endif // LLVM_BINARYFORMAT_DXCONTAINER_H
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
StringRef - Represent a constant reference to a string, i.e.
LLVM_ABI ArrayRef< EnumEntry< ResourceKind > > getResourceKinds()
LLVM_ABI ArrayRef< EnumEntry< ComponentType > > getComponentTypes()
LLVM_ABI ArrayRef< EnumEntry< ResourceType > > getResourceTypes()
LLVM_ABI ArrayRef< EnumEntry< SemanticKind > > getSemanticKinds()
LLVM_ABI ArrayRef< EnumEntry< InterpolationMode > > getInterpolationModes()
LLVM_ABI ArrayRef< EnumEntry< ComparisonFunc > > getComparisonFuncs()
LLVM_ABI ArrayRef< EnumEntry< ShaderVisibility > > getShaderVisibility()
bool isValidShaderVisibility(uint32_t V)
LLVM_ABI PartType parsePartType(StringRef S)
bool isValidSamplerFilter(uint32_t V)
bool isValidStaticSamplerFlags(uint32_t V)
LLVM_ABI ArrayRef< EnumEntry< RootFlags > > getRootFlags()
LLVM_ABI ArrayRef< EnumEntry< RootParameterType > > getRootParameterTypes()
bool isValidRootDesciptorFlags(uint32_t V)
Triple::EnvironmentType getShaderStage(uint32_t Kind)
LLVM_ABI ArrayRef< EnumEntry< SigComponentType > > getSigComponentTypes()
LLVM_ABI ArrayRef< EnumEntry< SigMinPrecision > > getSigMinPrecisions()
LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE()
LLVM_ABI ArrayRef< EnumEntry< DescriptorRangeFlags > > getDescriptorRangeFlags()
LLVM_ABI ArrayRef< EnumEntry< SamplerFilter > > getSamplerFilters()
LLVM_ABI ArrayRef< EnumEntry< D3DSystemValue > > getD3DSystemValues()
bool isValidDescriptorRangeFlags(uint32_t V)
bool isValidBorderColor(uint32_t V)
bool isValidComparisonFunc(uint32_t V)
bool isValidParameterType(uint32_t V)
LLVM_ABI ArrayRef< EnumEntry< StaticBorderColor > > getStaticBorderColors()
bool isValidAddress(uint32_t V)
LLVM_ABI ArrayRef< EnumEntry< TextureAddressMode > > getTextureAddressModes()
bool isValidRangeType(uint32_t V)
LLVM_ABI ArrayRef< EnumEntry< StaticSamplerFlags > > getStaticSamplerFlags()
LLVM_ABI ArrayRef< EnumEntry< RootDescriptorFlags > > getRootDescriptorFlags()
void swapByteOrder(T &Value)
This is an optimization pass for GlobalISel generic memory operations.
@ LLVM_MARK_AS_BITMASK_ENUM
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
bool operator==(const uint32_t RFlags) const
uint32_t MaximumWaveLaneCount
PipelinePSVInfo StageInfo
void swapBytes(Triple::EnvironmentType Stage)
uint32_t MinimumWaveLaneCount
uint8_t MeshOutputTopology
GeometryExtraInfo GeomData
uint8_t SigPatchOrPrimElements
uint8_t SigOutputVectors[4]
void swapBytes(Triple::EnvironmentType Stage)
uint8_t SigOutputElements
void swapBytes(Triple::EnvironmentType Stage)
void swapBytes(Triple::EnvironmentType Stage)
SigMinPrecision MinPrecision
D3DSystemValue SystemValue
SigComponentType CompType
uint32_t BaseShaderRegister
uint32_t OffsetInDescriptorsFromTableStart
uint32_t ShaderVisibility
uint32_t OffsetInDescriptorsFromTableStart
uint32_t BaseShaderRegister
RootDescriptor(v1::RootDescriptor &Base)
StaticSampler(v1::StaticSampler &Base)
LLVM_ABI bool isPopulated()
uint8_t OutputPositionPresent
void swapBytes(Triple::EnvironmentType Stage)