renderer_vulkan: Allocate descriptor sets during reinterpretation
This commit is contained in:
		| @@ -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); | ||||
|   | ||||
| @@ -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<u32>(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) { | ||||
|   | ||||
| @@ -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<ExecutionSlot, SCHEDULER_COMMAND_COUNT> commands{}; | ||||
|     u32 current_command = 0; | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user