<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Apr 20, 2018 at 4:30 PM, Ian Romanick <span dir="ltr"><<a href="mailto:idr@freedesktop.org" target="_blank">idr@freedesktop.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-">On 04/20/2018 11:56 AM, Jason Ekstrand wrote:<br>
> Ugh... I was actually thinking about this the other day.  How did you<br>
> come up with your list of instructions?  Is there some algorithmic way<br>
> to determine it such as sends with no header?<br>
<br>
</span>I just looked through the generator for pseudo-ops that emit explicit<br>
reads of g0.  Since it was a manual process, I may have missed some. :(<br>
I don't know of a way to automate this, but... it may be possible.  Not<br>
sure.<br><div class="gmail-HOEnZb"><div class="gmail-h5"></div></div></blockquote><div><br></div><div>We ran into a similar issue with Dota 2 on Vulkan which was fixed by ff4726077d86800d33520581f154a27dac408588<br><br></div><div>For vec4, this may be a reasonable solution.  I don't like list of instructions in general but I'm a bit more ok with duct tape in vec4.  Adding matt & Ken in case they have opinions.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail-HOEnZb"><div class="gmail-h5">
> On April 20, 2018 08:52:50 "Ian Romanick" <<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a>> wrote:<br>
> <br>
>> From: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com">ian.d.romanick@intel.com</a>><br>
>><br>
>> Otherwise the scheduler can move the writes after the reads.<br>
>><br>
>> Signed-off-by: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com">ian.d.romanick@intel.com</a>><br>
>> Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=95012" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/<wbr>show_bug.cgi?id=95012</a><br>
>> Cc: Mark Janes <<a href="mailto:mark.a.janes@intel.com">mark.a.janes@intel.com</a>><br>
>> Cc: Clayton A Craft <<a href="mailto:clayton.a.craft@intel.com">clayton.a.craft@intel.com</a>><br>
>> ---<br>
>> I'd really like to have this run on the CI with the tests from bugzill<br>
>> #95012 re-enabled.  I don't know how to do this on my own.  This series<br>
>> is also available at:<br>
>><br>
>>    <a href="https://cgit.freedesktop.org/~idr/mesa/log/?h=bug-95012" rel="noreferrer" target="_blank">https://cgit.freedesktop.org/~<wbr>idr/mesa/log/?h=bug-95012</a>.<br>
>><br>
>> src/intel/compiler/brw_ir_<wbr>vec4.h                 | 25<br>
>> ++++++++++++++++++++++++<br>
>> src/intel/compiler/brw_<wbr>schedule_instructions.cpp |  3 +++<br>
>> 2 files changed, 28 insertions(+)<br>
>><br>
>> diff --git a/src/intel/compiler/brw_ir_<wbr>vec4.h<br>
>> b/src/intel/compiler/brw_ir_<wbr>vec4.h<br>
>> index 95c5119c6c0..e401d8b4d16 100644<br>
>> --- a/src/intel/compiler/brw_ir_<wbr>vec4.h<br>
>> +++ b/src/intel/compiler/brw_ir_<wbr>vec4.h<br>
>> @@ -334,6 +334,31 @@ public:<br>
>>                               <wbr>    opcode != BRW_OPCODE_IF &&<br>
>>                               <wbr>    opcode != BRW_OPCODE_WHILE));<br>
>>    }<br>
>> +<br>
>> +   bool reads_g0_implicitly() const<br>
>> +   {<br>
>> +      switch (opcode) {<br>
>> +      case SHADER_OPCODE_TEX:<br>
>> +      case SHADER_OPCODE_TXL:<br>
>> +      case SHADER_OPCODE_TXD:<br>
>> +      case SHADER_OPCODE_TXF:<br>
>> +      case SHADER_OPCODE_TXF_CMS_W:<br>
>> +      case SHADER_OPCODE_TXF_CMS:<br>
>> +      case SHADER_OPCODE_TXF_MCS:<br>
>> +      case SHADER_OPCODE_TXS:<br>
>> +      case SHADER_OPCODE_TG4:<br>
>> +      case SHADER_OPCODE_TG4_OFFSET:<br>
>> +      case SHADER_OPCODE_SAMPLEINFO:<br>
>> +      case VS_OPCODE_PULL_CONSTANT_LOAD:<br>
>> +      case GS_OPCODE_SET_PRIMITIVE_ID:<br>
>> +      case GS_OPCODE_GET_INSTANCE_ID:<br>
>> +      case SHADER_OPCODE_GEN4_SCRATCH_<wbr>READ:<br>
>> +      case SHADER_OPCODE_GEN4_SCRATCH_<wbr>WRITE:<br>
>> +         return true;<br>
>> +      default:<br>
>> +         return false;<br>
>> +      }<br>
>> +   }<br>
>> };<br>
>><br>
>> /**<br>
>> diff --git a/src/intel/compiler/brw_<wbr>schedule_instructions.cpp<br>
>> b/src/intel/compiler/brw_<wbr>schedule_instructions.cpp<br>
>> index fa85045de74..f817142a8b5 100644<br>
>> --- a/src/intel/compiler/brw_<wbr>schedule_instructions.cpp<br>
>> +++ b/src/intel/compiler/brw_<wbr>schedule_instructions.cpp<br>
>> @@ -1267,6 +1267,9 @@ vec4_instruction_scheduler::<wbr>calculate_deps()<br>
>>          }<br>
>>       }<br>
>><br>
>> +      if (inst->reads_g0_implicitly())<br>
>> +         add_dep(last_fixed_grf_write, n);<br>
>> +<br>
>>       if (!inst->is_send_from_grf()) {<br>
>>          for (int i = 0; i < inst->mlen; i++) {<br>
>>             /* It looks like the MRF regs are released in the send<br>
>> -- <br>
>> 2.14.3<br>
>><br>
>> ______________________________<wbr>_________________<br>
>> mesa-dev mailing list<br>
>> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
>> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</div></div></blockquote></div><br></div></div>