vk: Insert barriers on the scratch buffer when detiling memory
This commit is contained in:
@@ -1304,6 +1304,15 @@ namespace vk
|
|||||||
.image_bpp = bpp
|
.image_bpp = bpp
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Pre-Transfer barrier
|
||||||
|
vk::insert_buffer_memory_barrier(
|
||||||
|
cmd,
|
||||||
|
scratch_buf->value,
|
||||||
|
tiled_data_scratch_offset, section_length,
|
||||||
|
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
|
VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_TRANSFER_WRITE_BIT
|
||||||
|
);
|
||||||
|
|
||||||
// Transfer
|
// Transfer
|
||||||
VkBufferCopy copy_rgn
|
VkBufferCopy copy_rgn
|
||||||
{
|
{
|
||||||
@@ -1313,16 +1322,25 @@ namespace vk
|
|||||||
};
|
};
|
||||||
vkCmdCopyBuffer(cmd, dma_mapping.second->value, scratch_buf->value, 1, ©_rgn);
|
vkCmdCopyBuffer(cmd, dma_mapping.second->value, scratch_buf->value, 1, ©_rgn);
|
||||||
|
|
||||||
// Barrier
|
// Post-Transfer barrier
|
||||||
vk::insert_buffer_memory_barrier(
|
vk::insert_buffer_memory_barrier(
|
||||||
cmd, scratch_buf->value, linear_data_scratch_offset, section_length,
|
cmd, scratch_buf->value, tiled_data_scratch_offset, section_length,
|
||||||
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
|
VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
|
||||||
VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT);
|
VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_READ_BIT);
|
||||||
|
|
||||||
|
// Pre-Compute barrier
|
||||||
|
vk::insert_buffer_memory_barrier(
|
||||||
|
cmd,
|
||||||
|
scratch_buf->value,
|
||||||
|
linear_data_scratch_offset, static_cast<u32>(width) * height * bpp,
|
||||||
|
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
|
||||||
|
VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, VK_ACCESS_MEMORY_WRITE_BIT
|
||||||
|
);
|
||||||
|
|
||||||
// Detile
|
// Detile
|
||||||
vk::get_compute_task<vk::cs_tile_memcpy<RSX_detiler_op::decode>>()->run(cmd, config);
|
vk::get_compute_task<vk::cs_tile_memcpy<RSX_detiler_op::decode>>()->run(cmd, config);
|
||||||
|
|
||||||
// Barrier
|
// Post-Compute barrier
|
||||||
vk::insert_buffer_memory_barrier(
|
vk::insert_buffer_memory_barrier(
|
||||||
cmd, scratch_buf->value, linear_data_scratch_offset, static_cast<u32>(width) * height * bpp,
|
cmd, scratch_buf->value, linear_data_scratch_offset, static_cast<u32>(width) * height * bpp,
|
||||||
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
|
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
|
||||||
|
|||||||
Reference in New Issue
Block a user