PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
descriptors_handler_internal.h
1#pragma once
2
3#include "pixelbullet/private/graphics/rendering/descriptors/descriptor.h"
4#include "pixelbullet/private/graphics/rendering/pipelines/pipeline_metadata.h"
5
6#include <optional>
7#include <string>
8#include <utility>
9#include <vector>
10
11namespace pixelbullet::graphics_descriptors_internal
12{
14{
15 uint32_t set = 0;
16 WriteDescriptorSet write_descriptor;
17};
18
19WriteDescriptorSet BuildArrayWriteDescriptorSet(const std::string& descriptor_name, const DescriptorBindingInfo& binding,
20 const std::vector<const Descriptor*>& descriptors,
21 const std::optional<OffsetSize>& offset_size);
22std::vector<std::vector<VkWriteDescriptorSet>>
23BuildWriteDescriptorSetsBySet(const std::vector<PreparedDescriptorWrite>& descriptor_writes,
24 const std::vector<std::vector<VkDescriptorSet>>& descriptor_sets_by_set, uint32_t descriptor_index);
25std::vector<VkDescriptorSet> CollectDescriptorSetsForBind(const std::vector<std::vector<VkDescriptorSet>>& descriptor_sets_by_set,
26 uint32_t descriptor_index);
27
28template <typename WaitIdleFn, typename ReplaceFn>
29bool ApplySafeDescriptorSetReplacementPolicy(const bool has_live_descriptor_sets, WaitIdleFn&& wait_idle, ReplaceFn&& replace)
30{
31 if (has_live_descriptor_sets)
32 {
33 std::forward<WaitIdleFn>(wait_idle)();
34 }
35
36 std::forward<ReplaceFn>(replace)();
37 return has_live_descriptor_sets;
38}
39} // namespace pixelbullet::graphics_descriptors_internal