r600g: disable render condition at the end of CS, re-enable at the beginning

This commit is contained in:
Marek Olšák 2011-11-10 15:50:06 +01:00
parent 9564185b0a
commit 578b211be6
2 changed files with 19 additions and 0 deletions

View File

@ -946,6 +946,11 @@ void r600_need_cs_space(struct r600_context *ctx, unsigned num_dw,
/* Count in queries_suspend. */
num_dw += ctx->num_cs_dw_queries_suspend;
/* Count in render_condition(NULL) at the end of CS. */
if (ctx->predicate_drawing) {
num_dw += 3;
}
/* Flush if there's not enough space. */
if (num_dw > ctx->pm4_ndwords) {
r600_context_flush(ctx, RADEON_FLUSH_ASYNC);

View File

@ -122,11 +122,25 @@ void r600_flush(struct pipe_context *ctx, struct pipe_fence_handle **fence,
{
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
struct r600_fence **rfence = (struct r600_fence**)fence;
struct pipe_query *render_cond = NULL;
unsigned render_cond_mode = 0;
if (rfence)
*rfence = r600_create_fence(rctx);
/* Disable render condition. */
if (rctx->current_render_cond) {
render_cond = rctx->current_render_cond;
render_cond_mode = rctx->current_render_cond_mode;
ctx->render_condition(ctx, NULL, 0);
}
r600_context_flush(&rctx->ctx, flags);
/* Re-enable render condition. */
if (render_cond) {
ctx->render_condition(ctx, render_cond, render_cond_mode);
}
}
static void r600_flush_from_st(struct pipe_context *ctx,