From 7fc8a05cd5de8a18324b7958343964c8649b2ec1 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 16 Aug 2023 11:53:24 +0300 Subject: [PATCH] hasvk: add state cache invalidation back before fast clears Prior to 87149cc545, blorp added a state cache invalidation prior to fast clears. This got dropped on Hasvk. Signed-off-by: Lionel Landwerlin Fixes: 87149cc545 ("blorp: update and move fast clear PIPE_CONTROLs to drivers") Part-of: (cherry picked from commit 9231f24be1f5f52a1d64f2089808620dc7a146d2) --- .pick_status.json | 2 +- src/intel/blorp/blorp.h | 6 ++++++ src/intel/vulkan_hasvk/anv_blorp.c | 12 ++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 16e2465e457..77168e14fb6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -6454,7 +6454,7 @@ "description": "hasvk: add state cache invalidation back before fast clears", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "87149cc545afdacb339a933d47ded5c1adf8f429", "notes": null diff --git a/src/intel/blorp/blorp.h b/src/intel/blorp/blorp.h index 7f5f24be140..86df2c835b6 100644 --- a/src/intel/blorp/blorp.h +++ b/src/intel/blorp/blorp.h @@ -135,6 +135,12 @@ struct blorp_address { bool local_hint; }; +static inline bool +blorp_address_is_null(struct blorp_address address) +{ + return address.buffer == NULL && address.offset == 0; +} + struct blorp_surf { const struct isl_surf *surf; diff --git a/src/intel/vulkan_hasvk/anv_blorp.c b/src/intel/vulkan_hasvk/anv_blorp.c index f2cead534af..5039067bb7b 100644 --- a/src/intel/vulkan_hasvk/anv_blorp.c +++ b/src/intel/vulkan_hasvk/anv_blorp.c @@ -1826,6 +1826,12 @@ anv_image_mcs_op(struct anv_cmd_buffer *cmd_buffer, ANV_PIPE_END_OF_PIPE_SYNC_BIT, "before fast clear mcs"); + if (!blorp_address_is_null(surf.clear_color_addr)) { + anv_add_pending_pipe_bits(cmd_buffer, + ANV_PIPE_STATE_CACHE_INVALIDATE_BIT, + "before blorp clear color edit"); + } + switch (mcs_op) { case ISL_AUX_OP_FAST_CLEAR: blorp_fast_clear(&batch, &surf, format, swizzle, @@ -1914,6 +1920,12 @@ anv_image_ccs_op(struct anv_cmd_buffer *cmd_buffer, ANV_PIPE_END_OF_PIPE_SYNC_BIT, "before fast clear ccs"); + if (!blorp_address_is_null(surf.clear_color_addr)) { + anv_add_pending_pipe_bits(cmd_buffer, + ANV_PIPE_STATE_CACHE_INVALIDATE_BIT, + "before blorp clear color edit"); + } + switch (ccs_op) { case ISL_AUX_OP_FAST_CLEAR: blorp_fast_clear(&batch, &surf, format, swizzle,