diff --git a/src/gallium/drivers/zink/zink_synchronization.cpp b/src/gallium/drivers/zink/zink_synchronization.cpp index 4cd536204ae..f2bb0f4a970 100644 --- a/src/gallium/drivers/zink/zink_synchronization.cpp +++ b/src/gallium/drivers/zink/zink_synchronization.cpp @@ -30,106 +30,6 @@ #include "zink_resource.h" #include "zink_screen.h" - -static VkAccessFlags -access_src_flags(VkImageLayout layout) -{ - switch (layout) { - case VK_IMAGE_LAYOUT_UNDEFINED: - return VK_ACCESS_NONE; - - case VK_IMAGE_LAYOUT_GENERAL: - return VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT; - - case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: - case VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT: - return VK_ACCESS_COLOR_ATTACHMENT_READ_BIT; - case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: - return VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; - - case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: - case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: - return VK_ACCESS_SHADER_READ_BIT; - - case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: - return VK_ACCESS_TRANSFER_READ_BIT; - - case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: - return VK_ACCESS_TRANSFER_WRITE_BIT; - - case VK_IMAGE_LAYOUT_PREINITIALIZED: - return VK_ACCESS_HOST_WRITE_BIT; - - case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: - return VK_ACCESS_NONE; - - default: - unreachable("unexpected layout"); - } -} - -static VkAccessFlags -access_dst_flags(VkImageLayout layout) -{ - switch (layout) { - case VK_IMAGE_LAYOUT_UNDEFINED: - return VK_ACCESS_NONE; - - case VK_IMAGE_LAYOUT_GENERAL: - return VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT; - - case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: - case VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT: - return VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; - case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: - return VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; - - case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: - return VK_ACCESS_SHADER_READ_BIT; - - case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: - return VK_ACCESS_TRANSFER_READ_BIT; - - case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: - return VK_ACCESS_SHADER_READ_BIT; - - case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: - return VK_ACCESS_TRANSFER_WRITE_BIT; - - case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: - return VK_ACCESS_NONE; - - default: - unreachable("unexpected layout"); - } -} - -static VkPipelineStageFlags -pipeline_dst_stage(VkImageLayout layout) -{ - switch (layout) { - case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: - return VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; - case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: - return VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; - - case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: - return VK_PIPELINE_STAGE_TRANSFER_BIT; - case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: - return VK_PIPELINE_STAGE_TRANSFER_BIT; - - case VK_IMAGE_LAYOUT_GENERAL: - return VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; - - case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: - case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: - return VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; - - default: - return VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; - } -} - #define ALL_READ_ACCESS_FLAGS \ (VK_ACCESS_INDIRECT_COMMAND_READ_BIT | \ VK_ACCESS_INDEX_READ_BIT | \ @@ -171,11 +71,6 @@ zink_resource_image_needs_barrier(struct zink_resource *res, VkImageLayout new_l void zink_resource_image_barrier_init(VkImageMemoryBarrier *imb, struct zink_resource *res, VkImageLayout new_layout, VkAccessFlags flags, VkPipelineStageFlags pipeline) { - if (!pipeline) - pipeline = pipeline_dst_stage(new_layout); - if (!flags) - flags = access_dst_flags(new_layout); - VkImageSubresourceRange isr = { res->aspect, 0, VK_REMAINING_MIP_LEVELS, @@ -184,7 +79,7 @@ zink_resource_image_barrier_init(VkImageMemoryBarrier *imb, struct zink_resource *imb = VkImageMemoryBarrier { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, NULL, - res->obj->access ? res->obj->access : access_src_flags(res->layout), + res->obj->access, flags, res->layout, new_layout, @@ -198,11 +93,6 @@ zink_resource_image_barrier_init(VkImageMemoryBarrier *imb, struct zink_resource void zink_resource_image_barrier2_init(VkImageMemoryBarrier2 *imb, struct zink_resource *res, VkImageLayout new_layout, VkAccessFlags flags, VkPipelineStageFlags pipeline) { - if (!pipeline) - pipeline = pipeline_dst_stage(new_layout); - if (!flags) - flags = access_dst_flags(new_layout); - VkImageSubresourceRange isr = { res->aspect, 0, VK_REMAINING_MIP_LEVELS, @@ -212,7 +102,7 @@ zink_resource_image_barrier2_init(VkImageMemoryBarrier2 *imb, struct zink_resour VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2, NULL, res->obj->access_stage ? res->obj->access_stage : VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, - res->obj->access ? res->obj->access : access_src_flags(res->layout), + res->obj->access, pipeline, flags, res->layout, @@ -511,11 +401,6 @@ template void zink_resource_image_barrier(struct zink_context *ctx, struct zink_resource *res, VkImageLayout new_layout, VkAccessFlags flags, VkPipelineStageFlags pipeline) { - if (!pipeline) - pipeline = pipeline_dst_stage(new_layout); - if (!flags) - flags = access_dst_flags(new_layout); - bool is_write = zink_resource_access_is_write(flags); if (is_write && zink_is_swapchain(res)) zink_kopper_set_readback_needs_update(res); @@ -693,9 +578,6 @@ template void zink_resource_memory_barrier(struct zink_context *ctx, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline) { - if (!pipeline) - pipeline = pipeline_access_stage(flags); - bool is_write = zink_resource_access_is_write(flags); enum zink_resource_access rw = is_write ? ZINK_RESOURCE_ACCESS_RW : ZINK_RESOURCE_ACCESS_WRITE; bool has_usage = zink_resource_has_usage(res); @@ -796,11 +678,6 @@ template void zink_resource_image_barrier_general(struct zink_context *ctx, struct zink_resource *res, VkImageLayout new_layout, VkAccessFlags flags, VkPipelineStageFlags pipeline) { - if (!pipeline) - pipeline = pipeline_dst_stage(new_layout); - if (!flags) - flags = access_dst_flags(new_layout); - assert(new_layout == VK_IMAGE_LAYOUT_GENERAL || new_layout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); /* if this requires an actual image barrier, send it through to the image barrier handlers */ if (res->obj->needs_zs_evaluate || res->obj->exportable || zink_is_swapchain(res) || res->layout != new_layout ||