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

Reply via email to