[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