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

Pohjolainen, Topi topi.pohjolainen at gmail.com
Mon Jun 26 19:54:19 UTC 2017


On Fri, Jun 16, 2017 at 03:41:50PM -0700, Jason Ekstrand wrote:
> From: Ben Widawsky <ben at bwidawsk.net>
> 
> v2: move is_aux into if block. (Jason)
> Use else block instead of goto (Jason)
> 
> v3: Fix up logic for is_aux (Ben)
> Fix up size calculations and add FIXME (Ben)
> 
> v4 (Jason Ekstrand):
> Use the aux_pitch in the image instead of calculating it
> 
> Cc: Jason Ekstrand <jason at jlekstrand.net>
> 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 | 54 +++++++++++++++++++-------------
>  1 file changed, 33 insertions(+), 21 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
> index 7d6adb7..6237931f 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -757,7 +757,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;

Missing space after '2'.
                                      
>        return true;
>     case __DRI_IMAGE_ATTRIB_OFFSET:
>        *value = image->offset;
> @@ -1149,31 +1149,43 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate)
>      struct intel_image_format *f;
>      __DRIimage *image;
>  
> -    if (parent == NULL || parent->planar_format == NULL)
> -        return NULL;
> -
> -    f = parent->planar_format;
> -
> -    if (plane >= f->nplanes)
> -        return NULL;
> -
> -    width = parent->width >> f->planes[plane].width_shift;
> -    height = parent->height >> f->planes[plane].height_shift;
> -    dri_format = f->planes[plane].dri_format;
> -    index = f->planes[plane].buffer_index;
> -    offset = parent->offsets[index];
> -    stride = parent->strides[index];
> +    if (parent == NULL) {
> +       return NULL;
> +    } else if (parent->planar_format == NULL) {
> +       const bool is_aux = parent->aux_offset && plane == 1;
> +       if (!is_aux)
> +          return NULL;
> +
> +       width = parent->width;
> +       height = parent->height;
> +       dri_format = parent->dri_format;
> +       offset = parent->aux_offset;
> +       stride = parent->aux_pitch;
> +    } else {
> +       /* Planar formats don't support aux buffers/images */
> +       assert(!parent->aux_offset);
> +       f = parent->planar_format;
> +
> +       if (plane >= f->nplanes)
> +          return NULL;
> +
> +       width = parent->width >> f->planes[plane].width_shift;
> +       height = parent->height >> f->planes[plane].height_shift;
> +       dri_format = f->planes[plane].dri_format;
> +       index = f->planes[plane].buffer_index;
> +       offset = parent->offsets[index];
> +       stride = parent->strides[index];
> +
> +       if (offset + height * stride > parent->bo->size) {
> +          _mesa_warning(NULL, "intel_create_sub_image: subimage out of bounds");
> +          return NULL;
> +       }
> +    }
>  
>      image = intel_allocate_image(parent->screen, dri_format, loaderPrivate);
>      if (image == NULL)
>         return NULL;
>  
> -    if (offset + height * stride > parent->bo->size) {
> -       _mesa_warning(NULL, "intel_create_sub_image: subimage out of bounds");
> -       free(image);
> -       return NULL;
> -    }
> -
>      image->bo = parent->bo;
>      brw_bo_reference(parent->bo);
>      image->modifier = parent->modifier;
> -- 
> 2.5.0.400.gff86faf
> 
> _______________________________________________
> 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