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

Pohjolainen, Topi topi.pohjolainen at gmail.com
Sat Dec 10 14:05:12 UTC 2016


On Thu, Dec 01, 2016 at 02:10:01PM -0800, Ben Widawsky wrote:
> From: Ben Widawsky <ben at bwidawsk.net>
> 
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> ---
>  src/mesa/drivers/dri/i965/intel_screen.c | 20 +++++++++++++++-----
>  1 file changed, 15 insertions(+), 5 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
> index 91eb7ec..f40761a 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -747,7 +747,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;
> @@ -956,9 +956,17 @@ 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);
> +          dri_format = parent->dri_format;
> +          goto done;
> +       }
> +       return NULL;
> +    }
>  
>      f = parent->planar_format;
>  
> @@ -972,11 +980,13 @@ 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;
>  
> -    if (offset + height * stride > parent->bo->size) {
> +    if (!is_aux &&
> +        offset + height * stride > parent->bo->size) {

This means that parent->bo->size is set to the size of the color region and
not to the full size of color+aux. I don't think I saw yet logic in this
series doing this...

Anyway, small comment would probably prevent other people wondering about the
same thing. What do you think?

>         _mesa_warning(NULL, "intel_create_sub_image: subimage out of bounds");
>         free(image);
>         return NULL;
> -- 
> 2.10.2
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list