summaryrefslogtreecommitdiff
path: root/src/sna/gen6_render.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2013-02-25 15:18:46 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2013-02-25 16:13:18 +0000
commit56fd91fc830d7a210e3a0e70ab41261a1f5baa83 (patch)
treefdf5c2850fde13c69202bd58693c550c458dc70b /src/sna/gen6_render.c
parentb12f0da0bedb7faf0c96e44ca2d02baec807ad51 (diff)
sna/gen3+: Restart vertex space checks after lock contention
If we end up contending for the vertex lock, we need to double check there is sufficient vertex space left for us. Bugzill: https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/1124576 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/sna/gen6_render.c')
-rw-r--r--src/sna/gen6_render.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 60958e16..fa4c47b1 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -1189,9 +1189,12 @@ start:
goto flush;
}
- if (unlikely(sna->render.vertex_offset == 0 &&
- !gen6_rectangle_begin(sna, op)))
- goto flush;
+ if (unlikely(sna->render.vertex_offset == 0)) {
+ if (!gen6_rectangle_begin(sna, op))
+ goto flush;
+ else
+ goto start;
+ }
assert(op->floats_per_rect >= vertex_space(sna));
assert(rem <= vertex_space(sna));