From a91332f1e36d1ea720c93991502e396f018eef08 Mon Sep 17 00:00:00 2001 From: Gregory Wells Date: Sat, 14 Jun 2025 12:14:18 -0400 Subject: [PATCH] some stuffs --- .../vulkan/src/debugger/vulkan_debugger.c | 50 +++++++++---------- .../vulkan/src/present/vulkan_present.c | 2 - .../vulkan_presentation_queue.c | 11 ++++ .../src/vulkan_surface/vulkan_surface.c | 10 ++-- src/core/gryphn_platform_functions.h | 2 +- src/core/window_surface/gryphn_surface.c | 10 ++-- src/core/window_surface/gryphn_surface.h | 8 ++- 7 files changed, 54 insertions(+), 39 deletions(-) diff --git a/rendering_api/vulkan/src/debugger/vulkan_debugger.c b/rendering_api/vulkan/src/debugger/vulkan_debugger.c index f39cf66..d933cf3 100644 --- a/rendering_api/vulkan/src/debugger/vulkan_debugger.c +++ b/rendering_api/vulkan/src/debugger/vulkan_debugger.c @@ -45,37 +45,33 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL vk_debuggerDebugCallback( VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) { + struct vk_userData_t userData = *(struct vk_userData_t*)pUserData; - printf("Debuggger: %s\n", pCallbackData->pMessage); + gnMessageSeverity severity; + gnMessageType type; + gnMessageData data = { + .message = gnCreateString(pCallbackData->pMessage) + }; - // struct vk_userData_t userData = *(struct vk_userData_t*)pUserData; + 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; + } - // gnMessageSeverity severity; - // gnMessageType type; - // gnMessageData data = { - // .message = gnCreateString(pCallbackData->pMessage) - // }; + 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 (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; - // } - - // gnDebuggerCallback callback = *userData.debuggerCallback; - // gnBool result = callback(severity, type, data, userData.userData); - // if (result == gnFalse) return VK_FALSE; - // else if (result == gnTrue) return VK_TRUE; - return VK_FALSE; + 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) { diff --git a/rendering_api/vulkan/src/present/vulkan_present.c b/rendering_api/vulkan/src/present/vulkan_present.c index 45bfc38..cbf042b 100644 --- a/rendering_api/vulkan/src/present/vulkan_present.c +++ b/rendering_api/vulkan/src/present/vulkan_present.c @@ -3,8 +3,6 @@ #include "presentation_queue/vulkan_presentation_queue.h" #include "output_device/vulkan_output_devices.h" -#include "stdio.h" - gnReturnCode gnPresentFn(struct gnOutputDevice_t* device, struct gnPresentInfo_t info) { VkSemaphore* waitSemaphores = malloc(sizeof(VkSemaphore) * info.waitCount); for (int i = 0; i < info.waitCount; i++) waitSemaphores[i] = info.waitSemaphores[i]->semaphore->semaphore; diff --git a/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c b/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c index c6ad87a..32e7cb0 100644 --- a/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c +++ b/rendering_api/vulkan/src/presentation_queue/vulkan_presentation_queue.c @@ -11,6 +11,17 @@ gnReturnCode gnCreatePresentationQueueFn(gnPresentationQueueHandle presentationQ presentationQueue->presentationQueue = malloc(sizeof(struct gnPlatformPresentationQueue_t)); vkSwapchainSupportDetails details = vkGetSwapchainSupport(device->physicalDevice.physicalDevice->device, presentationInfo.surface->windowSurface->surface); + + if (details.capabilities.currentExtent.width != presentationInfo.imageSize.x || details.capabilities.currentExtent.height != presentationInfo.imageSize.y) { + gnDebuggerSetErrorMessage(device->instance->debugger, + (gnMessageData){ + .message = gnCreateString("Image size is unsupposed for presentation queue") + } + ); + + presentationInfo.imageSize = (gnUInt2){ details.capabilities.currentExtent.width, details.capabilities.currentExtent.height }; + } + if (details.formatCount == 0) { gnDebuggerSetErrorMessage(device->instance->debugger, (gnMessageData){ diff --git a/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.c b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.c index d2207f7..9f404d5 100644 --- a/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.c +++ b/rendering_api/vulkan/src/vulkan_surface/vulkan_surface.c @@ -88,10 +88,10 @@ struct gnSurfaceFormat_t* vkGetSurfaceFormats( return formats; } -struct gnSurfaceDetails_t gnGetSurfaceDetailsFn( - struct gnWindowSurface_t* windowSurface, struct gnPhysicalDevice_t device +gnSurfaceDetails gnGetSurfaceDetailsFn( + gnWindowSurfaceHandle windowSurface, gnPhysicalDevice device ) { - struct gnSurfaceDetails_t surfaceDetails; + gnSurfaceDetails surfaceDetails; surfaceDetails.formats = vkGetSurfaceFormats(windowSurface, device, &surfaceDetails.formatCount); VkSurfaceCapabilitiesKHR details; @@ -100,6 +100,10 @@ struct gnSurfaceDetails_t gnGetSurfaceDetailsFn( surfaceDetails.minImageCount = details.minImageCount; surfaceDetails.maxImageCount = details.maxImageCount; + surfaceDetails.minImageSize = (gnUInt2){ details.minImageExtent.width, details.minImageExtent.height }; + surfaceDetails.maxImageSize = (gnUInt2){ details.maxImageExtent.width, details.maxImageExtent.height }; + surfaceDetails.currentSize = (gnUInt2){ details.currentExtent.width, details.currentExtent.height }; + return surfaceDetails; } diff --git a/src/core/gryphn_platform_functions.h b/src/core/gryphn_platform_functions.h index f07328e..a5abe7b 100644 --- a/src/core/gryphn_platform_functions.h +++ b/src/core/gryphn_platform_functions.h @@ -54,7 +54,7 @@ typedef struct gnFunctions_t { #endif void (*_gnDestroyWindowSurface)(gnWindowSurfaceHandle windowSurface); - struct gnSurfaceDetails_t (*_gnGetSurfaceDetails)(gnWindowSurfaceHandle windowSurface, struct gnPhysicalDevice_t device); + gnSurfaceDetails (*_gnGetSurfaceDetails)(gnWindowSurfaceHandle windowSurface, struct gnPhysicalDevice_t device); } gnFunctions; #include "core/presentation_queue/gryphn_presentation_queue.h" diff --git a/src/core/window_surface/gryphn_surface.c b/src/core/window_surface/gryphn_surface.c index b51adc8..bd4622f 100644 --- a/src/core/window_surface/gryphn_surface.c +++ b/src/core/window_surface/gryphn_surface.c @@ -10,7 +10,7 @@ struct gnSurfaceFormat_t* gnGetSupportedSurfaceFormats( struct gnPhysicalDevice_t device, uint32_t* formatCount ) { - struct gnSurfaceDetails_t surfaceDetails = windowSurface->instance->functions->_gnGetSurfaceDetails(windowSurface, device); + gnSurfaceDetails surfaceDetails = windowSurface->instance->functions->_gnGetSurfaceDetails(windowSurface, device); *formatCount = surfaceDetails.formatCount; return surfaceDetails.formats; } @@ -54,16 +54,16 @@ struct gnSurfaceFormat_t gnGetPreferredSurfaceFormat( } uint32_t gnGetMinImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device) { - struct gnSurfaceDetails_t surfaceDetails = surface->instance->functions->_gnGetSurfaceDetails(surface, device); + gnSurfaceDetails surfaceDetails = surface->instance->functions->_gnGetSurfaceDetails(surface, device); return surfaceDetails.minImageCount; } uint32_t gnGetMaxImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device) { - struct gnSurfaceDetails_t surfaceDetails = surface->instance->functions->_gnGetSurfaceDetails(surface, device); + gnSurfaceDetails surfaceDetails = surface->instance->functions->_gnGetSurfaceDetails(surface, device); return surfaceDetails.maxImageCount; } uint32_t gnGetPreferredImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device) { - struct gnSurfaceDetails_t surfaceDetails = surface->instance->functions->_gnGetSurfaceDetails(surface, device); + gnSurfaceDetails surfaceDetails = surface->instance->functions->_gnGetSurfaceDetails(surface, device); uint32_t imageCount = surfaceDetails.minImageCount + 1; if (surfaceDetails.maxImageCount > 0 && imageCount > surfaceDetails.maxImageCount) { @@ -71,3 +71,5 @@ uint32_t gnGetPreferredImageCount(gnWindowSurfaceHandle surface, struct gnPhysi } return imageCount; } + +gnSurfaceDetails gnGetSurfaceDetails(gnWindowSurfaceHandle surface, gnPhysicalDevice device) { return surface->instance->functions->_gnGetSurfaceDetails(surface, device); } diff --git a/src/core/window_surface/gryphn_surface.h b/src/core/window_surface/gryphn_surface.h index 326587e..ba78228 100644 --- a/src/core/window_surface/gryphn_surface.h +++ b/src/core/window_surface/gryphn_surface.h @@ -9,12 +9,13 @@ typedef struct gnSurfaceFormat_t { gnColorSpace colorSpace; } gnSurfaceFormat; -typedef struct gnSurfaceDetails_t { +typedef struct gnSurfaceDetails { uint32_t formatCount; struct gnSurfaceFormat_t* formats; uint32_t minImageCount, maxImageCount; -} gnSufaceDetails; + gnUInt2 minImageSize, maxImageSize, currentSize; +} gnSurfaceDetails; #ifdef GN_REVEAL_IMPL struct gnWindowSurface_t { @@ -47,3 +48,6 @@ struct gnSurfaceFormat_t gnGetPreferredSurfaceFormat( uint32_t gnGetMinImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device); uint32_t gnGetMaxImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device); uint32_t gnGetPreferredImageCount(gnWindowSurfaceHandle surface, struct gnPhysicalDevice_t device); + + +gnSurfaceDetails gnGetSurfaceDetails(gnWindowSurfaceHandle surface, gnPhysicalDevice device);