Revert "egl: move alloc & init out of _eglBuiltInDriver{DRI2,Haiku}"

This reverts commit 8cb84c8477.

This fixes crashing shader-db/run.
This commit is contained in:
Marek Olšák
2017-10-18 20:23:00 +02:00
parent 2cb9ab53dd
commit 84f3afc2e1
5 changed files with 31 additions and 18 deletions

View File

@@ -3191,11 +3191,16 @@ dri2_interop_export_object(_EGLDisplay *dpy, _EGLContext *ctx,
/**
* This is the main entrypoint into the driver, called by libEGL.
* Gets an _EGLDriver object and init its dispatch table.
* Create a new _EGLDriver object and init its dispatch table.
*/
void
_eglInitDriver(_EGLDriver *dri2_drv)
_EGLDriver *
_eglBuiltInDriver(void)
{
_EGLDriver *dri2_drv = calloc(1, sizeof *dri2_drv);
if (!dri2_drv)
return NULL;
_eglInitDriverFallbacks(dri2_drv);
dri2_drv->API.Initialize = dri2_initialize;
dri2_drv->API.Terminate = dri2_terminate;
dri2_drv->API.CreateContext = dri2_create_context;
@@ -3246,4 +3251,6 @@ _eglInitDriver(_EGLDriver *dri2_drv)
dri2_drv->API.DupNativeFenceFDANDROID = dri2_dup_native_fence_fd;
dri2_drv->Name = "DRI2";
return dri2_drv;
}

View File

@@ -305,14 +305,21 @@ haiku_swap_buffers(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf)
/**
* This is the main entrypoint into the driver, called by libEGL.
* Gets an _EGLDriver object and init its dispatch table.
* Create a new _EGLDriver object and init its dispatch table.
*/
extern "C"
void
_eglInitDriver(_EGLDriver *driver)
_EGLDriver*
_eglBuiltInDriver(void)
{
CALLED();
_EGLDriver* driver = calloc(1, sizeof(*driver));
if (!driver) {
_eglError(EGL_BAD_ALLOC, "_eglBuiltInDriverHaiku");
return NULL;
}
_eglInitDriverFallbacks(driver);
driver->API.Initialize = init_haiku;
driver->API.Terminate = haiku_terminate;
driver->API.CreateContext = haiku_create_context;
@@ -328,4 +335,6 @@ _eglInitDriver(_EGLDriver *driver)
driver->Name = "Haiku";
TRACE("API Calls defined\n");
return driver;
}

View File

@@ -19,12 +19,13 @@ Bootstrapping:
When the apps calls eglInitialize() a device driver is selected and loaded
(look for _eglAddDrivers() and _eglLoadModule() in egldriver.c).
The built-in driver's entry point function is then called and given
a freshly allocated and initialised _EGLDriver, with default fallback
entrypoints set.
The built-in driver's entry point function is then called. This driver function
allocates, initializes and returns a new _EGLDriver object (usually a
subclass of that type).
As part of initialization, the dispatch table in _EGLDriver->API must be
populated with all the EGL entrypoints. Some functions like
populated with all the EGL entrypoints. Typically, _eglInitDriverFallbacks()
can be used to plug in default/fallback functions. Some functions like
driver->API.Initialize and driver->API.Terminate _must_ be implemented
with driver-specific code (no default/fallback function is possible).

View File

@@ -54,12 +54,8 @@ _eglGetDriver(void)
{
mtx_lock(&_eglModuleMutex);
if (!_eglDriver) {
_eglDriver = calloc(1, sizeof(*_eglDriver));
if (!_eglDriver)
return NULL;
_eglInitDriver(_eglDriver);
}
_eglDriver = _eglBuiltInDriver();
mtx_unlock(&_eglModuleMutex);

View File

@@ -81,8 +81,8 @@ struct _egl_driver
};
extern void
_eglInitDriver(_EGLDriver *driver);
extern _EGLDriver*
_eglBuiltInDriver(void);
extern _EGLDriver *