Improves text rendering from about 284k glyphs per second to 320k
glyphs per second.  There's no GL extension for probing this, because
of the philosophy of "Don't expose whether things are really in
hardware or not."

Signed-off-by: Eric Anholt <[email protected]>
---
 glamor/glamor.c       | 9 +++++++++
 glamor/glamor_priv.h  | 1 +
 glamor/glamor_utils.h | 2 +-
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/glamor/glamor.c b/glamor/glamor.c
index fbb1d85..525249c 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -531,6 +531,15 @@ glamor_init(ScreenPtr screen, unsigned int flags)
         epoxy_gl_version() >= 30 ||
         epoxy_has_gl_extension("GL_NV_pack_subimage");
 
+    glamor_priv->use_quads = (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP);
+    /* Driver-specific hack: Avoid using GL_QUADS on VC4, where
+     * they'll be emulated more expensively than we can with our
+     * cached IB.
+     */
+    if (strstr((char *)glGetString(GL_VENDOR), "Broadcom") &&
+        strstr((char *)glGetString(GL_RENDERER), "VC4"))
+        glamor_priv->use_quads = FALSE;
+
     glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, &glamor_priv->max_fbo_size);
     glGetIntegerv(GL_MAX_TEXTURE_SIZE, &glamor_priv->max_fbo_size);
     glGetIntegerv(GL_MAX_VIEWPORT_DIMS, max_viewport_size);
diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
index 681895f..3e666b4 100644
--- a/glamor/glamor_priv.h
+++ b/glamor/glamor_priv.h
@@ -203,6 +203,7 @@ typedef struct glamor_screen_private {
     Bool has_pack_subimage;
     Bool has_unpack_subimage;
     Bool has_rw_pbo;
+    Bool use_quads;
     int max_fbo_size;
 
     struct xorg_list
diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
index 73cda9c..66c3492 100644
--- a/glamor/glamor_utils.h
+++ b/glamor/glamor_utils.h
@@ -1400,7 +1400,7 @@ glamor_make_current(glamor_screen_private *glamor_priv)
 static inline void
 glamor_glDrawArrays_GL_QUADS(glamor_screen_private *glamor_priv, unsigned 
count)
 {
-    if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) {
+    if (glamor_priv->use_quads) {
         glDrawArrays(GL_QUADS, 0, count * 4);
     } else {
         glamor_gldrawarrays_quads_using_indices(glamor_priv, count);
-- 
2.1.4

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to