15 #include <vsg/nodes/Bin.h>
16 #include <vsg/state/BufferInfo.h>
17 #include <vsg/state/Descriptor.h>
18 #include <vsg/state/ImageInfo.h>
19 #include <vsg/state/ResourceHints.h>
20 #include <vsg/vk/DescriptorPool.h>
39 uint32_t computeNumDescriptorSets()
const;
40 DescriptorPoolSizes computeDescriptorPoolSizes()
const;
44 std::set<int32_t> indices;
45 std::set<const Bin*> bins;
48 using Descriptors = std::set<const Descriptor*>;
49 using DescriptorSets = std::set<const DescriptorSet*>;
50 using DescriptorTypeMap = std::map<VkDescriptorType, uint32_t>;
51 using Views = std::map<const View*, BinDetails>;
52 using BinStack = std::stack<BinDetails>;
56 BufferInfoList bufferInfos;
57 ImageInfoList imageInfos;
59 explicit operator bool()
const noexcept {
return !bufferInfos.empty() || !imageInfos.empty(); }
69 bufferInfos.insert(bufferInfos.end(), dd.bufferInfos.begin(), dd.bufferInfos.end());
70 imageInfos.insert(imageInfos.end(), dd.imageInfos.begin(), dd.imageInfos.end());
77 Descriptors descriptors;
78 DescriptorSets descriptorSets;
79 DescriptorTypeMap descriptorTypeMap;
84 uint32_t externalNumDescriptorSets = 0;
85 bool containsPagedLOD =
false;
87 VkDeviceSize minimumBufferSize = 16 * 1024 * 1024;
88 VkDeviceSize minimumDeviceMemorySize = 16 * 1024 * 1024;
103 using ConstVisitor::apply;
105 bool checkForResourceHints(
const Object&
object);
107 void apply(
const Object&
object)
override;
109 void apply(
const Node& node)
override;
110 void apply(
const StateGroup& stategroup)
override;
113 void apply(
const Descriptor& descriptor)
override;
116 void apply(
const PagedLOD& plod)
override;
117 void apply(
const View& view)
override;
118 void apply(
const DepthSorted& depthSorted)
override;
119 void apply(
const Bin& bin)
override;
120 void apply(
const Geometry& geometry)
override;
128 if (bufferInfo && bufferInfo->data && bufferInfo->data->dynamic())
130 if (bufferInfo->data->properties.dataVariance == DYNAMIC_DATA)
132 requirements.earlyDynamicData.bufferInfos.push_back(bufferInfo);
136 requirements.lateDynamicData.bufferInfos.push_back(bufferInfo);
141 inline void apply(ref_ptr<ImageInfo> imageInfo)
143 if (imageInfo && imageInfo->imageView && imageInfo->imageView->image)
145 auto& data = imageInfo->imageView->image->data;
146 if (data && data->dynamic())
148 if (data->properties.dataVariance == DYNAMIC_DATA)
150 requirements.earlyDynamicData.imageInfos.push_back(imageInfo);
154 requirements.lateDynamicData.imageInfos.push_back(imageInfo);
161 uint32_t _numResourceHintsAbove = 0;
163 bool registerDescriptor(
const Descriptor& descriptor);
BindIndexBuffer command encapsulates vkBindIndexBuffer call and associated settings.
Definition: BindIndexBuffer.h:28
BindVertexBuffers command encapsulates vkBindVertexBuffers call and associated settings.
Definition: BindVertexBuffers.h:25
CollectResourceRequirements is a visitor class that collects the ResourceRequirements of a scene grap...
Definition: ResourceRequirements.h:94
ref_ptr< ResourceHints > createResourceHints(uint32_t tileMultiplier=1) const
create ResouceHints that capture the collected ResourceRequirements. Note, call after the CollectReso...
Definition: DepthSorted.h:27
Definition: DescriptorBuffer.h:24
Definition: DescriptorImage.h:24
DescriptorSet encapsulates VkDescriptorSet and VkDescriptorSetAllocateInfo settings used to describe ...
Definition: DescriptorSet.h:26
Definition: Descriptor.h:28
Definition: Geometry.h:30
Definition: PagedLOD.h:36
ResourceHints provides settings that help preallocation of Vulkan resources and memory.
Definition: ResourceHints.h:22
ResourceRequirements provides a container for various Vulkan resource requirements that be used to he...
Definition: ResourceRequirements.h:30
Definition: StateCommand.h:23
Definition: StateGroup.h:32
Definition: VertexDraw.h:25
Definition: VertexIndexDraw.h:25
View class is Group class that pairs a Camera that defines the view with a subgraph that defines the ...
Definition: View.h:25
Definition: ResourceRequirements.h:43
Definition: ResourceRequirements.h:55