start to redo validation
This commit is contained in:
@@ -1,161 +1,158 @@
|
||||
#include "vulkan_debugger.h"
|
||||
#include <instance/vulkan_instance.h>
|
||||
#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);
|
||||
// }
|
||||
|
@@ -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);
|
||||
|
@@ -2,6 +2,11 @@
|
||||
#include <debugger/vulkan_debugger.h>
|
||||
#include <stdio.h>
|
||||
|
||||
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;
|
||||
|
Reference in New Issue
Block a user