Move all EGL functions to egl_common.c file

This commit is contained in:
twinaphex 2020-01-04 19:22:02 +01:00
parent 063986a4b3
commit d5cdfbb7ba
4 changed files with 75 additions and 77 deletions

View File

@ -30,7 +30,6 @@
#include "../../verbosity.h"
#include "../../frontend/frontend_driver.h"
/* Normal DirectX 11 backend */
const EGLint backendD3D11[] =
{
@ -87,21 +86,23 @@ const char* backendNamesList[] = {
/* Try initializing EGL with the backend specified in display_attr. */
static bool angle_try_initialize(egl_ctx_data_t* egl,
void* display_data, const EGLint* display_attr,
EGLint* major, EGLint* minor) {
EGLint* major, EGLint* minor)
{
EGLDisplay dpy = EGL_NO_DISPLAY;
PFNEGLGETPLATFORMDISPLAYEXTPROC ptr_eglGetPlatformDisplayEXT =
(PFNEGLGETPLATFORMDISPLAYEXTPROC)eglGetProcAddress("eglGetPlatformDisplayEXT");
(PFNEGLGETPLATFORMDISPLAYEXTPROC)egl_get_proc_address("eglGetPlatformDisplayEXT");
if (ptr_eglGetPlatformDisplayEXT == NULL)
if (!ptr_eglGetPlatformDisplayEXT)
return false;
dpy = ptr_eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, display_data, display_attr);
if (dpy == EGL_NO_DISPLAY) return false;
if (dpy == EGL_NO_DISPLAY)
return false;
if (!eglInitialize(dpy, major, minor)) {
eglTerminate(egl->dpy);
if (!egl_initialize(dpy, major, minor))
{
egl_terminate(egl->dpy);
return false;
}
@ -117,60 +118,23 @@ bool angle_init_context(egl_ctx_data_t *egl,
EGLint *count, const EGLint *attrib_ptr,
egl_accept_config_cb_t cb)
{
EGLint i; int j;
EGLConfig *configs = NULL;
EGLint matched = 0;
int config_index = -1;
int j;
bool success = false;
for (j = 0; backendNamesList[j] != NULL; j++) {
for (j = 0; backendNamesList[j] != NULL; j++)
{
RARCH_LOG("[ANGLE] Trying %s...\n", backendNamesList[j]);
if (angle_try_initialize(egl, display_data, backendList[j], major, minor)) {
if (angle_try_initialize(egl, display_data, backendList[j], major, minor))
{
success = true;
break;
}
}
if (!success) return false;
if (!success)
return false;
RARCH_LOG("[EGL]: EGL version: %d.%d\n", *major, *minor);
if (!eglGetConfigs(egl->dpy, NULL, 0, count) || *count < 1)
{
RARCH_ERR("[EGL]: No configs to choose from.\n");
return false;
}
configs = (EGLConfig*)malloc(*count * sizeof(*configs));
if (!configs)
return false;
if (!eglChooseConfig(egl->dpy, attrib_ptr,
configs, *count, &matched) || !matched)
{
RARCH_ERR("[EGL]: No EGL configs with appropriate attributes.\n");
return false;
}
for (i = 0; i < *count; i++)
{
if (!cb || cb(display_data, egl->dpy, configs[i]))
{
egl->config = configs[i];
break;
}
}
free(configs);
if (i == *count)
{
RARCH_ERR("[EGL]: No EGL config found which satifies requirements.\n");
return false;
}
egl->major = g_egl_major;
egl->minor = g_egl_minor;
return true;
return egl_init_context_common(egl, count, attrib_ptr, cb, display_data);
}

View File

@ -43,8 +43,9 @@
RETRO_BEGIN_DECLS
bool angle_init_context(egl_ctx_data_t* egl, void* display_data, EGLint* major, EGLint* minor,
EGLint* count, const EGLint* attrib_ptr, egl_accept_config_cb_t cb);
bool angle_init_context(egl_ctx_data_t* egl,
void* display_data, EGLint* major, EGLint* minor,
EGLint* count, const EGLint* attrib_ptr, egl_accept_config_cb_t cb);
RETRO_END_DECLS

View File

@ -109,6 +109,11 @@ gfx_ctx_proc_t egl_get_proc_address(const char *symbol)
return eglGetProcAddress(symbol);
}
void egl_terminate(EGLDisplay dpy)
{
eglTerminate(dpy);
}
void egl_destroy(egl_ctx_data_t *egl)
{
if (egl->dpy)
@ -133,7 +138,7 @@ void egl_destroy(egl_ctx_data_t *egl)
if (egl->surf != EGL_NO_SURFACE)
eglDestroySurface(egl->dpy, egl->surf);
eglTerminate(egl->dpy);
egl_terminate(egl->dpy);
}
/* Be as careful as possible in deinit.
@ -329,31 +334,17 @@ bool egl_default_accept_config_cb(void *display_data, EGLDisplay dpy, EGLConfig
return true;
}
bool egl_init_context(egl_ctx_data_t *egl,
EGLenum platform,
void *display_data,
EGLint *major, EGLint *minor,
EGLint *count, const EGLint *attrib_ptr,
egl_accept_config_cb_t cb)
bool egl_init_context_common(
egl_ctx_data_t *egl, EGLint *count,
const EGLint *attrib_ptr,
egl_accept_config_cb_t cb,
void *display_data)
{
EGLint i;
EGLConfig *configs = NULL;
EGLint matched = 0;
int config_index = -1;
EGLDisplay dpy = get_egl_display(platform, display_data);
if (dpy == EGL_NO_DISPLAY)
{
RARCH_ERR("[EGL]: Couldn't get EGL display.\n");
EGLConfig *configs = NULL;
if (!egl)
return false;
}
egl->dpy = dpy;
if (!eglInitialize(egl->dpy, major, minor))
return false;
RARCH_LOG("[EGL]: EGL version: %d.%d\n", *major, *minor);
if (!eglGetConfigs(egl->dpy, NULL, 0, count) || *count < 1)
{
@ -395,6 +386,38 @@ bool egl_init_context(egl_ctx_data_t *egl,
return true;
}
bool egl_initialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
{
return eglInitialize(dpy, major, minor);
}
bool egl_init_context(egl_ctx_data_t *egl,
EGLenum platform,
void *display_data,
EGLint *major, EGLint *minor,
EGLint *count, const EGLint *attrib_ptr,
egl_accept_config_cb_t cb)
{
int config_index = -1;
EGLDisplay dpy = get_egl_display(platform, display_data);
if (dpy == EGL_NO_DISPLAY)
{
RARCH_ERR("[EGL]: Couldn't get EGL display.\n");
return false;
}
egl->dpy = dpy;
if (!egl_initialize(egl->dpy, major, minor))
return false;
RARCH_LOG("[EGL]: EGL version: %d.%d\n", *major, *minor);
return egl_init_context_common(egl, count, attrib_ptr, cb,
display_data);
}
bool egl_bind_api(EGLenum egl_api)
{
return eglBindAPI(egl_api);

View File

@ -78,6 +78,8 @@ void egl_report_error(void);
void egl_destroy(egl_ctx_data_t *egl);
void egl_terminate(EGLDisplay dpy);
gfx_ctx_proc_t egl_get_proc_address(const char *symbol);
void egl_bind_hw_render(egl_ctx_data_t *egl, bool enable);
@ -91,6 +93,14 @@ void egl_get_video_size(egl_ctx_data_t *egl, unsigned *width, unsigned *height);
typedef bool (*egl_accept_config_cb_t)(void *display_data, EGLDisplay dpy, EGLConfig config);
bool egl_default_accept_config_cb(void *display_data, EGLDisplay dpy, EGLConfig config);
bool egl_initialize(EGLDisplay dpy, EGLint *major, EGLint *minor);
bool egl_init_context_common(
egl_ctx_data_t *egl, EGLint *count,
const EGLint *attrib_ptr,
egl_accept_config_cb_t cb,
void *display_data);
bool egl_init_context(egl_ctx_data_t *egl,
EGLenum platform,
void *display_data,