You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

1433 lines
62 KiB

#ifndef Magnum_Vk_DeviceFeatures_h
#define Magnum_Vk_DeviceFeatures_h
/*
This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
2020, 2021 Vladimír Vondruš <mosra@centrum.cz>
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
/** @file
* @brief Enum @ref Magnum::Vk::DeviceFeature, enum set @ref Magnum::Vk::DeviceFeatures
* @m_since_latest
*/
#include <Corrade/Containers/BigEnumSet.h>
#include "Magnum/Magnum.h"
#include "Magnum/Vk/Vk.h"
#include "Magnum/Vk/visibility.h"
namespace Magnum { namespace Vk {
/**
@brief Device feature
@m_since_latest
Contains information stored in the @type_vk_keyword{PhysicalDeviceFeatures2}
structure chain. Values correspond to equivalently named structure fields,
usually just with the first letter uppercase instead of lowercase.
@see @ref DeviceFeatures, @ref DeviceProperties::features(),
@ref DeviceCreateInfo::setEnabledFeatures(), @ref Device::enabledFeatures()
@todo @type_vk{PhysicalDeviceVulkan12Features} additionally has
`samplerMirrorClampToEdge`, `drawIndirectCount`, `descriptorIndexing`,
`samplerFilterMinMax`, `shaderOutputViewportIndex`, `shaderOutputLayer`, `subgroupBroadcastDynamicId` that aren't exposed in any extension -- does
that mean we have to enable such extension even on 1.2 in order to enable
those? Provide some compatibility, as in show them as supported when
the exts are present and enable corresponding exts when those get enabled
on device creation?
*/
enum class DeviceFeature: UnsignedShort {
/**
* Whether accesses to buffers are bounds-checked against the range of the
* buffer descriptor. Out of bounds accesses are guaranteed to not cause
* application termination, but have implementation-dependent behavior. A
* subset of the guarantees provided by
* @ref DeviceFeature::RobustBufferAccess2.
* @see @ref DeviceFeature::RobustImageAccess,
* @relativeref{DeviceFeature,RobustImageAccess2}
*/
RobustBufferAccess,
/**
* Whether the full 32-bit range is supported for indexed draw calls when
* using @ref MeshIndexType::UnsignedInt.
* @see @ref DeviceFeature::IndexTypeUnsignedByte
* @todo expose the `maxDrawIndexedIndexValue` limit
*/
FullDrawIndexUnsignedInt,
/**
* Whether image views with @val_vk{IMAGE_VIEW_TYPE_CUBE_ARRAY,ImageViewType}
* can be created and used in shaders.
*/
ImageCubeArray,
/** Whether blend state can be different per attachment. */
IndependentBlend,
/** Whether geometry shaders are supported. */
GeometryShader,
/** Whether tessellation control and evaluation shaders are supported. */
TessellationShader,
/** Whether sample shading and multisample interpolation is supported. */
SampleRateShading,
/** Whether blend operations which take two sources are supported. */
DualSrcBlend,
/** Whether logic operations are supported. */
LogicOp,
/** Whether multiple draw indirect is supported. */
MultiDrawIndirect,
/** Whether indirect draw calls support the first instance parameter. */
DrawIndirectFirstInstance,
/** Whether depth clamping is supported. */
DepthClamp,
/** Whether depth bias clamping is supported. */
DepthBiasClamp,
/** Whether point and wireframe fill modes are supported. */
FillModeNonSolid,
/** Whether depth bound tests are supported. */
DepthBounds,
/** Whether lines with a width other than @cpp 1.0f @ce are supported. */
WideLines,
/** Whether points with size greater than @cpp 1.0f @ce are supported. */
LargePoints,
/**
* Whether replacing the alpha of color fragment output from the fragment
* shader with @cpp 1.0f @ce is supported.
*/
AlphaToOne,
/** Whether rendering to more than one viewport is supported. */
MultiViewport,
/** Whether anisotropic filtering is supported. */
SamplerAnisotropy,
/**
* Whether @ref PixelFormat::CompressedEacR11Unorm,
* @relativeref{PixelFormat,CompressedEacR11Snorm},
* @relativeref{PixelFormat,CompressedEacRG11Unorm},
* @relativeref{PixelFormat,CompressedEacRG11Snorm},
* @relativeref{PixelFormat,CompressedEtc2RGB8Unorm},
* @relativeref{PixelFormat,CompressedEtc2RGB8Srgb},
* @relativeref{PixelFormat,CompressedEtc2RGB8A1Unorm},
* @relativeref{PixelFormat,CompressedEtc2RGB8A1Srgb},
* @relativeref{PixelFormat,CompressedEtc2RGBA8Unorm},
* @relativeref{PixelFormat,CompressedEtc2RGBA8Unorm} ETC2 and EAC
* compressed texture formats are *all* supported.
* @see @ref DeviceFeature::TextureCompressionBc,
* @relativeref{DeviceFeature,TextureCompressionAstcLdr},
* @relativeref{DeviceFeature,TextureCompressionAstcHdr}
*/
TextureCompressionEtc2,
/**
* Whether @ref PixelFormat::CompressedAstc4x4RGBAUnorm,
* @relativeref{PixelFormat,CompressedAstc4x4RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc5x4RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc5x4RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc5x5RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc5x5RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc6x5RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc6x5RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc6x6RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc6x6RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc8x5RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc8x5RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc8x6RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc8x6RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc8x8RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc8x8RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc10x5RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc10x5RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc10x6RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc10x6RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc10x8RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc10x8RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc10x10RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc10x10RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc12x10RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc12x10RGBASrgb},
* @relativeref{PixelFormat,CompressedAstc12x12RGBAUnorm},
* @relativeref{PixelFormat,CompressedAstc12x12RGBASrgb}, ASTC LDR
* compressed texture formats are *all* supported.
* @see @ref DeviceFeature::TextureCompressionAstcHdr,
* @relativeref{DeviceFeature,TextureCompressionEtc2},
* @relativeref{DeviceFeature,TextureCompressionBc}
*/
TextureCompressionAstcLdr,
/**
* Whether @ref PixelFormat::CompressedBc1RGBUnorm,
* @relativeref{PixelFormat,CompressedBc1RGBSrgb},
* @relativeref{PixelFormat,CompressedBc1RGBAUnorm},
* @relativeref{PixelFormat,CompressedBc1RGBASrgb},
* @relativeref{PixelFormat,CompressedBc2RGBAUnorm},
* @relativeref{PixelFormat,CompressedBc2RGBASrgb},
* @relativeref{PixelFormat,CompressedBc3RGBAUnorm},
* @relativeref{PixelFormat,CompressedBc3RGBASrgb},
* @relativeref{PixelFormat,CompressedBc4RUnorm},
* @relativeref{PixelFormat,CompressedBc4RSnorm},
* @relativeref{PixelFormat,CompressedBc5RGUnorm},
* @relativeref{PixelFormat,CompressedBc5RGSnorm},
* @relativeref{PixelFormat,CompressedBc6hRGBUfloat},
* @relativeref{PixelFormat,CompressedBc6hRGBSfloat},
* @relativeref{PixelFormat,CompressedBc7RGBAUnorm},
* @relativeref{PixelFormat,CompressedBc7RGBASrgb} BC compressed texture
* formats are *all* supported.
* @see @ref DeviceFeature::TextureCompressionEtc2,
* @relativeref{DeviceFeature,TextureCompressionAstcLdr},
* @relativeref{DeviceFeature,TextureCompressionAstcHdr}
*/
TextureCompressionBc,
/**
* Whether occlusion queries returning actual sample counts are supported.
*/
OcclusionQueryPrecise,
/** Whether pipeline statistics queries are supported. */
PipelineStatisticsQuery,
/**
* Whether storage buffers and images support stores and atomic operations
* in the vertex, tessellation and geometry shader stages.
*/
VertexPipelineStoresAndAtomics,
/**
* Whether storage buffers and images support stores and atomic operations
* in the fragment shader stage.
*/
FragmentStoresAndAtomics,
/**
* Whether point size is accessible in tessellation control, tessellation
* evaluation and geometry shader stages.
*/
ShaderTessellationAndGeometryPointSize,
/**
* Whether the extended set of image gather instructions is available in
* shader code.
*/
ShaderImageGatherExtended,
/**
* Whether @ref PixelFormat::R8Unorm, @relativeref{PixelFormat,RG8Unorm},
* @relativeref{PixelFormat,R8Snorm}, @relativeref{PixelFormat,RG8Snorm},
* @relativeref{PixelFormat,R8UI}, @relativeref{PixelFormat,RG8UI},
* @relativeref{PixelFormat,R8I}, @relativeref{PixelFormat,RG8I},
* @relativeref{PixelFormat,R16Unorm}, @relativeref{PixelFormat,RG16Unorm},
* @relativeref{PixelFormat,RGBA16Unorm}, @relativeref{PixelFormat,R16Snorm},
* @relativeref{PixelFormat,RG16Snorm}, @relativeref{PixelFormat,RGBA16Snorm},
* @relativeref{PixelFormat,R16UI}, @relativeref{PixelFormat,RG16UI},
* @relativeref{PixelFormat,R16I}, @relativeref{PixelFormat,RG16I},
* @relativeref{PixelFormat,R16F}, @relativeref{PixelFormat,RG16F} are
* *all* supported for shader storage.
* @todoc link to the 10/10/10/2 and 10.11.10F formats once exposed
*/
ShaderStorageImageExtendedFormats,
/**
* Whether multisampled storage images are supported.
* @see @ref ImageUsage::Storage
*/
ShaderStorageImageMultisample,
/**
* Whether storage images require a format qualifier to be specified when
* reading from storage images.
* @see @ref DeviceFeature::ShaderStorageImageWriteWithoutFormat
*/
ShaderStorageImageReadWithoutFormat,
/**
* Whether storage images require a format qualifier to be specified when
* writing to storage images.
* @see @ref DeviceFeature::ShaderStorageImageReadWithoutFormat
*/
ShaderStorageImageWriteWithoutFormat,
/**
* Whether arrays of uniform buffers can be indexed by dynamically uniform
* integer expressions in shader code.
* @see @ref DeviceFeature::ShaderSampledImageArrayDynamicIndexing,
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing}
*/
ShaderUniformBufferArrayDynamicIndexing,
/**
* Whether arrays of samplers or sampled images can be indexed by
* dynamically uniform integer expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayDynamicIndexing,
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing}
*/
ShaderSampledImageArrayDynamicIndexing,
/**
* Whether arrays of storage buffers can be indexed by dynamically uniform
* integer expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayDynamicIndexing,
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing}
*/
ShaderStorageBufferArrayDynamicIndexing,
/**
* Whether arrays of storage images can be indexed by dynamically uniform
* integer expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayDynamicIndexing,
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing}
*/
ShaderStorageImageArrayDynamicIndexing,
/** Whether clip distances are supported in shader code. */
ShaderClipDistance,
/** Whether cull distances are supported in shader code. */
ShaderCullDistance,
/**
* Whether 64-bit floats are supported in shader code.
* @see @ref DeviceFeature::ShaderFloat16
*/
ShaderFloat64,
/**
* Whether 64-bit integers are supported in shader code.
* @see @ref DeviceFeature::ShaderInt16,
* @relativeref{DeviceFeature,ShaderInt8},
* @relativeref{DeviceFeature,ShaderSubgroupExtendedTypes}
*/
ShaderInt64,
/**
* Whether 16-bit integers are supported in shader code.
* @see @ref DeviceFeature::ShaderInt64,
* @relativeref{DeviceFeature,ShaderInt8},
* @relativeref{DeviceFeature,StorageBuffer16BitAccess},
* @relativeref{DeviceFeature,UniformAndStorageBuffer16BitAccess},
* @relativeref{DeviceFeature,StoragePushConstant16},
* @relativeref{DeviceFeature,StorageInputOutput16},
* @relativeref{DeviceFeature,ShaderSubgroupExtendedTypes}
*/
ShaderInt16,
/**
* Whether image operations that return resource residency information are
* supported in shader code.
*/
ShaderResourceResidency,
/**
* Whether image operations specifying minimum resource LOD are supported
* in shader code.
*/
ShaderResourceMinLod,
/**
* Whether resource memory can be managed at opaque sparse block level
* instead of at the object level.
*/
SparseBinding,
/** Whether the device can access sparse buffers. */
SparseResidencyBuffer,
/**
* Whether the device can access sparse 2D images with 1 sample
* per pixel.
* @todo reference VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT once that's exposed
* in ImageCreateInfo
*/
SparseResidencyImage2D,
/** Whether the device can access sparse 3D images. */
SparseResidencyImage3D,
/**
* Whether the device can access sparse 2D images with 2
* samples per pixel.
* @todo reference VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT once that's exposed
* in ImageCreateInfo
*/
SparseResidency2Samples,
/**
* Whether the device can access sparse 2D images with 4
* samples per pixel.
* @todo reference VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT once that's exposed
* in ImageCreateInfo
*/
SparseResidency4Samples,
/**
* Whether the device can access sparse 2D images with 8
* samples per pixel.
* @todo reference VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT once that's exposed
* in ImageCreateInfo
*/
SparseResidency8Samples,
/**
* Whether the device can access sparse 2D images with 16
* samples per pixel.
* @todo reference VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT once that's exposed
* in ImageCreateInfo
*/
SparseResidency16Samples,
/**
* Whether the device can correctly access sparse data aliased into
* multiple locations.
*/
SparseResidencyAliased,
/**
* Whether all pipelines bound to a command buffer during a subpass which
* uses no attachment must have the same samples.
* @todoc crossreference this with PipelineCreateInfo
*/
VariableMultisampleRate,
/**
* Whether a secondary command buffer may be executed while a query is
* active.
*/
InheritedQueries,
/* VkPhysicalDeviceProtectedMemoryFeatures, Vk11 */
/**
* Whether protected memory is supported.
* @requires_vk11 Available only on Vulkan 1.1.
*/
ProtectedMemory,
/* VkPhysicalDeviceMultiviewFeatures, #54 */
/**
* Whether multiview rendering within a render pass is supported.
* @requires_vk11 Extension @vk_extension{KHR,multiview}
*/
Multiview,
/**
* Whether multiview rendering within a render pass with geometry shaders
* is supported.
* @requires_vk11 Extension @vk_extension{KHR,multiview}
*/
MultiviewGeometryShader,
/**
* Whether multiview rendering within a render pass with tessellation
* shaders is supported.
* @requires_vk11 Extension @vk_extension{KHR,multiview}
*/
MultiviewTessellationShader,
/* VkPhysicalDeviceShaderDrawParametersFeatures, #64 */
/**
* Whether shader draw parameters are supported.
* @requires_vk11 Extension @vk_extension{KHR,shader_draw_parameters}
*/
ShaderDrawParameters,
/* VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT, #67 */
/**
* Whether @ref PixelFormat::CompressedAstc4x4RGBAF,
* @relativeref{PixelFormat,CompressedAstc5x4RGBAF},
* @relativeref{PixelFormat,CompressedAstc5x5RGBAF},
* @relativeref{PixelFormat,CompressedAstc6x5RGBAF},
* @relativeref{PixelFormat,CompressedAstc6x6RGBAF},
* @relativeref{PixelFormat,CompressedAstc8x5RGBAF},
* @relativeref{PixelFormat,CompressedAstc8x6RGBAF},
* @relativeref{PixelFormat,CompressedAstc8x8RGBAF},
* @relativeref{PixelFormat,CompressedAstc10x5RGBAF},
* @relativeref{PixelFormat,CompressedAstc10x6RGBAF},
* @relativeref{PixelFormat,CompressedAstc10x8RGBAF},
* @relativeref{PixelFormat,CompressedAstc10x10RGBAF},
* @relativeref{PixelFormat,CompressedAstc12x10RGBAF},
* @relativeref{PixelFormat,CompressedAstc12x12RGBAF} ASTC HDR compressed
* texture formats are *all* supported.
* @see @ref DeviceFeature::TextureCompressionAstcLdr,
* @relativeref{DeviceFeature,TextureCompressionEtc2},
* @relativeref{DeviceFeature,TextureCompressionBc}
* @requires_vk_extension Extension @vk_extension{EXT,texture_compression_astc_hdr}
*/
TextureCompressionAstcHdr,
/* VkPhysicalDeviceShaderFloat16Int8Features, #83 */
/**
* Whether 16-bit floats are supported in shader code.
* @see @ref DeviceFeature::ShaderFloat64,
* @relativeref{DeviceFeature,StorageBuffer16BitAccess},
* @relativeref{DeviceFeature,UniformAndStorageBuffer16BitAccess},
* @relativeref{DeviceFeature,StoragePushConstant16},
* @relativeref{DeviceFeature,StorageInputOutput16},
* @relativeref{DeviceFeature,ShaderSubgroupExtendedTypes}
* @requires_vk12 Extension @vk_extension{KHR,shader_float16_int8}
*/
ShaderFloat16,
/**
* Whether 8-bit integers are supported in shader code.
* @see @ref DeviceFeature::ShaderInt64,
* @relativeref{DeviceFeature,ShaderInt16},
* @relativeref{DeviceFeature,ShaderSubgroupExtendedTypes}
* @requires_vk12 Extension @vk_extension{KHR,shader_float16_int8}
*/
ShaderInt8,
/* VkPhysicalDevice16BitStorageFeatures, #84 */
/**
* Whether shader storage buffers can have 16-bit integer and 16-bit
* floating-point members. Subset of
* @ref DeviceFeature::UniformAndStorageBuffer16BitAccess.
* @see @ref DeviceFeature::StorageBuffer8BitAccess,
* @relativeref{DeviceFeature,ShaderInt16},
* @relativeref{DeviceFeature,ShaderFloat16}
* @requires_vk11 Extension @vk_extension{KHR,16bit_storage}
*/
StorageBuffer16BitAccess,
/**
* Whether shader uniforms and storage buffers can have 16-bit integer and
* 16-bit floating-point members. Superset of
* @ref DeviceFeature::StorageBuffer16BitAccess.
* @see @ref DeviceFeature::UniformAndStorageBuffer8BitAccess,
* @relativeref{DeviceFeature,ShaderInt16},
* @relativeref{DeviceFeature,ShaderFloat16}
* @requires_vk11 Extension @vk_extension{KHR,16bit_storage}
*/
UniformAndStorageBuffer16BitAccess,
/**
* Whether shader push constants can have 16-bit integer and 16-bit
* floating-point members.
* @see @ref DeviceFeature::StoragePushConstant8,
* @relativeref{DeviceFeature,ShaderInt16},
* @relativeref{DeviceFeature,ShaderFloat16}
* @requires_vk11 Extension @vk_extension{KHR,16bit_storage}
*/
StoragePushConstant16,
/**
* Whether shader inputs and outputs can have 16-bit integer and 16-bit
* floating-point members.
* @see @ref DeviceFeature::ShaderInt16,
* @relativeref{DeviceFeature,ShaderFloat16}
* @requires_vk11 Extension @vk_extension{KHR,16bit_storage}
*/
StorageInputOutput16,
/* VkPhysicalDeviceImagelessFramebufferFeatures, #109 */
/**
* Specifying image view for attachments is possible at a time
* @ref CommandBuffer::beginRenderPass() is called.
* @requires_vk12 Extension @vk_extension{KHR,imageless_framebuffer}
*/
ImagelessFramebuffer,
/* VkPhysicalDeviceVariablePointersFeatures, #121 */
/**
* Whether SPIR-V variable pointer storage buffers are supported.
* @requires_vk11 Extension @vk_extension{KHR,variable_pointers}
*/
VariablePointersStorageBuffer,
/**
* Whether SPIR-V variable pointers are supported.
* @requires_vk11 Extension @vk_extension{KHR,variable_pointers}
*/
VariablePointers,
/* VkPhysicalDeviceAccelerationStructureFeaturesKHR, #151 */
/**
* Whether acceleration structure functionality is supported.
* @requires_vk_extension Extension @vk_extension{KHR,acceleration_structure}
*/
AccelerationStructure,
/**
* Whether saving and reusing acceleration structure devices for trace
* capture and replay is supported.
* @requires_vk_extension Extension @vk_extension{KHR,acceleration_structure}
*/
AccelerationStructureCaptureReplay,
/**
* Whether indirect acceleration structure builds are supported.
* @requires_vk_extension Extension @vk_extension{KHR,acceleration_structure}
*/
AccelerationStructureIndirectBuild,
/**
* Whether host-side acceleration structure commands are supported.
* @requires_vk_extension Extension @vk_extension{KHR,acceleration_structure}
*/
AccelerationStructureHostCommands,
/**
* Whether acceleration structure descriptors can be updated after a set is
* bound.
* @see @ref DeviceFeature::DescriptorBindingUniformBufferUpdateAfterBind,
* @relativeref{DeviceFeature,DescriptorBindingSampledImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingUniformTexelBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageTexelBufferUpdateAfterBind}
* @requires_vk_extension Extension @vk_extension{KHR,acceleration_structure}
*/
DescriptorBindingAccelerationStructureUpdateAfterBind,
/* VkPhysicalDeviceSamplerYcbcrConversionFeatures, #157 */
/**
* Whether sampler Y'C<sub>B</sub>C<sub>R</sub> conversion is supported.
* @requires_vk11 Extension @vk_extension{KHR,sampler_ycbcr_conversion}
*/
SamplerYcbcrConversion,
/* VkPhysicalDeviceDescriptorIndexingFeatures, #162 */
/**
* Whether arrays of input attachment can be indexed by dynamically uniform
* integer expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayDynamicIndexing,
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing}
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
ShaderInputAttachmentArrayDynamicIndexing,
/**
* Whether arrays of uniform texel buffers can be indexed by dynamically
* uniform integer expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayDynamicIndexing,
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing}
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
ShaderUniformTexelBufferArrayDynamicIndexing,
/**
* Whether arrays of storage texel buffers can be indexed by dynamically
* uniform integer expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayDynamicIndexing,
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing}
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
ShaderStorageTexelBufferArrayDynamicIndexing,
/**
* Whether arrays of uniform buffers can be indexed by non-uniform integer
* expressions in shader code.
* @see @ref DeviceFeature::ShaderSampledImageArrayNonUniformIndexing,
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayDynamicIndexing}
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing}
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
ShaderUniformBufferArrayNonUniformIndexing,
/**
* Whether arrays of samplers or sampled images can be indexed by
* non-uniform integer expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayNonUniformIndexing,
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayDynamicIndexing}
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing}
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
ShaderSampledImageArrayNonUniformIndexing,
/**
* Whether arrays of storage buffers can be indexed by non-uniform integer
* expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayNonUniformIndexing,
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayDynamicIndexing}
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing}
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
ShaderStorageBufferArrayNonUniformIndexing,
/**
* Whether arrays of storage images can be indexed by non-uniform integer
* expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayNonUniformIndexing,
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayDynamicIndexing}
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing}
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
ShaderStorageImageArrayNonUniformIndexing,
/**
* Whether arrays of input attachments can be indexed by non-uniform
* integer expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayNonUniformIndexing,
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayDynamicIndexing}
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing}
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
ShaderInputAttachmentArrayNonUniformIndexing,
/**
* Whether arrays of uniform texel buffers can be indexed by non-uniform
* integer expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayNonUniformIndexing,
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayDynamicIndexing}
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing}
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
ShaderUniformTexelBufferArrayNonUniformIndexing,
/**
* Whether arrays of storage texel buffers can be indexed by non-uniform
* integer expressions in shader code.
* @see @ref DeviceFeature::ShaderUniformBufferArrayNonUniformIndexing,
* @relativeref{DeviceFeature,ShaderSampledImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayNonUniformIndexing},
* @relativeref{DeviceFeature,ShaderUniformBufferArrayDynamicIndexing}
* @relativeref{DeviceFeature,ShaderSampledImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageImageArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderInputAttachmentArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderUniformTexelBufferArrayDynamicIndexing},
* @relativeref{DeviceFeature,ShaderStorageTexelBufferArrayDynamicIndexing}
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
ShaderStorageTexelBufferArrayNonUniformIndexing,
/**
* Whether @ref DescriptorType::UniformBuffer /
* @relativeref{DescriptorType,UniformBufferDynamic} can be updated after a
* set is bound.
* @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind,
* @relativeref{DeviceFeature,DescriptorBindingSampledImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingUniformTexelBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageTexelBufferUpdateAfterBind},
* @ref DescriptorSetLayoutBinding::Flag::UpdateAfterBind
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
DescriptorBindingUniformBufferUpdateAfterBind,
/**
* Whether @ref DescriptorType::CombinedImageSampler /
* @relativeref{DescriptorType,SampledImage} can be updated after a set is
* bound.
* @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind,
* @relativeref{DeviceFeature,DescriptorBindingUniformBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingUniformTexelBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageTexelBufferUpdateAfterBind},
* @ref DescriptorSetLayoutBinding::Flag::UpdateAfterBind
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
DescriptorBindingSampledImageUpdateAfterBind,
/**
* Whether @ref DescriptorType::StorageImage can be updated after a set is
* bound.
* @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind,
* @relativeref{DeviceFeature,DescriptorBindingUniformBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingSampledImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingUniformTexelBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageTexelBufferUpdateAfterBind},
* @ref DescriptorSetLayoutBinding::Flag::UpdateAfterBind
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
DescriptorBindingStorageImageUpdateAfterBind,
/**
* Whether @ref DescriptorType::StorageBuffer /
* @relativeref{DescriptorType,StorageBufferDynamic} can be updated after a
* set is bound.
* @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind,
* @relativeref{DeviceFeature,DescriptorBindingUniformBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingSampledImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingUniformTexelBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageTexelBufferUpdateAfterBind},
* @ref DescriptorSetLayoutBinding::Flag::UpdateAfterBind
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
DescriptorBindingStorageBufferUpdateAfterBind,
/**
* Whether @ref DescriptorType::UniformTexelBuffer can be updated after a
* set is bound.
* @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind,
* @relativeref{DeviceFeature,DescriptorBindingUniformBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingSampledImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageTexelBufferUpdateAfterBind},
* @ref DescriptorSetLayoutBinding::Flag::UpdateAfterBind
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
DescriptorBindingUniformTexelBufferUpdateAfterBind,
/**
* Whether @ref DescriptorType::StorageTexelBuffer can be updated after a
* set is bound.
* @see @ref DeviceFeature::DescriptorBindingAccelerationStructureUpdateAfterBind,
* @relativeref{DeviceFeature,DescriptorBindingUniformBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingSampledImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageImageUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingStorageBufferUpdateAfterBind},
* @relativeref{DeviceFeature,DescriptorBindingUniformTexelBufferUpdateAfterBind},
* @ref DescriptorSetLayoutBinding::Flag::UpdateAfterBind
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
DescriptorBindingStorageTexelBufferUpdateAfterBind,
/**
* Whether descriptors can be updated while the set is in use.
* @see @ref DescriptorSetLayoutBinding::Flag::UpdateUnusedWhilePending
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
DescriptorBindingUpdateUnusedWhilePending,
/**
* Whether a descriptor set binding in which some descriptors are not valid
* can be statically used.
* @see @ref DescriptorSetLayoutBinding::Flag::PartiallyBound
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
DescriptorBindingPartiallyBound,
/**
* Whether descriptor sets with a variably-sized last binding are
* supported.
* @see @ref DescriptorSetLayoutBinding::Flag::VariableDescriptorCount
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
DescriptorBindingVariableDescriptorCount,
/**
* Whether SPIR-V runtime descriptor arrays are supported.
* @requires_vk12 Extension @vk_extension{EXT,descriptor_indexing}
*/
RuntimeDescriptorArray,
/* VkPhysicalDevicePortabilitySubsetFeaturesKHR, #164 */
/**
* Whether constant alpha as source or destination blend color is
* supported.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
ConstantAlphaColorBlendFactors,
/**
* Whether synchronization using events is supported.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
Events,
/**
* Whether an @ref ImageView can be created with a format containing
* different number of components or a different number of bits in each
* component than the format of the underlying @ref Image.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
ImageViewFormatReinterpretation,
/**
* Whether remapping format components in an @ref ImageView is supported.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
ImageViewFormatSwizzle,
/**
* Whether a 2D view can be created on a 3D @ref Image can be created.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
ImageView2DOn3DImage,
/**
* Whether multisample 2D array @ref Image can be created.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
MultisampleArrayImage,
/**
* Whether descriptors with comparison samplers can be updated.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
MutableComparisonSamplers,
/**
* Whether rasterization using a point polygon mode is supported.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
PointPolygons,
/**
* Whether setting a mipmap LOD bias when creating a sampler is supported.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
SamplerMipLodBias,
/**
* Whether separate front and back stencil test reference values are
* supported.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
SeparateStencilMaskRef,
/**
* Whether interpolation at centroid, offset and sample is supported.
* Depends on @ref DeviceFeature::SampleRateShading.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
ShaderSampleRateInterpolationFunctions,
/**
* Whether isoline output from a tessellation shader stage is supported.
* Depends on @ref DeviceFeature::TessellationShader.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
TessellationIsolines,
/**
* Whether point output from a tessellation shader stage is supported.
* Depends on @ref DeviceFeature::TessellationShader.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
TessellationPointMode,
/**
* Whether triangle fan mesh primitives are supported.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
TriangleFans,
/**
* Whether accessing a vertex input attribute beyond the stride of
* corresponding vertex input binding is supported.
* @requires_vk_extension Extension @vk_extension{KHR,portability_subset},
* see @ref Vk-Device-portability-subset for details.
*/
VertexAttributeAccessBeyondStride,
/* VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures, #176 */
/**
* Whether subgroup operations can use 8-bit integer, 16-bit integer,
* 64-bit integer and 16-bit floating point types in group operations with
* subgroup scope, providing the types are supported.
* @see @ref DeviceFeature::ShaderInt8,
* @relativeref{DeviceFeature,ShaderInt16},
* @relativeref{DeviceFeature,ShaderInt64},
* @relativeref{DeviceFeature,ShaderFloat16}
* @requires_vk12 Extension @vk_extension{KHR,shader_subgroup_extended_types}
*/
ShaderSubgroupExtendedTypes,
/* VkPhysicalDevice8BitStorageFeatures, #178 */
/**
* Whether shader storage buffers can have 8-bit integer members. Subset of
* @ref DeviceFeature::UniformAndStorageBuffer8BitAccess.
* @see @ref DeviceFeature::StorageBuffer16BitAccess,
* @relativeref{DeviceFeature,ShaderInt8}
* @requires_vk12 Extension @vk_extension{KHR,8bit_storage}
*/
StorageBuffer8BitAccess,
/**
* Whether shader uniforms and storage buffers can have 8-bit integer
* members. Superset of @ref DeviceFeature::StorageBuffer8BitAccess.
* @see @ref DeviceFeature::UniformAndStorageBuffer16BitAccess,
* @relativeref{DeviceFeature,ShaderInt8}
* @requires_vk12 Extension @vk_extension{KHR,8bit_storage}
*/
UniformAndStorageBuffer8BitAccess,
/**
* Whether shader push constants can have 8-bit integer members.
* @see @ref DeviceFeature::StoragePushConstant16,
* @relativeref{DeviceFeature,ShaderInt8}
* @requires_vk12 Extension @vk_extension{KHR,8bit_storage}
*/
StoragePushConstant8,
/* VkPhysicalDeviceShaderAtomicInt64Features, #181 */
/**
* Whether shaders can perform 64-bit integer atomic operations on buffers.
* @see @ref DeviceFeature::ShaderSharedInt64Atomics
* @requires_vk12 Extension @vk_extension{KHR,shader_atomic_int64}
*/
ShaderBufferInt64Atomics,
/**
* Whether shaders can perform 64-bit integer atomic operations on shared
* memory.
* @see @ref DeviceFeature::ShaderBufferInt64Atomics
* @requires_vk12 Extension @vk_extension{KHR,shader_atomic_int64}
*/
ShaderSharedInt64Atomics,
/* VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT, #191 */
/**
* Whether vertex attribute fetching may be repeated in case of instanced
* rendering.
* @requires_vk_extension Extension @vk_extension{EXT,vertex_attribute_divisor}
*/
VertexAttributeInstanceRateDivisor,
/**
* Whether zero vertex attribute divisor is supported.
* @requires_vk_extension Extension @vk_extension{EXT,vertex_attribute_divisor}
*/
VertexAttributeInstanceRateZeroDivisor,
/* VkPhysicalDeviceTimelineSemaphoreFeatures, #208 */
/**
* Whether timeline semaphores are supported.
* @requires_vk12 Extension @vk_extension{KHR,timeline_semaphore}
*/
TimelineSemaphore,
/* VkPhysicalDeviceVulkanMemoryModelFeatures, #212 */
/**
* Whether the Vulkan Memory Model is supported.
* @see @ref DeviceFeature::VulkanMemoryModelDeviceScope,
* @relativeref{DeviceFeature,VulkanMemoryModelAvailabilityVisibilityChains}
* @requires_vk12 Extension @vk_extension{KHR,vulkan_memory_model}
*/
VulkanMemoryModel,
/**
* Whether the Vulkan Memory Model can use device scope synchronization.
* @see @ref DeviceFeature::VulkanMemoryModel,
* @relativeref{DeviceFeature,VulkanMemoryModelAvailabilityVisibilityChains}
* @requires_vk12 Extension @vk_extension{KHR,vulkan_memory_model}
*/
VulkanMemoryModelDeviceScope,
/**
* Whether the Vulkan Memory Model can use availability and visibility
* chains with more than one element.
* @see @ref DeviceFeature::VulkanMemoryModel,
* @relativeref{DeviceFeature,VulkanMemoryModelDeviceScope}
* @requires_vk12 Extension @vk_extension{KHR,vulkan_memory_model} since
* revision 3
*/
VulkanMemoryModelAvailabilityVisibilityChains,
/* VkPhysicalDeviceScalarBlockLayoutFeatures, #222 */
/**
* Whether layout of resource blocks in shaders using scalar alignment is
* supported.
* @requires_vk12 Extension @vk_extension{EXT,scalar_block_layout}
*/
ScalarBlockLayout,
/* VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures, #242 */
/**
* Whether the implementation supports an image barrier for a depth/stencil
* image with only one of the depth/stencil aspects and whether separate
* depth/stencil layouts can be used.
* @requires_vk12 Extension @vk_extension{KHR,separate_depth_stencil_layouts}
* @todoc link to the actual ImageAspect and ImageLayout members once they
* all exist
*/
SeparateDepthStencilLayouts,
/* VkPhysicalDeviceUniformBufferStandardLayoutFeatures, #254 */
/**
* Whether same layouts for uniform buffers as for storage and other kinds
* of buffers are supported.
* @requires_vk12 Extension @vk_extension{KHR,uniform_buffer_standard_layout}
*/
UniformBufferStandardLayout,
/* VkPhysicalDeviceBufferDeviceAddressFeatures, #258 */
/**
* Whether accessing buffer memory in shaders as storage buffers via an
* address queried from @fn_vk{GetBufferDeviceAddress} is supported.
* @see @ref DeviceFeature::BufferDeviceAddressCaptureReplay,
* @relativeref{DeviceFeature,BufferDeviceAddressMultiDevice}
* @requires_vk12 Extension @vk_extension{KHR,buffer_device_address}
*/
BufferDeviceAddress,
/**
* Whether saving and reusing buffer dand device addresses for trace
* capture and replay is supported.
* @see @ref DeviceFeature::BufferDeviceAddress,
* @relativeref{DeviceFeature,BufferDeviceAddressMultiDevice}
* @requires_vk12 Extension @vk_extension{KHR,buffer_device_address}
*/
BufferDeviceAddressCaptureReplay,
/**
* Whether @ref DeviceFeature::BufferDeviceAddress,
* @relativeref{DeviceFeature,RayTracingPipeline} and
* @relativeref{DeviceFeature,RayQuery} for logical devices created with
* multiple physical devices is supported.
* @requires_vk12 Extension @vk_extension{KHR,buffer_device_address}
*/
BufferDeviceAddressMultiDevice,
/* VkPhysicalDeviceHostQueryResetFeatures, #262 */
/**
* Whether queries can be reset from the host with @fn_vk{ResetQueryPool}.
* @requires_vk12 Extension @vk_extension{EXT,host_query_reset}
*/
HostQueryReset,
/* VkPhysicalDeviceIndexTypeUint8FeaturesEXT, #266 */
/**
* Whether an 8-bit type can be used in index buffers.
* @see @ref DeviceFeature::FullDrawIndexUnsignedInt
* @requires_vk_extension Extension @vk_extension{EXT,index_type_uint8}
*/
IndexTypeUnsignedByte,
/* VkPhysicalDeviceExtendedDynamicStateFeaturesEXT, #268 */
/**
* The @ref DynamicRasterizationState::CullMode,
* @relativeref{DynamicRasterizationState,FrontFace},
* @relativeref{DynamicRasterizationState,MeshPrimitive},
* @relativeref{DynamicRasterizationState,ViewportWithCount},
* @relativeref{DynamicRasterizationState,ScissorWithCount},
* @relativeref{DynamicRasterizationState,VertexInputBindingStride},
* @relativeref{DynamicRasterizationState,DepthTestEnable},
* @relativeref{DynamicRasterizationState,DepthWriteEnable},
* @relativeref{DynamicRasterizationState,DepthCompareOperation},
* @relativeref{DynamicRasterizationState,DepthBoundsTestEnable},
* @relativeref{DynamicRasterizationState,StencilTestEnable} and
* @relativeref{DynamicRasterizationState,StencilOperation} extended
* dynamic state is supported.
* @requires_vk_extension Extension @vk_extension{EXT,extended_dynamic_state}
*/
ExtendedDynamicState,
/* VkPhysicalDeviceRobustness2FeaturesEXT, #287 */
/**
* Whether accesses to buffers are bounds-checked against the range of the
* buffer descriptor, rounded up to a multiple of buffer access size
* alignment. Out of bounds writes are guaranteed to be discarded, out of
* bounds reads are guaranteed to return zero values. A stricter but more
* expensive variant of @ref DeviceFeature::RobustBufferAccess.
* @requires_vk_extension Extension @vk_extension{EXT,robustness2}
* @todo expose the alignment limit
*/
RobustBufferAccess2,
/**
* Whether accesses to images are bounds-checked against the dimensions of
* the image view. Out of bounds loads are guaranteed to return zero
* values, with @f$ (0, 0, 0, 1) @f$ inserted for missing components based
* on the image format. A stricted but more expensive variant of
* @ref DeviceFeature::RobustImageAccess.
* @see @ref DeviceFeature::RobustBufferAccess,
* @relativeref{DeviceFeature,RobustBufferAccess2}
* @requires_vk_extension Extension @vk_extension{EXT,robustness2}
*/
RobustImageAccess2,
/**
* Whether descriptors can be written with a null resource or view handle,
* at which point they're considered valid and act as if the descriptor was
* bound to nothing.
* @requires_vk_extension Extension @vk_extension{EXT,robustness2}
*/
NullDescriptor,
/* VkPhysicalDeviceImageRobustnessFeaturesEXT, #336 */
/**
* Whether accesses to images are bounds-checked against the dimensions of
* the image view. Out of bounds loads are guaranteed to return zero
* values, with either @f$ (0, 0, 0, 0) @f$ or @f$ (0, 0, 0, 1) @f$
* inserted for missing components based on the image format, with no
* guarantees provided for values returned for an invalid mip level. A
* subset of the guarantees provided by
* @ref DeviceFeature::RobustImageAccess2.
* @see @ref DeviceFeature::RobustBufferAccess,
* @relativeref{DeviceFeature,RobustBufferAccess2}
* @requires_vk_extension Extension @vk_extension{EXT,image_robustness}
*/
RobustImageAccess,
/* VkPhysicalDeviceRayTracingPipelineFeaturesKHR, #348 */
/**
* Whether ray tracing pipeline functionality is supported.
* @requires_vk_extension Extension @vk_extension{KHR,ray_tracing_pipeline}
*/
RayTracingPipeline,
/**
* Whether saving and reusing shader group handles for trace capture and
* replay is supported.
* @requires_vk_extension Extension @vk_extension{KHR,ray_tracing_pipeline}
*/
RayTracingPipelineShaderGroupHandleCaptureReplay,
/**
* Whether reused shader group handles can be arbitrarily mixed with
* creation of non-reused shader group handles.
* @requires_vk_extension Extension @vk_extension{KHR,ray_tracing_pipeline}
*/
RayTracingPipelineShaderGroupHandleCaptureReplayMixed,
/**
* Whether indirect trace ray commands are supported.
* @requires_vk_extension Extension @vk_extension{KHR,ray_tracing_pipeline}
*/
RayTracingPipelineTraceRaysIndirect,
/**
* Whether primitive culling during ray traversal is supported.
* @requires_vk_extension Extension @vk_extension{KHR,ray_tracing_pipeline}
*/
RayTraversalPrimitiveCulling,
/* VkPhysicalDeviceRayQueryFeaturesKHR, #349 */
/**
* Whether ray query functionality is supported.
* @requires_vk_extension Extension @vk_extension{KHR,ray_query}
*/
RayQuery
};
/**
@brief Device features
@m_since_latest
Combines information stored in the @type_vk{PhysicalDeviceFeatures2} structure
chain.
@see @ref DeviceProperties::features()
*/
typedef Containers::BigEnumSet<DeviceFeature, 4> DeviceFeatures;
CORRADE_ENUMSET_OPERATORS(DeviceFeatures)
/**
@debugoperatorenum{DeviceFeature}
@m_since_latest
*/
MAGNUM_VK_EXPORT Debug& operator<<(Debug& debug, DeviceFeature value);
/**
@debugoperatorenum{DeviceFeatures}
@m_since_latest
*/
MAGNUM_VK_EXPORT Debug& operator<<(Debug& debug, const DeviceFeatures& value);
}}
#endif