Mesa (master): anv: Early-exit from cmd_buffer_flush_state

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jan 22 17:30:22 UTC 2021


Module: Mesa
Branch: master
Commit: 0e1447eb1b3729998ec06cf7bc5ba7d28c1e67e1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0e1447eb1b3729998ec06cf7bc5ba7d28c1e67e1

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Wed Jan 20 11:36:54 2021 -0600

anv: Early-exit from cmd_buffer_flush_state

If we don't have any dynamic state, pipeline, or descriptor changes,
we can do a very quick early-exit instead of checking for a bunch of
stuff bit-by-bit.

Tested-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8594>

---

 src/intel/vulkan/genX_cmd_buffer.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index d04f47b2f5f..285169eeb78 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -3518,6 +3518,12 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer)
 
    cmd_buffer->state.gfx.vb_dirty &= ~vb_emit;
 
+   uint32_t descriptors_dirty = cmd_buffer->state.descriptors_dirty &
+                                pipeline->active_stages;
+   if (!cmd_buffer->state.gfx.dirty && !descriptors_dirty &&
+       !cmd_buffer->state.push_constants_dirty)
+      return;
+
    if ((cmd_buffer->state.gfx.dirty & ANV_CMD_DIRTY_XFB_ENABLE) ||
        (GEN_GEN == 7 && (cmd_buffer->state.gfx.dirty &
                          ANV_CMD_DIRTY_PIPELINE))) {
@@ -3594,9 +3600,6 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer)
    }
 #endif
 
-   uint32_t descriptors_dirty = cmd_buffer->state.descriptors_dirty &
-                                pipeline->active_stages;
-
    /* Render targets live in the same binding table as fragment descriptors */
    if (cmd_buffer->state.gfx.dirty & ANV_CMD_DIRTY_RENDER_TARGETS)
       descriptors_dirty |= VK_SHADER_STAGE_FRAGMENT_BIT;



More information about the mesa-commit mailing list