Browse Source

st/egl: Add support for EGL_NV_post_sub_buffer

Signed-off-by: Fredrik Höglund <fredrik@kde.org>

[olv: remove #ifdef checks]
tags/mesa-8.0-rc1
Fredrik Höglund 13 years ago
parent
commit
7577284213

+ 4
- 2
src/gallium/state_trackers/egl/common/egl_g3d.c View File

dpy->Extensions.WL_bind_wayland_display = EGL_TRUE; dpy->Extensions.WL_bind_wayland_display = EGL_TRUE;
#endif #endif


#ifdef EGL_NOK_swap_region
if (gdpy->native->get_param(gdpy->native, NATIVE_PARAM_PRESENT_REGION) && if (gdpy->native->get_param(gdpy->native, NATIVE_PARAM_PRESENT_REGION) &&
gdpy->native->get_param(gdpy->native, NATIVE_PARAM_PRESERVE_BUFFER))
gdpy->native->get_param(gdpy->native, NATIVE_PARAM_PRESERVE_BUFFER)) {
#ifdef EGL_NOK_swap_region
dpy->Extensions.NOK_swap_region = EGL_TRUE; dpy->Extensions.NOK_swap_region = EGL_TRUE;
#endif #endif
dpy->Extensions.NV_post_sub_buffer = EGL_TRUE;
}


if (egl_g3d_add_configs(drv, dpy, 1) == 1) { if (egl_g3d_add_configs(drv, dpy, 1) == 1) {
_eglError(EGL_NOT_INITIALIZED, "eglInitialize(unable to add configs)"); _eglError(EGL_NOT_INITIALIZED, "eglInitialize(unable to add configs)");

+ 20
- 0
src/gallium/state_trackers/egl/common/egl_g3d_api.c View File

gconf->stvis.buffer_mask & ST_ATTACHMENT_FRONT_LEFT_MASK) gconf->stvis.buffer_mask & ST_ATTACHMENT_FRONT_LEFT_MASK)
gsurf->stvis.render_buffer = ST_ATTACHMENT_FRONT_LEFT; gsurf->stvis.render_buffer = ST_ATTACHMENT_FRONT_LEFT;


if (dpy->Extensions.NV_post_sub_buffer) {
if (gsurf->base.Type == EGL_WINDOW_BIT &&
gsurf->base.RenderBuffer == EGL_BACK_BUFFER)
gsurf->base.PostSubBufferSupportedNV = EGL_TRUE;
else
gsurf->base.PostSubBufferSupportedNV = EGL_FALSE;
}

gsurf->stfbi = egl_g3d_create_st_framebuffer(&gsurf->base); gsurf->stfbi = egl_g3d_create_st_framebuffer(&gsurf->base);
if (!gsurf->stfbi) { if (!gsurf->stfbi) {
nsurf->destroy(nsurf); nsurf->destroy(nsurf);
} }
#endif /* EGL_NOK_swap_region */ #endif /* EGL_NOK_swap_region */


static EGLBoolean
egl_g3d_post_sub_buffer(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf,
EGLint x, EGLint y, EGLint width, EGLint height)
{
/* Note: y=0=bottom */
const EGLint rect[4] = { x, surf->Height - y - height, width, height };

return swap_buffers(drv, dpy, surf, 1, rect, EGL_TRUE);
}

static EGLBoolean static EGLBoolean
egl_g3d_copy_buffers(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, egl_g3d_copy_buffers(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf,
EGLNativePixmapType target) EGLNativePixmapType target)
#ifdef EGL_NOK_swap_region #ifdef EGL_NOK_swap_region
drv->API.SwapBuffersRegionNOK = egl_g3d_swap_buffers_region; drv->API.SwapBuffersRegionNOK = egl_g3d_swap_buffers_region;
#endif #endif

drv->API.PostSubBufferNV = egl_g3d_post_sub_buffer;
} }

Loading…
Cancel
Save