diff --git a/src/imagination/ci/bxs-4-64-fails.txt b/src/imagination/ci/bxs-4-64-fails.txt index 876d56b2e91..142935d92f7 100644 --- a/src/imagination/ci/bxs-4-64-fails.txt +++ b/src/imagination/ci/bxs-4-64-fails.txt @@ -19,195 +19,112 @@ dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.dynamic_ena dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.static_enable.d24_unorm_s8_uint,Fail dEQP-VK.pipeline.monolithic.stencil.no_stencil_att.dynamic_rendering.static_enable.d32_sfloat_s8_uint,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.basic.partial_binding_depth_stencil,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed0,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed0_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed1,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed10,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed10_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed11,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed11_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed12,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed12_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed13,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed13_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed14,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed14_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed15,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed15_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed16,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed16_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed17,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed17_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed18,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed18_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed19,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed19_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed1_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed2,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed20,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed20_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed21,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed21_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed22,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed22_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed23,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed23_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed24,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed24_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed25,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed26,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed26_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed27,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed27_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed28,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed28_multiview,Fail -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_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 -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed32,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed32_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed33,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed33_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed34,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed34_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed35,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed35_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed36,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed36_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed37,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed37_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed38,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed38_multiview,Fail -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_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 -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed42,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed42_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed43,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed43_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed44,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed44_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed45,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed45_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed46,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed46_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed47,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed47_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed48,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed48_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed49,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed49_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed4_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed5,Fail 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_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 -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed54,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed54_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed55,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed55_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed56,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed56_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed57,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed57_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed58,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed58_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed59,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed59_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed5_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed60,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed60_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed61,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed61_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed62,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed62_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed63,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed63_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed64,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed64_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed65,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed65_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed66,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed66_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed67,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed67_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed68,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed68_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed69,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed69_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed6_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed7,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed70,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed70_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed71,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed71_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed72,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed72_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed73,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed73_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed74,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed74_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed75,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed75_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed76,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed76_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed77,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed77_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed78,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed78_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed79,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed79_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed7_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed8,Fail -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_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_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 -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed86,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed86_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed87,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed87_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed88,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed88_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed89,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed89_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed8_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed9,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed90,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed90_multiview,Fail -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_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 -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed95,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed95_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed96,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed96_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed97,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed97_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed98,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed98_multiview,Fail -dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed99,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed99_multiview,Fail dEQP-VK.renderpasses.dynamic_rendering.primary_cmd_buff.random.seed9_multiview,Fail diff --git a/src/imagination/vulkan/pvr_arch_cmd_buffer.c b/src/imagination/vulkan/pvr_arch_cmd_buffer.c index 9c37a797e5e..bb59f707496 100644 --- a/src/imagination/vulkan/pvr_arch_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_arch_cmd_buffer.c @@ -136,6 +136,7 @@ static void pvr_cmd_buffer_free_sub_cmd(struct pvr_cmd_buffer *cmd_buffer, VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT); util_dynarray_fini(&sub_cmd->gfx.sec_query_indices); + util_dynarray_fini(&sub_cmd->gfx.unbound_deferred_clears); pvr_csb_finish(&sub_cmd->gfx.control_stream); pvr_bo_free(cmd_buffer->device, sub_cmd->gfx.terminate_ctrl_stream); pvr_bo_free(cmd_buffer->device, sub_cmd->gfx.multiview_ctrl_stream); @@ -2753,6 +2754,7 @@ VkResult pvr_arch_cmd_buffer_start_sub_cmd(struct pvr_cmd_buffer *cmd_buffer, } sub_cmd->gfx.sec_query_indices = UTIL_DYNARRAY_INIT; + sub_cmd->gfx.unbound_deferred_clears = UTIL_DYNARRAY_INIT; break; case PVR_SUB_CMD_TYPE_QUERY: @@ -9036,6 +9038,17 @@ pvr_execute_graphics_cmd_buffer(struct pvr_cmd_buffer *cmd_buffer, &sec_sub_cmd->gfx.sec_query_indices); } + if (!PVR_HAS_FEATURE(dev_info, gs_rta_support)) { + util_dynarray_foreach (&sec_sub_cmd->gfx.unbound_deferred_clears, + struct pvr_unbound_deferred_clear, + recorded_clear) { + result = + pvr_bind_unbound_deferred_clear(cmd_buffer, recorded_clear); + if (result != VK_SUCCESS) + return result; + } + } + if (pvr_cmd_uses_deferred_cs_cmds(sec_cmd_buffer)) { /* TODO: In case if secondary buffer is created with * VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, then we patch the diff --git a/src/imagination/vulkan/pvr_blit.h b/src/imagination/vulkan/pvr_blit.h index 366dd43b4a2..323724a74fe 100644 --- a/src/imagination/vulkan/pvr_blit.h +++ b/src/imagination/vulkan/pvr_blit.h @@ -34,6 +34,7 @@ struct pvr_device; struct pvr_image; struct pvr_transfer_cmd; struct pvr_transfer_cmd_surface; +struct pvr_unbound_deferred_clear; VkFormat pvr_get_raw_copy_format(VkFormat format); @@ -80,4 +81,8 @@ void pvr_clear_depth_stencil_image(struct pvr_cmd_buffer *cmd_buffer, uint32_t rangeCount, const VkImageSubresourceRange *pRanges); +VkResult pvr_bind_unbound_deferred_clear( + struct pvr_cmd_buffer *cmd_buffer, + struct pvr_unbound_deferred_clear *recorded_clear); + #endif /* PVR_BLIT_H */ diff --git a/src/imagination/vulkan/pvr_cmd_buffer.h b/src/imagination/vulkan/pvr_cmd_buffer.h index ce07a0455b1..f29fb624b56 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.h +++ b/src/imagination/vulkan/pvr_cmd_buffer.h @@ -114,6 +114,15 @@ struct pvr_transfer_cmd { struct pvr_cmd_buffer *cmd_buffer; }; +struct pvr_unbound_deferred_clear { + union fi clear_color[4]; + VkOffset3D offset; + VkExtent3D extent; + uint32_t array_layer; + VkImageAspectFlags aspect_mask; + uint32_t attachment_index; +}; + struct pvr_color_attachment_output_map { uint32_t index_color; uint32_t index_resolve; @@ -208,6 +217,9 @@ struct pvr_sub_cmd_gfx { uint32_t view_mask; bool multiview_enabled; + + /* Recorded deferred RTA clears for secondary command buffers */ + struct util_dynarray unbound_deferred_clears; }; struct pvr_sub_cmd_compute { diff --git a/src/imagination/vulkan/rogue/pvr_blit.c b/src/imagination/vulkan/rogue/pvr_blit.c index eaaa1e1f294..00d535f2234 100644 --- a/src/imagination/vulkan/rogue/pvr_blit.c +++ b/src/imagination/vulkan/rogue/pvr_blit.c @@ -45,6 +45,7 @@ #include "util/bitscan.h" #include "util/list.h" #include "util/macros.h" +#include "util/u_dynarray.h" #include "util/u_math.h" #include "vk_alloc.h" #include "vk_command_buffer.h" @@ -1936,8 +1937,9 @@ static VkResult pvr_add_deferred_rta_clear(struct pvr_cmd_buffer *cmd_buffer, struct pvr_sub_cmd_gfx *sub_cmd = &cmd_buffer->state.current_sub_cmd->gfx; const struct pvr_renderpass_hwsetup_render *hw_render = pvr_arch_pass_info_get_hw_render(pass_info, sub_cmd->hw_render_idx); - const struct pvr_image_view *image_view; - const struct pvr_image *image; + const struct pvr_image_view *image_view = NULL; + const struct pvr_image *image = NULL; + uint32_t attachment_index; const VkOffset3D offset = { .x = rect->rect.offset.x, @@ -1965,82 +1967,157 @@ static VkResult pvr_add_deferred_rta_clear(struct pvr_cmd_buffer *cmd_buffer, attachment->aspectMask == (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)); - image_view = pass_info->attachments[hw_render->ds_attach_idx]; + attachment_index = hw_render->ds_attach_idx; } else if (is_render_init) { - uint32_t index; - assert(attachment->colorAttachment < hw_render->color_init_count); - index = hw_render->color_init[attachment->colorAttachment].index; - - image_view = pass_info->attachments[index]; + attachment_index = + hw_render->color_init[attachment->colorAttachment].index; } else if (cmd_buffer->state.current_sub_cmd->is_dynamic_render) { const struct pvr_dynamic_render_info *dr_info = pass_info->dr_info; - const uint32_t index = + attachment_index = dr_info->color_attachments[attachment->colorAttachment].index_color; - - image_view = pass_info->attachments[index]; } else { const struct pvr_renderpass_hwsetup_subpass *hw_pass = pvr_arch_get_hw_subpass(pass_info->pass, pass_info->subpass_idx); const struct pvr_render_subpass *sub_pass = &pass_info->pass->subpasses[hw_pass->index]; - const uint32_t attachment_idx = + attachment_index = sub_pass->color_attachments[attachment->colorAttachment]; - assert(attachment->colorAttachment < sub_pass->color_count); - - image_view = pass_info->attachments[attachment_idx]; } - image = vk_to_pvr_image(image_view->vk.image); + if (pass_info->attachments) { + image_view = pass_info->attachments[attachment_index]; + image = vk_to_pvr_image(image_view->vk.image); + } else { + assert(cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_SECONDARY && + (cmd_buffer->usage_flags & + VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)); + } for (uint32_t i = 0; i < rect->layerCount; i++) { - struct pvr_transfer_cmd *transfer_cmd; uint32_t rt_id = rect->baseArrayLayer + i; - float depth = 0.0f; - uint32_t layer = 0; - /* 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); - if (!transfer_cmd) - return VK_ERROR_OUT_OF_HOST_MEMORY; + if (pass_info->attachments) { + struct pvr_transfer_cmd *transfer_cmd; + float depth = 0.0f; + uint32_t layer = 0; - list_addtail(&transfer_cmd->link, &cmd_buffer->deferred_clears); + transfer_cmd = pvr_transfer_cmd_alloc(cmd_buffer); + if (!transfer_cmd) + return VK_ERROR_OUT_OF_HOST_MEMORY; - transfer_cmd->flags = PVR_TRANSFER_CMD_FLAGS_FILL; + list_addtail(&transfer_cmd->link, &cmd_buffer->deferred_clears); - if (attachment->aspectMask == VK_IMAGE_ASPECT_COLOR_BIT) { - for (uint32_t j = 0; j < ARRAY_SIZE(transfer_cmd->clear_color); j++) { - transfer_cmd->clear_color[j].ui = - attachment->clearValue.color.uint32[j]; + transfer_cmd->flags = PVR_TRANSFER_CMD_FLAGS_FILL; + + if (attachment->aspectMask == VK_IMAGE_ASPECT_COLOR_BIT) { + for (uint32_t j = 0; j < ARRAY_SIZE(transfer_cmd->clear_color); + j++) { + transfer_cmd->clear_color[j].ui = + attachment->clearValue.color.uint32[j]; + } + } else { + transfer_cmd->clear_color[0].f = + attachment->clearValue.depthStencil.depth; + transfer_cmd->clear_color[1].ui = + attachment->clearValue.depthStencil.stencil; } - } else { - transfer_cmd->clear_color[0].f = - attachment->clearValue.depthStencil.depth; - transfer_cmd->clear_color[1].ui = - attachment->clearValue.depthStencil.stencil; - } - pvr_set_rta_clear_layer_depth(image_view, rt_id, &layer, &depth); - pvr_setup_transfer_surface(cmd_buffer->device, - &transfer_cmd->dst, - &transfer_cmd->scissor, - image, - layer, - 0, - &offset, - &extent, - depth, - image->vk.format, - attachment->aspectMask); + pvr_set_rta_clear_layer_depth(image_view, rt_id, &layer, &depth); + pvr_setup_transfer_surface(cmd_buffer->device, + &transfer_cmd->dst, + &transfer_cmd->scissor, + image, + layer, + 0, + &offset, + &extent, + depth, + image->vk.format, + attachment->aspectMask); + } else { + struct pvr_unbound_deferred_clear recorded_clear; + + if (attachment->aspectMask == VK_IMAGE_ASPECT_COLOR_BIT) { + for (uint32_t j = 0; j < ARRAY_SIZE(recorded_clear.clear_color); + j++) { + recorded_clear.clear_color[j].ui = + attachment->clearValue.color.uint32[j]; + } + } else { + recorded_clear.clear_color[0].f = + attachment->clearValue.depthStencil.depth; + recorded_clear.clear_color[1].ui = + attachment->clearValue.depthStencil.stencil; + } + + recorded_clear.extent = extent; + recorded_clear.offset = offset; + recorded_clear.array_layer = rt_id; + recorded_clear.aspect_mask = attachment->aspectMask; + recorded_clear.attachment_index = attachment_index; + + util_dynarray_append(&sub_cmd->unbound_deferred_clears, + recorded_clear); + } } return VK_SUCCESS; } +VkResult pvr_bind_unbound_deferred_clear( + struct pvr_cmd_buffer *cmd_buffer, + struct pvr_unbound_deferred_clear *recorded_clear) +{ + struct pvr_render_pass_info *pass_info = &cmd_buffer->state.render_pass_info; + const struct pvr_image_view *image_view; + struct pvr_transfer_cmd *transfer_cmd; + const struct pvr_image *image; + float depth = 0.0f; + uint32_t layer = 0; + + image_view = pass_info->attachments[recorded_clear->attachment_index]; + image = vk_to_pvr_image(image_view->vk.image); + + transfer_cmd = pvr_transfer_cmd_alloc(cmd_buffer); + if (!transfer_cmd) + return VK_ERROR_OUT_OF_HOST_MEMORY; + + list_addtail(&transfer_cmd->link, &cmd_buffer->deferred_clears); + + transfer_cmd->flags = PVR_TRANSFER_CMD_FLAGS_FILL; + + if (recorded_clear->aspect_mask == VK_IMAGE_ASPECT_COLOR_BIT) { + for (uint32_t i = 0; i < ARRAY_SIZE(transfer_cmd->clear_color); i++) + transfer_cmd->clear_color[i].ui = recorded_clear->clear_color[i].ui; + } else { + transfer_cmd->clear_color[0].f = recorded_clear->clear_color[0].f; + transfer_cmd->clear_color[1].ui = recorded_clear->clear_color[1].ui; + } + + pvr_set_rta_clear_layer_depth(image_view, + recorded_clear->array_layer, + &layer, + &depth); + pvr_setup_transfer_surface(cmd_buffer->device, + &transfer_cmd->dst, + &transfer_cmd->scissor, + image, + layer, + 0, + &recorded_clear->offset, + &recorded_clear->extent, + depth, + image->vk.format, + recorded_clear->aspect_mask); + + return VK_SUCCESS; +} + static void pvr_clear_attachments(struct pvr_cmd_buffer *cmd_buffer, uint32_t attachment_count, const VkClearAttachment *attachments, @@ -2279,21 +2356,15 @@ static void pvr_clear_attachments(struct pvr_cmd_buffer *cmd_buffer, if (!PVR_HAS_FEATURE(dev_info, gs_rta_support) && (clear_rect->baseArrayLayer != 0 || clear_rect->layerCount > 1)) { - if (pass_info->attachments) { - result = pvr_add_deferred_rta_clear(cmd_buffer, - attachment, - clear_rect, - is_render_init); - if (result != VK_SUCCESS) - return; + result = pvr_add_deferred_rta_clear(cmd_buffer, + attachment, + clear_rect, + is_render_init); + if (result != VK_SUCCESS) + return; - if (clear_rect->baseArrayLayer != 0) - continue; - - } else { - pvr_finishme( - "incomplete support for deferred (emulated) RTA clears"); - } + if (clear_rect->baseArrayLayer != 0) + continue; } /* TODO: Allocate all the buffers in one go before the loop, and add