Mesa (master): r600g: suspend/resume occlusion query around clear/copy

Jerome Glisse glisse at kemper.freedesktop.org
Tue Sep 28 11:24:31 PDT 2010


Module: Mesa
Branch: master
Commit: fe790a3c346b5edb8b64cfc937b0d5cd9e337412
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe790a3c346b5edb8b64cfc937b0d5cd9e337412

Author: Jerome Glisse <jglisse at redhat.com>
Date:   Tue Sep 28 14:21:35 2010 -0400

r600g: suspend/resume occlusion query around clear/copy

Signed-off-by: Jerome Glisse <jglisse at redhat.com>

---

 src/gallium/drivers/r600/r600.h           |    2 ++
 src/gallium/drivers/r600/r600_state2.c    |    8 ++++++++
 src/gallium/winsys/r600/drm/r600_state2.c |    7 ++-----
 3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
index b8c7467..adc35af 100644
--- a/src/gallium/drivers/r600/r600.h
+++ b/src/gallium/drivers/r600/r600.h
@@ -278,6 +278,8 @@ boolean r600_context_query_result(struct r600_context *ctx,
 				boolean wait, void *vresult);
 void r600_query_begin(struct r600_context *ctx, struct r600_query *query);
 void r600_query_end(struct r600_context *ctx, struct r600_query *query);
+void r600_context_queries_suspend(struct r600_context *ctx);
+void r600_context_queries_resume(struct r600_context *ctx);
 
 int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon);
 void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *draw);
diff --git a/src/gallium/drivers/r600/r600_state2.c b/src/gallium/drivers/r600/r600_state2.c
index 1537805..72d0453 100644
--- a/src/gallium/drivers/r600/r600_state2.c
+++ b/src/gallium/drivers/r600/r600_state2.c
@@ -757,6 +757,7 @@ int r600_blit_uncompress_depth2(struct pipe_context *ctx, struct r600_resource_t
 	int level = 0;
 	float depth = 1.0f;
 
+	r600_context_queries_suspend(&rctx->ctx);
 	for (int i = 0; i < fb.nr_cbufs; i++) {
 		fb.cbufs[i] = NULL;
 		pipe_surface_reference(&fb.cbufs[i], rctx->pframebuffer->cbufs[i]);
@@ -785,6 +786,7 @@ int r600_blit_uncompress_depth2(struct pipe_context *ctx, struct r600_resource_t
 		pipe_surface_reference(&fb.cbufs[i], NULL);
 	}
 	pipe_surface_reference(&fb.zsbuf, NULL);
+	r600_context_queries_resume(&rctx->ctx);
 
 	return 0;
 }
@@ -795,10 +797,12 @@ static void r600_clear(struct pipe_context *ctx, unsigned buffers,
 	struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
 	struct pipe_framebuffer_state *fb = &rctx->framebuffer;
 
+	r600_context_queries_suspend(&rctx->ctx);
 	r600_blitter_save_states(ctx);
 	util_blitter_clear(rctx->blitter, fb->width, fb->height,
 				fb->nr_cbufs, buffers, rgba, depth,
 				stencil);
+	r600_context_queries_resume(&rctx->ctx);
 }
 
 static void r600_clear_render_target(struct pipe_context *ctx,
@@ -810,9 +814,11 @@ static void r600_clear_render_target(struct pipe_context *ctx,
 	struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
 	struct pipe_framebuffer_state *fb = &rctx->framebuffer;
 
+	r600_context_queries_suspend(&rctx->ctx);
 	util_blitter_save_framebuffer(rctx->blitter, fb);
 	util_blitter_clear_render_target(rctx->blitter, dst, rgba,
 					 dstx, dsty, width, height);
+	r600_context_queries_resume(&rctx->ctx);
 }
 
 static void r600_clear_depth_stencil(struct pipe_context *ctx,
@@ -826,9 +832,11 @@ static void r600_clear_depth_stencil(struct pipe_context *ctx,
 	struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
 	struct pipe_framebuffer_state *fb = &rctx->framebuffer;
 
+	r600_context_queries_suspend(&rctx->ctx);
 	util_blitter_save_framebuffer(rctx->blitter, fb);
 	util_blitter_clear_depth_stencil(rctx->blitter, dst, clear_flags, depth, stencil,
 					 dstx, dsty, width, height);
+	r600_context_queries_resume(&rctx->ctx);
 }
 
 
diff --git a/src/gallium/winsys/r600/drm/r600_state2.c b/src/gallium/winsys/r600/drm/r600_state2.c
index 97aecc7..7791386 100644
--- a/src/gallium/winsys/r600/drm/r600_state2.c
+++ b/src/gallium/winsys/r600/drm/r600_state2.c
@@ -61,9 +61,6 @@ void radeon_bo_reference(struct radeon *radeon,
 
 unsigned radeon_ws_bo_get_handle(struct radeon_ws_bo *pb_bo);
 
-/* queries */
-static void r600_context_queries_suspend(struct r600_context *ctx);
-static void r600_context_queries_resume(struct r600_context *ctx);
 
 static int r600_group_id_register_offset(struct r600_context *ctx, unsigned offset)
 {
@@ -1292,7 +1289,7 @@ boolean r600_context_query_result(struct r600_context *ctx,
 	return TRUE;
 }
 
-static void r600_context_queries_suspend(struct r600_context *ctx)
+void r600_context_queries_suspend(struct r600_context *ctx)
 {
 	struct r600_query *query;
 
@@ -1304,7 +1301,7 @@ static void r600_context_queries_suspend(struct r600_context *ctx)
 	}
 }
 
-static void r600_context_queries_resume(struct r600_context *ctx)
+void r600_context_queries_resume(struct r600_context *ctx)
 {
 	struct r600_query *query;
 



More information about the mesa-commit mailing list