Diligent Engine
 
Loading...
Searching...
No Matches
Diligent::DeviceFeatures Struct Reference

Describes the device features. More...

#include <GraphicsTypes.h>

Public Member Functions

bool operator== (const DeviceFeatures &RHS) const
 Comparison operator tests if two structures are equivalent.
 

Public Attributes

DEVICE_FEATURE_STATE SeparablePrograms = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports separable shader programs.
 
DEVICE_FEATURE_STATE ShaderResourceQueries = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports resource queries from shader objects.
 
DEVICE_FEATURE_STATE WireframeFill = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports wireframe fill mode.
 
DEVICE_FEATURE_STATE MultithreadedResourceCreation = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports multithreaded resource creation.
 
DEVICE_FEATURE_STATE ComputeShaders = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports compute shaders.
 
DEVICE_FEATURE_STATE GeometryShaders = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports geometry shaders.
 
DEVICE_FEATURE_STATE Tessellation = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports tessellation.
 
DEVICE_FEATURE_STATE MeshShaders = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports mesh and amplification shaders.
 
DEVICE_FEATURE_STATE RayTracing = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE BindlessResources = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports bindless resources.
 
DEVICE_FEATURE_STATE OcclusionQueries = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports occlusion queries (see Diligent::QUERY_TYPE_OCCLUSION).
 
DEVICE_FEATURE_STATE BinaryOcclusionQueries = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports binary occlusion queries (see Diligent::QUERY_TYPE_BINARY_OCCLUSION).
 
DEVICE_FEATURE_STATE TimestampQueries = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports timestamp queries (see Diligent::QUERY_TYPE_TIMESTAMP).
 
DEVICE_FEATURE_STATE PipelineStatisticsQueries = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports pipeline statistics queries (see Diligent::QUERY_TYPE_PIPELINE_STATISTICS).
 
DEVICE_FEATURE_STATE DurationQueries = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports duration queries (see Diligent::QUERY_TYPE_DURATION).
 
DEVICE_FEATURE_STATE DepthBiasClamp = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports depth bias clamping.
 
DEVICE_FEATURE_STATE DepthClamp = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE IndependentBlend = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports depth clamping.
 
DEVICE_FEATURE_STATE DualSourceBlend = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports dual-source blend.
 
DEVICE_FEATURE_STATE MultiViewport = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports multiviewport.
 
DEVICE_FEATURE_STATE TextureCompressionBC = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports all BC-compressed formats.
 
DEVICE_FEATURE_STATE TextureCompressionETC2 = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports all ETC-compressed formats.
 
DEVICE_FEATURE_STATE VertexPipelineUAVWritesAndAtomics = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE PixelUAVWritesAndAtomics = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE TextureUAVExtendedFormats = DEVICE_FEATURE_STATE_DISABLED
 Specifies whether all the extended UAV texture formats are available in shader code.
 
DEVICE_FEATURE_STATE ShaderFloat16 = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE ResourceBuffer16BitAccess = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE UniformBuffer16BitAccess = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports reading 16-bit floats and ints from uniform buffers.
 
DEVICE_FEATURE_STATE ShaderInputOutput16 = DEVICE_FEATURE_STATE_DISABLED
 Indicates if 16-bit floats and ints can be used as input/output of a shader entry point.
 
DEVICE_FEATURE_STATE ShaderInt8 = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports native 8-bit integer operations.
 
DEVICE_FEATURE_STATE ResourceBuffer8BitAccess = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE UniformBuffer8BitAccess = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports reading 8-bit types from uniform buffers.
 
DEVICE_FEATURE_STATE ShaderResourceStaticArrays = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE ShaderResourceRuntimeArrays = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE WaveOp = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports wave ops (Direct3D12) or subgroups (Vulkan).
 
DEVICE_FEATURE_STATE InstanceDataStepRate = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports instance data step rates other than 1.
 
DEVICE_FEATURE_STATE NativeFence = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE TileShaders = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports tile shaders.
 
DEVICE_FEATURE_STATE TransferQueueTimestampQueries = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports timestamp and duration queries in transfer queues.
 
DEVICE_FEATURE_STATE VariableRateShading = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports variable rate shading.
 
DEVICE_FEATURE_STATE SparseResources = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports sparse (aka tiled or partially resident) resources.
 
DEVICE_FEATURE_STATE SubpassFramebufferFetch = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports framebuffer fetch for input attachments.
 
DEVICE_FEATURE_STATE TextureComponentSwizzle = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports texture component swizzle.
 
DEVICE_FEATURE_STATE TextureSubresourceViews = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports texture subresource views.
 
DEVICE_FEATURE_STATE NativeMultiDraw = DEVICE_FEATURE_STATE_DISABLED
 
DEVICE_FEATURE_STATE AsyncShaderCompilation = DEVICE_FEATURE_STATE_DISABLED
 Whether the device supports asynchronous shader compilation.
 
DEVICE_FEATURE_STATE FormattedBuffers = DEVICE_FEATURE_STATE_DISABLED
 Indicates if device supports formatted buffers.
 

Detailed Description

Describes the device features.

Member Data Documentation

◆ AsyncShaderCompilation

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::AsyncShaderCompilation = DEVICE_FEATURE_STATE_DISABLED

Whether the device supports asynchronous shader compilation.

When this feature is enabled, the engine can create shaders and pipeline states asynchronously in a separate thread without blocking the main thread. An application can query the shader status using the IShader::GetStatus() method and the pipeline state status using the IPipelineState::GetStatus() method.

◆ DepthClamp

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::DepthClamp = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports depth clamping

By default polygon faces are clipped against the near and far planes of the view would be clipped is clamped to the near/far plane instead of discarding them. frustum. If depth clipping is disabled in the PSO, the depth of the fragments that If this feature is enabled, the DepthClipEnable member of the RasterizerStateDesc struct can be set to False. Otherwise it must always be set to True.

◆ NativeFence

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::NativeFence = DEVICE_FEATURE_STATE_DISABLED

Indicates if device natively supports fence with Uint64 counter. Native fence can wait on GPU for a signal from CPU, can be enqueued for wait operation for any value. If not natively supported by the device, the fence is emulated where possible.

◆ NativeMultiDraw

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::NativeMultiDraw = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports native multi-draw commands.

When this feature is enabled, the GPU supports a dedicated command that can be used to issue multiple draw calls with a single command (e.g. vkCmdDrawMultiEXT, glMultiDrawElements, etc.). In OpenGL and Vulkan, the shader can access the draw command index using the gl_DrawID built-in variable.

When this feature is disabled, the engine emulates multi-draw commands by issuing multiple individual draw calls. The draw command index is unavailable.

◆ PixelUAVWritesAndAtomics

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::PixelUAVWritesAndAtomics = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports writes to UAVs as well as atomic operations in pixel shader stage.

◆ RayTracing

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::RayTracing = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports ray tracing. See Diligent::RayTracingProperties for more information.

◆ ResourceBuffer16BitAccess

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::ResourceBuffer16BitAccess = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports reading and writing 16-bit floats and ints from buffers bound as shader resource or unordered access views.

◆ ResourceBuffer8BitAccess

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::ResourceBuffer8BitAccess = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports reading and writing 8-bit types from buffers bound as shader resource or unordered access views.

◆ SeparablePrograms

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::SeparablePrograms = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports separable shader programs.

The only case when separable programs are not supported is when the engine is initialized in GLES3.0 mode. In GLES3.1+ and in all other backends, the feature is always enabled. The are two main limitations when separable programs are disabled:

  • If the same shader variable is present in multiple shader stages, it will always be shared between all stages and different resources can't be bound to different stages.
  • Shader resource queries will be also disabled.

◆ ShaderFloat16

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::ShaderFloat16 = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports native 16-bit float operations. Note that there are separate features that indicate if device supports loading 16-bit floats from buffers and passing them between shader stages.

Note
16-bit support is quite tricky, the following post should help understand it better: https://therealmjp.github.io/posts/shader-fp16/

◆ ShaderResourceQueries

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::ShaderResourceQueries = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports resource queries from shader objects.

This feature indicates if IShader::GetResourceCount() and IShader::GetResourceDesc() methods can be used to query the list of resources of individual shader objects. Shader variable queries from pipeline state and shader resource binding objects are always available.

The feature is always enabled in Direct3D11, Direct3D12 and Vulkan. It is enabled in OpenGL when separable programs are available, and it is always disabled in Metal.

◆ ShaderResourceRuntimeArrays

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::ShaderResourceRuntimeArrays = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports runtime-sized shader arrays (e.g. arrays without a specific size).

Remarks
This feature is always enabled in DirectX12 backend and can optionally be enabled in Vulkan backend. Run-time sized shader arrays are not available in other backends.

◆ ShaderResourceStaticArrays

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::ShaderResourceStaticArrays = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports static-sized shader arrays.

Remarks
This feature is always enabled in all backends, except for WebGPU.

◆ SubpassFramebufferFetch

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::SubpassFramebufferFetch = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports framebuffer fetch for input attachments.

Vulkan: this feature is always supported through input attachments.

Metal: this feature is always supported on iOS; on MacOS it requires Apple GPU and MSL 2.3 (available in MacOS 11.0+). When the feature is disabled, every new subpass of a render pass starts a new render command encoder. With this feature enabled, input attachment loads translate into MSL framebuffer fetch operations that allow implementing subpasses within a single render command encoder.

◆ TextureSubresourceViews

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::TextureSubresourceViews = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports texture subresource views.

Remarks
This feature is always enabled in all backends except for GLES, WebGL and older OpenGL versions.

When this feature is disabled, only texture views that reference the entire texture can be created.

◆ VertexPipelineUAVWritesAndAtomics

DEVICE_FEATURE_STATE Diligent::DeviceFeatures::VertexPipelineUAVWritesAndAtomics = DEVICE_FEATURE_STATE_DISABLED

Indicates if device supports writes to UAVs as well as atomic operations in vertex, tessellation, and geometry shader stages.