rsx: Use emplace when constructing in-place.

- Unexpectedly high gains for msvc builds. GCC doesn't care, clang shits itself.
This commit is contained in:
kd-11 2023-02-27 21:51:22 +03:00 committed by kd-11
parent 1b8a69154f
commit 0bb8127372
2 changed files with 17 additions and 9 deletions

View File

@ -138,6 +138,17 @@ namespace rsx
_data[_size++] = val;
}
template <typename... Args>
void emplace_back(Args&&... args)
{
if (_size >= _capacity)
{
reserve(_capacity + 16);
}
std::construct_at(&_data[_size++], std::forward<Args&&>(args)...);
}
Ty pop_back()
{
return _data[--_size];

View File

@ -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)