mirror of
https://github.com/brl/mutter.git
synced 2025-06-14 01:09:30 +00:00
Adds a NOP driver
This adds a new "nop" driver that does nothing. This can be selected at runtime either with the COGL_DRIVER=nop environment variable or by passing COGL_DRIVER_NOP to cogl_renderer_set_driver() Adding the nop driver gives us a way to test workloads without any driver and hardware overheads which can help us understand how Cogl's state tracking performs in isolation. Having a nop driver can also serve as an shell/outline for creating other drivers later. Reviewed-by: Neil Roberts <neil@linux.intel.com> (cherry picked from commit 90587418233b6438290741d80aedf193ae660cad)
This commit is contained in:
@ -88,6 +88,8 @@ extern const CoglTextureDriver _cogl_texture_driver_gles;
|
||||
extern const CoglDriverVtable _cogl_driver_gles;
|
||||
#endif
|
||||
|
||||
extern const CoglDriverVtable _cogl_driver_nop;
|
||||
|
||||
static CoglWinsysVtableGetter _cogl_winsys_vtable_getters[] =
|
||||
{
|
||||
#ifdef COGL_HAS_GLX_SUPPORT
|
||||
@ -308,6 +310,15 @@ _cogl_renderer_choose_driver (CoglRenderer *renderer,
|
||||
}
|
||||
#endif
|
||||
|
||||
if (renderer->driver_override == COGL_DRIVER_NOP ||
|
||||
(renderer->driver_override == COGL_DRIVER_ANY &&
|
||||
(driver_name == NULL || !g_ascii_strcasecmp (driver_name, "nop"))))
|
||||
{
|
||||
renderer->driver = COGL_DRIVER_NOP;
|
||||
libgl_name = NULL;
|
||||
goto found;
|
||||
}
|
||||
|
||||
_cogl_set_error (error,
|
||||
COGL_DRIVER_ERROR,
|
||||
COGL_DRIVER_ERROR_NO_SUITABLE_DRIVER_FOUND,
|
||||
@ -328,16 +339,21 @@ found:
|
||||
|
||||
#ifndef HAVE_DIRECTLY_LINKED_GL_LIBRARY
|
||||
|
||||
renderer->libgl_module = g_module_open (libgl_name,
|
||||
G_MODULE_BIND_LAZY);
|
||||
|
||||
if (renderer->libgl_module == NULL)
|
||||
if (renderer->driver == COGL_DRIVER_GL ||
|
||||
renderer->driver == COGL_DRIVER_GLES1 ||
|
||||
renderer->driver == COGL_DRIVER_GLES2)
|
||||
{
|
||||
_cogl_set_error (error, COGL_DRIVER_ERROR,
|
||||
COGL_DRIVER_ERROR_FAILED_TO_LOAD_LIBRARY,
|
||||
"Failed to dynamically open the GL library \"%s\"",
|
||||
libgl_name);
|
||||
return FALSE;
|
||||
renderer->libgl_module = g_module_open (libgl_name,
|
||||
G_MODULE_BIND_LAZY);
|
||||
|
||||
if (renderer->libgl_module == NULL)
|
||||
{
|
||||
_cogl_set_error (error, COGL_DRIVER_ERROR,
|
||||
COGL_DRIVER_ERROR_FAILED_TO_LOAD_LIBRARY,
|
||||
"Failed to dynamically open the GL library \"%s\"",
|
||||
libgl_name);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* HAVE_DIRECTLY_LINKED_GL_LIBRARY */
|
||||
@ -359,8 +375,10 @@ found:
|
||||
break;
|
||||
#endif
|
||||
|
||||
case COGL_DRIVER_NOP:
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
renderer->driver_vtable = &_cogl_driver_nop;
|
||||
renderer->texture_driver = NULL;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
Reference in New Issue
Block a user