glamor: Don't map the vbo to system memory.
Access mapped vbo address is too slow. And by use system memory directly, rgb10text/aa10text increases from 980K/1160K to 117K/140K. Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
This commit is contained in:
parent
c303949aab
commit
8890b38857
|
@ -399,6 +399,8 @@ glamor_close_screen(int idx, ScreenPtr screen)
|
||||||
ps->CreatePicture = glamor_priv->saved_create_picture;
|
ps->CreatePicture = glamor_priv->saved_create_picture;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (glamor_priv->vb)
|
||||||
|
free(glamor_priv->vb);
|
||||||
free(glamor_priv);
|
free(glamor_priv);
|
||||||
return screen->CloseScreen(idx, screen);
|
return screen->CloseScreen(idx, screen);
|
||||||
|
|
||||||
|
|
|
@ -285,10 +285,25 @@ glamor_lookup_composite_shader(ScreenPtr screen, struct shader_key *key)
|
||||||
|
|
||||||
return shader;
|
return shader;
|
||||||
}
|
}
|
||||||
|
#define GLAMOR_COMPOSITE_VBO_SIZE 8192
|
||||||
|
|
||||||
|
static void
|
||||||
|
glamor_reset_composite_vbo(ScreenPtr screen)
|
||||||
|
{
|
||||||
|
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
|
||||||
|
glamor_priv->vbo_offset = 0;
|
||||||
|
glamor_priv->vbo_size = GLAMOR_COMPOSITE_VBO_SIZE;
|
||||||
|
glamor_priv->render_nr_verts = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
glamor_init_composite_shaders(ScreenPtr screen)
|
glamor_init_composite_shaders(ScreenPtr screen)
|
||||||
{
|
{
|
||||||
|
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
|
||||||
|
glamor_priv->vb = malloc(GLAMOR_COMPOSITE_VBO_SIZE);
|
||||||
|
assert(glamor_priv->vb != NULL);
|
||||||
|
glamor_reset_composite_vbo(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Bool
|
static Bool
|
||||||
|
@ -599,13 +614,11 @@ glamor_flush_composite_rects(ScreenPtr screen)
|
||||||
|
|
||||||
if (!glamor_priv->render_nr_verts)
|
if (!glamor_priv->render_nr_verts)
|
||||||
return;
|
return;
|
||||||
|
glBufferDataARB(GL_ARRAY_BUFFER_ARB, glamor_priv->vbo_offset, glamor_priv->vb,
|
||||||
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
|
GL_STREAM_DRAW_ARB);
|
||||||
glamor_priv->vb = NULL;
|
|
||||||
|
|
||||||
glDrawArrays(GL_QUADS, 0, glamor_priv->render_nr_verts);
|
glDrawArrays(GL_QUADS, 0, glamor_priv->render_nr_verts);
|
||||||
glamor_priv->render_nr_verts = 0;
|
glamor_reset_composite_vbo(screen);
|
||||||
glamor_priv->vbo_size = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -622,16 +635,10 @@ glamor_emit_composite_rect(ScreenPtr screen,
|
||||||
glamor_flush_composite_rects(screen);
|
glamor_flush_composite_rects(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (glamor_priv->vbo_size == 0) {
|
if (glamor_priv->vbo_offset == 0) {
|
||||||
if (glamor_priv->vbo == 0)
|
if (glamor_priv->vbo == 0)
|
||||||
glGenBuffersARB(1, &glamor_priv->vbo);
|
glGenBuffersARB(1, &glamor_priv->vbo);
|
||||||
glBindBufferARB(GL_ARRAY_BUFFER_ARB, glamor_priv->vbo);
|
|
||||||
|
|
||||||
glamor_priv->vbo_size = 4096;
|
|
||||||
glBufferDataARB(GL_ARRAY_BUFFER_ARB, glamor_priv->vbo_size, NULL,
|
|
||||||
GL_STREAM_DRAW_ARB);
|
|
||||||
glamor_priv->vbo_offset = 0;
|
|
||||||
glamor_priv->vb = glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
|
|
||||||
glamor_setup_composite_vbo(screen);
|
glamor_setup_composite_vbo(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue