vkd3d: Load VK_LAYER_KHRONOS_validation if we enable debug mode.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2020-07-30 15:27:35 +02:00
parent 9e8b2a22ed
commit 9073579b7a
3 changed files with 29 additions and 0 deletions

View File

@ -528,6 +528,33 @@ static HRESULT vkd3d_instance_init(struct vkd3d_instance *instance,
instance_info.ppEnabledExtensionNames = extensions;
vkd3d_free(user_extension_supported);
if (instance->config_flags & VKD3D_CONFIG_FLAG_VULKAN_DEBUG)
{
static const char *debug_layer_name = "VK_LAYER_KHRONOS_validation";
VkLayerProperties *layers = NULL;
uint32_t layer_count, i;
if (vk_global_procs->vkEnumerateInstanceLayerProperties(&layer_count, NULL) == VK_SUCCESS &&
layer_count &&
(layers = vkd3d_malloc(layer_count * sizeof(*layers))) &&
vk_global_procs->vkEnumerateInstanceLayerProperties(&layer_count, layers) == VK_SUCCESS)
{
for (i = 0; i < layer_count; i++)
{
if (strcmp(layers[i].layerName, debug_layer_name) == 0)
{
instance_info.enabledLayerCount = 1;
instance_info.ppEnabledLayerNames = &debug_layer_name;
break;
}
}
}
if (instance_info.enabledLayerCount == 0)
ERR("Failed to enumerate instance layers, will not use VK_LAYER_KHRONOS_validation!\n");
vkd3d_free(layers);
}
vr = vk_global_procs->vkCreateInstance(&instance_info, NULL, &vk_instance);
vkd3d_free((void *)extensions);
if (vr < 0)

View File

@ -950,6 +950,7 @@ HRESULT vkd3d_load_vk_global_procs(struct vkd3d_vk_global_procs *procs,
LOAD_GLOBAL_PFN(vkCreateInstance)
LOAD_GLOBAL_PFN(vkEnumerateInstanceExtensionProperties)
LOAD_GLOBAL_PFN(vkEnumerateInstanceLayerProperties)
MAYBE_LOAD_GLOBAL_PFN(vkEnumerateInstanceVersion)
TRACE("Loaded global Vulkan procs.\n");

View File

@ -80,6 +80,7 @@ struct vkd3d_vk_global_procs
PFN_vkCreateInstance vkCreateInstance;
PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion;
PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties;
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
};