diff --git a/docs/features.txt b/docs/features.txt index 7560df67f24..01dcd9cf8c7 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -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) diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c index 41a441968df..41115aed7e8 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_cmd_buffer.c @@ -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, diff --git a/src/imagination/vulkan/pvr_device.c b/src/imagination/vulkan/pvr_device.c index 8b67492f376..3e08b013174 100644 --- a/src/imagination/vulkan/pvr_device.c +++ b/src/imagination/vulkan/pvr_device.c @@ -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, diff --git a/src/imagination/vulkan/pvr_image.c b/src/imagination/vulkan/pvr_image.c index 88c11328908..80f3e18ed9f 100644 --- a/src/imagination/vulkan/pvr_image.c +++ b/src/imagination/vulkan/pvr_image.c @@ -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; diff --git a/src/imagination/vulkan/pvr_tex_state.c b/src/imagination/vulkan/pvr_tex_state.c index b1a360d8e71..e120a893b0d 100644 --- a/src/imagination/vulkan/pvr_tex_state.c +++ b/src/imagination/vulkan/pvr_tex_state.c @@ -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;