[Mesa-dev] [PATCH v2 14/16] anv: Disable VF statistics for blorp and SOL memcpy

Lionel Landwerlin lionel.g.landwerlin at intel.com
Fri Mar 17 16:23:44 UTC 2017


Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

On 16/03/17 21:34, Jason Ekstrand wrote:
> In order to get accurate statistics, we need to disable statistics for
> blits, clears, and the surface state memcpy at the top of each secondary
> command buffer.  There are two possible approaches to this:
>
>   1) Disable before the blit/memcpy and re-enable afterwards
>
>   2) Move emitting 3DSTATE_VF_STATISTICS from initialization and make it
>      part of pipeline state and then just disabale statistics before
>      blits and memcpy operations.
>
> Emitting 3DSTATE_VF_STATISTICS should be fairly cheap so it doesn't
> really matter which path we take.  We choose the second option as it's
> more consistent with the way the rest of the statistics are enabled and
> disabled.
> ---
>   src/intel/vulkan/genX_blorp_exec.c | 5 +++++
>   src/intel/vulkan/genX_gpu_memcpy.c | 4 ++++
>   src/intel/vulkan/genX_pipeline.c   | 9 +++++++++
>   src/intel/vulkan/genX_state.c      | 3 ---
>   4 files changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/src/intel/vulkan/genX_blorp_exec.c b/src/intel/vulkan/genX_blorp_exec.c
> index c1499fb..74c2679 100644
> --- a/src/intel/vulkan/genX_blorp_exec.c
> +++ b/src/intel/vulkan/genX_blorp_exec.c
> @@ -169,6 +169,11 @@ genX(blorp_exec)(struct blorp_batch *batch,
>       */
>      genX(cmd_buffer_enable_pma_fix)(cmd_buffer, false);
>   
> +   /* Disable VF statistics */
> +   blorp_emit(batch, GENX(3DSTATE_VF_STATISTICS), vf) {
> +      vf.StatisticsEnable = false;
> +   }
> +
>      blorp_exec(batch, params);
>   
>      cmd_buffer->state.vb_dirty = ~0;
> diff --git a/src/intel/vulkan/genX_gpu_memcpy.c b/src/intel/vulkan/genX_gpu_memcpy.c
> index eb11c2f..3cbc723 100644
> --- a/src/intel/vulkan/genX_gpu_memcpy.c
> +++ b/src/intel/vulkan/genX_gpu_memcpy.c
> @@ -218,6 +218,10 @@ genX(cmd_buffer_gpu_memcpy)(struct anv_cmd_buffer *cmd_buffer,
>      }
>   #endif
>   
> +   anv_batch_emit(&cmd_buffer->batch, GENX(3DSTATE_VF_STATISTICS), vf) {
> +      vf.StatisticsEnable = false;
> +   }
> +
>      anv_batch_emit(&cmd_buffer->batch, GENX(3DPRIMITIVE), prim) {
>         prim.VertexAccessType         = SEQUENTIAL;
>         prim.PrimitiveTopologyType    = _3DPRIM_POINTLIST;
> diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c
> index bb3e203..5e6e609 100644
> --- a/src/intel/vulkan/genX_pipeline.c
> +++ b/src/intel/vulkan/genX_pipeline.c
> @@ -1564,6 +1564,14 @@ emit_3dstate_vf_topology(struct anv_pipeline *pipeline)
>   #endif
>   
>   static void
> +emit_3dstate_vf_statistics(struct anv_pipeline *pipeline)
> +{
> +   anv_batch_emit(&pipeline->batch, GENX(3DSTATE_VF_STATISTICS), vfs) {
> +      vfs.StatisticsEnable = true;
> +   }
> +}
> +
> +static void
>   compute_kill_pixel(struct anv_pipeline *pipeline,
>                      const VkPipelineMultisampleStateCreateInfo *ms_info,
>                      const struct anv_subpass *subpass)
> @@ -1669,6 +1677,7 @@ genX(graphics_pipeline_create)(
>      emit_3dstate_ps_extra(pipeline, subpass);
>      emit_3dstate_vf_topology(pipeline);
>   #endif
> +   emit_3dstate_vf_statistics(pipeline);
>   
>      *pPipeline = anv_pipeline_to_handle(pipeline);
>   
> diff --git a/src/intel/vulkan/genX_state.c b/src/intel/vulkan/genX_state.c
> index fd8f8ac..bf1217b 100644
> --- a/src/intel/vulkan/genX_state.c
> +++ b/src/intel/vulkan/genX_state.c
> @@ -52,9 +52,6 @@ genX(init_device_state)(struct anv_device *device)
>         ps.PipelineSelection = _3D;
>      }
>   
> -   anv_batch_emit(&batch, GENX(3DSTATE_VF_STATISTICS), vfs)
> -      vfs.StatisticsEnable = true;
> -
>      anv_batch_emit(&batch, GENX(3DSTATE_AA_LINE_PARAMETERS), aa);
>   
>      anv_batch_emit(&batch, GENX(3DSTATE_DRAWING_RECTANGLE), rect) {




More information about the mesa-dev mailing list