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

Marek Olšák maraeo at gmail.com
Wed Aug 27 05:48:33 PDT 2014


If I wanted to send my email to mesa-stable, I would send it to
mesa-stable. If I want to mark a commit as a candidate for stable, I
add the Cc line, which doesn't have to be done for emails sent to
mesa-stable.

I set up git to ignore email addresses in my commit messages.

Marek

On Tue, Aug 26, 2014 at 10:57 PM, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> 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