From 43b22a477ca41f9731c4ab463cc6b7799efe9372 Mon Sep 17 00:00:00 2001 From: Icenowy Zheng Date: Wed, 8 Apr 2026 00:23:34 +0800 Subject: [PATCH] pvr: do not setup deferred RTA clear for active render targets Deferred RTA clear will happen after the current graphics subcommand is executed, which may override rendered image in the graphics subcommand. In addition, the active render targets do not need "emulated" clear -- they can be really cleared by drawing rectangles. Skip set up deferred RTA clear for active render target layers, and continue to do immediate clear for these layers. Fixes a few dynamic rendering random CTS tests, but the issue should also exist in legacy renderpasses RTA clears. Fixes: 95820584d06e ("pvr: Add deferred RTA clears for cores without gs_rta_support.") Signed-off-by: Icenowy Zheng Reviewed-by: Luigi Santivetti Part-of: --- src/imagination/ci/bxs-4-64-fails.txt | 6 ------ src/imagination/vulkan/rogue/pvr_blit.c | 10 ++++++++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/imagination/ci/bxs-4-64-fails.txt b/src/imagination/ci/bxs-4-64-fails.txt index 1d5cf2db296..876d56b2e91 100644 --- a/src/imagination/ci/bxs-4-64-fails.txt +++ b/src/imagination/ci/bxs-4-64-fails.txt @@ -65,7 +65,6 @@ dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed29,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed29_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed2_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed3,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed30,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed30_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed31,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed31_multiview,Fail @@ -87,7 +86,6 @@ dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed39,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed39_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed3_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed4,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed40,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed40_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed41,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed41_multiview,Fail @@ -113,7 +111,6 @@ dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed50,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed50_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed51,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed51_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed52,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed52_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed53,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed53_multiview,Fail @@ -178,11 +175,9 @@ dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed80,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed80_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed81,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed81_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed82,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed82_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed83,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed83_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed84,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed84_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed85,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed85_multiview,Fail @@ -202,7 +197,6 @@ dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed91,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed91_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed92,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed92_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed93,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed93_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed94,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed94_multiview,Fail diff --git a/src/imagination/vulkan/rogue/pvr_blit.c b/src/imagination/vulkan/rogue/pvr_blit.c index 115fdc2d667..3a96d775cec 100644 --- a/src/imagination/vulkan/rogue/pvr_blit.c +++ b/src/imagination/vulkan/rogue/pvr_blit.c @@ -1973,8 +1973,14 @@ static VkResult pvr_add_deferred_rta_clear(struct pvr_cmd_buffer *cmd_buffer, image = vk_to_pvr_image(image_view->vk.image); for (uint32_t i = 0; i < rect->layerCount; i++) { - struct pvr_transfer_cmd *transfer_cmd = - pvr_transfer_cmd_alloc(cmd_buffer); + struct pvr_transfer_cmd *transfer_cmd; + uint32_t rt_id = rect->baseArrayLayer + i; + + /* Do not defer the clear of active render target */ + if (hw_render->view_mask & (1 << rt_id)) + continue; + + transfer_cmd = pvr_transfer_cmd_alloc(cmd_buffer); list_addtail(&transfer_cmd->link, &cmd_buffer->deferred_clears);