From 1e46a810d6edc7854f3ea7bec156da06a126f554 Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Fri, 18 Aug 2023 12:30:05 +0200 Subject: [PATCH] venus: Use the common GetPhysicalDeviceFeatures2 implementation Reviewed-by: Yiwei Zhang Part-of: --- src/virtio/vulkan/vn_buffer.c | 2 +- src/virtio/vulkan/vn_physical_device.c | 372 +++++++------------------ src/virtio/vulkan/vn_physical_device.h | 49 ---- 3 files changed, 94 insertions(+), 329 deletions(-) diff --git a/src/virtio/vulkan/vn_buffer.c b/src/virtio/vulkan/vn_buffer.c index edb4bb64081..f9c71c631fd 100644 --- a/src/virtio/vulkan/vn_buffer.c +++ b/src/virtio/vulkan/vn_buffer.c @@ -61,7 +61,7 @@ vn_buffer_get_max_buffer_size(struct vn_physical_device *physical_dev) * - mali: UINT32_MAX */ static const uint64_t safe_max_buffer_size = 1ULL << 30; - return physical_dev->features.vulkan_1_3.maintenance4 + return physical_dev->base.base.supported_features.maintenance4 ? physical_dev->properties.vulkan_1_3.maxBufferSize : safe_max_buffer_size; } diff --git a/src/virtio/vulkan/vn_physical_device.c b/src/virtio/vulkan/vn_physical_device.c index c17ff787c18..72c14f4eaf3 100644 --- a/src/virtio/vulkan/vn_physical_device.c +++ b/src/virtio/vulkan/vn_physical_device.c @@ -68,7 +68,6 @@ static void vn_physical_device_init_features(struct vn_physical_device *physical_dev) { const uint32_t renderer_version = physical_dev->renderer_version; - struct vn_physical_device_features *feats = &physical_dev->features; struct vn_instance *instance = physical_dev->instance; const struct vk_device_extension_table *exts = &physical_dev->renderer_extensions; @@ -76,6 +75,11 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, }; struct { + VkPhysicalDeviceFeatures vulkan_1_0; + VkPhysicalDeviceVulkan11Features vulkan_1_1; + VkPhysicalDeviceVulkan12Features vulkan_1_2; + VkPhysicalDeviceVulkan13Features vulkan_1_3; + /* Vulkan 1.1 */ VkPhysicalDevice16BitStorageFeatures _16bit_storage; VkPhysicalDeviceMultiviewFeatures multiview; @@ -122,10 +126,54 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) texture_compression_astc_hdr; VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures zero_initialize_workgroup_memory; + + /* Vulkan 1.3: The extensions for the below structs were promoted, but + * some struct members were omitted from + * VkPhysicalDeviceVulkan13Features. + */ + VkPhysicalDevice4444FormatsFeaturesEXT _4444_formats; + VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state; + VkPhysicalDeviceExtendedDynamicState2FeaturesEXT + extended_dynamic_state_2; + VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT texel_buffer_alignment; + VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT + ycbcr_2plane_444_formats; + + /* KHR */ + VkPhysicalDeviceShaderClockFeaturesKHR shader_clock; + + /* EXT */ + VkPhysicalDeviceBorderColorSwizzleFeaturesEXT border_color_swizzle; + VkPhysicalDeviceColorWriteEnableFeaturesEXT color_write_enable; + VkPhysicalDeviceConditionalRenderingFeaturesEXT conditional_rendering; + VkPhysicalDeviceCustomBorderColorFeaturesEXT custom_border_color; + VkPhysicalDeviceDepthClipControlFeaturesEXT depth_clip_control; + VkPhysicalDeviceDepthClipEnableFeaturesEXT depth_clip_enable; + VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT + dynamic_rendering_unused_attachments; + VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT + fragment_shader_interlock; + VkPhysicalDeviceImage2DViewOf3DFeaturesEXT image_2d_view_of_3d; + VkPhysicalDeviceImageViewMinLodFeaturesEXT image_view_min_lod; + VkPhysicalDeviceIndexTypeUint8FeaturesEXT index_type_uint8; + VkPhysicalDeviceLineRasterizationFeaturesEXT line_rasterization; + VkPhysicalDeviceMultiDrawFeaturesEXT multi_draw; + VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT mutable_descriptor_type; + VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT non_seamless_cube_map; + VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT + primitive_topology_list_restart; + VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT + primitives_generated_query; + VkPhysicalDeviceProvokingVertexFeaturesEXT provoking_vertex; + VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT + rasterization_order_attachment_access; + VkPhysicalDeviceRobustness2FeaturesEXT robustness_2; + VkPhysicalDeviceTransformFeedbackFeaturesEXT transform_feedback; + VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT + vertex_attribute_divisor; } local_feats; - /* Clear the structs so that all unqueried features will be VK_FALSE. */ - memset(feats, 0, sizeof(*feats)); + /* Clear the struct so that all unqueried features will be VK_FALSE. */ memset(&local_feats, 0, sizeof(local_feats)); assert(renderer_version >= VK_API_VERSION_1_1); @@ -133,8 +181,8 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) /* clang-format off */ if (renderer_version >= VK_API_VERSION_1_2) { - VN_ADD_PNEXT(feats2, VULKAN_1_1_FEATURES, feats->vulkan_1_1); - VN_ADD_PNEXT(feats2, VULKAN_1_2_FEATURES, feats->vulkan_1_2); + VN_ADD_PNEXT(feats2, VULKAN_1_1_FEATURES, local_feats.vulkan_1_1); + VN_ADD_PNEXT(feats2, VULKAN_1_2_FEATURES, local_feats.vulkan_1_2); } else { /* Vulkan 1.1 */ VN_ADD_PNEXT(feats2, 16BIT_STORAGE_FEATURES, local_feats._16bit_storage); @@ -161,7 +209,7 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) } if (renderer_version >= VK_API_VERSION_1_3) { - VN_ADD_PNEXT(feats2, VULKAN_1_3_FEATURES, feats->vulkan_1_3); + VN_ADD_PNEXT(feats2, VULKAN_1_3_FEATURES, local_feats.vulkan_1_3); } else { VN_ADD_PNEXT_EXT(feats2, DYNAMIC_RENDERING_FEATURES, local_feats.dynamic_rendering, exts->KHR_dynamic_rendering); VN_ADD_PNEXT_EXT(feats2, IMAGE_ROBUSTNESS_FEATURES_EXT, local_feats.image_robustness, exts->EXT_image_robustness); @@ -181,50 +229,46 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) /* Vulkan 1.3: The extensions for the below structs were promoted, but some * struct members were omitted from VkPhysicalDeviceVulkan13Features. */ - VN_ADD_PNEXT_EXT(feats2, 4444_FORMATS_FEATURES_EXT, feats->_4444_formats, exts->EXT_4444_formats); - VN_ADD_PNEXT_EXT(feats2, EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, feats->extended_dynamic_state_2, exts->EXT_extended_dynamic_state2); - VN_ADD_PNEXT_EXT(feats2, EXTENDED_DYNAMIC_STATE_FEATURES_EXT, feats->extended_dynamic_state, exts->EXT_extended_dynamic_state); - VN_ADD_PNEXT_EXT(feats2, TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, feats->texel_buffer_alignment, exts->EXT_texel_buffer_alignment); - VN_ADD_PNEXT_EXT(feats2, YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT, feats->ycbcr_2plane_444_formats, exts->EXT_ycbcr_2plane_444_formats); + VN_ADD_PNEXT_EXT(feats2, 4444_FORMATS_FEATURES_EXT, local_feats._4444_formats, exts->EXT_4444_formats); + VN_ADD_PNEXT_EXT(feats2, EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, local_feats.extended_dynamic_state_2, exts->EXT_extended_dynamic_state2); + VN_ADD_PNEXT_EXT(feats2, EXTENDED_DYNAMIC_STATE_FEATURES_EXT, local_feats.extended_dynamic_state, exts->EXT_extended_dynamic_state); + VN_ADD_PNEXT_EXT(feats2, TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, local_feats.texel_buffer_alignment, exts->EXT_texel_buffer_alignment); + VN_ADD_PNEXT_EXT(feats2, YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT, local_feats.ycbcr_2plane_444_formats, exts->EXT_ycbcr_2plane_444_formats); /* KHR */ - VN_ADD_PNEXT_EXT(feats2, SHADER_CLOCK_FEATURES_KHR, feats->shader_clock, exts->KHR_shader_clock); + VN_ADD_PNEXT_EXT(feats2, SHADER_CLOCK_FEATURES_KHR, local_feats.shader_clock, exts->KHR_shader_clock); /* EXT */ - VN_ADD_PNEXT_EXT(feats2, BORDER_COLOR_SWIZZLE_FEATURES_EXT, feats->border_color_swizzle, exts->EXT_border_color_swizzle); - VN_ADD_PNEXT_EXT(feats2, COLOR_WRITE_ENABLE_FEATURES_EXT, feats->color_write_enable, exts->EXT_color_write_enable); - VN_ADD_PNEXT_EXT(feats2, CONDITIONAL_RENDERING_FEATURES_EXT, feats->conditional_rendering, exts->EXT_conditional_rendering); - VN_ADD_PNEXT_EXT(feats2, CUSTOM_BORDER_COLOR_FEATURES_EXT, feats->custom_border_color, exts->EXT_custom_border_color); - VN_ADD_PNEXT_EXT(feats2, DEPTH_CLIP_CONTROL_FEATURES_EXT, feats->depth_clip_control, exts->EXT_depth_clip_control); - VN_ADD_PNEXT_EXT(feats2, DEPTH_CLIP_ENABLE_FEATURES_EXT, feats->depth_clip_enable, exts->EXT_depth_clip_enable); - VN_ADD_PNEXT_EXT(feats2, DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT, feats->dynamic_rendering_unused_attachments, exts->EXT_dynamic_rendering_unused_attachments); - VN_ADD_PNEXT_EXT(feats2, FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, feats->fragment_shader_interlock, exts->EXT_fragment_shader_interlock); - VN_ADD_PNEXT_EXT(feats2, IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, feats->image_2d_view_of_3d, exts->EXT_image_2d_view_of_3d); - VN_ADD_PNEXT_EXT(feats2, IMAGE_VIEW_MIN_LOD_FEATURES_EXT, feats->image_view_min_lod, exts->EXT_image_view_min_lod); - VN_ADD_PNEXT_EXT(feats2, INDEX_TYPE_UINT8_FEATURES_EXT, feats->index_type_uint8, exts->EXT_index_type_uint8); - VN_ADD_PNEXT_EXT(feats2, LINE_RASTERIZATION_FEATURES_EXT, feats->line_rasterization, exts->EXT_line_rasterization); - VN_ADD_PNEXT_EXT(feats2, MULTI_DRAW_FEATURES_EXT, feats->multi_draw, exts->EXT_multi_draw); - VN_ADD_PNEXT_EXT(feats2, MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, feats->mutable_descriptor_type, exts->EXT_mutable_descriptor_type || exts->VALVE_mutable_descriptor_type); - VN_ADD_PNEXT_EXT(feats2, NON_SEAMLESS_CUBE_MAP_FEATURES_EXT, feats->non_seamless_cube_map, exts->EXT_non_seamless_cube_map); - VN_ADD_PNEXT_EXT(feats2, PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, feats->primitive_topology_list_restart, exts->EXT_primitive_topology_list_restart); - VN_ADD_PNEXT_EXT(feats2, PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, feats->primitives_generated_query, exts->EXT_primitives_generated_query); - VN_ADD_PNEXT_EXT(feats2, PROVOKING_VERTEX_FEATURES_EXT, feats->provoking_vertex, exts->EXT_provoking_vertex); - VN_ADD_PNEXT_EXT(feats2, RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, feats->rasterization_order_attachment_access, exts->EXT_rasterization_order_attachment_access); - VN_ADD_PNEXT_EXT(feats2, ROBUSTNESS_2_FEATURES_EXT, feats->robustness_2, exts->EXT_robustness2); - VN_ADD_PNEXT_EXT(feats2, TRANSFORM_FEEDBACK_FEATURES_EXT, feats->transform_feedback, exts->EXT_transform_feedback); - VN_ADD_PNEXT_EXT(feats2, VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, feats->vertex_attribute_divisor, exts->EXT_vertex_attribute_divisor); + VN_ADD_PNEXT_EXT(feats2, BORDER_COLOR_SWIZZLE_FEATURES_EXT, local_feats.border_color_swizzle, exts->EXT_border_color_swizzle); + VN_ADD_PNEXT_EXT(feats2, COLOR_WRITE_ENABLE_FEATURES_EXT, local_feats.color_write_enable, exts->EXT_color_write_enable); + VN_ADD_PNEXT_EXT(feats2, CONDITIONAL_RENDERING_FEATURES_EXT, local_feats.conditional_rendering, exts->EXT_conditional_rendering); + VN_ADD_PNEXT_EXT(feats2, CUSTOM_BORDER_COLOR_FEATURES_EXT, local_feats.custom_border_color, exts->EXT_custom_border_color); + VN_ADD_PNEXT_EXT(feats2, DEPTH_CLIP_CONTROL_FEATURES_EXT, local_feats.depth_clip_control, exts->EXT_depth_clip_control); + VN_ADD_PNEXT_EXT(feats2, DEPTH_CLIP_ENABLE_FEATURES_EXT, local_feats.depth_clip_enable, exts->EXT_depth_clip_enable); + VN_ADD_PNEXT_EXT(feats2, DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT, local_feats.dynamic_rendering_unused_attachments, exts->EXT_dynamic_rendering_unused_attachments); + VN_ADD_PNEXT_EXT(feats2, FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, local_feats.fragment_shader_interlock, exts->EXT_fragment_shader_interlock); + VN_ADD_PNEXT_EXT(feats2, IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, local_feats.image_2d_view_of_3d, exts->EXT_image_2d_view_of_3d); + VN_ADD_PNEXT_EXT(feats2, IMAGE_VIEW_MIN_LOD_FEATURES_EXT, local_feats.image_view_min_lod, exts->EXT_image_view_min_lod); + VN_ADD_PNEXT_EXT(feats2, INDEX_TYPE_UINT8_FEATURES_EXT, local_feats.index_type_uint8, exts->EXT_index_type_uint8); + VN_ADD_PNEXT_EXT(feats2, LINE_RASTERIZATION_FEATURES_EXT, local_feats.line_rasterization, exts->EXT_line_rasterization); + VN_ADD_PNEXT_EXT(feats2, MULTI_DRAW_FEATURES_EXT, local_feats.multi_draw, exts->EXT_multi_draw); + VN_ADD_PNEXT_EXT(feats2, MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, local_feats.mutable_descriptor_type, exts->EXT_mutable_descriptor_type || exts->VALVE_mutable_descriptor_type); + VN_ADD_PNEXT_EXT(feats2, NON_SEAMLESS_CUBE_MAP_FEATURES_EXT, local_feats.non_seamless_cube_map, exts->EXT_non_seamless_cube_map); + VN_ADD_PNEXT_EXT(feats2, PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, local_feats.primitive_topology_list_restart, exts->EXT_primitive_topology_list_restart); + VN_ADD_PNEXT_EXT(feats2, PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, local_feats.primitives_generated_query, exts->EXT_primitives_generated_query); + VN_ADD_PNEXT_EXT(feats2, PROVOKING_VERTEX_FEATURES_EXT, local_feats.provoking_vertex, exts->EXT_provoking_vertex); + VN_ADD_PNEXT_EXT(feats2, RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, local_feats.rasterization_order_attachment_access, exts->EXT_rasterization_order_attachment_access); + VN_ADD_PNEXT_EXT(feats2, ROBUSTNESS_2_FEATURES_EXT, local_feats.robustness_2, exts->EXT_robustness2); + VN_ADD_PNEXT_EXT(feats2, TRANSFORM_FEEDBACK_FEATURES_EXT, local_feats.transform_feedback, exts->EXT_transform_feedback); + VN_ADD_PNEXT_EXT(feats2, VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, local_feats.vertex_attribute_divisor, exts->EXT_vertex_attribute_divisor); /* clang-format on */ vn_call_vkGetPhysicalDeviceFeatures2( instance, vn_physical_device_to_handle(physical_dev), &feats2); - VkPhysicalDeviceFeatures *vk10_feats = &feats->vulkan_1_0; - VkPhysicalDeviceVulkan11Features *vk11_feats = &feats->vulkan_1_1; - VkPhysicalDeviceVulkan12Features *vk12_feats = &feats->vulkan_1_2; - VkPhysicalDeviceVulkan13Features *vk13_feats = &feats->vulkan_1_3; - - *vk10_feats = feats2.features; + struct vk_features *feats = &physical_dev->base.base.supported_features; + vk_set_physical_device_features(feats, &feats2); /* clang-format off */ @@ -235,166 +279,16 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev) * filtered out then disable the feature. */ if (physical_dev->sparse_binding_disabled) { - VN_SET_CORE_VALUE(vk10_feats, sparseBinding, false); - VN_SET_CORE_VALUE(vk10_feats, sparseResidencyBuffer, false); - VN_SET_CORE_VALUE(vk10_feats, sparseResidencyImage2D, false); - VN_SET_CORE_VALUE(vk10_feats, sparseResidencyImage3D, false); - VN_SET_CORE_VALUE(vk10_feats, sparseResidency2Samples, false); - VN_SET_CORE_VALUE(vk10_feats, sparseResidency4Samples, false); - VN_SET_CORE_VALUE(vk10_feats, sparseResidency8Samples, false); - VN_SET_CORE_VALUE(vk10_feats, sparseResidency16Samples, false); - VN_SET_CORE_VALUE(vk10_feats, sparseResidencyAliased, false); + VN_SET_CORE_VALUE(feats, sparseBinding, false); + VN_SET_CORE_VALUE(feats, sparseResidencyBuffer, false); + VN_SET_CORE_VALUE(feats, sparseResidencyImage2D, false); + VN_SET_CORE_VALUE(feats, sparseResidencyImage3D, false); + VN_SET_CORE_VALUE(feats, sparseResidency2Samples, false); + VN_SET_CORE_VALUE(feats, sparseResidency4Samples, false); + VN_SET_CORE_VALUE(feats, sparseResidency8Samples, false); + VN_SET_CORE_VALUE(feats, sparseResidency16Samples, false); + VN_SET_CORE_VALUE(feats, sparseResidencyAliased, false); } - - if (renderer_version < VK_API_VERSION_1_2) { - /* Vulkan 1.1 */ - VN_SET_CORE_FIELD(vk11_feats, storageBuffer16BitAccess, local_feats._16bit_storage); - VN_SET_CORE_FIELD(vk11_feats, uniformAndStorageBuffer16BitAccess, local_feats._16bit_storage); - VN_SET_CORE_FIELD(vk11_feats, storagePushConstant16, local_feats._16bit_storage); - VN_SET_CORE_FIELD(vk11_feats, storageInputOutput16, local_feats._16bit_storage); - - VN_SET_CORE_FIELD(vk11_feats, multiview, local_feats.multiview); - VN_SET_CORE_FIELD(vk11_feats, multiviewGeometryShader, local_feats.multiview); - VN_SET_CORE_FIELD(vk11_feats, multiviewTessellationShader, local_feats.multiview); - - VN_SET_CORE_FIELD(vk11_feats, variablePointersStorageBuffer, local_feats.variable_pointers); - VN_SET_CORE_FIELD(vk11_feats, variablePointers, local_feats.variable_pointers); - - VN_SET_CORE_FIELD(vk11_feats, protectedMemory, local_feats.protected_memory); - - VN_SET_CORE_FIELD(vk11_feats, samplerYcbcrConversion, local_feats.sampler_ycbcr_conversion); - - VN_SET_CORE_FIELD(vk11_feats, shaderDrawParameters, local_feats.shader_draw_parameters); - - if (exts->KHR_sampler_mirror_clamp_to_edge) { - VN_SET_CORE_VALUE(vk12_feats, samplerMirrorClampToEdge, true); - } - if (exts->KHR_draw_indirect_count) { - VN_SET_CORE_VALUE(vk12_feats, drawIndirectCount, true); - } - if (exts->KHR_8bit_storage) { - VN_SET_CORE_FIELD(vk12_feats, storageBuffer8BitAccess, local_feats._8bit_storage); - VN_SET_CORE_FIELD(vk12_feats, uniformAndStorageBuffer8BitAccess, local_feats._8bit_storage); - VN_SET_CORE_FIELD(vk12_feats, storagePushConstant8, local_feats._8bit_storage); - } - if (exts->KHR_shader_atomic_int64) { - VN_SET_CORE_FIELD(vk12_feats, shaderBufferInt64Atomics, local_feats.shader_atomic_int64); - VN_SET_CORE_FIELD(vk12_feats, shaderSharedInt64Atomics, local_feats.shader_atomic_int64); - } - if (exts->KHR_shader_float16_int8) { - VN_SET_CORE_FIELD(vk12_feats, shaderFloat16, local_feats.shader_float16_int8); - VN_SET_CORE_FIELD(vk12_feats, shaderInt8, local_feats.shader_float16_int8); - } - if (exts->EXT_descriptor_indexing) { - VN_SET_CORE_VALUE(vk12_feats, descriptorIndexing, true); - VN_SET_CORE_FIELD(vk12_feats, shaderInputAttachmentArrayDynamicIndexing, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, shaderUniformTexelBufferArrayDynamicIndexing, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, shaderStorageTexelBufferArrayDynamicIndexing, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, shaderUniformBufferArrayNonUniformIndexing, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, shaderSampledImageArrayNonUniformIndexing, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, shaderStorageBufferArrayNonUniformIndexing, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, shaderStorageImageArrayNonUniformIndexing, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, shaderInputAttachmentArrayNonUniformIndexing, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, shaderUniformTexelBufferArrayNonUniformIndexing, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, shaderStorageTexelBufferArrayNonUniformIndexing, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, descriptorBindingUniformBufferUpdateAfterBind, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, descriptorBindingSampledImageUpdateAfterBind, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, descriptorBindingStorageImageUpdateAfterBind, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, descriptorBindingStorageBufferUpdateAfterBind, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, descriptorBindingUniformTexelBufferUpdateAfterBind, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, descriptorBindingStorageTexelBufferUpdateAfterBind, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, descriptorBindingUpdateUnusedWhilePending, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, descriptorBindingPartiallyBound, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, descriptorBindingVariableDescriptorCount, local_feats.descriptor_indexing); - VN_SET_CORE_FIELD(vk12_feats, runtimeDescriptorArray, local_feats.descriptor_indexing); - } - if (exts->EXT_sampler_filter_minmax) { - VN_SET_CORE_VALUE(vk12_feats, samplerFilterMinmax, true); - } - if (exts->EXT_scalar_block_layout) { - VN_SET_CORE_FIELD(vk12_feats, scalarBlockLayout, local_feats.scalar_block_layout); - } - if (exts->KHR_imageless_framebuffer) { - VN_SET_CORE_FIELD(vk12_feats, imagelessFramebuffer, local_feats.imageless_framebuffer); - } - if (exts->KHR_uniform_buffer_standard_layout) { - VN_SET_CORE_FIELD(vk12_feats, uniformBufferStandardLayout, local_feats.uniform_buffer_standard_layout); - } - if (exts->KHR_shader_subgroup_extended_types) { - VN_SET_CORE_FIELD(vk12_feats, shaderSubgroupExtendedTypes, local_feats.shader_subgroup_extended_types); - } - if (exts->KHR_separate_depth_stencil_layouts) { - VN_SET_CORE_FIELD(vk12_feats, separateDepthStencilLayouts, local_feats.separate_depth_stencil_layouts); - } - if (exts->EXT_host_query_reset) { - VN_SET_CORE_FIELD(vk12_feats, hostQueryReset, local_feats.host_query_reset); - } - if (exts->KHR_timeline_semaphore) { - VN_SET_CORE_FIELD(vk12_feats, timelineSemaphore, local_feats.timeline_semaphore); - } - if (exts->KHR_buffer_device_address) { - VN_SET_CORE_FIELD(vk12_feats, bufferDeviceAddress, local_feats.buffer_device_address); - VN_SET_CORE_FIELD(vk12_feats, bufferDeviceAddressCaptureReplay, local_feats.buffer_device_address); - VN_SET_CORE_FIELD(vk12_feats, bufferDeviceAddressMultiDevice, local_feats.buffer_device_address); - } - if (exts->KHR_vulkan_memory_model) { - VN_SET_CORE_FIELD(vk12_feats, vulkanMemoryModel, local_feats.vulkan_memory_model); - VN_SET_CORE_FIELD(vk12_feats, vulkanMemoryModelDeviceScope, local_feats.vulkan_memory_model); - VN_SET_CORE_FIELD(vk12_feats, vulkanMemoryModelAvailabilityVisibilityChains, local_feats.vulkan_memory_model); - } - if (exts->EXT_shader_viewport_index_layer) { - VN_SET_CORE_VALUE(vk12_feats, shaderOutputViewportIndex, true); - } - if (exts->EXT_shader_viewport_index_layer) { - VN_SET_CORE_VALUE(vk12_feats, shaderOutputLayer, true); - } - VN_SET_CORE_VALUE(vk12_feats, subgroupBroadcastDynamicId, false); - } - - if (renderer_version < VK_API_VERSION_1_3) { - if (exts->EXT_image_robustness) { - VN_SET_CORE_FIELD(vk13_feats, robustImageAccess, local_feats.image_robustness); - } - if (exts->EXT_inline_uniform_block) { - VN_SET_CORE_FIELD(vk13_feats, inlineUniformBlock, local_feats.inline_uniform_block); - VN_SET_CORE_FIELD(vk13_feats, descriptorBindingInlineUniformBlockUpdateAfterBind, local_feats.inline_uniform_block); - } - if (exts->EXT_pipeline_creation_cache_control) { - VN_SET_CORE_FIELD(vk13_feats, pipelineCreationCacheControl, local_feats.pipeline_creation_cache_control); - } - if (exts->EXT_private_data) { - VN_SET_CORE_FIELD(vk13_feats, privateData, local_feats.private_data); - } - if (exts->EXT_shader_demote_to_helper_invocation) { - VN_SET_CORE_FIELD(vk13_feats, shaderDemoteToHelperInvocation, local_feats.shader_demote_to_helper_invocation); - } - if (exts->KHR_shader_terminate_invocation) { - VN_SET_CORE_FIELD(vk13_feats, shaderTerminateInvocation, local_feats.shader_terminate_invocation); - } - if (exts->EXT_subgroup_size_control) { - VN_SET_CORE_FIELD(vk13_feats, subgroupSizeControl, local_feats.subgroup_size_control); - VN_SET_CORE_FIELD(vk13_feats, computeFullSubgroups, local_feats.subgroup_size_control); - } - if (exts->KHR_synchronization2) { - VN_SET_CORE_FIELD(vk13_feats, synchronization2, local_feats.synchronization2); - } - if (exts->EXT_texture_compression_astc_hdr) { - VN_SET_CORE_FIELD(vk13_feats, textureCompressionASTC_HDR, local_feats.texture_compression_astc_hdr); - } - if (exts->KHR_zero_initialize_workgroup_memory) { - VN_SET_CORE_FIELD(vk13_feats, shaderZeroInitializeWorkgroupMemory, local_feats.zero_initialize_workgroup_memory); - } - if (exts->KHR_dynamic_rendering) { - VN_SET_CORE_FIELD(vk13_feats, dynamicRendering, local_feats.dynamic_rendering); - } - if (exts->KHR_shader_integer_dot_product) { - VN_SET_CORE_FIELD(vk13_feats, shaderIntegerDotProduct, local_feats.shader_integer_dot_product); - } - if (exts->KHR_maintenance4) { - VN_SET_CORE_FIELD(vk13_feats, maintenance4, local_feats.maintenance4); - } - } - /* clang-format on */ } @@ -1764,86 +1658,6 @@ vn_physical_device_add_format_properties( simple_mtx_unlock(&physical_dev->format_update_mutex); } -void -vn_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, - VkPhysicalDeviceFeatures2 *pFeatures) -{ - struct vn_physical_device *physical_dev = - vn_physical_device_from_handle(physicalDevice); - const struct vn_physical_device_features *in_feats = - &physical_dev->features; - - pFeatures->features = in_feats->vulkan_1_0; - - vk_foreach_struct(out, pFeatures->pNext) { - if (vk_get_physical_device_core_1_1_feature_ext(out, - &in_feats->vulkan_1_1)) - continue; - - if (vk_get_physical_device_core_1_2_feature_ext(out, - &in_feats->vulkan_1_2)) - continue; - - if (vk_get_physical_device_core_1_3_feature_ext(out, - &in_feats->vulkan_1_3)) - continue; - - switch (out->sType) { - -#define CASE(stype, member) \ - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_##stype: \ - vk_copy_struct_guts(out, (VkBaseInStructure *)&in_feats->member, \ - sizeof(in_feats->member)); \ - break - - /* clang-format off */ - - /* Vulkan 1.3 */ - CASE(4444_FORMATS_FEATURES_EXT, _4444_formats); - CASE(EXTENDED_DYNAMIC_STATE_FEATURES_EXT, extended_dynamic_state); - CASE(EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT, extended_dynamic_state_2); - CASE(TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT, texel_buffer_alignment); - CASE(YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT, ycbcr_2plane_444_formats); - - /* KHR */ - CASE(SHADER_CLOCK_FEATURES_KHR, shader_clock); - - /* EXT */ - CASE(BORDER_COLOR_SWIZZLE_FEATURES_EXT, border_color_swizzle); - CASE(COLOR_WRITE_ENABLE_FEATURES_EXT, color_write_enable); - CASE(CONDITIONAL_RENDERING_FEATURES_EXT, conditional_rendering); - CASE(CUSTOM_BORDER_COLOR_FEATURES_EXT, custom_border_color); - CASE(DEPTH_CLIP_CONTROL_FEATURES_EXT, depth_clip_control); - CASE(DEPTH_CLIP_ENABLE_FEATURES_EXT, depth_clip_enable); - CASE(DYNAMIC_RENDERING_UNUSED_ATTACHMENTS_FEATURES_EXT, dynamic_rendering_unused_attachments); - CASE(FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT, fragment_shader_interlock); - CASE(IMAGE_2D_VIEW_OF_3D_FEATURES_EXT, image_2d_view_of_3d); - CASE(IMAGE_VIEW_MIN_LOD_FEATURES_EXT, image_view_min_lod); - CASE(INDEX_TYPE_UINT8_FEATURES_EXT, index_type_uint8); - CASE(LINE_RASTERIZATION_FEATURES_EXT, line_rasterization); - CASE(MULTI_DRAW_FEATURES_EXT, multi_draw); - CASE(MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, mutable_descriptor_type); - CASE(NON_SEAMLESS_CUBE_MAP_FEATURES_EXT, non_seamless_cube_map); - CASE(PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, primitive_topology_list_restart); - CASE(PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, primitives_generated_query); - CASE(PROVOKING_VERTEX_FEATURES_EXT, provoking_vertex); - CASE(RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, rasterization_order_attachment_access); - CASE(ROBUSTNESS_2_FEATURES_EXT, robustness_2); - CASE(TRANSFORM_FEEDBACK_FEATURES_EXT, transform_feedback); - CASE(VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT, vertex_attribute_divisor); - - /* clang-format on */ - - case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT: - ((VkPhysicalDeviceDeviceMemoryReportFeaturesEXT *)out) - ->deviceMemoryReport = VK_TRUE; - break; - default: - break; -#undef CASE - } - } -} void vn_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, diff --git a/src/virtio/vulkan/vn_physical_device.h b/src/virtio/vulkan/vn_physical_device.h index 1915d9d7a9a..d77cd85ec2e 100644 --- a/src/virtio/vulkan/vn_physical_device.h +++ b/src/virtio/vulkan/vn_physical_device.h @@ -17,54 +17,6 @@ #include "vn_wsi.h" -struct vn_physical_device_features { - VkPhysicalDeviceFeatures vulkan_1_0; - VkPhysicalDeviceVulkan11Features vulkan_1_1; - VkPhysicalDeviceVulkan12Features vulkan_1_2; - VkPhysicalDeviceVulkan13Features vulkan_1_3; - - /* Vulkan 1.3: The extensions for the below structs were promoted, but some - * struct members were omitted from VkPhysicalDeviceVulkan13Features. - */ - VkPhysicalDevice4444FormatsFeaturesEXT _4444_formats; - VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state; - VkPhysicalDeviceExtendedDynamicState2FeaturesEXT extended_dynamic_state_2; - VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT texel_buffer_alignment; - VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT ycbcr_2plane_444_formats; - - /* KHR */ - VkPhysicalDeviceShaderClockFeaturesKHR shader_clock; - - /* EXT */ - VkPhysicalDeviceBorderColorSwizzleFeaturesEXT border_color_swizzle; - VkPhysicalDeviceColorWriteEnableFeaturesEXT color_write_enable; - VkPhysicalDeviceConditionalRenderingFeaturesEXT conditional_rendering; - VkPhysicalDeviceCustomBorderColorFeaturesEXT custom_border_color; - VkPhysicalDeviceDepthClipControlFeaturesEXT depth_clip_control; - VkPhysicalDeviceDepthClipEnableFeaturesEXT depth_clip_enable; - VkPhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT - dynamic_rendering_unused_attachments; - VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT - fragment_shader_interlock; - VkPhysicalDeviceImage2DViewOf3DFeaturesEXT image_2d_view_of_3d; - VkPhysicalDeviceImageViewMinLodFeaturesEXT image_view_min_lod; - VkPhysicalDeviceIndexTypeUint8FeaturesEXT index_type_uint8; - VkPhysicalDeviceLineRasterizationFeaturesEXT line_rasterization; - VkPhysicalDeviceMultiDrawFeaturesEXT multi_draw; - VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT mutable_descriptor_type; - VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT non_seamless_cube_map; - VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT - primitive_topology_list_restart; - VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT - primitives_generated_query; - VkPhysicalDeviceProvokingVertexFeaturesEXT provoking_vertex; - VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT - rasterization_order_attachment_access; - VkPhysicalDeviceRobustness2FeaturesEXT robustness_2; - VkPhysicalDeviceTransformFeedbackFeaturesEXT transform_feedback; - VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT vertex_attribute_divisor; -}; - struct vn_physical_device_properties { VkPhysicalDeviceProperties vulkan_1_0; VkPhysicalDeviceVulkan11Properties vulkan_1_1; @@ -115,7 +67,6 @@ struct vn_physical_device { struct vk_device_extension_table renderer_extensions; uint32_t *extension_spec_versions; - struct vn_physical_device_features features; struct vn_physical_device_properties properties; enum VkDriverId renderer_driver_id;