public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH v2] UXA: Wait until a pageflip actually completes to report it.
@ 2014-05-21 15:53 Jamey Sharp
  2014-05-21 16:24 ` Chris Wilson
  0 siblings, 1 reply; 3+ messages in thread
From: Jamey Sharp @ 2014-05-21 15:53 UTC (permalink / raw)
  To: intel-gfx; +Cc: Theo Hill

UXA was reporting page-flip completion as soon as the flip was scheduled
with the kernel, instead of waiting for the kernel to indicate that the
flip had actually completed.

Moving the DRI2SwapComplete call to the right place fixes all of our
Piglit tests for OML_sync_control when run on xf86-video-intel/UXA,
aside from a bit of difficult-to-reproduce flakiness when using a
divisor > 1.

This also eliminates a compile-time and run-time warning when built
against an xserver with "Warn on DRI2SwapComplete with constant UST/MSC"
applied.

v2: The drawable may have disappeared by the time the flip completes.
Don't try to report swap completion in that case.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
Cc: Theo Hill <Theo0x48@gmail.com>
Cc: Eric Anholt <eric@anholt.net>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---

I can experimentally confirm Chris' claim that this patch causes
SwapBuffers to block once one swap is already outstanding, giving
double-buffering behavior rather than the desired triple-buffering.

However, it only has an effect for full-screen windows, and only when
not running under a compositor.

- If the window is not full-screen, UXA is already only double-buffered.
- If full-screen, UXA is usually triple-buffered, but not reliably.
- If run under a compositor, either the compositor crashes during my
  test, or it still appears to be triple-buffered even with this patch.

If you want triple-buffering, NAK'ing this patch is clearly not the way
to get it, since the driver already doesn't do it reliably.

Please merge this patch, which fixes two spec violations that make
OML_sync_control unusable; and if you're concerned about uncomposited
triple-buffering in UXA, please find a less awful way to get it.

Thanks,
Jamey

 src/uxa/intel_dri.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/uxa/intel_dri.c b/src/uxa/intel_dri.c
index ca58052..d4a242e 100644
--- a/src/uxa/intel_dri.c
+++ b/src/uxa/intel_dri.c
@@ -932,10 +932,6 @@ I830DRI2ScheduleFlip(struct intel_screen_private *intel,
 
 	/* Then flip DRI2 pointers and update the screen pixmap */
 	I830DRI2ExchangeBuffers(intel, info->front, info->back);
-	DRI2SwapComplete(info->client, draw, 0, 0, 0,
-			 DRI2_EXCHANGE_COMPLETE,
-			 info->event_complete,
-			 info->event_data);
 	return TRUE;
 }
 
@@ -1090,6 +1086,14 @@ void I830DRI2FlipEventHandler(unsigned int frame, unsigned int tv_sec,
 		assert(intel->pending_flip[flip_info->pipe] == flip_info);
 		intel->pending_flip[flip_info->pipe] = NULL;
 
+		/* Assuming the drawable's still around, complete the swap. */
+		if (drawable)
+			DRI2SwapComplete(flip_info->client, drawable,
+					 frame, tv_sec, tv_usec,
+					 DRI2_EXCHANGE_COMPLETE,
+					 flip_info->event_complete,
+					 flip_info->event_data);
+
 		chain = flip_info->chain;
 		if (chain) {
 			DrawablePtr chain_drawable = NULL;
-- 
1.9.2

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] UXA: Wait until a pageflip actually completes to report it.
  2014-05-21 15:53 [PATCH v2] UXA: Wait until a pageflip actually completes to report it Jamey Sharp
@ 2014-05-21 16:24 ` Chris Wilson
  2014-05-21 16:30   ` Jamey Sharp
  0 siblings, 1 reply; 3+ messages in thread
From: Chris Wilson @ 2014-05-21 16:24 UTC (permalink / raw)
  To: Jamey Sharp; +Cc: intel-gfx, Theo Hill

On Wed, May 21, 2014 at 08:53:18AM -0700, Jamey Sharp wrote:
> UXA was reporting page-flip completion as soon as the flip was scheduled
> with the kernel, instead of waiting for the kernel to indicate that the
> flip had actually completed.
> 
> Moving the DRI2SwapComplete call to the right place fixes all of our
> Piglit tests for OML_sync_control when run on xf86-video-intel/UXA,
> aside from a bit of difficult-to-reproduce flakiness when using a
> divisor > 1.
> 
> This also eliminates a compile-time and run-time warning when built
> against an xserver with "Warn on DRI2SwapComplete with constant UST/MSC"
> applied.
> 
> v2: The drawable may have disappeared by the time the flip completes.
> Don't try to report swap completion in that case.
> 
> Signed-off-by: Jamey Sharp <jamey@minilop.net>
> Cc: Theo Hill <Theo0x48@gmail.com>
> Cc: Eric Anholt <eric@anholt.net>
> Cc: Chris Wilson <chris@chris-wilson.co.uk>
> ---
> 
> I can experimentally confirm Chris' claim that this patch causes
> SwapBuffers to block once one swap is already outstanding, giving
> double-buffering behavior rather than the desired triple-buffering.
> 
> However, it only has an effect for full-screen windows, and only when
> not running under a compositor.
> 
> - If the window is not full-screen, UXA is already only double-buffered.
> - If full-screen, UXA is usually triple-buffered, but not reliably.
> - If run under a compositor, either the compositor crashes during my
>   test, or it still appears to be triple-buffered even with this patch.
> 
> If you want triple-buffering, NAK'ing this patch is clearly not the way
> to get it, since the driver already doesn't do it reliably.
> 
> Please merge this patch, which fixes two spec violations that make
> OML_sync_control unusable; and if you're concerned about uncomposited
> triple-buffering in UXA, please find a less awful way to get it.

Why not just change the default to double buffering? Or fix it
correctly?
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] UXA: Wait until a pageflip actually completes to report it.
  2014-05-21 16:24 ` Chris Wilson
@ 2014-05-21 16:30   ` Jamey Sharp
  0 siblings, 0 replies; 3+ messages in thread
From: Jamey Sharp @ 2014-05-21 16:30 UTC (permalink / raw)
  To: Chris Wilson, intel-gfx, Theo Hill, Eric Anholt


[-- Attachment #1.1: Type: text/plain, Size: 638 bytes --]

On Wed, May 21, 2014 at 05:24:18PM +0100, Chris Wilson wrote:
> On Wed, May 21, 2014 at 08:53:18AM -0700, Jamey Sharp wrote:
> > Please merge this patch, which fixes two spec violations that make
> > OML_sync_control unusable; and if you're concerned about uncomposited
> > triple-buffering in UXA, please find a less awful way to get it.
> 
> Why not just change the default to double buffering? Or fix it
> correctly?

This patch *is* fixing it correctly. I don't understand the buffer
management well enough to implement triple buffering in your driver
though, sorry; all I know is that what's there now isn't it.

Jamey

[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-05-21 16:30 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-21 15:53 [PATCH v2] UXA: Wait until a pageflip actually completes to report it Jamey Sharp
2014-05-21 16:24 ` Chris Wilson
2014-05-21 16:30   ` Jamey Sharp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox