Browse Source

Vk: expose EXT_robustness2 and EXT_image_robustness2 extensions.

pull/495/head
Vladimír Vondruš 5 years ago
parent
commit
d436e7ab50
  1. 3
      doc/vulkan-mapping.dox
  2. 2
      doc/vulkan-support.dox
  3. 6
      src/Magnum/Vk/Device.cpp
  4. 4
      src/Magnum/Vk/DeviceCreateInfo.h
  5. 57
      src/Magnum/Vk/DeviceFeatures.h
  6. 4
      src/Magnum/Vk/DeviceProperties.cpp
  7. 6
      src/Magnum/Vk/DeviceProperties.h
  8. 2
      src/Magnum/Vk/Extensions.cpp
  9. 2
      src/Magnum/Vk/Extensions.h
  10. 2
      src/Magnum/Vk/Implementation/DeviceFeatures.h
  11. 8
      src/Magnum/Vk/Implementation/deviceFeatureMapping.hpp
  12. 2
      src/MagnumExternal/Vulkan/extensions.txt
  13. 36
      src/MagnumExternal/Vulkan/flextVk.h

3
doc/vulkan-mapping.dox

@ -614,6 +614,7 @@ Vulkan structure | Matching API
@type_vk{PhysicalDeviceIDProperties} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
@type_vk{PhysicalDeviceImageFormatInfo2} @m_class{m-label m-flat m-success} **KHR, 1.1** | |
@type_vk{PhysicalDeviceImagelessFramebufferFeatures} @m_class{m-label m-flat m-success} **KHR, 1.2** | @ref DeviceFeatures
@type_vk{PhysicalDeviceImageRobustnessFeaturesEXT} @m_class{m-label m-flat m-warning} **EXT** | @ref DeviceFeatures
@type_vk{PhysicalDeviceIndexTypeUint8FeaturesEXT} @m_class{m-label m-flat m-warning} **EXT** | @ref DeviceFeatures
@type_vk{PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT} @m_class{m-label m-flat m-warning} **EXT** | @ref DeviceFeatures
@type_vk{PhysicalDeviceLimits} | |
@ -630,6 +631,8 @@ Vulkan structure | Matching API
@type_vk{PhysicalDeviceRayQueryFeaturesKHR} @m_class{m-label m-flat m-warning} **KHR** | @ref DeviceFeatures
@type_vk{PhysicalDeviceRayTracingPipelineFeaturesKHR} @m_class{m-label m-flat m-warning} **KHR** | @ref DeviceFeatures
@type_vk{PhysicalDeviceRayTracingPipelinePropertiesKHR} @m_class{m-label m-flat m-warning} **KHR** | |
@type_vk{PhysicalDeviceRobustness2FeaturesEXT} @m_class{m-label m-flat m-warning} **EXT** | @ref DeviceFeatures
@type_vk{PhysicalDeviceRobustness2PropertiesEXT} @m_class{m-label m-flat m-warning} **EXT** | |
@type_vk{PhysicalDeviceSamplerFilterMinmaxProperties} @m_class{m-label m-flat m-success} **EXT, 1.2** | |
@type_vk{PhysicalDeviceSamplerYcbcrConversionFeatures} @m_class{m-label m-flat m-success} **KHR, 1.1** | @ref DeviceFeatures
@type_vk{PhysicalDeviceSeparateDepthStencilLayoutsFeatures} @m_class{m-label m-flat m-success} **KHR, 1.2** | @ref DeviceFeatures

2
doc/vulkan-support.dox

@ -123,6 +123,8 @@ Extension | Status
@vk_extension{EXT,vertex_attribute_divisor} | done
@vk_extension{EXT,index_type_uint8} | @ref Vk::vkIndexType() only
@vk_extension{EXT,extended_dynamic_state} | |
@vk_extension{EXT,robustness2} | done except properties
@vk_extension{EXT,image_robustness} | done
@vk_extension{KHR,acceleration_structure} | |
@vk_extension{KHR,portability_subset} | done except properties
@vk_extension{KHR,deferred_host_operations} | |

6
src/Magnum/Vk/Device.cpp

@ -412,6 +412,8 @@ DeviceCreateInfo& DeviceCreateInfo::setEnabledFeatures(const DeviceFeatures& fea
_state->features.hostQueryReset,
_state->features.indexTypeUint8,
_state->features.extendedDynamicState,
_state->features.robustness2,
_state->features.imageRobustness,
_state->features.rayTracingPipeline,
_state->features.rayQuery
});
@ -533,6 +535,10 @@ DeviceCreateInfo& DeviceCreateInfo::setEnabledFeatures(const DeviceFeatures& fea
_state->features.indexTypeUint8, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT);
structureConnectIfUsed(next, _state->firstEnabledFeature,
_state->features.extendedDynamicState, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT);
structureConnectIfUsed(next, _state->firstEnabledFeature,
_state->features.robustness2, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT);
structureConnectIfUsed(next, _state->firstEnabledFeature,
_state->features.imageRobustness, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT);
structureConnectIfUsed(next, _state->firstEnabledFeature,
_state->features.rayTracingPipeline, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR);
structureConnectIfUsed(next, _state->firstEnabledFeature,

4
src/Magnum/Vk/DeviceCreateInfo.h

@ -268,6 +268,10 @@ class MAGNUM_VK_EXPORT DeviceCreateInfo {
* (@vk_extension{EXT,index_type_uint8})
* - @type_vk_keyword{PhysicalDeviceExtendedDynamicStateFeaturesEXT}
* (@vk_extension{EXT,extended_dynamic_state})
* - @type_vk_keyword{PhysicalDeviceRobustness2FeaturesEXT}
* (@vk_extension{EXT,robustness2})
* - @type_vk_keyword{PhysicalDeviceImageRobustnessFeaturesEXT}
* (@vk_extension{EXT,image_robustness})
* - @type_vk_keyword{PhysicalDeviceRayTracingPipelineFeaturesKHR}
* (@vk_extension{KHR,ray_tracing_pipeline})
* - @type_vk_keyword{PhysicalDeviceRayQueryFeaturesKHR}

57
src/Magnum/Vk/DeviceFeatures.h

@ -59,8 +59,12 @@ usually just with the first letter uppercase instead of lowercase.
enum class DeviceFeature: UnsignedShort {
/**
* Whether accesses to buffers are bounds-checked against the range of the
* buffer descriptor.
* @todo expose @vk_extension{EXT,robustness2}, reference from here
* 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,
@ -1292,6 +1296,55 @@ enum class DeviceFeature: UnsignedShort {
*/
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 */
/**

4
src/Magnum/Vk/DeviceProperties.cpp

@ -339,6 +339,10 @@ const DeviceFeatures& DeviceProperties::features() {
Implementation::structureConnect(next, features.indexTypeUint8, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT);
if(isOrVersionSupportedInternal<Extensions::EXT::extended_dynamic_state>())
Implementation::structureConnect(next, features.extendedDynamicState, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT);
if(isOrVersionSupportedInternal<Extensions::EXT::robustness2>())
Implementation::structureConnect(next, features.robustness2, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT);
if(isOrVersionSupportedInternal<Extensions::EXT::image_robustness>())
Implementation::structureConnect(next, features.imageRobustness, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT);
if(isOrVersionSupportedInternal<Extensions::KHR::ray_tracing_pipeline>())
Implementation::structureConnect(next, features.rayTracingPipeline, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR);
if(isOrVersionSupportedInternal<Extensions::KHR::ray_query>())

6
src/Magnum/Vk/DeviceProperties.h

@ -492,6 +492,12 @@ class MAGNUM_VK_EXPORT DeviceProperties {
* - If the @vk_extension{EXT,extended_dynamic_state} extension is
* supported by the device, the `pNext` chain contains
* @type_vk_keyword{PhysicalDeviceExtendedDynamicStateFeaturesEXT}
* - If the @vk_extension{EXT,robustness2} extension is supported by
* the device, the `pNext` chain contains
* @type_vk_keyword{PhysicalDeviceRobustness2FeaturesEXT}
* - If the @vk_extension{EXT,image_robustness} extension is
* supported by the device, the `pNext` chain contains
* @type_vk_keyword{PhysicalDeviceImageRobustnessFeaturesEXT}
* - If the @vk_extension{KHR,ray_tracing_pipeline} extension is
* supported by the device, the `pNext` chain contains
* @type_vk_keyword{PhysicalDeviceRayTracingPipelineFeaturesKHR}

2
src/Magnum/Vk/Extensions.cpp

@ -69,7 +69,9 @@ namespace {
constexpr Extension DeviceExtensions[] {
Extensions::EXT::debug_marker{},
Extensions::EXT::extended_dynamic_state{},
Extensions::EXT::image_robustness{},
Extensions::EXT::index_type_uint8{},
Extensions::EXT::robustness2{},
Extensions::EXT::texture_compression_astc_hdr{},
Extensions::EXT::vertex_attribute_divisor{},
Extensions::IMG::format_pvrtc{},

2
src/Magnum/Vk/Extensions.h

@ -124,6 +124,8 @@ namespace EXT {
_extension(8, EXT,host_query_reset, Vk10, Vk12) // #262
_extension(9, EXT,index_type_uint8, Vk10, None) // #266
_extension(10, EXT,extended_dynamic_state, Vk10, None) // #268
_extension(11, EXT,robustness2, Vk10, None) // #287
_extension(12, EXT,image_robustness, Vk10, None) // #336
} namespace IMG {
_extension(20, IMG,format_pvrtc, Vk10, None) // #55
} namespace KHR {

2
src/Magnum/Vk/Implementation/DeviceFeatures.h

@ -61,6 +61,8 @@ struct DeviceFeatures {
VkPhysicalDeviceHostQueryResetFeatures hostQueryReset;
VkPhysicalDeviceIndexTypeUint8FeaturesEXT indexTypeUint8;
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extendedDynamicState;
VkPhysicalDeviceRobustness2FeaturesEXT robustness2;
VkPhysicalDeviceImageRobustnessFeaturesEXT imageRobustness;
VkPhysicalDeviceRayTracingPipelineFeaturesKHR rayTracingPipeline;
VkPhysicalDeviceRayQueryFeaturesKHR rayQuery;
};

8
src/Magnum/Vk/Implementation/deviceFeatureMapping.hpp

@ -217,6 +217,14 @@ _cext(IndexTypeUint8, indexTypeUint8, indexTypeUint8, EXT::index_type_uint8)
_cext(ExtendedDynamicState, extendedDynamicState, extendedDynamicState, EXT::extended_dynamic_state)
#define _ce(value, field) _cext(value, field, robustness2, EXT::robustness2)
_ce(RobustBufferAccess2, robustBufferAccess2)
_ce(RobustImageAccess2, robustImageAccess2)
_ce(NullDescriptor, nullDescriptor)
#undef _ce
_cext(RobustImageAccess, robustImageAccess, imageRobustness, EXT::image_robustness)
#define _ce(value, field) _cext(value, field, rayTracingPipeline, KHR::ray_tracing_pipeline)
_ce(RayTracingPipeline, rayTracingPipeline)
_ce(RayTracingPipelineShaderGroupHandleCaptureReplay, rayTracingPipelineShaderGroupHandleCaptureReplay)

2
src/MagnumExternal/Vulkan/extensions.txt vendored

@ -64,6 +64,8 @@ extension EXT_texture_compression_astc_hdr optional
extension EXT_vertex_attribute_divisor optional
extension EXT_index_type_uint8 optional
extension EXT_extended_dynamic_state optional
extension EXT_robustness2 optional
extension EXT_image_robustness optional
extension IMG_format_pvrtc optional
extension KHR_acceleration_structure optional
extension KHR_portability_subset optional

36
src/MagnumExternal/Vulkan/flextVk.h vendored

@ -259,6 +259,16 @@ extern "C" {
#define VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION 1
#define VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_extended_dynamic_state"
/* VK_EXT_robustness2 */
#define VK_EXT_ROBUSTNESS_2_SPEC_VERSION 1
#define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2"
/* VK_EXT_image_robustness */
#define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1
#define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness"
/* VK_IMG_format_pvrtc */
#define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1
@ -329,7 +339,7 @@ extern "C" {
// Vulkan 1.2 version number
#define VK_API_VERSION_1_2 VK_MAKE_VERSION(1, 2, 0)// Patch version should always be set to 0
// Version of this file
#define VK_HEADER_VERSION 168
#define VK_HEADER_VERSION 169
// Complete version of this file
#define VK_HEADER_VERSION_COMPLETE VK_MAKE_VERSION(1, 2, VK_HEADER_VERSION)
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
@ -1563,6 +1573,9 @@ typedef enum {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT = 1000267000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = 1000286000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = 1000286001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = 1000335000,
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES,
@ -4768,6 +4781,27 @@ typedef struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT {
VkBool32 extendedDynamicState;
} VkPhysicalDeviceExtendedDynamicStateFeaturesEXT;
typedef struct VkPhysicalDeviceRobustness2FeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 robustBufferAccess2;
VkBool32 robustImageAccess2;
VkBool32 nullDescriptor;
} VkPhysicalDeviceRobustness2FeaturesEXT;
typedef struct VkPhysicalDeviceRobustness2PropertiesEXT {
VkStructureType sType;
void* pNext;
VkDeviceSize robustStorageBufferAccessSizeAlignment;
VkDeviceSize robustUniformBufferAccessSizeAlignment;
} VkPhysicalDeviceRobustness2PropertiesEXT;
typedef struct VkPhysicalDeviceImageRobustnessFeaturesEXT {
VkStructureType sType;
void* pNext;
VkBool32 robustImageAccess;
} VkPhysicalDeviceImageRobustnessFeaturesEXT;
typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR {
VkStructureType sType;
void* pNext;

Loading…
Cancel
Save