summaryrefslogtreecommitdiff
path: root/unused code/rend_vk_memory.c
diff options
context:
space:
mode:
authorVasco <[email protected]>2026-08-12 17:47:50 +0100
committerVasco <[email protected]>2026-08-12 17:47:50 +0100
commit95e3e76fd9c789cbf2d4409ef49456addc71643f (patch)
tree34161614f5f0ae909f58eb5e58a2ffd26c2f0e9f /unused code/rend_vk_memory.c
rend 1.0.1HEADmain
Diffstat (limited to 'unused code/rend_vk_memory.c')
-rw-r--r--unused code/rend_vk_memory.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/unused code/rend_vk_memory.c b/unused code/rend_vk_memory.c
new file mode 100644
index 0000000..4782b46
--- /dev/null
+++ b/unused code/rend_vk_memory.c
@@ -0,0 +1,100 @@
+#pragma once
+
+#include "rend_internal.h"
+#include "rend_vk_internal.h"
+#include <vulkan/vulkan_core.h>
+
+
+#if 0
+static RendVkMemory
+rend_vk_memory_malloc(size_t size, VkDevice logical_device, VkPhysicalDevice physical_device, uint32_t heap_index, VkAllocationCallbacks *allocator)
+{
+ RendVkMemory memory = {
+ .host_mapped_memory = NULL,
+ .device_memory = 0,
+ .logical_device = logical_device,
+ .heap_index = heap_index
+ };
+
+ VkMemoryAllocateFlagsInfo flags_info = {
+ .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO,
+ .pNext = NULL,
+ .flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, /* REQUIRED for BDA buffers */
+ .deviceMask = 0
+ };
+
+ VkMemoryAllocateInfo alloc_info = {
+ .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
+ .allocationSize = size,
+ .pNext = &flags_info,
+ .memoryTypeIndex = heap_index
+ };
+
+ vkAllocateMemory(logical_device, &alloc_info, allocator, &memory.device_memory);
+ return memory;
+}
+
+static void
+rend_vk_memory_free(RendVkMemory *memory)
+{
+ if (memory->host_mapped_memory) {
+ rend_vk_memory_unmap(memory);
+ }
+ if (memory->offset == 0) {
+ vkFreeMemory(memory->logical_device, memory->device_memory, memory->allocator);
+ memset(memory, 0, sizeof *memory);
+ } else {
+ PWARN("[REND_VK] Attempted to free memory with an offset!");
+ }
+}
+
+static void*
+rend_vk_memory_map(RendVkMemory *memory)
+{
+ // SPEC: memory must have been created with a memory type that reports VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
+ // vkMapMemory will fail if the implementation is unable to allocate an appropriately sized contiguous virtual address range,
+ // e.g. due to virtual address space fragmentation or platform limits.
+ // In such cases, vkMapMemory must return VK_ERROR_MEMORY_MAP_FAILED.
+ // The application can improve the likelihood of success by reducing the size of the mapped range and/or removing unneeded mappings using vkUnmapMemory.
+
+ vkMapMemory(memory->logical_device, memory->device_memory, memory->offset, memory->size, 0, &memory->host_mapped_memory);
+ return memory->host_mapped_memory;
+}
+
+static void
+rend_vk_memory_unmap(RendVkMemory *memory)
+{
+ if (memory->offset == 0) {
+ vkUnmapMemory(memory->logical_device, memory->device_memory);
+ memory->host_mapped_memory = 0;
+ } else {
+ PWARN("[REND_VK] Attempted to unmap memory with an offset!");
+ }
+}
+
+static void
+rend_vk_memory_copy(RendVkMemory *memory, size_t offset, const void *data, size_t size)
+{
+ /* bounds check */
+ if (offset + size > memory->size) {
+ REND__WARN("Memory write out of bounds!");
+ return;
+ }
+
+ /* important to cast this */
+ uint8_t *dest = memory->host_mapped_memory;
+ memcpy(dest + offset, data, size);
+
+ /* flush host writes if memory is non-coherent */
+ // VkMappedMemoryRange range = {
+ // .sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
+ // .memory = memory->device_memory,
+ // .offset = offset,
+ // .size = size
+ // };
+ //
+ // vkFlushMappedMemoryRanges(memory->logical_device, 1, &range);
+
+}
+
+#endif