8namespace pixelbullet::application_layers_internal
12 VkImageView image_view = VK_NULL_HANDLE;
13 VkSampler sampler = VK_NULL_HANDLE;
17 if (image_view != other.image_view)
19 return image_view < other.image_view;
22 return sampler < other.sampler;
28 return key.image_view != VK_NULL_HANDLE && key.sampler != VK_NULL_HANDLE;
31template <
typename CacheMap,
typename CreateFn>
32inline VkDescriptorSet GetOrCreateSampledImageTextureDescriptor(CacheMap& cache,
const SampledImageTextureKey& key,
33 CreateFn&& create_descriptor)
35 if (!IsValidSampledImageTextureKey(key))
37 return VK_NULL_HANDLE;
40 if (
const auto it = cache.find(key); it != cache.end())
45 const VkDescriptorSet descriptor_set = create_descriptor(key.sampler, key.image_view);
46 if (descriptor_set == VK_NULL_HANDLE)
48 return VK_NULL_HANDLE;
51 cache.emplace(key, descriptor_set);
52 return descriptor_set;
55template <
typename CacheMap,
typename DestroyFn>
56inline void ClearSampledImageTextureDescriptors(CacheMap& cache, DestroyFn&& destroy_descriptor)
58 for (
const auto& [key, descriptor_set] : cache)
60 destroy_descriptor(descriptor_set);
66inline bool RequiresTextureCacheRebuild(
const std::vector<VkDescriptorSet>& descriptor_sets,
const std::vector<VkImageView>& cached_views,
67 const std::vector<VkSampler>& cached_samplers,
const std::vector<VkImageView>& current_views,
68 const std::vector<VkSampler>& current_samplers)
noexcept
70 if (descriptor_sets.size() != current_views.size() || current_views.size() != current_samplers.size() ||
71 cached_views.size() != current_views.size() || cached_samplers.size() != current_samplers.size())
76 for (std::size_t image_index = 0; image_index < current_views.size(); ++image_index)
78 if (cached_views[image_index] != current_views[image_index] || cached_samplers[image_index] != current_samplers[image_index])
Definition imgui_layer_helpers_internal.h:11