[Mesa-dev] [PATCH 3/3] i965/gen6-7/sol: Bump primitive counter BO size.

Eero Tamminen eero.t.tamminen at intel.com
Mon Nov 20 15:00:31 UTC 2017


Hi,

Tested-By: Eero Tamminen <eero.t.tamminen at intel.com>

On 18.11.2017 00:28, Francisco Jerez wrote:
> Improves performance of SynMark2 OglGSCloth by a further 9.65%±0.59%
> due to the reduction in overwraps of the primitive count buffer that
> lead to a CPU stall on previous rendering.  Cummulative performance
> improvement from the series 81.50% ±0.96% (data gathered on VLV).

I tested the patch series with transform feedback using tests on SNB 
GT2, BYT, HSW GT2 and BSW, using git versions of Mesa, drm-tip kernel 
and X server.


SNB GT2:
* No noticeable perf impact on GfxBench Manhattan
* Mesa unfortunately renders GSCloth incorrectly on SNB,
   but that happens also without this patch series:
	https://bugs.freedesktop.org/show_bug.cgi?id=103824

BYT:
* 1-2% perf improvement in GfxBench Manhattan 3.0 & 3.1
* 30% perf improvement in GSCloth
   - Device is single channel one, was your VLV 2-channel one?

HSW GT2:
* No noticeable perf impact

BSW:
* No noticeable perf impact (as expected)


	- Eero

> ---
>   src/mesa/drivers/dri/i965/gen6_sol.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/gen6_sol.c b/src/mesa/drivers/dri/i965/gen6_sol.c
> index b1baf01bcd9..355acd42189 100644
> --- a/src/mesa/drivers/dri/i965/gen6_sol.c
> +++ b/src/mesa/drivers/dri/i965/gen6_sol.c
> @@ -197,7 +197,7 @@ brw_new_transform_feedback(struct gl_context *ctx, GLuint name)
>      brw_obj->offset_bo =
>         brw_bo_alloc(brw->bufmgr, "transform feedback offsets", 16, 64);
>      brw_obj->prim_count_bo =
> -      brw_bo_alloc(brw->bufmgr, "xfb primitive counts", 4096, 64);
> +      brw_bo_alloc(brw->bufmgr, "xfb primitive counts", 16384, 64);
>   
>      return &brw_obj->base;
>   }
> @@ -287,7 +287,8 @@ brw_save_primitives_written_counters(struct brw_context *brw,
>      assert(obj->prim_count_bo != NULL);
>   
>      /* Check if there's enough space for a new pair of four values. */
> -   if ((obj->counter.bo_end + 2) * streams * sizeof(uint64_t) >= 4096) {
> +   if ((obj->counter.bo_end + 2) * streams * sizeof(uint64_t) >=
> +       obj->prim_count_bo->size) {
>         aggregate_transform_feedback_counter(brw, obj->prim_count_bo,
>                                              &obj->previous_counter);
>         aggregate_transform_feedback_counter(brw, obj->prim_count_bo,
> 



More information about the mesa-dev mailing list