venus: support VK_EXT_multisampled_render_to_single_sampled

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34207>
This commit is contained in:
Yiwei Zhang
2025-03-24 23:35:56 -07:00
committed by Marge Bot
parent 7155ffe275
commit 315d55db79
3 changed files with 17 additions and 3 deletions
+1 -1
View File
@@ -629,7 +629,7 @@ Khronos extensions that are not part of any Vulkan version:
VK_EXT_memory_priority DONE (lvp, radv)
VK_EXT_mesh_shader DONE (anv/gfx12.5+, lvp, radv)
VK_EXT_multi_draw DONE (anv, hasvk, lvp, nvk, radv, tu, vn, v3dv)
VK_EXT_multisampled_render_to_single_sampled DONE (lvp)
VK_EXT_multisampled_render_to_single_sampled DONE (lvp, vn)
VK_EXT_nested_command_buffer DONE (anv, lvp, nvk, radv, tu, vn)
VK_EXT_non_seamless_cube_map DONE (anv, hasvk, lvp, nvk, radv, tu, vn)
VK_EXT_pageable_device_local_memory DONE (lvp)
+15 -2
View File
@@ -225,6 +225,8 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev)
VkPhysicalDeviceLegacyVertexAttributesFeaturesEXT
legacy_vertex_attributes;
VkPhysicalDeviceMultiDrawFeaturesEXT multi_draw;
VkPhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT
multisampled_render_to_single_sampled;
VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT mutable_descriptor_type;
VkPhysicalDeviceNestedCommandBufferFeaturesEXT nested_command_buffer;
VkPhysicalDeviceNonSeamlessCubeMapFeaturesEXT non_seamless_cube_map;
@@ -368,12 +370,13 @@ vn_physical_device_init_features(struct vn_physical_device *physical_dev)
VN_ADD_PNEXT_EXT(feats2, EXTENDED_DYNAMIC_STATE_3_FEATURES_EXT, local_feats.extended_dynamic_state_3, exts->EXT_extended_dynamic_state3);
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, GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT, local_feats.graphics_pipeline_library, exts->EXT_graphics_pipeline_library);
VN_ADD_PNEXT_EXT(feats2, LEGACY_DITHERING_FEATURES_EXT, local_feats.legacy_dithering, exts->EXT_legacy_dithering);
VN_ADD_PNEXT_EXT(feats2, LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT, local_feats.legacy_vertex_attributes, exts->EXT_legacy_vertex_attributes);
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_SLICED_VIEW_OF_3D_FEATURES_EXT, local_feats.image_sliced_view_of_3d, exts->EXT_image_sliced_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, LEGACY_DITHERING_FEATURES_EXT, local_feats.legacy_dithering, exts->EXT_legacy_dithering);
VN_ADD_PNEXT_EXT(feats2, LEGACY_VERTEX_ATTRIBUTES_FEATURES_EXT, local_feats.legacy_vertex_attributes, exts->EXT_legacy_vertex_attributes);
VN_ADD_PNEXT_EXT(feats2, MULTI_DRAW_FEATURES_EXT, local_feats.multi_draw, exts->EXT_multi_draw);
VN_ADD_PNEXT_EXT(feats2, MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_FEATURES_EXT, local_feats.multisampled_render_to_single_sampled, exts->EXT_multisampled_render_to_single_sampled);
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, NESTED_COMMAND_BUFFER_FEATURES_EXT, local_feats.nested_command_buffer, exts->EXT_nested_command_buffer);
VN_ADD_PNEXT_EXT(feats2, NON_SEAMLESS_CUBE_MAP_FEATURES_EXT, local_feats.non_seamless_cube_map, exts->EXT_non_seamless_cube_map);
@@ -1377,6 +1380,7 @@ vn_physical_device_get_passthrough_extensions(
.EXT_load_store_op_none = true,
.EXT_memory_budget = VN_DEBUG(MEM_BUDGET),
.EXT_multi_draw = true,
.EXT_multisampled_render_to_single_sampled = true,
.EXT_mutable_descriptor_type = true,
.EXT_nested_command_buffer = true,
.EXT_non_seamless_cube_map = true,
@@ -2181,6 +2185,7 @@ vn_GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,
struct vn_ring *ring = physical_dev->instance->ring.ring;
VkFormatProperties *props = &pFormatProperties->formatProperties;
VkFormatProperties3 *props3 = NULL;
VkBool32 *srpq = NULL;
bool cacheable = true;
uint64_t key = (uint64_t)format;
@@ -2190,6 +2195,10 @@ vn_GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,
props3 = (VkFormatProperties3 *)src;
key |= 1ull << 32;
break;
case VK_STRUCTURE_TYPE_SUBPASS_RESOLVE_PERFORMANCE_QUERY_EXT:
srpq = &((VkSubpassResolvePerformanceQueryEXT *)src)->optimal;
key |= 1ull << 33;
break;
default:
cacheable = false;
break;
@@ -2203,6 +2212,8 @@ vn_GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,
*props = entry->props;
if (props3)
VN_COPY_STRUCT_GUTS(props3, &entry->props3, sizeof(*props3));
if (srpq)
*srpq = entry->srpq;
return;
}
}
@@ -2217,6 +2228,8 @@ vn_GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,
entry->props = *props;
if (props3)
VN_COPY_STRUCT_GUTS(&entry->props3, props3, sizeof(*props3));
if (srpq)
entry->srpq = *srpq;
entry->valid = true;
}
simple_mtx_unlock(&physical_dev->format_update_mutex);
+1
View File
@@ -21,6 +21,7 @@ struct vn_format_properties_entry {
atomic_bool valid;
VkFormatProperties props;
VkFormatProperties3 props3;
VkBool32 srpq;
};
struct vn_image_format_properties {