@@ -82,6 +82,8 @@ CompileManager::CompileManager(Viewer& viewer, ref_ptr<ResourceHints> hints)
8282#else
8383 numCompileTraversals = 1 ;
8484#endif
85+
86+ contexts = ct->contexts ;
8587}
8688
8789CompileManager::CompileTraversals::container_type CompileManager::takeCompileTraversals (size_t count)
@@ -106,6 +108,8 @@ void CompileManager::add(ref_ptr<Device> device, const ResourceRequirements& res
106108 {
107109 ct->add (device, resourceRequirements);
108110
111+ contexts = ct->contexts ;
112+
109113 compileTraversals->add (ct);
110114 }
111115}
@@ -117,6 +121,8 @@ void CompileManager::add(Window& window, ref_ptr<ViewportState> viewport, const
117121 {
118122 ct->add (window, viewport, resourceRequirements);
119123
124+ contexts = ct->contexts ;
125+
120126 compileTraversals->add (ct);
121127 }
122128}
@@ -128,6 +134,8 @@ void CompileManager::add(Window& window, ref_ptr<View> view, const ResourceRequi
128134 {
129135 ct->add (window, view, resourceRequirements);
130136
137+ contexts = ct->contexts ;
138+
131139 compileTraversals->add (ct);
132140 }
133141}
@@ -139,6 +147,8 @@ void CompileManager::add(Framebuffer& framebuffer, ref_ptr<View> view, const Res
139147 {
140148 ct->add (framebuffer, view, resourceRequirements);
141149
150+ contexts = ct->contexts ;
151+
142152 compileTraversals->add (ct);
143153 }
144154}
@@ -150,6 +160,8 @@ void CompileManager::add(const Viewer& viewer, const ResourceRequirements& resou
150160 {
151161 ct->add (viewer, resourceRequirements);
152162
163+ contexts = ct->contexts ;
164+
153165 compileTraversals->add (ct);
154166 }
155167}
@@ -165,6 +177,30 @@ void CompileManager::assignInstrumentation(ref_ptr<Instrumentation> in_instrumen
165177 }
166178}
167179
180+ VkDeviceSize CompileManager::availableMemory (ContextSelectionFunction contextSelection) const
181+ {
182+ VkDeviceSize minAvailable = std::numeric_limits<VkDeviceSize>::max ();
183+
184+ if (contextSelection)
185+ {
186+ for (auto & context : contexts)
187+ {
188+ if (contextSelection (*context)) minAvailable = std::min (minAvailable, context->device ->availableMemory ());
189+ }
190+ }
191+ else
192+ {
193+ for (auto & context : contexts)
194+ {
195+ minAvailable = std::min (minAvailable, context->device ->availableMemory ());
196+ }
197+ }
198+
199+ vsg::info (" CompileManager::availableMemory() = " , minAvailable);
200+
201+ return minAvailable;
202+ }
203+
168204CompileResult CompileManager::compile (ref_ptr<Object> object, ContextSelectionFunction contextSelection)
169205{
170206 vsg::debug (" CompileManager::compile(" , object, " , ..)" );
@@ -241,18 +277,18 @@ CompileResult CompileManager::compile(ref_ptr<Object> object, ContextSelectionFu
241277
242278 if (contextSelection)
243279 {
244- std::list<ref_ptr<Context>> contexts ;
280+ std::list<ref_ptr<Context>> activeContexts ;
245281
246282 for (auto & context : compileTraversal->contexts )
247283 {
248- if (contextSelection (*context)) contexts .push_back (context);
284+ if (contextSelection (*context)) activeContexts .push_back (context);
249285 }
250286
251- compileTraversal->contexts .swap (contexts );
287+ compileTraversal->contexts .swap (activeContexts );
252288
253289 run_compile_traversal ();
254290
255- compileTraversal->contexts .swap (contexts );
291+ compileTraversal->contexts .swap (activeContexts );
256292 }
257293 else
258294 {
0 commit comments