From 009d73fdf647fa7b429c944d28509b78e108f19b Mon Sep 17 00:00:00 2001 From: emufan4568 Date: Tue, 11 Oct 2022 19:22:18 +0300 Subject: [PATCH] renderer_vulkan: Allocate descriptor sets during reinterpretation --- .../renderer_vulkan/vk_format_reinterpreter.cpp | 15 +++++++-------- .../renderer_vulkan/vk_task_scheduler.cpp | 6 ++---- .../renderer_vulkan/vk_task_scheduler.h | 6 ------ 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_format_reinterpreter.cpp b/src/video_core/renderer_vulkan/vk_format_reinterpreter.cpp index dc4eae00c..7863a527a 100644 --- a/src/video_core/renderer_vulkan/vk_format_reinterpreter.cpp +++ b/src/video_core/renderer_vulkan/vk_format_reinterpreter.cpp @@ -99,13 +99,6 @@ void main() { compute_pipeline_layout = device.createPipelineLayout(layout_info); - const vk::DescriptorSetAllocateInfo alloc_info = {.descriptorPool = - scheduler.GetPersistentDescriptorPool(), - .descriptorSetCount = 1, - .pSetLayouts = &descriptor_layout}; - - descriptor_set = device.allocateDescriptorSets(alloc_info)[0]; - const vk::PipelineShaderStageCreateInfo compute_stage = { .stage = vk::ShaderStageFlagBits::eCompute, .module = compute_shader, .pName = "main"}; @@ -144,10 +137,16 @@ void D24S8toRGBA8::Reinterpret(Surface& source, VideoCore::Rect2D src_rect, Surf vk::DescriptorImageInfo{.imageView = dest.GetImageView(), .imageLayout = vk::ImageLayout::eGeneral}}; + const vk::DescriptorSetAllocateInfo alloc_info = {.descriptorPool = + scheduler.GetDescriptorPool(), + .descriptorSetCount = 1, + .pSetLayouts = &descriptor_layout}; + + descriptor_set = device.allocateDescriptorSets(alloc_info)[0]; + device.updateDescriptorSetWithTemplate(descriptor_set, update_template, textures[0]); command_buffer.bindDescriptorSets(vk::PipelineBindPoint::eCompute, compute_pipeline_layout, 0, 1, &descriptor_set, 0, nullptr); - command_buffer.bindPipeline(vk::PipelineBindPoint::eCompute, compute_pipeline); const auto src_offset = Common::MakeVec(src_rect.left, src_rect.bottom); diff --git a/src/video_core/renderer_vulkan/vk_task_scheduler.cpp b/src/video_core/renderer_vulkan/vk_task_scheduler.cpp index 977d61b13..947a07ddc 100644 --- a/src/video_core/renderer_vulkan/vk_task_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_task_scheduler.cpp @@ -35,15 +35,14 @@ TaskScheduler::TaskScheduler(const Instance& instance, RendererVulkan& renderer) vk::DescriptorPoolSize{vk::DescriptorType::eSampledImage, 2048}, vk::DescriptorPoolSize{vk::DescriptorType::eCombinedImageSampler, 512}, vk::DescriptorPoolSize{vk::DescriptorType::eSampler, 2048}, - vk::DescriptorPoolSize{vk::DescriptorType::eUniformTexelBuffer, 1024}}; + vk::DescriptorPoolSize{vk::DescriptorType::eUniformTexelBuffer, 1024}, + vk::DescriptorPoolSize{vk::DescriptorType::eStorageImage, 1024}}; const vk::DescriptorPoolCreateInfo descriptor_pool_info = { .maxSets = 2048, .poolSizeCount = static_cast(pool_sizes.size()), .pPoolSizes = pool_sizes.data()}; - persistent_descriptor_pool = device.createDescriptorPool(descriptor_pool_info); - const vk::CommandBufferAllocateInfo buffer_info = {.commandPool = command_pool, .level = vk::CommandBufferLevel::ePrimary, .commandBufferCount = @@ -86,7 +85,6 @@ TaskScheduler::~TaskScheduler() { } device.destroyCommandPool(command_pool); - device.destroyDescriptorPool(persistent_descriptor_pool); } void TaskScheduler::Synchronize(u32 slot) { diff --git a/src/video_core/renderer_vulkan/vk_task_scheduler.h b/src/video_core/renderer_vulkan/vk_task_scheduler.h index 53cbe97fc..64285a09c 100644 --- a/src/video_core/renderer_vulkan/vk_task_scheduler.h +++ b/src/video_core/renderer_vulkan/vk_task_scheduler.h @@ -52,11 +52,6 @@ public: return commands[current_command].descriptor_pool; } - /// Returns the persistent descriptor pool - vk::DescriptorPool GetPersistentDescriptorPool() const { - return persistent_descriptor_pool; - } - /// Returns the index of the current command slot u32 GetCurrentSlotIndex() const { return current_command; @@ -97,7 +92,6 @@ private: vk::CommandPool command_pool{}; vk::Semaphore timeline{}; - vk::DescriptorPool persistent_descriptor_pool; std::array commands{}; u32 current_command = 0; };