aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan/vk_rasterizer.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-04-01 01:36:22 -0300
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-22 21:51:25 -0400
commit2fc698b040e7e25223ba6ebe31abb04b1fc65f06 (patch)
treedad5321dd5fd829a6493dd3f26b7c18bc6ec08ca /src/video_core/renderer_vulkan/vk_rasterizer.cpp
parentf1dd743731bd0e7b7f1ef172882971bcd15eb5bc (diff)
vulkan: Build pipelines in parallel at runtime
Wait from the worker thread for a pipeline to build before binding it to the command buffer. This allows queueing pipelines to multiple threads.
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_rasterizer.cpp')
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp15
1 files changed, 2 insertions, 13 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index d7d9927dd..f0bd4b8af 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -276,22 +276,11 @@ void RasterizerVulkan::DispatchCompute() {
return;
}
std::scoped_lock lock{texture_cache.mutex, buffer_cache.mutex};
- update_descriptor_queue.Acquire();
- pipeline->ConfigureBufferCache(buffer_cache);
- pipeline->ConfigureTextureCache(kepler_compute, gpu_memory, texture_cache);
- const VkDescriptorSet descriptor_set{pipeline->UpdateDescriptorSet()};
+ pipeline->Configure(kepler_compute, gpu_memory, scheduler, buffer_cache, texture_cache);
const auto& qmd{kepler_compute.launch_description};
const std::array<u32, 3> dim{qmd.grid_dim_x, qmd.grid_dim_y, qmd.grid_dim_z};
- const VkPipeline pipeline_handle{pipeline->Handle()};
- const VkPipelineLayout pipeline_layout{pipeline->PipelineLayout()};
- scheduler.Record(
- [pipeline_handle, pipeline_layout, dim, descriptor_set](vk::CommandBuffer cmdbuf) {
- cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, pipeline_handle);
- cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, pipeline_layout, 0,
- descriptor_set, nullptr);
- cmdbuf.Dispatch(dim[0], dim[1], dim[2]);
- });
+ scheduler.Record([dim](vk::CommandBuffer cmdbuf) { cmdbuf.Dispatch(dim[0], dim[1], dim[2]); });
}
void RasterizerVulkan::ResetCounter(VideoCore::QueryType type) {