[cairo] [PATCH] cairo-gl: Make VBO size run-time settable
Bryce W. Harrington
b.harrington at samsung.com
Wed Aug 28 23:34:11 PDT 2013
Signed-off-by: Bryce Harrington <b.harrington at samsung.com>
---
src/cairo-gl-composite.c | 2 +-
src/cairo-gl-device.c | 2 +-
src/cairo-gl-info.c | 22 ++++++++++++++++++++++
src/cairo-gl-private.h | 8 ++++++--
4 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/src/cairo-gl-composite.c b/src/cairo-gl-composite.c
index 30b7931..65b0f26 100644
--- a/src/cairo-gl-composite.c
+++ b/src/cairo-gl-composite.c
@@ -875,7 +875,7 @@ _cairo_gl_composite_prepare_buffer (cairo_gl_context_t *ctx,
ctx->primitive_type = primitive_type;
}
- if (ctx->vb_offset + n_vertices * ctx->vertex_size > CAIRO_GL_VBO_SIZE)
+ if (ctx->vb_offset + n_vertices * ctx->vertex_size > _cairo_gl_get_vbo_size())
_cairo_gl_composite_flush (ctx);
}
diff --git a/src/cairo-gl-device.c b/src/cairo-gl-device.c
index 054f145..dc2b6d6 100644
--- a/src/cairo-gl-device.c
+++ b/src/cairo-gl-device.c
@@ -297,7 +297,7 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
if (unlikely (status))
return status;
- ctx->vb = malloc (CAIRO_GL_VBO_SIZE);
+ ctx->vb = malloc (_cairo_gl_get_vbo_size());
if (unlikely (ctx->vb == NULL)) {
_cairo_cache_fini (&ctx->gradients);
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
diff --git a/src/cairo-gl-info.c b/src/cairo-gl-info.c
index 12a618d..c47033e 100644
--- a/src/cairo-gl-info.c
+++ b/src/cairo-gl-info.c
@@ -29,6 +29,8 @@
* Alexandros Frantzis <alexandros.frantzis at linaro.org>
*/
+#include <errno.h>
+
#include "cairoint.h"
#include "cairo-gl-private.h"
@@ -71,6 +73,26 @@ _cairo_gl_get_flavor (void)
return flavor;
}
+long
+_cairo_gl_get_vbo_size (void)
+{
+ static long vbo_size = -1;
+
+ if (vbo_size < 0) {
+ const char *env = getenv ("CAIRO_GL_VBO_SIZE");
+ if (env == NULL) {
+ vbo_size = CAIRO_GL_VBO_SIZE_DEFAULT;
+ } else {
+ errno = 0;
+ vbo_size = strtol (env, NULL, 10);
+ assert (errno == 0);
+ assert (vbo_size > 0);
+ }
+ }
+
+ return vbo_size;
+}
+
cairo_bool_t
_cairo_gl_has_extension (const char *ext)
{
diff --git a/src/cairo-gl-private.h b/src/cairo-gl-private.h
index 8379abc..79b67a5 100644
--- a/src/cairo-gl-private.h
+++ b/src/cairo-gl-private.h
@@ -93,8 +93,9 @@
/* VBO size that we allocate, smaller size means we gotta flush more often,
* but larger means hogging more memory and can cause trouble for drivers
- * (especially on embedded devices). */
-#define CAIRO_GL_VBO_SIZE (16*1024)
+ * (especially on embedded devices). Use the CAIRO_GL_VBO_SIZE environment
+ * variable to set this to a different size. */
+#define CAIRO_GL_VBO_SIZE_DEFAULT (16*1024)
typedef struct _cairo_gl_surface cairo_gl_surface_t;
@@ -702,6 +703,9 @@ _cairo_gl_get_version (void);
cairo_private cairo_gl_flavor_t
_cairo_gl_get_flavor (void);
+cairo_private long
+_cairo_gl_get_vbo_size (void);
+
cairo_private cairo_bool_t
_cairo_gl_has_extension (const char *ext);
--
1.7.9.5
More information about the cairo
mailing list