LLGL 0.05 Beta
Loading...
Searching...
No Matches
LLGL::RenderingFeatures Struct Reference

Contains the attributes for all supported rendering features. More...

#include <RenderSystemFlags.h>

Public Attributes

bool hasRenderTargets = false
 Specifies whether render targets (also "framebuffer objects") are supported.
bool has3DTextures = false
 Specifies whether 3D textures are supported.
bool hasCubeTextures = false
 Specifies whether cube textures are supported.
bool hasArrayTextures = false
 Specifies whether 1D- and 2D array textures are supported.
bool hasCubeArrayTextures = false
 Specifies whether cube array textures are supported.
bool hasMultiSampleTextures = false
 Specifies whether multi-sample textures are supported.
bool hasMultiSampleArrayTextures = false
 Specifies whether multi-sample array textures are supported.
bool hasTextureViews = false
 Specifies whether texture views are supported.
bool hasTextureViewSwizzle = false
 Specifies whether texture views can have swizzling (a.k.a. component mapping).
bool hasTextureViewFormatSwizzle = false
 Specifies whether texture views can have formats with a different layout than their parent texture.
bool hasBufferViews = false
 Specifies whether buffer views are supported.
bool hasConstantBuffers = false
 Specifies whether constant buffers (also "uniform buffer objects") are supported.
bool hasStorageBuffers = false
 Specifies whether storage buffers (also "read/write buffers") are supported.
bool hasGeometryShaders = false
 Specifies whether geometry shaders are supported.
bool hasTessellationShaders = false
 Specifies whether tessellation shaders are supported.
bool hasTessellatorStage = false
 Specifies whether tessellator stage is supported.
bool hasComputeShaders = false
 Specifies whether compute shaders are supported.
bool hasMeshShaders = false
 Specifies whether task and mesh shaders are supported.
bool hasInstancing = false
 Specifies whether hardware instancing is supported.
bool hasOffsetInstancing = false
 Specifies whether hardware instancing with instance offsets is supported.
bool hasIndirectDrawing = false
 Specifies whether indirect draw commands are supported.
bool hasViewportArrays = false
 Specifies whether multiple viewports, depth-ranges, and scissors at once are supported.
bool hasMultiview = false
 Specifies whether multiview (single-pass layered) rendering is supported.
bool hasDepthStencilResolve = false
 Specifies whether a multi-sampled depth-stencil attachment can be resolved.
bool hasConservativeRasterization = false
 Specifies whether conservative rasterization is supported.
bool hasStreamOutputs = false
 Specifies whether stream-output is supported.
bool hasLogicOp = false
 Specifies whether logic fragment operations are supported.
bool hasPipelineCaching = false
 Specifies whether pipeline caching is supported.
bool hasPipelineStatistics = false
 Specifies whether queries for pipeline statistics are supported.
bool hasRenderCondition = false
 Specifies whether queries for conditional rendering are supported.
bool hasVariableRateShading = false
 Specifies whether variable rate shading (VRS) is supported.

Detailed Description

Contains the attributes for all supported rendering features.

See also
RenderingCapabilities::features
Todo
Add bitmask :1 to all fields to drastically reduce size of this struct. This will be a breaking change as they can no longer be referenced individually.

Member Data Documentation

◆ has3DTextures

bool LLGL::RenderingFeatures::has3DTextures = false

Specifies whether 3D textures are supported.

See also
TextureType::Texture3D

◆ hasArrayTextures

bool LLGL::RenderingFeatures::hasArrayTextures = false

Specifies whether 1D- and 2D array textures are supported.

See also
TextureType::Texture1DArray
TextureType::Texture2DArray

◆ hasBufferViews

bool LLGL::RenderingFeatures::hasBufferViews = false

Specifies whether buffer views are supported.

Remarks
Buffer views can shared their data with another buffer resource in a different range and format.
See also
BufferViewDescriptor

◆ hasComputeShaders

bool LLGL::RenderingFeatures::hasComputeShaders = false

Specifies whether compute shaders are supported.

See also
ShaderType::Compute
CommandBuffer::Dispatch
CommandBuffer::DispatchIndirect

◆ hasConservativeRasterization

bool LLGL::RenderingFeatures::hasConservativeRasterization = false

Specifies whether conservative rasterization is supported.

See also
RasterizerDescriptor::conservativeRasterization

◆ hasConstantBuffers

bool LLGL::RenderingFeatures::hasConstantBuffers = false

Specifies whether constant buffers (also "uniform buffer objects") are supported.

See also
BindFlags::ConstantBuffer

◆ hasCubeArrayTextures

bool LLGL::RenderingFeatures::hasCubeArrayTextures = false

Specifies whether cube array textures are supported.

Remarks
This implies RenderingFeatures::hasCubeTextures to be true as well.
See also
TextureType::TextureCubeArray

◆ hasCubeTextures

bool LLGL::RenderingFeatures::hasCubeTextures = false

Specifies whether cube textures are supported.

See also
TextureType::TextureCube

◆ hasDepthStencilResolve

bool LLGL::RenderingFeatures::hasDepthStencilResolve = false

Specifies whether a multi-sampled depth-stencil attachment can be resolved.

Remarks
Color attachments can always be resolved, but depth requires dedicated support: the implementation must be told how to combine the samples (the depth of one sample, or their minimum or maximum) rather than averaging them. Without this, a multi-sampled depth attachment's contents cannot be transferred to a single-sampled texture, which matters when the single-sampled image is owned by something else - an XR runtime submitting depth for reprojection, for instance.
Note
Only supported with: Vulkan.
See also
RenderTargetDescriptor::resolveAttachments

◆ hasGeometryShaders

bool LLGL::RenderingFeatures::hasGeometryShaders = false

Specifies whether geometry shaders are supported.

See also
ShaderType::Geometry

◆ hasIndirectDrawing

bool LLGL::RenderingFeatures::hasIndirectDrawing = false

Specifies whether indirect draw commands are supported.

See also
CommandBuffer::DrawIndirect
CommandBuffer::DrawIndexedIndirect

◆ hasInstancing

◆ hasLogicOp

bool LLGL::RenderingFeatures::hasLogicOp = false

Specifies whether logic fragment operations are supported.

Note
For Direct3D 11, feature level 11.1 is required.
See also
BlendDescriptor::logicOp

◆ hasMeshShaders

bool LLGL::RenderingFeatures::hasMeshShaders = false

Specifies whether task and mesh shaders are supported.

Remarks
Task and mesh shaders belong to the same mesh pipeline but task shaders are optional to use in such a pipeline, so task shader support is implied if mesh shaders are supported.
Note
Only supported with: Direct3D 12, Vulkan.
See also
ShaderType::Task
ShaderType::Mesh
RenderSystem::CreatePipelineState(const MeshPipelineDescriptor&)
CommandBufferTier1::DrawMesh
CommandBufferTier1::DrawMeshIndirect

◆ hasMultiSampleArrayTextures

bool LLGL::RenderingFeatures::hasMultiSampleArrayTextures = false

Specifies whether multi-sample array textures are supported.

Remarks
This implies RenderingFeatures::hasMultiSampleTextures to be true as well.
See also
TextureType::Texture2DMSArray

◆ hasMultiSampleTextures

bool LLGL::RenderingFeatures::hasMultiSampleTextures = false

Specifies whether multi-sample textures are supported.

See also
TextureType::Texture2DMS

◆ hasMultiview

bool LLGL::RenderingFeatures::hasMultiview = false

Specifies whether multiview (single-pass layered) rendering is supported.

Remarks
If supported, a render pass can broadcast a single draw command to multiple array layers of the render target, with each invocation reading its layer index via SystemValue::ViewIndex. This is commonly used for single-pass stereo rendering (VR) and cascaded shadow maps.
Note
Only supported with: Vulkan, Direct3D 12.
See also
RenderPassDescriptor::views
RenderingLimits::maxViews
SystemValue::ViewIndex

◆ hasOffsetInstancing

bool LLGL::RenderingFeatures::hasOffsetInstancing = false

◆ hasPipelineCaching

bool LLGL::RenderingFeatures::hasPipelineCaching = false

Specifies whether pipeline caching is supported.

Remarks
If pipeline caching is not supported, RenderSystem::CreatePipelineCache will return a proxy instance of the PipelineCache interface.
See also
RenderSystem::CreatePipelineCache

◆ hasPipelineStatistics

bool LLGL::RenderingFeatures::hasPipelineStatistics = false

Specifies whether queries for pipeline statistics are supported.

See also
QueryType::PipelineStatistics
QueryPipelineStatistics

◆ hasRenderCondition

bool LLGL::RenderingFeatures::hasRenderCondition = false

Specifies whether queries for conditional rendering are supported.

See also
QueryHeapDescriptor::renderCondition
CommandBuffer:BeginRenderCondition

◆ hasRenderTargets

bool LLGL::RenderingFeatures::hasRenderTargets = false

Specifies whether render targets (also "framebuffer objects") are supported.

Todo
Deprecate this field: All backends should support render targets. GL 2.x can use glCopyTexSubImage2D to emulate this feature if ARB_framebuffer_object is unavailable.

◆ hasStorageBuffers

bool LLGL::RenderingFeatures::hasStorageBuffers = false

Specifies whether storage buffers (also "read/write buffers") are supported.

See also
BindFlags::Sampled
BindFlags::Storage

◆ hasStreamOutputs

bool LLGL::RenderingFeatures::hasStreamOutputs = false

Specifies whether stream-output is supported.

Note
Only supported with: Direct3D 12, Direct3D 11, OpenGL.
See also
VertexShaderAttributes::outputAttribs
CommandBuffer::BeginStreamOutput
CommandBuffer::DrawStreamOutput
RenderingLimits::maxStreamOutputs

◆ hasTessellationShaders

bool LLGL::RenderingFeatures::hasTessellationShaders = false

Specifies whether tessellation shaders are supported.

Remarks
This feature implies that hasTessellatorStage is true.
Note
Only supported with: Direct3D 12, Direct3D 11, Vulkan, OpenGL.
See also
ShaderType::TessControl
ShaderType::TessEvaluation

◆ hasTessellatorStage

bool LLGL::RenderingFeatures::hasTessellatorStage = false

Specifies whether tessellator stage is supported.

Remarks
The Metal backend supports a tessellator stage but no dedicated tessellation shaders. The tessellation control shader and the tessellation evaluation shader are usually defined by a compute kernel and a post-tessellation vertex function respectively.
See also
TessellationDescriptor.

◆ hasTextureViewFormatSwizzle

bool LLGL::RenderingFeatures::hasTextureViewFormatSwizzle = false

Specifies whether texture views can have formats with a different layout than their parent texture.

Remarks
An example of this feature is a texture view with format Format::RG16UInt where as its parent texture has format Format::RGBA8UInt. If this feature is not supported, the number of components and their size must match between the parent texture and its texture views, i.e. a parent texture with format Format::RGBA8UNorm can still have texture views with format Format::RGBA8UInt for instance but not with Format::RG16UInt.
This feature implies that hasTextureViews is true.
Note
Only supported with: Vulkan, OpenGL, Metal.

◆ hasTextureViews

bool LLGL::RenderingFeatures::hasTextureViews = false

Specifies whether texture views are supported.

Remarks
Texture views can share their image data with another texture resource in a different range and format.
See also
TextureViewDescriptor

◆ hasTextureViewSwizzle

bool LLGL::RenderingFeatures::hasTextureViewSwizzle = false

Specifies whether texture views can have swizzling (a.k.a. component mapping).

Remarks
This feature implies that hasTextureViews is true.
Note
Only supported with: Direct3D 12, Vulkan, OpenGL, Metal.
See also
TextureViewDescriptor::swizzle

◆ hasVariableRateShading

bool LLGL::RenderingFeatures::hasVariableRateShading = false

Specifies whether variable rate shading (VRS) is supported.

Note
Only supported with: Direct3D 12, Vulkan.
See also
CommandBufferTier1::SetShadingRate

◆ hasViewportArrays

bool LLGL::RenderingFeatures::hasViewportArrays = false

Specifies whether multiple viewports, depth-ranges, and scissors at once are supported.

See also
RenderingLimits::maxViewports

The documentation for this struct was generated from the following file: