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

Iago Toral itoral at igalia.com
Wed Sep 30 00:18:23 PDT 2015


On Wed, 2015-09-30 at 02:34 -0400, Ilia Mirkin wrote:
> 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?

By the way, in i965 this is not a problem either, we have access to the
gl_shader struct from the compiler backend, so if we need to translate
from the shared index space to a separate space we have NumUniformBlocks
available to do that. From your words I get that you can't access this
information from the compiler backend, right? In that case, wouldn't it
be possible to translate the index during the GLSL IR -> TGSI
conversion?

Iago

> > 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.



More information about the mesa-dev mailing list