more error hunting

This commit is contained in:
Gregory Wells
2025-08-03 15:08:01 -04:00
parent 590365c4a6
commit 5f298554fd
19 changed files with 61 additions and 48 deletions

View File

@@ -1,5 +1,7 @@
#include "vulkan_instance.h" #include "vulkan_instance.h"
#include "vulkan_result_converter.h" #include "vulkan_result_converter.h"
GN_ARRAY_LIST_DEFINITION(vkString)
static VKAPI_ATTR VkBool32 VKAPI_CALL vk_debuggerDebugCallback( static VKAPI_ATTR VkBool32 VKAPI_CALL vk_debuggerDebugCallback(
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
@@ -14,18 +16,24 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL vk_debuggerDebugCallback(
}; };
switch (messageSeverity) { switch (messageSeverity) {
default: break;
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: severity = GN_MESSAGE_VERBOSE; 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_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_WARNING_BIT_EXT: severity = GN_MESSAGE_WARNING; break;
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: severity = GN_MESSAGE_ERROR; break; case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: severity = GN_MESSAGE_ERROR; break;
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT: {
VkDebugUtilsMessengerCallbackDataEXT callbackData = {
.pMessage = "Error triggered with VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT, this indicates a big within vulkan"
};
vk_debuggerDebugCallback(VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, &callbackData, pUserData);
severity = GN_MESSAGE_ERROR;
}
} }
switch (messageType) { 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_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_VALIDATION_BIT_EXT: type = GN_DEBUG_MESSAGE_VALIDATION; break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT: type = GN_DEBUG_MESSAGE_PERFORMANCE; break; case VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT: type = GN_DEBUG_MESSAGE_PERFORMANCE; break;
case VK_DEBUG_UTILS_MESSAGE_TYPE_DEVICE_ADDRESS_BINDING_BIT_EXT: type = GN_DEBUG_MESSAGE_PERFORMANCE; break;
} }
vkUserData* userData = (vkUserData*)pUserData; vkUserData* userData = (vkUserData*)pUserData;
@@ -36,20 +44,21 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL vk_debuggerDebugCallback(
} }
gnReturnCode vulkanCreateInstance(gnInstanceHandle instance, gnInstanceCreateInfo* instanceInfo, gryphnInstanceFunctionLayers* next) { gnReturnCode vulkanCreateInstance(gnInstanceHandle instance, gnInstanceCreateInfo* instanceInfo, gryphnInstanceFunctionLayers* next) {
if (next != NULL) { return GN_SUCCESS; }
instance->instance = malloc(sizeof(gnPlatformInstance)); instance->instance = malloc(sizeof(gnPlatformInstance));
vkStringArrayList extensions = vkStringArrayListCreate(); vkStringArrayList extensions = vkStringArrayListCreate();
vkStringArrayListAdd(&extensions, "VK_KHR_surface"); vkStringArrayListAdd(extensions, "VK_KHR_surface");
vkStringArrayListReserve(&extensions, 5); vkStringArrayListReserve(extensions, 5);
#ifdef GN_PLATFORM_MACOS #ifdef GN_PLATFORM_MACOS
vkStringArrayListAdd(&extensions, "VK_EXT_metal_surface"); vkStringArrayListAdd(extensions, "VK_EXT_metal_surface");
vkStringArrayListAdd(&extensions, "VK_KHR_portability_enumeration"); vkStringArrayListAdd(extensions, "VK_KHR_portability_enumeration");
#elif GN_PLATFORM_WINDOWS #elif GN_PLATFORM_WINDOWS
vkStringArrayListAdd(&extensions, "VK_KHR_win32_surface"); vkStringArrayListAdd(extensions, "VK_KHR_win32_surface");
#elif GN_PLATFORM_LINUX #elif GN_PLATFORM_LINUX
#ifdef GN_WINDOW_X11 #ifdef GN_WINDOW_X11
vkStringArrayListAdd(&extensions, "VK_KHR_xlib_surface"); vkStringArrayListAdd(extensions, "VK_KHR_xlib_surface");
#endif #endif
#endif #endif
@@ -74,9 +83,7 @@ gnReturnCode vulkanCreateInstance(gnInstanceHandle instance, gnInstanceCreateInf
#endif #endif
if (instance->enabledLayerCounts[GN_DEBUGGER_LAYER_PLATFORM] > 0) { if (instance->enabledLayerCounts[GN_DEBUGGER_LAYER_PLATFORM] > 0) {
vkStringArrayListAdd(&extensions, VK_EXT_DEBUG_UTILS_EXTENSION_NAME); vkStringArrayListAdd(extensions, VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
const char* validation_layers[1] = { "VK_LAYER_KHRONOS_validation" };
createInfo.enabledLayerCount = 1; createInfo.enabledLayerCount = 1;
createInfo.ppEnabledLayerNames = (const char*[]){ "VK_LAYER_KHRONOS_validation" }; createInfo.ppEnabledLayerNames = (const char*[]){ "VK_LAYER_KHRONOS_validation" };
@@ -94,11 +101,12 @@ gnReturnCode vulkanCreateInstance(gnInstanceHandle instance, gnInstanceCreateInf
} }
createInfo.enabledExtensionCount = extensions.count; createInfo.enabledExtensionCount = vkStringArrayListCount(extensions);
createInfo.ppEnabledExtensionNames = extensions.data; createInfo.ppEnabledExtensionNames = vkStringArrayListData(extensions);
return VkResultToGnReturnCode(vkCreateInstance(&createInfo, NULL, &instance->instance->vk_instance)); return VkResultToGnReturnCode(vkCreateInstance(&createInfo, NULL, &instance->instance->vk_instance));
} }
void vulkanDestroyInstance(gnInstanceHandle instance, gryphnInstanceFunctionLayers* next) { void vulkanDestroyInstance(gnInstanceHandle instance, gryphnInstanceFunctionLayers* next) {
if (next != NULL) { return; }
vkDestroyInstance(instance->instance->vk_instance, NULL); vkDestroyInstance(instance->instance->vk_instance, NULL);
} }

View File

@@ -18,4 +18,4 @@ gnReturnCode vulkanCreateInstance(gnInstanceHandle instance, gnInstanceCreateInf
void vulkanDestroyInstance(gnInstanceHandle instance, gryphnInstanceFunctionLayers* next); void vulkanDestroyInstance(gnInstanceHandle instance, gryphnInstanceFunctionLayers* next);
typedef const char* vkString; typedef const char* vkString;
GN_ARRAY_LIST(vkString); GN_ARRAY_LIST_HEADER(vkString);

View File

@@ -2,6 +2,9 @@
#include "output_device/gryphn_output_device.h" #include "output_device/gryphn_output_device.h"
#include "instance/gryphn_instance.h" #include "instance/gryphn_instance.h"
GN_ARRAY_LIST_DEFINITION(gnBuffer)
GN_ARRAY_LIST_DEFINITION(gnBufferMemory)
gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, gnBufferInfo info) { gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, gnBufferInfo info) {
*buffer = malloc(sizeof(struct gnBuffer_t)); *buffer = malloc(sizeof(struct gnBuffer_t));
(*buffer)->device = device; (*buffer)->device = device;

View File

@@ -37,8 +37,8 @@ struct gnBuffer_t {
}; };
#endif #endif
typedef void* gnBufferMemory; typedef void* gnBufferMemory;
GN_ARRAY_LIST(gnBuffer); GN_ARRAY_LIST_HEADER(gnBuffer);
GN_ARRAY_LIST(gnBufferMemory); GN_ARRAY_LIST_HEADER(gnBufferMemory);
gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, gnBufferInfo info); gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, gnBufferInfo info);
void gnBufferData(gnBufferHandle buffer, size_t dataSize, gnBufferMemory data); void gnBufferData(gnBufferHandle buffer, size_t dataSize, gnBufferMemory data);

View File

@@ -3,7 +3,7 @@
#include "instance/gryphn_instance.h" #include "instance/gryphn_instance.h"
gnReturnCode gnCommandPoolAllocateCommandBuffersFromPointer(gnCommandBufferHandle* buffers, uint32_t count, gnCommandPoolHandle commandPool) { gnReturnCode gnCommandPoolAllocateCommandBuffersFromPointer(gnCommandBufferHandle* buffers, uint32_t count, gnCommandPoolHandle commandPool) {
for (int i = 0; i < count; i++) { for (uint32_t i = 0; i < count; i++) {
buffers[i] = malloc(sizeof(struct gnCommandBuffer_t)); buffers[i] = malloc(sizeof(struct gnCommandBuffer_t));
buffers[i]->commandPool = commandPool; buffers[i]->commandPool = commandPool;
buffers[i]->instance = commandPool->instance; buffers[i]->instance = commandPool->instance;
@@ -12,15 +12,11 @@ gnReturnCode gnCommandPoolAllocateCommandBuffersFromPointer(gnCommandBufferHandl
} }
gnReturnCode gnCommandPoolAllocateCommandBuffersFromList(gnCommandBufferArrayList buffers, uint32_t count, gnCommandPoolHandle commandPool) { gnReturnCode gnCommandPoolAllocateCommandBuffersFromList(gnCommandBufferArrayList buffers, uint32_t count, gnCommandPoolHandle commandPool) {
// if (buffers.count < count) { for (uint32_t i = 0; i < count; i++) {
// gnCommandBufferArrayListExpand(&buffers, buffers.count - count); gnCommandBufferArrayListAt(buffers, i)->commandBuffer = malloc(sizeof(struct gnCommandBuffer_t));
// } gnCommandBufferArrayListAt(buffers, i)->commandPool = commandPool;
for (int i = 0; i < count; i++) {
buffers.data[i] = malloc(sizeof(struct gnCommandBuffer_t));
buffers.data[i]->commandPool = commandPool;
} }
return gnCommandPoolAllocateCommandBuffersFromPointer(buffers.data, count, commandPool); return gnCommandPoolAllocateCommandBuffersFromPointer(gnCommandBufferArrayListData(buffers), count, commandPool);
} }
void gnResetCommandBuffer(gnCommandBufferHandle commandBuffer) { void gnResetCommandBuffer(gnCommandBufferHandle commandBuffer) {
@@ -38,3 +34,6 @@ gnReturnCode gnEndCommandBuffer(gnCommandBufferHandle commandBuffer) {
void gnDestroyCommandBuffer(gnCommandBufferHandle commandBuffer) { void gnDestroyCommandBuffer(gnCommandBufferHandle commandBuffer) {
commandBuffer->commandPool->instance->callingLayer->commandFunctions._gnDestroyCommandBuffer(commandBuffer); commandBuffer->commandPool->instance->callingLayer->commandFunctions._gnDestroyCommandBuffer(commandBuffer);
} }
GN_ARRAY_LIST_DEFINITION(gnCommandBuffer)

View File

@@ -12,10 +12,9 @@ struct gnCommandBuffer_t {
}; };
#endif #endif
GN_ARRAY_LIST(gnCommandBuffer); GN_ARRAY_LIST_HEADER(gnCommandBuffer);
gnReturnCode gnCommandPoolAllocateCommandBuffersFromPointer(gnCommandBufferHandle* buffers, uint32_t count, gnCommandPoolHandle commandPool); gnReturnCode gnCommandPoolAllocateCommandBuffersFromPointer(gnCommandBufferHandle* buffers, uint32_t count, gnCommandPoolHandle commandPool);
// will reserve the space for ${count} number of elements
gnReturnCode gnCommandPoolAllocateCommandBuffersFromList(gnCommandBufferArrayList buffers, uint32_t count, gnCommandPoolHandle commandPool); gnReturnCode gnCommandPoolAllocateCommandBuffersFromList(gnCommandBufferArrayList buffers, uint32_t count, gnCommandPoolHandle commandPool);
#define gnCommandPoolAllocateCommandBuffers(buffers, count, commandPool) \ #define gnCommandPoolAllocateCommandBuffers(buffers, count, commandPool) \

View File

@@ -42,8 +42,7 @@ typedef struct gnDebuggerCreateInfo {
} gnDebuggerCreateInfo; } gnDebuggerCreateInfo;
#ifdef GN_REVEAL_IMPL #ifdef GN_REVEAL_IMPL
// struct gnDebugger_t { gnDebuggerInfo info; }; static inline void gnDebuggerSetErrorMessage(gnDebuggerCreateInfo debugger, gnMessageData data) {
static void gnDebuggerSetErrorMessage(gnDebuggerCreateInfo debugger, gnMessageData data) {
// if (debugger == NULL) return; // if (debugger == NULL) return;
debugger.callback( debugger.callback(
GN_MESSAGE_ERROR, GN_MESSAGE_ERROR,

View File

@@ -3,7 +3,7 @@
#include <core/gryphn_return_code.h> #include <core/gryphn_return_code.h>
typedef struct gnOutputDeviceEnabledFeatures { typedef struct gnOutputDeviceEnabledFeatures {
gnBool warningAvioder; // this is here just to stop this from producing a warning
} gnOutputDeviceEnabledFeatures; } gnOutputDeviceEnabledFeatures;
typedef struct gnDeviceQueueInfo { typedef struct gnDeviceQueueInfo {

View File

@@ -14,3 +14,6 @@ void gnUpdateStorageUniform(gnUniform uniform, gnStorageUniformInfo storageInfo)
void gnUpdateImageUniform(gnUniform uniform, gnImageUniformInfo imageInfo) { void gnUpdateImageUniform(gnUniform uniform, gnImageUniformInfo imageInfo) {
uniform->pool->device->instance->callingLayer->deviceFunctions._gnUpdateImageUniform(uniform, &imageInfo); uniform->pool->device->instance->callingLayer->deviceFunctions._gnUpdateImageUniform(uniform, &imageInfo);
} }
GN_ARRAY_LIST_DEFINITION(gnUniform)

View File

@@ -30,7 +30,7 @@ struct gnUniform_t {
gnUniformPool pool; gnUniformPool pool;
}; };
#endif #endif
GN_ARRAY_LIST(gnUniform); GN_ARRAY_LIST_HEADER(gnUniform);
void gnUpdateBufferUniform(gnUniform uniform, gnBufferUniformInfo bufferInfo); void gnUpdateBufferUniform(gnUniform uniform, gnBufferUniformInfo bufferInfo);
void gnUpdateStorageUniform(gnUniform uniform, gnStorageUniformInfo storageInfo); void gnUpdateStorageUniform(gnUniform uniform, gnStorageUniformInfo storageInfo);

View File

@@ -1,5 +1,3 @@
// #ifdef GN_EXT_GN_EXT_SYNCHRONIZATION
#include "gryphn_fence.h" #include "gryphn_fence.h"
#include "output_device/gryphn_output_device.h" #include "output_device/gryphn_output_device.h"
#include "instance/gryphn_instance.h" #include "instance/gryphn_instance.h"
@@ -25,4 +23,4 @@ void gnDestroyFence(gnFenceHandle fence) {
fence->device->instance->callingLayer->syncFunctions._gnDestroyFence(fence); fence->device->instance->callingLayer->syncFunctions._gnDestroyFence(fence);
} }
// #endif GN_ARRAY_LIST_DEFINITION(gnFence)

View File

@@ -11,10 +11,12 @@ struct gnFence_t {
gnBool signaled; gnBool signaled;
}; };
#endif #endif
GN_ARRAY_LIST(gnFence);
gnReturnCode gnCreateFence(gnFenceHandle* fence, gnOutputDeviceHandle device); gnReturnCode gnCreateFence(gnFenceHandle* fence, gnOutputDeviceHandle device);
void gnSignalFence(gnFenceHandle fence); void gnSignalFence(gnFenceHandle fence);
void gnWaitForFence(gnFenceHandle fence, uint64_t timeout); void gnWaitForFence(gnFenceHandle fence, uint64_t timeout);
void gnResetFence(gnFenceHandle fence); void gnResetFence(gnFenceHandle fence);
void gnDestroyFence(gnFenceHandle fence); void gnDestroyFence(gnFenceHandle fence);
GN_ARRAY_LIST_HEADER(gnFence);

View File

@@ -12,5 +12,4 @@ gnReturnCode gnCreateSemaphore(gnSemaphore* semaphore, struct gnOutputDevice_t*
void gnDestroySemaphore(struct gnSemaphore_t* semaphore) { void gnDestroySemaphore(struct gnSemaphore_t* semaphore) {
semaphore->device->instance->callingLayer->syncFunctions._gnDestroySemaphore(semaphore); semaphore->device->instance->callingLayer->syncFunctions._gnDestroySemaphore(semaphore);
} }
GN_ARRAY_LIST_DEFINITION(gnSemaphore)
// #endif

View File

@@ -9,7 +9,7 @@ struct gnSemaphore_t {
gnOutputDeviceHandle device; gnOutputDeviceHandle device;
}; };
#endif #endif
GN_ARRAY_LIST(gnSemaphore);
gnReturnCode gnCreateSemaphore(gnSemaphore* semaphore, struct gnOutputDevice_t* device); gnReturnCode gnCreateSemaphore(gnSemaphore* semaphore, struct gnOutputDevice_t* device);
void gnDestroySemaphore(gnSemaphore semaphore); void gnDestroySemaphore(gnSemaphore semaphore);
GN_ARRAY_LIST_HEADER(gnSemaphore);

View File

@@ -3,12 +3,12 @@
#include "core/gryphn_return_code.h" #include "core/gryphn_return_code.h"
#include "gryphn_handles.h" #include "gryphn_handles.h"
#include <core/src/buffers/gryphn_buffer.h>
typedef struct gnRenderPassInfo gnRenderPassInfo; typedef struct gnRenderPassInfo gnRenderPassInfo;
typedef struct gnViewport gnViewport; typedef struct gnViewport gnViewport;
typedef struct gnScissor gnScissor; typedef struct gnScissor gnScissor;
typedef struct gnPushConstantLayout gnPushConstantLayout; typedef struct gnPushConstantLayout gnPushConstantLayout;
typedef enum gnBufferType gnBufferType;
typedef enum gnIndexType gnIndexType;
typedef struct gnCommandFunctions_t { typedef struct gnCommandFunctions_t {
gnReturnCode (*_gnCommandPoolAllocateCommandBuffers)(gnCommandBufferHandle* commandBuffers, uint32_t count, gnCommandPoolHandle pool); gnReturnCode (*_gnCommandPoolAllocateCommandBuffers)(gnCommandBufferHandle* commandBuffers, uint32_t count, gnCommandPoolHandle pool);

View File

@@ -175,3 +175,6 @@ loaderLayer* loaderGetNextLayer(gnInstance instance) {
void resetLayer(gnInstance instance) { void resetLayer(gnInstance instance) {
instance->currentLayer = (instance->layers.count - 1); instance->currentLayer = (instance->layers.count - 1);
} }
GN_ARRAY_LIST_DEFINITION(loaderLayer)

View File

@@ -38,7 +38,7 @@ typedef struct loaderLayer {
} loaderLayer; } loaderLayer;
loaderLayer loadLayer(loaderInfo info); loaderLayer loadLayer(loaderInfo info);
GN_ARRAY_LIST(loaderLayer); GN_ARRAY_LIST_HEADER(loaderLayer);
loaderLayer* loaderGetNextLayer(gnInstance instance); loaderLayer* loaderGetNextLayer(gnInstance instance);
void resetLayer(gnInstance instance); void resetLayer(gnInstance instance);

View File

@@ -5,14 +5,14 @@
#include "extensions/sync_functions.h" #include "extensions/sync_functions.h"
#include "extensions/queue_functions.h" #include "extensions/queue_functions.h"
gryphnInstanceFunctionLayers checkerLoadInstanceFunctions() { gryphnInstanceFunctionLayers checkerLoadInstanceFunctions(void) {
return (gryphnInstanceFunctionLayers) { return (gryphnInstanceFunctionLayers) {
.createInstance = checkCreateInstance, .createInstance = checkCreateInstance,
.destroyInstance = checkDestroyInstance .destroyInstance = checkDestroyInstance
}; };
} }
gnInstanceFunctions loadFunctionLoaderInstanceFunctions() { gnInstanceFunctions loadFunctionLoaderInstanceFunctions(void) {
return (gnInstanceFunctions){ return (gnInstanceFunctions){
._gnGetPhysicalDevices = checkGetPhysicalDevices, ._gnGetPhysicalDevices = checkGetPhysicalDevices,
._gnPhysicalDeviceCanPresentToSurface = checkCanDevicePresent, ._gnPhysicalDeviceCanPresentToSurface = checkCanDevicePresent,
@@ -43,7 +43,7 @@ gnInstanceFunctions loadFunctionLoaderInstanceFunctions() {
._gnGetSurfaceDetails = checkGetSurfaceDetails ._gnGetSurfaceDetails = checkGetSurfaceDetails
}; };
} }
gnDeviceFunctions loadFunctionLoaderDeviceFunctions() { gnDeviceFunctions loadFunctionLoaderDeviceFunctions(void) {
return (gnDeviceFunctions){ return (gnDeviceFunctions){
._gnCreatePresentationQueue = checkCreatePresentationQueue, ._gnCreatePresentationQueue = checkCreatePresentationQueue,
._gnPresentationQueueGetImage = checkPresentationQueueGetImage, ._gnPresentationQueueGetImage = checkPresentationQueueGetImage,
@@ -88,7 +88,7 @@ gnDeviceFunctions loadFunctionLoaderDeviceFunctions() {
._gnWaitForDevice = checkWaitForDevice ._gnWaitForDevice = checkWaitForDevice
}; };
} }
gnCommandFunctions loadFunctionLoaderCommandFunctions() { gnCommandFunctions loadFunctionLoaderCommandFunctions(void) {
return (gnCommandFunctions){ return (gnCommandFunctions){
._gnCommandPoolAllocateCommandBuffers = checkCommandPoolAllocateCommandBuffers, ._gnCommandPoolAllocateCommandBuffers = checkCommandPoolAllocateCommandBuffers,
._gnBeginCommandBuffer = checkBeginCommandBuffer, ._gnBeginCommandBuffer = checkBeginCommandBuffer,
@@ -110,7 +110,7 @@ gnCommandFunctions loadFunctionLoaderCommandFunctions() {
}; };
} }
gnSyncExtFunctions loadFunctionLoaderSyncExtFunctions() { gnSyncExtFunctions loadFunctionLoaderSyncExtFunctions(void) {
return (gnSyncExtFunctions) { return (gnSyncExtFunctions) {
._gnPresentationQueueGetImageAsync = checkPresentationQueueGetImageAsync, ._gnPresentationQueueGetImageAsync = checkPresentationQueueGetImageAsync,
@@ -127,7 +127,7 @@ gnSyncExtFunctions loadFunctionLoaderSyncExtFunctions() {
}; };
} }
gnQueueExtFunctions loadFunctionLoaderQueueExtFunctions() { gnQueueExtFunctions loadFunctionLoaderQueueExtFunctions(void) {
return (gnQueueExtFunctions){ return (gnQueueExtFunctions){
._gnGetPhysicalDeviceQueueProperties = checkGetPhysicalDeviceQueueProperties, ._gnGetPhysicalDeviceQueueProperties = checkGetPhysicalDeviceQueueProperties,
._gnGetDeviceQueue = checkGetDeviceQueue, ._gnGetDeviceQueue = checkGetDeviceQueue,