[Mesa-dev] [PATCH 2/2] i965: Use BDW_MOCS_PTE for renderbuffers.

Kristian Høgsberg krh at bitplanet.net
Tue Sep 30 12:42:07 PDT 2014


On Tue, Sep 30, 2014 at 1:15 AM, Kenneth Graunke <kenneth at 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 <kenneth at whitecape.org>
> Reported-by: Eero Tamminen <eero.t.tamminen at intel.com>
> Cc: mesa-stable at lists.freedesktop.org

That makes sense, good find from Eero.  I'll update the SKL MOCS accordingly.

Reviewed-by: Kristian Høgsberg <krh at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list