Module: Mesa Branch: master Commit: 3633bae36b56a8667d31096b3c3472ab388c4fbf URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3633bae36b56a8667d31096b3c3472ab388c4fbf
Author: Dave Airlie <[email protected]> Date: Tue Aug 15 15:35:52 2017 +1000 radv/gfx9: fix image resource handling. GFX9 changes how images are layed out, so this needs updating. Fixes: dEQP-VK.query_pool.statistics_query.* Cc: "17.2" <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]> Signed-off-by: Dave Airlie <[email protected]> --- src/amd/vulkan/radv_image.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index df288666be..46b62052a0 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -1059,23 +1059,34 @@ radv_DestroyImage(VkDevice _device, VkImage _image, } void radv_GetImageSubresourceLayout( - VkDevice device, + VkDevice _device, VkImage _image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) { RADV_FROM_HANDLE(radv_image, image, _image); + RADV_FROM_HANDLE(radv_device, device, _device); int level = pSubresource->mipLevel; int layer = pSubresource->arrayLayer; struct radeon_surf *surface = &image->surface; - pLayout->offset = surface->u.legacy.level[level].offset + surface->u.legacy.level[level].slice_size * layer; - pLayout->rowPitch = surface->u.legacy.level[level].nblk_x * surface->bpe; - pLayout->arrayPitch = surface->u.legacy.level[level].slice_size; - pLayout->depthPitch = surface->u.legacy.level[level].slice_size; - pLayout->size = surface->u.legacy.level[level].slice_size; - if (image->type == VK_IMAGE_TYPE_3D) - pLayout->size *= u_minify(image->info.depth, level); + if (device->physical_device->rad_info.chip_class >= GFX9) { + pLayout->offset = surface->u.gfx9.offset[level] + surface->u.gfx9.surf_slice_size * layer; + pLayout->rowPitch = surface->u.gfx9.surf_pitch * surface->bpe; + pLayout->arrayPitch = surface->u.gfx9.surf_slice_size; + pLayout->depthPitch = surface->u.gfx9.surf_slice_size; + pLayout->size = surface->u.gfx9.surf_slice_size; + if (image->type == VK_IMAGE_TYPE_3D) + pLayout->size *= u_minify(image->info.depth, level); + } else { + pLayout->offset = surface->u.legacy.level[level].offset + surface->u.legacy.level[level].slice_size * layer; + pLayout->rowPitch = surface->u.legacy.level[level].nblk_x * surface->bpe; + pLayout->arrayPitch = surface->u.legacy.level[level].slice_size; + pLayout->depthPitch = surface->u.legacy.level[level].slice_size; + pLayout->size = surface->u.legacy.level[level].slice_size; + if (image->type == VK_IMAGE_TYPE_3D) + pLayout->size *= u_minify(image->info.depth, level); + } } _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
