[Mesa-dev] [PATCH 04/10] radeonsi: move the buffer descriptor to the end of the image descriptor

Marek Olšák maraeo at gmail.com
Sun Feb 1 14:06:04 PST 2015


No. The image descriptor really has 8 dwords, therefore the slot can
contain either a texture or a buffer, but not both.

The "NULL" descriptor is different for buffers and textures, therefore
it seemed textures and buffers couldn't occupy the same slot if we
wanted to have both. Since the last 4 dwords have no effect on a NULL
texture, the descriptor of a NULL buffer can be there. That's the
motivation for moving the buffer descriptor.

Marek

On Sun, Feb 1, 2015 at 6:50 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> On Sun, Feb 1, 2015 at 12:37 PM, Marek Olšák <maraeo at gmail.com> wrote:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> This will allow supporting NULL textures.
>> ---
>>  src/gallium/drivers/radeonsi/si_descriptors.c | 2 +-
>>  src/gallium/drivers/radeonsi/si_pipe.h        | 2 ++
>>  src/gallium/drivers/radeonsi/si_shader.c      | 4 ++--
>>  src/gallium/drivers/radeonsi/si_state.c       | 8 ++++----
>>  4 files changed, 9 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
>> index 573787a..15b4da1 100644
>> --- a/src/gallium/drivers/radeonsi/si_descriptors.c
>> +++ b/src/gallium/drivers/radeonsi/si_descriptors.c
>> @@ -1063,7 +1063,7 @@ static void si_invalidate_buffer(struct pipe_context *ctx, struct pipe_resource
>>         /* Texture buffers - update virtual addresses in sampler view descriptors. */
>>         LIST_FOR_EACH_ENTRY(view, &sctx->b.texture_buffers, list) {
>>                 if (view->base.texture == buf) {
>> -                       si_desc_reset_buffer_offset(ctx, view->state, old_va, buf);
>> +                       si_desc_reset_buffer_offset(ctx, &view->state[4], old_va, buf);
>>                 }
>>         }
>>         /* Texture buffers - update bindings. */
>> diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
>> index b88f154..d2edcdf 100644
>> --- a/src/gallium/drivers/radeonsi/si_pipe.h
>> +++ b/src/gallium/drivers/radeonsi/si_pipe.h
>> @@ -90,6 +90,8 @@ struct si_sampler_view {
>>         struct pipe_sampler_view        base;
>>         struct list_head                list;
>>         struct r600_resource            *resource;
>> +        /* [0..7] = image descriptor
>
> Did you mean 0..3?
>
>> +         * [4..7] = buffer descriptor */
>>         uint32_t                        state[8];
>>         uint32_t                        fmask_state[8];
>>  };


More information about the mesa-dev mailing list