summaryrefslogtreecommitdiff
path: root/src/intel
diff options
context:
space:
mode:
authorFelix DeGrood <felix.j.degrood@intel.com>2021-08-25 21:12:36 +0000
committerMarge Bot <eric+marge@anholt.net>2021-10-13 04:31:34 +0000
commit5bf6987873ddf94afc698c9159116a42b6942b55 (patch)
treedda7db973ed79f868d0491351fa0f42d05a12cd1 /src/intel
parentfab1ad1a110eeadb3a913c5421875707735e7f2e (diff)
anv: dirty only state impacted by blorp_exec
Instead of dirtying all state after blorp operations, avoid dirtying state that blorp never touches. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5077 Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12567>
Diffstat (limited to 'src/intel')
-rw-r--r--src/intel/vulkan/genX_blorp_exec.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/intel/vulkan/genX_blorp_exec.c b/src/intel/vulkan/genX_blorp_exec.c
index ba27dbefd9e..28bf31262ac 100644
--- a/src/intel/vulkan/genX_blorp_exec.c
+++ b/src/intel/vulkan/genX_blorp_exec.c
@@ -332,7 +332,25 @@ genX(blorp_exec)(struct blorp_batch *batch,
"after blorp BTI change");
#endif
+ /* Calculate state that does not get touched by blorp.
+ * Flush everything else.
+ */
+ anv_cmd_dirty_mask_t skip_bits = ANV_CMD_DIRTY_DYNAMIC_SCISSOR |
+ ANV_CMD_DIRTY_DYNAMIC_DEPTH_BOUNDS |
+ ANV_CMD_DIRTY_INDEX_BUFFER |
+ ANV_CMD_DIRTY_XFB_ENABLE |
+ ANV_CMD_DIRTY_DYNAMIC_LINE_STIPPLE |
+ ANV_CMD_DIRTY_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE |
+ ANV_CMD_DIRTY_DYNAMIC_SAMPLE_LOCATIONS |
+ ANV_CMD_DIRTY_DYNAMIC_SHADING_RATE |
+ ANV_CMD_DIRTY_DYNAMIC_PRIMITIVE_RESTART_ENABLE;
+
+ if (!params->wm_prog_data) {
+ skip_bits |= ANV_CMD_DIRTY_DYNAMIC_COLOR_BLEND_STATE |
+ ANV_CMD_DIRTY_DYNAMIC_LOGIC_OP;
+ }
+
cmd_buffer->state.gfx.vb_dirty = ~0;
- cmd_buffer->state.gfx.dirty = ~0;
+ cmd_buffer->state.gfx.dirty |= ~skip_bits;
cmd_buffer->state.push_constants_dirty = ~0;
}