summaryrefslogtreecommitdiff
path: root/cogl/cogl-renderer.c
diff options
context:
space:
mode:
authorRobert Bragg <robert@linux.intel.com>2012-09-12 22:39:46 +0100
committerRobert Bragg <robert@linux.intel.com>2013-01-22 17:47:59 +0000
commitae713a32d0cb01e73ec2d852cfacf13f844e2619 (patch)
treec29233a334c55f47a834a2d8ca36d8f5d6ba3fc7 /cogl/cogl-renderer.c
parent4efcd4e6a6d54360a4fb96d7adca70e4440d1232 (diff)
downloadcogl-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.c38
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;