[Mesa-dev] [PATCH 4/6] radeonsi: save scissor state and sample mask for u_blitter

Emil Velikov emil.l.velikov at gmail.com
Tue Aug 26 13:57:44 PDT 2014


On 18/08/14 22:52, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
> 
Hi Marek,

Going through the mesa 10.2 patches queue and I cannot see this one ever
making to the list despite the Cc tag. Are you sending the patches with
--suppress-cc by any chance ?

Thanks
Emil
> Cc: mesa-stable at lists.freedesktop.org
> ---
>  src/gallium/drivers/radeonsi/si_blit.c  |  7 +++++++
>  src/gallium/drivers/radeonsi/si_state.c | 16 ++++++++++------
>  src/gallium/drivers/radeonsi/si_state.h | 14 ++++++++++++--
>  3 files changed, 29 insertions(+), 8 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeonsi/si_blit.c b/src/gallium/drivers/radeonsi/si_blit.c
> index bc31dfd..9a7a2fe 100644
> --- a/src/gallium/drivers/radeonsi/si_blit.c
> +++ b/src/gallium/drivers/radeonsi/si_blit.c
> @@ -59,9 +59,16 @@ static void si_blitter_begin(struct pipe_context *ctx, enum si_blitter_op op)
>  	util_blitter_save_geometry_shader(sctx->blitter, sctx->gs_shader);
>  	util_blitter_save_vertex_shader(sctx->blitter, sctx->vs_shader);
>  	util_blitter_save_vertex_elements(sctx->blitter, sctx->vertex_elements);
> +	if (sctx->queued.named.sample_mask) {
> +		util_blitter_save_sample_mask(sctx->blitter,
> +					      sctx->queued.named.sample_mask->sample_mask);
> +	}
>  	if (sctx->queued.named.viewport) {
>  		util_blitter_save_viewport(sctx->blitter, &sctx->queued.named.viewport->viewport);
>  	}
> +	if (sctx->queued.named.scissor) {
> +		util_blitter_save_scissor(sctx->blitter, &sctx->queued.named.scissor->scissor);
> +	}
>  	util_blitter_save_vertex_buffer_slot(sctx->blitter, sctx->vertex_buffer);
>  	util_blitter_save_so_targets(sctx->blitter, sctx->b.streamout.num_targets,
>  				     (struct pipe_stream_output_target**)sctx->b.streamout.targets);
> diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
> index 98c19d6..fc928f3 100644
> --- a/src/gallium/drivers/radeonsi/si_state.c
> +++ b/src/gallium/drivers/radeonsi/si_state.c
> @@ -458,18 +458,20 @@ static void si_set_scissor_states(struct pipe_context *ctx,
>                                    const struct pipe_scissor_state *state)
>  {
>  	struct si_context *sctx = (struct si_context *)ctx;
> -	struct si_pm4_state *pm4 = si_pm4_alloc_state(sctx);
> +	struct si_state_scissor *scissor = CALLOC_STRUCT(si_state_scissor);
> +	struct si_pm4_state *pm4 = &scissor->pm4;
>  
> -	if (pm4 == NULL)
> +	if (scissor == NULL)
>  		return;
>  
> +	scissor->scissor = *state;
>  	si_pm4_set_reg(pm4, R_028250_PA_SC_VPORT_SCISSOR_0_TL,
>  		       S_028250_TL_X(state->minx) | S_028250_TL_Y(state->miny) |
>  		       S_028250_WINDOW_OFFSET_DISABLE(1));
>  	si_pm4_set_reg(pm4, R_028254_PA_SC_VPORT_SCISSOR_0_BR,
>  		       S_028254_BR_X(state->maxx) | S_028254_BR_Y(state->maxy));
>  
> -	si_pm4_set_state(sctx, scissor, pm4);
> +	si_pm4_set_state(sctx, scissor, scissor);
>  }
>  
>  static void si_set_viewport_states(struct pipe_context *ctx,
> @@ -2774,16 +2776,18 @@ static void si_bind_sampler_states(struct pipe_context *ctx, unsigned shader,
>  static void si_set_sample_mask(struct pipe_context *ctx, unsigned sample_mask)
>  {
>  	struct si_context *sctx = (struct si_context *)ctx;
> -	struct si_pm4_state *pm4 = si_pm4_alloc_state(sctx);
> +	struct si_state_sample_mask *state = CALLOC_STRUCT(si_state_sample_mask);
> +	struct si_pm4_state *pm4 = &state->pm4;
>  	uint16_t mask = sample_mask;
>  
> -        if (pm4 == NULL)
> +        if (state == NULL)
>                  return;
>  
> +	state->sample_mask = mask;
>  	si_pm4_set_reg(pm4, R_028C38_PA_SC_AA_MASK_X0Y0_X1Y0, mask | (mask << 16));
>  	si_pm4_set_reg(pm4, R_028C3C_PA_SC_AA_MASK_X0Y1_X1Y1, mask | (mask << 16));
>  
> -	si_pm4_set_state(sctx, sample_mask, pm4);
> +	si_pm4_set_state(sctx, sample_mask, state);
>  }
>  
>  static void si_delete_sampler_state(struct pipe_context *ctx, void *state)
> diff --git a/src/gallium/drivers/radeonsi/si_state.h b/src/gallium/drivers/radeonsi/si_state.h
> index 82bea79..ce18a27 100644
> --- a/src/gallium/drivers/radeonsi/si_state.h
> +++ b/src/gallium/drivers/radeonsi/si_state.h
> @@ -38,6 +38,16 @@ struct si_state_blend {
>  	bool			alpha_to_one;
>  };
>  
> +struct si_state_sample_mask {
> +	struct si_pm4_state	pm4;
> +	uint16_t		sample_mask;
> +};
> +
> +struct si_state_scissor {
> +	struct si_pm4_state		pm4;
> +	struct pipe_scissor_state	scissor;
> +};
> +
>  struct si_state_viewport {
>  	struct si_pm4_state		pm4;
>  	struct pipe_viewport_state	viewport;
> @@ -82,8 +92,8 @@ union si_state {
>  		struct si_state_blend		*blend;
>  		struct si_pm4_state		*blend_color;
>  		struct si_pm4_state		*clip;
> -		struct si_pm4_state		*sample_mask;
> -		struct si_pm4_state		*scissor;
> +		struct si_state_sample_mask	*sample_mask;
> +		struct si_state_scissor		*scissor;
>  		struct si_state_viewport	*viewport;
>  		struct si_state_rasterizer	*rasterizer;
>  		struct si_state_dsa		*dsa;
> 



More information about the mesa-dev mailing list