XLE
v0.02.0
|
This is the implementation of RenderCore::Metal for DX11 platforms. More...
Namespaces | |
AddressMode | |
Container for AddressMode::Enum. | |
Blend | |
Container for Blend::Enum. | |
BlendOp | |
Container for BlendOp::Enum. | |
CullMode | |
Container for CullMode::Enum. | |
FillMode | |
Container for FillMode::Enum. | |
FilterMode | |
Container for FilterMode::Enum. | |
FormatComponents | |
Container for FormatComponents::Enum. | |
FormatComponentType | |
Container for FormatComponentType::Enum. | |
FormatCompressionType | |
Container for FormatCompressionType::Enum. | |
FormatPrefix | |
Container for FormatPrefix::Enum. | |
GlobalInputLayouts | |
Contains some common reusable vertex input layouts. | |
GPUProfiler | |
Low level GPU profiler implementation (for DirectX11) | |
InputClassification | |
Container for InputClassification::Enum. | |
NativeFormat | |
Container for NativeFormat::Enum. | |
Topology | |
Container for Topology::Enum. | |
Typedefs | |
typedef TextureDesc< ID3D::Texture1D > | TextureDesc1D |
typedef TextureDesc< ID3D::Texture2D > | TextureDesc2D |
typedef TextureDesc< ID3D::Texture3D > | TextureDesc3D |
typedef TextureDesc< ID3D::Buffer > | D3DBufferDesc |
typedef SharedPkt | ConstantBufferPacket |
typedef std::pair< const InputElementDesc *, size_t > | InputLayout |
typedef intrusive_ptr< ID3D::Query > | UnderlyingQuery |
Functions | |
intrusive_ptr< ID3D::ShaderReflection > | CreateReflection (const CompiledShaderByteCode &shaderCode) |
std::shared_ptr< ShaderService::ILowLevelCompiler > | CreateLowLevelShaderCompiler () |
ImpliedTyping::TypeDesc | GetType (D3D11_SHADER_TYPE_DESC typeDesc) |
template<typename ResourceType > | |
intrusive_ptr< ResourceType > | ExtractResource (ID3D::RenderTargetView *rtv) |
template<typename ResourceType > | |
intrusive_ptr< ResourceType > | ExtractResource (ID3D::ShaderResourceView *srv) |
template<typename ResourceType > | |
intrusive_ptr< ResourceType > | ExtractResource (ID3D::UnorderedAccessView *uav) |
template<typename ResourceType > | |
intrusive_ptr< ResourceType > | ExtractResource (ID3D::DepthStencilView *dsv) |
template<typename DestinationType , typename SourceType > | |
intrusive_ptr< DestinationType > | QueryInterfaceCast (SourceType *sourceObject) |
template<typename DestinationType , typename SourceType > | |
intrusive_ptr< DestinationType > | QueryInterfaceCast (intrusive_ptr< SourceType > &sourceObject) |
template<typename Type > | |
intrusive_ptr< Type > | DuplicateResource (ID3D::DeviceContext *context, Type *inputResource) |
template<> | |
intrusive_ptr< ID3D::Resource > | DuplicateResource (ID3D::DeviceContext *context, ID3D::Resource *inputResource) |
template<> | |
intrusive_ptr< ID3D::Buffer > | DuplicateResource (ID3D::DeviceContext *context, ID3D::Buffer *inputResource) |
FormatCompressionType::Enum | GetCompressionType (NativeFormat::Enum format) |
FormatComponents::Enum | GetComponents (NativeFormat::Enum format) |
FormatComponentType::Enum | GetComponentType (NativeFormat::Enum format) |
unsigned | BitsPerPixel (NativeFormat::Enum format) |
unsigned | GetComponentPrecision (NativeFormat::Enum format) |
unsigned | GetDecompressedComponentPrecision (NativeFormat::Enum format) |
unsigned | GetComponentCount (FormatComponents::Enum components) |
NativeFormat::Enum | FindFormat (FormatCompressionType::Enum compression, FormatComponents::Enum components, FormatComponentType::Enum componentType, unsigned precision) |
NativeFormat::Enum | AsSRGBFormat (NativeFormat::Enum inputFormat) |
NativeFormat::Enum | AsLinearFormat (NativeFormat::Enum inputFormat) |
NativeFormat::Enum | AsTypelessFormat (NativeFormat::Enum inputFormat) |
bool | HasLinearAndSRGBFormats (NativeFormat::Enum inputFormat) |
NativeFormat::Enum | AsNativeFormat (const ImpliedTyping::TypeDesc &type, ShaderNormalizationMode::Enum norm) |
const char * | AsString (NativeFormat::Enum format) |
NativeFormat::Enum | AsNativeFormat (const char name[]) |
DXGI_FORMAT | AsDXGIFormat (NativeFormat::Enum format) |
NativeFormat::Enum | AsNativeFormat (DXGI_FORMAT format) |
unsigned | CalculateVertexStride (const InputElementDesc *start, const InputElementDesc *end, unsigned slot) |
unsigned | HasElement (const InputElementDesc *begin, const InputElementDesc *end, const char elementSemantic[]) |
unsigned | FindElement (const InputElementDesc *begin, const InputElementDesc *end, const char elementSemantic[], unsigned semanticIndex) |
void | Copy (DeviceContext &context, ID3D::Resource *dst, ID3D::Resource *src) |
void | CopyPartial (DeviceContext &context, const CopyPartial_Dest &dst, const CopyPartial_Src &src) |
intrusive_ptr< ID3D::Resource > | Duplicate (DeviceContext &context, ID3D::Resource *inputResource) |
This is the implementation of RenderCore::Metal for DX11 platforms.
When DX11 is enabled, RenderCore::Metal is renamed to mean RenderCore::Metal_DX11
This means that DX11 implementations of the "metal" interfaces can be accessed via RenderCore::Metal:...
For example, RenderCore::Metal::DeviceContext will be a rename for RenderCore::Metal_DX11::DeviceContext. This allows compile-time polymorphism: client code isn't strongly bound to any single implementation of RenderCore::Metal, and we can change which implementation is used with compile time switches.
The classes RenderCore::Metal_DX11 implement a thin layer over an underlying graphics API. The architecture is designed to be roughly in-line with modern thinking about GPU hardware, striking a balance between dominant APIs (like DX11, DX12, OpenGL4, OpenGLES) as well as providing flexibility for future APIs.
Here are some example classes;
This namespace is designed to encourage platform-generic coding practices. But it also provides access to allow platform-specific clients. Some effects and methods require special implementations for certain platforms. And some platform concepts are difficult to create truly generic wrappers for.
This is a advantage of the polymorphism method used for RenderCore::Metal. RenderCore::Metal_DX11::DeviceContext and RenderCore::Metal_OpenGLES::DeviceContext are actually unrelated types (they have no common base classes). So we can extend the base functionality with platform specific addition when needed.