diff options
author | Robert Bragg <robert@linux.intel.com> | 2012-09-12 22:39:46 +0100 |
---|---|---|
committer | Robert Bragg <robert@linux.intel.com> | 2013-01-22 17:47:59 +0000 |
commit | ae713a32d0cb01e73ec2d852cfacf13f844e2619 (patch) | |
tree | c29233a334c55f47a834a2d8ca36d8f5d6ba3fc7 /cogl/cogl-renderer.c | |
parent | 4efcd4e6a6d54360a4fb96d7adca70e4440d1232 (diff) | |
download | cogl-ae713a32d0cb01e73ec2d852cfacf13f844e2619.tar.gz |
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)
Diffstat (limited to 'cogl/cogl-renderer.c')
-rw-r--r-- | cogl/cogl-renderer.c | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/cogl/cogl-renderer.c b/cogl/cogl-renderer.c index 55e520f1..30eb4ad7 100644 --- a/cogl/cogl-renderer.c +++ b/cogl/cogl-renderer.c @@ -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; |