[Mesa-dev] [PATCH 09/10] i915: implement DRIImage::createImageFromRenderbuffer2

Eric Engestrom eric.engestrom at imgtec.com
Tue Oct 17 10:33:53 UTC 2017


On Monday, 2017-10-16 16:04:11 +0000, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov at collabora.com>
> 
> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>

(same code, same comments as the previous/i965 patch apply here)

> ---
>  src/mesa/drivers/dri/i915/intel_screen.c | 33 +++++++++++++++++++++++++-------
>  1 file changed, 26 insertions(+), 7 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c
> index ba49e90fef5..d75e59ab98a 100644
> --- a/src/mesa/drivers/dri/i915/intel_screen.c
> +++ b/src/mesa/drivers/dri/i915/intel_screen.c
> @@ -334,8 +334,9 @@ intel_create_image_from_name(__DRIscreen *screen,
>  }
>  
>  static __DRIimage *
> -intel_create_image_from_renderbuffer(__DRIcontext *context,
> -				     int renderbuffer, void *loaderPrivate)
> +intel_create_image_from_renderbuffer2(__DRIcontext *context,
> +				      int renderbuffer, void *loaderPrivate,
> +				      unsigned *error)
>  {
>     __DRIimage *image;
>     struct intel_context *intel = context->driverPrivate;
> @@ -344,15 +345,16 @@ intel_create_image_from_renderbuffer(__DRIcontext *context,
>  
>     rb = _mesa_lookup_renderbuffer(&intel->ctx, renderbuffer);
>     if (!rb) {
> -      _mesa_error(&intel->ctx,
> -		  GL_INVALID_OPERATION, "glRenderbufferExternalMESA");
> +      *error = __DRI_IMAGE_ERROR_BAD_PARAMETER;
>        return NULL;
>     }
>  
>     irb = intel_renderbuffer(rb);
>     image = calloc(1, sizeof *image);
> -   if (image == NULL)
> +   if (image == NULL) {
> +      *error = __DRI_IMAGE_ERROR_BAD_ALLOC;
>        return NULL;
> +   }
>  
>     image->internal_format = rb->InternalFormat;
>     image->format = rb->Format;
> @@ -361,11 +363,27 @@ intel_create_image_from_renderbuffer(__DRIcontext *context,
>     intel_region_reference(&image->region, irb->mt->region);
>     intel_setup_image_from_dimensions(image);
>     image->dri_format = driGLFormatToImageFormat(image->format);
> +   if (image->dri_format == __DRI_IMAGE_FORMAT_NONE) {
> +      *error = __DRI_IMAGE_ERROR_BAD_PARAMETER;
> +      intel_region_release(&image->region);
> +      free(image);
> +      return NULL;
> +   }
>  
>     rb->NeedsFinishRenderTexture = true;
> +   *error = __DRI_IMAGE_ERROR_SUCCESS;
>     return image;
>  }
>  
> +static __DRIimage *
> +intel_create_image_from_renderbuffer(__DRIcontext *context,
> +				     int renderbuffer, void *loaderPrivate)
> +{
> +   unsigned error;
> +   return intel_create_image_from_renderbuffer2(context, renderbuffer,
> +                                                loaderPrivate, &error);
> +}
> +
>  static __DRIimage *
>  intel_create_image_from_texture(__DRIcontext *context, int target,
>                                  unsigned texture, int zoffset,
> @@ -694,7 +712,7 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate)
>  }
>  
>  static const __DRIimageExtension intelImageExtension = {
> -    .base = { __DRI_IMAGE, 7 },
> +    .base = { __DRI_IMAGE, 17 },
>  
>      .createImageFromName                = intel_create_image_from_name,
>      .createImageFromRenderbuffer        = intel_create_image_from_renderbuffer,
> @@ -706,7 +724,8 @@ static const __DRIimageExtension intelImageExtension = {
>      .createImageFromNames               = intel_create_image_from_names,
>      .fromPlanar                         = intel_from_planar,
>      .createImageFromTexture             = intel_create_image_from_texture,
> -    .createImageFromFds                 = intel_create_image_from_fds
> +    .createImageFromFds                 = intel_create_image_from_fds,
> +    .createImageFromRenderbuffer2       = intel_create_image_from_renderbuffer2,
>  };
>  
>  static int
> -- 
> 2.14.1
> 


More information about the mesa-dev mailing list