<div dir="ltr">On 8 April 2013 10:37, Ian Romanick <span dir="ltr"><<a href="mailto:idr@freedesktop.org" target="_blank">idr@freedesktop.org</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div>On 04/07/2013 06:42 AM, Paul Berry wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The call to emit_shader_time_end() before the second URB write was<br>
conditioned with "if (eot)", but eot is always false in this code<br>
path, so emit_shader_time_end() was never being called for vertex<br>
shaders that performed 2 URB writes.<br>
</blockquote>
<br></div>
I had to look at that code for way to long to convince myself that your patch was correct.  I think it might be better to remove both the conditional emit_shader_time_end calls and put this block of code at the very bottom (unless emit_shader_time_end has some side effect that I don't see):<br>


<br>
   if (inst->eot) {<br>
      if (INTEL_DEBUG & DEBUG_SHADER_TIME)<br>
         emit_shader_time_end();<br>
   }<br>
<br>
Or does the last URB write have to be the last instruction?</blockquote><div><br></div><div>The last URB write has to be the last instruction, since it's actually the URB write that ends the thread ("eot" stands for "end of thread").<br>

<br></div><div>For GL 3.2 we're going to need to refactor this function to use a loop, since GL 3.2 doubles the number of varying components permitted for VS->GS linkage (so we'll need up to 4 URB writes instead of 2).  I think once that change is made the function is going to be a lot easier to follow.  Maybe I should just do that refactor now?<br>
</div></div></div></div>