summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pass.cpp51
1 files changed, 26 insertions, 25 deletions
diff --git a/src/video_core/renderer_vulkan/vk_compute_pass.cpp b/src/video_core/renderer_vulkan/vk_compute_pass.cpp
index a3d478837..4cba777e6 100644
--- a/src/video_core/renderer_vulkan/vk_compute_pass.cpp
+++ b/src/video_core/renderer_vulkan/vk_compute_pass.cpp
@@ -328,31 +328,32 @@ void ASTCDecoderPass::Assemble(Image& image, const StagingBufferRef& map,
328 const VkImageAspectFlags aspect_mask = image.AspectMask(); 328 const VkImageAspectFlags aspect_mask = image.AspectMask();
329 const VkImage vk_image = image.Handle(); 329 const VkImage vk_image = image.Handle();
330 const bool is_initialized = image.ExchangeInitialization(); 330 const bool is_initialized = image.ExchangeInitialization();
331 scheduler.Record( 331 scheduler.Record([vk_pipeline, vk_image, aspect_mask,
332 [vk_pipeline, vk_image, aspect_mask, is_initialized](vk::CommandBuffer cmdbuf) { 332 is_initialized](vk::CommandBuffer cmdbuf) {
333 const VkImageMemoryBarrier image_barrier{ 333 const VkImageMemoryBarrier image_barrier{
334 .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, 334 .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
335 .pNext = nullptr, 335 .pNext = nullptr,
336 .srcAccessMask = is_initialized ? VK_ACCESS_SHADER_WRITE_BIT : VK_ACCESS_NONE, 336 .srcAccessMask = static_cast<VkAccessFlags>(is_initialized ? VK_ACCESS_SHADER_WRITE_BIT
337 .dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT, 337 : VK_ACCESS_NONE),
338 .oldLayout = is_initialized ? VK_IMAGE_LAYOUT_GENERAL : VK_IMAGE_LAYOUT_UNDEFINED, 338 .dstAccessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,
339 .newLayout = VK_IMAGE_LAYOUT_GENERAL, 339 .oldLayout = is_initialized ? VK_IMAGE_LAYOUT_GENERAL : VK_IMAGE_LAYOUT_UNDEFINED,
340 .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, 340 .newLayout = VK_IMAGE_LAYOUT_GENERAL,
341 .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, 341 .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
342 .image = vk_image, 342 .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
343 .subresourceRange{ 343 .image = vk_image,
344 .aspectMask = aspect_mask, 344 .subresourceRange{
345 .baseMipLevel = 0, 345 .aspectMask = aspect_mask,
346 .levelCount = VK_REMAINING_MIP_LEVELS, 346 .baseMipLevel = 0,
347 .baseArrayLayer = 0, 347 .levelCount = VK_REMAINING_MIP_LEVELS,
348 .layerCount = VK_REMAINING_ARRAY_LAYERS, 348 .baseArrayLayer = 0,
349 }, 349 .layerCount = VK_REMAINING_ARRAY_LAYERS,
350 }; 350 },
351 cmdbuf.PipelineBarrier(is_initialized ? VK_PIPELINE_STAGE_ALL_COMMANDS_BIT 351 };
352 : VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 352 cmdbuf.PipelineBarrier(is_initialized ? VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
353 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, image_barrier); 353 : VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
354 cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, vk_pipeline); 354 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, image_barrier);
355 }); 355 cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, vk_pipeline);
356 });
356 for (const VideoCommon::SwizzleParameters& swizzle : swizzles) { 357 for (const VideoCommon::SwizzleParameters& swizzle : swizzles) {
357 const size_t input_offset = swizzle.buffer_offset + map.offset; 358 const size_t input_offset = swizzle.buffer_offset + map.offset;
358 const u32 num_dispatches_x = Common::DivCeil(swizzle.num_tiles.width, 8U); 359 const u32 num_dispatches_x = Common::DivCeil(swizzle.num_tiles.width, 8U);