panvk: Support VK_EXT_zero_initialize_device_memory

Advertise the extension and enable the zeroInitializeDeviceMemory
feature. The panfrost and panthor kernel drivers uses drm_gem_shmem which
gets zeroed pages from the shmem subsystem, so memory is already
zero-initialized by default.

VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT is treated the same as
VK_IMAGE_LAYOUT_UNDEFINED. Since panvk doesn't use image layouts
(layout transitions are no-ops), no special barrier handling is
needed for either layout.

Signed-off-by: Christian Gmeiner <cgmeiner@igalia.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39658>
This commit is contained in:
Christian Gmeiner 2026-02-02 13:10:10 +01:00 committed by Marge Bot
parent 3f1bdfa8b4
commit 9e3967ea9b
3 changed files with 7 additions and 1 deletions

View file

@ -684,7 +684,7 @@ Khronos extensions that are not part of any Vulkan version:
VK_EXT_vertex_attribute_divisor DONE (anv, dzn, hasvk, hk, kk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
VK_EXT_vertex_input_dynamic_state DONE (anv, hk, lvp, nvk, panvk, radv, tu, vn)
VK_EXT_ycbcr_image_arrays DONE (anv, hasvk, hk, lvp, nvk, panvk/v10+, radv, vn)
VK_EXT_zero_initialize_device_memory DONE (lvp, nvk, pvr, radv, tu)
VK_EXT_zero_initialize_device_memory DONE (lvp, nvk, panvk, pvr, radv, tu)
VK_ANDROID_external_memory_android_hardware_buffer DONE (anv, lvp, panvk, radv, tu, v3dv, vn)
VK_ANDROID_native_buffer DONE (anv, lvp, panvk, radv, tu, v3dv, vn)
VK_GOOGLE_decorate_string DONE (anv, hasvk, hk, kk, lvp, nvk, panvk, radv, tu, vn)

View file

@ -10,3 +10,4 @@ VK_EXT_acquire_drm_display on panvk
VK_KHR_present_id on panvk
VK_KHR_present_wait on panvk
VK_KHR_pipeline_executable_properties on pvr
VK_EXT_zero_initialize_device_memory on panvk

View file

@ -191,6 +191,7 @@ panvk_per_arch(get_physical_device_extensions)(
.EXT_vertex_input_dynamic_state = true,
.EXT_ycbcr_2plane_444_formats = PAN_ARCH >= 10,
.EXT_ycbcr_image_arrays = PAN_ARCH >= 10,
.EXT_zero_initialize_device_memory = true,
.EXT_inline_uniform_block = true,
.ANDROID_external_memory_android_hardware_buffer = has_gralloc,
.ANDROID_native_buffer = has_gralloc,
@ -540,6 +541,9 @@ panvk_per_arch(get_physical_device_features)(
/* Video is not currently supported, so set to false */
.unifiedImageLayoutsVideo = false,
/* VK_EXT_zero_initialize_device_memory */
.zeroInitializeDeviceMemory = true,
/* VK_EXT_mutable_descriptor_type */
.mutableDescriptorType = PAN_ARCH >= 9,
@ -1147,6 +1151,7 @@ panvk_per_arch(get_physical_device_properties)(
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
VK_IMAGE_LAYOUT_PREINITIALIZED,
VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT,
/* Only if vk1.1+ is supported */
#if PAN_ARCH >= 10