<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 31, 2016 at 7:00 PM, Michel Dänzer <span dir="ltr"><<a href="mailto:michel@daenzer.net" target="_blank">michel@daenzer.net</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="">On 31/08/16 11:21 PM, Jason Ekstrand wrote:<br>
> On Aug 19, 2016 12:07 AM, "Michel Dänzer" <<a href="mailto:michel@daenzer.net">michel@daenzer.net</a><br>
</span><span class="">> <mailto:<a href="mailto:michel@daenzer.net">michel@daenzer.net</a>>> wrote:<br>
>> From: Michel Dänzer <<a href="mailto:michel.daenzer@amd.com">michel.daenzer@amd.com</a><br>
</span>> <mailto:<a href="mailto:michel.daenzer@amd.com">michel.daenzer@amd.com</a><wbr>>><br>
<span class="">>><br>
>> Always use 3 buffers when flipping. With only 2 buffers, we have to wait<br>
>> for a flip to complete (which takes non-0 time even with asynchronous<br>
>> flips) before we can start working on the next frame. We were previously<br>
>> only using 2 buffers for flipping if the X server supports asynchronous<br>
>> flips, even when we're not using asynchronous flips. This could result<br>
>> in bad performance (the referenced bug report is an extreme case, where<br>
>> the inter-frame stalls were preventing the GPU from reaching its maximum<br>
>> clocks).<br>
><br>
> Sorry for the post-push review but I don't usually pay much attention to<br>
> the window system code.  In any case, I believe you're doing your<br>
> counting wrong.  When flipping with swapinterval=0, you need 4 buffers:<br>
><br>
> 1. The buffer currently being scanned out  (will be released at next vblank)<br>
> 2. The buffer X has queued for scanout but is waiting on vblank<br>
<br>
</span>s/vblank/flip/g, since async flips may not wait for vblank, but yeah.<br>
<span class=""><br>
> 3. The buffer the application has just submitted which X will queue next<br>
> of it doesn't get another before the window closes.<br>
> 4. The buffer the application is using for rendering.<br>
><br>
> With only 3, you get a stall during that window in which X has queued<br>
> another flip but we're waiting on vblank before the flip begins. An I<br>
> missing something?<br>
<br>
</span>Nothing, except maybe the paragraph below stating that I couldn't<br>
measure any benefit from using 4 buffers. :) I'm not exactly sure why,<br>
but I suspect it might be because even with just 3 buffers, the GPU can<br>
always work on at least one frame ahead of time.<br>
<br>
Also note that even before my change, we were only using 3 buffers when<br>
the X driver supports async flips (with swap interval 0; only 2 buffers<br>
with swap interval > 0).<br></blockquote><div><br></div><div>Yes, because with async flips you don't have a buffer sitting queued in the kernel waiting to be flipped which you can't cancel.  that makes perfect sense.<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">
That said, I'd be interested in hearing about any test cases where 4<br>
buffers provide a significant boost over 3.<span class="im"><br></span></blockquote><div><br></div><div>A little history that may be useful: Quadbuffering was originally added for DRI3+present here:<br><br><a href="https://cgit.freedesktop.org/mesa/mesa/commit/?id=f7a355556ef5fe23056299a77414f9ad8b5e5a1d">https://cgit.freedesktop.org/mesa/mesa/commit/?id=f7a355556ef5fe23056299a77414f9ad8b5e5a1d</a><br><br></div><div>In Wayland, the change was made here<br><br><a href="https://cgit.freedesktop.org/mesa/mesa/commit/?id=992a2dbba80aba35efe83202e1013bd6143f0dba">https://cgit.freedesktop.org/mesa/mesa/commit/?id=992a2dbba80aba35efe83202e1013bd6143f0dba</a><br><br></div><div>Unfortunately, neither of those specify precise metrics.  Eero's bug had some very concrete numbers.  Hopefully he can provide you with the details you need for further analysis.<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"><span class="im">
<br>
>> I couldn't measure any performance boost using 4 buffers with flipping.<br>
>> Performance actually seemed to go down slightly, but that might have<br>
>> been just noise.<br>
<br>
<br>
</span><div class=""><div class="h5">--<br>
Earthling Michel Dänzer               |               <a href="http://www.amd.com" rel="noreferrer" target="_blank">http://www.amd.com</a><br>
Libre software enthusiast             |             Mesa and X developer<br>
<br>
</div></div></blockquote></div><br></div></div>