From d48b4f0684eb13fb14caa035390ee9eecb18dba5 Mon Sep 17 00:00:00 2001 From: Gregory Wells Date: Tue, 29 Jul 2025 09:35:12 -0400 Subject: [PATCH] redo gryphn return codes in vulkan --- .../apis/vulkan/src/buffers/vulkan_buffer.c | 15 +++-- .../command_buffer/vulkan_command_buffer.c | 12 ++-- .../apis/vulkan/src/vulkan_result_converter.h | 57 +++++++++++++++++++ projects/core/gryphn_return_code.h | 13 ++++- 4 files changed, 80 insertions(+), 17 deletions(-) create mode 100644 projects/apis/vulkan/src/vulkan_result_converter.h diff --git a/projects/apis/vulkan/src/buffers/vulkan_buffer.c b/projects/apis/vulkan/src/buffers/vulkan_buffer.c index 3d46c37..820ba30 100644 --- a/projects/apis/vulkan/src/buffers/vulkan_buffer.c +++ b/projects/apis/vulkan/src/buffers/vulkan_buffer.c @@ -3,6 +3,7 @@ #include "output_device/gryphn_output_device.h" #include "output_device/vulkan_output_devices.h" #include "output_device/vulkan_physical_device.h" +#include VkBufferUsageFlags vkGryphnBufferType(gnBufferType type) { VkBufferUsageFlags usageFlags = 0; @@ -37,8 +38,9 @@ gnReturnCode VkCreateBuffer( .sharingMode = VK_SHARING_MODE_EXCLUSIVE }; - if (vkCreateBuffer(device->outputDevice->device, &bufferInfo, NULL, &buffer->buffer) != VK_SUCCESS) - return GN_FAILED_TO_CREATE_BUFFER; + VkResult created_buffer = vkCreateBuffer(device->outputDevice->device, &bufferInfo, NULL, &buffer->buffer); + if (created_buffer != VK_SUCCESS) + return VkResultToGnReturnCode(created_buffer); VkMemoryRequirements bufferRequirements; vkGetBufferMemoryRequirements(device->outputDevice->device, buffer->buffer, &bufferRequirements); @@ -51,10 +53,9 @@ gnReturnCode VkCreateBuffer( }; if (!foundMemory) return GN_FAILED_TO_ALLOCATE_MEMORY; - if (vkAllocateMemory(device->outputDevice->device, &memoryAllocateInfo, NULL, &buffer->memory) != VK_SUCCESS) - return GN_FAILED_TO_ALLOCATE_MEMORY; - vkBindBufferMemory(device->outputDevice->device, buffer->buffer, buffer->memory, 0); - return GN_SUCCESS; + VkResult memoryFound = vkAllocateMemory(device->outputDevice->device, &memoryAllocateInfo, NULL, &buffer->memory); + if (memoryFound == VK_SUCCESS) vkBindBufferMemory(device->outputDevice->device, buffer->buffer, buffer->memory, 0); + return VkResultToGnReturnCode(memoryFound); } void VkCopyBuffer(gnDevice device, VkBuffer source, VkBuffer destination, VkBufferCopy copy) { @@ -83,8 +84,6 @@ gnReturnCode createBuffer(gnBufferHandle buffer, gnOutputDeviceHandle device, gn ); } - - return GN_SUCCESS; } void vulkanBufferData(gnBufferHandle buffer, size_t dataSize, void* data) { diff --git a/projects/apis/vulkan/src/commands/command_buffer/vulkan_command_buffer.c b/projects/apis/vulkan/src/commands/command_buffer/vulkan_command_buffer.c index 8b1ad3e..8232bd9 100644 --- a/projects/apis/vulkan/src/commands/command_buffer/vulkan_command_buffer.c +++ b/projects/apis/vulkan/src/commands/command_buffer/vulkan_command_buffer.c @@ -1,6 +1,7 @@ #include "vulkan_command_buffer.h" #include "commands/command_pool/vulkan_command_pool.h" #include "output_device/vulkan_output_devices.h" +#include gnReturnCode allocateCommandBuffers(gnCommandBufferHandle* commandBuffers, uint32_t count, gnCommandPool pool) { VkCommandBufferAllocateInfo allocInfo = { @@ -13,7 +14,7 @@ gnReturnCode allocateCommandBuffers(gnCommandBufferHandle* commandBuffers, uint3 VkCommandBuffer* buffers = malloc(sizeof(VkCommandBuffer) * count); if (vkAllocateCommandBuffers(pool->device->outputDevice->device, &allocInfo, buffers) != VK_SUCCESS) - return GN_FAILED_TO_ALLOCATE_COMMAND_BUFFERS; + return GN_FAILED_TO_ALLOCATE_OBJECT; for (int i = 0; i < count; i++) { commandBuffers[i]->commandBuffer = malloc(sizeof(gnPlatformCommandBuffer)); @@ -37,16 +38,11 @@ gnReturnCode beginCommandBuffer(gnCommandBufferHandle commandBuffer) { if ((commandBuffer->commandPool->info.flags & GN_REUSE_COMMAND_BUFFERS) != GN_REUSE_COMMAND_BUFFERS) beginInfo.flags |= VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; - if (vkBeginCommandBuffer(commandBuffer->commandBuffer->buffer, &beginInfo) != VK_SUCCESS) { - return GN_FAILED_TO_BEGIN_RECORDING; - } - return GN_SUCCESS; + return VkResultToGnReturnCode(vkBeginCommandBuffer(commandBuffer->commandBuffer->buffer, &beginInfo)); } gnReturnCode endCommandBuffer(gnCommandBufferHandle commandBuffer) { - if (vkEndCommandBuffer(commandBuffer->commandBuffer->buffer) != VK_SUCCESS) - return GN_FAIELD_TO_END_RECORDING; - return GN_SUCCESS; + return VkResultToGnReturnCode(vkEndCommandBuffer(commandBuffer->commandBuffer->buffer)); } diff --git a/projects/apis/vulkan/src/vulkan_result_converter.h b/projects/apis/vulkan/src/vulkan_result_converter.h new file mode 100644 index 0000000..25f9c7f --- /dev/null +++ b/projects/apis/vulkan/src/vulkan_result_converter.h @@ -0,0 +1,57 @@ +#pragma once +#include +#include + +gnReturnCode VkResultToGnReturnCode(VkResult result) { + switch (result) { + case VK_SUCCESS: return GN_SUCCESS; + // case VK_NOT_READY: return ; + // case VK_TIMEOUT: return ; + // case VK_EVENT_SET: return ; + // case VK_EVENT_RESET: return ; + // case VK_INCOMPLETE: return ; + case VK_ERROR_OUT_OF_HOST_MEMORY: return GN_OUT_OUT_HOST_MEMEORY; + case VK_ERROR_OUT_OF_DEVICE_MEMORY: return GN_OUT_OUT_DEVICE_MEMORY; + case VK_ERROR_INITIALIZATION_FAILED: return GN_FAILED_CREATE_OBJECT; + // case VK_ERROR_DEVICE_LOST: return ; + // case VK_ERROR_MEMORY_MAP_FAILED: return ; + case VK_ERROR_LAYER_NOT_PRESENT: return GN_UNLOADED_LAYER; + case VK_ERROR_EXTENSION_NOT_PRESENT: return GN_UNLOADED_EXTENSION; + // case VK_ERROR_FEATURE_NOT_PRESENT: return ; + // case VK_ERROR_INCOMPATIBLE_DRIVER: return ; + // case VK_ERROR_TOO_MANY_OBJECTS: return ; + // case VK_ERROR_FORMAT_NOT_SUPPORTED: return ; + // case VK_ERROR_FRAGMENTED_POOL: return ; + case VK_ERROR_UNKNOWN: return GN_UNKNOWN_ERROR; + // case VK_ERROR_OUT_OF_POOL_MEMORY: return ; + // case VK_ERROR_INVALID_EXTERNAL_HANDLE: return ; + // case VK_ERROR_FRAGMENTATION: return ; + // case VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS: return ; + // case VK_PIPELINE_COMPILE_REQUIRED: return ; + // case VK_ERROR_NOT_PERMITTED: return ; + // case VK_ERROR_SURFACE_LOST_KHR: return ; + // case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR: return ; + // case VK_SUBOPTIMAL_KHR: return ; + // case VK_ERROR_OUT_OF_DATE_KHR: return ; + // case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR: return ; + case VK_ERROR_VALIDATION_FAILED_EXT: return GN_UNKNOWN_ERROR; + case VK_ERROR_INVALID_SHADER_NV: return GN_UNKNOWN_ERROR; + case VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR: return GN_UNKNOWN_ERROR; + case VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR: return GN_UNKNOWN_ERROR; + case VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR: return GN_UNKNOWN_ERROR; + case VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR: return GN_UNKNOWN_ERROR; + case VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR: return GN_UNKNOWN_ERROR; + case VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR: return GN_UNKNOWN_ERROR; + case VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT: return GN_UNKNOWN_ERROR; + case VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT: return GN_UNKNOWN_ERROR; + case VK_THREAD_IDLE_KHR: return GN_UNKNOWN_ERROR; + case VK_THREAD_DONE_KHR: return GN_UNKNOWN_ERROR; + case VK_OPERATION_DEFERRED_KHR: return GN_UNKNOWN_ERROR; + case VK_OPERATION_NOT_DEFERRED_KHR: return GN_UNKNOWN_ERROR; + case VK_ERROR_INVALID_VIDEO_STD_PARAMETERS_KHR: return GN_UNKNOWN_ERROR; + case VK_ERROR_COMPRESSION_EXHAUSTED_EXT: return GN_UNKNOWN_ERROR; + case VK_INCOMPATIBLE_SHADER_BINARY_EXT: return GN_UNKNOWN_ERROR; + case VK_PIPELINE_BINARY_MISSING_KHR: return GN_UNKNOWN_ERROR; + case VK_ERROR_NOT_ENOUGH_SPACE_KHR: return GN_UNKNOWN_ERROR; + } +} diff --git a/projects/core/gryphn_return_code.h b/projects/core/gryphn_return_code.h index 0fe885c..bcb17d4 100644 --- a/projects/core/gryphn_return_code.h +++ b/projects/core/gryphn_return_code.h @@ -1,10 +1,21 @@ #pragma once typedef enum gnReturnCode { + GN_SUCCESS = 0, + + // non spec return codes + GN_FAILED_CREATE_OBJECT, GN_FAILED_TO_ALLOCATE_OBJECT, + GN_FAILED_TO_ALLOCATE_MEMORY, GN_OUT_OUT_HOST_MEMEORY, + GN_OUT_OUT_DEVICE_MEMORY, + + GN_UNLOADED_EXTENSION = -1, GN_UNLOADED_LAYER = -2, - GN_UNSUPPORTED_API = -3 + GN_UNSUPPORTED_API = -3, + GN_UNKNOWN_ERROR = -4 + + // GN_SUCCESS, // GN_UNKNOWN_RENDERINGAPI,