@@ -51,19 +51,24 @@ namespace ENGINE
5151 this ->defaultStorageImageView = defaultStorageImageView;
5252 this ->defaultStorageImage = defaultStorageImage;
5353 }
54+ template <typename T>
55+ void SetSharedBufferPool (T)
56+ {
57+
58+ }
5459
55- void AddShaderInfo (ShaderParser& parser)
60+ void AddShaderInfo (ShaderParser* parser)
5661 {
5762 std::vector<ShaderResource> uniqueResources;
58- parser. GetLayout (uniqueResources);
63+ parser-> GetLayout (uniqueResources);
5964 for (auto & resource : uniqueResources)
6065 {
6166 if (dstSetBuilder.uniqueBindings .contains (resource.binding ))
6267 {
6368 continue ;
6469 }
65- std::unique_ptr< Buffer> ubo;
66- std::unique_ptr< Buffer> ssbo;
70+ Buffer* ubo;
71+ Buffer* ssbo;
6772 std::unique_ptr<Image> storageImage;
6873 std::unique_ptr<ImageData> storageImageData;
6974 std::unique_ptr<ImageView> storageImageView;
@@ -96,16 +101,14 @@ namespace ENGINE
96101 break ;
97102 case vk::DescriptorType::eUniformBuffer:
98103 bufferBindingsKeys.try_emplace (resource.name , resource);
99- ubo = std::make_unique<Buffer>(core->physicalDevice , core->logicalDevice .get (),
100- vk::BufferUsageFlagBits::eUniformBuffer,
104+ ubo = ResourcesManager::GetInstance ()->GetBuffer (resource.name , vk::BufferUsageFlagBits::eUniformBuffer,
101105 vk::MemoryPropertyFlagBits::eHostVisible |
102106 vk::MemoryPropertyFlagBits::eHostCoherent, 1 );
103107 buffersResources.try_emplace (resource.binding , std::move (ubo));
104108 break ;
105109 case vk::DescriptorType::eStorageBuffer:
106110 bufferBindingsKeys.try_emplace (resource.name , resource);
107- ssbo = std::make_unique<Buffer>(core->physicalDevice , core->logicalDevice .get (),
108- vk::BufferUsageFlagBits::eStorageBuffer,
111+ ssbo = ResourcesManager::GetInstance ()->GetBuffer (resource.name ,vk::BufferUsageFlagBits::eStorageBuffer,
109112 vk::MemoryPropertyFlagBits::eHostVisible |
110113 vk::MemoryPropertyFlagBits::eHostCoherent, 1 );
111114 buffersResources.try_emplace (resource.binding ,std::move (ssbo));
@@ -142,7 +145,7 @@ namespace ENGINE
142145
143146 for (auto & buffBinding : bufferBindingsKeys)
144147 {
145- Buffer* buffer = buffersResources.at (buffBinding.second .binding ). get () ;
148+ Buffer* buffer = buffersResources.at (buffBinding.second .binding );
146149 writerBuilder.AddWriteBuffer (buffBinding.second .binding , buffer->descriptor , buffBinding.second .type );
147150 }
148151
@@ -186,7 +189,7 @@ namespace ENGINE
186189 {
187190 for (auto & buffBinding : bufferBindingsKeys)
188191 {
189- Buffer* buffer = buffersResources.at (buffBinding.second .binding ). get () ;
192+ Buffer* buffer = buffersResources.at (buffBinding.second .binding );
190193 writerBuilder.AddWriteBuffer (buffBinding.second .binding , buffer->descriptor , buffBinding.second .type );
191194 }
192195
@@ -244,12 +247,13 @@ namespace ENGINE
244247 }
245248 if (sizeof (T) * bufferData.size ()> bufferRef->deviceSize )
246249 {
247- buffersResources.at (binding.binding ).reset (new Buffer (core->physicalDevice , core->logicalDevice .get (),
248- usageFlags,
249- vk::MemoryPropertyFlagBits::eHostVisible |
250- vk::MemoryPropertyFlagBits::eHostCoherent,
251- sizeof (T) * bufferData.size (), bufferData.data ()));
252- UpdateDescriptor ();
250+ buffersResources.at (binding.binding ) = ResourcesManager::GetInstance ()->SetBuffer (
251+ name,
252+ usageFlags,
253+ vk::MemoryPropertyFlagBits::eHostVisible |
254+ vk::MemoryPropertyFlagBits::eHostCoherent,
255+ sizeof (T) * bufferData.size (), bufferData.data ());
256+ UpdateDescriptor ();
253257 }else
254258 {
255259 // pending to handle this if is a staged resource
@@ -287,11 +291,12 @@ namespace ENGINE
287291 }
288292 if (sizeof (T) > bufferRef->deviceSize )
289293 {
290- buffersResources.at (binding.binding ).reset (new Buffer (core->physicalDevice , core->logicalDevice .get (),
291- usageFlags,
292- vk::MemoryPropertyFlagBits::eHostVisible |
293- vk::MemoryPropertyFlagBits::eHostCoherent,
294- sizeof (T), &bufferData));
294+ buffersResources.at (binding.binding ) = ResourcesManager::GetInstance ()->SetBuffer (
295+ name,
296+ usageFlags,
297+ vk::MemoryPropertyFlagBits::eHostVisible |
298+ vk::MemoryPropertyFlagBits::eHostCoherent,
299+ sizeof (T), &bufferData);
295300 UpdateDescriptor ();
296301 }else
297302 {
@@ -480,7 +485,7 @@ namespace ENGINE
480485 std::cout << text;
481486 return nullptr ;
482487 }
483- return buffersResources.at (binding.binding ). get () ;
488+ return buffersResources.at (binding.binding );
484489 }
485490 SamplerBinding* GetSamplerByName (std::string name)
486491 {
@@ -555,7 +560,7 @@ namespace ENGINE
555560 std::unordered_map<std::string, ShaderResource> bufferBindingsKeys;
556561 std::unordered_map<std::string, ShaderResource> imageBindingsKeys;
557562
558- std::map<uint32_t , std::unique_ptr< Buffer> > buffersResources;
563+ std::map<uint32_t , Buffer* > buffersResources;
559564 std::map<uint32_t , SamplerBinding> imageSamplers;
560565 std::map<uint32_t , StorageBinding> storageImages;
561566 std::map<uint32_t , SamplerArray> samplerArrayResources;
@@ -574,6 +579,7 @@ namespace ENGINE
574579
575580 ImageView* defaultStorageImageView;
576581 Sampler* defaultStorageImage;
582+ bool useSharedPool;
577583
578584 };
579585
0 commit comments