egl: move alloc & init out of _eglBuiltInDriver{DRI2,Haiku}
Note: dropping the EGL_BAD_ALLOC in egl_haiku because it's overwritten by the EGL_NOT_INITIALIZED in eglInitialize(). Signed-off-by: Eric Engestrom <eric@engestrom.ch> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
This commit is contained in:
parent
4893673b15
commit
8cb84c8477
|
@ -3195,16 +3195,11 @@ dri2_interop_export_object(_EGLDisplay *dpy, _EGLContext *ctx,
|
|||
|
||||
/**
|
||||
* This is the main entrypoint into the driver, called by libEGL.
|
||||
* Create a new _EGLDriver object and init its dispatch table.
|
||||
* Gets an _EGLDriver object and init its dispatch table.
|
||||
*/
|
||||
_EGLDriver *
|
||||
_eglBuiltInDriver(void)
|
||||
void
|
||||
_eglInitDriver(_EGLDriver *dri2_drv)
|
||||
{
|
||||
_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;
|
||||
|
@ -3255,6 +3250,4 @@ _eglBuiltInDriver(void)
|
|||
dri2_drv->API.DupNativeFenceFDANDROID = dri2_dup_native_fence_fd;
|
||||
|
||||
dri2_drv->Name = "DRI2";
|
||||
|
||||
return dri2_drv;
|
||||
}
|
||||
|
|
|
@ -305,21 +305,14 @@ haiku_swap_buffers(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf)
|
|||
|
||||
/**
|
||||
* This is the main entrypoint into the driver, called by libEGL.
|
||||
* Create a new _EGLDriver object and init its dispatch table.
|
||||
* Gets an _EGLDriver object and init its dispatch table.
|
||||
*/
|
||||
extern "C"
|
||||
_EGLDriver*
|
||||
_eglBuiltInDriver(void)
|
||||
void
|
||||
_eglInitDriver(_EGLDriver *driver)
|
||||
{
|
||||
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;
|
||||
|
@ -335,6 +328,4 @@ _eglBuiltInDriver(void)
|
|||
driver->Name = "Haiku";
|
||||
|
||||
TRACE("API Calls defined\n");
|
||||
|
||||
return driver;
|
||||
}
|
||||
|
|
|
@ -19,13 +19,12 @@ 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. This driver function
|
||||
allocates, initializes and returns a new _EGLDriver object (usually a
|
||||
subclass of that type).
|
||||
The built-in driver's entry point function is then called and given
|
||||
a freshly allocated and initialised _EGLDriver, with default fallback
|
||||
entrypoints set.
|
||||
|
||||
As part of initialization, the dispatch table in _EGLDriver->API must be
|
||||
populated with all the EGL entrypoints. Typically, _eglInitDriverFallbacks()
|
||||
can be used to plug in default/fallback functions. Some functions like
|
||||
populated with all the EGL entrypoints. Some functions like
|
||||
driver->API.Initialize and driver->API.Terminate _must_ be implemented
|
||||
with driver-specific code (no default/fallback function is possible).
|
||||
|
||||
|
|
|
@ -52,8 +52,12 @@ _eglGetDriver(void)
|
|||
{
|
||||
mtx_lock(&_eglModuleMutex);
|
||||
|
||||
if (!_eglDriver)
|
||||
_eglDriver = _eglBuiltInDriver();
|
||||
if (!_eglDriver) {
|
||||
_eglDriver = calloc(1, sizeof(*_eglDriver));
|
||||
if (!_eglDriver)
|
||||
return NULL;
|
||||
_eglInitDriver(_eglDriver);
|
||||
}
|
||||
|
||||
mtx_unlock(&_eglModuleMutex);
|
||||
|
||||
|
|
|
@ -81,8 +81,8 @@ struct _egl_driver
|
|||
};
|
||||
|
||||
|
||||
extern _EGLDriver*
|
||||
_eglBuiltInDriver(void);
|
||||
extern void
|
||||
_eglInitDriver(_EGLDriver *driver);
|
||||
|
||||
|
||||
extern _EGLDriver *
|
||||
|
|
Loading…
Reference in New Issue