anv: Disable VF statistics for blorp and SOL memcpy
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. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
9576cea519
commit
dda54890f3
|
@ -173,6 +173,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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1569,6 +1569,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,
|
||||
|
@ -1675,6 +1683,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);
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue