From: Emil Velikov <emil.veli...@collabora.com> Signed-off-by: Emil Velikov <emil.veli...@collabora.com> --- 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev