<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 29, 2015 at 1:56 PM, Ilia Mirkin <span dir="ltr"><<a href="mailto:imirkin@alum.mit.edu" target="_blank">imirkin@alum.mit.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Tue, Dec 29, 2015 at 4:52 PM, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>> wrote:<br>
><br>
><br>
> On Tue, Dec 29, 2015 at 1:50 PM, Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu">imirkin@alum.mit.edu</a>> wrote:<br>
>><br>
>> On Tue, Dec 29, 2015 at 4:45 PM, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
>> wrote:<br>
>> ><br>
>> ><br>
>> > On Mon, Dec 28, 2015 at 11:06 AM, Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu">imirkin@alum.mit.edu</a>><br>
>> > wrote:<br>
>> >><br>
>> >> Currently any access params (coherent/volatile/restrict) are being lost<br>
>> >> when lowering to the ssbo load/store intrinsics. Keep track of the<br>
>> >> variable being used, and bake its access params in as the last arg of<br>
>> >> the load/store intrinsics.<br>
>> >><br>
>> >> Signed-off-by: Ilia Mirkin <<a href="mailto:imirkin@alum.mit.edu">imirkin@alum.mit.edu</a>><br>
>> >> ---<br>
>> >><br>
>> >> This is RFC because there are still no users, but I'm working on that.<br>
>> >> Don't<br>
>> >> want to be going in the completely wrong direction though...<br>
>> >><br>
>> >>  src/glsl/lower_ubo_reference.cpp | 22 ++++++++++++++++++++++<br>
>> >>  1 file changed, 22 insertions(+)<br>
>> >><br>
>> >> diff --git a/src/glsl/lower_ubo_reference.cpp<br>
>> >> b/src/glsl/lower_ubo_reference.cpp<br>
>> >> index a172054..5b3f523 100644<br>
>> >> --- a/src/glsl/lower_ubo_reference.cpp<br>
>> >> +++ b/src/glsl/lower_ubo_reference.cpp<br>
>> >> @@ -104,6 +104,7 @@ public:<br>
>> >><br>
>> >>     struct gl_shader *shader;<br>
>> >>     struct gl_uniform_buffer_variable *ubo_var;<br>
>> >> +   ir_variable *variable;<br>
>> >>     ir_rvalue *uniform_block;<br>
>> >>     bool progress;<br>
>> >>  };<br>
>> >> @@ -317,6 +318,7 @@<br>
>> >> lower_ubo_reference_visitor::handle_rvalue(ir_rvalue<br>
>> >> **rvalue)<br>
>> >>     this->buffer_access_type =<br>
>> >>        var->is_in_shader_storage_block() ?<br>
>> >>        ssbo_load_access : ubo_load_access;<br>
>> >> +   this->variable = var;<br>
>> >><br>
>> >>     /* Compute the offset to the start if the dereference as well as<br>
>> >> other<br>
>> >>      * information we need to configure the write<br>
>> >> @@ -370,6 +372,13 @@ shader_storage_buffer_object(const<br>
>> >> _mesa_glsl_parse_state *state)<br>
>> >>     return state->ARB_shader_storage_buffer_object_enable;<br>
>> >>  }<br>
>> >><br>
>> >> +static uint32_t ssbo_access_params(const ir_variable *var)<br>
>> >> +{<br>
>> >> +   return (var->data.image_coherent << 0) |<br>
>> >> +          (var->data.image_volatile << 1) |<br>
>> >> +          (var->data.image_restrict << 2);<br>
>> ><br>
>> ><br>
>> > Do 0, 1, and 2 have some special meaning I should know about?  I suggest<br>
>> > we<br>
>> > add an enum to shader_enums.h.<br>
>><br>
>> Do you mean a struct with a bitfield? That'd work for me.<br>
><br>
> Well, if you want to pack it into a function argument you intend to bake<br>
> into the shader source, that won't work so well.  It needs to be an integer<br>
> in the end.  If you want to do a union and a bitfield, that's fine, but I<br>
> think an enum is more customary.<br>
<br>
</div></div>Er right... I want an integer in the end. But I want all 3 values to<br>
be packed into it... I could add defines for 1, 2, and 4, like<br>
SSBO_COHERENT, SSBO_VOLATILE, SSBO_RESTRICT. An enum seems wrong since<br>
it's a bitfield with multiple possible bits set, not an enumeration.<span class="HOEnZb"><font color="#888888"><br></font></span></blockquote><div><br></div><div>Right.  Although gdb does nice things for you if you use an enum with values 1, 2, and 4.  That said, it seems like what we want is some "qualifiers" bitfield enum and then just get rid of the var->data.image_foo things.<br></div><div>--Jason <br></div></div><br></div></div>