summaryrefslogtreecommitdiffstats
path: root/src/egl/main
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2019-10-17 20:07:32 -0400
committerMarek Olšák <[email protected]>2019-10-25 19:59:04 -0400
commitc1c574fdf18f2aeb1c03f9670bf00e1dcd22d99d (patch)
tree35bc1412bf4df9247b16f6e8660d8aea2d1e751e /src/egl/main
parent34b1aa957a3f44ea9587ec43311e8434d3782cc1 (diff)
egl: implement new functions from EGL_EXT_image_flush_external
Reviewed-by: Kristian H. Kristensen <[email protected]> Reviewed-By: Tapani Pälli <[email protected]>
Diffstat (limited to 'src/egl/main')
-rw-r--r--src/egl/main/eglapi.c50
-rw-r--r--src/egl/main/eglapi.h5
-rw-r--r--src/egl/main/egldisplay.h1
-rw-r--r--src/egl/main/eglentrypoint.h2
4 files changed, 58 insertions, 0 deletions
diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index 51557be0864..68db0bd4cb9 100644
--- a/src/egl/main/eglapi.c
+++ b/src/egl/main/eglapi.c
@@ -499,6 +499,7 @@ _eglCreateExtensionsString(_EGLDisplay *disp)
_EGL_CHECK_EXTENSION(EXT_create_context_robustness);
_EGL_CHECK_EXTENSION(EXT_image_dma_buf_import);
_EGL_CHECK_EXTENSION(EXT_image_dma_buf_import_modifiers);
+ _EGL_CHECK_EXTENSION(EXT_image_flush_external);
_EGL_CHECK_EXTENSION(EXT_surface_CTA861_3_metadata);
_EGL_CHECK_EXTENSION(EXT_surface_SMPTE2086_metadata);
_EGL_CHECK_EXTENSION(EXT_swap_buffers_with_damage);
@@ -2747,6 +2748,55 @@ eglGetDisplayDriverName(EGLDisplay dpy)
RETURN_EGL_EVAL(disp, ret);
}
+static EGLBoolean EGLAPIENTRY
+eglImageFlushExternalEXT(EGLDisplay dpy, EGLImageKHR image,
+ const EGLAttrib *attrib_list)
+{
+ _EGLDisplay *disp = _eglLockDisplay(dpy);
+ _EGLContext *ctx = _eglGetCurrentContext();
+ _EGLImage *img = _eglLookupImage(image, disp);
+ _EGLDriver *drv;
+
+ _EGL_FUNC_START(disp, EGL_OBJECT_IMAGE_KHR, img, EGL_FALSE);
+ _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv);
+
+ if (attrib_list && attrib_list[0] != EGL_NONE)
+ RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE);
+
+ if (!ctx || !disp->Extensions.EXT_image_flush_external)
+ RETURN_EGL_EVAL(disp, EGL_FALSE);
+ if (!img)
+ RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE);
+
+
+ drv->API.ImageFlushExternal(disp, ctx, img);
+ RETURN_EGL_EVAL(disp, EGL_TRUE);
+}
+
+static EGLBoolean EGLAPIENTRY
+eglImageInvalidateExternalEXT(EGLDisplay dpy, EGLImageKHR image,
+ const EGLAttrib *attrib_list)
+{
+ _EGLDisplay *disp = _eglLockDisplay(dpy);
+ _EGLContext *ctx = _eglGetCurrentContext();
+ _EGLImage *img = _eglLookupImage(image, disp);
+ _EGLDriver *drv;
+
+ _EGL_FUNC_START(disp, EGL_OBJECT_IMAGE_KHR, img, EGL_FALSE);
+ _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv);
+
+ if (attrib_list && attrib_list[0] != EGL_NONE)
+ RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE);
+
+ if (!ctx || !disp->Extensions.EXT_image_flush_external)
+ RETURN_EGL_EVAL(disp, EGL_FALSE);
+ if (!img)
+ RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE);
+
+ drv->API.ImageInvalidateExternal(disp, ctx, img);
+ RETURN_EGL_EVAL(disp, EGL_TRUE);
+}
+
__eglMustCastToProperFunctionPointerType EGLAPIENTRY
eglGetProcAddress(const char *procname)
{
diff --git a/src/egl/main/eglapi.h b/src/egl/main/eglapi.h
index 968f4b27725..76891dcd25b 100644
--- a/src/egl/main/eglapi.h
+++ b/src/egl/main/eglapi.h
@@ -189,6 +189,11 @@ struct _egl_api
void (*SetBlobCacheFuncsANDROID) (_EGLDriver *drv, _EGLDisplay *disp,
EGLSetBlobFuncANDROID set,
EGLGetBlobFuncANDROID get);
+
+ void (*ImageFlushExternal)(_EGLDisplay *disp, _EGLContext *ctx,
+ _EGLImage *image);
+ void (*ImageInvalidateExternal)(_EGLDisplay *disp, _EGLContext *ctx,
+ _EGLImage *image);
};
#ifdef __cplusplus
diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h
index 02ac4fb9a9d..940b71e318e 100644
--- a/src/egl/main/egldisplay.h
+++ b/src/egl/main/egldisplay.h
@@ -105,6 +105,7 @@ struct _egl_extensions
EGLBoolean EXT_create_context_robustness;
EGLBoolean EXT_image_dma_buf_import;
EGLBoolean EXT_image_dma_buf_import_modifiers;
+ EGLBoolean EXT_image_flush_external;
EGLBoolean EXT_pixel_format_float;
EGLBoolean EXT_surface_CTA861_3_metadata;
EGLBoolean EXT_surface_SMPTE2086_metadata;
diff --git a/src/egl/main/eglentrypoint.h b/src/egl/main/eglentrypoint.h
index 44e971e023a..b708078f550 100644
--- a/src/egl/main/eglentrypoint.h
+++ b/src/egl/main/eglentrypoint.h
@@ -51,6 +51,8 @@ EGL_ENTRYPOINT(eglGetProcAddress)
EGL_ENTRYPOINT(eglGetSyncAttrib)
EGL_ENTRYPOINT(eglGetSyncAttribKHR)
EGL_ENTRYPOINT(eglGetSyncValuesCHROMIUM)
+EGL_ENTRYPOINT(eglImageFlushExternalEXT)
+EGL_ENTRYPOINT(eglImageInvalidateExternalEXT)
EGL_ENTRYPOINT(eglInitialize)
EGL_ENTRYPOINT(eglLabelObjectKHR)
EGL_ENTRYPOINT(eglMakeCurrent)