[Mesa-dev] [PATCH 3/3] radeonsi: remove cb0_is_integer handling

Nicolai Hähnle nhaehnle at gmail.com
Thu Sep 29 09:23:29 UTC 2016


This patch is

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

though I wonder if it breaks nine. If it does, it should be up to nine 
to be fixed similarly to st/mesa, though.

On 28.09.2016 15:44, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> st/mesa does this for us.
> ---
>  src/gallium/drivers/radeonsi/si_pipe.h          | 1 -
>  src/gallium/drivers/radeonsi/si_state.c         | 9 +--------
>  src/gallium/drivers/radeonsi/si_state_shaders.c | 6 ++----
>  3 files changed, 3 insertions(+), 13 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
> index 1080e72..ef25df8 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.h
> +++ b/src/gallium/drivers/radeonsi/si_pipe.h
> @@ -158,21 +158,20 @@ struct si_images_info {
>  	struct pipe_image_view		views[SI_NUM_IMAGES];
>  	uint32_t			compressed_colortex_mask;
>  	unsigned			enabled_mask;
>  };
>
>  struct si_framebuffer {
>  	struct r600_atom		atom;
>  	struct pipe_framebuffer_state	state;
>  	unsigned			nr_samples;
>  	unsigned			log_samples;
> -	unsigned			cb0_is_integer;
>  	unsigned			compressed_cb_mask;
>  	unsigned			spi_shader_col_format;
>  	unsigned			spi_shader_col_format_alpha;
>  	unsigned			spi_shader_col_format_blend;
>  	unsigned			spi_shader_col_format_blend_alpha;
>  	unsigned			color_is_int8; /* bitmask */
>  	unsigned			dirty_cbufs;
>  	bool				dirty_zsbuf;
>  	bool				any_dst_linear;
>  };
> diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
> index 1703e42..1d6bf06 100644
> --- a/src/gallium/drivers/radeonsi/si_state.c
> +++ b/src/gallium/drivers/radeonsi/si_state.c
> @@ -1125,22 +1125,21 @@ static void si_emit_db_render_state(struct si_context *sctx, struct r600_atom *s
>  			radeon_emit(cs, S_028004_ZPASS_INCREMENT_DISABLE(1));
>  		}
>  	}
>
>  	/* DB_RENDER_OVERRIDE2 */
>  	radeon_set_context_reg(cs, R_028010_DB_RENDER_OVERRIDE2,
>  		S_028010_DISABLE_ZMASK_EXPCLEAR_OPTIMIZATION(sctx->db_depth_disable_expclear) |
>  		S_028010_DISABLE_SMEM_EXPCLEAR_OPTIMIZATION(sctx->db_stencil_disable_expclear) |
>  		S_028010_DECOMPRESS_Z_ON_FLUSH(sctx->framebuffer.nr_samples >= 4));
>
> -	db_shader_control = S_02880C_ALPHA_TO_MASK_DISABLE(sctx->framebuffer.cb0_is_integer) |
> -		            sctx->ps_db_shader_control;
> +	db_shader_control = sctx->ps_db_shader_control;
>
>  	/* Bug workaround for smoothing (overrasterization) on SI. */
>  	if (sctx->b.chip_class == SI && sctx->smoothing_enabled) {
>  		db_shader_control &= C_02880C_Z_ORDER;
>  		db_shader_control |= S_02880C_Z_ORDER(V_02880C_LATE_Z);
>  	}
>
>  	/* Disable the gl_SampleMask fragment shader output if MSAA is disabled. */
>  	if (sctx->framebuffer.nr_samples <= 1 || (rs && !rs->multisample_enable))
>  		db_shader_control &= C_02880C_MASK_EXPORT_ENABLE;
> @@ -2245,21 +2244,20 @@ static void si_dec_framebuffer_counters(const struct pipe_framebuffer_state *sta
>  	}
>  }
>
>  static void si_set_framebuffer_state(struct pipe_context *ctx,
>  				     const struct pipe_framebuffer_state *state)
>  {
>  	struct si_context *sctx = (struct si_context *)ctx;
>  	struct pipe_constant_buffer constbuf = {0};
>  	struct r600_surface *surf = NULL;
>  	struct r600_texture *rtex;
> -	bool old_cb0_is_integer = sctx->framebuffer.cb0_is_integer;
>  	bool old_any_dst_linear = sctx->framebuffer.any_dst_linear;
>  	unsigned old_nr_samples = sctx->framebuffer.nr_samples;
>  	int i;
>
>  	for (i = 0; i < sctx->framebuffer.state.nr_cbufs; i++) {
>  		if (!sctx->framebuffer.state.cbufs[i])
>  			continue;
>
>  		rtex = (struct r600_texture*)sctx->framebuffer.state.cbufs[i]->texture;
>  		if (rtex->dcc_gather_statistics)
> @@ -2290,27 +2288,22 @@ static void si_set_framebuffer_state(struct pipe_context *ctx,
>
>  	sctx->framebuffer.spi_shader_col_format = 0;
>  	sctx->framebuffer.spi_shader_col_format_alpha = 0;
>  	sctx->framebuffer.spi_shader_col_format_blend = 0;
>  	sctx->framebuffer.spi_shader_col_format_blend_alpha = 0;
>  	sctx->framebuffer.color_is_int8 = 0;
>
>  	sctx->framebuffer.compressed_cb_mask = 0;
>  	sctx->framebuffer.nr_samples = util_framebuffer_get_num_samples(state);
>  	sctx->framebuffer.log_samples = util_logbase2(sctx->framebuffer.nr_samples);
> -	sctx->framebuffer.cb0_is_integer = state->nr_cbufs && state->cbufs[0] &&
> -				  util_format_is_pure_integer(state->cbufs[0]->format);
>  	sctx->framebuffer.any_dst_linear = false;
>
> -	if (sctx->framebuffer.cb0_is_integer != old_cb0_is_integer)
> -		si_mark_atom_dirty(sctx, &sctx->db_render_state);
> -
>  	for (i = 0; i < state->nr_cbufs; i++) {
>  		if (!state->cbufs[i])
>  			continue;
>
>  		surf = (struct r600_surface*)state->cbufs[i];
>  		rtex = (struct r600_texture*)surf->base.texture;
>
>  		if (!surf->color_initialized) {
>  			si_initialize_color_surface(sctx, surf);
>  		}
> diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
> index 816aadc..5274239 100644
> --- a/src/gallium/drivers/radeonsi/si_state_shaders.c
> +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
> @@ -821,22 +821,21 @@ static void si_shader_init_pm4_state(struct si_screen *sscreen,
>  		si_shader_ps(shader);
>  		break;
>  	default:
>  		assert(0);
>  	}
>  }
>
>  static unsigned si_get_alpha_test_func(struct si_context *sctx)
>  {
>  	/* Alpha-test should be disabled if colorbuffer 0 is integer. */
> -	if (sctx->queued.named.dsa &&
> -	    !sctx->framebuffer.cb0_is_integer)
> +	if (sctx->queued.named.dsa)
>  		return sctx->queued.named.dsa->alpha_func;
>
>  	return PIPE_FUNC_ALWAYS;
>  }
>
>  /* Compute the key for the hw shader variant */
>  static inline void si_shader_selector_key(struct pipe_context *ctx,
>  					  struct si_shader_selector *sel,
>  					  union si_shader_key *key)
>  {
> @@ -933,22 +932,21 @@ static inline void si_shader_selector_key(struct pipe_context *ctx,
>  			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->ps.prolog.color_two_side = rs->two_side && sel->info.colors_read;
>  			key->ps.prolog.flatshade_colors = rs->flatshade && sel->info.colors_read;
>
>  			if (sctx->queued.named.blend) {
>  				key->ps.epilog.alpha_to_one = sctx->queued.named.blend->alpha_to_one &&
> -							      rs->multisample_enable &&
> -							      !sctx->framebuffer.cb0_is_integer;
> +							      rs->multisample_enable;
>  			}
>
>  			key->ps.prolog.poly_stipple = rs->poly_stipple_enable && is_poly;
>  			key->ps.epilog.poly_line_smoothing = ((is_poly && rs->poly_smooth) ||
>  							      (is_line && rs->line_smooth)) &&
>  							     sctx->framebuffer.nr_samples <= 1;
>  			key->ps.epilog.clamp_color = rs->clamp_fragment_color;
>
>  			if (rs->force_persample_interp &&
>  			    rs->multisample_enable &&
>


More information about the mesa-dev mailing list