egl: set EGL_CONFORMANT, EGL_RENDERABLE_TYPE config fields, fix null ptr crashes in MakeCurrent
This commit is contained in:
parent
2833d4e715
commit
e7fd3de927
|
@ -181,6 +181,10 @@ get_drawable_size(Display *dpy, Drawable d, uint *width, uint *height)
|
||||||
static void
|
static void
|
||||||
create_configs(_EGLDisplay *disp, __GLXdisplayPrivate *glx_priv)
|
create_configs(_EGLDisplay *disp, __GLXdisplayPrivate *glx_priv)
|
||||||
{
|
{
|
||||||
|
static const EGLint all_apis = (EGL_OPENGL_ES_BIT |
|
||||||
|
EGL_OPENGL_ES2_BIT |
|
||||||
|
EGL_OPENVG_BIT |
|
||||||
|
EGL_OPENGL_BIT);
|
||||||
__GLXscreenConfigs *scrn = glx_priv->screenConfigs;
|
__GLXscreenConfigs *scrn = glx_priv->screenConfigs;
|
||||||
const __GLcontextModes *m;
|
const __GLcontextModes *m;
|
||||||
int id = 1;
|
int id = 1;
|
||||||
|
@ -201,6 +205,8 @@ create_configs(_EGLDisplay *disp, __GLXdisplayPrivate *glx_priv)
|
||||||
SET_CONFIG_ATTRIB(&config->Base, EGL_STENCIL_SIZE, m->stencilBits);
|
SET_CONFIG_ATTRIB(&config->Base, EGL_STENCIL_SIZE, m->stencilBits);
|
||||||
SET_CONFIG_ATTRIB(&config->Base, EGL_NATIVE_VISUAL_ID, m->visualID);
|
SET_CONFIG_ATTRIB(&config->Base, EGL_NATIVE_VISUAL_ID, m->visualID);
|
||||||
SET_CONFIG_ATTRIB(&config->Base, EGL_NATIVE_VISUAL_TYPE, m->visualType);
|
SET_CONFIG_ATTRIB(&config->Base, EGL_NATIVE_VISUAL_TYPE, m->visualType);
|
||||||
|
SET_CONFIG_ATTRIB(&config->Base, EGL_CONFORMANT, all_apis);
|
||||||
|
SET_CONFIG_ATTRIB(&config->Base, EGL_RENDERABLE_TYPE, all_apis);
|
||||||
/* XXX only window rendering allowed ATM */
|
/* XXX only window rendering allowed ATM */
|
||||||
SET_CONFIG_ATTRIB(&config->Base, EGL_SURFACE_TYPE, EGL_WINDOW_BIT);
|
SET_CONFIG_ATTRIB(&config->Base, EGL_SURFACE_TYPE, EGL_WINDOW_BIT);
|
||||||
|
|
||||||
|
@ -654,7 +660,9 @@ xdri_eglTerminate(_EGLDriver *drv, EGLDisplay dpy)
|
||||||
_eglLog(_EGL_DEBUG, "XDRI: eglTerminate");
|
_eglLog(_EGL_DEBUG, "XDRI: eglTerminate");
|
||||||
|
|
||||||
_eglLog(_EGL_DEBUG, "XDRI: Closing %s", xdri_drv->dri_driver_name);
|
_eglLog(_EGL_DEBUG, "XDRI: Closing %s", xdri_drv->dri_driver_name);
|
||||||
|
#if 0
|
||||||
dlclose(xdri_drv->dri_driver_handle);
|
dlclose(xdri_drv->dri_driver_handle);
|
||||||
|
#endif
|
||||||
xdri_drv->dri_driver_handle = NULL;
|
xdri_drv->dri_driver_handle = NULL;
|
||||||
|
|
||||||
free((void*) xdri_drv->dri_driver_name);
|
free((void*) xdri_drv->dri_driver_name);
|
||||||
|
@ -748,15 +756,16 @@ xdri_eglMakeCurrent(_EGLDriver *drv, EGLDisplay dpy, EGLSurface d,
|
||||||
struct xdri_egl_context *xdri_ctx = lookup_context(context);
|
struct xdri_egl_context *xdri_ctx = lookup_context(context);
|
||||||
struct xdri_egl_surface *xdri_draw = lookup_surface(d);
|
struct xdri_egl_surface *xdri_draw = lookup_surface(d);
|
||||||
struct xdri_egl_surface *xdri_read = lookup_surface(r);
|
struct xdri_egl_surface *xdri_read = lookup_surface(r);
|
||||||
__DRIid draw = xdri_draw->driDrawable;
|
__DRIid draw = xdri_draw ? xdri_draw->driDrawable : 0;
|
||||||
__DRIid read = xdri_read->driDrawable;
|
__DRIid read = xdri_read ? xdri_read->driDrawable : 0;
|
||||||
int scrn = DefaultScreen(disp->Xdpy);
|
int scrn = DefaultScreen(disp->Xdpy);
|
||||||
|
|
||||||
if (!_eglMakeCurrent(drv, dpy, d, r, context))
|
if (!_eglMakeCurrent(drv, dpy, d, r, context))
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
|
|
||||||
|
|
||||||
if (!xdri_ctx->driContext.bindContext(disp->Xdpy, scrn, draw, read,
|
if (xdri_ctx &&
|
||||||
|
!xdri_ctx->driContext.bindContext(disp->Xdpy, scrn, draw, read,
|
||||||
&xdri_ctx->driContext)) {
|
&xdri_ctx->driContext)) {
|
||||||
return EGL_FALSE;
|
return EGL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue