From 4baca925822aeda0f173d7259a020f7c4b8ba516 Mon Sep 17 00:00:00 2001 From: Gregory Wells Date: Sun, 15 Jun 2025 20:06:06 -0400 Subject: [PATCH] start to redo validation --- README.md | 2 + .../vulkan/src/debugger/vulkan_debugger.c | 257 +++++++++--------- .../vulkan/src/debugger/vulkan_debugger.h | 8 +- .../vulkan/src/instance/vulkan_instance.c | 58 ++-- src/core/buffers/gryphn_buffer.c | 7 +- src/core/debugger/gryphn_debugger.c | 6 +- src/core/debugger/gryphn_debugger.h | 34 +-- src/core/gryphn_platform_functions.h | 6 +- src/core/instance/gryphn_instance.c | 22 +- src/core/instance/gryphn_instance.h | 3 +- src/core/instance/init/gryphn_init.c | 4 +- .../gryphn_physical_output_device.c | 37 ++- src/utils | 2 +- 13 files changed, 201 insertions(+), 245 deletions(-) diff --git a/README.md b/README.md index 6bc856a..32dca32 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,5 @@ Ability to create applications that can leverage Buffers and Textures to render # Plans Improved Validation
Currently validation is always run and it discards the messages if you dont have a debugger attached, I plan to support layers like vulkan that can validation certain parts of the API +Device Features
+ Physical Devices dont report features that they support at all so the developer can't chose them based on features diff --git a/rendering_api/vulkan/src/debugger/vulkan_debugger.c b/rendering_api/vulkan/src/debugger/vulkan_debugger.c index d933cf3..b324b6a 100644 --- a/rendering_api/vulkan/src/debugger/vulkan_debugger.c +++ b/rendering_api/vulkan/src/debugger/vulkan_debugger.c @@ -1,161 +1,158 @@ #include "vulkan_debugger.h" #include -#include "core/instance/gryphn_instance.h" -#include "stdio.h" -void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT* createInfo) { +void vkPopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT* createInfo) { createInfo->sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; createInfo->messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; createInfo->messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; } +// gnBool vkCheckValidationLayerSupport(uint32_t count, const char** layers) { +// uint32_t layerCount; +// vkEnumerateInstanceLayerProperties(&layerCount, NULL); +// if (layerCount == 0) return gnFalse; -gnBool checkValidationLayerSupport(uint32_t count, const char** layers) { - uint32_t layerCount; - vkEnumerateInstanceLayerProperties(&layerCount, NULL); - if (layerCount == 0) return gnFalse; +// VkLayerProperties* properties = malloc(sizeof(VkLayerProperties) * layerCount); +// vkEnumerateInstanceLayerProperties(&layerCount, properties); - VkLayerProperties* properties = malloc(sizeof(VkLayerProperties) * layerCount); - vkEnumerateInstanceLayerProperties(&layerCount, properties); +// for (int i = 0; i < count; i++) { +// gnBool layerFound = gnFalse; - for (int i = 0; i < count; i++) { - gnBool layerFound = gnFalse; +// for (int c = 0; c < layerCount; c++) { +// if (strcmp(layers[i], properties[c].layerName) == 0) { +// layerFound = gnTrue; +// break; +// } +// } - for (int c = 0; c < layerCount; c++) { - if (strcmp(layers[i], properties[c].layerName) == 0) { - layerFound = gnTrue; - break; - } - } +// if (layerFound == gnFalse) +// return gnFalse; +// } - if (layerFound == gnFalse) - return gnFalse; - } +// return gnTrue; +// } - return gnTrue; -} +// typedef struct vk_userData_t { +// gnDebuggerCallback debuggerCallback; +// void* userData; +// } vkUserData; -typedef struct vk_userData_t { - gnDebuggerCallback debuggerCallback; - void* userData; -} vkUserData; +// static VKAPI_ATTR VkBool32 VKAPI_CALL vk_debuggerDebugCallback( +// VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, +// VkDebugUtilsMessageTypeFlagsEXT messageType, +// const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, +// void* pUserData) { +// struct vk_userData_t userData = *(struct vk_userData_t*)pUserData; -static VKAPI_ATTR VkBool32 VKAPI_CALL vk_debuggerDebugCallback( - VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, - VkDebugUtilsMessageTypeFlagsEXT messageType, - const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, - void* pUserData) { - struct vk_userData_t userData = *(struct vk_userData_t*)pUserData; +// gnMessageSeverity severity; +// gnMessageType type; +// gnMessageData data = { +// .message = gnCreateString(pCallbackData->pMessage) +// }; - gnMessageSeverity severity; - gnMessageType type; - gnMessageData data = { - .message = gnCreateString(pCallbackData->pMessage) - }; +// switch (messageSeverity) { +// default: break; +// case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: severity = GN_MESSAGE_VERBOSE; break; +// case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: severity = GN_MESSAGE_INFO; break; +// case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: severity = GN_MESSAGE_WARNING; break; +// case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: severity = GN_MESSAGE_ERROR; break; +// } - switch (messageSeverity) { - default: break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: severity = GN_MESSAGE_VERBOSE; break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: severity = GN_MESSAGE_INFO; break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: severity = GN_MESSAGE_WARNING; break; - case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: severity = GN_MESSAGE_ERROR; break; - } +// switch (messageType) { +// default: break; +// case VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT: type = GN_DEBUG_MESSAGE_GENERAL; break; +// case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT: type = GN_DEBUG_MESSAGE_VALIDATION; break; +// case VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT: type = GN_DEBUG_MESSAGE_PERFORMANCE; break; +// } - switch (messageType) { - default: break; - case VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT: type = GN_DEBUG_MESSAGE_GENERAL; break; - case VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT: type = GN_DEBUG_MESSAGE_VALIDATION; break; - case VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT: type = GN_DEBUG_MESSAGE_PERFORMANCE; break; - } +// gnDebuggerCallback callback = *userData.debuggerCallback; +// gnBool result = callback(severity, type, data, userData.userData); +// if (result == gnFalse) return VK_FALSE; +// return VK_TRUE; +// } - gnDebuggerCallback callback = *userData.debuggerCallback; - gnBool result = callback(severity, type, data, userData.userData); - if (result == gnFalse) return VK_FALSE; - return VK_TRUE; -} +// VkResult vk_createDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger) { +// PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT"); +// if (vkCreateDebugUtilsMessengerEXT != NULL) { +// return vkCreateDebugUtilsMessengerEXT(instance, pCreateInfo, NULL, pDebugMessenger); +// }else +// return VK_ERROR_EXTENSION_NOT_PRESENT; +// return VK_SUCCESS; +// } -VkResult vk_createDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger) { - PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT"); - if (vkCreateDebugUtilsMessengerEXT != NULL) { - return vkCreateDebugUtilsMessengerEXT(instance, pCreateInfo, NULL, pDebugMessenger); - }else - return VK_ERROR_EXTENSION_NOT_PRESENT; - return VK_SUCCESS; -} +// void vk_destroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks* pAllocator) { +// PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT) vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT"); +// if (vkDestroyDebugUtilsMessengerEXT != NULL) { +// vkDestroyDebugUtilsMessengerEXT(instance, debugMessenger, pAllocator); +// } +// } -void vk_destroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks* pAllocator) { - PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT) vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT"); - if (vkDestroyDebugUtilsMessengerEXT != NULL) { - vkDestroyDebugUtilsMessengerEXT(instance, debugMessenger, pAllocator); - } -} +// gnReturnCode gnCreateDebuggerFn(gnDebuggerHandle debugger, gnInstanceHandle instance, const struct gnDebuggerInfo_t info) { +// debugger->debugger = malloc(sizeof(gnPlatformDebugger)); -gnReturnCode gnCreateDebuggerFn(gnDebuggerHandle debugger, gnInstanceHandle instance, const struct gnDebuggerInfo_t info) { - debugger->debugger = malloc(sizeof(gnPlatformDebugger)); +// if (instance->valid == gnFalse) { +// for (int i = 0; i < instance->instance->instanceMessageCount; i++) { +// info.callback( +// instance->instance->instanceMessages[i].severity, +// instance->instance->instanceMessages[i].type, +// instance->instance->instanceMessages[i].data, +// info.userData +// ); +// } +// return GN_INVALID_INSTANCE; +// } else { +// for (int i = 0; i < instance->instance->instanceMessageCount; i++) { +// info.callback( +// instance->instance->instanceMessages[i].severity, +// instance->instance->instanceMessages[i].type, +// instance->instance->instanceMessages[i].data, +// info.userData +// ); +// } +// } - if (instance->valid == gnFalse) { - for (int i = 0; i < instance->instance->instanceMessageCount; i++) { - info.callback( - instance->instance->instanceMessages[i].severity, - instance->instance->instanceMessages[i].type, - instance->instance->instanceMessages[i].data, - info.userData - ); - } - return GN_INVALID_INSTANCE; - } else { - for (int i = 0; i < instance->instance->instanceMessageCount; i++) { - info.callback( - instance->instance->instanceMessages[i].severity, - instance->instance->instanceMessages[i].type, - instance->instance->instanceMessages[i].data, - info.userData - ); - } - } +// if (instance->instance->instanceMessageCount > 0) free(instance->instance->instanceMessages); +// instance->instance->instanceMessageCount = 0; - if (instance->instance->instanceMessageCount > 0) free(instance->instance->instanceMessages); - instance->instance->instanceMessageCount = 0; - - const char* layers[] = { - "VK_LAYER_KHRONOS_validation" - }; - if (!checkValidationLayerSupport(1, layers)) - return GN_FAILED_TO_CREATE_DEBUGGER; +// const char* layers[] = { +// "VK_LAYER_KHRONOS_validation" +// }; +// if (!checkValidationLayerSupport(1, layers)) +// return GN_FAILED_TO_CREATE_DEBUGGER; - struct vk_userData_t* userData = (struct vk_userData_t*)malloc(sizeof(struct vk_userData_t)); - userData->debuggerCallback = info.callback; - userData->userData = info.userData; +// struct vk_userData_t* userData = (struct vk_userData_t*)malloc(sizeof(struct vk_userData_t)); +// userData->debuggerCallback = info.callback; +// userData->userData = info.userData; - VkDebugUtilsMessengerCreateInfoEXT createInfo = {}; - createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; - createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; - createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; - createInfo.pUserData = (void*)userData; - createInfo.pfnUserCallback = vk_debuggerDebugCallback; +// VkDebugUtilsMessengerCreateInfoEXT createInfo = {}; +// createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; +// createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; +// createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; +// createInfo.pUserData = (void*)userData; +// createInfo.pfnUserCallback = vk_debuggerDebugCallback; - VkResult result = vk_createDebugUtilsMessengerEXT(instance->instance->vk_instance, &createInfo, NULL, &debugger->debugger->debugMessenger); if (result != VK_SUCCESS) { - gnMessageSeverity severity = GN_MESSAGE_ERROR; - gnMessageType type = GN_DEBUG_MESSAGE_VALIDATION; - gnMessageData data = { - .message = gnCombineStrings( - gnCreateString("Failed to create gnDebuggerObject with api vulkan\n"), - gnCombineStrings(gnCreateString("Returned with a vulkan error code of: (please do this)"), "") - ) - }; - info.callback( - severity, - type, - data, - info.userData - ); +// VkResult result = vk_createDebugUtilsMessengerEXT(instance->instance->vk_instance, &createInfo, NULL, &debugger->debugger->debugMessenger); if (result != VK_SUCCESS) { +// gnMessageSeverity severity = GN_MESSAGE_ERROR; +// gnMessageType type = GN_DEBUG_MESSAGE_VALIDATION; +// gnMessageData data = { +// .message = gnCombineStrings( +// gnCreateString("Failed to create gnDebuggerObject with api vulkan\n"), +// gnCombineStrings(gnCreateString("Returned with a vulkan error code of: (please do this)"), "") +// ) +// }; +// info.callback( +// severity, +// type, +// data, +// info.userData +// ); - return GN_FAILED_TO_CREATE_DEBUGGER; - } - return GN_SUCCESS; -} +// return GN_FAILED_TO_CREATE_DEBUGGER; +// } +// return GN_SUCCESS; +// } -void gnDestroyDebuggerFn(gnDebuggerHandle debugger) { - vk_destroyDebugUtilsMessengerEXT(debugger->instance->instance->vk_instance, debugger->debugger->debugMessenger, NULL); -} +// void gnDestroyDebuggerFn(gnDebuggerHandle debugger) { +// vk_destroyDebugUtilsMessengerEXT(debugger->instance->instance->vk_instance, debugger->debugger->debugMessenger, NULL); +// } diff --git a/rendering_api/vulkan/src/debugger/vulkan_debugger.h b/rendering_api/vulkan/src/debugger/vulkan_debugger.h index 8bed69f..4045a56 100644 --- a/rendering_api/vulkan/src/debugger/vulkan_debugger.h +++ b/rendering_api/vulkan/src/debugger/vulkan_debugger.h @@ -6,10 +6,4 @@ typedef struct gnPlatformDebugger_t { VkDebugUtilsMessengerEXT debugMessenger; } gnPlatformDebugger; -#ifdef __cplusplus -extern "C" { -#endif -void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT* createInfo); -#ifdef __cplusplus -} -#endif +void vkPopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT* createInfo); diff --git a/rendering_api/vulkan/src/instance/vulkan_instance.c b/rendering_api/vulkan/src/instance/vulkan_instance.c index 26c2b3f..d79a06c 100644 --- a/rendering_api/vulkan/src/instance/vulkan_instance.c +++ b/rendering_api/vulkan/src/instance/vulkan_instance.c @@ -2,6 +2,11 @@ #include #include +typedef struct vkUserData { + gnDebuggerCallback debuggerCallback; + void* userData; +} vkUserData; + static VKAPI_ATTR VkBool32 VKAPI_CALL vk_debuggerDebugCallback( VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, @@ -29,27 +34,11 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL vk_debuggerDebugCallback( case VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT: type = GN_DEBUG_MESSAGE_PERFORMANCE; break; } - gnInstanceHandle instance = (gnInstanceHandle)pUserData; - - if (instance->debugger) { - instance->debugger->info.callback( - severity, type, data, instance->debugger->info.userData - ); - } else { - instance->instance->instanceMessageCount++; - if (instance->instance->instanceMessageCount == 1) - instance->instance->instanceMessages = malloc(sizeof(struct gnInstanceMessage) * instance->instance->instanceMessageCount); - else - instance->instance->instanceMessages = realloc(instance->instance->instanceMessages, sizeof(struct gnInstanceMessage) * instance->instance->instanceMessageCount); - - instance->instance->instanceMessages[instance->instance->instanceMessageCount - 1] = (struct gnInstanceMessage){ - .data = data, - .severity = severity, - .type = type - }; - } - - return VK_FALSE; + vkUserData* userData = (vkUserData*)pUserData; + gnDebuggerCallback callback = userData->debuggerCallback; + gnBool result = callback(severity, type, data, userData->userData); + if (result == gnFalse) return VK_FALSE; + return VK_TRUE; } gnReturnCode gnCreateInstanceFn(gnInstanceHandle instance, gnInstanceInfo instanceInfo) { @@ -108,15 +97,26 @@ gnReturnCode gnCreateInstanceFn(gnInstanceHandle instance, gnInstanceInfo instan createInfo.flags = createFlags; - const char* validation_layers[1] = { "VK_LAYER_KHRONOS_validation" }; - createInfo.enabledLayerCount = 1; - createInfo.ppEnabledLayerNames = validation_layers; + if (instanceInfo.debugger != NULL) { + for (int i = 0; i < instanceInfo.debugger->info.layerCount; i++) { + if (instanceInfo.debugger->info.layers[i] == GN_DEBUGGER_LAYER_PLATFORM) { + const char* validation_layers[1] = { "VK_LAYER_KHRONOS_validation" }; + createInfo.enabledLayerCount = 1; + createInfo.ppEnabledLayerNames = (const char*[]){ "VK_LAYER_KHRONOS_validation" }; + } + } + + vkUserData* userData = malloc(sizeof(vkUserData)); + userData->debuggerCallback = instanceInfo.debugger->info.callback; + userData->userData = instanceInfo.debugger->info.userData; + + VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo = {}; + vkPopulateDebugMessengerCreateInfo(&debugCreateInfo); + debugCreateInfo.pfnUserCallback = vk_debuggerDebugCallback; + debugCreateInfo.pUserData = userData; + createInfo.pNext = &debugCreateInfo; + } - VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo = {}; - populateDebugMessengerCreateInfo(&debugCreateInfo); - debugCreateInfo.pfnUserCallback = vk_debuggerDebugCallback; - debugCreateInfo.pUserData = instance; - createInfo.pNext = &debugCreateInfo; createInfo.enabledExtensionCount = extensionCount; createInfo.ppEnabledExtensionNames = extensions; diff --git a/src/core/buffers/gryphn_buffer.c b/src/core/buffers/gryphn_buffer.c index 31b454d..00b51c0 100644 --- a/src/core/buffers/gryphn_buffer.c +++ b/src/core/buffers/gryphn_buffer.c @@ -12,12 +12,7 @@ void gnBufferData(gnBufferHandle buffer, size_t dataSize, void* data) { buffer->device->deviceFunctions->_gnBufferData(buffer, dataSize, data); } void* gnMapBuffer(gnBufferHandle buffer) { - if (buffer->info.usage == GN_STATIC_DRAW) { - gnDebuggerSetErrorMessage(buffer->device->instance->debugger, (gnMessageData){ - .message = gnCreateString("Cannot map static draw buffers") - }); - return NULL; - } + if (buffer->info.usage == GN_STATIC_DRAW) return NULL; return buffer->device->deviceFunctions->_gnMapBuffer(buffer); } void gnDestroyBuffer(gnBufferHandle buffer) { diff --git a/src/core/debugger/gryphn_debugger.c b/src/core/debugger/gryphn_debugger.c index 233bb1d..6c38bae 100644 --- a/src/core/debugger/gryphn_debugger.c +++ b/src/core/debugger/gryphn_debugger.c @@ -1,11 +1,9 @@ #include "gryphn_debugger.h" #include -gnReturnCode gnCreateDebugger(gnDebuggerHandle* debugger, const struct gnDebuggerInfo_t info) { +gnReturnCode gnCreateDebugger(gnDebuggerHandle* debugger, const gnDebuggerInfo info) { *debugger = malloc(sizeof(struct gnDebugger_t)); (*debugger)->info = info; return GN_SUCCESS; } -void gnDestroyDebugger(gnDebuggerHandle debugger) { - // free(debugger); -} +void gnDestroyDebugger(gnDebuggerHandle debugger) {} diff --git a/src/core/debugger/gryphn_debugger.h b/src/core/debugger/gryphn_debugger.h index 7d5329b..cb16461 100644 --- a/src/core/debugger/gryphn_debugger.h +++ b/src/core/debugger/gryphn_debugger.h @@ -1,4 +1,5 @@ #pragma once +#include "stdint.h" #include "utils/gryphn_string.h" #include "utils/gryphn_error_code.h" #include "core/gryphn_handles.h" @@ -7,29 +8,18 @@ struct gnPlatformDebugger_t; typedef enum gnMessageSeverity_e { GN_MESSAGE_VERBOSE = 0x00000001, - GN_MESSAGE_INFO = 0x00000010, - GN_MESSAGE_WARNING = 0x00000100, - GN_MESSAGE_ERROR = 0x00001000, + GN_MESSAGE_INFO = 0x00000002, + GN_MESSAGE_WARNING = 0x00000004, + GN_MESSAGE_ERROR = 0x00000008, } gnMessageSeverity; typedef enum gnMessageType_e { GN_DEBUG_MESSAGE_GENERAL = 0x00000001, GN_DEBUG_MESSAGE_VALIDATION = 0x00000002, GN_DEBUG_MESSAGE_PERFORMANCE = 0x00000004, - // GN_DEBUG_MESSAGE_ADDRESS_BINDING = 0x00000008, vulkan had this but imma leave it out } gnMessageType; typedef struct gnMessageData { - // const char* pMessageIdName; - // int32_t messageIdNumber; - // uint32_t queueLabelCount; - // const VkDebugUtilsLabelEXT* pQueueLabels; - // uint32_t cmdBufLabelCount; - // const VkDebugUtilsLabelEXT* pCmdBufLabels; - // uint32_t objectCount; - // const VkDebugUtilsObjectNameInfoEXT* pObjects; - // - // If i ever figure out what this shit does il add it gnString message; } gnMessageData; @@ -39,20 +29,26 @@ typedef gnBool (*gnDebuggerCallback)( gnMessageData messageData, void* userData); -typedef struct gnDebuggerInfo_t { +typedef enum gnDebuggerLayer { + GN_DEBUGGER_LAYER_PLATFORM // enable platform (vulkan validation) layers +} gnDebuggerLayer; + +typedef struct gnDebuggerInfo { gnDebuggerCallback callback; void* userData; + + uint32_t layerCount; + gnDebuggerLayer* layers; } gnDebuggerInfo; #ifdef GN_REVEAL_IMPL + struct gnDebugger_t { - struct gnPlatformDebugger_t* debugger; - struct gnDebuggerInfo_t info; - gnInstanceHandle instance; + gnDebuggerInfo info; }; #endif -gnReturnCode gnCreateDebugger(gnDebuggerHandle* debugger, const struct gnDebuggerInfo_t info); +gnReturnCode gnCreateDebugger(gnDebuggerHandle* debugger, const gnDebuggerInfo info); void gnDestroyDebugger(gnDebuggerHandle debugger); #ifdef GN_REVEAL_IMPL diff --git a/src/core/gryphn_platform_functions.h b/src/core/gryphn_platform_functions.h index 0c149f8..cb0dbbf 100644 --- a/src/core/gryphn_platform_functions.h +++ b/src/core/gryphn_platform_functions.h @@ -2,7 +2,7 @@ // theoretically you could have multible gryphn instances running in one application, // why I dont know #include "instance/gryphn_instance.h" -#include "debugger/gryphn_debugger.h" +// #include "debugger/gryphn_debugger.h" #include "output_device/gryphn_physical_output_device.h" #include "output_device/gryphn_output_device.h" #include "window_surface/gryphn_surface.h" @@ -24,13 +24,9 @@ typedef struct gnFunctions_t { gnReturnCode (*_gnCreateInstance)(gnInstanceHandle instance, gnInstanceInfo info); void (*_gnDestroyInstance)(gnInstanceHandle instance); - gnReturnCode (*_gnCreateDebugger)(gnDebuggerHandle debugger, gnInstanceHandle instance, const gnDebuggerInfo info); - void (*_gnDestroyDebugger)(gnDebuggerHandle debugger); - gnPhysicalDevice* (*_gnGetPhysicalDevices)(gnInstanceHandle instance, uint32_t* count); gnBool (*_gnQueueCanPresentToSurface)(const gnPhysicalDevice device, uint32_t queueIndex, const gnWindowSurfaceHandle windowSurface); - gnReturnCode (*_gnCreateOutputDevoce)(gnOutputDeviceHandle device, gnInstanceHandle instance, struct gnOutputDeviceInfo_t deviceInfo); void (*_gnDestroyOutputDevice)(gnOutputDeviceHandle device); diff --git a/src/core/instance/gryphn_instance.c b/src/core/instance/gryphn_instance.c index 4e64af5..bb7bed3 100644 --- a/src/core/instance/gryphn_instance.c +++ b/src/core/instance/gryphn_instance.c @@ -1,7 +1,6 @@ #include "gryphn_instance.h" #include "init/gryphn_init.h" #include -#include "core/debugger/gryphn_debugger.h" #include "core/instance/gryphn_instance.h" #include "stdio.h" @@ -18,30 +17,11 @@ gnReturnCode gnCreateInstance(gnInstanceHandle* instanceHandlePtr, struct gnInst instance->functions = malloc(sizeof(struct gnFunctions_t)); instance->loadCommandFunctions = gnFalse; instance->loadDeviceFunctions = gnFalse; + instance->debugger = info.debugger; gnLoadFunctions(instance->dynamicLib, instance->functions); return instance->functions->_gnCreateInstance(instance, info); } -void gnInstanceAttachDebugger(gnInstanceHandle instance, struct gnDebugger_t *debugger) { - if (instance->debugger != NULL) { - gnDebuggerSetErrorMessage(debugger, (gnMessageData){ - .message = gnCreateString("Debugger already attached to instance") - }); - } - instance->debugger = debugger; - debugger->instance = instance; - gnReturnCode debuggerInfo = instance->functions->_gnCreateDebugger(debugger, instance, debugger->info); - if (debuggerInfo != GN_SUCCESS) { - gnDebuggerSetErrorMessage(debugger, (gnMessageData){ - .message = gnCreateString("Failed to attach debugger to instance") - }); - } -} void gnDestroyInstance(gnInstanceHandle instance) { - if (instance->debugger) instance->functions->_gnDestroyDebugger(instance->debugger); instance->functions->_gnDestroyInstance(instance); } - -void gnInstanceReleaseDebugger(gnInstanceHandle instance) { - instance->debugger = NULL; -} diff --git a/src/core/instance/gryphn_instance.h b/src/core/instance/gryphn_instance.h index 3efddc8..74bc38f 100644 --- a/src/core/instance/gryphn_instance.h +++ b/src/core/instance/gryphn_instance.h @@ -15,6 +15,7 @@ typedef struct gnInstanceInfo_t { gnVersion engineVersion; gnRenderingAPI renderingAPI; + gnDebuggerHandle debugger; } gnInstanceInfo; #ifdef GN_REVEAL_IMPL @@ -35,6 +36,4 @@ struct gnInstance_t { #endif gnReturnCode gnCreateInstance(gnInstanceHandle* instance, struct gnInstanceInfo_t info); -void gnInstanceAttachDebugger(gnInstanceHandle istance, gnDebuggerHandle debugger); -void gnInstanceReleaseDebugger(gnInstanceHandle instance); void gnDestroyInstance(gnInstanceHandle instance); diff --git a/src/core/instance/init/gryphn_init.c b/src/core/instance/init/gryphn_init.c index 7ea9dcc..ab1f974 100644 --- a/src/core/instance/init/gryphn_init.c +++ b/src/core/instance/init/gryphn_init.c @@ -40,8 +40,8 @@ struct gnDynamicLibrary_t* gnLoadRenderingDLL(gnRenderingAPI renderingAPI) { void gnLoadFunctions(struct gnDynamicLibrary_t* lib, struct gnFunctions_t* functions) { gnLoadDLLFunction(lib, functions->_gnCreateInstance, "gnCreateInstanceFn"); gnLoadDLLFunction(lib, functions->_gnDestroyInstance, "gnDestroyInstanceFn"); - gnLoadDLLFunction(lib, functions->_gnCreateDebugger, "gnCreateDebuggerFn"); - gnLoadDLLFunction(lib, functions->_gnDestroyDebugger, "gnDestroyDebuggerFn"); + // gnLoadDLLFunction(lib, functions->_gnCreateDebugger, "gnCreateDebuggerFn"); + // gnLoadDLLFunction(lib, functions->_gnDestroyDebugger, "gnDestroyDebuggerFn"); gnLoadDLLFunction(lib, functions->_gnGetPhysicalDevices, "gnGetPhysicalDevicesFn"); gnLoadDLLFunction(lib, functions->_gnQueueCanPresentToSurface, "gnQueueCanPresentToSurfaceFn"); gnLoadDLLFunction(lib, functions->_gnCreateOutputDevoce, "gnCreateOutputDeviceFn"); diff --git a/src/core/output_device/gryphn_physical_output_device.c b/src/core/output_device/gryphn_physical_output_device.c index 10a287a..d895f8d 100644 --- a/src/core/output_device/gryphn_physical_output_device.c +++ b/src/core/output_device/gryphn_physical_output_device.c @@ -1,6 +1,5 @@ #include "gryphn_physical_output_device.h" #include "core/gryphn_platform_functions.h" -#include "stdio.h" gnPhysicalDevice* gnGetPhyscialDevices(gnInstanceHandle instance, uint32_t* count) { gnPhysicalDevice* devices = instance->functions->_gnGetPhysicalDevices(instance, count); @@ -11,14 +10,14 @@ gnPhysicalDevice* gnGetPhyscialDevices(gnInstanceHandle instance, uint32_t* coun } gnBool gnQueueCanPresentToSurface(const struct gnPhysicalDevice_t device, uint32_t queueIndex, gnWindowSurfaceHandle windowSurface) { - if (queueIndex >= device.queueProperties.queueCount) { - gnDebuggerSetErrorMessage(device.instance->debugger, - (gnMessageData){ - .message = gnCreateString("gnQueueCanPresentToSurface queue index passed in is large then queueProperties.queueCount") - } - ); - return gnFalse; - } + // if (queueIndex >= device.queueProperties.queueCount) { + // gnDebuggerSetErrorMessage(device.instance->debugger, + // (gnMessageData){ + // .message = gnCreateString("gnQueueCanPresentToSurface queue index passed in is large then queueProperties.queueCount") + // } + // ); + // return gnFalse; + // } return device.instance->functions->_gnQueueCanPresentToSurface(device, queueIndex, windowSurface); } @@ -46,11 +45,11 @@ int gnGetGraphicsQueueIndex(const struct gnPhysicalDevice_t device) { break; } } - gnDebuggerSetErrorMessage(device.instance->debugger, - (gnMessageData){ - .message = gnCreateString("gnGetGraphicsQueueIndex failed no queue that support graphics on this device") - } - ); + // gnDebuggerSetErrorMessage(device.instance->debugger, + // (gnMessageData){ + // .message = gnCreateString("gnGetGraphicsQueueIndex failed no queue that support graphics on this device") + // } + // ); return -1; } int gnGetPresentQueueIndex(const struct gnPhysicalDevice_t device, gnWindowSurfaceHandle windowSurface) { @@ -60,10 +59,10 @@ int gnGetPresentQueueIndex(const struct gnPhysicalDevice_t device, gnWindowSurfa break; } } - gnDebuggerSetErrorMessage(device.instance->debugger, - (gnMessageData){ - .message = gnCreateString("gnGetPresentQueueIndex failed no queue that support presenting to this window surface") - } - ); + // gnDebuggerSetErrorMessage(device.instance->debugger, + // (gnMessageData){ + // .message = gnCreateString("gnGetPresentQueueIndex failed no queue that support presenting to this window surface") + // } + // ); return -1; } diff --git a/src/utils b/src/utils index 5b05fb2..c5049bd 160000 --- a/src/utils +++ b/src/utils @@ -1 +1 @@ -Subproject commit 5b05fb287d4766420f8517c3352742922959ffdf +Subproject commit c5049bda3d13e63d401748bacc25fe72f4456755