cogl: Rename Driver to DriverID

As we will be having a CoglDriver abstract class in the next commit.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4132>
This commit is contained in:
Bilal Elmoussaoui 2024-11-13 15:10:31 +01:00
parent 1131c3b634
commit 0103288739
18 changed files with 117 additions and 84 deletions

View File

@ -160,7 +160,7 @@ clutter_backend_real_resolution_changed (ClutterBackend *backend)
static gboolean
clutter_backend_do_real_create_context (ClutterBackend *backend,
CoglDriver driver_id,
CoglDriverId driver_id,
GError **error)
{
ClutterBackendClass *klass;
@ -209,11 +209,11 @@ error:
static const struct {
const char *driver_name;
const char *driver_desc;
CoglDriver driver_id;
CoglDriverId driver_id;
} all_known_drivers[] = {
{ "gl3", "OpenGL 3.1 core profile", COGL_DRIVER_GL3 },
{ "gles2", "OpenGL ES 2.0", COGL_DRIVER_GLES2 },
{ "any", "Default Cogl driver", COGL_DRIVER_ANY },
{ "gl3", "OpenGL 3.1 core profile", COGL_DRIVER_ID_GL3 },
{ "gles2", "OpenGL ES 2.0", COGL_DRIVER_ID_GLES2 },
{ "any", "Default Cogl driver", COGL_DRIVER_ID_ANY },
};
static gboolean

View File

@ -69,7 +69,7 @@ struct _CoglContext
CoglDisplay *display;
CoglDriver driver;
CoglDriverId driver_id;
/* vtables for the driver functions */
const CoglDriverVtable *driver_vtable;

View File

@ -220,7 +220,7 @@ cogl_context_new (CoglDisplay *display,
/* This is duplicated data, but it's much more convenient to have
the driver attached to the context and the value is accessed a
lot throughout Cogl */
context->driver = display->renderer->driver;
context->driver_id = display->renderer->driver_id;
/* Again this is duplicated data, but it convenient to be able
* access these from the context. */

33
cogl/cogl/cogl-driver.c Normal file
View File

@ -0,0 +1,33 @@
/*
* Cogl
*
* A Low Level GPU Graphics and Utilities API
*
* Copyright (C) 2024 Red Hat.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*/
#include "config.h"
#include "cogl/cogl-driver-private.h"

View File

@ -44,7 +44,7 @@ _cogl_feature_check (CoglRenderer *renderer,
const CoglFeatureData *data,
int gl_major,
int gl_minor,
CoglDriver driver,
CoglDriverId driver,
char * const *extensions,
void *function_table)
@ -55,22 +55,22 @@ _cogl_feature_check (CoglRenderer *renderer,
switch (driver)
{
case COGL_DRIVER_GLES2:
case COGL_DRIVER_ID_GLES2:
gles_availability = COGL_EXT_IN_GLES2;
if (COGL_CHECK_GL_VERSION (gl_major, gl_minor, 3, 0))
gles_availability |= COGL_EXT_IN_GLES3;
break;
case COGL_DRIVER_ANY:
case COGL_DRIVER_ID_ANY:
g_assert_not_reached ();
case COGL_DRIVER_NOP:
case COGL_DRIVER_GL3:
case COGL_DRIVER_ID_NOP:
case COGL_DRIVER_ID_GL3:
break;
}
/* First check whether the functions should be directly provided by
GL */
if ((driver == COGL_DRIVER_GL3 &&
if ((driver == COGL_DRIVER_ID_GL3 &&
COGL_CHECK_GL_VERSION (gl_major, gl_minor,
data->min_gl_major, data->min_gl_minor)) ||
(data->gles_availability & gles_availability))
@ -213,7 +213,7 @@ _cogl_feature_check_ext_functions (CoglContext *context,
for (i = 0; i < G_N_ELEMENTS (cogl_feature_ext_functions_data); i++)
_cogl_feature_check (context->display->renderer,
"GL", cogl_feature_ext_functions_data + i,
gl_major, gl_minor, context->driver,
gl_major, gl_minor, context->driver_id,
gl_extensions,
context);
}

View File

@ -92,7 +92,7 @@ _cogl_feature_check (CoglRenderer *renderer,
const CoglFeatureData *data,
int gl_major,
int gl_minor,
CoglDriver driver,
CoglDriverId driver,
char * const *extensions,
void *function_table);

View File

@ -47,7 +47,7 @@ struct _CoglRenderer
CoglDisplay *display;
gboolean connected;
CoglDriver driver_override;
CoglDriverId driver_override;
const CoglDriverVtable *driver_vtable;
CoglTextureDriver *texture_driver;
const CoglWinsysVtable *winsys_vtable;
@ -60,7 +60,7 @@ struct _CoglRenderer
Display *foreign_xdpy;
#endif
CoglDriver driver;
CoglDriverId driver_id;
unsigned long private_features
[COGL_FLAGS_N_LONGS_FOR_SIZE (COGL_N_PRIVATE_FEATURES)];
GModule *libgl_module;

View File

@ -75,7 +75,7 @@ extern const CoglDriverVtable _cogl_driver_nop;
typedef struct _CoglDriverDescription
{
CoglDriver id;
CoglDriverId id;
const char *name;
/* It would be nice to make this a pointer and then use a compound
* literal from C99 to initialise it but we probably can't get away
@ -91,7 +91,7 @@ static CoglDriverDescription _cogl_drivers[] =
{
#ifdef HAVE_GL
{
COGL_DRIVER_GL3,
COGL_DRIVER_ID_GL3,
"gl3",
{ COGL_PRIVATE_FEATURE_ANY_GL,
-1 },
@ -101,7 +101,7 @@ static CoglDriverDescription _cogl_drivers[] =
#endif
#ifdef HAVE_GLES2
{
COGL_DRIVER_GLES2,
COGL_DRIVER_ID_GLES2,
"gles2",
{ COGL_PRIVATE_FEATURE_ANY_GL,
-1 },
@ -110,7 +110,7 @@ static CoglDriverDescription _cogl_drivers[] =
},
#endif
{
COGL_DRIVER_NOP,
COGL_DRIVER_ID_NOP,
"nop",
{ -1 },
&_cogl_driver_nop,
@ -222,13 +222,13 @@ typedef gboolean (*CoglDriverCallback) (CoglDriverDescription *description,
void *user_data);
static void
foreach_driver_description (CoglDriver driver_override,
CoglDriverCallback callback,
void *user_data)
foreach_driver_description (CoglDriverId driver_override,
CoglDriverCallback callback,
void *user_data)
{
int i;
if (driver_override != COGL_DRIVER_ANY)
if (driver_override != COGL_DRIVER_ID_ANY)
{
for (i = 0; i < G_N_ELEMENTS (_cogl_drivers); i++)
{
@ -250,7 +250,7 @@ foreach_driver_description (CoglDriver driver_override,
}
}
static CoglDriver
static CoglDriverId
driver_name_to_id (const char *name)
{
int i;
@ -261,21 +261,21 @@ driver_name_to_id (const char *name)
return _cogl_drivers[i].id;
}
return COGL_DRIVER_ANY;
return COGL_DRIVER_ID_ANY;
}
static const char *
driver_id_to_name (CoglDriver id)
driver_id_to_name (CoglDriverId id)
{
switch (id)
{
case COGL_DRIVER_GL3:
case COGL_DRIVER_ID_GL3:
return "gl3";
case COGL_DRIVER_GLES2:
case COGL_DRIVER_ID_GLES2:
return "gles2";
case COGL_DRIVER_NOP:
case COGL_DRIVER_ID_NOP:
return "nop";
case COGL_DRIVER_ANY:
case COGL_DRIVER_ID_ANY:
g_warn_if_reached ();
return "any";
}
@ -306,7 +306,7 @@ _cogl_renderer_choose_driver (CoglRenderer *renderer,
GError **error)
{
const char *driver_name = g_getenv ("COGL_DRIVER");
CoglDriver driver_override = COGL_DRIVER_ANY;
CoglDriverId driver_override = COGL_DRIVER_ID_ANY;
const char *invalid_override = NULL;
const char *libgl_name;
SatisfyConstraintsState state;
@ -316,13 +316,13 @@ _cogl_renderer_choose_driver (CoglRenderer *renderer,
if (driver_name)
{
driver_override = driver_name_to_id (driver_name);
if (driver_override == COGL_DRIVER_ANY)
if (driver_override == COGL_DRIVER_ID_ANY)
invalid_override = driver_name;
}
if (renderer->driver_override != COGL_DRIVER_ANY)
if (renderer->driver_override != COGL_DRIVER_ID_ANY)
{
if (driver_override != COGL_DRIVER_ANY &&
if (driver_override != COGL_DRIVER_ID_ANY &&
renderer->driver_override != driver_override)
{
g_set_error (error, COGL_RENDERER_ERROR,
@ -335,7 +335,7 @@ _cogl_renderer_choose_driver (CoglRenderer *renderer,
driver_override = renderer->driver_override;
}
if (driver_override != COGL_DRIVER_ANY)
if (driver_override != COGL_DRIVER_ID_ANY)
{
gboolean found = FALSE;
@ -375,23 +375,23 @@ _cogl_renderer_choose_driver (CoglRenderer *renderer,
}
desc = state.driver_description;
renderer->driver = desc->id;
renderer->driver_id = desc->id;
renderer->driver_vtable = desc->vtable;
switch (renderer->driver)
switch (renderer->driver_id)
{
#ifdef HAVE_GL
case COGL_DRIVER_GL3:
case COGL_DRIVER_ID_GL3:
renderer->texture_driver = g_object_new (COGL_TYPE_TEXTURE_DRIVER_GL3, NULL);
break;
#endif
#ifdef HAVE_GLES2
case COGL_DRIVER_GLES2:
case COGL_DRIVER_ID_GLES2:
renderer->texture_driver = g_object_new (COGL_TYPE_TEXTURE_DRIVER_GLES2, NULL);
break;
#endif
case COGL_DRIVER_NOP:
case COGL_DRIVER_ID_NOP:
default:
renderer->texture_driver = NULL;
break;
@ -602,18 +602,18 @@ cogl_renderer_get_proc_address (CoglRenderer *renderer,
void
cogl_renderer_set_driver (CoglRenderer *renderer,
CoglDriver driver)
CoglDriverId driver)
{
g_return_if_fail (!renderer->connected);
renderer->driver_override = driver;
}
CoglDriver
cogl_renderer_get_driver (CoglRenderer *renderer)
CoglDriverId
cogl_renderer_get_driver_id (CoglRenderer *renderer)
{
g_return_val_if_fail (renderer->connected, 0);
return renderer->driver;
return renderer->driver_id;
}
GArray *

View File

@ -179,22 +179,22 @@ COGL_EXPORT gboolean
cogl_renderer_connect (CoglRenderer *renderer, GError **error);
/**
* CoglDriver:
* @COGL_DRIVER_ANY: Implies no preference for which driver is used
* @COGL_DRIVER_NOP: A No-Op driver.
* @COGL_DRIVER_GL3: An OpenGL driver using the core GL 3.1 profile
* @COGL_DRIVER_GLES2: An OpenGL ES 2.0 driver.
* CoglDriverId:
* @COGL_DRIVER_ID_ANY: Implies no preference for which driver is used
* @COGL_DRIVER_ID_NOP: A No-Op driver.
* @COGL_DRIVER_ID_GL3: An OpenGL driver using the core GL 3.1 profile
* @COGL_DRIVER_ID_GLES2: An OpenGL ES 2.0 driver.
*
* Identifiers for underlying hardware drivers that may be used by
* Cogl for rendering.
*/
typedef enum
{
COGL_DRIVER_ANY,
COGL_DRIVER_NOP,
COGL_DRIVER_GL3,
COGL_DRIVER_GLES2,
} CoglDriver;
COGL_DRIVER_ID_ANY,
COGL_DRIVER_ID_NOP,
COGL_DRIVER_ID_GL3,
COGL_DRIVER_ID_GLES2,
} CoglDriverId;
/**
* cogl_renderer_set_driver:
@ -212,18 +212,18 @@ typedef enum
*/
COGL_EXPORT void
cogl_renderer_set_driver (CoglRenderer *renderer,
CoglDriver driver);
CoglDriverId driver);
/**
* cogl_renderer_get_driver:
* cogl_renderer_get_driver_id:
* @renderer: A connected #CoglRenderer
*
* Queries what underlying driver is being used by Cogl.
*
* This may only be called on a connected #CoglRenderer.
*/
COGL_EXPORT CoglDriver
cogl_renderer_get_driver (CoglRenderer *renderer);
COGL_EXPORT CoglDriverId
cogl_renderer_get_driver_id (CoglRenderer *renderer);
/**

View File

@ -431,7 +431,7 @@ cogl_gl_framebuffer_read_pixels_into_bitmap (CoglFramebufferDriver *driver,
(source & COGL_READ_PIXELS_NO_FLIP) == 0 &&
!cogl_framebuffer_is_y_flipped (framebuffer))
{
if (ctx->driver == COGL_DRIVER_GLES2)
if (ctx->driver_id == COGL_DRIVER_ID_GLES2)
gl_pack_enum = GL_PACK_REVERSE_ROW_ORDER_ANGLE;
else
gl_pack_enum = GL_PACK_INVERT_MESA;

View File

@ -287,7 +287,7 @@ flush_depth_state (CoglContext *ctx,
if ((ctx->depth_range_near_cache != depth_state->range_near ||
ctx->depth_range_far_cache != depth_state->range_far))
{
if (ctx->driver == COGL_DRIVER_GLES2)
if (ctx->driver_id == COGL_DRIVER_ID_GLES2)
GE (ctx, glDepthRangef (depth_state->range_near,
depth_state->range_far));
else
@ -418,7 +418,7 @@ get_max_activateable_texture_units (CoglContext *ctx)
int i;
#ifdef HAVE_GL
if (ctx->driver != COGL_DRIVER_GLES2)
if (ctx->driver_id != COGL_DRIVER_ID_GLES2)
{
/* GL_MAX_TEXTURE_COORDS defines the number of texture coordinates
* that can be uploaded (but doesn't necessarily relate to how many
@ -431,7 +431,7 @@ get_max_activateable_texture_units (CoglContext *ctx)
#endif /* HAVE_GL */
#ifdef HAVE_GLES2
if (ctx->driver == COGL_DRIVER_GLES2)
if (ctx->driver_id == COGL_DRIVER_ID_GLES2)
{
GE (ctx, glGetIntegerv (GL_MAX_VERTEX_ATTRIBS, values + n_values));
/* Two of the vertex attribs need to be used for the position

View File

@ -332,7 +332,7 @@ _cogl_context_get_gl_extensions (CoglContext *context)
/* In GL 3, querying GL_EXTENSIONS is deprecated so we have to build
* the array using glGetStringi instead */
#ifdef HAVE_GL
if (context->driver == COGL_DRIVER_GL3)
if (context->driver_id == COGL_DRIVER_ID_GL3)
{
int num_extensions, i;

View File

@ -128,9 +128,9 @@ _cogl_winsys_renderer_disconnect (CoglRenderer *renderer)
static void
_cogl_winsys_renderer_bind_api (CoglRenderer *renderer)
{
if (renderer->driver == COGL_DRIVER_GL3)
if (renderer->driver_id == COGL_DRIVER_ID_GL3)
eglBindAPI (EGL_OPENGL_API);
else if (renderer->driver == COGL_DRIVER_GLES2)
else if (renderer->driver_id == COGL_DRIVER_ID_GLES2)
eglBindAPI (EGL_OPENGL_ES_API);
}
@ -152,7 +152,7 @@ check_egl_extensions (CoglRenderer *renderer)
for (i = 0; i < G_N_ELEMENTS (winsys_feature_data); i++)
if (_cogl_feature_check (renderer,
"EGL", winsys_feature_data + i, 0, 0,
COGL_DRIVER_GL3, /* the driver isn't used */
COGL_DRIVER_ID_GL3, /* the driver isn't used */
split_extensions,
egl_renderer))
{
@ -226,7 +226,7 @@ cogl_display_egl_determine_attributes (CoglDisplay *display,
attributes[i++] = EGL_DONT_CARE;
attributes[i++] = EGL_RENDERABLE_TYPE;
attributes[i++] = (renderer->driver == COGL_DRIVER_GL3 ?
attributes[i++] = (renderer->driver_id == COGL_DRIVER_ID_GL3 ?
EGL_OPENGL_BIT :
EGL_OPENGL_ES2_BIT);
@ -337,7 +337,7 @@ try_create_context (CoglDisplay *display,
egl_display->egl_config = config;
}
if (display->renderer->driver == COGL_DRIVER_GL3)
if (display->renderer->driver_id == COGL_DRIVER_ID_GL3)
{
if (!(egl_renderer->private_features &
COGL_EGL_WINSYS_FEATURE_CREATE_CONTEXT))
@ -356,7 +356,7 @@ try_create_context (CoglDisplay *display,
attribs[i++] = EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR;
attribs[i++] = EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR;
}
else if (display->renderer->driver == COGL_DRIVER_GLES2)
else if (display->renderer->driver_id == COGL_DRIVER_ID_GLES2)
{
attribs[i++] = EGL_CONTEXT_CLIENT_VERSION;
attribs[i++] = 2;

View File

@ -345,7 +345,7 @@ update_base_winsys_features (CoglRenderer *renderer)
"GLX", winsys_feature_data + i,
glx_renderer->glx_major,
glx_renderer->glx_minor,
COGL_DRIVER_GL3, /* the driver isn't used */
COGL_DRIVER_ID_GL3, /* the driver isn't used */
split_extensions,
glx_renderer))
{
@ -391,7 +391,7 @@ _cogl_winsys_renderer_connect (CoglRenderer *renderer,
if (!_cogl_xlib_renderer_connect (renderer, error))
goto error;
if (renderer->driver != COGL_DRIVER_GL3)
if (renderer->driver_id != COGL_DRIVER_ID_GL3)
{
g_set_error_literal (error, COGL_WINSYS_ERROR,
COGL_WINSYS_ERROR_INIT,
@ -668,7 +668,7 @@ create_context (CoglDisplay *display, GError **error)
mtk_x11_error_trap_push (xlib_renderer->xdpy);
if (display->renderer->driver == COGL_DRIVER_GL3)
if (display->renderer->driver_id == COGL_DRIVER_ID_GL3)
glx_display->glx_context = create_gl3_context (display, config);
else
glx_display->glx_context =

View File

@ -54,22 +54,22 @@ get_x11_cogl_winsys_vtable (CoglRenderer *renderer)
return _cogl_winsys_egl_xlib_get_vtable ();
#endif
switch (renderer->driver)
switch (renderer->driver_id)
{
case COGL_DRIVER_GLES2:
case COGL_DRIVER_ID_GLES2:
#ifdef HAVE_EGL_PLATFORM_XLIB
return _cogl_winsys_egl_xlib_get_vtable ();
#else
break;
#endif
case COGL_DRIVER_GL3:
case COGL_DRIVER_ID_GL3:
#ifdef HAVE_GLX
return _cogl_winsys_glx_get_vtable ();
#else
break;
#endif
case COGL_DRIVER_ANY:
case COGL_DRIVER_NOP:
case COGL_DRIVER_ID_ANY:
case COGL_DRIVER_ID_NOP:
break;
}
g_assert_not_reached ();

View File

@ -154,9 +154,9 @@ check_gl_extensions (CoglContext *cogl_context)
cogl_display = cogl_context_get_display (cogl_context);
cogl_renderer = cogl_display_get_renderer (cogl_display);
switch (cogl_renderer_get_driver (cogl_renderer))
switch (cogl_renderer->driver_id)
{
case COGL_DRIVER_GL3:
case COGL_DRIVER_ID_GL3:
{
int num_extensions, i;
gboolean arb_sync = FALSE;

View File

@ -15,7 +15,7 @@ test_framebuffer_get_bits (void)
renderer = cogl_context_get_renderer (test_ctx);
if (cogl_renderer_get_driver (renderer) != COGL_DRIVER_GL3)
if (cogl_renderer_get_driver_id (renderer) != COGL_DRIVER_ID_GL3)
{
g_test_skip ("Test requires OpenGL");
return;

View File

@ -214,8 +214,8 @@ test_read_int_case (gconstpointer data)
}
else if (g_test_undefined () &&
g_str_equal (test_utils_get_cogl_driver_vendor (test_ctx), "AMD") &&
cogl_renderer_get_driver (cogl_context_get_renderer (test_ctx)) ==
COGL_DRIVER_GL3)
cogl_renderer_get_driver_id (cogl_context_get_renderer (test_ctx)) ==
COGL_DRIVER_ID_GL3)
{
g_test_fail_printf ("This test is not failing on AMD, but we mark it "
"to make meson happy.");