From 7bbcb6ac6cf3e09da4387bf9c658c3aa1270db9a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolai=20H=C3=A4hnle?= Date: Tue, 26 Sep 2017 17:57:59 +0200 Subject: [PATCH] radeonsi: move current_rast_prim into si_context MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit v2: rebase fixes Reviewed-by: Marek Olšák --- src/gallium/drivers/radeon/r600_pipe_common.c | 4 ---- src/gallium/drivers/radeon/r600_pipe_common.h | 1 - src/gallium/drivers/radeonsi/si_pipe.h | 1 + src/gallium/drivers/radeonsi/si_state_draw.c | 10 +++++----- src/gallium/drivers/radeonsi/si_state_shaders.c | 8 ++++---- src/gallium/drivers/radeonsi/si_state_viewport.c | 2 +- 6 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c index d50982b..1aceb5b 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.c +++ b/src/gallium/drivers/radeon/r600_pipe_common.c @@ -724,10 +724,6 @@ bool si_common_context_init(struct r600_common_context *rctx, rctx->dma_clear_buffer = r600_dma_clear_buffer_fallback; rctx->b.buffer_subdata = si_buffer_subdata; - /* Set a reasonable default to avoid a performance regression in r600 - * on stable branches. */ - rctx->current_rast_prim = PIPE_PRIM_TRIANGLES; - if (rscreen->info.drm_major == 2 && rscreen->info.drm_minor >= 43) { rctx->b.get_device_reset_status = r600_get_reset_status; rctx->gpu_reset_counter = diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h index 1558943..597ff02 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.h +++ b/src/gallium/drivers/radeon/r600_pipe_common.h @@ -571,7 +571,6 @@ struct r600_common_context { /* Additional context states. */ unsigned flags; /* flush flags */ - enum pipe_prim_type current_rast_prim; /* primitive type after TES, GS */ /* Queries. */ /* Maintain the list of active queries for pausing between IBs. */ diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index b3d5b18..e0759ed 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -433,6 +433,7 @@ struct si_context { unsigned last_sc_line_stipple; unsigned current_vs_state; unsigned last_vs_state; + enum pipe_prim_type current_rast_prim; /* primitive type after TES, GS */ /* Scratch buffer */ struct r600_atom scratch_state; diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c b/src/gallium/drivers/radeonsi/si_state_draw.c index 9a6c9c8..2d4c9c5 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.c +++ b/src/gallium/drivers/radeonsi/si_state_draw.c @@ -531,7 +531,7 @@ static unsigned si_get_ia_multi_vgt_param(struct si_context *sctx, static void si_emit_rasterizer_prim_state(struct si_context *sctx) { struct radeon_winsys_cs *cs = sctx->b.gfx.cs; - enum pipe_prim_type rast_prim = sctx->b.current_rast_prim; + enum pipe_prim_type rast_prim = sctx->current_rast_prim; struct si_state_rasterizer *rs = sctx->emitted.named.rasterizer; /* Skip this if not rendering lines. */ @@ -581,7 +581,7 @@ static void si_emit_draw_registers(struct si_context *sctx, { struct radeon_winsys_cs *cs = sctx->b.gfx.cs; unsigned prim = si_conv_pipe_prim(info->mode); - unsigned gs_out_prim = si_conv_prim_to_gs_out(sctx->b.current_rast_prim); + unsigned gs_out_prim = si_conv_prim_to_gs_out(sctx->current_rast_prim); unsigned ia_multi_vgt_param; ia_multi_vgt_param = si_get_ia_multi_vgt_param(sctx, info, num_patches); @@ -1257,15 +1257,15 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info) } else rast_prim = info->mode; - if (rast_prim != sctx->b.current_rast_prim) { - bool old_is_poly = sctx->b.current_rast_prim >= PIPE_PRIM_TRIANGLES; + if (rast_prim != sctx->current_rast_prim) { + bool old_is_poly = sctx->current_rast_prim >= PIPE_PRIM_TRIANGLES; bool new_is_poly = rast_prim >= PIPE_PRIM_TRIANGLES; if (old_is_poly != new_is_poly) { sctx->scissors.dirty_mask = (1 << SI_MAX_VIEWPORTS) - 1; si_mark_atom_dirty(sctx, &sctx->scissors.atom); } - sctx->b.current_rast_prim = rast_prim; + sctx->current_rast_prim = rast_prim; sctx->do_update_shaders = true; } diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index 42814d9..7619e2f 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -1408,10 +1408,10 @@ static inline void si_shader_selector_key(struct pipe_context *ctx, } if (rs) { - bool is_poly = (sctx->b.current_rast_prim >= PIPE_PRIM_TRIANGLES && - sctx->b.current_rast_prim <= PIPE_PRIM_POLYGON) || - sctx->b.current_rast_prim >= PIPE_PRIM_TRIANGLES_ADJACENCY; - bool is_line = !is_poly && sctx->b.current_rast_prim != PIPE_PRIM_POINTS; + bool is_poly = (sctx->current_rast_prim >= PIPE_PRIM_TRIANGLES && + sctx->current_rast_prim <= PIPE_PRIM_POLYGON) || + sctx->current_rast_prim >= PIPE_PRIM_TRIANGLES_ADJACENCY; + bool is_line = !is_poly && sctx->current_rast_prim != PIPE_PRIM_POINTS; key->part.ps.prolog.color_two_side = rs->two_side && sel->info.colors_read; key->part.ps.prolog.flatshade_colors = rs->flatshade && sel->info.colors_read; diff --git a/src/gallium/drivers/radeonsi/si_state_viewport.c b/src/gallium/drivers/radeonsi/si_state_viewport.c index d462f7d..eb4c00a 100644 --- a/src/gallium/drivers/radeonsi/si_state_viewport.c +++ b/src/gallium/drivers/radeonsi/si_state_viewport.c @@ -186,7 +186,7 @@ static void si_emit_guardband(struct si_context *ctx, discard_x = 1.0; discard_y = 1.0; - if (ctx->b.current_rast_prim < PIPE_PRIM_TRIANGLES) { + if (ctx->current_rast_prim < PIPE_PRIM_TRIANGLES) { /* When rendering wide points or lines, we need to be more * conservative about when to discard them entirely. Since * point size can be determined by the VS output, we basically -- 2.7.4