15#ifndef LLVM_OBJECT_DXCONTAINER_H
16#define LLVM_OBJECT_DXCONTAINER_H
35 struct ResourceArray {
39 ResourceArray() =
default;
94 iterator begin()
const {
return iterator(*
this,
Data.begin()); }
96 iterator end()
const {
return iterator(*
this,
Data.end()); }
98 size_t size()
const {
return Data.size() / Stride; }
104 std::variant<std::monostate, dxbc::PSV::v0::RuntimeInfo,
105 dxbc::PSV::v1::RuntimeInfo, dxbc::PSV::v2::RuntimeInfo>;
106 InfoStruct BasicInfo;
107 ResourceArray Resources;
125 const InfoStruct &
getInfo()
const {
return BasicInfo; }
132 using DXILData = std::pair<dxbc::ProgramHeader, const char *>;
140 std::optional<DXILData> DXIL;
141 std::optional<uint64_t> ShaderFlags;
142 std::optional<dxbc::ShaderHash> Hash;
143 std::optional<DirectX::PSVRuntimeInfo> PSVInfo;
146 Error parsePartOffsets();
170 : Container(
C), OffsetIt(It) {
171 if (OffsetIt == Container.PartOffsets.
end())
172 updateIteratorImpl(Container.PartOffsets.
back());
180 void updateIterator() {
181 if (OffsetIt != Container.PartOffsets.
end())
182 updateIteratorImpl(*OffsetIt);
191 if (OffsetIt == Container.PartOffsets.
end())
205 return OffsetIt ==
RHS.OffsetIt;
209 return OffsetIt !=
RHS.OffsetIt;
227 const std::optional<DXILData> &
getDXIL()
const {
return DXIL; }
233 const std::optional<DirectX::PSVRuntimeInfo> &
getPSVInfo()
const {
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
This file defines the SmallVector class.
Lightweight error class with error context and mandatory checking.
Tagged union holding either a T or a Error.
typename SuperClass::const_iterator const_iterator
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
const PartData & operator*()
PartIterator operator++(int)
const PartData * operator->()
PartIterator & operator++()
bool operator!=(const PartIterator &RHS) const
bool operator==(const PartIterator &RHS) const
std::optional< uint64_t > getShaderFlags() const
const std::optional< DXILData > & getDXIL() const
const std::optional< DirectX::PSVRuntimeInfo > & getPSVInfo() const
const dxbc::Header & getHeader() const
std::pair< dxbc::ProgramHeader, const char * > DXILData
StringRef getData() const
PartIterator begin() const
static Expected< DXContainer > create(MemoryBufferRef Object)
std::optional< dxbc::ShaderHash > getShaderHash() const
ResourceArray getResources() const
PSVRuntimeInfo(StringRef D)
uint32_t getVersion() const
uint32_t getResourceCount() const
const InfoStruct & getInfo() const
@ C
The default llvm calling convention, compatible with C.
constexpr bool IsBigEndianHost
This is an optimization pass for GlobalISel generic memory operations.
auto size(R &&Range, std::enable_if_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< decltype(Range.begin())>::iterator_category >::value, void > *=nullptr)
Get the size of a range.
iterator(const iterator &)=default
bool operator!=(const iterator I)
bool operator==(const iterator I)
iterator(const ResourceArray &A, const char *C)