Commit 810f99be by Nicolas Capens

Implementation of EGL_KHR_swap_buffers_with_damage.

Bug 24111119 This is a trivial implementation which does not actually optimize compositing using the damage rects. That can be implemented later. Change-Id: Ibf511ef166a33b1d2f1826bfc5618765062fe2a2 Reviewed-on: https://swiftshader-review.googlesource.com/4014Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 7649300e
...@@ -45,6 +45,7 @@ global: ...@@ -45,6 +45,7 @@ global:
eglDestroySyncKHR; eglDestroySyncKHR;
eglClientWaitSyncKHR; eglClientWaitSyncKHR;
eglGetSyncAttribKHR; eglGetSyncAttribKHR;
eglSwapBuffersWithDamageKHR;
libEGL_swiftshader; libEGL_swiftshader;
......
...@@ -179,6 +179,7 @@ const char *QueryString(EGLDisplay dpy, EGLint name) ...@@ -179,6 +179,7 @@ const char *QueryString(EGLDisplay dpy, EGLint name)
"EGL_KHR_gl_renderbuffer_image " "EGL_KHR_gl_renderbuffer_image "
"EGL_KHR_fence_sync " "EGL_KHR_fence_sync "
"EGL_KHR_image_base " "EGL_KHR_image_base "
"EGL_KHR_swap_buffers_with_damage "
"EGL_ANDROID_framebuffer_target " "EGL_ANDROID_framebuffer_target "
"EGL_ANDROID_recordable"); "EGL_ANDROID_recordable");
case EGL_VENDOR: case EGL_VENDOR:
...@@ -944,6 +945,11 @@ EGLBoolean DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image) ...@@ -944,6 +945,11 @@ EGLBoolean DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
return success(EGL_TRUE); return success(EGL_TRUE);
} }
EGLBoolean SwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects)
{
return eglSwapBuffers(dpy, surface); // FIXME: Pass damage rects to compositor for optimization
}
EGLDisplay GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list) EGLDisplay GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list)
{ {
TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLint *attrib_list = %p)", platform, native_display, attrib_list); TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLint *attrib_list = %p)", platform, native_display, attrib_list);
...@@ -1109,6 +1115,7 @@ __eglMustCastToProperFunctionPointerType GetProcAddress(const char *procname) ...@@ -1109,6 +1115,7 @@ __eglMustCastToProperFunctionPointerType GetProcAddress(const char *procname)
EXTENSION(eglDestroySyncKHR), EXTENSION(eglDestroySyncKHR),
EXTENSION(eglClientWaitSyncKHR), EXTENSION(eglClientWaitSyncKHR),
EXTENSION(eglGetSyncAttribKHR), EXTENSION(eglGetSyncAttribKHR),
EXTENSION(eglSwapBuffersWithDamageKHR),
#undef EXTENSION #undef EXTENSION
}; };
......
...@@ -45,5 +45,6 @@ EXPORTS ...@@ -45,5 +45,6 @@ EXPORTS
eglDestroySyncKHR eglDestroySyncKHR
eglClientWaitSyncKHR eglClientWaitSyncKHR
eglGetSyncAttribKHR eglGetSyncAttribKHR
eglSwapBuffersWithDamageKHR
libEGL_swiftshader libEGL_swiftshader
...@@ -46,6 +46,7 @@ public: ...@@ -46,6 +46,7 @@ public:
EGLBoolean (*eglCopyBuffers)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); EGLBoolean (*eglCopyBuffers)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
EGLImageKHR (*eglCreateImageKHR)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); EGLImageKHR (*eglCreateImageKHR)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
EGLBoolean (*eglDestroyImageKHR)(EGLDisplay dpy, EGLImageKHR image); EGLBoolean (*eglDestroyImageKHR)(EGLDisplay dpy, EGLImageKHR image);
EGLBoolean (*eglSwapBuffersWithDamageKHR)(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
__eglMustCastToProperFunctionPointerType (*eglGetProcAddress)(const char*); __eglMustCastToProperFunctionPointerType (*eglGetProcAddress)(const char*);
EGLSyncKHR (*eglCreateSyncKHR)(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); EGLSyncKHR (*eglCreateSyncKHR)(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
EGLBoolean (*eglDestroySyncKHR)(EGLDisplay dpy, EGLSyncKHR sync); EGLBoolean (*eglDestroySyncKHR)(EGLDisplay dpy, EGLSyncKHR sync);
......
...@@ -356,6 +356,7 @@ EGLBoolean SwapBuffers(EGLDisplay dpy, EGLSurface surface); ...@@ -356,6 +356,7 @@ EGLBoolean SwapBuffers(EGLDisplay dpy, EGLSurface surface);
EGLBoolean CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); EGLBoolean CopyBuffers(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target);
EGLImageKHR CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); EGLImageKHR CreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
EGLBoolean DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image); EGLBoolean DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image);
EGLBoolean SwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects);
EGLDisplay GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list); EGLDisplay GetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list);
EGLSurface CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); EGLSurface CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
EGLSurface CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); EGLSurface CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list);
...@@ -543,6 +544,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR ima ...@@ -543,6 +544,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR ima
return egl::DestroyImageKHR(dpy, image); return egl::DestroyImageKHR(dpy, image);
} }
EGLAPI EGLBoolean eglSwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects)
{
return egl::SwapBuffersWithDamageKHR(dpy, surface, rects, n_rects);
}
EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list) EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list)
{ {
return egl::GetPlatformDisplayEXT(platform, native_display, attrib_list); return egl::GetPlatformDisplayEXT(platform, native_display, attrib_list);
...@@ -621,6 +627,7 @@ LibEGLexports::LibEGLexports() ...@@ -621,6 +627,7 @@ LibEGLexports::LibEGLexports()
this->eglCopyBuffers = egl::CopyBuffers; this->eglCopyBuffers = egl::CopyBuffers;
this->eglCreateImageKHR = egl::CreateImageKHR; this->eglCreateImageKHR = egl::CreateImageKHR;
this->eglDestroyImageKHR = egl::DestroyImageKHR; this->eglDestroyImageKHR = egl::DestroyImageKHR;
this->eglSwapBuffersWithDamageKHR = egl::SwapBuffersWithDamageKHR;
this->eglGetProcAddress = egl::GetProcAddress; this->eglGetProcAddress = egl::GetProcAddress;
this->eglCreateSyncKHR = egl::CreateSyncKHR; this->eglCreateSyncKHR = egl::CreateSyncKHR;
this->eglDestroySyncKHR = egl::DestroySyncKHR; this->eglDestroySyncKHR = egl::DestroySyncKHR;
......
...@@ -208,6 +208,7 @@ EXPORTS ...@@ -208,6 +208,7 @@ EXPORTS
eglDestroySyncKHR eglDestroySyncKHR
eglClientWaitSyncKHR eglClientWaitSyncKHR
eglGetSyncAttribKHR eglGetSyncAttribKHR
eglSwapBuffersWithDamageKHR
libGLES_CM_swiftshader libGLES_CM_swiftshader
......
...@@ -541,6 +541,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR syn ...@@ -541,6 +541,11 @@ EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR syn
return libEGL->eglGetSyncAttribKHR(dpy, sync, attribute, value); return libEGL->eglGetSyncAttribKHR(dpy, sync, attribute, value);
} }
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects)
{
return libEGL->eglSwapBuffersWithDamageKHR(dpy, surface, rects, n_rects);
}
GL_API void GL_APIENTRY glActiveTexture(GLenum texture) GL_API void GL_APIENTRY glActiveTexture(GLenum texture)
{ {
return es1::ActiveTexture(texture); return es1::ActiveTexture(texture);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment