On 6 December 2011 11:53, Eric Anholt <span dir="ltr">&lt;<a href="mailto:eric@anholt.net">eric@anholt.net</a>&gt;</span> wrote:<br><div class="gmail_quote"><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, 6 Dec 2011 08:17:57 -0800, Paul Berry &lt;<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>&gt; wrote:<br>
&gt; On 5 December 2011 14:57, Eric Anholt &lt;<a href="mailto:eric@anholt.net">eric@anholt.net</a>&gt; wrote:<br>
&gt;<br>
&gt; &gt; On Mon,  5 Dec 2011 09:40:50 -0800, Paul Berry &lt;<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>&gt;<br>
&gt; &gt; wrote:<br>
&gt; &gt; &gt; From: Kenneth Graunke &lt;<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>&gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; The 50/50 split is just an attempt to get things working.  We likely<br>
&gt; &gt; &gt; want to tune this, and probably want to avoid allocating the GS any<br>
&gt; &gt; &gt; space if we&#39;re not using it.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; For now, this is good enough.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Signed-off-by: Kenneth Graunke &lt;<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>&gt;<br>
&gt; &gt;<br>
&gt; &gt; This should be changed to not take up URB space for non-GS mode.<br>
&gt; &gt;<br>
&gt;<br>
&gt; In the long term, I agree.  How critical do you think it is to make this<br>
&gt; change in this patch series?  The reason I ask is that there is this<br>
&gt; enigmatic comment in the Sandy Bridge PRM (vol 2 part 1, 1.4.7 3DSTATE_URB,<br>
&gt; p27, or equivalently in the BSpec vol2a 3D Pipeline - Overview [SNB+] &gt; 3D<br>
&gt; Pipeline &gt; 3D Pipeline State Overview &gt; 3DSTATE_URB DevSNB):<br>
&gt;<br>
&gt; &quot;Because of a urb corruption caused by allocating a previous gsunit’s urb<br>
&gt; entry to vsunit software is<br>
&gt; required to send a “GS NULL Fence”(Send URB fence with VS URB size == 1 and<br>
&gt; GS URB size == 0)<br>
&gt; plus a dummy DRAW call before any case where VS will be taking over GS URB<br>
&gt; space.&quot;<br>
&gt;<br>
&gt; If we change this patch to only allocate URB space to the GS when the GS is<br>
&gt; in use, then I think we have to follow this part of the documentation<br>
&gt; (because when switching out of transform feedback mode we&#39;ll be reassigning<br>
&gt; URB entries from the GS to the VS).  But I don&#39;t know how to interpret<br>
&gt; this, since AFAICT, &quot;URB fence&quot; is a command that doesn&#39;t exist on Sandy<br>
&gt; Bridge.  It&#39;s possible that what they meant to say in that parenthetical<br>
&gt; comment was &quot;Send 3DSTATE_URB with VS URB Entry Allocation Size == 1 and GS<br>
&gt; URB Entry Allocation Size == 0&quot;, but I&#39;m not sure how comfortable I am with<br>
&gt; that level of reinterpretation.<br>
&gt;<br>
&gt; Also, there is a need to send a dummy DRAW call.  Is there existing i965<br>
&gt; code to do this?  I found the documentation for how to do a dummy draw in<br>
&gt; the bspec and it looks pretty simple but I would rather not duplicate<br>
&gt; existing code.<br>
<br>
</div></div>We&#39;ll have to figure it out anyway because the X Server sure isn&#39;t<br>
setting up GS URB space to match ours, and it&#39;s not doing that<br>
workaround.  So, unless pipeline flushes are sufficient (but they<br>
probably are), we&#39;ll need to work it out.  And if pipeline flushes are<br>
sufficient, that seems like a suitable workaround.<br>
<br>
&quot;Dummy draw&quot; is a term I only know from the simulator for handling<br>
pipelining.  There&#39;s no existing code on our side I know of.<br>
</blockquote></div><br>Ok, in v2 of the patch series, I&#39;ll modify this patch so that (a) if the GS is not in use, it gives all of the URB space to the VS, and (b) if the GS has been used since the last pipeline flush, do another flush before issuing any more draws.<br>