egl: add EGL_NV_post_sub_buffer
v2: Handle EGL_POST_SUB_BUFFER_SUPPORTED_NV in _eglParseSurfaceAttribList() Signed-off-by: Fredrik Höglund <fredrik@kde.org> [olv: remove #ifdef checks]
This commit is contained in:

committed by
Chia-I Wu

parent
f63e129d5f
commit
7d46b45c5b
@@ -941,6 +941,7 @@ eglGetProcAddress(const char *procname)
|
||||
{ "eglBindWaylandDisplayWL", (_EGLProc) eglBindWaylandDisplayWL },
|
||||
{ "eglUnbindWaylandDisplayWL", (_EGLProc) eglUnbindWaylandDisplayWL },
|
||||
#endif
|
||||
{ "eglPostSubBufferNV", (_EGLProc) eglPostSubBufferNV },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
EGLint i;
|
||||
@@ -1540,3 +1541,23 @@ eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display)
|
||||
RETURN_EGL_EVAL(disp, ret);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
EGLBoolean EGLAPIENTRY
|
||||
eglPostSubBufferNV(EGLDisplay dpy, EGLSurface surface,
|
||||
EGLint x, EGLint y, EGLint width, EGLint height)
|
||||
{
|
||||
_EGLDisplay *disp = _eglLockDisplay(dpy);
|
||||
_EGLSurface *surf = _eglLookupSurface(surface, disp);
|
||||
_EGLDriver *drv;
|
||||
EGLBoolean ret;
|
||||
|
||||
_EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv);
|
||||
|
||||
if (!disp->Extensions.NV_post_sub_buffer)
|
||||
RETURN_EGL_EVAL(disp, EGL_FALSE);
|
||||
|
||||
ret = drv->API.PostSubBufferNV(drv, disp, surf, x, y, width, height);
|
||||
|
||||
RETURN_EGL_EVAL(disp, ret);
|
||||
}
|
||||
|
@@ -125,6 +125,8 @@ typedef EGLBoolean (*BindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay *disp,
|
||||
typedef EGLBoolean (*UnbindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay *disp, struct wl_display *display);
|
||||
#endif
|
||||
|
||||
typedef EGLBoolean (*PostSubBufferNV_t)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surface, EGLint x, EGLint y, EGLint width, EGLint height);
|
||||
|
||||
/**
|
||||
* The API dispatcher jumps through these functions
|
||||
*/
|
||||
@@ -198,6 +200,8 @@ struct _egl_api
|
||||
BindWaylandDisplayWL_t BindWaylandDisplayWL;
|
||||
UnbindWaylandDisplayWL_t UnbindWaylandDisplayWL;
|
||||
#endif
|
||||
|
||||
PostSubBufferNV_t PostSubBufferNV;
|
||||
};
|
||||
|
||||
#endif /* EGLAPI_INCLUDED */
|
||||
|
@@ -111,6 +111,8 @@ struct _egl_extensions
|
||||
EGLBoolean NOK_texture_from_pixmap;
|
||||
|
||||
EGLBoolean ANDROID_image_native_buffer;
|
||||
|
||||
EGLBoolean NV_post_sub_buffer;
|
||||
};
|
||||
|
||||
|
||||
|
@@ -115,6 +115,8 @@ _eglUpdateExtensionsString(_EGLDisplay *dpy)
|
||||
_EGL_CHECK_EXTENSION(NOK_texture_from_pixmap);
|
||||
|
||||
_EGL_CHECK_EXTENSION(ANDROID_image_native_buffer);
|
||||
|
||||
_EGL_CHECK_EXTENSION(NV_post_sub_buffer);
|
||||
#undef _EGL_CHECK_EXTENSION
|
||||
}
|
||||
|
||||
|
@@ -170,6 +170,18 @@ _eglParseSurfaceAttribList(_EGLSurface *surf, const EGLint *attrib_list)
|
||||
}
|
||||
surf->RenderBuffer = val;
|
||||
break;
|
||||
case EGL_POST_SUB_BUFFER_SUPPORTED_NV:
|
||||
if (!dpy->Extensions.NV_post_sub_buffer ||
|
||||
type != EGL_WINDOW_BIT) {
|
||||
err = EGL_BAD_ATTRIBUTE;
|
||||
break;
|
||||
}
|
||||
if (val != EGL_TRUE && val != EGL_FALSE) {
|
||||
err = EGL_BAD_PARAMETER;
|
||||
break;
|
||||
}
|
||||
surf->PostSubBufferSupportedNV = val;
|
||||
break;
|
||||
/* pbuffer surface attributes */
|
||||
case EGL_WIDTH:
|
||||
if (type != EGL_PBUFFER_BIT) {
|
||||
@@ -323,6 +335,8 @@ _eglInitSurface(_EGLSurface *surf, _EGLDisplay *dpy, EGLint type,
|
||||
surf->VerticalResolution = EGL_UNKNOWN;
|
||||
surf->AspectRatio = EGL_UNKNOWN;
|
||||
|
||||
surf->PostSubBufferSupportedNV = EGL_FALSE;
|
||||
|
||||
/* the default swap interval is 1 */
|
||||
_eglClampSwapInterval(surf, 1);
|
||||
|
||||
@@ -392,6 +406,9 @@ _eglQuerySurface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surface,
|
||||
case EGL_VG_COLORSPACE:
|
||||
*value = surface->VGColorspace;
|
||||
break;
|
||||
case EGL_POST_SUB_BUFFER_SUPPORTED_NV:
|
||||
*value = surface->PostSubBufferSupportedNV;
|
||||
break;
|
||||
default:
|
||||
_eglError(EGL_BAD_ATTRIBUTE, "eglQuerySurface");
|
||||
return EGL_FALSE;
|
||||
|
@@ -73,6 +73,8 @@ struct _egl_surface
|
||||
|
||||
/* True if the surface is bound to an OpenGL ES texture */
|
||||
EGLBoolean BoundToTexture;
|
||||
|
||||
EGLBoolean PostSubBufferSupportedNV;
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user