4
4
5
5
/* VKRSynchronizedMemoryBuffer */
6
6
7
+ VKRSynchronizedRingAllocator::~VKRSynchronizedRingAllocator ()
8
+ {
9
+ for (auto & buf : m_buffers)
10
+ {
11
+ m_vkrMemMgr->DeleteBuffer (buf.vk_buffer , buf.vk_mem );
12
+ }
13
+ }
14
+
7
15
void VKRSynchronizedRingAllocator::addUploadBufferSyncPoint (AllocatorBuffer_t& buffer, uint32 offset)
8
16
{
9
17
auto cmdBufferId = m_vkr->GetCurrentCommandBufferId ();
@@ -233,6 +241,15 @@ void VKRSynchronizedHeapAllocator::GetStats(uint32& numBuffers, size_t& totalBuf
233
241
234
242
/* VkTextureChunkedHeap */
235
243
244
+ VkTextureChunkedHeap::~VkTextureChunkedHeap ()
245
+ {
246
+ VkDevice device = VulkanRenderer::GetInstance ()->GetLogicalDevice ();
247
+ for (auto & i : m_list_chunkInfo)
248
+ {
249
+ vkFreeMemory (device, i.mem , nullptr );
250
+ }
251
+ }
252
+
236
253
uint32 VkTextureChunkedHeap::allocateNewChunk (uint32 chunkIndex, uint32 minimumAllocationSize)
237
254
{
238
255
cemu_assert_debug (m_list_chunkInfo.size () == chunkIndex);
@@ -310,11 +327,11 @@ VKRBuffer* VKRBuffer::Create(VKR_BUFFER_TYPE bufferType, size_t bufferSize, VkMe
310
327
VkDeviceMemory bufferMemory;
311
328
bool allocSuccess;
312
329
if (bufferType == VKR_BUFFER_TYPE::STAGING)
313
- allocSuccess = memMgr->CreateBuffer2 (bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, properties, buffer, bufferMemory);
330
+ allocSuccess = memMgr->CreateBuffer (bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, properties, buffer, bufferMemory);
314
331
else if (bufferType == VKR_BUFFER_TYPE::INDEX)
315
- allocSuccess = memMgr->CreateBuffer2 (bufferSize, VK_BUFFER_USAGE_INDEX_BUFFER_BIT, properties, buffer, bufferMemory);
332
+ allocSuccess = memMgr->CreateBuffer (bufferSize, VK_BUFFER_USAGE_INDEX_BUFFER_BIT, properties, buffer, bufferMemory);
316
333
else if (bufferType == VKR_BUFFER_TYPE::STRIDE)
317
- allocSuccess = memMgr->CreateBuffer2 (bufferSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, properties, buffer, bufferMemory);
334
+ allocSuccess = memMgr->CreateBuffer (bufferSize, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, properties, buffer, bufferMemory);
318
335
else
319
336
cemu_assert_debug (false );
320
337
if (!allocSuccess)
@@ -363,28 +380,14 @@ uint32 VkBufferChunkedHeap::allocateNewChunk(uint32 chunkIndex, uint32 minimumAl
363
380
return allocationSize;
364
381
}
365
382
366
- uint32_t VKRMemoryManager::FindMemoryType (uint32_t typeFilter, VkMemoryPropertyFlags properties) const
367
- {
368
- VkPhysicalDeviceMemoryProperties memProperties;
369
- vkGetPhysicalDeviceMemoryProperties (m_vkr->GetPhysicalDevice (), &memProperties);
370
-
371
- for (uint32 i = 0 ; i < memProperties.memoryTypeCount ; i++)
372
- {
373
- if ((typeFilter & (1 << i)) != 0 && (memProperties.memoryTypes [i].propertyFlags & properties) == properties)
374
- return i;
375
- }
376
- m_vkr->UnrecoverableError (fmt::format (" failed to find suitable memory type ({0:#08x} {1:#08x})" , typeFilter, properties).c_str ());
377
- return 0 ;
378
- }
379
-
380
- bool VKRMemoryManager::FindMemoryType2 (uint32 typeFilter, VkMemoryPropertyFlags properties, uint32& memoryIndex) const
383
+ bool VKRMemoryManager::FindMemoryType (uint32 typeFilter, VkMemoryPropertyFlags properties, uint32& memoryIndex) const
381
384
{
382
385
VkPhysicalDeviceMemoryProperties memProperties;
383
386
vkGetPhysicalDeviceMemoryProperties (m_vkr->GetPhysicalDevice (), &memProperties);
384
387
385
388
for (uint32_t i = 0 ; i < memProperties.memoryTypeCount ; i++)
386
389
{
387
- if (typeFilter & (1 << i) && memProperties.memoryTypes [i].propertyFlags == properties)
390
+ if (typeFilter & (1 << i) && ( memProperties.memoryTypes [i].propertyFlags & properties) == properties)
388
391
{
389
392
memoryIndex = i;
390
393
return true ;
@@ -455,31 +458,7 @@ size_t VKRMemoryManager::GetTotalMemoryForBufferType(VkBufferUsageFlags usage, V
455
458
return total;
456
459
}
457
460
458
- void VKRMemoryManager::CreateBuffer (VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory) const
459
- {
460
- VkBufferCreateInfo bufferInfo{};
461
- bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
462
- bufferInfo.usage = usage;
463
- bufferInfo.size = size;
464
- bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
465
- if (vkCreateBuffer (m_vkr->GetLogicalDevice (), &bufferInfo, nullptr , &buffer) != VK_SUCCESS)
466
- m_vkr->UnrecoverableError (" Failed to create buffer" );
467
-
468
- VkMemoryRequirements memRequirements;
469
- vkGetBufferMemoryRequirements (m_vkr->GetLogicalDevice (), buffer, &memRequirements);
470
-
471
- VkMemoryAllocateInfo allocInfo{};
472
- allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
473
- allocInfo.allocationSize = memRequirements.size ;
474
- allocInfo.memoryTypeIndex = FindMemoryType (memRequirements.memoryTypeBits , properties);
475
-
476
- if (vkAllocateMemory (m_vkr->GetLogicalDevice (), &allocInfo, nullptr , &bufferMemory) != VK_SUCCESS)
477
- m_vkr->UnrecoverableError (" Failed to allocate buffer memory" );
478
- if (vkBindBufferMemory (m_vkr->GetLogicalDevice (), buffer, bufferMemory, 0 ) != VK_SUCCESS)
479
- m_vkr->UnrecoverableError (" Failed to bind buffer memory" );
480
- }
481
-
482
- bool VKRMemoryManager::CreateBuffer2 (VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory) const
461
+ bool VKRMemoryManager::CreateBuffer (VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer& buffer, VkDeviceMemory& bufferMemory) const
483
462
{
484
463
VkBufferCreateInfo bufferInfo{};
485
464
bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
@@ -488,7 +467,7 @@ bool VKRMemoryManager::CreateBuffer2(VkDeviceSize size, VkBufferUsageFlags usage
488
467
bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
489
468
if (vkCreateBuffer (m_vkr->GetLogicalDevice (), &bufferInfo, nullptr , &buffer) != VK_SUCCESS)
490
469
{
491
- cemuLog_log (LogType::Force, " Failed to create buffer (CreateBuffer2 )" );
470
+ cemuLog_log (LogType::Force, " Failed to create buffer (CreateBuffer )" );
492
471
return false ;
493
472
}
494
473
@@ -498,7 +477,7 @@ bool VKRMemoryManager::CreateBuffer2(VkDeviceSize size, VkBufferUsageFlags usage
498
477
VkMemoryAllocateInfo allocInfo{};
499
478
allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
500
479
allocInfo.allocationSize = memRequirements.size ;
501
- if (!FindMemoryType2 (memRequirements.memoryTypeBits , properties, allocInfo.memoryTypeIndex ))
480
+ if (!FindMemoryType (memRequirements.memoryTypeBits , properties, allocInfo.memoryTypeIndex ))
502
481
{
503
482
vkDestroyBuffer (m_vkr->GetLogicalDevice (), buffer, nullptr );
504
483
return false ;
@@ -511,7 +490,7 @@ bool VKRMemoryManager::CreateBuffer2(VkDeviceSize size, VkBufferUsageFlags usage
511
490
if (vkBindBufferMemory (m_vkr->GetLogicalDevice (), buffer, bufferMemory, 0 ) != VK_SUCCESS)
512
491
{
513
492
vkDestroyBuffer (m_vkr->GetLogicalDevice (), buffer, nullptr );
514
- cemuLog_log (LogType::Force, " Failed to bind buffer (CreateBuffer2 )" );
493
+ cemuLog_log (LogType::Force, " Failed to bind buffer (CreateBuffer )" );
515
494
return false ;
516
495
}
517
496
return true ;
@@ -533,7 +512,7 @@ bool VKRMemoryManager::CreateBufferFromHostMemory(void* hostPointer, VkDeviceSiz
533
512
534
513
if (vkCreateBuffer (m_vkr->GetLogicalDevice (), &bufferInfo, nullptr , &buffer) != VK_SUCCESS)
535
514
{
536
- cemuLog_log (LogType::Force, " Failed to create buffer (CreateBuffer2 )" );
515
+ cemuLog_log (LogType::Force, " Failed to create buffer (CreateBuffer )" );
537
516
return false ;
538
517
}
539
518
@@ -554,7 +533,7 @@ bool VKRMemoryManager::CreateBufferFromHostMemory(void* hostPointer, VkDeviceSiz
554
533
555
534
allocInfo.pNext = &importHostMem;
556
535
557
- if (!FindMemoryType2 (memRequirements.memoryTypeBits , properties, allocInfo.memoryTypeIndex ))
536
+ if (!FindMemoryType (memRequirements.memoryTypeBits , properties, allocInfo.memoryTypeIndex ))
558
537
{
559
538
vkDestroyBuffer (m_vkr->GetLogicalDevice (), buffer, nullptr );
560
539
return false ;
@@ -598,7 +577,7 @@ VkImageMemAllocation* VKRMemoryManager::imageMemoryAllocate(VkImage image)
598
577
map_textureHeap.emplace (typeFilter, texHeap);
599
578
}
600
579
else
601
- texHeap = it->second ;
580
+ texHeap = it->second . get () ;
602
581
603
582
// alloc mem from heap
604
583
uint32 allocationSize = (uint32)memRequirements.size ;
0 commit comments