Hi Chris, Chris Wilson writes: > > Also realised that even this should be fixed up as a last resort by > falling back to the shadow CRTC allocation. That band-aid should be > working again. > > Hopefully > > commit 9f7c1a4c4f2a6352263c36e75a984ed4095adbc0 > Author: Chris Wilson <ch...@chris-wilson.co.uk> > Date: Thu Sep 25 16:29:14 2014 +0100 > > sna: Check for scanout pitch restrictions on linear GPU bo > > When converting a linear cached CPU bo into an uncached GPU bo, we must > be careful to adhere to the scanout restrictions if they apply for this > transfer or this Pixmap. > > Reported-by: Egbert Eich <e...@suse.com> > Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk> > > catches all the cases where we need to check the alignment on the pitch > before changing the cache level. If not, it now explicitly converts the > bo before making the framebuffer.
thanks for looking into this! I can confirm that the patch works. I took a brief look into why the server terminates at server reset when the the patch which fixes the tiling isn't applied. This happens in sna_create_screen_resources() when sna_pixmap_force_to_gpu() fails and the entire creatSecreenResources fails. Since sna_pixmap_force_to_gpu() is allowed to fail at other places as alternatives will be used I looked who might need this call. The only thing I found was sna_copy_fbcon() which will fail in assert(priv && priv->gpu_bo). sna_copy_fbcon() is however not vital: The fix below made this work for me. This is a simple hack, one could also use a bo to a supported front buffer instead of insisiting a GPU bo. Later on use_shadow() should take care of a the failure of sna_pixmap_force_to_gpu() in sna_create_screen_resources(). Or can you think of another reason why this is needed so early? Cheers, Egbert. From: Egbert Eich <e...@freedesktop.org> Date: Fri, 26 Sep 2014 17:57:55 +0200 Subject: [PATCH driver/intel] In sna_create_screen_resources() don't make sna_pixmap_force_to_gpu() mandatory Signed-off-by: Egbert Eich <e...@freedesktop.org> --- src/sna/sna_display.c | 3 ++- src/sna/sna_driver.c | 11 +---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index 0aa7557..a55bdb9 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -1625,7 +1625,8 @@ void sna_copy_fbcon(struct sna *sna) assert((sna->flags & SNA_IS_HOSTED) == 0); priv = sna_pixmap(sna->front); - assert(priv && priv->gpu_bo); + if (!priv || !priv->gpu_bo) + return; /* Scan the connectors for a framebuffer and assume that is the fbcon */ VG_CLEAR(fbcon); diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c index 7eed214..fe2a6ec 100644 --- a/src/sna/sna_driver.c +++ b/src/sna/sna_driver.c @@ -248,16 +248,7 @@ static Bool sna_create_screen_resources(ScreenPtr screen) return FALSE; } - if (!sna_pixmap_force_to_gpu(new_front, MOVE_READ)) { - xf86DrvMsg(screen->myNum, X_ERROR, - "[intel] Failed to allocate video resources for front buffer %dx%d at depth %d\n", - screen->width, - screen->height, - screen->rootDepth); - screen->DestroyPixmap(new_front); - return FALSE; - } - + sna_pixmap_force_to_gpu(new_front, MOVE_READ); screen->SetScreenPixmap(new_front); assert(screen->GetScreenPixmap(screen) == new_front); assert(sna->front == new_front); -- 1.8.4.5 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel