On Sun, Aug 30, 2015 at 11:28 PM, Grazvydas Ignotas <[email protected]> wrote:
> On Sun, Aug 30, 2015 at 10:11 PM, Marek Olšák <[email protected]> wrote:
> ...
>> diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c 
>> b/src/gallium/drivers/radeonsi/si_state_draw.c
>> index 2ff58d1..81575b5 100644
>> --- a/src/gallium/drivers/radeonsi/si_state_draw.c
>> +++ b/src/gallium/drivers/radeonsi/si_state_draw.c
>> @@ -729,7 +729,7 @@ void si_draw_vbo(struct pipe_context *ctx, const struct 
>> pipe_draw_info *info)
>>  {
>>         struct si_context *sctx = (struct si_context *)ctx;
>>         struct pipe_index_buffer ib = {};
>> -       unsigned i;
>> +       unsigned mask;
>>
>>         if (!info->count && !info->indirect &&
>>             (info->indexed || !info->count_from_stream_output))
>> @@ -821,12 +821,13 @@ void si_draw_vbo(struct pipe_context *ctx, const 
>> struct pipe_draw_info *info)
>>         si_need_cs_space(sctx, 0, TRUE);
>>
>>         /* Emit states. */
>> -       for (i = 0; i < SI_NUM_ATOMS; i++) {
>> -               if (sctx->atoms.array[i]->dirty) {
>> -                       sctx->atoms.array[i]->emit(&sctx->b, 
>> sctx->atoms.array[i]);
>> -                       sctx->atoms.array[i]->dirty = false;
>> -               }
>> +       mask = sctx->dirty_atoms;
>> +       while (mask) {
>> +               struct r600_atom *atom = 
>> sctx->atoms.array[u_bit_scan(&mask)];
>> +
>> +               atom->emit(&sctx->b, atom);
>>         }
>> +       sctx->dirty_atoms = 0;
>
> It looks like sctx->atoms.array[i]->dirty is never cleared? Maybe we
> should get rid of it then?

Yes, we can get rid of it.

>
> I wonder if multiple threads can end up touching the atoms? If so, we
> might need to use atomic bit set/clear (__sync_or_and_fetch(), etc)
> and something to read+clear sctx->dirty_atoms atomically above (xchg
> instruction, not sure which helper in mesa could be used for this).

No, a context can only be used by one thread at a time. Same as OpenGL.

Marek
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to