vk: Fix some sampler load crashes

This commit is contained in:
kd-11 2023-05-22 20:45:16 +03:00 committed by kd-11
parent bf78b197a3
commit 98c0944419
3 changed files with 11 additions and 10 deletions

View file

@ -136,6 +136,7 @@ namespace vk
if (const auto found = m_sampler_pool.find(key))
{
found->add_ref();
return found;
}
@ -145,9 +146,8 @@ namespace vk
min_filter, mag_filter, mipmap_mode, border_color,
depth_compare, depth_compare_mode);
result->add_ref();
auto ret = result.get();
m_sampler_pool.emplace(key, result);
auto ret = m_sampler_pool.emplace(key, result);
ret->add_ref();
return ret;
}

View file

@ -154,7 +154,7 @@ namespace vk
m_custom_color_sampler_pool.clear();
}
vk::sampler* sampler_pool_t::find(const sampler_pool_key_t& key) const
cached_sampler_object_t* sampler_pool_t::find(const sampler_pool_key_t& key) const
{
if (!key.border_color_key) [[ likely ]]
{
@ -174,17 +174,18 @@ namespace vk
return nullptr;
}
void sampler_pool_t::emplace(const sampler_pool_key_t& key, std::unique_ptr<cached_sampler_object_t>& object)
cached_sampler_object_t* sampler_pool_t::emplace(const sampler_pool_key_t& key, std::unique_ptr<cached_sampler_object_t>& object)
{
object->key = key;
if (!key.border_color_key) [[ likely ]]
{
m_generic_sampler_pool.emplace(key.base_key, std::move(object));
return;
const auto [iterator, _unused] = m_generic_sampler_pool.emplace(key.base_key, std::move(object));
return iterator->second.get();
}
m_custom_color_sampler_pool.emplace (key.base_key, std::move(object));
const auto [iterator, _unused] = m_custom_color_sampler_pool.emplace(key.base_key, std::move(object));
return iterator->second.get();
}
std::vector<std::unique_ptr<cached_sampler_object_t>> sampler_pool_t::collect(std::function<bool(const cached_sampler_object_t&)> predicate)

View file

@ -80,9 +80,9 @@ namespace vk
void clear();
vk::sampler* find(const sampler_pool_key_t& key) const;
cached_sampler_object_t* find(const sampler_pool_key_t& key) const;
void emplace(const sampler_pool_key_t& key, std::unique_ptr<cached_sampler_object_t>& object);
cached_sampler_object_t* emplace(const sampler_pool_key_t& key, std::unique_ptr<cached_sampler_object_t>& object);
std::vector<std::unique_ptr<cached_sampler_object_t>> collect(std::function<bool(const cached_sampler_object_t&)> predicate);
};