summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Ameer J2021-07-18 18:30:28 -0400
committerGravatar GitHub2021-07-18 18:30:28 -0400
commitefc449ca264bf04d51232b884e4fe16e009e190d (patch)
treeceac80121295e31d02c6a715862a6cc489450940
parentMerge pull request #6647 from lat9nq/specify-system-path (diff)
parentvk_texture_cache: Finalize renderpass when downloading images (diff)
downloadyuzu-efc449ca264bf04d51232b884e4fe16e009e190d.tar.gz
yuzu-efc449ca264bf04d51232b884e4fe16e009e190d.tar.xz
yuzu-efc449ca264bf04d51232b884e4fe16e009e190d.zip
Merge pull request #6677 from ReinUsesLisp/new-validate-errors
vulkan: Fix misc validation and synchronization errors
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pass.cpp33
-rw-r--r--src/video_core/renderer_vulkan/vk_texture_cache.cpp1
2 files changed, 18 insertions, 16 deletions
diff --git a/src/video_core/renderer_vulkan/vk_compute_pass.cpp b/src/video_core/renderer_vulkan/vk_compute_pass.cpp
index 205cd3b05..4181d83ee 100644
--- a/src/video_core/renderer_vulkan/vk_compute_pass.cpp
+++ b/src/video_core/renderer_vulkan/vk_compute_pass.cpp
@@ -374,20 +374,20 @@ void ASTCDecoderPass::MakeDataBuffer() {
374 374
375 scheduler.Record([src = staging_ref.buffer, offset = staging_ref.offset, dst = *data_buffer, 375 scheduler.Record([src = staging_ref.buffer, offset = staging_ref.offset, dst = *data_buffer,
376 TOTAL_BUFFER_SIZE](vk::CommandBuffer cmdbuf) { 376 TOTAL_BUFFER_SIZE](vk::CommandBuffer cmdbuf) {
377 cmdbuf.CopyBuffer(src, dst, 377 static constexpr VkMemoryBarrier write_barrier{
378 VkBufferCopy{ 378 .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
379 .srcOffset = offset, 379 .pNext = nullptr,
380 .dstOffset = 0, 380 .srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT,
381 .size = TOTAL_BUFFER_SIZE, 381 .dstAccessMask = VK_ACCESS_SHADER_READ_BIT,
382 }); 382 };
383 cmdbuf.PipelineBarrier( 383 const VkBufferCopy copy{
384 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 384 .srcOffset = offset,
385 VkMemoryBarrier{ 385 .dstOffset = 0,
386 .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER, 386 .size = TOTAL_BUFFER_SIZE,
387 .pNext = nullptr, 387 };
388 .srcAccessMask = 0, 388 cmdbuf.CopyBuffer(src, dst, copy);
389 .dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, 389 cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
390 }); 390 0, write_barrier);
391 }); 391 });
392} 392}
393 393
@@ -411,7 +411,7 @@ void ASTCDecoderPass::Assemble(Image& image, const StagingBufferRef& map,
411 const VkImageMemoryBarrier image_barrier{ 411 const VkImageMemoryBarrier image_barrier{
412 .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, 412 .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
413 .pNext = nullptr, 413 .pNext = nullptr,
414 .srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT, 414 .srcAccessMask = is_initialized ? VK_ACCESS_SHADER_WRITE_BIT : VkAccessFlags{},
415 .dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT, 415 .dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,
416 .oldLayout = is_initialized ? VK_IMAGE_LAYOUT_GENERAL : VK_IMAGE_LAYOUT_UNDEFINED, 416 .oldLayout = is_initialized ? VK_IMAGE_LAYOUT_GENERAL : VK_IMAGE_LAYOUT_UNDEFINED,
417 .newLayout = VK_IMAGE_LAYOUT_GENERAL, 417 .newLayout = VK_IMAGE_LAYOUT_GENERAL,
@@ -426,7 +426,8 @@ void ASTCDecoderPass::Assemble(Image& image, const StagingBufferRef& map,
426 .layerCount = VK_REMAINING_ARRAY_LAYERS, 426 .layerCount = VK_REMAINING_ARRAY_LAYERS,
427 }, 427 },
428 }; 428 };
429 cmdbuf.PipelineBarrier(is_initialized ? VK_PIPELINE_STAGE_ALL_COMMANDS_BIT : 0, 429 cmdbuf.PipelineBarrier(is_initialized ? VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
430 : VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
430 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, image_barrier); 431 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, image_barrier);
431 cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, vk_pipeline); 432 cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, vk_pipeline);
432 }); 433 });
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
index a2ab4d1ee..2638099ed 100644
--- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
@@ -911,6 +911,7 @@ void Image::UploadMemory(const StagingBufferRef& map,
911 911
912void Image::DownloadMemory(const StagingBufferRef& map, std::span<const BufferImageCopy> copies) { 912void Image::DownloadMemory(const StagingBufferRef& map, std::span<const BufferImageCopy> copies) {
913 std::vector vk_copies = TransformBufferImageCopies(copies, map.offset, aspect_mask); 913 std::vector vk_copies = TransformBufferImageCopies(copies, map.offset, aspect_mask);
914 scheduler->RequestOutsideRenderPassOperationContext();
914 scheduler->Record([buffer = map.buffer, image = *image, aspect_mask = aspect_mask, 915 scheduler->Record([buffer = map.buffer, image = *image, aspect_mask = aspect_mask,
915 vk_copies](vk::CommandBuffer cmdbuf) { 916 vk_copies](vk::CommandBuffer cmdbuf) {
916 const VkImageMemoryBarrier read_barrier{ 917 const VkImageMemoryBarrier read_barrier{