Message ID | 1302682529-18395-1-git-send-email-chris@chris-wilson.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, 13 Apr 2011 09:15:29 +0100 Chris Wilson <chris@chris-wilson.co.uk> wrote: > As fullscreen swaps were going via a different path to the swapping of > ordinary windows, we were no longer honouring the xorg.conf option to > disable swapbuffer waiting. > > This changes the code to only use pageflipping if the Option > "SwapbuffersWait" is set to "TRUE" (default). > I'd rather keep flips in the nowait case, but use async flips instead, but that requires a kernel change (I thought we had a flip flag for this but I guess it got lost on its way upstream). Jesse
On Thu, 14 Apr 2011 12:15:54 -0700, Jesse Barnes <jbarnes@virtuousgeek.org> wrote: > On Wed, 13 Apr 2011 09:15:29 +0100 > I'd rather keep flips in the nowait case, but use async flips instead, > but that requires a kernel change (I thought we had a flip flag for > this but I guess it got lost on its way upstream). I always thought the restrictions on async pageflips were pretty horrendous and wasn't sure if it would not cause rebinding our buffers just when we wanted to flip as fast as possible. As I look at it though, using SwapbuffersWait to force blits rather than waits now doesn't preclude us from switching to async pageflips later. -Chris
diff --git a/src/intel_display.c b/src/intel_display.c index b6592c4..b55b110 100644 --- a/src/intel_display.c +++ b/src/intel_display.c @@ -1607,7 +1607,7 @@ Bool intel_mode_pre_init(ScrnInfoPtr scrn, int fd, int cpp) gp.value = &has_flipping; (void)drmCommandWriteRead(intel->drmSubFD, DRM_I915_GETPARAM, &gp, sizeof(gp)); - if (has_flipping) { + if (has_flipping && intel->swapbuffers_wait) { xf86DrvMsg(scrn->scrnIndex, X_INFO, "Kernel page flipping support detected, enabling\n"); intel->use_pageflipping = TRUE; diff --git a/src/intel_dri.c b/src/intel_dri.c index a39b512..cd72f45 100644 --- a/src/intel_dri.c +++ b/src/intel_dri.c @@ -425,7 +425,7 @@ I830DRI2CopyRegion(DrawablePtr drawable, RegionPtr pRegion, /* Wait for the scanline to be outside the region to be copied */ if (pixmap_is_scanout(get_drawable_pixmap(dst)) && - intel->swapbuffers_wait) { + intel->swapbuffers_wait && INTEL_INFO(intel)->gen < 60) { BoxPtr box; BoxRec crtcbox; int y1, y2; diff --git a/src/intel_driver.c b/src/intel_driver.c index e867351..7014198 100644 --- a/src/intel_driver.c +++ b/src/intel_driver.c @@ -658,8 +658,6 @@ static Bool I830PreInit(ScrnInfoPtr scrn, int flags) intel->swapbuffers_wait = xf86ReturnOptValBool(intel->Options, OPTION_SWAPBUFFERS_WAIT, TRUE); - if (IS_GEN6(intel)) - intel->swapbuffers_wait = FALSE; xf86DrvMsg(scrn->scrnIndex, X_CONFIG, "Framebuffer %s\n", intel->tiling & INTEL_TILING_FB ? "tiled" : "linear");
As fullscreen swaps were going via a different path to the swapping of ordinary windows, we were no longer honouring the xorg.conf option to disable swapbuffer waiting. This changes the code to only use pageflipping if the Option "SwapbuffersWait" is set to "TRUE" (default). Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Jesse Barnes <jbarnes@virtuousgeek.org> Cc: Kristian Høgsberg <krh@bitplanet.net> --- src/intel_display.c | 2 +- src/intel_dri.c | 2 +- src/intel_driver.c | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-)