MCPcopy Create free account
hub / github.com/DragonJoker/RenderGraph / createImage

Method createImage

source/RenderGraph/ResourceHandler.cpp:290–347  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

288 }
289
290 ResourceHandler::CreatedT< VkImage > ResourceHandler::createImage( GraphContext & context
291 , ImageId imageId )
292 {
293 ResourceHandler::CreatedT< VkImage > result{};
294
295 if ( context.vkCreateImage )
296 {
297 lock_type lock( m_imagesMutex );
298 auto [it, ins] = m_images.try_emplace( imageId, std::pair< VkImage, VkDeviceMemory >{} );
299
300 if ( ins && context.device )
301 {
302 // Create image
303 auto createInfo = reshdl::convert( *imageId.data );
304 auto res = context.vkCreateImage( context.device
305 , &createInfo
306 , context.allocator
307 , &it->second.first );
308 result.resource = it->second.first;
309 checkVkResult( res, "Image creation" );
310 crgRegisterObjectName( context, imageId.data->name, result.resource );
311
312 // Create Image memory
313 VkMemoryRequirements requirements{};
314 context.vkGetImageMemoryRequirements( context.device
315 , result.resource
316 , &requirements );
317 uint32_t deduced = context.deduceMemoryType( requirements.memoryTypeBits
318 , getMemoryPropertyFlags( imageId.data->info.memory ) );
319 VkMemoryAllocateInfo allocateInfo{ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
320 , nullptr
321 , requirements.size
322 , deduced };
323 res = context.vkAllocateMemory( context.device
324 , &allocateInfo
325 , context.allocator
326 , &it->second.second );
327 result.memory = it->second.second;
328 checkVkResult( res, "Image memory allocation" );
329 crgRegisterObjectName( context, imageId.data->name, result.memory );
330
331 // Bind image and memory
332 res = context.vkBindImageMemory( context.device
333 , result.resource
334 , result.memory
335 , 0u );
336 checkVkResult( res, "Image memory binding" );
337 result.created = true;
338 }
339 else
340 {
341 result.resource = it->second.first;
342 result.memory = it->second.second;
343 }
344 }
345
346 return result;
347 }

Callers

nothing calls this directly

Calls 5

checkVkResultFunction · 0.85
getMemoryPropertyFlagsFunction · 0.85
createImageFunction · 0.85
deduceMemoryTypeMethod · 0.80
convertFunction · 0.70

Tested by

no test coverage detected