LLVM 23.0.0git
DXContainer.cpp
Go to the documentation of this file.
1
2//===-- llvm/BinaryFormat/DXContainer.cpp - DXContainer Utils ----*- C++-*-===//
3//
4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9//
10// This file contains utility functions for working with DXContainers.
11//
12//===----------------------------------------------------------------------===//
13
17
18using namespace llvm;
19using namespace llvm::dxbc;
20
21#define ROOT_PARAMETER(Val, Enum) \
22 case Val: \
23 return true;
25 switch (V) {
26#include "llvm/BinaryFormat/DXContainerConstants.def"
27 }
28 return false;
29}
30
34
35#define SHADER_VISIBILITY(Val, Enum) \
36 case Val: \
37 return true;
39 switch (V) {
40#include "llvm/BinaryFormat/DXContainerConstants.def"
41 }
42 return false;
43}
44
45#define FILTER(Val, Enum) \
46 case Val: \
47 return true;
49 switch (V) {
50#include "llvm/BinaryFormat/DXContainerConstants.def"
51 }
52 return false;
53}
54
55#define TEXTURE_ADDRESS_MODE(Val, Enum) \
56 case Val: \
57 return true;
59 switch (V) {
60#include "llvm/BinaryFormat/DXContainerConstants.def"
61 }
62 return false;
63}
64
65#define COMPARISON_FUNC(Val, Enum) \
66 case Val: \
67 return true;
69 switch (V) {
70#include "llvm/BinaryFormat/DXContainerConstants.def"
71 }
72 return false;
73}
74
75#define STATIC_BORDER_COLOR(Val, Enum) \
76 case Val: \
77 return true;
79 switch (V) {
80#include "llvm/BinaryFormat/DXContainerConstants.def"
81 }
82 return false;
83}
84
86 using FlagT = dxbc::RootDescriptorFlags;
87 uint32_t LargestValue =
88 llvm::to_underlying(FlagT::LLVM_BITMASK_LARGEST_ENUMERATOR);
89 return V < NextPowerOf2(LargestValue);
90}
91
93 using FlagT = dxbc::DescriptorRangeFlags;
94 uint32_t LargestValue =
95 llvm::to_underlying(FlagT::LLVM_BITMASK_LARGEST_ENUMERATOR);
96 return V < NextPowerOf2(LargestValue);
97}
98
100 using FlagT = dxbc::StaticSamplerFlags;
101 uint32_t LargestValue =
102 llvm::to_underlying(FlagT::LLVM_BITMASK_LARGEST_ENUMERATOR);
103 return V < NextPowerOf2(LargestValue);
104}
105
107#define CONTAINER_PART(PartName) .Case(#PartName, PartType::PartName)
109#include "llvm/BinaryFormat/DXContainerConstants.def"
111}
112
113bool dxbc::isDebugProgramPart(PartType PT) { return PT == PartType::ILDB; }
114
115const char *dxbc::getProgramPartName(bool IsDebug) {
116 return IsDebug ? "ILDB" : "DXIL";
117}
118
120 static uint8_t Zeros[16] = {0};
121 return Flags > 0 || 0 != memcmp(&Digest, &Zeros, 16);
122}
123
124#define COMPONENT_PRECISION(Val, Enum) {#Enum, SigMinPrecision::Enum},
125
127#include "llvm/BinaryFormat/DXContainerConstants.def"
128};
129
133
134#define D3D_SYSTEM_VALUE(Val, Enum) {#Enum, D3DSystemValue::Enum},
135
137#include "llvm/BinaryFormat/DXContainerConstants.def"
138};
139
143
144#define COMPONENT_TYPE(Val, Enum) {#Enum, SigComponentType::Enum},
145
147#include "llvm/BinaryFormat/DXContainerConstants.def"
148};
149
153
155#define ROOT_SIGNATURE_FLAG(Val, Enum) {#Enum, RootFlags::Enum},
156#include "llvm/BinaryFormat/DXContainerConstants.def"
157};
158
162
164#define ROOT_DESCRIPTOR_FLAG(Val, Enum, Flag) \
165 {#Enum, RootDescriptorFlags::Enum},
166#include "llvm/BinaryFormat/DXContainerConstants.def"
167};
168
172
174#define DESCRIPTOR_RANGE_FLAG(Val, Enum, Flag) \
175 {#Enum, DescriptorRangeFlags::Enum},
176#include "llvm/BinaryFormat/DXContainerConstants.def"
177};
178
182
184#define STATIC_SAMPLER_FLAG(Val, Enum, Flag) {#Enum, StaticSamplerFlags::Enum},
185#include "llvm/BinaryFormat/DXContainerConstants.def"
186};
187
191
192#define SHADER_VISIBILITY(Val, Enum) {#Enum, ShaderVisibility::Enum},
193
195#include "llvm/BinaryFormat/DXContainerConstants.def"
196};
197
201
202#define FILTER(Val, Enum) {#Enum, SamplerFilter::Enum},
203
205#include "llvm/BinaryFormat/DXContainerConstants.def"
206};
207
211
212#define TEXTURE_ADDRESS_MODE(Val, Enum) {#Enum, TextureAddressMode::Enum},
213
215#include "llvm/BinaryFormat/DXContainerConstants.def"
216};
217
221
222#define COMPARISON_FUNC(Val, Enum) {#Enum, ComparisonFunc::Enum},
223
225#include "llvm/BinaryFormat/DXContainerConstants.def"
226};
227
231
232#define STATIC_BORDER_COLOR(Val, Enum) {#Enum, StaticBorderColor::Enum},
233
235#include "llvm/BinaryFormat/DXContainerConstants.def"
236};
237
241
242#define ROOT_PARAMETER(Val, Enum) {#Enum, RootParameterType::Enum},
243
245#include "llvm/BinaryFormat/DXContainerConstants.def"
246};
247
251
252#define SEMANTIC_KIND(Val, Enum) {#Enum, PSV::SemanticKind::Enum},
253
255#include "llvm/BinaryFormat/DXContainerConstants.def"
256};
257
261
262#define COMPONENT_TYPE(Val, Enum) {#Enum, PSV::ComponentType::Enum},
263
265#include "llvm/BinaryFormat/DXContainerConstants.def"
266};
267
271
272#define INTERPOLATION_MODE(Val, Enum) {#Enum, PSV::InterpolationMode::Enum},
273
275#include "llvm/BinaryFormat/DXContainerConstants.def"
276};
277
281
282#define RESOURCE_TYPE(Val, Enum) {#Enum, PSV::ResourceType::Enum},
283
285#include "llvm/BinaryFormat/DXContainerConstants.def"
286};
287
291
292#define RESOURCE_KIND(Val, Enum) {#Enum, PSV::ResourceKind::Enum},
293
295#include "llvm/BinaryFormat/DXContainerConstants.def"
296};
297
static const EnumEntry< DescriptorRangeFlags > DescriptorRangeFlagNames[]
static const EnumEntry< ShaderVisibility > ShaderVisibilityValues[]
static const EnumEntry< D3DSystemValue > D3DSystemValueNames[]
static const EnumEntry< PSV::InterpolationMode > InterpolationModeNames[]
static const EnumEntry< SigMinPrecision > SigMinPrecisionNames[]
static const EnumEntry< StaticSamplerFlags > StaticSamplerFlagNames[]
static const EnumEntry< SamplerFilter > SamplerFilterNames[]
static const EnumEntry< RootParameterType > RootParameterTypes[]
static const EnumEntry< PSV::SemanticKind > SemanticKindNames[]
static const EnumEntry< PSV::ResourceType > ResourceTypeNames[]
static const EnumEntry< StaticBorderColor > StaticBorderColorValues[]
static const EnumEntry< RootFlags > RootFlagNames[]
static const EnumEntry< ComparisonFunc > ComparisonFuncNames[]
static const EnumEntry< PSV::ResourceKind > ResourceKindNames[]
static const EnumEntry< RootDescriptorFlags > RootDescriptorFlagNames[]
static const EnumEntry< TextureAddressMode > TextureAddressModeNames[]
static const EnumEntry< SigComponentType > SigComponentTypes[]
static const EnumEntry< PSV::ComponentType > ComponentTypeNames[]
This file implements the StringSwitch template, which mimics a switch() statement whose cases are str...
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
A switch()-like statement whose cases are string literals.
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)
LLVM_ABI ArrayRef< EnumEntry< SigComponentType > > getSigComponentTypes()
bool isDebugProgramPart(PartType PT)
LLVM_ABI ArrayRef< EnumEntry< SigMinPrecision > > getSigMinPrecisions()
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)
LLVM_ABI_FOR_TEST bool isValidParameterType(uint32_t V)
const char * getProgramPartName(bool IsDebug)
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()
This is an optimization pass for GlobalISel generic memory operations.
constexpr std::underlying_type_t< Enum > to_underlying(Enum E)
Returns underlying integer value of an enum.
ArrayRef(const T &OneElt) -> ArrayRef< T >
constexpr uint64_t NextPowerOf2(uint64_t A)
Returns the next power of two (in 64-bits) that is strictly greater than A.
Definition MathExtras.h:373
LLVM_ABI bool isPopulated()