diff --git a/rpcs3/Emu/RSX/Common/simple_array.hpp b/rpcs3/Emu/RSX/Common/simple_array.hpp index 5d54317402..22b9e623f0 100644 --- a/rpcs3/Emu/RSX/Common/simple_array.hpp +++ b/rpcs3/Emu/RSX/Common/simple_array.hpp @@ -138,6 +138,17 @@ namespace rsx _data[_size++] = val; } + template + void emplace_back(Args&&... args) + { + if (_size >= _capacity) + { + reserve(_capacity + 16); + } + + std::construct_at(&_data[_size++], std::forward(args)...); + } + Ty pop_back() { return _data[--_size]; diff --git a/rpcs3/Emu/RSX/VK/vkutils/descriptors.cpp b/rpcs3/Emu/RSX/VK/vkutils/descriptors.cpp index 6c7826d8b1..05b88a10a3 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/descriptors.cpp +++ b/rpcs3/Emu/RSX/VK/vkutils/descriptors.cpp @@ -275,8 +275,7 @@ namespace vk { m_push_type_mask |= (1ull << type); m_buffer_view_pool.push_back(buffer_view); - m_pending_writes.push_back( - { + m_pending_writes.emplace_back( VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, // sType nullptr, // pNext m_handle, // dstSet @@ -287,15 +286,14 @@ namespace vk nullptr, // pImageInfo nullptr, // pBufferInfo &m_buffer_view_pool.back() // pTexelBufferView - }); + ); } void descriptor_set::push(const VkDescriptorBufferInfo& buffer_info, VkDescriptorType type, u32 binding) { m_push_type_mask |= (1ull << type); m_buffer_info_pool.push_back(buffer_info); - m_pending_writes.push_back( - { + m_pending_writes.emplace_back( VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, // sType nullptr, // pNext m_handle, // dstSet @@ -306,15 +304,14 @@ namespace vk nullptr, // pImageInfo &m_buffer_info_pool.back(), // pBufferInfo nullptr // pTexelBufferView - }); + ); } void descriptor_set::push(const VkDescriptorImageInfo& image_info, VkDescriptorType type, u32 binding) { m_push_type_mask |= (1ull << type); m_image_info_pool.push_back(image_info); - m_pending_writes.push_back( - { + m_pending_writes.emplace_back( VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, // sType nullptr, // pNext m_handle, // dstSet @@ -325,7 +322,7 @@ namespace vk &m_image_info_pool.back(), // pImageInfo nullptr, // pBufferInfo nullptr // pTexelBufferView - }); + ); } void descriptor_set::push(const VkDescriptorImageInfo* image_info, u32 count, VkDescriptorType type, u32 binding)