Migrate to new KHR_synchronization2 (core in 1.3) barriers. (#670)

* Migrate to new KHR_synchronization2 (core in 1.3) barriers.

* More barriers improvements and use vkQueueSubmit2

* FIX layout during resolve, need to be set to COPY_DST so we don't have to workaround Vulkan side.

* Complete total VK_KHR_synchronization2 migration.

* Use VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT instead of VK_PIPELINE_STAGE_2_TRANSFER_BIT for memory barriers.
This commit is contained in:
Amer Koleci
2023-04-26 11:54:44 +02:00
committed by GitHub
parent 44df4262f0
commit bde4e61c92
3 changed files with 321 additions and 265 deletions
+2
View File
@@ -886,6 +886,7 @@ namespace wi::graphics
image.type = Type::RESOLVE;
image.texture = resource;
image.layout_before = layout_before;
image.layout = ResourceState::COPY_DST;
image.layout_after = layout_after;
image.subresource = subresource_SRV;
return image;
@@ -903,6 +904,7 @@ namespace wi::graphics
image.type = Type::RESOLVE_DEPTH;
image.texture = resource;
image.layout_before = layout_before;
image.layout = ResourceState::COPY_DST;
image.layout_after = layout_after;
image.subresource = subresource_SRV;
image.depth_resolve_mode = depth_resolve_mode;
File diff suppressed because it is too large Load Diff
+8 -10
View File
@@ -98,12 +98,10 @@ namespace wi::graphics
wi::vector<SwapChain> swapchain_updates;
wi::vector<VkSwapchainKHR> submit_swapchains;
wi::vector<uint32_t> submit_swapChainImageIndices;
wi::vector<VkPipelineStageFlags> submit_waitStages;
wi::vector<VkSemaphore> submit_waitSemaphores;
wi::vector<uint64_t> submit_waitValues;
wi::vector<VkSemaphoreSubmitInfo> submit_waitSemaphoreInfos;
wi::vector<VkSemaphore> submit_signalSemaphores;
wi::vector<uint64_t> submit_signalValues;
wi::vector<VkCommandBuffer> submit_cmds;
wi::vector<VkSemaphoreSubmitInfo> submit_signalSemaphoreInfos;
wi::vector<VkCommandBufferSubmitInfo> submit_cmds;
bool sparse_binding_supported = false;
std::mutex locker;
@@ -204,14 +202,14 @@ namespace wi::graphics
ShadingRate prev_shadingrate = {};
wi::vector<SwapChain> prev_swapchains;
bool dirty_pso = {};
wi::vector<VkMemoryBarrier> frame_memoryBarriers;
wi::vector<VkImageMemoryBarrier> frame_imageBarriers;
wi::vector<VkBufferMemoryBarrier> frame_bufferBarriers;
wi::vector<VkMemoryBarrier2> frame_memoryBarriers;
wi::vector<VkImageMemoryBarrier2> frame_imageBarriers;
wi::vector<VkBufferMemoryBarrier2> frame_bufferBarriers;
wi::vector<VkAccelerationStructureGeometryKHR> accelerationstructure_build_geometries;
wi::vector<VkAccelerationStructureBuildRangeInfoKHR> accelerationstructure_build_ranges;
RenderPassInfo renderpass_info;
wi::vector<VkImageMemoryBarrier> renderpass_barriers_begin;
wi::vector<VkImageMemoryBarrier> renderpass_barriers_end;
wi::vector<VkImageMemoryBarrier2> renderpass_barriers_begin;
wi::vector<VkImageMemoryBarrier2> renderpass_barriers_end;
void reset(uint32_t bufferindex)
{