pvr: add support for VK_KHR_maintenance1

VK_KHR_maintenance1 is a collection of several tweaks and additions to the 1.0
version of the Vulkan spec, promoted to core in more recent versions.

This change exposes the extension and only adds what was missing from our
implementation, however the driver largely already had support for what is
required by this extension.

Signed-off-by: Luigi Santivetti <luigi.santivetti@imgtec.com>
Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36412>
This commit is contained in:
Luigi Santivetti 2023-11-22 09:51:06 +00:00 committed by Marge Bot
parent f27ff49e2b
commit b461335f64
5 changed files with 18 additions and 5 deletions

View file

@ -449,7 +449,7 @@ Vulkan 1.1 -- all DONE: anv, hk, lvp, nvk, panvk/v10+, radv, tu, vn
VK_KHR_external_semaphore_capabilities DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
VK_KHR_get_memory_requirements2 DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
VK_KHR_get_physical_device_properties2 DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
VK_KHR_maintenance1 DONE (anv, dzn, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
VK_KHR_maintenance1 DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
VK_KHR_maintenance2 DONE (anv, dzn, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
VK_KHR_maintenance3 DONE (anv, dzn, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
VK_KHR_multiview DONE (anv, dzn, hasvk, lvp, nvk, panvk/v10+, radv, tu, v3dv, vn)

View file

@ -1027,9 +1027,12 @@ static void pvr_setup_pbe_state(
surface_params.addr =
PVR_DEV_ADDR_OFFSET(image->vma->dev_addr,
image->mip_levels[iview->vk.base_mip_level].offset);
surface_params.addr =
PVR_DEV_ADDR_OFFSET(surface_params.addr,
iview->vk.base_array_layer * image->layer_size);
if (!iview->vk.storage.z_slice_offset) {
surface_params.addr =
PVR_DEV_ADDR_OFFSET(surface_params.addr,
iview->vk.base_array_layer * image->layer_size);
}
surface_params.mem_layout = image->memlayout;
surface_params.stride = pvr_stride_from_pitch(level_pitch, iview->vk.format);
@ -1087,7 +1090,8 @@ static void pvr_setup_pbe_state(
#undef PVR_DEC_IF_NOT_ZERO
render_params.slice = 0;
render_params.slice = iview->vk.storage.z_slice_offset;
render_params.mrt_index = mrt_index;
pvr_pbe_pack_state(dev_info,

View file

@ -182,6 +182,7 @@ static void pvr_physical_device_get_supported_extensions(
.KHR_get_memory_requirements2 = true,
.KHR_image_format_list = true,
.KHR_index_type_uint8 = false,
.KHR_maintenance1 = true,
.KHR_present_id2 = PVR_USE_WSI_PLATFORM,
.KHR_present_wait2 = PVR_USE_WSI_PLATFORM,
.KHR_shader_expect_assume = false,

View file

@ -328,6 +328,12 @@ VkResult pvr_CreateImageView(VkDevice _device,
image = pvr_image_view_get_image(iview);
if (image->vk.image_type == VK_IMAGE_TYPE_3D &&
(iview->vk.view_type == VK_IMAGE_VIEW_TYPE_2D_ARRAY ||
iview->vk.view_type == VK_IMAGE_VIEW_TYPE_2D)) {
iview->vk.layer_count = image->vk.extent.depth;
}
info.type = iview->vk.view_type;
info.base_level = iview->vk.base_mip_level;
info.mip_levels = iview->vk.level_count;

View file

@ -117,6 +117,8 @@ VkResult pvr_pack_tex_state(struct pvr_device *device,
}
} else if (mem_layout == PVR_MEMLAYOUT_3DTWIDDLED) {
switch (iview_type) {
case VK_IMAGE_VIEW_TYPE_2D:
case VK_IMAGE_VIEW_TYPE_2D_ARRAY:
case VK_IMAGE_VIEW_TYPE_3D:
word0.textype = ROGUE_TEXSTATE_TEXTYPE_3D;
break;