aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2017-10-10 13:58:47 +0200
committerNicolai Hähnle <[email protected]>2017-10-10 13:58:47 +0200
commitbad24395d91737ce2b07cfe567c449271e31988c (patch)
treef9a9c1d740240d7e25788df330fc687f2cceaff7
parentd0d6efcc64d5d088f130fbaec5d47f5e8817fae2 (diff)
egl/dri: use createImageFromRenderbuffer2 when available
Reviewed-by: Eric Engestrom <[email protected]>
-rw-r--r--src/egl/drivers/dri2/egl_dri2.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 1407c96352e..171858bbcd9 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -1890,9 +1890,26 @@ dri2_create_image_khr_renderbuffer(_EGLDisplay *disp, _EGLContext *ctx,
return EGL_NO_IMAGE_KHR;
}
- dri_image =
- dri2_dpy->image->createImageFromRenderbuffer(dri2_ctx->dri_context,
- renderbuffer, NULL);
+ if (dri2_dpy->image->base.version >= 17) {
+ unsigned error = ~0;
+
+ dri_image = dri2_dpy->image->createImageFromRenderbuffer2(
+ dri2_ctx->dri_context, renderbuffer, NULL, &error);
+
+ assert(!!dri_image == (error == __DRI_IMAGE_ERROR_SUCCESS));
+
+ if (!dri_image) {
+ _eglError(egl_error_from_dri_image_error(error), "dri2_create_image_khr");
+ return EGL_NO_IMAGE_KHR;
+ }
+ } else {
+ dri_image = dri2_dpy->image->createImageFromRenderbuffer(
+ dri2_ctx->dri_context, renderbuffer, NULL);
+ if (!dri_image) {
+ _eglError(EGL_BAD_ALLOC, "dri2_create_image_khr");
+ return EGL_NO_IMAGE_KHR;
+ }
+ }
return dri2_create_image_from_dri(disp, dri_image);
}