Merge pull request #6677 from ReinUsesLisp/new-validate-errors
vulkan: Fix misc validation and synchronization errors
This commit is contained in:
		| @@ -374,20 +374,20 @@ void ASTCDecoderPass::MakeDataBuffer() { | ||||
|  | ||||
|     scheduler.Record([src = staging_ref.buffer, offset = staging_ref.offset, dst = *data_buffer, | ||||
|                       TOTAL_BUFFER_SIZE](vk::CommandBuffer cmdbuf) { | ||||
|         cmdbuf.CopyBuffer(src, dst, | ||||
|                           VkBufferCopy{ | ||||
|                               .srcOffset = offset, | ||||
|                               .dstOffset = 0, | ||||
|                               .size = TOTAL_BUFFER_SIZE, | ||||
|                           }); | ||||
|         cmdbuf.PipelineBarrier( | ||||
|             VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, | ||||
|             VkMemoryBarrier{ | ||||
|                 .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER, | ||||
|                 .pNext = nullptr, | ||||
|                 .srcAccessMask = 0, | ||||
|                 .dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, | ||||
|             }); | ||||
|         static constexpr VkMemoryBarrier write_barrier{ | ||||
|             .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER, | ||||
|             .pNext = nullptr, | ||||
|             .srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT, | ||||
|             .dstAccessMask = VK_ACCESS_SHADER_READ_BIT, | ||||
|         }; | ||||
|         const VkBufferCopy copy{ | ||||
|             .srcOffset = offset, | ||||
|             .dstOffset = 0, | ||||
|             .size = TOTAL_BUFFER_SIZE, | ||||
|         }; | ||||
|         cmdbuf.CopyBuffer(src, dst, copy); | ||||
|         cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, | ||||
|                                0, write_barrier); | ||||
|     }); | ||||
| } | ||||
|  | ||||
| @@ -411,7 +411,7 @@ void ASTCDecoderPass::Assemble(Image& image, const StagingBufferRef& map, | ||||
|             const VkImageMemoryBarrier image_barrier{ | ||||
|                 .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, | ||||
|                 .pNext = nullptr, | ||||
|                 .srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT, | ||||
|                 .srcAccessMask = is_initialized ? VK_ACCESS_SHADER_WRITE_BIT : VkAccessFlags{}, | ||||
|                 .dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT, | ||||
|                 .oldLayout = is_initialized ? VK_IMAGE_LAYOUT_GENERAL : VK_IMAGE_LAYOUT_UNDEFINED, | ||||
|                 .newLayout = VK_IMAGE_LAYOUT_GENERAL, | ||||
| @@ -426,7 +426,8 @@ void ASTCDecoderPass::Assemble(Image& image, const StagingBufferRef& map, | ||||
|                     .layerCount = VK_REMAINING_ARRAY_LAYERS, | ||||
|                 }, | ||||
|             }; | ||||
|             cmdbuf.PipelineBarrier(is_initialized ? VK_PIPELINE_STAGE_ALL_COMMANDS_BIT : 0, | ||||
|             cmdbuf.PipelineBarrier(is_initialized ? VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | ||||
|                                                   : VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, | ||||
|                                    VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, image_barrier); | ||||
|             cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, vk_pipeline); | ||||
|         }); | ||||
|   | ||||
| @@ -911,6 +911,7 @@ void Image::UploadMemory(const StagingBufferRef& map, | ||||
|  | ||||
| void Image::DownloadMemory(const StagingBufferRef& map, std::span<const BufferImageCopy> copies) { | ||||
|     std::vector vk_copies = TransformBufferImageCopies(copies, map.offset, aspect_mask); | ||||
|     scheduler->RequestOutsideRenderPassOperationContext(); | ||||
|     scheduler->Record([buffer = map.buffer, image = *image, aspect_mask = aspect_mask, | ||||
|                        vk_copies](vk::CommandBuffer cmdbuf) { | ||||
|         const VkImageMemoryBarrier read_barrier{ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user