[Mesa-dev] SSBO's in UniformBlocks list?

Ilia Mirkin imirkin at alum.mit.edu
Tue Sep 29 23:34:54 PDT 2015


On Wed, Sep 30, 2015 at 2:26 AM, Iago Toral <itoral at igalia.com> wrote:
> On Tue, 2015-09-29 at 11:19 -0400, Ilia Mirkin wrote:
>> On Tue, Sep 29, 2015 at 4:33 AM, Iago Toral <itoral at igalia.com> wrote:
>> > Hi ilia,
>> >
>> > On Tue, 2015-09-29 at 03:53 -0400, Ilia Mirkin wrote:
>> >> Hi Samuel, and any other onlookers,
>> >>
>> >> I was wondering why the decision was made to stick SSBO's onto the
>> >> same list as constbufs. Seems like they're entirely separate entities,
>> >> no? Perhaps I'm missing something?
>> >
>> > The reason for this was that there is a lot of code in the compiler to
>> > handle uniform blocks and all the rules for them and we needed the same
>> > treatment for SSBOs, so that seemed like a reasonable way forward to
>> > reuse a lot of the code in the compiler front end. I think the only
>> > place where we needed to make explicit distinctions is when we check for
>> > resource limits, since these are different for UBOs and SSBOs of course.
>> > Although UBOs and SSBOs are separate entities they have a lot of
>> > similarities too, so that did not look like a terrible idea, considering
>> > the benefits.
>>
>> My concern is around indexing... now the per-stage indices are in the
>> combined UBO/SSBO space -- how do I tease out the individual ones?
>> Easy enough when you can loop over NumUniformBlocks and just count the
>> right type, but what about in the shader, where I get the buffer index
>> in a ir_rvalue?
>
> We assumed that backends could work with a shared index space between
> UBOs and SSBOs. In i965 at least that is not a problem and makes things
> easy: we simply use the block index we get from the IR directly, the
> driver does not use a separate buffer space for them and handles SSBOs
> just the same as UBOs, only that the buffer has different flags.
>
> However, if we think this is not ideal we can look into having separate
> index spaces.

Hrm.... that's definitely not the way I was implementing it in TGSI. I
was going to have a separate thing for buffers, to be used to
implement both ssbo and counters. Also on NVIDIA hardware, constbufs
get special binding points while shader buffers are just addresses
loaded from (ironically) a constbuf. I believe it's a similar
situation on r600-class hardware, not 100% sure about SI.

Cheers,

  -ilia


More information about the mesa-dev mailing list