On Tue, Sep 30, 2014 at 1:15 AM, Kenneth Graunke <kenn...@whitecape.org> wrote: > Write-back caching cannot be used for buffers being scanned out by the > display engine; surfaces used for scan-out must be write-through or > uncached. I originally chose WT for render targets because it works in > all cases. However, we really want to use write-back caching where > possible, as it is more efficient. > > Most renderbuffers are not used for scanout - off-screen FBOs certainly > are fine, and non-pageflipped backbuffers should be fine as well. So > in most cases WB will work. However, we don't know what will be used > for scan-out, so we instead simply use the PTE value specified by the > kernel, as it knows these things. > > This matches our MOCS choice on Haswell. > > Fixes performance regressions since commit ee4484be3dc827cf15bcf109f5 > in a microbenchmark (spotted by Eero Tamminen). Improves performance > in GLBenchmark 2.7/EgyptHD by 7.44362% +/- 0.496939% (n=55) on a > Broadwell GT2. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > Reported-by: Eero Tamminen <eero.t.tammi...@intel.com> > Cc: mesa-sta...@lists.freedesktop.org
That makes sense, good find from Eero. I'll update the SKL MOCS accordingly. Reviewed-by: Kristian Høgsberg <k...@bitplanet.net> > src/mesa/drivers/dri/i965/gen8_surface_state.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > Cc'd to stable because it's a pretty trivial change and provides a sizable > boost to performance on new hardware. > > diff --git a/src/mesa/drivers/dri/i965/gen8_surface_state.c > b/src/mesa/drivers/dri/i965/gen8_surface_state.c > index 40eb2ea..6dd343f 100644 > --- a/src/mesa/drivers/dri/i965/gen8_surface_state.c > +++ b/src/mesa/drivers/dri/i965/gen8_surface_state.c > @@ -377,7 +377,7 @@ gen8_update_renderbuffer_surface(struct brw_context *brw, > horizontal_alignment(mt) | > surface_tiling_mode(tiling); > > - surf[1] = SET_FIELD(BDW_MOCS_WT, GEN8_SURFACE_MOCS) | mt->qpitch >> 2; > + surf[1] = SET_FIELD(BDW_MOCS_PTE, GEN8_SURFACE_MOCS) | mt->qpitch >> 2; > > surf[2] = SET_FIELD(width - 1, GEN7_SURFACE_WIDTH) | > SET_FIELD(height - 1, GEN7_SURFACE_HEIGHT); > -- > 2.1.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev