Skip to content

Commit 0e6bebf

Browse files
author
Dominik Witczak
committed
Fix an issue where map requests targetting buffers assigned memory blocks by VMA would not return correct ptr
1 parent d01050b commit 0e6bebf

6 files changed

Lines changed: 22 additions & 4 deletions

File tree

include/misc/memalloc_backends/backend_oneshot.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ namespace Anvil
6464
bool bake (Anvil::MemoryAllocator::Items& in_items) final;
6565
VkResult map (void* in_memory_object,
6666
VkDeviceSize in_start_offset,
67+
VkDeviceSize in_memory_block_start_offset,
6768
VkDeviceSize in_size,
6869
void** out_result_ptr) final;
6970
bool supports_baking () const final;

include/misc/memalloc_backends/backend_vma.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ namespace Anvil
127127
bool bake (Anvil::MemoryAllocator::Items& in_items) final;
128128
VkResult map (void* in_memory_object,
129129
VkDeviceSize in_start_offset,
130+
VkDeviceSize in_memory_block_start_offset,
130131
VkDeviceSize in_size,
131132
void** out_result_ptr);
132133
bool supports_baking () const final;

include/misc/types_classes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ namespace Anvil
3636

3737
virtual VkResult map (void* in_memory_object,
3838
VkDeviceSize in_start_offset,
39+
VkDeviceSize in_memory_block_start_offset,
3940
VkDeviceSize in_size,
4041
void** out_result_ptr) = 0;
4142
virtual bool supports_baking() const = 0;

src/misc/memalloc_backends/backend_oneshot.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,9 +418,12 @@ bool Anvil::MemoryAllocatorBackends::OneShot::bake(Anvil::MemoryAllocator::Items
418418

419419
VkResult Anvil::MemoryAllocatorBackends::OneShot::map(void* in_memory_object,
420420
VkDeviceSize in_start_offset,
421+
VkDeviceSize in_memory_block_start_offset,
421422
VkDeviceSize in_size,
422423
void** out_result_ptr)
423424
{
425+
ANVIL_REDUNDANT_VARIABLE(in_memory_block_start_offset);
426+
424427
return Anvil::Vulkan::vkMapMemory(m_device_ptr->get_device_vk(),
425428
reinterpret_cast<VkDeviceMemory>(in_memory_object),
426429
in_start_offset,

src/misc/memalloc_backends/backend_vma.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,17 +361,26 @@ bool Anvil::MemoryAllocatorBackends::VMA::init()
361361

362362
VkResult Anvil::MemoryAllocatorBackends::VMA::map(void* in_memory_object,
363363
VkDeviceSize in_start_offset,
364+
VkDeviceSize in_memory_block_start_offset,
364365
VkDeviceSize in_size,
365366
void** out_result_ptr)
366367
{
368+
VkResult result;
369+
void* result_ptr = nullptr;
370+
367371
ANVIL_REDUNDANT_ARGUMENT(in_size);
368372
ANVIL_REDUNDANT_ARGUMENT(in_start_offset);
369373

370374
anvil_assert(in_start_offset == 0);
371375

372-
return vmaMapMemory(m_vma_allocator_ptr->get_handle(),
373-
static_cast<VmaAllocation>(in_memory_object),
374-
out_result_ptr);
376+
result = vmaMapMemory(m_vma_allocator_ptr->get_handle(),
377+
static_cast<VmaAllocation>(in_memory_object),
378+
&result_ptr);
379+
380+
result_ptr = reinterpret_cast<uint8_t*>(result_ptr) - in_memory_block_start_offset;
381+
382+
*out_result_ptr = result_ptr;
383+
return result;
375384
}
376385

377386
/** Please see header for specification */

src/wrappers/memory_block.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -682,8 +682,11 @@ bool Anvil::MemoryBlock::open_gpu_memory_access()
682682
{
683683
result_vk = m_parent_memory_allocator_backend_ptr->map(m_backend_object,
684684
0, /* in_start_offset */
685-
m_create_info_ptr->get_size(),
685+
m_create_info_ptr->get_start_offset(),
686+
m_create_info_ptr->get_size (),
686687
static_cast<void**>(&m_gpu_data_ptr) );
688+
689+
m_gpu_data_ptr = reinterpret_cast<uint8_t*>(m_gpu_data_ptr);
687690
}
688691
else
689692
{

0 commit comments

Comments
 (0)