diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2014-04-18 11:34:07 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2014-04-18 11:36:28 +0100 |
commit | fdc28205d590d560a6f3886189ef974d1d00f2cd (patch) | |
tree | e1edc472c07015287ae58b10c705c72ae13fbb44 /src/sna/sna_driver.c | |
parent | 924237efbddb167efc7f9f3bde42b32ffc538ee3 (diff) |
sna: Always flush the shadow scanout
When the shadow scanout is active, make sure we call the BlockHandler
every time, not just when we about to sleep. This is in case we are
swamped by clients trying to render and forgo the important step of
ensuring that their output reaches the screen.
Reported-by: Ildar Nurislamov <absorbb@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77436
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/sna/sna_driver.c')
-rw-r--r-- | src/sna/sna_driver.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c index 42065f1b..51f224e5 100644 --- a/src/sna/sna_driver.c +++ b/src/sna/sna_driver.c @@ -627,6 +627,14 @@ cleanup: return FALSE; } +static bool has_shadow(struct sna *sna) +{ + if (!sna->mode.shadow_damage) + return false; + + return RegionNotEmpty(DamageRegion(sna->mode.shadow_damage)); +} + static void sna_block_handler(BLOCKHANDLER_ARGS_DECL) { @@ -642,7 +650,7 @@ sna_block_handler(BLOCKHANDLER_ARGS_DECL) sna->BlockHandler(BLOCKHANDLER_ARGS); - if (*tv == NULL || ((*tv)->tv_usec | (*tv)->tv_sec)) + if (*tv == NULL || ((*tv)->tv_usec | (*tv)->tv_sec) || has_shadow(sna)) sna_accel_block_handler(sna, tv); } |