diff options
| author | Lucas Fryzek <lucas.fryzek@fryzekconcepts.com> | 2025-11-24 19:39:30 -0500 |
|---|---|---|
| committer | Lucas Fryzek <lucas.fryzek@fryzekconcepts.com> | 2025-11-24 19:39:30 -0500 |
| commit | b5f3587df4048d2ba807721ff2faea8c8a43a93f (patch) | |
| tree | 6913f730a41822b98fecd5e82b7cae46164fd9c0 /src/frygon/vulkan/fgvk_buffer.c | |
| parent | 41c700fdbf1d79dfb571105ee93bfa46da6c8428 (diff) | |
WIPfrygon
Diffstat (limited to 'src/frygon/vulkan/fgvk_buffer.c')
| -rw-r--r-- | src/frygon/vulkan/fgvk_buffer.c | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/frygon/vulkan/fgvk_buffer.c b/src/frygon/vulkan/fgvk_buffer.c new file mode 100644 index 00000000000..f5b8f70758b --- /dev/null +++ b/src/frygon/vulkan/fgvk_buffer.c @@ -0,0 +1,89 @@ +/* + * Copyright © 2025 Lucas Francisco Fryzek + * SPDX-License-Identifier: MIT + */ +#include "fgvk_buffer.h" + +#include "fgvk_device.h" +#include "fgvk_device_memory.h" + +VKAPI_ATTR VkResult VKAPI_CALL +fgvk_CreateBuffer(VkDevice device, + const VkBufferCreateInfo *pCreateInfo, + const VkAllocationCallbacks *pAllocator, + VkBuffer *pBuffer) +{ + VK_FROM_HANDLE(fgvk_device, dev, device); + struct fgvk_buffer *buffer; + + buffer = vk_buffer_create(&dev->vk, pCreateInfo, pAllocator, + sizeof(*buffer)); + + if (!buffer) + return vk_error(dev, VK_ERROR_OUT_OF_HOST_MEMORY); + + *pBuffer = fgvk_buffer_to_handle(buffer); + + return VK_SUCCESS; +} + +VKAPI_ATTR void VKAPI_CALL +fgvk_DestroyBuffer(VkDevice device, + VkBuffer _buffer, + const VkAllocationCallbacks *pAllocator) +{ + VK_FROM_HANDLE(fgvk_device, dev, device); + VK_FROM_HANDLE(fgvk_buffer, buffer, _buffer); + + if (!buffer) + return; + + vk_buffer_destroy(&dev->vk, pAllocator, &buffer->vk); +} + +VKAPI_ATTR void VKAPI_CALL +fgvk_GetDeviceBufferMemoryRequirements( + VkDevice device, + const VkDeviceBufferMemoryRequirements *pInfo, + VkMemoryRequirements2 *pMemoryRequirements) +{ + pMemoryRequirements->memoryRequirements = (VkMemoryRequirements) { + .size = align64(pInfo->pCreateInfo->size, 8), + .alignment = 8, + .memoryTypeBits = 1, + }; +} + +static VkResult +fgvk_bind_buffer_memory(struct fgvk_device *dev, + const VkBindBufferMemoryInfo *info) +{ + VK_FROM_HANDLE(fgvk_device_memory, mem, info->memory); + VK_FROM_HANDLE(fgvk_buffer, buffer, info->buffer); + VkResult result = VK_SUCCESS; + + return result; +} + +VKAPI_ATTR VkResult VKAPI_CALL +fgvk_BindBufferMemory2(VkDevice device, + uint32_t bindInfoCount, + const VkBindBufferMemoryInfo *pBindInfos) +{ + VK_FROM_HANDLE(fgvk_device, dev, device); + VkResult first_error_or_success = VK_SUCCESS; + + for (uint32_t i = 0; i < bindInfoCount; ++i) { + VkResult result = fgvk_bind_buffer_memory(dev, &pBindInfos[i]); + + const VkBindMemoryStatusKHR *status = + vk_find_struct_const(pBindInfos[i].pNext, BIND_MEMORY_STATUS_KHR); + if (status != NULL && status->pResult != NULL) + *status->pResult = result; + + if (first_error_or_success == VK_SUCCESS) + first_error_or_success = result; + } + + return first_error_or_success; +} |