<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 29, 2015 at 1:50 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:45 PM, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>> 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>> 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 @@ 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 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 we<br>
> add an enum to shader_enums.h.<br>
<br>
</div></div>Do you mean a struct with a bitfield? That'd work for me.<span class="HOEnZb"><font color="#888888"><br></font></span></blockquote><div><br></div><div>Well, if you want to pack it into a function argument you intend to bake into the shader source, that won't work so well.  It needs to be an integer in the end.  If you want to do a union and a bitfield, that's fine, but I think an enum is more customary. <br></div></div><br></div></div>