diff options
author | Phil Blundell <philb@gnu.org> | 2010-02-28 20:47:24 +0000 |
---|---|---|
committer | Phil Blundell <philb@gnu.org> | 2010-02-28 20:47:24 +0000 |
commit | dc352c9d9da30ec3d77aa58a7f535ce19871867d (patch) | |
tree | 6a7d1986bb92191974b230a9d9c12adb9095ff45 /recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch | |
parent | fd2bed3297f3b76a8a6b18ba599e7d9d71d2c045 (diff) | |
parent | d58b4cdd9664e1926a4e14a575ba0bef4c2302ed (diff) |
Merge branch 'org.openembedded.dev' of new.openembedded.org:openembedded into org.openembedded.dev
Diffstat (limited to 'recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch')
-rw-r--r-- | recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch b/recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch new file mode 100644 index 0000000000..25c073b81e --- /dev/null +++ b/recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch @@ -0,0 +1,111 @@ +From 2723b7a678e75e0a070e90ec223309c9b739d24b Mon Sep 17 00:00:00 2001 +From: Francisco Jerez <currojerez@riseup.net> +Date: Fri, 22 Jan 2010 06:29:35 -0800 +Subject: [PATCH 2/5] dri2: No need to blit from front on DRI2GetBuffers if they're just being reused. + +It can be quite an expensive operation, so we're better off not doing +it unless it's totally required. + +Signed-off-by: Francisco Jerez <currojerez@riseup.net> +--- + hw/xfree86/dri2/dri2.c | 42 +++++++++++++++++++++++------------------- + 1 files changed, 23 insertions(+), 19 deletions(-) + +diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c +index cd69ca0..48618e1 100644 +--- a/hw/xfree86/dri2/dri2.c ++++ b/hw/xfree86/dri2/dri2.c +@@ -202,27 +202,25 @@ find_attachment(DRI2DrawablePtr pPriv, unsigned attachment) + return -1; + } + +-static DRI2BufferPtr ++static Bool + allocate_or_reuse_buffer(DrawablePtr pDraw, DRI2ScreenPtr ds, + DRI2DrawablePtr pPriv, + unsigned int attachment, unsigned int format, +- int dimensions_match) ++ int dimensions_match, DRI2BufferPtr *buffer) + { +- DRI2BufferPtr buffer; +- int old_buf; +- +- old_buf = find_attachment(pPriv, attachment); ++ int old_buf = find_attachment(pPriv, attachment); + + if ((old_buf < 0) + || !dimensions_match + || (pPriv->buffers[old_buf]->format != format)) { +- buffer = (*ds->CreateBuffer)(pDraw, attachment, format); ++ *buffer = (*ds->CreateBuffer)(pDraw, attachment, format); ++ return TRUE; ++ + } else { +- buffer = pPriv->buffers[old_buf]; ++ *buffer = pPriv->buffers[old_buf]; + pPriv->buffers[old_buf] = NULL; ++ return FALSE; + } +- +- return buffer; + } + + static DRI2BufferPtr * +@@ -238,6 +236,7 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, + int have_fake_front = 0; + int front_format = 0; + int dimensions_match; ++ int buffers_changed = 0; + int i; + + if (!pPriv) { +@@ -256,8 +255,10 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, + const unsigned attachment = *(attachments++); + const unsigned format = (has_format) ? *(attachments++) : 0; + +- buffers[i] = allocate_or_reuse_buffer(pDraw, ds, pPriv, attachment, +- format, dimensions_match); ++ if (allocate_or_reuse_buffer(pDraw, ds, pPriv, attachment, ++ format, dimensions_match, ++ &buffers[i])) ++ buffers_changed = 1; + + /* If the drawable is a window and the front-buffer is requested, + * silently add the fake front-buffer to the list of requested +@@ -287,15 +288,18 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, + } + + if (need_real_front > 0) { +- buffers[i++] = allocate_or_reuse_buffer(pDraw, ds, pPriv, +- DRI2BufferFrontLeft, +- front_format, dimensions_match); ++ if (allocate_or_reuse_buffer(pDraw, ds, pPriv, DRI2BufferFrontLeft, ++ front_format, dimensions_match, ++ &buffers[i++])) ++ buffers_changed = 1; + } + + if (need_fake_front > 0) { +- buffers[i++] = allocate_or_reuse_buffer(pDraw, ds, pPriv, +- DRI2BufferFakeFrontLeft, +- front_format, dimensions_match); ++ if (allocate_or_reuse_buffer(pDraw, ds, pPriv, DRI2BufferFakeFrontLeft, ++ front_format, dimensions_match, ++ &buffers[i++])) ++ buffers_changed = 1; ++ + have_fake_front = 1; + } + +@@ -324,7 +328,7 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, + * contents of the real front-buffer. This ensures correct operation of + * applications that call glXWaitX before calling glDrawBuffer. + */ +- if (have_fake_front) { ++ if (have_fake_front && buffers_changed) { + BoxRec box; + RegionRec region; + +-- +1.7.0 + |