Fix : Added prerequisite checks for using VK_Layer_Validation #105922

Merged
Jeroen Bakker merged 16 commits from :vk_debug_break_down into main 2023-03-28 10:45:56 +02:00
1 changed files with 10 additions and 28 deletions
Showing only changes of commit 91b662925b - Show all commits

View File

@ -18,13 +18,11 @@
#endif
#include <vector>
#include <sys/stat.h>
#include <cassert>
vnapdv marked this conversation as resolved
Review

Please run make format when push and configure clang-format to your IDE. This file has several issues where it doesn't match our code style.

Please run make format when push and configure clang-format to your IDE. This file has several issues where it doesn't match our code style.
Review

Please run make format when push and configure clang-format to your IDE. This file has several issues where it doesn't match our code style.

I checked blender's clang-format. It seems that there was a slight conflict in the settings of visual studio. I will make sure to check again with visual code.

> Please run make format when push and configure clang-format to your IDE. This file has several issues where it doesn't match our code style. I checked blender's clang-format. It seems that there was a slight conflict in the settings of visual studio. I will make sure to check again with visual code.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <sstream>
vnapdv marked this conversation as resolved Outdated

System includes should use <>

System includes should use `<>`
/* Set to 0 to allow devices that do not have the required features.
* This allows development on OSX until we really needs these features. */
@ -81,18 +79,6 @@ static const char *vulkan_error_as_string(VkResult result)
return "Unknown Error";
}
}
static bool vklayer_config_exist(const char* vk_extension_config)
{
const char *ev_val = getenv("VK_LAYER_PATH");
if (ev_val == nullptr) {
return false;
}
std::stringstream filename;
filename << ev_val;
filename << "/" << vk_extension_config;
struct stat buffer;
return (stat(filename.str().c_str(), &buffer) == 0);
}
vnapdv marked this conversation as resolved Outdated

vklayer_config_exists might be a better name.

`vklayer_config_exists` might be a better name.
#define __STR(A) "" #A
#define VK_CHECK(__expression) \
@ -415,20 +401,16 @@ static bool checkLayerSupport(vector<VkLayerProperties> &layers_available, const
static void enableLayer(vector<VkLayerProperties> &layers_available,
vector<const char *> &layers_enabled,
const char* layer_name,
const bool warning)
const char *layer_name,
const bool debug)
{
if (strcmp(layer_name, "VK_LAYER_KHRONOS_validation") == 0) {
if (checkLayerSupport(layers_available, layer_name) &&
vklayer_config_exist("VkLayer_khronos_validation.json")) {
layers_enabled.push_back(layer_name);
}
else if (warning) {
fprintf(stderr,"Warning: Layer requested, but not supported by the platform. [%s]\n",layer_name);
}
if (checkLayerSupport(layers_available, layer_name)) {
layers_enabled.push_back(layer_name);
}
else if (debug) {
fprintf(
stderr, "Warning: Layer requested, but not supported by the platform. [%s]\n", layer_name);
}
}
static bool device_extensions_support(VkPhysicalDevice device, vector<const char *> required_exts)
@ -882,7 +864,7 @@ GHOST_TSuccess GHOST_ContextVK::initializeDrawingContext()
vector<const char *> layers_enabled;
if (m_debug) {
enableLayer(layers_available, layers_enabled, "VK_LAYER_KHRONOS_validation",true);
enableLayer(layers_available, layers_enabled, "VK_LAYER_KHRONOS_validation", m_debug);
}
vector<const char *> extensions_device;