glamor: Don't write back read only pixmap to fbo.
For those pixmap which has valid fbo and opened as GLAMOR_ACCESS_RO mode, we don't need to upload the texture back when calling the glamor_finish_access(). This will get about 10% performance gain.
This commit is contained in:
parent
1495ba9e64
commit
1edf0cc6ab
|
@ -332,6 +332,7 @@ glamor_prepare_access(DrawablePtr drawable, glamor_access_t access)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
pixmap_priv->access_mode = access;
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, pixmap_priv->fb);
|
||||
glPixelStorei(GL_PACK_ALIGNMENT, 1);
|
||||
glPixelStorei(GL_PACK_ROW_LENGTH, row_length);
|
||||
|
@ -468,6 +469,9 @@ glamor_finish_access(DrawablePtr drawable)
|
|||
if (pixmap->devPrivate.ptr == NULL)
|
||||
return;
|
||||
|
||||
if (pixmap_priv->access_mode == GLAMOR_ACCESS_RO)
|
||||
goto read_only;
|
||||
|
||||
stride = pixmap->devKind;
|
||||
row_length = (stride * 8) / pixmap->drawable.bitsPerPixel;
|
||||
switch (drawable->depth) {
|
||||
|
@ -526,6 +530,7 @@ glamor_finish_access(DrawablePtr drawable)
|
|||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glDeleteTextures(1, &tex);
|
||||
|
||||
read_only:
|
||||
if (GLEW_MESA_pack_invert || glamor_priv->yInverted) {
|
||||
glBindBufferARB (GL_PIXEL_PACK_BUFFER_EXT, pixmap_priv->pbo);
|
||||
glUnmapBufferARB (GL_PIXEL_PACK_BUFFER_EXT);
|
||||
|
|
|
@ -193,6 +193,7 @@ typedef struct glamor_pixmap_private {
|
|||
GLuint fb;
|
||||
GLuint pbo;
|
||||
enum glamor_pixmap_type type;
|
||||
glamor_access_t access_mode;
|
||||
} glamor_pixmap_private;
|
||||
|
||||
extern DevPrivateKey glamor_screen_private_key;
|
||||
|
|
Loading…
Reference in New Issue
Block a user