[Mesa-dev] [PATCH 25/32] i965: Pretend that CCS modified images are two planes

Ben Widawsky ben at bwidawsk.net
Tue Jan 3 02:37:16 UTC 2017


Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
Acked-by: Daniel Stone <daniels at collabora.com>
---
 src/mesa/drivers/dri/i965/intel_screen.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 805de5b461..b65ed76720 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -769,7 +769,7 @@ intel_query_image(__DRIimage *image, int attrib, int *value)
    case __DRI_IMAGE_ATTRIB_FOURCC:
       return intel_lookup_fourcc(image->dri_format, value);
    case __DRI_IMAGE_ATTRIB_NUM_PLANES:
-      *value = 1;
+      *value = image->aux_offset ? 2: 1;
       return true;
    case __DRI_IMAGE_ATTRIB_OFFSET:
       *value = image->offset;
@@ -978,9 +978,18 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate)
     int width, height, offset, stride, dri_format, index;
     struct intel_image_format *f;
     __DRIimage *image;
-
-    if (parent == NULL || parent->planar_format == NULL)
-        return NULL;
+    bool is_aux = parent->aux_offset && plane == 1;
+
+    if (parent == NULL || parent->planar_format == NULL) {
+       if (is_aux) {
+          offset = parent->aux_offset;
+          stride = ALIGN(parent->pitch / 32, 128);
+          height = ALIGN(DIV_ROUND_UP(parent->height, 16), 32);
+          dri_format = parent->dri_format;
+          goto done;
+       }
+       return NULL;
+    }
 
     f = parent->planar_format;
 
@@ -994,6 +1003,7 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate)
     offset = parent->offsets[index];
     stride = parent->strides[index];
 
+done:
     image = intel_allocate_image(parent->screen, dri_format, loaderPrivate);
     if (image == NULL)
        return NULL;
-- 
2.11.0



More information about the mesa-dev mailing list