|
|
|
@ -346,7 +346,7 @@ BufferCacheRuntime::BufferCacheRuntime(const Device& device_, MemoryAllocator& m |
|
|
|
driver_id == VK_DRIVER_ID_ARM_PROPRIETARY; |
|
|
|
if (limit_dynamic_storage_buffers) { |
|
|
|
max_dynamic_storage_buffers = device.GetMaxDescriptorSetStorageBuffersDynamic(); |
|
|
|
} |
|
|
|
} |
|
|
|
if (device.SupportsUint8Indices()) { |
|
|
|
uint8_pass = std::make_unique<Uint8Pass>(device, scheduler, descriptor_pool, staging_pool, |
|
|
|
compute_pass_descriptor_queue); |
|
|
|
@ -449,6 +449,14 @@ void BufferCacheRuntime::CopyBuffer(VkBuffer dst_buffer, VkBuffer src_buffer, |
|
|
|
} |
|
|
|
cmdbuf.CopyBuffer(src_buffer, dst_buffer, VideoCommon::FixSmallVectorADL(vk_copies)); |
|
|
|
if (barrier) { |
|
|
|
// Buffer reads can go to vertex input, shaders, or compute
|
|
|
|
const VkPipelineStageFlags dst_stages = |
|
|
|
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT | |
|
|
|
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | |
|
|
|
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | |
|
|
|
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | |
|
|
|
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | |
|
|
|
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; |
|
|
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, |
|
|
|
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, WRITE_BARRIER); |
|
|
|
} |
|
|
|
@ -478,7 +486,14 @@ void BufferCacheRuntime::PostCopyBarrier() { |
|
|
|
}; |
|
|
|
scheduler.RequestOutsideRenderPassOperationContext(); |
|
|
|
scheduler.Record([](vk::CommandBuffer cmdbuf) { |
|
|
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, |
|
|
|
const VkPipelineStageFlags dst_stages = |
|
|
|
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT | |
|
|
|
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | |
|
|
|
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | |
|
|
|
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | |
|
|
|
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | |
|
|
|
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; |
|
|
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, dst_stages, |
|
|
|
0, WRITE_BARRIER); |
|
|
|
}); |
|
|
|
} |
|
|
|
@ -505,7 +520,15 @@ void BufferCacheRuntime::ClearBuffer(VkBuffer dest_buffer, u32 offset, size_t si |
|
|
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, |
|
|
|
0, READ_BARRIER); |
|
|
|
cmdbuf.FillBuffer(dest_buffer, offset, size, value); |
|
|
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, |
|
|
|
// Buffer reads can go to vertex input, shaders, or compute
|
|
|
|
const VkPipelineStageFlags dst_stages_clear = |
|
|
|
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT | |
|
|
|
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | |
|
|
|
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | |
|
|
|
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | |
|
|
|
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | |
|
|
|
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; |
|
|
|
cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_TRANSFER_BIT, dst_stages_clear, |
|
|
|
0, WRITE_BARRIER); |
|
|
|
}); |
|
|
|
} |
|
|
|
|