From: Konstantin Seurer Date: Tue, 19 Jul 2022 12:39:06 +0000 (+0200) Subject: radv: Use RADV_META_SUSPEND_PREDICATING X-Git-Tag: upstream/22.3.5~5773 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b06e5535c011609eae73bd6e08e0f9f2b56561fc;p=platform%2Fupstream%2Fmesa.git radv: Use RADV_META_SUSPEND_PREDICATING Signed-off-by: Konstantin Seurer Reviewed-by: Samuel Pitoiset Part-of: --- diff --git a/src/amd/vulkan/radv_meta_blit.c b/src/amd/vulkan/radv_meta_blit.c index b45cb27..84f0759 100644 --- a/src/amd/vulkan/radv_meta_blit.c +++ b/src/amd/vulkan/radv_meta_blit.c @@ -457,7 +457,6 @@ blit_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, const VkImageSubresourceLayers *dst_res = ®ion->dstSubresource; struct radv_device *device = cmd_buffer->device; struct radv_meta_saved_state saved_state; - bool old_predicating; VkSampler sampler; /* From the Vulkan 1.0 spec: @@ -479,15 +478,12 @@ blit_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, }, &cmd_buffer->pool->vk.alloc, &sampler); - radv_meta_save( - &saved_state, cmd_buffer, - RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS); - /* VK_EXT_conditional_rendering says that blit commands should not be * affected by conditional rendering. */ - old_predicating = cmd_buffer->state.predicating; - cmd_buffer->state.predicating = false; + radv_meta_save(&saved_state, cmd_buffer, + RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS | + RADV_META_SAVE_DESCRIPTORS | RADV_META_SUSPEND_PREDICATING); unsigned dst_start, dst_end; if (dst_image->vk.image_type == VK_IMAGE_TYPE_3D) { @@ -602,9 +598,6 @@ blit_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, radv_image_view_finish(&src_iview); } - /* Restore conditional rendering. */ - cmd_buffer->state.predicating = old_predicating; - radv_meta_restore(&saved_state, cmd_buffer); radv_DestroySampler(radv_device_to_handle(device), sampler, &cmd_buffer->pool->vk.alloc); diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c index 30a510d..4aa8604 100644 --- a/src/amd/vulkan/radv_meta_clear.c +++ b/src/amd/vulkan/radv_meta_clear.c @@ -2000,11 +2000,9 @@ radv_cmd_buffer_clear_subpass(struct radv_cmd_buffer *cmd_buffer) return; /* Subpass clear should not be affected by conditional rendering. */ - bool old_predicating = cmd_buffer->state.predicating; - cmd_buffer->state.predicating = false; - - radv_meta_save(&saved_state, cmd_buffer, - RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS); + radv_meta_save( + &saved_state, cmd_buffer, + RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SUSPEND_PREDICATING); for (uint32_t i = 0; i < cmd_state->subpass->color_count; ++i) { uint32_t a = cmd_state->subpass->color_attachments[i].attachment; @@ -2051,7 +2049,6 @@ radv_cmd_buffer_clear_subpass(struct radv_cmd_buffer *cmd_buffer) } radv_meta_restore(&saved_state, cmd_buffer); - cmd_buffer->state.predicating = old_predicating; cmd_buffer->state.flush_bits |= post_flush; } @@ -2319,27 +2316,23 @@ radv_CmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image_h, VkImageL struct radv_meta_saved_state saved_state; bool cs; - /* Clear commands (except vkCmdClearAttachments) should not be affected by conditional rendering. */ - bool old_predicating = cmd_buffer->state.predicating; - cmd_buffer->state.predicating = false; - cs = cmd_buffer->qf == RADV_QUEUE_COMPUTE || !radv_image_is_renderable(cmd_buffer->device, image); - if (cs) { - radv_meta_save( - &saved_state, cmd_buffer, - RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS); - } else { - radv_meta_save(&saved_state, cmd_buffer, - RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS); - } + /* Clear commands (except vkCmdClearAttachments) should not be affected by conditional rendering. + */ + enum radv_meta_save_flags save_flags = RADV_META_SAVE_CONSTANTS | RADV_META_SUSPEND_PREDICATING; + if (cs) + save_flags |= RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_DESCRIPTORS; + else + save_flags |= RADV_META_SAVE_GRAPHICS_PIPELINE; + + radv_meta_save(&saved_state, cmd_buffer, save_flags); radv_cmd_clear_image(cmd_buffer, image, imageLayout, (const VkClearValue *)pColor, rangeCount, pRanges, cs); radv_meta_restore(&saved_state, cmd_buffer); - cmd_buffer->state.predicating = old_predicating; } VKAPI_ATTR void VKAPI_CALL @@ -2353,17 +2346,14 @@ radv_CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image_h, struct radv_meta_saved_state saved_state; /* Clear commands (except vkCmdClearAttachments) should not be affected by conditional rendering. */ - bool old_predicating = cmd_buffer->state.predicating; - cmd_buffer->state.predicating = false; - - radv_meta_save(&saved_state, cmd_buffer, - RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS); + radv_meta_save( + &saved_state, cmd_buffer, + RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SUSPEND_PREDICATING); radv_cmd_clear_image(cmd_buffer, image, imageLayout, (const VkClearValue *)pDepthStencil, rangeCount, pRanges, false); radv_meta_restore(&saved_state, cmd_buffer); - cmd_buffer->state.predicating = old_predicating; } VKAPI_ATTR void VKAPI_CALL diff --git a/src/amd/vulkan/radv_meta_copy.c b/src/amd/vulkan/radv_meta_copy.c index dc5522a..501e6e7 100644 --- a/src/amd/vulkan/radv_meta_copy.c +++ b/src/amd/vulkan/radv_meta_copy.c @@ -90,7 +90,6 @@ copy_buffer_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf const VkBufferImageCopy2 *region) { struct radv_meta_saved_state saved_state; - bool old_predicating; bool cs; /* The Vulkan 1.0 spec says "dstImage must have a sample count equal to @@ -101,15 +100,13 @@ copy_buffer_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf cs = cmd_buffer->qf == RADV_QUEUE_COMPUTE || !radv_image_is_renderable(cmd_buffer->device, image); - radv_meta_save(&saved_state, cmd_buffer, - (cs ? RADV_META_SAVE_COMPUTE_PIPELINE : RADV_META_SAVE_GRAPHICS_PIPELINE) | - RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS); - /* VK_EXT_conditional_rendering says that copy commands should not be * affected by conditional rendering. */ - old_predicating = cmd_buffer->state.predicating; - cmd_buffer->state.predicating = false; + radv_meta_save(&saved_state, cmd_buffer, + (cs ? RADV_META_SAVE_COMPUTE_PIPELINE : RADV_META_SAVE_GRAPHICS_PIPELINE) | + RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS | + RADV_META_SUSPEND_PREDICATING); /** * From the Vulkan 1.0.6 spec: 18.3 Copying Data Between Images @@ -195,9 +192,6 @@ copy_buffer_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf slice_array++; } - /* Restore conditional rendering. */ - cmd_buffer->state.predicating = old_predicating; - radv_meta_restore(&saved_state, cmd_buffer); } @@ -250,17 +244,13 @@ copy_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf } struct radv_meta_saved_state saved_state; - bool old_predicating; - - radv_meta_save( - &saved_state, cmd_buffer, - RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS); /* VK_EXT_conditional_rendering says that copy commands should not be * affected by conditional rendering. */ - old_predicating = cmd_buffer->state.predicating; - cmd_buffer->state.predicating = false; + radv_meta_save(&saved_state, cmd_buffer, + RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | + RADV_META_SAVE_DESCRIPTORS | RADV_META_SUSPEND_PREDICATING); /** * From the Vulkan 1.0.6 spec: 18.3 Copying Data Between Images @@ -341,9 +331,6 @@ copy_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf slice_array++; } - /* Restore conditional rendering. */ - cmd_buffer->state.predicating = old_predicating; - radv_meta_restore(&saved_state, cmd_buffer); } @@ -368,7 +355,6 @@ copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, VkImageLayout dst_image_layout, const VkImageCopy2 *region) { struct radv_meta_saved_state saved_state; - bool old_predicating; bool cs; /* From the Vulkan 1.0 spec: @@ -381,15 +367,13 @@ copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, cs = cmd_buffer->qf == RADV_QUEUE_COMPUTE || !radv_image_is_renderable(cmd_buffer->device, dst_image); - radv_meta_save(&saved_state, cmd_buffer, - (cs ? RADV_META_SAVE_COMPUTE_PIPELINE : RADV_META_SAVE_GRAPHICS_PIPELINE) | - RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS); - /* VK_EXT_conditional_rendering says that copy commands should not be * affected by conditional rendering. */ - old_predicating = cmd_buffer->state.predicating; - cmd_buffer->state.predicating = false; + radv_meta_save(&saved_state, cmd_buffer, + (cs ? RADV_META_SAVE_COMPUTE_PIPELINE : RADV_META_SAVE_GRAPHICS_PIPELINE) | + RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS | + RADV_META_SUSPEND_PREDICATING); if (cs) { /* For partial copies, HTILE should be decompressed before copying because the metadata is @@ -571,9 +555,6 @@ copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image, } } - /* Restore conditional rendering. */ - cmd_buffer->state.predicating = old_predicating; - radv_meta_restore(&saved_state, cmd_buffer); } diff --git a/src/amd/vulkan/radv_meta_etc_decode.c b/src/amd/vulkan/radv_meta_etc_decode.c index ad7f8cb..feb3f30 100644 --- a/src/amd/vulkan/radv_meta_etc_decode.c +++ b/src/amd/vulkan/radv_meta_etc_decode.c @@ -720,12 +720,9 @@ radv_meta_decode_etc(struct radv_cmd_buffer *cmd_buffer, struct radv_image *imag VkOffset3D offset, VkExtent3D extent) { struct radv_meta_saved_state saved_state; - radv_meta_save( - &saved_state, cmd_buffer, - RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS); - - bool old_predicating = cmd_buffer->state.predicating; - cmd_buffer->state.predicating = false; + radv_meta_save(&saved_state, cmd_buffer, + RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | + RADV_META_SAVE_DESCRIPTORS | RADV_META_SUSPEND_PREDICATING); uint32_t base_slice = radv_meta_get_iview_layer(image, subresource, &offset); uint32_t slice_count = image->vk.image_type == VK_IMAGE_TYPE_3D ? extent.depth : subresource->layerCount; @@ -797,6 +794,5 @@ radv_meta_decode_etc(struct radv_cmd_buffer *cmd_buffer, struct radv_image *imag radv_image_view_finish(&src_iview); radv_image_view_finish(&dest_iview); - cmd_buffer->state.predicating = old_predicating; radv_meta_restore(&saved_state, cmd_buffer); } diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c index fa031cb..4ad6980 100644 --- a/src/amd/vulkan/radv_query.c +++ b/src/amd/vulkan/radv_query.c @@ -973,7 +973,6 @@ radv_query_shader(struct radv_cmd_buffer *cmd_buffer, VkPipeline *pipeline, struct radv_device *device = cmd_buffer->device; struct radv_meta_saved_state saved_state; struct radv_buffer src_buffer, dst_buffer; - bool old_predicating; if (!*pipeline) { VkResult ret = radv_device_init_meta_query_state_internal(device); @@ -983,15 +982,12 @@ radv_query_shader(struct radv_cmd_buffer *cmd_buffer, VkPipeline *pipeline, } } - radv_meta_save( - &saved_state, cmd_buffer, - RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS); - /* VK_EXT_conditional_rendering says that copy commands should not be * affected by conditional rendering. */ - old_predicating = cmd_buffer->state.predicating; - cmd_buffer->state.predicating = false; + radv_meta_save(&saved_state, cmd_buffer, + RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | + RADV_META_SAVE_DESCRIPTORS | RADV_META_SUSPEND_PREDICATING); uint64_t src_buffer_size = MAX2(src_stride * count, avail_offset + 4 * count - src_offset); uint64_t dst_buffer_size = dst_stride * (count - 1) + dst_size; @@ -1054,9 +1050,6 @@ radv_query_shader(struct radv_cmd_buffer *cmd_buffer, VkPipeline *pipeline, cmd_buffer->active_query_flush_bits |= RADV_CMD_FLAG_CS_PARTIAL_FLUSH | RADV_CMD_FLAG_INV_L2 | RADV_CMD_FLAG_INV_VCACHE; - /* Restore conditional rendering. */ - cmd_buffer->state.predicating = old_predicating; - radv_buffer_finish(&src_buffer); radv_buffer_finish(&dst_buffer);