Validation layer present check
This commit is contained in:
parent
be78fd0474
commit
79ac92bc3b
2 changed files with 92 additions and 38 deletions
|
|
@ -76,7 +76,7 @@ public:
|
||||||
VkPipeline pipeline;
|
VkPipeline pipeline;
|
||||||
VkShaderModule shaderModule;
|
VkShaderModule shaderModule;
|
||||||
|
|
||||||
VkDebugReportCallbackEXT debugReportCallback;
|
VkDebugReportCallbackEXT debugReportCallback{};
|
||||||
|
|
||||||
VkResult createBuffer(VkBufferUsageFlags usageFlags, VkMemoryPropertyFlags memoryPropertyFlags, VkBuffer *buffer, VkDeviceMemory *memory, VkDeviceSize size, void *data = nullptr)
|
VkResult createBuffer(VkBufferUsageFlags usageFlags, VkMemoryPropertyFlags memoryPropertyFlags, VkBuffer *buffer, VkDeviceMemory *memory, VkDeviceSize size, void *data = nullptr)
|
||||||
{
|
{
|
||||||
|
|
@ -142,18 +142,41 @@ public:
|
||||||
|
|
||||||
uint32_t layerCount = 0;
|
uint32_t layerCount = 0;
|
||||||
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
|
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||||
const char* validationlayers[] = { "VK_LAYER_GOOGLE_threading", "VK_LAYER_LUNARG_parameter_validation", "VK_LAYER_LUNARG_object_tracker","VK_LAYER_LUNARG_core_validation", "VK_LAYER_LUNARG_swapchain", "VK_LAYER_GOOGLE_unique_objects" };
|
const char* validationLayers[] = { "VK_LAYER_GOOGLE_threading", "VK_LAYER_LUNARG_parameter_validation", "VK_LAYER_LUNARG_object_tracker","VK_LAYER_LUNARG_core_validation", "VK_LAYER_LUNARG_swapchain", "VK_LAYER_GOOGLE_unique_objects" };
|
||||||
layerCount = 6;
|
layerCount = 6;
|
||||||
#else
|
#else
|
||||||
const char* validationlayers[] = { "VK_LAYER_LUNARG_standard_validation" };
|
const char* validationLayers[] = { "VK_LAYER_LUNARG_standard_validation" };
|
||||||
layerCount = 1;
|
layerCount = 1;
|
||||||
#endif
|
#endif
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
instanceCreateInfo.ppEnabledLayerNames = validationlayers;
|
// Check if layers are available
|
||||||
const char* validationExt = VK_EXT_DEBUG_REPORT_EXTENSION_NAME;
|
uint32_t instanceLayerCount;
|
||||||
|
vkEnumerateInstanceLayerProperties(&instanceLayerCount, nullptr);
|
||||||
|
std::vector<VkLayerProperties> instanceLayers(instanceLayerCount);
|
||||||
|
vkEnumerateInstanceLayerProperties(&instanceLayerCount, instanceLayers.data());
|
||||||
|
|
||||||
|
bool layersAvailable = true;
|
||||||
|
for (auto layerName : validationLayers) {
|
||||||
|
bool layerAvailable = false;
|
||||||
|
for (auto instanceLayer : instanceLayers) {
|
||||||
|
if (strcmp(instanceLayer.layerName, layerName) == 0) {
|
||||||
|
layerAvailable = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!layerAvailable) {
|
||||||
|
layersAvailable = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (layersAvailable) {
|
||||||
|
instanceCreateInfo.ppEnabledLayerNames = validationLayers;
|
||||||
|
const char *validationExt = VK_EXT_DEBUG_REPORT_EXTENSION_NAME;
|
||||||
instanceCreateInfo.enabledLayerCount = layerCount;
|
instanceCreateInfo.enabledLayerCount = layerCount;
|
||||||
instanceCreateInfo.enabledExtensionCount = 1;
|
instanceCreateInfo.enabledExtensionCount = 1;
|
||||||
instanceCreateInfo.ppEnabledExtensionNames = &validationExt;
|
instanceCreateInfo.ppEnabledExtensionNames = &validationExt;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
VK_CHECK_RESULT(vkCreateInstance(&instanceCreateInfo, nullptr, &instance));
|
VK_CHECK_RESULT(vkCreateInstance(&instanceCreateInfo, nullptr, &instance));
|
||||||
|
|
||||||
|
|
@ -161,6 +184,7 @@ public:
|
||||||
vks::android::loadVulkanFunctions(instance);
|
vks::android::loadVulkanFunctions(instance);
|
||||||
#endif
|
#endif
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
if (layersAvailable) {
|
||||||
VkDebugReportCallbackCreateInfoEXT debugReportCreateInfo = {};
|
VkDebugReportCallbackCreateInfoEXT debugReportCreateInfo = {};
|
||||||
debugReportCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
|
debugReportCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
|
||||||
debugReportCreateInfo.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT;
|
debugReportCreateInfo.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT;
|
||||||
|
|
@ -170,6 +194,7 @@ public:
|
||||||
PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = reinterpret_cast<PFN_vkCreateDebugReportCallbackEXT>(vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT"));
|
PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = reinterpret_cast<PFN_vkCreateDebugReportCallbackEXT>(vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT"));
|
||||||
assert(vkCreateDebugReportCallbackEXT);
|
assert(vkCreateDebugReportCallbackEXT);
|
||||||
VK_CHECK_RESULT(vkCreateDebugReportCallbackEXT(instance, &debugReportCreateInfo, nullptr, &debugReportCallback));
|
VK_CHECK_RESULT(vkCreateDebugReportCallbackEXT(instance, &debugReportCreateInfo, nullptr, &debugReportCallback));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -492,9 +517,11 @@ public:
|
||||||
vkDestroyShaderModule(device, shaderModule, nullptr);
|
vkDestroyShaderModule(device, shaderModule, nullptr);
|
||||||
vkDestroyDevice(device, nullptr);
|
vkDestroyDevice(device, nullptr);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
if (debugReportCallback) {
|
||||||
PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallback = reinterpret_cast<PFN_vkDestroyDebugReportCallbackEXT>(vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT"));
|
PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallback = reinterpret_cast<PFN_vkDestroyDebugReportCallbackEXT>(vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT"));
|
||||||
assert(vkDestroyDebugReportCallback);
|
assert(vkDestroyDebugReportCallback);
|
||||||
vkDestroyDebugReportCallback(instance, debugReportCallback, nullptr);
|
vkDestroyDebugReportCallback(instance, debugReportCallback, nullptr);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
vkDestroyInstance(instance, nullptr);
|
vkDestroyInstance(instance, nullptr);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ public:
|
||||||
FrameBufferAttachment colorAttachment, depthAttachment;
|
FrameBufferAttachment colorAttachment, depthAttachment;
|
||||||
VkRenderPass renderPass;
|
VkRenderPass renderPass;
|
||||||
|
|
||||||
VkDebugReportCallbackEXT debugReportCallback;
|
VkDebugReportCallbackEXT debugReportCallback{};
|
||||||
|
|
||||||
uint32_t getMemoryTypeIndex(uint32_t typeBits, VkMemoryPropertyFlags properties) {
|
uint32_t getMemoryTypeIndex(uint32_t typeBits, VkMemoryPropertyFlags properties) {
|
||||||
VkPhysicalDeviceMemoryProperties deviceMemoryProperties;
|
VkPhysicalDeviceMemoryProperties deviceMemoryProperties;
|
||||||
|
|
@ -172,18 +172,41 @@ public:
|
||||||
|
|
||||||
uint32_t layerCount = 0;
|
uint32_t layerCount = 0;
|
||||||
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
|
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||||
const char* validationlayers[] = { "VK_LAYER_GOOGLE_threading", "VK_LAYER_LUNARG_parameter_validation", "VK_LAYER_LUNARG_object_tracker","VK_LAYER_LUNARG_core_validation", "VK_LAYER_LUNARG_swapchain", "VK_LAYER_GOOGLE_unique_objects" };
|
const char* validationLayers[] = { "VK_LAYER_GOOGLE_threading", "VK_LAYER_LUNARG_parameter_validation", "VK_LAYER_LUNARG_object_tracker","VK_LAYER_LUNARG_core_validation", "VK_LAYER_LUNARG_swapchain", "VK_LAYER_GOOGLE_unique_objects" };
|
||||||
layerCount = 6;
|
layerCount = 6;
|
||||||
#else
|
#else
|
||||||
const char* validationlayers[] = { "VK_LAYER_LUNARG_standard_validation" };
|
const char* validationLayers[] = { "VK_LAYER_LUNARG_standard_validation" };
|
||||||
layerCount = 1;
|
layerCount = 1;
|
||||||
#endif
|
#endif
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
instanceCreateInfo.ppEnabledLayerNames = validationlayers;
|
// Check if layers are available
|
||||||
const char* validationExt = VK_EXT_DEBUG_REPORT_EXTENSION_NAME;
|
uint32_t instanceLayerCount;
|
||||||
|
vkEnumerateInstanceLayerProperties(&instanceLayerCount, nullptr);
|
||||||
|
std::vector<VkLayerProperties> instanceLayers(instanceLayerCount);
|
||||||
|
vkEnumerateInstanceLayerProperties(&instanceLayerCount, instanceLayers.data());
|
||||||
|
|
||||||
|
bool layersAvailable = true;
|
||||||
|
for (auto layerName : validationLayers) {
|
||||||
|
bool layerAvailable = false;
|
||||||
|
for (auto instanceLayer : instanceLayers) {
|
||||||
|
if (strcmp(instanceLayer.layerName, layerName) == 0) {
|
||||||
|
layerAvailable = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!layerAvailable) {
|
||||||
|
layersAvailable = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (layersAvailable) {
|
||||||
|
instanceCreateInfo.ppEnabledLayerNames = validationLayers;
|
||||||
|
const char *validationExt = VK_EXT_DEBUG_REPORT_EXTENSION_NAME;
|
||||||
instanceCreateInfo.enabledLayerCount = layerCount;
|
instanceCreateInfo.enabledLayerCount = layerCount;
|
||||||
instanceCreateInfo.enabledExtensionCount = 1;
|
instanceCreateInfo.enabledExtensionCount = 1;
|
||||||
instanceCreateInfo.ppEnabledExtensionNames = &validationExt;
|
instanceCreateInfo.ppEnabledExtensionNames = &validationExt;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
VK_CHECK_RESULT(vkCreateInstance(&instanceCreateInfo, nullptr, &instance));
|
VK_CHECK_RESULT(vkCreateInstance(&instanceCreateInfo, nullptr, &instance));
|
||||||
|
|
||||||
|
|
@ -191,6 +214,7 @@ public:
|
||||||
vks::android::loadVulkanFunctions(instance);
|
vks::android::loadVulkanFunctions(instance);
|
||||||
#endif
|
#endif
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
if (layersAvailable) {
|
||||||
VkDebugReportCallbackCreateInfoEXT debugReportCreateInfo = {};
|
VkDebugReportCallbackCreateInfoEXT debugReportCreateInfo = {};
|
||||||
debugReportCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
|
debugReportCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
|
||||||
debugReportCreateInfo.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT;
|
debugReportCreateInfo.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT;
|
||||||
|
|
@ -200,6 +224,7 @@ public:
|
||||||
PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = reinterpret_cast<PFN_vkCreateDebugReportCallbackEXT>(vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT"));
|
PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT = reinterpret_cast<PFN_vkCreateDebugReportCallbackEXT>(vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT"));
|
||||||
assert(vkCreateDebugReportCallbackEXT);
|
assert(vkCreateDebugReportCallbackEXT);
|
||||||
VK_CHECK_RESULT(vkCreateDebugReportCallbackEXT(instance, &debugReportCreateInfo, nullptr, &debugReportCallback));
|
VK_CHECK_RESULT(vkCreateDebugReportCallbackEXT(instance, &debugReportCreateInfo, nullptr, &debugReportCallback));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -824,9 +849,11 @@ public:
|
||||||
}
|
}
|
||||||
vkDestroyDevice(device, nullptr);
|
vkDestroyDevice(device, nullptr);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
if (debugReportCallback) {
|
||||||
PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallback = reinterpret_cast<PFN_vkDestroyDebugReportCallbackEXT>(vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT"));
|
PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallback = reinterpret_cast<PFN_vkDestroyDebugReportCallbackEXT>(vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT"));
|
||||||
assert(vkDestroyDebugReportCallback);
|
assert(vkDestroyDebugReportCallback);
|
||||||
vkDestroyDebugReportCallback(instance, debugReportCallback, nullptr);
|
vkDestroyDebugReportCallback(instance, debugReportCallback, nullptr);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
vkDestroyInstance(instance, nullptr);
|
vkDestroyInstance(instance, nullptr);
|
||||||
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
|
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue