diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2013-02-25 15:18:46 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2013-02-25 16:13:18 +0000 |
commit | 56fd91fc830d7a210e3a0e70ab41261a1f5baa83 (patch) | |
tree | fdf5c2850fde13c69202bd58693c550c458dc70b /src/sna/gen6_render.c | |
parent | b12f0da0bedb7faf0c96e44ca2d02baec807ad51 (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.c | 9 |
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)); |