From d53bebcbdc214ae909e21f44a61eeef9bfcba763 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 May 2023 13:09:49 +0200 Subject: [PATCH 01/12] vkd3d: Add stricter feature checking. Try to align better with profile expectations. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/device.c | 21 +++++++++++++++++++-- libs/vkd3d/state.c | 3 +-- libs/vkd3d/vkd3d_private.h | 3 --- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 4ec6baf99a..d615348ae7 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -2071,7 +2071,6 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device, vulkan_info->device_limits = physical_device_info->properties2.properties.limits; vulkan_info->sparse_properties = physical_device_info->properties2.properties.sparseProperties; vulkan_info->rasterization_stream = physical_device_info->xfb_properties.transformFeedbackRasterizationStreamSelect; - vulkan_info->transform_feedback_queries = physical_device_info->xfb_properties.transformFeedbackQueries; vulkan_info->max_vertex_attrib_divisor = max(physical_device_info->vertex_divisor_properties.maxVertexAttribDivisor, 1); if (!physical_device_info->conditional_rendering_features.conditionalRendering) @@ -2079,7 +2078,18 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device, if (!physical_device_info->depth_clip_features.depthClipEnable) vulkan_info->EXT_depth_clip_enable = false; - vulkan_info->vertex_attrib_zero_divisor = physical_device_info->vertex_divisor_features.vertexAttributeInstanceRateZeroDivisor; + if (!physical_device_info->vertex_divisor_features.vertexAttributeInstanceRateDivisor || + !physical_device_info->vertex_divisor_features.vertexAttributeInstanceRateZeroDivisor) + { + ERR("Lacking support for VK_EXT_vertex_attribute_divisor.\n"); + return E_INVALIDARG; + } + + if (!physical_device_info->xfb_properties.transformFeedbackQueries) + { + ERR("Lacking support for transform feedback.\n"); + return E_INVALIDARG; + } /* Disable unused Vulkan features. The following features need * to remain enabled for DXVK in order to support D3D11on12: @@ -2135,6 +2145,13 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device, return E_INVALIDARG; } + if (!physical_device_info->robustness2_features.robustBufferAccess2 || + !physical_device_info->robustness2_features.robustImageAccess2) + { + ERR("Robustness2 features not supported. This is required.\n"); + return E_INVALIDARG; + } + if (!physical_device_info->robustness2_features.nullDescriptor) { ERR("Null descriptor in VK_EXT_robustness2 is not supported by this implementation. This is required for correct operation.\n"); diff --git a/libs/vkd3d/state.c b/libs/vkd3d/state.c index 5d0724aae4..ad2f12088c 100644 --- a/libs/vkd3d/state.c +++ b/libs/vkd3d/state.c @@ -4407,8 +4407,7 @@ static HRESULT d3d12_pipeline_state_init_graphics_create_info(struct d3d12_pipel case D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA: input_rate = VK_VERTEX_INPUT_RATE_INSTANCE; instance_divisor = e->InstanceDataStepRate; - if (instance_divisor > vk_info->max_vertex_attrib_divisor - || (!instance_divisor && !vk_info->vertex_attrib_zero_divisor)) + if (instance_divisor > vk_info->max_vertex_attrib_divisor) { FIXME("Instance divisor %u not supported by Vulkan implementation.\n", instance_divisor); instance_divisor = 1; diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 77817182ba..bb1e362032 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -170,9 +170,6 @@ struct vkd3d_vulkan_info const char* const* extension_names; bool rasterization_stream; - bool transform_feedback_queries; - - bool vertex_attrib_zero_divisor; unsigned int max_vertex_attrib_divisor; VkPhysicalDeviceLimits device_limits; From e81dace1896293db73451fdf99ee1bfb389a16c0 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 May 2023 14:17:14 +0200 Subject: [PATCH 02/12] vkd3d: Free queues if device creation fails. Found during profiles debugging. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/device.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index d615348ae7..c144e1deb8 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -7570,6 +7570,7 @@ static HRESULT d3d12_device_init(struct d3d12_device *device, out_free_private_store: vkd3d_private_store_destroy(&device->private_store); out_free_vk_resources: + d3d12_device_destroy_vkd3d_queues(device); vk_procs = &device->vk_procs; VK_CALL(vkDestroyDevice(device->vk_device, NULL)); out_free_instance: From 49d97cf6eadbff0d510797e8122d21b9f2007e77 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 May 2023 14:29:08 +0200 Subject: [PATCH 03/12] vkd3d: Avoid requiring int64 for meta shaders. Signed-off-by: Hans-Kristian Arntzen --- .../shaders/cs_resolve_binary_queries.comp | 7 +++---- libs/vkd3d/shaders/cs_resolve_query.comp | 18 ++++++++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/libs/vkd3d/shaders/cs_resolve_binary_queries.comp b/libs/vkd3d/shaders/cs_resolve_binary_queries.comp index bfcec9e7fe..3234b8e8af 100644 --- a/libs/vkd3d/shaders/cs_resolve_binary_queries.comp +++ b/libs/vkd3d/shaders/cs_resolve_binary_queries.comp @@ -1,18 +1,17 @@ #version 450 -#extension GL_ARB_gpu_shader_int64 : require #extension GL_EXT_buffer_reference : require layout(local_size_x = 64) in; layout(std430, buffer_reference, buffer_reference_align = 8) writeonly buffer dst_buffer_t { - uint64_t queries[]; + uvec2 queries[]; }; layout(std430, buffer_reference, buffer_reference_align = 8) readonly buffer src_buffer_t { - uint64_t queries[]; + uvec2 queries[]; }; layout(push_constant) @@ -26,5 +25,5 @@ void main() { uint thread_id = gl_GlobalInvocationID.x; if (thread_id < query_count) - dst_buffer.queries[thread_id] = min(src_buffer.queries[thread_id], uint64_t(1u)); + dst_buffer.queries[thread_id] = any(notEqual(src_buffer.queries[thread_id], uvec2(0))) ? uvec2(1, 0) : uvec2(0); } diff --git a/libs/vkd3d/shaders/cs_resolve_query.comp b/libs/vkd3d/shaders/cs_resolve_query.comp index d725efec01..408bf3cc86 100644 --- a/libs/vkd3d/shaders/cs_resolve_query.comp +++ b/libs/vkd3d/shaders/cs_resolve_query.comp @@ -1,6 +1,5 @@ #version 450 -#extension GL_ARB_gpu_shader_int64 : require #extension GL_EXT_buffer_reference : require layout(local_size_x = 64) in; @@ -9,12 +8,12 @@ layout(constant_id = 0) const uint c_field_count = 1; layout(std430, buffer_reference, buffer_reference_align = 8) buffer writeonly dst_queries_t { - uint64_t queries[]; + uvec2 queries[]; }; layout(std430, buffer_reference, buffer_reference_align = 8) readonly buffer src_queries_t { - uint64_t queries[]; + uvec2 queries[]; }; struct query_map_entry_t { @@ -36,6 +35,13 @@ uniform u_info_t { uint query_count; }; +uvec2 uadd64(uvec2 a, uvec2 b) { + uint carry; + uint lo = uaddCarry(a.x, b.x, carry); + uint hi = a.y + b.y + carry; + return uvec2(lo, hi); +} + void main() { uint thread_id = gl_GlobalInvocationID.x; @@ -45,7 +51,7 @@ void main() { // The query map is an array of linked lists, with the // first query_count entries guaranteed to be list heads query_map_entry_t entry = query_map.entries[thread_id]; - uint64_t dst_data[c_field_count]; + uvec2 dst_data[c_field_count]; // By copying the first query we get the reset for free for (uint i = 0; i < c_field_count; i++) @@ -56,10 +62,10 @@ void main() { entry = query_map.entries[entry.next]; for (uint i = 0; i < c_field_count; i++) - dst_data[i] += src_buffer.queries[c_field_count * entry.src_index + i]; + dst_data[i] = uadd64(dst_data[i], src_buffer.queries[c_field_count * entry.src_index + i]); } // dst_index has the same value for all entries in the list for (uint i = 0; i < c_field_count; i++) dst_buffer.queries[c_field_count * entry.dst_index + i] = dst_data[i]; -} \ No newline at end of file +} From 5ce7dc547bf442b365cde58c6dafe2277b03ec7d Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 May 2023 14:57:45 +0200 Subject: [PATCH 04/12] vkd3d: Get rid of VK_EXT_shader_viewport_index_layer. Rely on Vulkan 1.2 features here. Avoids problems with profiles layer since it will expose the EXT even if we don't declare it, since it was promoted, but enabling the EXT requires us to enable the features. Spec says that enabling both features is equivalent to enabling the EXT, so this should be okay. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/device.c | 10 +++++++--- libs/vkd3d/meta.c | 3 ++- libs/vkd3d/vkd3d_private.h | 1 - 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index c144e1deb8..865cbd1f34 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -82,7 +82,6 @@ static const struct vkd3d_optional_extension_info optional_device_extensions[] = VK_EXTENSION(EXT_IMAGE_VIEW_MIN_LOD, EXT_image_view_min_lod), VK_EXTENSION(EXT_ROBUSTNESS_2, EXT_robustness2), VK_EXTENSION(EXT_SHADER_STENCIL_EXPORT, EXT_shader_stencil_export), - VK_EXTENSION(EXT_SHADER_VIEWPORT_INDEX_LAYER, EXT_shader_viewport_index_layer), VK_EXTENSION(EXT_TRANSFORM_FEEDBACK, EXT_transform_feedback), VK_EXTENSION(EXT_VERTEX_ATTRIBUTE_DIVISOR, EXT_vertex_attribute_divisor), VK_EXTENSION(EXT_EXTENDED_DYNAMIC_STATE_2, EXT_extended_dynamic_state2), @@ -6698,7 +6697,9 @@ static void d3d12_device_caps_init_feature_options(struct d3d12_device *device) options->StandardSwizzle64KBSupported = FALSE; options->CrossNodeSharingTier = D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED; options->CrossAdapterRowMajorTextureSupported = FALSE; - options->VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation = vk_info->EXT_shader_viewport_index_layer; + options->VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation = + device->device_info.vulkan_1_2_features.shaderOutputViewportIndex && + device->device_info.vulkan_1_2_features.shaderOutputLayer; options->ResourceHeapTier = d3d12_device_determine_heap_tier(device); } @@ -7646,8 +7647,11 @@ bool d3d12_device_validate_shader_meta(struct d3d12_device *device, const struct return false; } + /* From Vulkan 1.2 promotion of the extension: + * Enabling both features is equivalent to enabling the VK_EXT_shader_viewport_index_layer extension. */ if ((meta->flags & VKD3D_SHADER_META_FLAG_USES_SHADER_VIEWPORT_INDEX_LAYER) && - !device->vk_info.EXT_shader_viewport_index_layer) + (!device->device_info.vulkan_1_2_features.shaderOutputLayer || + !device->device_info.vulkan_1_2_features.shaderOutputViewportIndex)) { WARN("Attempting to use shader viewport index layer in shader %016"PRIx64", but this requires VK_EXT_shader_viewport_index_layer.\n", meta->hash); return false; diff --git a/libs/vkd3d/meta.c b/libs/vkd3d/meta.c index d40f5fee38..e99c95d140 100644 --- a/libs/vkd3d/meta.c +++ b/libs/vkd3d/meta.c @@ -860,7 +860,8 @@ static HRESULT vkd3d_meta_ops_common_init(struct vkd3d_meta_ops_common *meta_ops { VkResult vr; - if (device->vk_info.EXT_shader_viewport_index_layer) + if (device->device_info.vulkan_1_2_features.shaderOutputViewportIndex && + device->device_info.vulkan_1_2_features.shaderOutputLayer) { if ((vr = vkd3d_meta_create_shader_module(device, SPIRV_CODE(vs_fullscreen_layer), &meta_ops_common->vk_module_fullscreen_vs)) < 0) { diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index bb1e362032..4f99cae738 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -132,7 +132,6 @@ struct vkd3d_vulkan_info bool EXT_image_view_min_lod; bool EXT_robustness2; bool EXT_shader_stencil_export; - bool EXT_shader_viewport_index_layer; bool EXT_transform_feedback; bool EXT_vertex_attribute_divisor; bool EXT_extended_dynamic_state2; From f26823740c1384ed96be402ebeffe4e99763f174 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 May 2023 15:09:42 +0200 Subject: [PATCH 05/12] vkd3d: Check for scalar UBO layout as well to enable SM 6.0. Modern Cbuffer layout is required feature. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/device.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index 865cbd1f34..da6d861220 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -6991,7 +6991,8 @@ static void d3d12_device_caps_init_shader_model(struct d3d12_device *device) if (physical_device_info->vulkan_1_1_properties.subgroupSize >= 4 && (physical_device_info->vulkan_1_1_properties.subgroupSupportedOperations & required) == required && - (physical_device_info->vulkan_1_1_properties.subgroupSupportedStages & required_stages) == required_stages) + (physical_device_info->vulkan_1_1_properties.subgroupSupportedStages & required_stages) == required_stages && + (physical_device_info->vulkan_1_2_features.scalarBlockLayout || physical_device_info->vulkan_1_2_features.uniformBufferStandardLayout)) { /* From testing on native Polaris drivers, AMD expose SM 6.5, even if lots of features are not supported. * This is a good hint that shader model versions are not tied to features which have caps bits. From 9c568e3c1e2c645594cdad203bcb8f1fd0d46c2a Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 May 2023 19:24:06 +0200 Subject: [PATCH 06/12] vkd3d: Add check for single texel alignment. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/device.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index da6d861220..f0be81cbcd 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -2090,6 +2090,13 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device, return E_INVALIDARG; } + if (!physical_device_info->vulkan_1_3_properties.storageTexelBufferOffsetSingleTexelAlignment || + !physical_device_info->vulkan_1_3_properties.uniformTexelBufferOffsetSingleTexelAlignment) + { + ERR("Lacking support for single texel alignment.\n"); + return E_INVALIDARG; + } + /* Disable unused Vulkan features. The following features need * to remain enabled for DXVK in order to support D3D11on12: * hostQueryReset, vulkanMemoryModel, synchronization2. */ From 539ced219912e07207ec14041619af853e0dbaeb Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Tue, 23 May 2023 12:26:22 +0200 Subject: [PATCH 07/12] vkd3d: Only enable GPL if independent interpolation is supported. We don't fixup interpolation, so this is required. Signed-off-by: Hans-Kristian Arntzen --- libs/vkd3d/device.c | 10 ++++++++++ libs/vkd3d/vkd3d_private.h | 1 + 2 files changed, 11 insertions(+) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index f0be81cbcd..38cad45c55 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -1568,7 +1568,10 @@ static void vkd3d_physical_device_info_init(struct vkd3d_physical_device_info *i { info->graphics_pipeline_library_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT; + info->graphics_pipeline_library_properties.sType = + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT; vk_prepend_struct(&info->features2, &info->graphics_pipeline_library_features); + vk_prepend_struct(&info->properties2, &info->graphics_pipeline_library_properties); } if (vulkan_info->EXT_fragment_shader_interlock) @@ -2067,6 +2070,13 @@ static HRESULT vkd3d_init_device_caps(struct d3d12_device *device, physical_device_info->properties2.properties.sparseProperties.residencyNonResidentStrict = VK_FALSE; } + /* We need independent interpolation to use GPL. */ + if (!physical_device_info->graphics_pipeline_library_properties.graphicsPipelineLibraryIndependentInterpolationDecoration) + { + vulkan_info->EXT_graphics_pipeline_library = false; + physical_device_info->graphics_pipeline_library_features.graphicsPipelineLibrary = VK_FALSE; + } + vulkan_info->device_limits = physical_device_info->properties2.properties.limits; vulkan_info->sparse_properties = physical_device_info->properties2.properties.sparseProperties; vulkan_info->rasterization_stream = physical_device_info->xfb_properties.transformFeedbackRasterizationStreamSelect; diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index 4f99cae738..b462c9af22 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -3947,6 +3947,7 @@ struct vkd3d_physical_device_info VkPhysicalDeviceMeshShaderPropertiesEXT mesh_shader_properties; VkPhysicalDeviceShaderModuleIdentifierPropertiesEXT shader_module_identifier_properties; VkPhysicalDeviceDescriptorBufferPropertiesEXT descriptor_buffer_properties; + VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT graphics_pipeline_library_properties; VkPhysicalDeviceProperties2KHR properties2; From 8d9d6e2e162c49d1956716213b76f9745d185e89 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 May 2023 15:26:56 +0200 Subject: [PATCH 08/12] tests: Fix layered rendering without attachment test. Check that feature is supported. Signed-off-by: Hans-Kristian Arntzen --- tests/d3d12_render_target.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/d3d12_render_target.c b/tests/d3d12_render_target.c index 8ef768fb47..69c760f75b 100644 --- a/tests/d3d12_render_target.c +++ b/tests/d3d12_render_target.c @@ -871,6 +871,7 @@ void test_multisample_rendering(void) void test_rendering_no_attachments_layers(void) { D3D12_GRAPHICS_PIPELINE_STATE_DESC pso_desc; + D3D12_FEATURE_DATA_D3D12_OPTIONS options; D3D12_ROOT_SIGNATURE_DESC rs_desc; D3D12_ROOT_PARAMETER root_param; struct test_context_desc desc; @@ -962,6 +963,14 @@ void test_rendering_no_attachments_layers(void) if (!init_test_context(&context, &desc)) return; + if (FAILED(ID3D12Device_CheckFeatureSupport(context.device, D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options))) || + !options.VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation) + { + skip("Cannot render layers from VS. Skipping.\n"); + destroy_test_context(&context); + return; + } + memset(&root_param, 0, sizeof(root_param)); memset(&rs_desc, 0, sizeof(rs_desc)); rs_desc.NumParameters = 1; From c050b6bc296693129cd2e6d28eaf7ffc629d3880 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 May 2023 15:27:14 +0200 Subject: [PATCH 09/12] tests: Actually return if SM 6.2 is not supported. Signed-off-by: Hans-Kristian Arntzen --- tests/d3d12_sm_advanced.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/d3d12_sm_advanced.c b/tests/d3d12_sm_advanced.c index 8576d97210..9f749925df 100644 --- a/tests/d3d12_sm_advanced.c +++ b/tests/d3d12_sm_advanced.c @@ -6406,6 +6406,7 @@ static void test_denorm_behavior(bool use_dxil) { skip("SM 6.2 not supported.\n"); destroy_test_context(&context); + return; } support_16bit = From 2123f8e69c9ca84afc4fe78f6cd5ae809d581f71 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 May 2023 15:47:40 +0200 Subject: [PATCH 10/12] tests: Add mechanism to override feature level in tests. For testing profile behavior, it's useful to be able to verify that we reject feature levels when features are limited. Signed-off-by: Hans-Kristian Arntzen --- tests/d3d12.c | 1 + tests/d3d12_crosstest.h | 46 ++++++++++++++++++++++++++++++++++++++-- tests/d3d12_test_utils.c | 1 + 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/tests/d3d12.c b/tests/d3d12.c index f11a8b5062..9a9014b9f9 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -43,6 +43,7 @@ START_TEST(d3d12) parse_args(argc, argv); enable_d3d12_debug_layer(argc, argv); + enable_feature_level_override(argc, argv); init_adapter_info(); pfn_D3D12CreateVersionedRootSignatureDeserializer = get_d3d12_pfn(D3D12CreateVersionedRootSignatureDeserializer); diff --git a/tests/d3d12_crosstest.h b/tests/d3d12_crosstest.h index 0296b51a5f..3a5c17385a 100644 --- a/tests/d3d12_crosstest.h +++ b/tests/d3d12_crosstest.h @@ -260,6 +260,48 @@ static inline bool join_thread(HANDLE untyped_thread) } #endif +extern D3D_FEATURE_LEVEL vkd3d_device_feature_level; +static inline void enable_feature_level_override(int argc, char **argv) +{ + static const struct + { + D3D_FEATURE_LEVEL level; + const char *tag; + } level_map[] = { + { D3D_FEATURE_LEVEL_11_0, "11_0" }, + { D3D_FEATURE_LEVEL_11_1, "11_1" }, + { D3D_FEATURE_LEVEL_12_0, "12_0" }, + { D3D_FEATURE_LEVEL_12_1, "12_1" }, + { D3D_FEATURE_LEVEL_12_2, "12_2" }, + }; + + const char *level = NULL; + int i; + + for (i = 1; i + 1 < argc; ++i) + { + if (!strcmp(argv[i], "--feature-level")) + { + level = argv[i + 1]; + break; + } + } + + vkd3d_device_feature_level = D3D_FEATURE_LEVEL_11_0; + if (level) + { + for (i = 0; i < (int)ARRAY_SIZE(level_map); i++) + { + if (!strcmp(level_map[i].tag, level)) + { + INFO("Overriding feature level %s.\n", level); + vkd3d_device_feature_level = level_map[i].level; + break; + } + } + } +} + static HRESULT wait_for_fence(ID3D12Fence *fence, uint64_t value) { unsigned int ret; @@ -380,7 +422,7 @@ static ID3D12Device *create_device(void) if (pfn_D3D12EnableExperimentalFeatures) pfn_D3D12EnableExperimentalFeatures(1, &D3D12ExperimentalShaderModels, NULL, NULL); - hr = pfn_D3D12CreateDevice(adapter, D3D_FEATURE_LEVEL_11_0, &IID_ID3D12Device, (void **)&device); + hr = pfn_D3D12CreateDevice(adapter, vkd3d_device_feature_level, &IID_ID3D12Device, (void **)&device); if (adapter) IUnknown_Release(adapter); @@ -519,7 +561,7 @@ static ID3D12Device *create_device(void) { ID3D12Device *device; HRESULT hr; - hr = D3D12CreateDevice(NULL, D3D_FEATURE_LEVEL_11_0, &IID_ID3D12Device, (void **)&device); + hr = D3D12CreateDevice(NULL, vkd3d_device_feature_level, &IID_ID3D12Device, (void **)&device); return SUCCEEDED(hr) ? device : NULL; } diff --git a/tests/d3d12_test_utils.c b/tests/d3d12_test_utils.c index 4023ecb96d..f59d8973dd 100644 --- a/tests/d3d12_test_utils.c +++ b/tests/d3d12_test_utils.c @@ -24,6 +24,7 @@ PFN_D3D12_SERIALIZE_VERSIONED_ROOT_SIGNATURE pfn_D3D12SerializeVersionedRootSign PFN_D3D12_CREATE_DEVICE pfn_D3D12CreateDevice; PFN_D3D12_ENABLE_EXPERIMENTAL_FEATURES pfn_D3D12EnableExperimentalFeatures; PFN_D3D12_GET_DEBUG_INTERFACE pfn_D3D12GetDebugInterface; +D3D_FEATURE_LEVEL vkd3d_device_feature_level = D3D_FEATURE_LEVEL_11_0; const char *vkd3d_test_platform = "other"; struct vkd3d_test_state_context vkd3d_test_state; From aac3bf070e825714ac9c515d7801fdb8fa33469b Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Tue, 23 May 2023 15:45:13 +0200 Subject: [PATCH 11/12] tests: Check for logic op support. Signed-off-by: Hans-Kristian Arntzen --- tests/d3d12_pso.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tests/d3d12_pso.c b/tests/d3d12_pso.c index 4a8fd06348..dc7d127f4b 100644 --- a/tests/d3d12_pso.c +++ b/tests/d3d12_pso.c @@ -196,6 +196,7 @@ void test_create_graphics_pipeline_state(void) { D3D12_ROOT_SIGNATURE_DESC root_signature_desc; D3D12_GRAPHICS_PIPELINE_STATE_DESC pso_desc; + D3D12_FEATURE_DATA_D3D12_OPTIONS options; ID3D12RootSignature *root_signature; ID3D12PipelineState *pipeline_state; ID3D12Device *device, *tmp_device; @@ -282,10 +283,15 @@ void test_create_graphics_pipeline_state(void) blend->IndependentBlendEnable = false; blend->RenderTarget[0].BlendEnable = false; blend->RenderTarget[0].LogicOpEnable = true; - hr = ID3D12Device_CreateGraphicsPipelineState(device, &pso_desc, - &IID_ID3D12PipelineState, (void **)&pipeline_state); - ok(hr == S_OK, "Failed to create pipeline, hr %#x.\n", hr); - ID3D12PipelineState_Release(pipeline_state); + + if (SUCCEEDED(ID3D12Device_CheckFeatureSupport(device, D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options))) && + options.OutputMergerLogicOp) + { + hr = ID3D12Device_CreateGraphicsPipelineState(device, &pso_desc, + &IID_ID3D12PipelineState, (void **) &pipeline_state); + ok(hr == S_OK, "Failed to create pipeline, hr %#x.\n", hr); + ID3D12PipelineState_Release(pipeline_state); + } /* IndependentBlendEnable must be set to false when logic operations are enabled. */ blend->IndependentBlendEnable = true; From 2fbc52932ca6bc96cb2e6892f0fd59ad05a06fd8 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 May 2023 12:30:19 +0200 Subject: [PATCH 12/12] meta: Add Vulkan profiles. --- .gitignore | 3 +- VP_D3D12_VKD3D_PROTON_profile.json | 754 ++++++++++++++++++ profiles/PROFILES.md | 508 ++++++++++++ profiles/generate_profile_solution.sh | 18 + profiles/profile-test.cpp | 87 ++ profiles/setup_profile_environment_common.sh | 10 + ...up_profile_environment_fl_11_0_baseline.sh | 2 + ...up_profile_environment_fl_11_1_baseline.sh | 2 + ...up_profile_environment_fl_12_0_baseline.sh | 2 + ...tup_profile_environment_fl_12_0_optimal.sh | 2 + ...up_profile_environment_fl_12_1_baseline.sh | 2 + ...up_profile_environment_fl_12_2_baseline.sh | 2 + ...tup_profile_environment_fl_12_2_optimal.sh | 2 + .../setup_profile_environment_maximum_nv.sh | 2 + .../setup_profile_environment_maximum_radv.sh | 2 + 15 files changed, 1397 insertions(+), 1 deletion(-) create mode 100644 VP_D3D12_VKD3D_PROTON_profile.json create mode 100644 profiles/PROFILES.md create mode 100755 profiles/generate_profile_solution.sh create mode 100644 profiles/profile-test.cpp create mode 100644 profiles/setup_profile_environment_common.sh create mode 100644 profiles/setup_profile_environment_fl_11_0_baseline.sh create mode 100644 profiles/setup_profile_environment_fl_11_1_baseline.sh create mode 100644 profiles/setup_profile_environment_fl_12_0_baseline.sh create mode 100644 profiles/setup_profile_environment_fl_12_0_optimal.sh create mode 100644 profiles/setup_profile_environment_fl_12_1_baseline.sh create mode 100644 profiles/setup_profile_environment_fl_12_2_baseline.sh create mode 100644 profiles/setup_profile_environment_fl_12_2_optimal.sh create mode 100644 profiles/setup_profile_environment_maximum_nv.sh create mode 100644 profiles/setup_profile_environment_maximum_radv.sh diff --git a/.gitignore b/.gitignore index f4e750600b..96f94b8e05 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ build build.* vkd3d-proton-*.tar.zst vkd3d-proton-*/ - +/profiles/vulkan +/profiles/profile-test diff --git a/VP_D3D12_VKD3D_PROTON_profile.json b/VP_D3D12_VKD3D_PROTON_profile.json new file mode 100644 index 0000000000..10365396d6 --- /dev/null +++ b/VP_D3D12_VKD3D_PROTON_profile.json @@ -0,0 +1,754 @@ +{ + "$schema": "https://schema.khronos.org/vulkan/profiles-0.8.1-250.json#", + "capabilities": { + "baseline_features": { + "extensions": { + "VK_KHR_push_descriptor": 1, + "VK_KHR_swapchain": 1, + "VK_EXT_calibrated_timestamps" : 1, + "VK_EXT_custom_border_color" : 1, + "VK_EXT_depth_clip_enable": 1, + "VK_EXT_robustness2": 1, + "VK_EXT_transform_feedback": 1, + "VK_EXT_vertex_attribute_divisor": 3 + }, + "features": { + "VkPhysicalDeviceCustomBorderColorFeaturesEXT": { + "customBorderColors" : true, + "customBorderColorWithoutFormat": true + }, + "VkPhysicalDeviceDepthClipEnableFeaturesEXT": { + "depthClipEnable": true + }, + "VkPhysicalDeviceRobustness2FeaturesEXT": { + "robustBufferAccess2": true, + "robustImageAccess2": true, + "nullDescriptor": true + }, + "VkPhysicalDeviceTransformFeedbackFeaturesEXT": { + "transformFeedback": true, + "geometryStreams": true + }, + "VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT": { + "vertexAttributeInstanceRateDivisor": true, + "vertexAttributeInstanceRateZeroDivisor": true + }, + "VkPhysicalDeviceVulkan11Features": { + "shaderDrawParameters": true + }, + "VkPhysicalDeviceVulkan12Features": { + "samplerMirrorClampToEdge": true, + "drawIndirectCount": true, + "descriptorIndexing": true, + "shaderUniformTexelBufferArrayDynamicIndexing": true, + "shaderStorageTexelBufferArrayDynamicIndexing": true, + "shaderSampledImageArrayNonUniformIndexing": true, + "shaderStorageImageArrayNonUniformIndexing": true, + "shaderStorageBufferArrayNonUniformIndexing": true, + "shaderUniformTexelBufferArrayNonUniformIndexing": true, + "shaderStorageTexelBufferArrayNonUniformIndexing": true, + "descriptorBindingSampledImageUpdateAfterBind": true, + "descriptorBindingStorageImageUpdateAfterBind": true, + "descriptorBindingStorageBufferUpdateAfterBind": true, + "descriptorBindingUniformTexelBufferUpdateAfterBind": true, + "descriptorBindingStorageTexelBufferUpdateAfterBind": true, + "descriptorBindingUpdateUnusedWhilePending": true, + "descriptorBindingPartiallyBound": true, + "descriptorBindingVariableDescriptorCount": true, + "runtimeDescriptorArray": true, + "separateDepthStencilLayouts": true, + "timelineSemaphore": true, + "bufferDeviceAddress": true, + "vulkanMemoryModel": true, + "vulkanMemoryModelDeviceScope": true, + "hostQueryReset": true + }, + "VkPhysicalDeviceVulkan13Features": { + "shaderDemoteToHelperInvocation": true, + "synchronization2": true, + "dynamicRendering": true, + "maintenance4": true + }, + "VkPhysicalDeviceFeatures": { + "robustBufferAccess": true, + "fullDrawIndexUint32": true, + "imageCubeArray": true, + "independentBlend": true, + "geometryShader": true, + "tessellationShader": true, + "sampleRateShading": true, + "dualSrcBlend": true, + "multiDrawIndirect": true, + "drawIndirectFirstInstance": true, + "depthClamp": true, + "depthBiasClamp": true, + "fillModeNonSolid": true, + "multiViewport": true, + "samplerAnisotropy": true, + "textureCompressionBC": true, + "occlusionQueryPrecise": true, + "pipelineStatisticsQuery": true, + "fragmentStoresAndAtomics": true, + "shaderImageGatherExtended": true, + "shaderStorageImageExtendedFormats": true, + "shaderUniformBufferArrayDynamicIndexing": true, + "shaderSampledImageArrayDynamicIndexing": true, + "shaderStorageBufferArrayDynamicIndexing": true, + "shaderStorageImageArrayDynamicIndexing": true, + "shaderClipDistance": true, + "shaderCullDistance": true, + "shaderStorageImageWriteWithoutFormat": true + } + }, + "properties": { + "VkPhysicalDevicePushDescriptorPropertiesKHR": { + "maxPushDescriptors": 32 + }, + "VkPhysicalDeviceCustomBorderColorPropertiesEXT": { + "maxCustomBorderColorSamplers": 2048 + }, + "VkPhysicalDeviceTransformFeedbackPropertiesEXT": { + "transformFeedbackQueries": true, + "transformFeedbackRasterizationStreamSelect": false, + "transformFeedbackStreamsLinesTriangles": false, + "transformFeedbackDraw": false + }, + "VkPhysicalDeviceVulkan13Properties": { + "storageTexelBufferOffsetSingleTexelAlignment": true, + "uniformTexelBufferOffsetSingleTexelAlignment": true + } + } + }, + "fl_11_1_features": { + "features": { + "VkPhysicalDeviceFeatures": { + "vertexPipelineStoresAndAtomics": true, + "logicOp": true + } + } + }, + "fl_12_0_features": { + "features": { + "VkPhysicalDeviceFeatures": { + "sparseBinding": true, + "sparseResidencyAliased": true, + "sparseResidencyBuffer": true, + "sparseResidencyImage2D": true, + "shaderResourceResidency": true, + "shaderResourceMinLod": true + }, + "VkPhysicalDeviceVulkan12Features": { + "samplerFilterMinmax": true + } + }, + "queueFamiliesProperties": [ + { + "VkQueueFamilyProperties": { + "queueFlags": [ "VK_QUEUE_SPARSE_BINDING_BIT" ], + "queueCount": 1 + } + } + ] + }, + "fl_12_1_features": { + "extensions": { + "VK_EXT_conservative_rasterization": 1 + } + }, + "fl_12_1_features_rov": { + "extensions": { + "VK_EXT_fragment_shader_interlock": 1 + }, + "features": { + "VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT": { + "fragmentShaderSampleInterlock": true, + "fragmentShaderPixelInterlock": true + } + } + }, + "fl_12_2_features": { + "extensions": { + "VK_KHR_ray_tracing_pipeline": 1, + "VK_KHR_acceleration_structure": 1, + "VK_KHR_deferred_host_operations": 1, + "VK_KHR_ray_query": 1, + "VK_KHR_pipeline_library": 1, + "VK_KHR_fragment_shading_rate": 1, + "VK_EXT_pipeline_library_group_handles": 1, + "VK_KHR_ray_tracing_maintenance1": 1, + "VK_EXT_mesh_shader": 1 + }, + "formats": { + "VK_FORMAT_R32G32_SFLOAT": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R32G32B32_SFLOAT": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R16G16_SFLOAT": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R16G16_SNORM": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R16G16B16A16_SFLOAT": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R16G16B16A16_SNORM": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R16G16B16A16_UNORM": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R16G16_UNORM": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_A2B10G10R10_UNORM_PACK32": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R8G8B8A8_UNORM": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R8G8_UNORM": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R8G8B8A8_SNORM": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + }, + "VK_FORMAT_R8G8_SNORM": { + "VkFormatProperties": { + "bufferFeatures": [ "VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR" ] } + } + }, + "features": { + "VkPhysicalDeviceAccelerationStructureFeaturesKHR": { + "accelerationStructure": true + }, + "VkPhysicalDeviceRayTracingPipelineFeaturesKHR": { + "rayTracingPipeline": true, + "rayTracingPipelineTraceRaysIndirect": true, + "rayTraversalPrimitiveCulling": true + }, + "VkPhysicalDeviceRayQueryFeaturesKHR": { + "rayQuery": true + }, + "VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR": { + "rayTracingMaintenance1": true, + "rayTracingPipelineTraceRaysIndirect2": true + }, + "VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT": { + "pipelineLibraryGroupHandles": true + }, + "VkPhysicalDeviceMeshShaderFeaturesEXT": { + "taskShader": true, + "meshShader": true, + "primitiveFragmentShadingRateMeshShader": true + }, + "VkPhysicalDeviceFragmentShadingRateFeaturesKHR": { + "pipelineFragmentShadingRate": true, + "primitiveFragmentShadingRate": true, + "attachmentFragmentShadingRate": true + }, + "VkPhysicalDeviceFeatures": { + "shaderInt64": true, + "depthBounds": true, + "sparseResidencyImage3D": true + }, + "VkPhysicalDeviceVulkan12Features": { + "shaderOutputViewportIndex": true, + "shaderOutputLayer": true + } + }, + "properties": { + "VkPhysicalDeviceConservativeRasterizationPropertiesEXT": { + "degenerateTrianglesRasterized": true, + "fullyCoveredFragmentShaderInputVariable": true + }, + "VkPhysicalDeviceFragmentShadingRatePropertiesKHR": { + "fragmentShadingRateNonTrivialCombinerOps": true + } + }, + "queueFamiliesProperties": [ + { + "VkQueueFamilyProperties": { + "queueFlags": [ "VK_QUEUE_TRANSFER_BIT" ], + "timestampValidBits": 1 + } + } + ] + }, + "fl_11_0_properties": { + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { "bufferImageGranularity": 65536 } + }, + "VkPhysicalDeviceVulkan12Properties": { + "robustBufferAccessUpdateAfterBind": true, + "maxPerStageDescriptorUpdateAfterBindStorageBuffers": 1000000, + "maxPerStageDescriptorUpdateAfterBindSampledImages": 1000000, + "maxPerStageDescriptorUpdateAfterBindStorageImages": 1000000 + } + } + }, + "fl_12_0_properties": { + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { "bufferImageGranularity": 65536 }, + "sparseProperties": { + "residencyStandard2DBlockShape": true, + "residencyAlignedMipSize": false, + "residencyNonResidentStrict": true + } + }, + "VkPhysicalDeviceVulkan12Properties": { + "robustBufferAccessUpdateAfterBind": true, + "maxPerStageDescriptorUpdateAfterBindStorageBuffers": 1000000, + "maxPerStageDescriptorUpdateAfterBindSampledImages": 1000000, + "maxPerStageDescriptorUpdateAfterBindStorageImages": 1000000, + "filterMinmaxSingleComponentFormats": true + } + } + }, + "fl_12_0_optimal_properties": { + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { "bufferImageGranularity": 65536, "maxPushConstantsSize": 256 }, + "sparseProperties": { + "residencyStandard2DBlockShape": true, + "residencyAlignedMipSize": false, + "residencyNonResidentStrict": true + } + }, + "VkPhysicalDeviceVulkan12Properties": { + "robustBufferAccessUpdateAfterBind": true, + "maxPerStageDescriptorUpdateAfterBindStorageBuffers": 1000000, + "maxPerStageDescriptorUpdateAfterBindSampledImages": 1000000, + "maxPerStageDescriptorUpdateAfterBindStorageImages": 1000000, + "filterMinmaxSingleComponentFormats": true + } + } + }, + "fl_12_2_properties": { + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { "bufferImageGranularity": 65536 }, + "sparseProperties": { + "residencyStandard2DBlockShape": true, + "residencyStandard3DBlockShape": true, + "residencyAlignedMipSize": false, + "residencyNonResidentStrict": true + } + }, + "VkPhysicalDeviceVulkan12Properties": { + "robustBufferAccessUpdateAfterBind": true, + "maxPerStageDescriptorUpdateAfterBindStorageBuffers": 1000000, + "maxPerStageDescriptorUpdateAfterBindSampledImages": 1000000, + "maxPerStageDescriptorUpdateAfterBindStorageImages": 1000000, + "filterMinmaxSingleComponentFormats": true + } + } + }, + "fl_12_2_optimal_properties": { + "properties": { + "VkPhysicalDeviceProperties": { + "limits": { "bufferImageGranularity": 65536, "maxPushConstantsSize": 256 }, + "sparseProperties": { + "residencyStandard2DBlockShape": true, + "residencyStandard3DBlockShape": true, + "residencyAlignedMipSize": false, + "residencyNonResidentStrict": true + } + }, + "VkPhysicalDeviceVulkan12Properties": { + "robustBufferAccessUpdateAfterBind": true, + "maxPerStageDescriptorUpdateAfterBindStorageBuffers": 1000000, + "maxPerStageDescriptorUpdateAfterBindSampledImages": 1000000, + "maxPerStageDescriptorUpdateAfterBindStorageImages": 1000000, + "filterMinmaxSingleComponentFormats": true, + "shaderDenormFlushToZeroFloat32": true, + "shaderDenormPreserveFloat32": true + } + } + }, + "subgroups_none": { + "properties": { + "VkPhysicalDeviceVulkan11Properties": { + "subgroupSize": 1, + "subgroupSupportedOperations": [ "VK_SUBGROUP_FEATURE_BASIC_BIT" ] + } + } + }, + "subgroups_60": { + "properties": { + "VkPhysicalDeviceVulkan11Properties": { + "subgroupSupportedOperations": [ + "VK_SUBGROUP_FEATURE_BALLOT_BIT", + "VK_SUBGROUP_FEATURE_BASIC_BIT", + "VK_SUBGROUP_FEATURE_VOTE_BIT", + "VK_SUBGROUP_FEATURE_SHUFFLE_BIT", + "VK_SUBGROUP_FEATURE_QUAD_BIT", + "VK_SUBGROUP_FEATURE_ARITHMETIC_BIT" + ], + "subgroupSupportedStages": [ "VK_SHADER_STAGE_COMPUTE_BIT", "VK_SHADER_STAGE_FRAGMENT_BIT" ] + } + } + }, + "subgroups_66": { + "features": { + "VkPhysicalDeviceVulkan13Features": { + "subgroupSizeControl": true, + "computeFullSubgroups": true + } + }, + "properties": { + "VkPhysicalDeviceVulkan13Properties": { + "requiredSubgroupSizeStages": [ "VK_SHADER_STAGE_COMPUTE_BIT" ] + } + } + }, + "shader_model_60": { + "features": { + "VkPhysicalDeviceVulkan12Features": { + "uniformBufferStandardLayout": true + } + } + }, + "shader_model_66": { + "extensions": { + "VK_NV_compute_shader_derivatives": 1, + "VK_EXT_shader_image_atomic_int64": 1 + }, + "features": { + "VkPhysicalDeviceVulkan13Features": { + "shaderIntegerDotProduct": true + }, + "VkPhysicalDeviceVulkan12Features": { + "shaderBufferInt64Atomics": true, + "shaderSharedInt64Atomics": true, + "shaderInt8": true + }, + "VkPhysicalDeviceComputeShaderDerivativesFeaturesNV": { + "computeDerivativeGroupLinear": true + }, + "VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT": { + "shaderImageInt64Atomics": true + } + } + }, + "optimal_performance": { + "extensions": { + "VK_EXT_descriptor_buffer": 1, + "VK_EXT_mutable_descriptor_type": 1, + "VK_EXT_shader_module_identifier": 1, + "VK_KHR_present_id": 1, + "VK_KHR_present_wait": 1, + "VK_EXT_extended_dynamic_state2": 1, + "VK_EXT_graphics_pipeline_library": 1, + "VK_KHR_pipeline_library": 1, + "VK_AMD_buffer_marker": 1, + "VK_EXT_scalar_block_layout": 1 + }, + "features": { + "VkPhysicalDeviceDescriptorBufferFeaturesEXT": { + "descriptorBuffer": true, + "descriptorBufferPushDescriptors": true + }, + "VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT": { + "mutableDescriptorType": true + }, + "VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT": { + "shaderModuleIdentifier": true + }, + "VkPhysicalDevicePresentIdFeaturesKHR": { + "presentId": true + }, + "VkPhysicalDevicePresentWaitFeaturesKHR": { + "presentWait": true + }, + "VkPhysicalDeviceExtendedDynamicState2FeaturesEXT": { + "extendedDynamicState2": true, + "extendedDynamicState2PatchControlPoints": true + }, + "VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT": { + "graphicsPipelineLibrary": true + }, + "VkPhysicalDeviceVulkan13Features": { + "pipelineCreationCacheControl": true + }, + "VkPhysicalDeviceScalarBlockLayoutFeaturesEXT": { + "scalarBlockLayout": true + } + }, + "properties": { + "VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT": { + "graphicsPipelineLibraryFastLinking": true, + "graphicsPipelineLibraryIndependentInterpolationDecoration": true + } + } + }, + "optional": { + "extensions": { + "VK_EXT_conditional_rendering": 1, + "VK_EXT_external_memory_host": 1, + "VK_EXT_image_view_min_lod": 1, + "VK_EXT_image_sliced_view_of_3d": 1, + "VK_EXT_memory_priority": 1, + "VK_NV_device_generated_commands": 1 + }, + "features": { + "VkPhysicalDeviceConditionalRenderingFeaturesEXT": { + "conditionalRendering": true + }, + "VkPhysicalDeviceImageViewMinLodFeaturesEXT": { + "minLod": true + }, + "VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT": { + "imageSlicedViewOf3D": true + }, + "VkPhysicalDeviceMemoryPriorityFeaturesEXT": { + "memoryPriority": true + }, + "VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV": { + "deviceGeneratedCommands": true + }, + "VkPhysicalDeviceFeatures": { + "shaderInt16": true, + "shaderFloat64": true + }, + "VkPhysicalDeviceVulkan12Features": { + "shaderFloat16": true, + "shaderSubgroupExtendedTypes": true + } + } + }, + "optional_amd": { + "extensions": { + "VK_EXT_shader_stencil_export": 1, + "VK_AMD_device_coherent_memory": 1, + "VK_AMD_shader_core_properties": 1, + "VK_AMD_shader_core_properties2": 1 + }, + "features": { + "VkPhysicalDeviceCoherentMemoryFeaturesAMD": { + "deviceCoherentMemory": true + } + }, + "properties": { + "VkPhysicalDeviceProperties": { + "vendorID": 4098 + }, + "VkPhysicalDeviceVulkan12Properties": { + "denormBehaviorIndependence": "VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY", + "shaderDenormFlushToZeroFloat32": true, + "shaderDenormPreserveFloat16": true, + "shaderDenormPreserveFloat32": true, + "shaderDenormPreserveFloat64": true + } + } + }, + "optional_nv": { + "extensions": { + "VK_KHR_fragment_shader_barycentric": 1, + "VK_EXT_pageable_device_local_memory": 1, + "VK_NV_shader_sm_builtins": 1, + "VK_NVX_binary_import": 1, + "VK_NVX_image_view_handle": 1, + "VK_NV_device_diagnostic_checkpoints": 1 + }, + "features": { + "VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR": { + "fragmentShaderBarycentric": true + }, + "VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT": { + "pageableDeviceLocalMemory": true + } + }, + "properties": { + "VkPhysicalDeviceProperties": { + "vendorID": 4318 + } + } + } + }, + "profiles": { + "VP_D3D12_FL_11_0_baseline": { + "version": 1, + "api-version": "1.3.204", + "label": "Minimum baseline (FL 11.0)", + "description": "Minimum baseline to create a device at all.", + "capabilities": [ + "baseline_features", + "fl_11_0_properties", + "subgroups_none" + ] + }, + "VP_D3D12_FL_11_1_baseline": { + "version": 1, + "api-version": "1.3.204", + "label": "FL 11.1 baseline", + "description": "Minimum baseline to create a device with FL 11.1.", + "capabilities": [ + "baseline_features", + "fl_11_0_properties", + "subgroups_none", + "fl_11_1_features" + ] + }, + "VP_D3D12_FL_12_0_baseline": { + "version": 1, + "api-version": "1.3.204", + "label": "FL 12.0 baseline", + "description": "Minimum baseline to create a device with FL 12.0.", + "capabilities": [ + "baseline_features", + "fl_12_0_properties", + "subgroups_60", + "fl_11_1_features", + "fl_12_0_features", + "shader_model_60" + ] + }, + "VP_D3D12_FL_12_0_optimal": { + "version": 1, + "api-version": "1.3.204", + "label": "FL 12.0 optimal configuration", + "description": "Requirement to create a FL 12.0 device with optimal performance. Shader model 6.6 and optimal descriptor model.", + "contributors": {}, + "history": [ + { + "revision": 1, + "date": "2023-05-22", + "author": "Hans-Kristian Arntzen", + "comment": "First draft" + } + ], + "capabilities": [ + "baseline_features", + "fl_12_0_optimal_properties", + "subgroups_66", + "fl_11_1_features", + "fl_12_0_features", + "shader_model_60", + "shader_model_66", + "optimal_performance" + ] + }, + "VP_D3D12_FL_12_1_baseline": { + "version": 1, + "api-version": "1.3.204", + "label": "FL 12.1 baseline", + "description": "Minimum baseline to create a device with FL 12.1.", + "capabilities": [ + "baseline_features", + "fl_11_1_features", + "fl_12_0_properties", + "subgroups_60", + "fl_12_0_features", + "fl_12_1_features", + "fl_12_1_features_rov", + "shader_model_60" + ] + }, + "VP_D3D12_FL_12_2_baseline": { + "version": 1, + "api-version": "1.3.204", + "label": "FL 12.2 baseline", + "description": "Minimum baseline to create a device with FL 12.2 (TODO: missing sampler feedback).", + "capabilities": [ + "baseline_features", + "fl_11_1_features", + "subgroups_60", + "fl_12_0_features", + "fl_12_1_features", + "fl_12_1_features_rov", + "fl_12_2_features", + "fl_12_2_properties", + "shader_model_60" + ] + }, + "VP_D3D12_FL_12_2_optimal": { + "version": 1, + "api-version": "1.3.204", + "label": "FL 12.2 optimal", + "description": "Requirement to create a FL 12.2 device with optimal performance (TODO: missing sampler feedback). Shader model 6.6 and optimal descriptor model.", + "capabilities": [ + "baseline_features", + "fl_11_1_features", + "subgroups_66", + "fl_12_0_features", + "fl_12_1_features", + "fl_12_1_features_rov", + "fl_12_2_features", + "fl_12_2_properties", + "shader_model_60", + "shader_model_66", + "optimal_performance" + ] + }, + "VP_D3D12_maximum_radv": { + "version": 1, + "api-version": "1.3.204", + "label": "RADV latest", + "description": "Represents the maximum feature set vkd3d-proton takes advantage of on RADV. Expected to be supported on latest Mesa Git on RDNA2+.", + "capabilities": [ + "baseline_features", + "fl_11_1_features", + "subgroups_66", + "fl_12_0_features", + "fl_12_1_features", + "fl_12_2_features", + "fl_12_2_properties", + "shader_model_60", + "shader_model_66", + "optimal_performance", + "optional", + "optional_amd" + ] + }, + "VP_D3D12_maximum_nv": { + "version": 1, + "api-version": "1.3.204", + "label": "NVIDIA latest", + "description": "Represents the maximum feature set vkd3d-proton takes advantage of on NVIDIA. Expected to be supported on latest beta drivers on Turing+.", + "capabilities": [ + "baseline_features", + "fl_11_1_features", + "subgroups_66", + "fl_12_0_features", + "fl_12_1_features", + "fl_12_1_features_rov", + "fl_12_2_features", + "fl_12_2_properties", + "shader_model_60", + "shader_model_66", + "optimal_performance", + "optional", + "optional_nv" + ] + } + }, + "contributors": { + "Chistophe Riccio": { "company": "LunarG" }, + "Hans-Kristian Arntzen": { "company": "Valve" } + }, + "history": [ + { + "revision": 1, + "date": "2023-05-23", + "author": "Hans-Kristian Arntzen", + "comment": "First draft" + } + ] +} diff --git a/profiles/PROFILES.md b/profiles/PROFILES.md new file mode 100644 index 0000000000..f127d71f4b --- /dev/null +++ b/profiles/PROFILES.md @@ -0,0 +1,508 @@ + + +

LunarG

+

Copyright (c) 2021-2023 LunarG, Inc.

+ +

+ +[![Creative Commons][3]][4] + +[3]: https://i.creativecommons.org/l/by-nd/4.0/88x31.png "Creative Commons License" +[4]: https://creativecommons.org/licenses/by-nd/4.0/ + +# Vulkan Profiles Definitions + +## Vulkan Profiles List + +| Profiles | VP_D3D12_FL_11_0_baseline | VP_D3D12_FL_11_1_baseline | VP_D3D12_FL_12_0_baseline | VP_D3D12_FL_12_0_optimal | VP_D3D12_FL_12_1_baseline | VP_D3D12_FL_12_2_baseline | VP_D3D12_FL_12_2_optimal | VP_D3D12_maximum_nv | VP_D3D12_maximum_radv | +|----------|---------------------------|---------------------------|---------------------------|--------------------------|---------------------------|---------------------------|--------------------------|---------------------|-----------------------| +| Label | Minimum baseline (FL 11.0) | FL 11.1 baseline | FL 12.0 baseline | FL 12.0 optimal configuration | FL 12.1 baseline | FL 12.2 baseline | FL 12.2 optimal | NVIDIA latest | RADV latest | +| Description | Minimum baseline to create a device at all. | Minimum baseline to create a device with FL 11.1. | Minimum baseline to create a device with FL 12.0. | Requirement to create a FL 12.0 device with optimal performance. Shader model 6.6 and optimal descriptor model. | Minimum baseline to create a device with FL 12.1. | Minimum baseline to create a device with FL 12.2 (TODO: missing sampler feedback). | Requirement to create a FL 12.2 device with optimal performance (TODO: missing sampler feedback). Shader model 6.6 and optimal descriptor model. | Represents the maximum feature set vkd3d-proton takes advantage of on NVIDIA. Expected to be supported on latest beta drivers on Turing+. | Represents the maximum feature set vkd3d-proton takes advantage of on RADV. Expected to be supported on latest Mesa Git on RDNA2+. | +| Version | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +| Required API version | 1.3.204 | 1.3.204 | 1.3.204 | 1.3.204 | 1.3.204 | 1.3.204 | 1.3.204 | 1.3.204 | 1.3.204 | +| Fallback profiles | - | - | - | - | - | - | - | - | - | + +## Vulkan Profiles Extensions + +* :heavy_check_mark: indicates that the extension is defined in the profile +* "X.X Core" indicates that the extension is not defined in the profile but the extension is promoted to the specified core API version that is smaller than or equal to the minimum required API version of the profile +* :x: indicates that the extension is neither defined in the profile nor it is promoted to a core API version that is smaller than or equal to the minimum required API version of the profile + +| Profiles | VP_D3D12_FL_11_0_baseline | VP_D3D12_FL_11_1_baseline | VP_D3D12_FL_12_0_baseline | VP_D3D12_FL_12_0_optimal | VP_D3D12_FL_12_1_baseline | VP_D3D12_FL_12_2_baseline | VP_D3D12_FL_12_2_optimal | VP_D3D12_maximum_nv | VP_D3D12_maximum_radv | +|----------|---------------------------|---------------------------|---------------------------|--------------------------|---------------------------|---------------------------|--------------------------|---------------------|-----------------------| +| **Instance extensions** | +| [VK_KHR_device_group_creation](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_device_group_creation.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_external_fence_capabilities](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_external_fence_capabilities.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_external_memory_capabilities](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_external_memory_capabilities.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_external_semaphore_capabilities](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_external_semaphore_capabilities.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_get_physical_device_properties2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_get_physical_device_properties2.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| **Device extensions** | +| [VK_KHR_16bit_storage](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_16bit_storage.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_8bit_storage](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_8bit_storage.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_acceleration_structure](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_acceleration_structure.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_bind_memory2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_bind_memory2.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_buffer_device_address](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_buffer_device_address.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_copy_commands2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_copy_commands2.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_KHR_create_renderpass2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_create_renderpass2.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_dedicated_allocation](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_dedicated_allocation.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_deferred_host_operations](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_deferred_host_operations.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_depth_stencil_resolve](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_depth_stencil_resolve.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_descriptor_update_template](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_descriptor_update_template.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_device_group](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_device_group.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_draw_indirect_count](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_draw_indirect_count.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_driver_properties](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_driver_properties.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_dynamic_rendering](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_dynamic_rendering.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_KHR_external_fence](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_external_fence.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_external_memory](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_external_memory.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_external_semaphore](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_external_semaphore.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_format_feature_flags2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_format_feature_flags2.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_KHR_fragment_shader_barycentric](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_fragment_shader_barycentric.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | +| [VK_KHR_fragment_shading_rate](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_fragment_shading_rate.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_get_memory_requirements2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_get_memory_requirements2.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_image_format_list](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_image_format_list.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_imageless_framebuffer](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_imageless_framebuffer.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_maintenance1](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_maintenance1.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_maintenance2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_maintenance2.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_maintenance3](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_maintenance3.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_maintenance4](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_maintenance4.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_KHR_multiview](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_multiview.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_pipeline_library](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_pipeline_library.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_present_id](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_present_id.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_present_wait](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_present_wait.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_push_descriptor](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_push_descriptor.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_ray_query](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_ray_query.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_ray_tracing_maintenance1](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_ray_tracing_maintenance1.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_ray_tracing_pipeline](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_ray_tracing_pipeline.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_relaxed_block_layout](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_relaxed_block_layout.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_sampler_mirror_clamp_to_edge](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_sampler_mirror_clamp_to_edge.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_sampler_ycbcr_conversion](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_sampler_ycbcr_conversion.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_separate_depth_stencil_layouts](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_separate_depth_stencil_layouts.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_shader_atomic_int64](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_shader_atomic_int64.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_shader_draw_parameters](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_shader_draw_parameters.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_shader_float16_int8](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_shader_float16_int8.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_shader_float_controls](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_shader_float_controls.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_shader_integer_dot_product](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_shader_integer_dot_product.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_KHR_shader_non_semantic_info](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_shader_non_semantic_info.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_KHR_shader_subgroup_extended_types](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_shader_subgroup_extended_types.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_shader_terminate_invocation](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_shader_terminate_invocation.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_KHR_spirv_1_4](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_spirv_1_4.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_storage_buffer_storage_class](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_storage_buffer_storage_class.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_swapchain](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_swapchain.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_KHR_synchronization2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_synchronization2.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_KHR_timeline_semaphore](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_timeline_semaphore.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_uniform_buffer_standard_layout](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_uniform_buffer_standard_layout.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_variable_pointers](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_variable_pointers.html) | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | 1.1 Core | +| [VK_KHR_vulkan_memory_model](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_vulkan_memory_model.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_KHR_zero_initialize_workgroup_memory](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_KHR_zero_initialize_workgroup_memory.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_4444_formats](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_4444_formats.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_calibrated_timestamps](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_calibrated_timestamps.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_conditional_rendering](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_conditional_rendering.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_conservative_rasterization](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_conservative_rasterization.html) | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_custom_border_color](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_custom_border_color.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_depth_clip_enable](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_depth_clip_enable.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_descriptor_buffer](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_descriptor_buffer.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_descriptor_indexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_descriptor_indexing.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_EXT_extended_dynamic_state](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_extended_dynamic_state.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_extended_dynamic_state2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_extended_dynamic_state2.html) | 1.3 Core | 1.3 Core | 1.3 Core | :heavy_check_mark: | 1.3 Core | 1.3 Core | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_external_memory_host](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_external_memory_host.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_fragment_shader_interlock](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_fragment_shader_interlock.html) | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | +| [VK_EXT_graphics_pipeline_library](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_graphics_pipeline_library.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_host_query_reset](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_host_query_reset.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_EXT_image_robustness](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_image_robustness.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_image_sliced_view_of_3d](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_image_sliced_view_of_3d.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_image_view_min_lod](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_image_view_min_lod.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_inline_uniform_block](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_inline_uniform_block.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_memory_priority](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_memory_priority.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_mesh_shader](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_mesh_shader.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_mutable_descriptor_type](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_mutable_descriptor_type.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_pageable_device_local_memory](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_pageable_device_local_memory.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | +| [VK_EXT_pipeline_creation_cache_control](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_pipeline_creation_cache_control.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_pipeline_creation_feedback](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_pipeline_creation_feedback.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_pipeline_library_group_handles](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_pipeline_library_group_handles.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_private_data](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_private_data.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_robustness2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_robustness2.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_sampler_filter_minmax](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_sampler_filter_minmax.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_EXT_scalar_block_layout](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_scalar_block_layout.html) | 1.2 Core | 1.2 Core | 1.2 Core | :heavy_check_mark: | 1.2 Core | 1.2 Core | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_separate_stencil_usage](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_separate_stencil_usage.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_EXT_shader_demote_to_helper_invocation](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_shader_demote_to_helper_invocation.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_shader_image_atomic_int64](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_shader_image_atomic_int64.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_shader_module_identifier](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_shader_module_identifier.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_shader_stencil_export](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_shader_stencil_export.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | +| [VK_EXT_shader_viewport_index_layer](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_shader_viewport_index_layer.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_EXT_subgroup_size_control](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_subgroup_size_control.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_texel_buffer_alignment](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_texel_buffer_alignment.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_texture_compression_astc_hdr](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_texture_compression_astc_hdr.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_tooling_info](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_tooling_info.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_EXT_transform_feedback](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_transform_feedback.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_vertex_attribute_divisor](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_vertex_attribute_divisor.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_EXT_ycbcr_2plane_444_formats](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_EXT_ycbcr_2plane_444_formats.html) | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | 1.3 Core | +| [VK_AMD_buffer_marker](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_AMD_buffer_marker.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_AMD_device_coherent_memory](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_AMD_device_coherent_memory.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | +| [VK_AMD_draw_indirect_count](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_AMD_draw_indirect_count.html) | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | 1.2 Core | +| [VK_AMD_shader_core_properties](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_AMD_shader_core_properties.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | +| [VK_AMD_shader_core_properties2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_AMD_shader_core_properties2.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | +| [VK_NVX_binary_import](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_NVX_binary_import.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | +| [VK_NVX_image_view_handle](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_NVX_image_view_handle.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | +| [VK_NV_compute_shader_derivatives](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_NV_compute_shader_derivatives.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_NV_device_diagnostic_checkpoints](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_NV_device_diagnostic_checkpoints.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | +| [VK_NV_device_generated_commands](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_NV_device_generated_commands.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| [VK_NV_shader_sm_builtins](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VK_NV_shader_sm_builtins.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | + +## Vulkan Profile Features + +> **NOTE**: The table below only contains features explicitly defined by the corresponding profile. Further features may be supported by the profiles in accordance to the requirements defined in the "Feature Requirements" section of the appropriate version of the Vulkan API Specification. + +* :heavy_check_mark: indicates that the feature is defined in the profile (hover over the symbol to view the structure and corresponding extension or core API version where the feature is defined in the profile) +* :warning: indicates that the feature is not defined in the profile but an equivalent feature is (hover over the symbol to view the structure and corresponding extension or core API version where the feature is defined in the profile) +* :x: indicates that neither the feature nor an equivalent feature is defined in the profile + +| Profiles | VP_D3D12_FL_11_0_baseline | VP_D3D12_FL_11_1_baseline | VP_D3D12_FL_12_0_baseline | VP_D3D12_FL_12_0_optimal | VP_D3D12_FL_12_1_baseline | VP_D3D12_FL_12_2_baseline | VP_D3D12_FL_12_2_optimal | VP_D3D12_maximum_nv | VP_D3D12_maximum_radv | +|----------|---------------------------|---------------------------|---------------------------|--------------------------|---------------------------|---------------------------|--------------------------|---------------------|-----------------------| +| **Vulkan 1.0** | +| [depthBiasClamp](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [depthBounds](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [depthClamp](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [drawIndirectFirstInstance](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [dualSrcBlend](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [fillModeNonSolid](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [fragmentStoresAndAtomics](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [fullDrawIndexUint32](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [geometryShader](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [imageCubeArray](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [independentBlend](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [logicOp](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [multiDrawIndirect](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [multiViewport](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [occlusionQueryPrecise](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [pipelineStatisticsQuery](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [robustBufferAccess](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [sampleRateShading](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [samplerAnisotropy](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderClipDistance](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderCullDistance](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderFloat64](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderImageGatherExtended](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderInt16](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderInt64](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderResourceMinLod](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderResourceResidency](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderSampledImageArrayDynamicIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderStorageBufferArrayDynamicIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderStorageImageArrayDynamicIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderStorageImageExtendedFormats](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderStorageImageWriteWithoutFormat](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderUniformBufferArrayDynamicIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [sparseBinding](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [sparseResidencyAliased](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [sparseResidencyBuffer](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [sparseResidencyImage2D](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [sparseResidencyImage3D](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [tessellationShader](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [textureCompressionBC](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [vertexPipelineStoresAndAtomics](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFeatures.html) | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **Vulkan 1.1** | +| [shaderDrawParameters](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderDrawParametersFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **Vulkan 1.2** | +| [bufferDeviceAddress](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceBufferDeviceAddressFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [descriptorBindingPartiallyBound](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [descriptorBindingSampledImageUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [descriptorBindingStorageBufferUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [descriptorBindingStorageImageUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [descriptorBindingStorageTexelBufferUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [descriptorBindingUniformTexelBufferUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [descriptorBindingUpdateUnusedWhilePending](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [descriptorBindingVariableDescriptorCount](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [descriptorIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkan12Features.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [drawIndirectCount](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkan12Features.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [hostQueryReset](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceHostQueryResetFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [runtimeDescriptorArray](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [samplerFilterMinmax](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkan12Features.html) | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [samplerMirrorClampToEdge](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkan12Features.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [scalarBlockLayout](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceScalarBlockLayoutFeatures.html) | :x: | :x: | :x: | :warning: | :x: | :x: | :warning: | :warning: | :warning: | +| [separateDepthStencilLayouts](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderBufferInt64Atomics](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderAtomicInt64Features.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderFloat16](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderFloat16Int8Features.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderInt8](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderFloat16Int8Features.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderOutputLayer](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkan12Features.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderOutputViewportIndex](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkan12Features.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderSampledImageArrayNonUniformIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderSharedInt64Atomics](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderAtomicInt64Features.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderStorageBufferArrayNonUniformIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderStorageImageArrayNonUniformIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderStorageTexelBufferArrayDynamicIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderStorageTexelBufferArrayNonUniformIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderSubgroupExtendedTypes](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderUniformTexelBufferArrayDynamicIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderUniformTexelBufferArrayNonUniformIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [timelineSemaphore](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTimelineSemaphoreFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [uniformBufferStandardLayout](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceUniformBufferStandardLayoutFeatures.html) | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [vulkanMemoryModel](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkanMemoryModelFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [vulkanMemoryModelDeviceScope](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkanMemoryModelFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **Vulkan 1.3** | +| [computeFullSubgroups](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSubgroupSizeControlFeatures.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [dynamicRendering](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDynamicRenderingFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [maintenance4](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceMaintenance4Features.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [pipelineCreationCacheControl](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDevicePipelineCreationCacheControlFeatures.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderDemoteToHelperInvocation](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [shaderIntegerDotProduct](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderIntegerDotProductFeatures.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [subgroupSizeControl](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSubgroupSizeControlFeatures.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [synchronization2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSynchronization2Features.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_KHR_acceleration_structure** | +| [accelerationStructure](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceAccelerationStructureFeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_KHR_buffer_device_address** | +| [bufferDeviceAddress](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceBufferDeviceAddressFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_KHR_dynamic_rendering** | +| [dynamicRendering](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDynamicRenderingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_KHR_fragment_shader_barycentric** | +| [fragmentShaderBarycentric](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | +| **VK_KHR_fragment_shading_rate** | +| [attachmentFragmentShadingRate](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFragmentShadingRateFeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [pipelineFragmentShadingRate](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFragmentShadingRateFeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [primitiveFragmentShadingRate](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFragmentShadingRateFeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_KHR_maintenance4** | +| [maintenance4](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceMaintenance4Features.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_KHR_present_id** | +| [presentId](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDevicePresentIdFeaturesKHR.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_KHR_present_wait** | +| [presentWait](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDevicePresentWaitFeaturesKHR.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_KHR_ray_query** | +| [rayQuery](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceRayQueryFeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_KHR_ray_tracing_maintenance1** | +| [rayTracingMaintenance1](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [rayTracingPipelineTraceRaysIndirect2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceRayTracingMaintenance1FeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_KHR_ray_tracing_pipeline** | +| [rayTracingPipeline](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceRayTracingPipelineFeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [rayTracingPipelineTraceRaysIndirect](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceRayTracingPipelineFeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [rayTraversalPrimitiveCulling](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceRayTracingPipelineFeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_KHR_separate_depth_stencil_layouts** | +| [separateDepthStencilLayouts](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_KHR_shader_atomic_int64** | +| [shaderBufferInt64Atomics](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderAtomicInt64Features.html) | :x: | :x: | :x: | :warning: | :x: | :x: | :warning: | :warning: | :warning: | +| [shaderSharedInt64Atomics](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderAtomicInt64Features.html) | :x: | :x: | :x: | :warning: | :x: | :x: | :warning: | :warning: | :warning: | +| **VK_KHR_shader_float16_int8** | +| [shaderFloat16](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderFloat16Int8Features.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :warning: | :warning: | +| [shaderInt8](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderFloat16Int8Features.html) | :x: | :x: | :x: | :warning: | :x: | :x: | :warning: | :warning: | :warning: | +| **VK_KHR_shader_integer_dot_product** | +| [shaderIntegerDotProduct](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderIntegerDotProductFeatures.html) | :x: | :x: | :x: | :warning: | :x: | :x: | :warning: | :warning: | :warning: | +| **VK_KHR_shader_subgroup_extended_types** | +| [shaderSubgroupExtendedTypes](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :warning: | :warning: | +| **VK_KHR_synchronization2** | +| [synchronization2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSynchronization2Features.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_KHR_timeline_semaphore** | +| [timelineSemaphore](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTimelineSemaphoreFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_KHR_uniform_buffer_standard_layout** | +| [uniformBufferStandardLayout](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceUniformBufferStandardLayoutFeatures.html) | :x: | :x: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_KHR_vulkan_memory_model** | +| [vulkanMemoryModel](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkanMemoryModelFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [vulkanMemoryModelDeviceScope](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkanMemoryModelFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_EXT_conditional_rendering** | +| [conditionalRendering](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceConditionalRenderingFeaturesEXT.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_custom_border_color** | +| [customBorderColorWithoutFormat](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceCustomBorderColorFeaturesEXT.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [customBorderColors](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceCustomBorderColorFeaturesEXT.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_depth_clip_enable** | +| [depthClipEnable](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDepthClipEnableFeaturesEXT.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_descriptor_buffer** | +| [descriptorBuffer](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorBufferFeaturesEXT.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [descriptorBufferPushDescriptors](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorBufferFeaturesEXT.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_descriptor_indexing** | +| [descriptorBindingPartiallyBound](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [descriptorBindingSampledImageUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [descriptorBindingStorageBufferUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [descriptorBindingStorageImageUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [descriptorBindingStorageTexelBufferUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [descriptorBindingUniformTexelBufferUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [descriptorBindingUpdateUnusedWhilePending](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [descriptorBindingVariableDescriptorCount](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [runtimeDescriptorArray](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [shaderSampledImageArrayNonUniformIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [shaderStorageBufferArrayNonUniformIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [shaderStorageImageArrayNonUniformIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [shaderStorageTexelBufferArrayDynamicIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [shaderStorageTexelBufferArrayNonUniformIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [shaderUniformTexelBufferArrayDynamicIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| [shaderUniformTexelBufferArrayNonUniformIndexing](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_EXT_extended_dynamic_state2** | +| [extendedDynamicState2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceExtendedDynamicState2FeaturesEXT.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [extendedDynamicState2PatchControlPoints](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceExtendedDynamicState2FeaturesEXT.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_fragment_shader_interlock** | +| [fragmentShaderPixelInterlock](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT.html) | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | +| [fragmentShaderSampleInterlock](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT.html) | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: | +| **VK_EXT_graphics_pipeline_library** | +| [graphicsPipelineLibrary](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_host_query_reset** | +| [hostQueryReset](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceHostQueryResetFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_EXT_image_sliced_view_of_3d** | +| [imageSlicedViewOf3D](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceImageSlicedViewOf3DFeaturesEXT.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_image_view_min_lod** | +| [minLod](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceImageViewMinLodFeaturesEXT.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_memory_priority** | +| [memoryPriority](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceMemoryPriorityFeaturesEXT.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_mesh_shader** | +| [meshShader](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceMeshShaderFeaturesEXT.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [primitiveFragmentShadingRateMeshShader](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceMeshShaderFeaturesEXT.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [taskShader](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceMeshShaderFeaturesEXT.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_mutable_descriptor_type** | +| [mutableDescriptorType](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_pageable_device_local_memory** | +| [pageableDeviceLocalMemory](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :x: | +| **VK_EXT_pipeline_creation_cache_control** | +| [pipelineCreationCacheControl](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDevicePipelineCreationCacheControlFeatures.html) | :x: | :x: | :x: | :warning: | :x: | :x: | :warning: | :warning: | :warning: | +| **VK_EXT_pipeline_library_group_handles** | +| [pipelineLibraryGroupHandles](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT.html) | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_robustness2** | +| [nullDescriptor](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceRobustness2FeaturesEXT.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [robustBufferAccess2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceRobustness2FeaturesEXT.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [robustImageAccess2](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceRobustness2FeaturesEXT.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_scalar_block_layout** | +| [scalarBlockLayout](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceScalarBlockLayoutFeatures.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_shader_demote_to_helper_invocation** | +| [shaderDemoteToHelperInvocation](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures.html) | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | +| **VK_EXT_shader_image_atomic_int64** | +| [shaderImageInt64Atomics](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_shader_module_identifier** | +| [shaderModuleIdentifier](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceShaderModuleIdentifierFeaturesEXT.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_subgroup_size_control** | +| [computeFullSubgroups](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSubgroupSizeControlFeatures.html) | :x: | :x: | :x: | :warning: | :x: | :x: | :warning: | :warning: | :warning: | +| [subgroupSizeControl](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSubgroupSizeControlFeatures.html) | :x: | :x: | :x: | :warning: | :x: | :x: | :warning: | :warning: | :warning: | +| **VK_EXT_transform_feedback** | +| [geometryStreams](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTransformFeedbackFeaturesEXT.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [transformFeedback](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTransformFeedbackFeaturesEXT.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_EXT_vertex_attribute_divisor** | +| [vertexAttributeInstanceRateDivisor](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| [vertexAttributeInstanceRateZeroDivisor](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT.html) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_AMD_device_coherent_memory** | +| [deviceCoherentMemory](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceCoherentMemoryFeaturesAMD.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | +| **VK_NV_compute_shader_derivatives** | +| [computeDerivativeGroupLinear](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceComputeShaderDerivativesFeaturesNV.html) | :x: | :x: | :x: | :heavy_check_mark: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_NV_device_generated_commands** | +| [deviceGeneratedCommands](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :heavy_check_mark: | :heavy_check_mark: | +| **VK_NV_fragment_shader_barycentric** | +| [fragmentShaderBarycentric](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFragmentShaderBarycentricFeaturesKHR.html) | :x: | :x: | :x: | :x: | :x: | :x: | :x: | :warning: | :x: | +| **VK_VALVE_mutable_descriptor_type** | +| [mutableDescriptorType](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT.html) | :x: | :x: | :x: | :warning: | :x: | :x: | :warning: | :warning: | :warning: | + +## Vulkan Profile Limits (Properties) + +> **NOTE**: The table below only contains properties/limits explicitly defined by the corresponding profile. Further properties/limits may be supported by the profiles in accordance to the requirements defined in the "Limit Requirements" section of the appropriate version of the Vulkan API Specification. + +* "valueWithRegularFont" indicates that the limit/property is defined in the profile (hover over the value to view the structure and corresponding extension or core API version where the limit/property is defined in the profile) +* "_valueWithItalicFont_" indicates that the limit/property is not defined in the profile but an equivalent limit/property is (hover over the symbol to view the structure and corresponding extension or core API version where the limit/property is defined in the profile) +* "-" indicates that neither the limit/property nor an equivalent limit/property is defined in the profile + +| Profiles | VP_D3D12_FL_11_0_baseline | VP_D3D12_FL_11_1_baseline | VP_D3D12_FL_12_0_baseline | VP_D3D12_FL_12_0_optimal | VP_D3D12_FL_12_1_baseline | VP_D3D12_FL_12_2_baseline | VP_D3D12_FL_12_2_optimal | VP_D3D12_maximum_nv | VP_D3D12_maximum_radv | +|----------|---------------------------|---------------------------|---------------------------|--------------------------|---------------------------|---------------------------|--------------------------|---------------------|-----------------------| +| **Vulkan 1.0** | +| [bufferImageGranularity (min,mul)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceLimits.html) | 65536 | 65536 | 65536 | 65536 | 65536 | 65536 | 65536 | 65536 | 65536 | +| [residencyAlignedMipSize](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSparseProperties.html) | - | - | - | - | - | - | - | - | - | +| [residencyNonResidentStrict](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSparseProperties.html) | - | - | - | - | - | - | - | - | - | +| [residencyStandard2DBlockShape](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSparseProperties.html) | - | - | - | - | - | - | - | - | - | +| [residencyStandard3DBlockShape](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSparseProperties.html) | - | - | - | - | - | - | - | - | - | +| **Vulkan 1.1** | +| [subgroupSize (max,pot)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSubgroupProperties.html) | 1 | 1 | - | - | - | - | - | - | - | +| [subgroupSupportedOperations](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkan11Properties.html) | (VK_SUBGROUP_FEATURE_BASIC_BIT) | (VK_SUBGROUP_FEATURE_BASIC_BIT) | (VK_SUBGROUP_FEATURE_BALLOT_BIT \| VK_SUBGROUP_FEATURE_BASIC_BIT \| VK_SUBGROUP_FEATURE_VOTE_BIT \| VK_SUBGROUP_FEATURE_SHUFFLE_BIT \| VK_SUBGROUP_FEATURE_QUAD_BIT \| VK_SUBGROUP_FEATURE_ARITHMETIC_BIT) | - | (VK_SUBGROUP_FEATURE_BALLOT_BIT \| VK_SUBGROUP_FEATURE_BASIC_BIT \| VK_SUBGROUP_FEATURE_VOTE_BIT \| VK_SUBGROUP_FEATURE_SHUFFLE_BIT \| VK_SUBGROUP_FEATURE_QUAD_BIT \| VK_SUBGROUP_FEATURE_ARITHMETIC_BIT) | (VK_SUBGROUP_FEATURE_BALLOT_BIT \| VK_SUBGROUP_FEATURE_BASIC_BIT \| VK_SUBGROUP_FEATURE_VOTE_BIT \| VK_SUBGROUP_FEATURE_SHUFFLE_BIT \| VK_SUBGROUP_FEATURE_QUAD_BIT \| VK_SUBGROUP_FEATURE_ARITHMETIC_BIT) | - | - | - | +| [subgroupSupportedStages](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceVulkan11Properties.html) | - | - | (VK_SHADER_STAGE_COMPUTE_BIT \| VK_SHADER_STAGE_FRAGMENT_BIT) | - | (VK_SHADER_STAGE_COMPUTE_BIT \| VK_SHADER_STAGE_FRAGMENT_BIT) | (VK_SHADER_STAGE_COMPUTE_BIT \| VK_SHADER_STAGE_FRAGMENT_BIT) | - | - | - | +| **Vulkan 1.2** | +| [denormBehaviorIndependence (exact)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html) | - | - | - | - | - | - | - | - | VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY | +| [filterMinmaxSingleComponentFormats](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSamplerFilterMinmaxProperties.html) | - | - | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | +| [maxPerStageDescriptorUpdateAfterBindSampledImages (max)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingProperties.html) | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | +| [maxPerStageDescriptorUpdateAfterBindStorageBuffers (max)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingProperties.html) | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | +| [maxPerStageDescriptorUpdateAfterBindStorageImages (max)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingProperties.html) | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | 1000000 | +| [robustBufferAccessUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingProperties.html) | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | +| [shaderDenormFlushToZeroFloat32](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html) | - | - | - | - | - | - | - | - | VK_TRUE | +| [shaderDenormPreserveFloat16](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html) | - | - | - | - | - | - | - | - | VK_TRUE | +| [shaderDenormPreserveFloat32](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html) | - | - | - | - | - | - | - | - | VK_TRUE | +| [shaderDenormPreserveFloat64](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html) | - | - | - | - | - | - | - | - | VK_TRUE | +| **Vulkan 1.3** | +| [requiredSubgroupSizeStages](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSubgroupSizeControlProperties.html) | - | - | - | (VK_SHADER_STAGE_COMPUTE_BIT) | - | - | (VK_SHADER_STAGE_COMPUTE_BIT) | (VK_SHADER_STAGE_COMPUTE_BIT) | (VK_SHADER_STAGE_COMPUTE_BIT) | +| [storageTexelBufferOffsetSingleTexelAlignment (exact)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTexelBufferAlignmentProperties.html) | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | +| [uniformTexelBufferOffsetSingleTexelAlignment (exact)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTexelBufferAlignmentProperties.html) | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | +| **VK_KHR_fragment_shading_rate** | +| [fragmentShadingRateNonTrivialCombinerOps](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFragmentShadingRatePropertiesKHR.html) | - | - | - | - | - | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | +| **VK_KHR_push_descriptor** | +| [maxPushDescriptors (max)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDevicePushDescriptorPropertiesKHR.html) | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | 32 | +| **VK_KHR_shader_float_controls** | +| [denormBehaviorIndependence (exact)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html) | - | - | - | - | - | - | - | - | _VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_ | +| [shaderDenormFlushToZeroFloat32](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html) | - | - | - | - | - | - | - | - | _VK_TRUE_ | +| [shaderDenormPreserveFloat16](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html) | - | - | - | - | - | - | - | - | _VK_TRUE_ | +| [shaderDenormPreserveFloat32](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html) | - | - | - | - | - | - | - | - | _VK_TRUE_ | +| [shaderDenormPreserveFloat64](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceFloatControlsProperties.html) | - | - | - | - | - | - | - | - | _VK_TRUE_ | +| **VK_EXT_conservative_rasterization** | +| [degenerateTrianglesRasterized (exact)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.html) | - | - | - | - | - | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | +| [fullyCoveredFragmentShaderInputVariable](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceConservativeRasterizationPropertiesEXT.html) | - | - | - | - | - | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | +| **VK_EXT_custom_border_color** | +| [maxCustomBorderColorSamplers (max)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceCustomBorderColorPropertiesEXT.html) | 2048 | 2048 | 2048 | 2048 | 2048 | 2048 | 2048 | 2048 | 2048 | +| **VK_EXT_descriptor_indexing** | +| [maxPerStageDescriptorUpdateAfterBindSampledImages (max)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingProperties.html) | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | +| [maxPerStageDescriptorUpdateAfterBindStorageBuffers (max)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingProperties.html) | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | +| [maxPerStageDescriptorUpdateAfterBindStorageImages (max)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingProperties.html) | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | _1000000_ | +| [robustBufferAccessUpdateAfterBind](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceDescriptorIndexingProperties.html) | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | +| **VK_EXT_graphics_pipeline_library** | +| [graphicsPipelineLibraryFastLinking](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.html) | - | - | - | VK_TRUE | - | - | VK_TRUE | VK_TRUE | VK_TRUE | +| [graphicsPipelineLibraryIndependentInterpolationDecoration](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT.html) | - | - | - | VK_TRUE | - | - | VK_TRUE | VK_TRUE | VK_TRUE | +| **VK_EXT_sampler_filter_minmax** | +| [filterMinmaxSingleComponentFormats](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSamplerFilterMinmaxProperties.html) | - | - | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | +| **VK_EXT_subgroup_size_control** | +| [requiredSubgroupSizeStages](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceSubgroupSizeControlProperties.html) | - | - | - | _(VK_SHADER_STAGE_COMPUTE_BIT)_ | - | - | _(VK_SHADER_STAGE_COMPUTE_BIT)_ | _(VK_SHADER_STAGE_COMPUTE_BIT)_ | _(VK_SHADER_STAGE_COMPUTE_BIT)_ | +| **VK_EXT_texel_buffer_alignment** | +| [storageTexelBufferOffsetSingleTexelAlignment (exact)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTexelBufferAlignmentProperties.html) | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | +| [uniformTexelBufferOffsetSingleTexelAlignment (exact)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTexelBufferAlignmentProperties.html) | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | _VK_TRUE_ | +| **VK_EXT_transform_feedback** | +| [transformFeedbackDraw](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTransformFeedbackPropertiesEXT.html) | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | +| [transformFeedbackQueries](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTransformFeedbackPropertiesEXT.html) | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | VK_TRUE | +| [transformFeedbackRasterizationStreamSelect](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTransformFeedbackPropertiesEXT.html) | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | +| [transformFeedbackStreamsLinesTriangles](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkPhysicalDeviceTransformFeedbackPropertiesEXT.html) | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | VK_FALSE | + +## Vulkan Profile Queue Families + +* "valueWithRegularFont" indicates that the queue family property is defined in the profile (hover over the value to view the structure and corresponding extension or core API version where the queue family property is defined in the profile) +* "_valueWithItalicFont_" indicates that the queue family property is not defined in the profile but an equivalent queue family property is (hover over the symbol to view the structure and corresponding extension or core API version where the queue family property is defined in the profile) +* "-" indicates that neither the queue family property nor an equivalent queue family property is defined in the profile +* Empty cells next to the properties of a particular queue family definition section indicate that the profile does not have a corresponding queue family definition + +| Profiles | VP_D3D12_FL_11_0_baseline | VP_D3D12_FL_11_1_baseline | VP_D3D12_FL_12_0_baseline | VP_D3D12_FL_12_0_optimal | VP_D3D12_FL_12_1_baseline | VP_D3D12_FL_12_2_baseline | VP_D3D12_FL_12_2_optimal | VP_D3D12_maximum_nv | VP_D3D12_maximum_radv | +|----------|---------------------------|---------------------------|---------------------------|--------------------------|---------------------------|---------------------------|--------------------------|---------------------|-----------------------| +| **Queue family #0** | +| [queueCount (max)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkQueueFamilyProperties.html) | | | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +| [queueFlags](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkQueueFamilyProperties.html) | | | (VK_QUEUE_SPARSE_BINDING_BIT) | (VK_QUEUE_SPARSE_BINDING_BIT) | (VK_QUEUE_SPARSE_BINDING_BIT) | (VK_QUEUE_SPARSE_BINDING_BIT) | (VK_QUEUE_SPARSE_BINDING_BIT) | (VK_QUEUE_SPARSE_BINDING_BIT) | (VK_QUEUE_SPARSE_BINDING_BIT) | +| **Queue family #1** | +| [queueFlags](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkQueueFamilyProperties.html) | | | | | | (VK_QUEUE_TRANSFER_BIT) | (VK_QUEUE_TRANSFER_BIT) | (VK_QUEUE_TRANSFER_BIT) | (VK_QUEUE_TRANSFER_BIT) | +| [timestampValidBits (bits)](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkQueueFamilyProperties.html) | | | | | | 1 | 1 | 1 | 1 | + +## Vulkan Profile Formats + +> **NOTE**: The table below only contains formats and properties explicitly defined by the corresponding profile. Further formats and properties may be supported by the profiles in accordance to the requirements defined in the "Required Format Support" section of the appropriate version of the Vulkan API Specification. + +* "valueWithRegularFont" indicates that the format property is defined in the profile (hover over the value to view the structure and corresponding extension or core API version where the format property is defined in the profile) +* "_valueWithItalicFont_" indicates that the format property is not defined in the profile but an equivalent format property is (hover over the symbol to view the structure and corresponding extension or core API version where the format property is defined in the profile) +* "-" indicates that neither the format property nor an equivalent format property is defined in the profile +* Empty cells next to the properties of a particular format definition section indicate that the profile does not have a corresponding format definition + +| Profiles | VP_D3D12_FL_11_0_baseline | VP_D3D12_FL_11_1_baseline | VP_D3D12_FL_12_0_baseline | VP_D3D12_FL_12_0_optimal | VP_D3D12_FL_12_1_baseline | VP_D3D12_FL_12_2_baseline | VP_D3D12_FL_12_2_optimal | VP_D3D12_maximum_nv | VP_D3D12_maximum_radv | +|----------|---------------------------|---------------------------|---------------------------|--------------------------|---------------------------|---------------------------|--------------------------|---------------------|-----------------------| +| **VK_FORMAT_A2B10G10R10_UNORM_PACK32** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R16G16B16A16_SFLOAT** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R16G16B16A16_SNORM** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R16G16B16A16_UNORM** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R16G16_SFLOAT** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R16G16_SNORM** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R16G16_UNORM** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R32G32B32_SFLOAT** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R32G32_SFLOAT** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R8G8B8A8_SNORM** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R8G8B8A8_UNORM** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R8G8_SNORM** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | +| **VK_FORMAT_R8G8_UNORM** | +| [bufferFeatures](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkFormatProperties3.html) | | | | | | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | (VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR) | diff --git a/profiles/generate_profile_solution.sh b/profiles/generate_profile_solution.sh new file mode 100755 index 0000000000..508bfaa0cc --- /dev/null +++ b/profiles/generate_profile_solution.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +mkdir -p profiles/vulkan/debug + +if [ -z ${VULKAN_PROFILE_PREFIX} ]; then + VULKAN_PROFILE_PREFIX="$HOME/.local" + echo "Using VULKAN_PROFILE_PREFIX=$VULKAN_PROFILE_PREFIX." +fi + +# Install Vulkan-Profiles to ~/.local prefix. + +python3 "${VULKAN_PROFILE_PREFIX}/share/vulkan/registry/gen_profiles_solution.py" \ + --registry subprojects/Vulkan-Headers/registry/vk.xml \ + --input . \ + --output-library-inc profiles/vulkan \ + --output-library-src profiles/vulkan \ + --output-doc profiles/PROFILES.md \ + --validate --debug diff --git a/profiles/profile-test.cpp b/profiles/profile-test.cpp new file mode 100644 index 0000000000..2ae6436630 --- /dev/null +++ b/profiles/profile-test.cpp @@ -0,0 +1,87 @@ +/* + * Copyright 2023 Hans-Kristian Arntzen for Valve Corporation + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "vulkan/vulkan_profiles.h" +#include +#include +#include +#include + +/* Crude ad-hoc check. */ + +int main(void) +{ + VkInstanceCreateInfo instance_create_info; + VpInstanceCreateInfo vp_instance_info; + VkPhysicalDeviceProperties gpu_props; + VkApplicationInfo app_info; + VpProfileProperties *props; + VkPhysicalDevice *gpus; + uint32_t profile_count; + VkInstance instance; + uint32_t gpu_count; + VkBool32 supported; + uint32_t i, j; + + vpGetProfiles(&profile_count, NULL); + props = (VpProfileProperties*)calloc(profile_count, sizeof(*props)); + vpGetProfiles(&profile_count, props); + + for (i = 0; i < profile_count; i++) + { + printf("Testing profile %s.\n", props[i].profileName); + + memset(&instance_create_info, 0, sizeof(instance_create_info)); + memset(&vp_instance_info, 0, sizeof(vp_instance_info)); + memset(&app_info, 0, sizeof(app_info)); + instance_create_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + app_info.apiVersion = VK_API_VERSION_1_3; + app_info.pEngineName = "vkd3d"; + instance_create_info.pApplicationInfo = &app_info; + vp_instance_info.pCreateInfo = &instance_create_info; + + if (vpGetInstanceProfileSupport(NULL, &props[i], &supported) != VK_SUCCESS || !supported) + { + fprintf(stderr, "Profile %s is not supported at instance level.\n", + props[i].profileName); + } + + if (vpCreateInstance(&vp_instance_info, NULL, &instance) != VK_SUCCESS) + { + fprintf(stderr, "Failed to create instance ...\n"); + continue; + } + + vkEnumeratePhysicalDevices(instance, &gpu_count, NULL); + gpus = (VkPhysicalDevice*)calloc(gpu_count, sizeof(*gpus)); + vkEnumeratePhysicalDevices(instance, &gpu_count, gpus); + + for (j = 0; j < gpu_count; j++) + { + vkGetPhysicalDeviceProperties(gpus[j], &gpu_props); + if (vpGetPhysicalDeviceProfileSupport(instance, gpus[j], &props[i], &supported) != VK_SUCCESS) + supported = VK_FALSE; + + printf("[RESULT] GPU: %s, Profile: %s, supported: %s\n", + gpu_props.deviceName, props[i].profileName, supported ? "yes" : "no"); + } + + free(gpus); + vkDestroyInstance(instance, NULL); + } +} diff --git a/profiles/setup_profile_environment_common.sh b/profiles/setup_profile_environment_common.sh new file mode 100644 index 0000000000..3ea3095610 --- /dev/null +++ b/profiles/setup_profile_environment_common.sh @@ -0,0 +1,10 @@ +export VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation:VK_LAYER_KHRONOS_profiles +export VK_KHRONOS_PROFILES_DEFAULT_FEATURE_VALUES=DEFAULT_FEATURE_VALUES_FALSE +export VK_KHRONOS_PROFILES_PROFILE_FILE=$(pwd)/VP_D3D12_VKD3D_PROTON_profile.json +export VK_KHRONOS_PROFILES_PROFILE_NAME=${PROFILE_NAME} +export VK_KHRONOS_PROFILES_SIMULATE_CAPABILITIES=SIMULATE_API_VERSION_BIT,SIMULATE_FEATURES_BIT,SIMULATE_PROPERTIES_BIT,SIMULATE_EXTENSIONS_BIT +export VK_LAYER_PATH=/usr/share/vulkan/explicit_layer.d:~/.local/share/vulkan/explicit_layer.d +export VK_KHRONOS_PROFILES_EMULATE_PORTABILITY=false +export LD_LIBRARY_PATH="$HOME/.local/lib:$LD_LIBRARY_PATH" +export VK_KHRONOS_PROFILES_DEBUG_ACTIONS=DEBUG_ACTION_FILE_BIT +export VK_KHRONOS_PROFILES_DEBUG_FILENAME=/dev/null diff --git a/profiles/setup_profile_environment_fl_11_0_baseline.sh b/profiles/setup_profile_environment_fl_11_0_baseline.sh new file mode 100644 index 0000000000..79cdcc9785 --- /dev/null +++ b/profiles/setup_profile_environment_fl_11_0_baseline.sh @@ -0,0 +1,2 @@ +PROFILE_NAME=VP_D3D12_FL_11_0_baseline +source profiles/setup_profile_environment_common.sh diff --git a/profiles/setup_profile_environment_fl_11_1_baseline.sh b/profiles/setup_profile_environment_fl_11_1_baseline.sh new file mode 100644 index 0000000000..349fee1ab9 --- /dev/null +++ b/profiles/setup_profile_environment_fl_11_1_baseline.sh @@ -0,0 +1,2 @@ +PROFILE_NAME=VP_D3D12_FL_11_1_baseline +source profiles/setup_profile_environment_common.sh diff --git a/profiles/setup_profile_environment_fl_12_0_baseline.sh b/profiles/setup_profile_environment_fl_12_0_baseline.sh new file mode 100644 index 0000000000..5438285213 --- /dev/null +++ b/profiles/setup_profile_environment_fl_12_0_baseline.sh @@ -0,0 +1,2 @@ +PROFILE_NAME=VP_D3D12_FL_12_0_baseline +source profiles/setup_profile_environment_common.sh diff --git a/profiles/setup_profile_environment_fl_12_0_optimal.sh b/profiles/setup_profile_environment_fl_12_0_optimal.sh new file mode 100644 index 0000000000..a97555c04d --- /dev/null +++ b/profiles/setup_profile_environment_fl_12_0_optimal.sh @@ -0,0 +1,2 @@ +PROFILE_NAME=VP_D3D12_FL_12_0_optimal +source profiles/setup_profile_environment_common.sh diff --git a/profiles/setup_profile_environment_fl_12_1_baseline.sh b/profiles/setup_profile_environment_fl_12_1_baseline.sh new file mode 100644 index 0000000000..714678646b --- /dev/null +++ b/profiles/setup_profile_environment_fl_12_1_baseline.sh @@ -0,0 +1,2 @@ +PROFILE_NAME=VP_D3D12_FL_12_1_baseline +source profiles/setup_profile_environment_common.sh diff --git a/profiles/setup_profile_environment_fl_12_2_baseline.sh b/profiles/setup_profile_environment_fl_12_2_baseline.sh new file mode 100644 index 0000000000..28c74dfc27 --- /dev/null +++ b/profiles/setup_profile_environment_fl_12_2_baseline.sh @@ -0,0 +1,2 @@ +PROFILE_NAME=VP_D3D12_FL_12_2_baseline +source profiles/setup_profile_environment_common.sh diff --git a/profiles/setup_profile_environment_fl_12_2_optimal.sh b/profiles/setup_profile_environment_fl_12_2_optimal.sh new file mode 100644 index 0000000000..bb79794f83 --- /dev/null +++ b/profiles/setup_profile_environment_fl_12_2_optimal.sh @@ -0,0 +1,2 @@ +PROFILE_NAME=VP_D3D12_FL_12_2_optimal +source profiles/setup_profile_environment_common.sh diff --git a/profiles/setup_profile_environment_maximum_nv.sh b/profiles/setup_profile_environment_maximum_nv.sh new file mode 100644 index 0000000000..903e866a81 --- /dev/null +++ b/profiles/setup_profile_environment_maximum_nv.sh @@ -0,0 +1,2 @@ +PROFILE_NAME=VP_D3D12_maximum_nv +source profiles/setup_profile_environment_common.sh diff --git a/profiles/setup_profile_environment_maximum_radv.sh b/profiles/setup_profile_environment_maximum_radv.sh new file mode 100644 index 0000000000..31943573cb --- /dev/null +++ b/profiles/setup_profile_environment_maximum_radv.sh @@ -0,0 +1,2 @@ +PROFILE_NAME=VP_D3D12_maximum_radv +source profiles/setup_profile_environment_common.sh