Notify the fake buffer manager on contended lock take.
authorEric Anholt <eric@anholt.net>
Mon, 21 May 2007 17:49:32 +0000 (10:49 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 21 May 2007 17:49:32 +0000 (10:49 -0700)
src/mesa/drivers/dri/i915tex/intel_context.c
src/mesa/drivers/dri/i915tex/server/i830_common.h

index 4f58f56adaf6454ac985d2d47cc44130e8aa7bce..696845a7fc989653134703c15133193b76177236 100644 (file)
@@ -638,6 +638,16 @@ intelContendedLock(struct intel_context *intel, GLuint flags)
    if (dPriv)
       DRI_VALIDATE_DRAWABLE_INFO(sPriv, dPriv);
 
+   /* If the last consumer of the texture memory wasn't us, notify the fake
+    * bufmgr and record the new owner.  We should have the memory shared
+    * between contexts of a single fake bufmgr, but this will at least make
+    * things correct for now.
+    */
+   if (!intel->intelScreen->ttm && sarea->texAge != intel->hHWContext) {
+      sarea->texAge = intel->hHWContext;
+      dri_bufmgr_fake_contended_lock_take(intel->intelScreen->bufmgr);
+   }
+
    if (sarea->width != intelScreen->width ||
        sarea->height != intelScreen->height ||
        sarea->rotation != intelScreen->current_rotation) {
index d4d58886ce07a7e99784f91406b61000ef9eba3b..7a76957c6a1afecd2173b832c061f2ca36028897 100644 (file)
@@ -85,6 +85,7 @@ typedef struct {
         int last_enqueue;      /* last time a buffer was enqueued */
        int last_dispatch;      /* age of the most recently dispatched buffer */
        int ctxOwner;           /* last context to upload state */
+       /** Last context that used the buffer manager. */
        int texAge;
         int pf_enabled;                /* is pageflipping allowed? */
         int pf_active;