From d24e3ea8cb2d953106d927a8d543ae2b495e911b Mon Sep 17 00:00:00 2001 From: Eric Engestrom Date: Wed, 22 Jul 2020 01:06:05 +0200 Subject: [PATCH] egl: replace _eglInitDriver() with a simple variable MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Eric Engestrom Reviewed-by: Marcin Ślusarz Reviewed-by: Emil Velikov Part-of: --- src/egl/drivers/dri2/egl_dri2.c | 104 +++++++++++++--------------- src/egl/drivers/haiku/egl_haiku.cpp | 35 ++++------ src/egl/main/egldriver.c | 37 ++-------- src/egl/main/egldriver.h | 8 --- src/egl/main/eglglobals.c | 3 +- 5 files changed, 68 insertions(+), 119 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index ba0d78cf64d..2114077470e 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -3674,62 +3674,56 @@ dri2_interop_export_object(_EGLDisplay *disp, _EGLContext *ctx, return dri2_dpy->interop->export_object(dri2_ctx->dri_context, in, out); } -/** - * This is the main entrypoint into the driver, called by libEGL. - * Gets an _EGLDriver object and init its dispatch table. - */ -void -_eglInitDriver(_EGLDriver *dri2_drv) -{ - dri2_drv->Initialize = dri2_initialize; - dri2_drv->Terminate = dri2_terminate; - dri2_drv->CreateContext = dri2_create_context; - dri2_drv->DestroyContext = dri2_destroy_context; - dri2_drv->MakeCurrent = dri2_make_current; - dri2_drv->CreateWindowSurface = dri2_create_window_surface; - dri2_drv->CreatePixmapSurface = dri2_create_pixmap_surface; - dri2_drv->CreatePbufferSurface = dri2_create_pbuffer_surface; - dri2_drv->DestroySurface = dri2_destroy_surface; - dri2_drv->GetProcAddress = dri2_get_proc_address; - dri2_drv->WaitClient = dri2_wait_client; - dri2_drv->WaitNative = dri2_wait_native; - dri2_drv->BindTexImage = dri2_bind_tex_image; - dri2_drv->ReleaseTexImage = dri2_release_tex_image; - dri2_drv->SwapInterval = dri2_swap_interval; - dri2_drv->SwapBuffers = dri2_swap_buffers; - dri2_drv->SwapBuffersWithDamageEXT = dri2_swap_buffers_with_damage; - dri2_drv->SwapBuffersRegionNOK = dri2_swap_buffers_region; - dri2_drv->SetDamageRegion = dri2_set_damage_region; - dri2_drv->PostSubBufferNV = dri2_post_sub_buffer; - dri2_drv->CopyBuffers = dri2_copy_buffers, - dri2_drv->QueryBufferAge = dri2_query_buffer_age; - dri2_drv->CreateImageKHR = dri2_create_image; - dri2_drv->DestroyImageKHR = dri2_destroy_image_khr; - dri2_drv->CreateWaylandBufferFromImageWL = dri2_create_wayland_buffer_from_image; - dri2_drv->QuerySurface = dri2_query_surface; - dri2_drv->QueryDriverName = dri2_query_driver_name; - dri2_drv->QueryDriverConfig = dri2_query_driver_config; +_EGLDriver _eglDriver = { + .Initialize = dri2_initialize, + .Terminate = dri2_terminate, + .CreateContext = dri2_create_context, + .DestroyContext = dri2_destroy_context, + .MakeCurrent = dri2_make_current, + .CreateWindowSurface = dri2_create_window_surface, + .CreatePixmapSurface = dri2_create_pixmap_surface, + .CreatePbufferSurface = dri2_create_pbuffer_surface, + .DestroySurface = dri2_destroy_surface, + .GetProcAddress = dri2_get_proc_address, + .WaitClient = dri2_wait_client, + .WaitNative = dri2_wait_native, + .BindTexImage = dri2_bind_tex_image, + .ReleaseTexImage = dri2_release_tex_image, + .SwapInterval = dri2_swap_interval, + .SwapBuffers = dri2_swap_buffers, + .SwapBuffersWithDamageEXT = dri2_swap_buffers_with_damage, + .SwapBuffersRegionNOK = dri2_swap_buffers_region, + .SetDamageRegion = dri2_set_damage_region, + .PostSubBufferNV = dri2_post_sub_buffer, + .CopyBuffers = dri2_copy_buffers, + .QueryBufferAge = dri2_query_buffer_age, + .CreateImageKHR = dri2_create_image, + .DestroyImageKHR = dri2_destroy_image_khr, + .CreateWaylandBufferFromImageWL = dri2_create_wayland_buffer_from_image, + .QuerySurface = dri2_query_surface, + .QueryDriverName = dri2_query_driver_name, + .QueryDriverConfig = dri2_query_driver_config, #ifdef HAVE_LIBDRM - dri2_drv->CreateDRMImageMESA = dri2_create_drm_image_mesa; - dri2_drv->ExportDRMImageMESA = dri2_export_drm_image_mesa; - dri2_drv->ExportDMABUFImageQueryMESA = dri2_export_dma_buf_image_query_mesa; - dri2_drv->ExportDMABUFImageMESA = dri2_export_dma_buf_image_mesa; - dri2_drv->QueryDmaBufFormatsEXT = dri2_query_dma_buf_formats; - dri2_drv->QueryDmaBufModifiersEXT = dri2_query_dma_buf_modifiers; + .CreateDRMImageMESA = dri2_create_drm_image_mesa, + .ExportDRMImageMESA = dri2_export_drm_image_mesa, + .ExportDMABUFImageQueryMESA = dri2_export_dma_buf_image_query_mesa, + .ExportDMABUFImageMESA = dri2_export_dma_buf_image_mesa, + .QueryDmaBufFormatsEXT = dri2_query_dma_buf_formats, + .QueryDmaBufModifiersEXT = dri2_query_dma_buf_modifiers, #endif #ifdef HAVE_WAYLAND_PLATFORM - dri2_drv->BindWaylandDisplayWL = dri2_bind_wayland_display_wl; - dri2_drv->UnbindWaylandDisplayWL = dri2_unbind_wayland_display_wl; - dri2_drv->QueryWaylandBufferWL = dri2_query_wayland_buffer_wl; + .BindWaylandDisplayWL = dri2_bind_wayland_display_wl, + .UnbindWaylandDisplayWL = dri2_unbind_wayland_display_wl, + .QueryWaylandBufferWL = dri2_query_wayland_buffer_wl, #endif - dri2_drv->GetSyncValuesCHROMIUM = dri2_get_sync_values_chromium; - dri2_drv->CreateSyncKHR = dri2_create_sync; - dri2_drv->ClientWaitSyncKHR = dri2_client_wait_sync; - dri2_drv->SignalSyncKHR = dri2_signal_sync; - dri2_drv->WaitSyncKHR = dri2_server_wait_sync; - dri2_drv->DestroySyncKHR = dri2_destroy_sync; - dri2_drv->GLInteropQueryDeviceInfo = dri2_interop_query_device_info; - dri2_drv->GLInteropExportObject = dri2_interop_export_object; - dri2_drv->DupNativeFenceFDANDROID = dri2_dup_native_fence_fd; - dri2_drv->SetBlobCacheFuncsANDROID = dri2_set_blob_cache_funcs; -} + .GetSyncValuesCHROMIUM = dri2_get_sync_values_chromium, + .CreateSyncKHR = dri2_create_sync, + .ClientWaitSyncKHR = dri2_client_wait_sync, + .SignalSyncKHR = dri2_signal_sync, + .WaitSyncKHR = dri2_server_wait_sync, + .DestroySyncKHR = dri2_destroy_sync, + .GLInteropQueryDeviceInfo = dri2_interop_query_device_info, + .GLInteropExportObject = dri2_interop_export_object, + .DupNativeFenceFDANDROID = dri2_dup_native_fence_fd, + .SetBlobCacheFuncsANDROID = dri2_set_blob_cache_funcs, +}; diff --git a/src/egl/drivers/haiku/egl_haiku.cpp b/src/egl/drivers/haiku/egl_haiku.cpp index 52ab9dc7a7e..9daf907e68c 100644 --- a/src/egl/drivers/haiku/egl_haiku.cpp +++ b/src/egl/drivers/haiku/egl_haiku.cpp @@ -311,27 +311,16 @@ haiku_swap_buffers(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf) } -/** - * This is the main entrypoint into the driver, called by libEGL. - * Gets an _EGLDriver object and init its dispatch table. - */ extern "C" -void -_eglInitDriver(_EGLDriver *driver) -{ - CALLED(); - - driver->Initialize = init_haiku; - driver->Terminate = haiku_terminate; - driver->CreateContext = haiku_create_context; - driver->DestroyContext = haiku_destroy_context; - driver->MakeCurrent = haiku_make_current; - driver->CreateWindowSurface = haiku_create_window_surface; - driver->CreatePixmapSurface = haiku_create_pixmap_surface; - driver->CreatePbufferSurface = haiku_create_pbuffer_surface; - driver->DestroySurface = haiku_destroy_surface; - - driver->SwapBuffers = haiku_swap_buffers; - - TRACE("API Calls defined\n"); -} +_EGLDriver _eglDriver = { + .Initialize = init_haiku, + .Terminate = haiku_terminate, + .CreateContext = haiku_create_context, + .DestroyContext = haiku_destroy_context, + .MakeCurrent = haiku_make_current, + .CreateWindowSurface = haiku_create_window_surface, + .CreatePixmapSurface = haiku_create_pixmap_surface, + .CreatePbufferSurface = haiku_create_pbuffer_surface, + .DestroySurface = haiku_destroy_surface, + .SwapBuffers = haiku_swap_buffers, +}; diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c index 7bc373d25d7..2105d83b3da 100644 --- a/src/egl/main/egldriver.c +++ b/src/egl/main/egldriver.c @@ -46,34 +46,20 @@ #include "util/debug.h" -static mtx_t _eglModuleMutex = _MTX_INITIALIZER_NP; -static _EGLDriver *_eglDriver; +extern _EGLDriver _eglDriver; static _EGLDriver * _eglGetDriver(void) { - mtx_lock(&_eglModuleMutex); - - if (!_eglDriver) { - _eglDriver = calloc(1, sizeof(*_eglDriver)); - if (!_eglDriver) { - mtx_unlock(&_eglModuleMutex); - return NULL; - } - _eglInitDriver(_eglDriver); - } - - mtx_unlock(&_eglModuleMutex); - - return _eglDriver; + return &_eglDriver; } static _EGLDriver * _eglMatchAndInitialize(_EGLDisplay *disp) { if (_eglGetDriver()) - if (_eglDriver->Initialize(_eglDriver, disp)) - return _eglDriver; + if (_eglDriver.Initialize(&_eglDriver, disp)) + return &_eglDriver; return NULL; } @@ -112,19 +98,8 @@ _eglMatchDriver(_EGLDisplay *disp) __eglMustCastToProperFunctionPointerType _eglGetDriverProc(const char *procname) { - if (_eglGetDriver() && _eglDriver->GetProcAddress) - return _eglDriver->GetProcAddress(_eglDriver, procname); + if (_eglGetDriver() && _eglDriver.GetProcAddress) + return _eglDriver.GetProcAddress(&_eglDriver, procname); return NULL; } - -/** - * Unload all drivers. - */ -void -_eglUnloadDrivers(void) -{ - /* this is called at atexit time */ - free(_eglDriver); - _eglDriver = NULL; -} diff --git a/src/egl/main/egldriver.h b/src/egl/main/egldriver.h index 52767c26c52..51390332157 100644 --- a/src/egl/main/egldriver.h +++ b/src/egl/main/egldriver.h @@ -223,10 +223,6 @@ struct _egl_driver }; -extern void -_eglInitDriver(_EGLDriver *driver); - - extern _EGLDriver * _eglMatchDriver(_EGLDisplay *disp); @@ -235,10 +231,6 @@ extern __eglMustCastToProperFunctionPointerType _eglGetDriverProc(const char *procname); -extern void -_eglUnloadDrivers(void); - - extern void _eglSearchPathForEach(EGLBoolean (*callback)(const char *, size_t, void *), void *callback_data); diff --git a/src/egl/main/eglglobals.c b/src/egl/main/eglglobals.c index f39cbfe4489..8bfc0101922 100644 --- a/src/egl/main/eglglobals.c +++ b/src/egl/main/eglglobals.c @@ -54,11 +54,10 @@ struct _egl_global _eglGlobal = .Mutex = &_eglGlobalMutex, .DisplayList = NULL, .DeviceList = &_eglSoftwareDevice, - .NumAtExitCalls = 3, + .NumAtExitCalls = 2, .AtExitCalls = { /* default AtExitCalls, called in reverse order */ _eglFiniDevice, /* always called last */ - _eglUnloadDrivers, _eglFiniDisplay, }, -- 2.30.2