<div dir="ltr">While these patches seem to work ok, somethings not properly getting accelerated when using a shadow buffer and I really don't know why. I guess it's still better than no shadow.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 19, 2014 at 2:25 PM, Jason Ekstrand <span dir="ltr"><<a href="mailto:jason@jlekstrand.net" target="_blank">jason@jlekstrand.net</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I've also pushed a branch with my patches on top of Ken's new present patches here:<br><br><a href="http://cgit.freedesktop.org/~jekstrand/xserver/log/?h=wip/modeset-shadow" target="_blank">http://cgit.freedesktop.org/~jekstrand/xserver/log/?h=wip/modeset-shadow</a><br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 19, 2014 at 2:12 PM, Jason Ekstrand <span dir="ltr"><<a href="mailto:jason@jlekstrand.net" target="_blank">jason@jlekstrand.net</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>This way all of the buffer allocation/destruction is in the same file.<br>
<br>
Signed-off-by: Jason Ekstrand <<a href="mailto:jason.ekstrand@intel.com" target="_blank">jason.ekstrand@intel.com</a>><br>
---<br>
 hw/xfree86/drivers/modesetting/driver.c     | 16 +---------------<br>
 hw/xfree86/drivers/modesetting/drmmode_display.c | 19 ++++++++++++++++++-<br>
 hw/xfree86/drivers/modesetting/drmmode_display.h | 2 +-<br>
 3 files changed, 20 insertions(+), 17 deletions(-)<br>
<br>
diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c<br>
index 5dda96b..77da2cc 100644<br>
--- a/hw/xfree86/drivers/modesetting/driver.c<br>
+++ b/hw/xfree86/drivers/modesetting/driver.c<br>
@@ -993,15 +993,6 @@ ScreenInit(ScreenPtr pScreen, int argc, char **argv)<br>
   if (!drmmode_create_initial_bos(pScrn, &ms->drmmode))<br>
     return FALSE;<br>
<br>
-Â Â if (ms->drmmode.shadow_enable) {<br>
-Â Â Â Â ms->drmmode.shadow_fb =<br>
-Â Â Â Â Â Â calloc(1,<br>
-Â Â Â Â Â Â Â Â Â Â pScrn->displayWidth * pScrn->virtualY *<br>
-Â Â Â Â Â Â Â Â Â Â ((pScrn->bitsPerPixel + 7) >> 3));<br>
-Â Â Â Â if (!ms->drmmode.shadow_fb)<br>
-Â Â Â Â Â Â ms->drmmode.shadow_enable = FALSE;<br>
-Â Â }<br>
-<br>
   miClearVisualTypes();<br>
<br>
   if (!miSetVisualTypes(pScrn->depth,<br>
@@ -1200,14 +1191,9 @@ CloseScreen(ScreenPtr pScreen)<br>
     ms->damage = NULL;<br>
   }<br>
<br>
-Â Â if (ms->drmmode.shadow_enable) {<br>
-Â Â Â Â shadowRemove(pScreen, pScreen->GetScreenPixmap(pScreen));<br>
-Â Â Â Â free(ms->drmmode.shadow_fb);<br>
-Â Â Â Â ms->drmmode.shadow_fb = NULL;<br>
-Â Â }<br>
   drmmode_uevent_fini(pScrn, &ms->drmmode);<br>
<br>
-Â Â drmmode_free_bos(pScrn, &ms->drmmode);<br>
+Â Â drmmode_free_bos(pScreen, &ms->drmmode);<br>
<br>
   if (pScrn->vtSema) {<br>
     LeaveVT(pScrn);<br>
diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c<br>
index 824500b..30ee79d 100644<br>
--- a/hw/xfree86/drivers/modesetting/drmmode_display.c<br>
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.c<br>
@@ -39,6 +39,7 @@<br>
 #include "micmap.h"<br>
 #include "xf86cmap.h"<br>
 #include "xf86DDC.h"<br>
+#include "shadow.h"<br>
<br>
 #include <xf86drm.h><br>
 #include "xf86Crtc.h"<br>
@@ -1539,6 +1540,15 @@ drmmode_create_initial_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode)<br>
     return FALSE;<br>
   pScrn->displayWidth = drmmode_bo_get_pitch(&drmmode->front_bo) / cpp;<br>
<br>
+Â Â if (drmmode->shadow_enable) {<br>
+Â Â Â Â drmmode->shadow_fb =<br>
+Â Â Â Â Â Â calloc(1,<br>
+Â Â Â Â Â Â Â Â Â Â pScrn->displayWidth * pScrn->virtualY *<br>
+Â Â Â Â Â Â Â Â Â Â ((pScrn->bitsPerPixel + 7) >> 3));<br>
+Â Â Â Â if (!drmmode->shadow_fb)<br>
+Â Â Â Â Â Â drmmode->shadow_enable = FALSE;<br>
+Â Â }<br>
+<br>
   width = ms->cursor_width;<br>
   height = ms->cursor_height;<br>
   bpp = 32;<br>
@@ -1601,8 +1611,9 @@ drmmode_map_cursor_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode)<br>
 }<br>
<br>
 void<br>
-drmmode_free_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode)<br>
+drmmode_free_bos(ScreenPtr pScreen, drmmode_ptr drmmode)<br>
 {<br>
+Â Â ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);<br>
   xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);<br>
   int i;<br>
<br>
@@ -1611,6 +1622,12 @@ drmmode_free_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode)<br>
     drmmode->fb_id = 0;<br>
   }<br>
<br>
+Â Â if (drmmode->shadow_enable) {<br>
+Â Â Â Â shadowRemove(pScreen, pScreen->GetScreenPixmap(pScreen));<br>
+Â Â Â Â free(drmmode->shadow_fb);<br>
+Â Â Â Â drmmode->shadow_fb = NULL;<br>
+Â Â }<br>
+<br>
   drmmode_bo_destroy(drmmode, &drmmode->front_bo);<br>
<br>
   for (i = 0; i < xf86_config->num_crtc; i++) {<br>
diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.h b/hw/xfree86/drivers/modesetting/drmmode_display.h<br>
index 66d0ca2..c67809b 100644<br>
--- a/hw/xfree86/drivers/modesetting/drmmode_display.h<br>
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.h<br>
@@ -155,7 +155,7 @@ extern void drmmode_uevent_fini(ScrnInfoPtr scrn, drmmode_ptr drmmode);<br>
 Bool drmmode_create_initial_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode);<br>
 void *drmmode_map_front_bo(drmmode_ptr drmmode);<br>
 Bool drmmode_map_cursor_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode);<br>
-void drmmode_free_bos(ScrnInfoPtr pScrn, drmmode_ptr drmmode);<br>
+void drmmode_free_bos(ScreenPtr pScreen, drmmode_ptr drmmode);<br>
 void drmmode_get_default_bpp(ScrnInfoPtr pScrn, drmmode_ptr drmmmode,<br>
               int *depth, int *bpp);<br>
<br>
--<br>
2.2.0<br>
<br>
</div></div></blockquote></div></div>
</div></div></blockquote></div></div>