glamor: Avoid using GL_QUADS on VC4.

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 <eric@anholt.net>
Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Eric Anholt 2015-06-19 18:40:47 -07:00
parent f47e3f5395
commit 0e3f1252da
3 changed files with 11 additions and 1 deletions

View File

@ -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);

View File

@ -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

View File

@ -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);