<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 6, 2015 at 1:46 PM, Chris Forbes <span dir="ltr"><<a href="mailto:chrisf@ijw.co.nz" target="_blank">chrisf@ijw.co.nz</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Worth pointing out that when tessellation gets ported to NIR, output<br>
reads are a real thing, and can't be lowered away like we do for other<br>
stages (they allow cross-invocation communication, so have to actually<br>
read back from the URB on i965)<br></blockquote><div><br></div><div>Yuck!  In that case, we'll have to handle those somehow.  Cross that bridge when we come to it?  For now, passes depend on outputs being write-only.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><br>
On Wed, Jan 7, 2015 at 10:43 AM, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>> wrote:<br>
><br>
><br>
> On Sun, Jan 4, 2015 at 8:48 PM, Connor Abbott <<a href="mailto:cwabbott0@gmail.com">cwabbott0@gmail.com</a>> wrote:<br>
>><br>
>> I'm not so sure how I feel about checking that outputs are write-only...<br>
>> eventually we'll want to do lower_input_reads in NIR itself, at which point<br>
>> we'll need to remove that part from the validator. At the same time, for now<br>
>> this is somewhat useful. I'm just not sure if it's worth it (making sure<br>
>> inputs are read-only definitely is, though).<br>
><br>
><br>
> Yes, we may want to do that lowering in NIR and I've already written the<br>
> pass.  It's lying around somewhere in my git tree.  However, the only<br>
> producers of NIR that we currently have are GLSL IR which already has the<br>
> pass, and TGSI which already has the outputs-are-write-only restriction.<br>
> For now, I like this bit of validation as it keeps us from breaking other<br>
> passes that depend on this.<br>
><br>
> Do we want this in the end?  Absoltuely!  We do not want to deal with this<br>
> in nir_lower_variables.  I tried to but it's an absolute pain.  It's much<br>
> easier to just remove the copies.<br>
><br>
>><br>
>><br>
>> On Tue, Dec 16, 2014 at 1:11 AM, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
>> wrote:<br>
>>><br>
>>> ---<br>
>>>  src/glsl/nir/nir_validate.c | 23 +++++++++++++++++++++++<br>
>>>  1 file changed, 23 insertions(+)<br>
>>><br>
>>> diff --git a/src/glsl/nir/nir_validate.c b/src/glsl/nir/nir_validate.c<br>
>>> index 80faa15..b8ef802 100644<br>
>>> --- a/src/glsl/nir/nir_validate.c<br>
>>> +++ b/src/glsl/nir/nir_validate.c<br>
>>> @@ -337,6 +337,29 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr,<br>
>>> validate_state *state)<br>
>>>        validate_deref_var(instr->variables[i], state);<br>
>>>     }<br>
>>><br>
>>> +   switch (instr->intrinsic) {<br>
>>> +   case nir_intrinsic_load_var_vec1:<br>
>>> +   case nir_intrinsic_load_var_vec2:<br>
>>> +   case nir_intrinsic_load_var_vec3:<br>
>>> +   case nir_intrinsic_load_var_vec4:<br>
>>> +      assert(instr->variables[0]->var->data.mode != nir_var_shader_out);<br>
>>> +      break;<br>
>>> +   case nir_intrinsic_store_var_vec1:<br>
>>> +   case nir_intrinsic_store_var_vec2:<br>
>>> +   case nir_intrinsic_store_var_vec3:<br>
>>> +   case nir_intrinsic_store_var_vec4:<br>
>>> +      assert(instr->variables[0]->var->data.mode != nir_var_shader_in &&<br>
>>> +             instr->variables[0]->var->data.mode != nir_var_uniform);<br>
>>> +      break;<br>
>>> +   case nir_intrinsic_copy_var:<br>
>>> +      assert(instr->variables[0]->var->data.mode != nir_var_shader_in &&<br>
>>> +             instr->variables[0]->var->data.mode != nir_var_uniform);<br>
>>> +      assert(instr->variables[1]->var->data.mode != nir_var_shader_out);<br>
>>> +      break;<br>
>>> +   default:<br>
>>> +      break;<br>
>>> +   }<br>
>>> +<br>
>>>     if (instr->has_predicate)<br>
>>>        validate_src(&instr->predicate, state);<br>
>>>  }<br>
>>> --<br>
>>> 2.2.0<br>
>>><br>
>>> _______________________________________________<br>
>>> mesa-dev mailing list<br>
>>> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
>>> <a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
>><br>
>><br>
><br>
><br>
> _______________________________________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
><br>
</div></div></blockquote></div><br></div></div>