mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-02 04:51:26 +12:00
vk: Fix clang build and resource leak on exit
This commit is contained in:
parent
ffa835efac
commit
3a65359d59
5 changed files with 25 additions and 3 deletions
|
@ -46,9 +46,10 @@ namespace vk
|
|||
#define IS_DIGIT(x) (x >= '0' && x <= '9')
|
||||
|
||||
constexpr int max_index_length = 2;
|
||||
const int name_length = static_cast<int>(name.length());
|
||||
std::string index;
|
||||
|
||||
for (int char_idx = name.length() - max_index_length; char_idx < name.length(); ++char_idx)
|
||||
for (int char_idx = name_length - max_index_length; char_idx < name_length; ++char_idx)
|
||||
{
|
||||
if (IS_DIGIT(name[char_idx]))
|
||||
{
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#include "Emu/RSX/VK/vkutils/descriptors.h"
|
||||
#include "stdafx.h"
|
||||
#include "../Overlays/overlay_compile_notification.h"
|
||||
#include "../Overlays/Shaders/shader_loading_dialog_native.h"
|
||||
|
@ -854,6 +855,9 @@ VKGSRender::~VKGSRender()
|
|||
m_command_buffer_pool.destroy();
|
||||
m_secondary_command_buffer_pool.destroy();
|
||||
|
||||
// Descriptors
|
||||
vk::descriptors::flush();
|
||||
|
||||
// Global resources
|
||||
vk::destroy_global_resources();
|
||||
|
||||
|
|
|
@ -420,7 +420,10 @@ namespace vk
|
|||
}
|
||||
|
||||
vkDestroyDescriptorSetLayout(m_device, m_descriptor_set_layout, nullptr);
|
||||
vk::get_resource_manager()->dispose(m_descriptor_pool);
|
||||
m_descriptor_pool->destroy();
|
||||
|
||||
m_descriptor_pool.reset();
|
||||
m_device = VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
void descriptor_table_t::init(VkDevice dev)
|
||||
|
|
|
@ -40,6 +40,12 @@ namespace vk
|
|||
// rsx_log.notice("[descriptor_manager::deregister] Now monitoring %u descriptor sets", m_notification_list.size());
|
||||
}
|
||||
|
||||
void destroy()
|
||||
{
|
||||
std::lock_guard lock(m_notifications_lock);
|
||||
m_notification_list.clear();
|
||||
}
|
||||
|
||||
dispatch_manager() = default;
|
||||
|
||||
private:
|
||||
|
@ -60,6 +66,11 @@ namespace vk
|
|||
g_fxo->get<dispatch_manager>().flush_all();
|
||||
}
|
||||
|
||||
void destroy()
|
||||
{
|
||||
g_fxo->get<dispatch_manager>().destroy();
|
||||
}
|
||||
|
||||
VkDescriptorSetLayout create_layout(const rsx::simple_array<VkDescriptorSetLayoutBinding>& bindings)
|
||||
{
|
||||
VkDescriptorSetLayoutCreateInfo infos = {};
|
||||
|
@ -414,11 +425,13 @@ namespace vk
|
|||
{
|
||||
m_push_type_mask |= type_mask;
|
||||
|
||||
#if !defined(__clang__) || (__clang_major__ >= 16)
|
||||
if (m_pending_writes.empty()) [[unlikely]]
|
||||
{
|
||||
m_pending_writes = std::move(write_cmds);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
const auto old_size = m_pending_writes.size();
|
||||
const auto new_size = write_cmds.size() + old_size;
|
||||
|
|
|
@ -122,7 +122,7 @@ namespace vk
|
|||
rsx::simple_array<VkDescriptorImageInfo> m_image_info_pool;
|
||||
rsx::simple_array<u32> m_dynamic_offsets;
|
||||
|
||||
#ifdef __clang__
|
||||
#if defined(__clang__) && (__clang_major__ < 16)
|
||||
// Clang (pre 16.x) does not support LWG 2089, std::construct_at for POD types
|
||||
struct WriteDescriptorSetT : public VkWriteDescriptorSet
|
||||
{
|
||||
|
@ -162,6 +162,7 @@ namespace vk
|
|||
{
|
||||
void init();
|
||||
void flush();
|
||||
void destroy();
|
||||
|
||||
VkDescriptorSetLayout create_layout(const rsx::simple_array<VkDescriptorSetLayoutBinding>& bindings);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue