Module: Mesa Branch: master Commit: 0ca87ed506287d7141a45238ac631a2cc5b6fa95 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0ca87ed506287d7141a45238ac631a2cc5b6fa95
Author: Samuel Iglesias Gonsálvez <[email protected]> Date: Tue May 19 17:50:15 2020 +0200 turnip: add support to clear LRZ v2: * Don't emit tu6_clear_lrz() using a IB but in the command stream provided. (Jonathan Marek) * Valid_clear_ib is always false if TU_DEBUG_NOLRZ is set. Remove the useless condition. (Jonathan Marek) * Added more comments. * Use r2d function for blitting LRZ. (Jonathan Marek) v3: * Do LRZ tracking in the command buffer state (Connor). v4: * Simplify the emission of source setup (Jonathan Marek) v5: * Separate LRZ setup in a different function. * Not hide LRZ setup inside GMEM path (Jonathan Marek) * Fix iova address emission in tu6_clear_lrz() (Jonathan Marek) * Add CCU sysmem flushes (Jonathan Marek) v6: * Fixed bug related to storing a VkClearValue pointer that could be out-of-scope when we access to it for emitting LRZ clear. v7: * Merge tu6_clear_lrz() and tu6_clear_lrz_setup() into the same function and emit LRZ clear at the beginning of the renderpass. Signed-off-by: Samuel Iglesias Gonsálvez <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5146> --- src/freedreno/vulkan/tu_clear_blit.c | 18 ++++++++++++++++++ src/freedreno/vulkan/tu_cmd_buffer.c | 5 +++-- src/freedreno/vulkan/tu_private.h | 3 +++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/freedreno/vulkan/tu_clear_blit.c b/src/freedreno/vulkan/tu_clear_blit.c index a645831ed4c..cb70ebd02a9 100644 --- a/src/freedreno/vulkan/tu_clear_blit.c +++ b/src/freedreno/vulkan/tu_clear_blit.c @@ -914,6 +914,24 @@ copy_format(VkFormat format, VkImageAspectFlags aspect_mask, bool copy_buffer) } } +void +tu6_clear_lrz(struct tu_cmd_buffer *cmd, + struct tu_cs *cs, + struct tu_image *image, + const VkClearValue *value) +{ + const struct blit_ops *ops = &r2d_ops; + + ops->setup(cmd, cs, VK_FORMAT_D16_UNORM, VK_IMAGE_ASPECT_DEPTH_BIT, ROTATE_0, true, false); + ops->clear_value(cs, VK_FORMAT_D16_UNORM, value); + ops->dst_buffer(cs, VK_FORMAT_D16_UNORM, + image->bo->iova + image->bo_offset + image->lrz_offset, + image->lrz_pitch * 2); + ops->coords(cs, &(VkOffset2D) {}, NULL, &(VkExtent2D) {image->lrz_pitch, image->lrz_height}); + ops->run(cmd, cs); + ops->teardown(cmd, cs); +} + static void tu_image_view_copy_blit(struct tu_image_view *iview, struct tu_image *image, diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index d1fb52ea083..16fae66d38e 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -1205,8 +1205,6 @@ tu6_tile_render_begin(struct tu_cmd_buffer *cmd, struct tu_cs *cs) tu6_emit_event_write(cmd, cs, LRZ_FLUSH); - /* lrz clear? */ - tu_cs_emit_pkt7(cs, CP_SKIP_IB2_ENABLE_GLOBAL, 1); tu_cs_emit(cs, 0x0); @@ -2922,6 +2920,9 @@ tu_CmdBeginRenderPass2(VkCommandBuffer commandBuffer, (att->clear_mask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT))) { cmd->state.lrz.image = image; cmd->state.lrz.valid = true; + + tu6_clear_lrz(cmd, &cmd->cs, image, &pRenderPassBegin->pClearValues[a]); + tu6_emit_event_write(cmd, &cmd->cs, PC_CCU_FLUSH_COLOR_TS); } else { cmd->state.lrz.valid = false; } diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h index 70ec4ac53d0..9e53f131f5b 100644 --- a/src/freedreno/vulkan/tu_private.h +++ b/src/freedreno/vulkan/tu_private.h @@ -1145,6 +1145,9 @@ tu6_emit_viewport(struct tu_cs *cs, const VkViewport *viewport, uint32_t num_vie void tu6_emit_scissor(struct tu_cs *cs, const VkRect2D *scs, uint32_t scissor_count); +void +tu6_clear_lrz(struct tu_cmd_buffer *cmd, struct tu_cs *cs, struct tu_image* image, const VkClearValue *value); + void tu6_emit_sample_locations(struct tu_cs *cs, const VkSampleLocationsInfoEXT *samp_loc); _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
