xf86-video-intel: src/sna/sna_dri2.c

Chris Wilson ickle at kemper.freedesktop.org
Sat Aug 8 09:45:46 PDT 2015


 src/sna/sna_dri2.c |   17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

New commits:
commit cadea260de76a398f9141b18ae91d1646e9a305e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Aug 8 15:39:05 2015 +0100

    sna/dri2: Add the old buffer from a chain swap to the swap cache
    
    Rather than just discarding the old buffer, we want to add it to the swap
    cache and so hand it back to the client in the near future.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 1872d0c..7a2d9d0 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -214,6 +214,8 @@ sna_dri2_cache_bo(struct sna *sna,
 {
 	struct dri_bo *c;
 
+	DBG(("%s(handle=%d, name=%d)\n", __FUNCTION__, bo->handle, name));
+
 	if (draw == NULL) {
 		DBG(("%s: no draw, releasing handle=%d\n",
 		     __FUNCTION__, bo->handle));
@@ -2405,10 +2407,13 @@ static void chain_swap(struct sna_dri2_event *chain)
 				chain->back->flags = tmp.flags;
 				chain->back->pitch = tmp.bo->pitch;
 
-				tmp.bo = get_private(chain->back)->copy.bo;
-			}
-
-			kgem_bo_destroy(&chain->sna->kgem, tmp.bo);
+				sna_dri2_cache_bo(chain->sna, chain->draw,
+						  get_private(chain->back)->copy.bo,
+						  get_private(chain->back)->copy.name,
+						  get_private(chain->back)->copy.size,
+						  get_private(chain->back)->copy.flags);
+			} else
+				kgem_bo_destroy(&chain->sna->kgem, tmp.bo);
 
 			get_private(chain->back)->copy.bo = ref(get_private(chain->back)->bo);
 			get_private(chain->back)->copy.name = chain->back->name;
@@ -2668,6 +2673,8 @@ sna_dri2_immediate_blit(struct sna *sna,
 		assert(chain->bo == NULL);
 		assert(chain->queued);
 
+		DBG(("%s: stealing placeholder\n", __FUNCTION__));
+
 		_sna_dri2_destroy_buffer(chain->sna, chain->draw, chain->front);
 		_sna_dri2_destroy_buffer(chain->sna, chain->draw, chain->back);
 
@@ -2711,6 +2718,8 @@ sna_dri2_immediate_blit(struct sna *sna,
 	    chain->chain->type == SWAP_THROTTLE) {
 		struct sna_dri2_event *tmp = chain->chain;
 
+		DBG(("%s: replacing next swap\n", __FUNCTION__));
+
 		assert(!tmp->queued);
 
 		assert(info->chain == NULL);


More information about the xorg-commit mailing list