DRI3: added swap tbos after "Page Flip"; 34/28434/1
authorRoman Marchenko <r.marchenko@samsung.com>
Tue, 7 Oct 2014 08:04:22 +0000 (11:04 +0300)
committerRoman Marchenko <r.marchenko@samsung.com>
Tue, 7 Oct 2014 08:04:22 +0000 (11:04 +0300)
removed replacement tbo for dri3 Pixmap.

Change-Id: I7524d7dbb61b3d809c2f0e7bc3978bb4ccd10656

src/accel/sec_present.c
src/g2d/fimg2d.c
src/sec.c

index 436df23..add09d3 100644 (file)
@@ -249,6 +249,7 @@ SECPresentFlip(RRCrtcPtr            pRRcrtc,
        ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
        int pipe = secModeGetCrtcPipe(pCrtc);
        PresentVblankEventPtr pEvent = NULL;
+    SECPtr pSec = SECPTR (pScrn);
 
        Bool ret;
 
@@ -269,14 +270,30 @@ SECPresentFlip(RRCrtcPtr          pRRcrtc,
        ret = secModePageFlip (pScrn, NULL, pEvent, pipe, pExaPixPriv->bo, 
                                                   NULL, client_idx, drawable_id,
                                                   secPresentFlipEventHandler);
-       if (!ret) {
-               secPresentFlipAbort(pEvent);
-               XDBG_WARNING(MDRI3, "fail to flip\n");
-       }
-       else 
-       {
-               XDBG_DEBUG(MDRI3, "flip OK\n");
-       }
+    if (!ret)
+    {
+        secPresentFlipAbort(pEvent);
+        XDBG_WARNING(MDRI3, "fail to flip\n");
+    }
+    else
+    {
+        /*FIXME -
+         * Should we swap front bo and presented bo?
+         * Should we set up presented pixmap as root?
+         * */
+        PixmapPtr pRootPix = pScreen->GetWindowPixmap (pScreen->root);;
+        SECPixmapPriv *pRootPixPriv = exaGetPixmapDriverPrivate (pRootPix);
+        tbm_bo front_bo = pRootPixPriv->bo ? pRootPixPriv->bo : pSec->pFb->default_bo;
+
+        XDBG_DEBUG(MDRI3, "doPageFlip id:0x%x Client:%d pipe:%d\n"
+                "Present: pix(ptr:%p id:x%x), bo(ptr:%p name:%d) -->\n"
+                "Root: pix(ptr:%p id:x%x), bo(ptr:%p name:%d)\n",
+                (unsigned int )pExaPixPriv->owner, client_idx, pipe,
+                pPixmap, pPixmap->drawable.id,  pExaPixPriv->bo, tbm_bo_export(pExaPixPriv->bo),
+                pPixmap, pRootPix->drawable.id, front_bo,        tbm_bo_export(front_bo) );
+
+        secFbSwapBo(pSec->pFb, pExaPixPriv->bo);
+    }
        
        return ret;
 }
index da9843a..a2092fe 100644 (file)
@@ -15,7 +15,7 @@
 #define TRUE 1
 #endif
 #ifndef FALSE
-#define FALSE 1
+#define FALSE 0
 #endif
 
 #define G2D_MAX_CMD 64
index 2b7c369..255042d 100644 (file)
--- a/src/sec.c
+++ b/src/sec.c
@@ -1307,20 +1307,21 @@ _secFbCreateBo2 (SECFbPtr pFb, int x, int y, int width, int height, tbm_bo prev_
     else
         flag = TBM_BO_DEFAULT;
 
-    bo = tbm_bo_alloc (pSec->tbm_bufmgr, pitch*height, flag);
-    XDBG_GOTO_IF_FAIL (bo != NULL, fail);
-    
     if (prev_bo != NULL)
     {
-       tbm_bo_swap(bo, prev_bo);
-       
-       //delete prev bo(naw _bo contains an old GEM object)
-       tbm_bo_unref(bo);
-       //delete TBM_BO_DATA_FB if present, because the new will be created in here
-       tbm_bo_delete_user_data(prev_bo, TBM_BO_DATA_FB);
-       
+        XDBG_RETURN_VAL_IF_FAIL (tbm_bo_size(prev_bo)  >= (pitch*height), NULL);
+
+        tbm_bo_delete_user_data(prev_bo, TBM_BO_DATA_FB);
+
+        /* TODO: check flags*/
+
        bo = prev_bo;
     }
+    else
+    {
+        bo = tbm_bo_alloc (pSec->tbm_bufmgr, pitch*height, flag);
+        XDBG_GOTO_IF_FAIL (bo != NULL, fail);
+    }
 
     /* memset 0x0 */
     bo_handle1 = tbm_bo_map (bo, TBM_DEVICE_CPU, TBM_OPTION_WRITE);