Mesa (main): venus: clean up vn_get_intercepted_barriers
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jun 3 06:13:17 UTC 2021
Module: Mesa
Branch: main
Commit: 93abaf6fe85a26046c0b9ae2383d24fd7235de40
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=93abaf6fe85a26046c0b9ae2383d24fd7235de40
Author: Chia-I Wu <olvaffe at gmail.com>
Date: Thu May 6 09:57:57 2021 -0700
venus: clean up vn_get_intercepted_barriers
Add vn_cmd_{wait_events,pipeline_barrier}_fix_image_memory_barries to
replace vn_get_intercepted_barriers. The two new functions are
identical currently, but that will change soon.
Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10709>
---
src/virtio/vulkan/vn_command_buffer.c | 98 +++++++++++++++++++++--------------
1 file changed, 60 insertions(+), 38 deletions(-)
diff --git a/src/virtio/vulkan/vn_command_buffer.c b/src/virtio/vulkan/vn_command_buffer.c
index 53faae7f1c6..73f10f6c504 100644
--- a/src/virtio/vulkan/vn_command_buffer.c
+++ b/src/virtio/vulkan/vn_command_buffer.c
@@ -50,6 +50,58 @@ vn_cmd_get_image_memory_barriers(struct vn_command_buffer *cmd,
return cmd->builder.image_barriers;
}
+static void
+vn_cmd_fix_image_memory_barrier(const struct vn_command_buffer *cmd,
+ const VkImageMemoryBarrier *src_barrier,
+ VkImageMemoryBarrier *out_barrier)
+{
+ *out_barrier = *src_barrier;
+
+ /* XXX drop the #ifdef after fixing common wsi */
+#ifdef ANDROID
+ for (uint32_t i = 0; i < count; i++) {
+ if (out_barrier->oldLayout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR)
+ out_barrier->oldLayout = VK_IMAGE_LAYOUT_GENERAL;
+ if (out_barrier->newLayout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR)
+ out_barrier->newLayout = VK_IMAGE_LAYOUT_GENERAL;
+ }
+#endif
+}
+
+static const VkImageMemoryBarrier *
+vn_cmd_wait_events_fix_image_memory_barriers(
+ struct vn_command_buffer *cmd,
+ const VkImageMemoryBarrier *src_barriers,
+ uint32_t count)
+{
+ if (!vn_image_memory_barrier_has_present_src(src_barriers, count))
+ return src_barriers;
+
+ VkImageMemoryBarrier *img_barriers =
+ vn_cmd_get_image_memory_barriers(cmd, count);
+ if (!img_barriers) {
+ cmd->state = VN_COMMAND_BUFFER_STATE_INVALID;
+ return src_barriers;
+ }
+
+ for (uint32_t i = 0; i < count; i++) {
+ vn_cmd_fix_image_memory_barrier(cmd, &src_barriers[i],
+ &img_barriers[i]);
+ }
+
+ return img_barriers;
+}
+
+static const VkImageMemoryBarrier *
+vn_cmd_pipeline_barrier_fix_image_memory_barriers(
+ struct vn_command_buffer *cmd,
+ const VkImageMemoryBarrier *src_barriers,
+ uint32_t count)
+{
+ return vn_cmd_wait_events_fix_image_memory_barriers(cmd, src_barriers,
+ count);
+}
+
static void
vn_cmd_begin_render_pass(struct vn_command_buffer *cmd,
const struct vn_render_pass *pass,
@@ -1061,36 +1113,6 @@ vn_CmdResetEvent(VkCommandBuffer commandBuffer,
vn_encode_vkCmdResetEvent(&cmd->cs, 0, commandBuffer, event, stageMask);
}
-static const VkImageMemoryBarrier *
-vn_get_intercepted_barriers(struct vn_command_buffer *cmd,
- const VkImageMemoryBarrier *img_barriers,
- uint32_t count)
-{
- const bool has_present_src =
- vn_image_memory_barrier_has_present_src(img_barriers, count);
- if (!has_present_src)
- return img_barriers;
-
- VkImageMemoryBarrier *barriers =
- vn_cmd_get_image_memory_barriers(cmd, count);
- if (!barriers)
- return img_barriers;
-
- memcpy(barriers, img_barriers, sizeof(*img_barriers) * count);
-
- /* XXX drop the #ifdef after fixing common wsi */
-#ifdef ANDROID
- for (uint32_t i = 0; i < count; i++) {
- if (barriers[i].oldLayout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR)
- barriers[i].oldLayout = VK_IMAGE_LAYOUT_GENERAL;
- if (barriers[i].newLayout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR)
- barriers[i].newLayout = VK_IMAGE_LAYOUT_GENERAL;
- }
-#endif
-
- return barriers;
-}
-
void
vn_CmdWaitEvents(VkCommandBuffer commandBuffer,
uint32_t eventCount,
@@ -1108,6 +1130,9 @@ vn_CmdWaitEvents(VkCommandBuffer commandBuffer,
vn_command_buffer_from_handle(commandBuffer);
size_t cmd_size;
+ pImageMemoryBarriers = vn_cmd_wait_events_fix_image_memory_barriers(
+ cmd, pImageMemoryBarriers, imageMemoryBarrierCount);
+
cmd_size = vn_sizeof_vkCmdWaitEvents(
commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask,
memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount,
@@ -1115,14 +1140,11 @@ vn_CmdWaitEvents(VkCommandBuffer commandBuffer,
if (!vn_cs_encoder_reserve(&cmd->cs, cmd_size))
return;
- const VkImageMemoryBarrier *img_barriers = vn_get_intercepted_barriers(
- cmd, pImageMemoryBarriers, imageMemoryBarrierCount);
-
vn_encode_vkCmdWaitEvents(&cmd->cs, 0, commandBuffer, eventCount, pEvents,
srcStageMask, dstStageMask, memoryBarrierCount,
pMemoryBarriers, bufferMemoryBarrierCount,
pBufferMemoryBarriers, imageMemoryBarrierCount,
- img_barriers);
+ pImageMemoryBarriers);
}
void
@@ -1141,6 +1163,9 @@ vn_CmdPipelineBarrier(VkCommandBuffer commandBuffer,
vn_command_buffer_from_handle(commandBuffer);
size_t cmd_size;
+ pImageMemoryBarriers = vn_cmd_pipeline_barrier_fix_image_memory_barriers(
+ cmd, pImageMemoryBarriers, imageMemoryBarrierCount);
+
cmd_size = vn_sizeof_vkCmdPipelineBarrier(
commandBuffer, srcStageMask, dstStageMask, dependencyFlags,
memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount,
@@ -1148,13 +1173,10 @@ vn_CmdPipelineBarrier(VkCommandBuffer commandBuffer,
if (!vn_cs_encoder_reserve(&cmd->cs, cmd_size))
return;
- const VkImageMemoryBarrier *img_barriers = vn_get_intercepted_barriers(
- cmd, pImageMemoryBarriers, imageMemoryBarrierCount);
-
vn_encode_vkCmdPipelineBarrier(
&cmd->cs, 0, commandBuffer, srcStageMask, dstStageMask, dependencyFlags,
memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount,
- pBufferMemoryBarriers, imageMemoryBarrierCount, img_barriers);
+ pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
}
void
More information about the mesa-commit
mailing list