summaryrefslogtreecommitdiff
path: root/recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch
diff options
context:
space:
mode:
authorPhil Blundell <philb@gnu.org>2010-02-28 20:47:24 +0000
committerPhil Blundell <philb@gnu.org>2010-02-28 20:47:24 +0000
commitdc352c9d9da30ec3d77aa58a7f535ce19871867d (patch)
tree6a7d1986bb92191974b230a9d9c12adb9095ff45 /recipes/xorg-xserver/xserver-xorg/0002-dri2-No-need-to-blit-from-front-on-DRI2GetBuffers-if.patch
parentfd2bed3297f3b76a8a6b18ba599e7d9d71d2c045 (diff)
parentd58b4cdd9664e1926a4e14a575ba0bef4c2302ed (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.patch111
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
+