panvk: enable ycbcr on bifrost
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

This also enables EXT_image_drm_format_modifier, which depends on
ycbcr.

Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38145>
This commit is contained in:
Eric R. Smith 2025-10-28 17:24:16 -03:00 committed by Marge Bot
parent 3f021404eb
commit 6735fe939a
5 changed files with 7 additions and 12 deletions

View file

@ -457,7 +457,7 @@ Vulkan 1.1 -- all DONE: anv, hk, kk, lvp, nvk, panvk/v10+, pvr, radv, tu, vn
VK_KHR_maintenance3 DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_maintenance3 DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
VK_KHR_multiview DONE (anv, dzn, hasvk, lvp, nvk, panvk/v10+, pvr, radv, tu, v3dv, vn) VK_KHR_multiview DONE (anv, dzn, hasvk, lvp, nvk, panvk/v10+, pvr, radv, tu, v3dv, vn)
VK_KHR_relaxed_block_layout DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_relaxed_block_layout DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
VK_KHR_sampler_ycbcr_conversion DONE (anv, hasvk, lvp, nvk, panvk/v10+, radv, tu, v3dv, vn) VK_KHR_sampler_ycbcr_conversion DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
VK_KHR_shader_draw_parameters DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, vn) VK_KHR_shader_draw_parameters DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, vn)
VK_KHR_storage_buffer_storage_class DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_storage_buffer_storage_class DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
VK_KHR_variable_pointers DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn) VK_KHR_variable_pointers DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
@ -639,7 +639,7 @@ Khronos extensions that are not part of any Vulkan version:
VK_EXT_headless_surface DONE (anv, dzn, hasvk, hk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_EXT_headless_surface DONE (anv, dzn, hasvk, hk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
VK_EXT_image_2d_view_of_3d DONE (anv, hasvk, hk, lvp, nvk, panvk, pvr, radv, tu, vn) VK_EXT_image_2d_view_of_3d DONE (anv, hasvk, hk, lvp, nvk, panvk, pvr, radv, tu, vn)
VK_EXT_image_compression_control DONE (anv/gfx12-, radv) VK_EXT_image_compression_control DONE (anv/gfx12-, radv)
VK_EXT_image_drm_format_modifier DONE (anv, hasvk, hk, lvp, nvk, panvk/v10+, radv/gfx9+, tu, v3dv, vn) VK_EXT_image_drm_format_modifier DONE (anv, hasvk, hk, lvp, nvk, panvk, radv/gfx9+, tu, v3dv, vn)
VK_EXT_image_sliced_view_of_3d DONE (anv, hk, lvp, nvk, radv/gfx10+, vn) VK_EXT_image_sliced_view_of_3d DONE (anv, hk, lvp, nvk, radv/gfx10+, vn)
VK_EXT_image_view_min_lod DONE (anv, hasvk, hk, nvk, radv, tu, vn) VK_EXT_image_view_min_lod DONE (anv, hasvk, hk, nvk, radv, tu, vn)
VK_EXT_index_type_uint8 DONE (anv, hasvk, hk, nvk, lvp, panvk, pvr, radv/gfx8+, tu, v3dv, vn) VK_EXT_index_type_uint8 DONE (anv, hasvk, hk, nvk, lvp, panvk, pvr, radv/gfx8+, tu, v3dv, vn)

View file

@ -12,6 +12,8 @@ VK_EXT_device_memory_report on panvk
VK_VALVE_video_encode_rgb_conversion on radv VK_VALVE_video_encode_rgb_conversion on radv
VK_EXT_custom_resolve on RADV VK_EXT_custom_resolve on RADV
GL_EXT_shader_pixel_local_storage on Panfrost v6+ GL_EXT_shader_pixel_local_storage on Panfrost v6+
VK_EXT_image_drm_format_modifier on panvk/v7
VK_KHR_sampler_ycbcr_conversion on panvk/v7
sparseResidencyImage2D on panvk v10+ sparseResidencyImage2D on panvk v10+
sparseResidencyStandard2DBlockShape on panvk v10+ sparseResidencyStandard2DBlockShape on panvk v10+
VK_KHR_surface_maintenance1 promotion everywhere EXT is exposed VK_KHR_surface_maintenance1 promotion everywhere EXT is exposed

View file

@ -648,11 +648,6 @@ get_image_format_features(struct panvk_physical_device *physical_device,
{ {
const struct vk_format_ycbcr_info *ycbcr_info = const struct vk_format_ycbcr_info *ycbcr_info =
vk_format_get_ycbcr_info(format); vk_format_get_ycbcr_info(format);
const unsigned arch = pan_arch(physical_device->kmod.props.gpu_id);
/* TODO: Bifrost YCbCr support */
if (ycbcr_info && arch <= 7)
return 0;
if (ycbcr_info == NULL) if (ycbcr_info == NULL)
return get_image_plane_format_features(physical_device, format); return get_image_plane_format_features(physical_device, format);

View file

@ -92,7 +92,7 @@ panvk_per_arch(get_physical_device_extensions)(
.KHR_push_descriptor = true, .KHR_push_descriptor = true,
.KHR_relaxed_block_layout = true, .KHR_relaxed_block_layout = true,
.KHR_sampler_mirror_clamp_to_edge = true, .KHR_sampler_mirror_clamp_to_edge = true,
.KHR_sampler_ycbcr_conversion = PAN_ARCH >= 10, .KHR_sampler_ycbcr_conversion = true,
.KHR_separate_depth_stencil_layouts = true, .KHR_separate_depth_stencil_layouts = true,
.KHR_shader_clock = true, .KHR_shader_clock = true,
.KHR_shader_draw_parameters = true, .KHR_shader_draw_parameters = true,
@ -150,7 +150,7 @@ panvk_per_arch(get_physical_device_extensions)(
.EXT_host_query_reset = true, .EXT_host_query_reset = true,
.EXT_image_2d_view_of_3d = true, .EXT_image_2d_view_of_3d = true,
/* EXT_image_drm_format_modifier depends on KHR_sampler_ycbcr_conversion */ /* EXT_image_drm_format_modifier depends on KHR_sampler_ycbcr_conversion */
.EXT_image_drm_format_modifier = PAN_ARCH >= 10, .EXT_image_drm_format_modifier = true,
.EXT_image_robustness = true, .EXT_image_robustness = true,
.EXT_index_type_uint8 = true, .EXT_index_type_uint8 = true,
.EXT_line_rasterization = true, .EXT_line_rasterization = true,
@ -318,7 +318,7 @@ panvk_per_arch(get_physical_device_features)(
.variablePointersStorageBuffer = true, .variablePointersStorageBuffer = true,
.variablePointers = true, .variablePointers = true,
.protectedMemory = false, .protectedMemory = false,
.samplerYcbcrConversion = PAN_ARCH >= 10, .samplerYcbcrConversion = true,
.shaderDrawParameters = true, .shaderDrawParameters = true,
/* Vulkan 1.2 */ /* Vulkan 1.2 */

View file

@ -804,14 +804,12 @@ panvk_lower_nir(struct panvk_device *dev, nir_shader *nir,
#endif #endif
} }
#if PAN_ARCH >= 10
const struct lower_ycbcr_state ycbcr_state = { const struct lower_ycbcr_state ycbcr_state = {
.set_layout_count = set_layout_count, .set_layout_count = set_layout_count,
.set_layouts = set_layouts, .set_layouts = set_layouts,
}; };
NIR_PASS(_, nir, nir_vk_lower_ycbcr_tex, lookup_ycbcr_conversion, NIR_PASS(_, nir, nir_vk_lower_ycbcr_tex, lookup_ycbcr_conversion,
&ycbcr_state); &ycbcr_state);
#endif
panvk_per_arch(nir_lower_descriptors)(nir, dev, rs, set_layout_count, panvk_per_arch(nir_lower_descriptors)(nir, dev, rs, set_layout_count,
set_layouts, state, shader); set_layouts, state, shader);