Module: Mesa
Branch: main
Commit: cfdad158a1f1fb411a6113be737046c435d7b6a8
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cfdad158a1f1fb411a6113be737046c435d7b6a8

Author: Dave Airlie <[email protected]>
Date:   Fri Oct  6 16:07:38 2023 +1000

lavapipe: handle planes in get image sub resource

image sub resources need to take planes into account in the calculations.

Reviewed-by: Roland Scheidegger <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25609>

---

 src/gallium/frontends/lavapipe/lvp_image.c | 25 +++++++++----------------
 1 file changed, 9 insertions(+), 16 deletions(-)

diff --git a/src/gallium/frontends/lavapipe/lvp_image.c 
b/src/gallium/frontends/lavapipe/lvp_image.c
index 4d94ca8c164..0b9a58f6472 100644
--- a/src/gallium/frontends/lavapipe/lvp_image.c
+++ b/src/gallium/frontends/lavapipe/lvp_image.c
@@ -379,9 +379,12 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetImageSubresourceLayout(
    LVP_FROM_HANDLE(lvp_image, image, _image);
    uint64_t value;
 
+   const uint8_t p = lvp_image_aspects_to_plane(image, 
pSubresource->aspectMask);
+   const struct lvp_image_plane *plane = &image->planes[p];
+
    device->pscreen->resource_get_param(device->pscreen,
                                        NULL,
-                                       image->planes[0].bo,
+                                       plane->bo,
                                        0,
                                        pSubresource->arrayLayer,
                                        pSubresource->mipLevel,
@@ -392,7 +395,7 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetImageSubresourceLayout(
 
    device->pscreen->resource_get_param(device->pscreen,
                                        NULL,
-                                       image->planes[0].bo,
+                                       plane->bo,
                                        0,
                                        pSubresource->arrayLayer,
                                        pSubresource->mipLevel,
@@ -403,32 +406,22 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetImageSubresourceLayout(
 
    device->pscreen->resource_get_param(device->pscreen,
                                        NULL,
-                                       image->planes[0].bo,
+                                       plane->bo,
                                        0,
                                        pSubresource->arrayLayer,
                                        pSubresource->mipLevel,
                                        PIPE_RESOURCE_PARAM_LAYER_STRIDE,
                                        0, &value);
 
-   if (image->planes[0].bo->target == PIPE_TEXTURE_3D) {
+   if (plane->bo->target == PIPE_TEXTURE_3D) {
       pLayout->depthPitch = value;
       pLayout->arrayPitch = 0;
    } else {
       pLayout->depthPitch = 0;
       pLayout->arrayPitch = value;
    }
-   pLayout->size = image->size;
-
-   switch (pSubresource->aspectMask) {
-   case VK_IMAGE_ASPECT_COLOR_BIT:
-      break;
-   case VK_IMAGE_ASPECT_DEPTH_BIT:
-      break;
-   case VK_IMAGE_ASPECT_STENCIL_BIT:
-      break;
-   default:
-      assert(!"Invalid image aspect");
-   }
+   pLayout->offset += plane->plane_offset;
+   pLayout->size = plane->size;
 }
 
 VKAPI_ATTR void VKAPI_CALL lvp_GetImageSubresourceLayout2EXT(

Reply via email to