gallium/radeon: use the current ctx for CMASK elimination in resource_get_handle
authorMarek Olšák <marek.olsak@amd.com>
Sun, 21 Aug 2016 10:30:21 +0000 (12:30 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 5 Sep 2016 16:01:15 +0000 (18:01 +0200)
For coherency with the current context.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeon/r600_texture.c

index e7be768f571e67877fc282853a4507deaf51a880..912d1234aef1b2bf8d0faa5006826a747ca808af 100644 (file)
@@ -340,15 +340,20 @@ static void r600_dirty_all_framebuffer_states(struct r600_common_screen *rscreen
        p_atomic_inc(&rscreen->dirty_fb_counter);
 }
 
-static void r600_eliminate_fast_color_clear(struct r600_common_screen *rscreen,
-                                     struct r600_texture *rtex)
+static void r600_eliminate_fast_color_clear(struct r600_common_context *rctx,
+                                           struct r600_texture *rtex)
 {
-       struct pipe_context *ctx = rscreen->aux_context;
+       struct r600_common_screen *rscreen = rctx->screen;
+       struct pipe_context *ctx = &rctx->b;
+
+       if (ctx == rscreen->aux_context)
+               pipe_mutex_lock(rscreen->aux_context_lock);
 
-       pipe_mutex_lock(rscreen->aux_context_lock);
        ctx->flush_resource(ctx, &rtex->resource.b.b);
        ctx->flush(ctx, NULL, 0);
-       pipe_mutex_unlock(rscreen->aux_context_lock);
+
+       if (ctx == rscreen->aux_context)
+               pipe_mutex_unlock(rscreen->aux_context_lock);
 }
 
 static void r600_texture_discard_cmask(struct r600_common_screen *rscreen,
@@ -545,7 +550,7 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen,
                if (!(usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH) &&
                    rtex->cmask.size) {
                        /* Eliminate fast clear (both CMASK and DCC) */
-                       r600_eliminate_fast_color_clear(rscreen, rtex);
+                       r600_eliminate_fast_color_clear(rctx, rtex);
 
                        /* Disable CMASK if flush_resource isn't going
                         * to be called.