<div dir="ltr">On 21 May 2013 16:52, Paul Berry <span dir="ltr"><<a href="mailto:stereotype441@gmail.com" target="_blank">stereotype441@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">This series implements fast color clears, a Gen7+ feature which<br>
reduces memory bandwidth by deferring the memory writes involved in a<br>
glClear() until the same memory is later touched during rendering.<br>
<br>
>From a broad overview point of view, fast color clears work in a<br>
similar way to HiZ: an auxiliary "MCS" buffer keeps track of which<br>
parts of the buffer have been cleared but haven't yet had the<br>
necessary memory writes performed.  Whenever a color buffer needs to<br>
be accessed by the CPU, or by a part of the GPU that is not<br>
fast-color-aware, we have to perform a "resolve operation" to force<br>
any pending memory writes to occur.<br>
<br>
This patch series adopts a slightly different strategy (compared to<br>
HiZ) for making sure the resolves happen when needed.  Instead of<br>
modifying each code path that might need to do a resolve so that it<br>
does one if needed, we create an accessor function that does the<br>
resolve if needed and then provides the caller with access to the<br>
miptree's underlying memory region.  This lets us have a lot more<br>
confidence that we didn't miss any code paths, which is important<br>
since color buffers are accessed by a large number of code paths.  To<br>
discourage future maintainers from trying to bypass the accessor<br>
function, it is inline (so that overhead is negligible), and the field<br>
it provides access to has been renamed to region_private.<br>
<br>
Patch 01 ifdefs out some code so that it does not appear in the i915<br>
(pre-Gen4) driver--this makes it easier to be confident that these<br>
changes won't regress i915.  Patch 02 introduces the aforementioned<br>
accessor function.  Patches 03-11 are the guts of the implementation,<br>
and patch 12 enables the new feature.<br>
<br>
No piglit regressions.  I have additional piglit tests which validate<br>
specific important corner cases--I hope to get those out to the list<br>
later this week.<br>
<br>
[PATCH 01/12] intel: Conditionally compile mcs-related code for i965 only.<br>
[PATCH 02/12] intel: Create intel_miptree_get_region() to prepare for fast color clear.<br>
[PATCH 03/12] i965/gen7+: Create an enum for keeping track of fast color clear state.<br>
[PATCH 04/12] i965/gen7+: Set up MCS in SURFACE_STATE whenever MCS is present.<br>
[PATCH 05/12] i965/gen7+: Create helper functions for single-sample MCS buffers.<br>
[PATCH 06/12] i965/gen7+: Implement fast color clear operation in BLORP.<br>
[PATCH 07/12] i965/blorp: Expand clear class hierarchy to prepare for RT resolves.<br>
[PATCH 08/12] i965/blorp: Write blorp code to do render target resolves.<br>
[PATCH 09/12] i965/gen7+: Ensure that front/back buffers are fast-clear resolved.<br>
[PATCH 10/12] i965/gen7+: Resolve color buffers when necessary.<br>
[PATCH 11/12] i965/gen7+: Disable fast color clears on shared regions.<br>
[PATCH 12/12] i965/gen7: Enable support for fast color clears.<br>
</blockquote></div><br></div><div class="gmail_extra">Forgot to mention: this series is avaiable on branch "fast-color-clear-2" of git://<a href="http://github.com/stereotype441/mesa.git">github.com/stereotype441/mesa.git</a>.<br>
</div></div>