24 case dxil::ResourceClass::SRV:
26 case dxil::ResourceClass::UAV:
28 case dxil::ResourceClass::CBuffer:
30 case dxil::ResourceClass::Sampler:
38 case dxil::ResourceClass::SRV:
40 case dxil::ResourceClass::UAV:
42 case dxil::ResourceClass::CBuffer:
44 case dxil::ResourceClass::Sampler:
53 case dxil::ElementType::I1:
55 case dxil::ElementType::I16:
57 case dxil::ElementType::U16:
59 case dxil::ElementType::I32:
61 case dxil::ElementType::U32:
63 case dxil::ElementType::I64:
65 case dxil::ElementType::U64:
67 case dxil::ElementType::F16:
69 case dxil::ElementType::F32:
71 case dxil::ElementType::F64:
73 case dxil::ElementType::SNormF16:
75 case dxil::ElementType::UNormF16:
77 case dxil::ElementType::SNormF32:
79 case dxil::ElementType::UNormF32:
81 case dxil::ElementType::SNormF64:
83 case dxil::ElementType::UNormF64:
85 case dxil::ElementType::PackedS8x32:
87 case dxil::ElementType::PackedU8x32:
89 case dxil::ElementType::Invalid:
102 case dxil::ResourceKind::Texture1D:
104 case dxil::ResourceKind::Texture2D:
106 case dxil::ResourceKind::Texture3D:
108 case dxil::ResourceKind::TextureCube:
110 case dxil::ResourceKind::Texture1DArray:
112 case dxil::ResourceKind::Texture2DArray:
114 case dxil::ResourceKind::TextureCubeArray:
116 case dxil::ResourceKind::TBuffer:
118 case dxil::ResourceKind::FeedbackTexture2D:
120 case dxil::ResourceKind::FeedbackTexture2DArray:
121 return "fbtex2darray";
122 case dxil::ResourceKind::Texture2DMS:
124 case dxil::ResourceKind::Texture2DMSArray:
126 case dxil::ResourceKind::Invalid:
127 case dxil::ResourceKind::NumEntries:
128 case dxil::ResourceKind::CBuffer:
129 case dxil::ResourceKind::RawBuffer:
130 case dxil::ResourceKind::Sampler:
131 case dxil::ResourceKind::StructuredBuffer:
132 case dxil::ResourceKind::TypedBuffer:
133 case dxil::ResourceKind::RTAccelerationStructure:
140struct FormatResourceDimension
144 HasCounter(HasCounter) {}
153 if (Item.isMultiSample())
154 OS << Item.getMultiSampleCount();
179struct FormatBindingID
186 RC(RTI.getResourceClass()) {}
193struct FormatBindingLocation
200 RC(RTI.getResourceClass()) {}
203 const auto &
Binding = Item.getBinding();
210struct FormatBindingSize
217 if (
Size == std::numeric_limits<uint32_t>::max())
229 OS <<
";\n; Resource Bindings:\n;\n";
230 OS <<
formatv(
"; {0,-30} {1,10} {2,7} {3,11} {4,7} {5,14} {6,9}\n",
"Name",
231 "Type",
"Format",
"Dim",
"ID",
"HLSL Bind",
"Count");
233 "; {0,-+30} {1,-+10} {2,-+7} {3,-+11} {4,-+7} {5,-+14} {6,-+9}\n",
"",
"",
244 FormatResourceDimension Dim(RTI, RI.hasCounter());
245 FormatBindingID
ID(RI, RTI);
246 FormatBindingLocation Bind(RI, RTI);
247 FormatBindingSize Count(RI);
248 OS <<
formatv(
"; {0,-30} {1,10} {2,7} {3,11} {4,7} {5,14} {6,9}\n",
Name,
249 Type, Format, Dim,
ID, Bind, Count);
272 return "DXIL Metadata Pretty Printer";
275 bool runOnModule(
Module &M)
override;
284char DXILPrettyPrinterLegacy::ID = 0;
286 "DXIL Metadata Pretty Printer",
true,
true)
292bool DXILPrettyPrinterLegacy::runOnModule(
Module &M) {
294 getAnalysis<DXILResourceWrapperPass>().getResourceMap();
296 getAnalysis<DXILResourceTypeWrapperPass>().getResourceTypeMap();
302 return new DXILPrettyPrinterLegacy(
OS);
static StringRef getTextureDimName(dxil::ResourceKind RK)
static void prettyPrintResources(raw_ostream &OS, const DXILResourceMap &DRM, DXILResourceTypeMap &DRTM)
static StringRef getRCPrefix(dxil::ResourceClass RC)
static StringRef getFormatName(const dxil::ResourceTypeInfo &RI)
dxil pretty DXIL Metadata Pretty Printer
static StringRef getRCName(dxil::ResourceClass RC)
DXIL Resource Implicit Binding
This header defines various interfaces for pass management in LLVM.
ModuleAnalysisManager MAM
#define INITIALIZE_PASS_DEPENDENCY(depName)
#define INITIALIZE_PASS_END(passName, arg, name, cfg, analysis)
#define INITIALIZE_PASS_BEGIN(passName, arg, name, cfg, analysis)
A container for analyses that lazily runs them and caches their results.
PassT::Result & getResult(IRUnitT &IR, ExtraArgTs... ExtraArgs)
Get the result of an analysis pass for a given IR unit.
Represent the analysis usage information of a pass.
AnalysisUsage & addRequired()
void setPreservesAll()
Set by analyses that do not transform their input at all.
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
A Module instance is used to store all the information related to an LLVM module.
A set of analyses that are preserved following a run of a transformation pass.
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
StringRef - Represent a constant reference to a string, i.e.
LLVM_ABI std::string upper() const
Convert the given ASCII string to uppercase.
The instances of the Type class are immutable: once they are created, they are never changed.
dxil::ResourceClass getResourceClass() const
LLVM_ABI bool isSampler() const
LLVM_ABI bool isTyped() const
LLVM_ABI bool isCBuffer() const
LLVM_ABI TypedInfo getTyped() const
LLVM_ABI bool isStruct() const
This class implements an extremely fast bulk output stream that can only output to a stream.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
ResourceKind
The kind of resource for an SRV or UAV resource.
@ RTAccelerationStructure
This is an optimization pass for GlobalISel generic memory operations.
auto formatv(bool Validate, const char *Fmt, Ts &&...Vals)
ModulePass * createDXILPrettyPrinterLegacyPass(raw_ostream &OS)
Pass to pretty print DXIL metadata.
dxil::ElementType ElementTy