r600g: merge r600_flush with r600_context_flush
Reviewed-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
@@ -230,11 +230,28 @@ void r600_flush_emit(struct r600_context *rctx)
|
||||
rctx->b.flags = 0;
|
||||
}
|
||||
|
||||
void r600_context_flush(struct r600_context *ctx, unsigned flags,
|
||||
struct pipe_fence_handle **fence)
|
||||
void r600_context_gfx_flush(void *context, unsigned flags,
|
||||
struct pipe_fence_handle **fence)
|
||||
{
|
||||
struct r600_context *ctx = context;
|
||||
struct radeon_winsys_cs *cs = ctx->b.rings.gfx.cs;
|
||||
|
||||
if (ctx->b.rings.gfx.cs->cdw == ctx->b.initial_gfx_cs_size)
|
||||
return;
|
||||
|
||||
ctx->b.rings.gfx.flushing = true;
|
||||
|
||||
/* Disable render condition. */
|
||||
ctx->b.saved_render_cond = NULL;
|
||||
ctx->b.saved_render_cond_cond = FALSE;
|
||||
ctx->b.saved_render_cond_mode = 0;
|
||||
if (ctx->b.current_render_cond) {
|
||||
ctx->b.saved_render_cond = ctx->b.current_render_cond;
|
||||
ctx->b.saved_render_cond_cond = ctx->b.current_render_cond_cond;
|
||||
ctx->b.saved_render_cond_mode = ctx->b.current_render_cond_mode;
|
||||
ctx->b.b.render_condition(&ctx->b.b, NULL, FALSE, 0);
|
||||
}
|
||||
|
||||
ctx->b.nontimer_queries_suspended = false;
|
||||
ctx->b.streamout.suspended = false;
|
||||
|
||||
@@ -272,6 +289,9 @@ void r600_context_flush(struct r600_context *ctx, unsigned flags,
|
||||
|
||||
/* Flush the CS. */
|
||||
ctx->b.ws->cs_flush(cs, flags, fence, ctx->screen->b.cs_count++);
|
||||
ctx->b.rings.gfx.flushing = false;
|
||||
|
||||
r600_begin_new_cs(ctx);
|
||||
}
|
||||
|
||||
void r600_begin_new_cs(struct r600_context *ctx)
|
||||
@@ -352,6 +372,13 @@ void r600_begin_new_cs(struct r600_context *ctx)
|
||||
r600_resume_nontimer_queries(&ctx->b);
|
||||
}
|
||||
|
||||
/* Re-enable render condition. */
|
||||
if (ctx->b.saved_render_cond) {
|
||||
ctx->b.b.render_condition(&ctx->b.b, ctx->b.saved_render_cond,
|
||||
ctx->b.saved_render_cond_cond,
|
||||
ctx->b.saved_render_cond_mode);
|
||||
}
|
||||
|
||||
/* Re-emit the draw state. */
|
||||
ctx->last_primitive_type = -1;
|
||||
ctx->last_start_instance = -1;
|
||||
|
||||
@@ -66,38 +66,6 @@ static const struct debug_named_value r600_debug_options[] = {
|
||||
* pipe_context
|
||||
*/
|
||||
|
||||
static void r600_flush(struct pipe_context *ctx, unsigned flags,
|
||||
struct pipe_fence_handle **fence)
|
||||
{
|
||||
struct r600_context *rctx = (struct r600_context *)ctx;
|
||||
struct pipe_query *render_cond = NULL;
|
||||
unsigned render_cond_mode = 0;
|
||||
boolean render_cond_cond = FALSE;
|
||||
|
||||
if (rctx->b.rings.gfx.cs->cdw == rctx->b.initial_gfx_cs_size)
|
||||
return;
|
||||
|
||||
rctx->b.rings.gfx.flushing = true;
|
||||
/* Disable render condition. */
|
||||
if (rctx->b.current_render_cond) {
|
||||
render_cond = rctx->b.current_render_cond;
|
||||
render_cond_cond = rctx->b.current_render_cond_cond;
|
||||
render_cond_mode = rctx->b.current_render_cond_mode;
|
||||
ctx->render_condition(ctx, NULL, FALSE, 0);
|
||||
}
|
||||
|
||||
r600_context_flush(rctx, flags, fence);
|
||||
rctx->b.rings.gfx.flushing = false;
|
||||
r600_begin_new_cs(rctx);
|
||||
|
||||
/* Re-enable render condition. */
|
||||
if (render_cond) {
|
||||
ctx->render_condition(ctx, render_cond, render_cond_cond, render_cond_mode);
|
||||
}
|
||||
|
||||
rctx->b.initial_gfx_cs_size = rctx->b.rings.gfx.cs->cdw;
|
||||
}
|
||||
|
||||
static void r600_flush_from_st(struct pipe_context *ctx,
|
||||
struct pipe_fence_handle **fence,
|
||||
unsigned flags)
|
||||
@@ -114,12 +82,6 @@ static void r600_flush_from_st(struct pipe_context *ctx,
|
||||
rctx->b.rings.gfx.flush(rctx, fflags, fence);
|
||||
}
|
||||
|
||||
static void r600_flush_gfx_ring(void *ctx, unsigned flags,
|
||||
struct pipe_fence_handle **fence)
|
||||
{
|
||||
r600_flush((struct pipe_context*)ctx, flags, fence);
|
||||
}
|
||||
|
||||
static void r600_destroy_context(struct pipe_context *context)
|
||||
{
|
||||
struct r600_context *rctx = (struct r600_context *)context;
|
||||
@@ -233,11 +195,10 @@ static struct pipe_context *r600_create_context(struct pipe_screen *screen, void
|
||||
}
|
||||
|
||||
rctx->b.rings.gfx.cs = ws->cs_create(ws, RING_GFX,
|
||||
r600_flush_gfx_ring, rctx,
|
||||
r600_context_gfx_flush, rctx,
|
||||
rscreen->b.trace_bo ?
|
||||
rscreen->b.trace_bo->cs_buf : NULL);
|
||||
rctx->b.rings.gfx.flush = r600_flush_gfx_ring;
|
||||
rctx->b.rings.gfx.flushing = false;
|
||||
rctx->b.rings.gfx.flush = r600_context_gfx_flush;
|
||||
|
||||
rctx->allocator_fetch_shader = u_suballocator_create(&rctx->b.b, 64 * 1024, 256,
|
||||
0, PIPE_USAGE_DEFAULT, FALSE);
|
||||
|
||||
@@ -582,8 +582,8 @@ boolean r600_is_format_supported(struct pipe_screen *screen,
|
||||
void r600_update_db_shader_control(struct r600_context * rctx);
|
||||
|
||||
/* r600_hw_context.c */
|
||||
void r600_context_flush(struct r600_context *ctx, unsigned flags,
|
||||
struct pipe_fence_handle **fence);
|
||||
void r600_context_gfx_flush(void *context, unsigned flags,
|
||||
struct pipe_fence_handle **fence);
|
||||
void r600_begin_new_cs(struct r600_context *ctx);
|
||||
void r600_flush_emit(struct r600_context *ctx);
|
||||
void r600_need_cs_space(struct r600_context *ctx, unsigned num_dw, boolean count_draw_in);
|
||||
|
||||
Reference in New Issue
Block a user