@@ -44,21 +44,6 @@ ShaderDebugPrintf::ShaderDebugPrintf()
44
44
title = " Shader debugprintf" ;
45
45
46
46
add_device_extension (VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME);
47
-
48
- // If layer settings available, use it to configure validation layer for debugPrintfEXT
49
- add_instance_extension (VK_EXT_LAYER_SETTINGS_EXTENSION_NAME, /* optional*/ true );
50
-
51
- VkLayerSettingEXT layerSetting;
52
- layerSetting.pLayerName = " VK_LAYER_KHRONOS_validation" ;
53
- layerSetting.pSettingName = " enables" ;
54
- layerSetting.type = VK_LAYER_SETTING_TYPE_STRING_EXT;
55
- layerSetting.valueCount = 1 ;
56
-
57
- // Make this static so layer setting reference remains valid after leaving constructor scope
58
- static const char *layerEnables = " VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT" ;
59
- layerSetting.pValues = &layerEnables;
60
-
61
- add_layer_setting (layerSetting);
62
47
}
63
48
64
49
ShaderDebugPrintf::~ShaderDebugPrintf ()
@@ -465,14 +450,27 @@ std::unique_ptr<vkb::Instance> ShaderDebugPrintf::create_instance(bool headless)
465
450
{
466
451
set_api_version (debugprintf_api_version);
467
452
468
- // Run standard create_instance() from framework (with set_api_version and layer settings support) and return
453
+ // Since layer settings extension is available, use it to configure validation layer for debugPrintfEXT
454
+ add_instance_extension (VK_EXT_LAYER_SETTINGS_EXTENSION_NAME, /* optional*/ false );
455
+
456
+ VkLayerSettingEXT layerSetting;
457
+ layerSetting.pLayerName = " VK_LAYER_KHRONOS_validation" ;
458
+ layerSetting.pSettingName = " enables" ;
459
+ layerSetting.type = VK_LAYER_SETTING_TYPE_STRING_EXT;
460
+ layerSetting.valueCount = 1 ;
461
+
462
+ // Make this static so layer setting reference remains valid after leaving constructor scope
463
+ static const char *layerEnables = " VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT" ;
464
+ layerSetting.pValues = &layerEnables;
465
+
466
+ add_layer_setting (layerSetting);
467
+
468
+ // Run standard create_instance() from framework with set_api_version(), add_instance_extension(), and add_layer_setting() support
469
469
return VulkanSample::create_instance (headless);
470
470
}
471
471
472
472
// Run remainder of this custom create_instance() (without layer settings support) and return
473
473
std::vector<const char *> enabled_extensions;
474
- enabled_extensions.push_back (VK_KHR_SURFACE_EXTENSION_NAME);
475
-
476
474
for (const char *extension_name : window->get_required_surface_extensions ())
477
475
{
478
476
enabled_extensions.push_back (extension_name);
@@ -496,6 +494,9 @@ std::unique_ptr<vkb::Instance> ShaderDebugPrintf::create_instance(bool headless)
496
494
app_info.pEngineName = " Vulkan Samples" ;
497
495
app_info.apiVersion = debugprintf_api_version;
498
496
497
+ // Legacy extension for configuring validation layer features using VkValidationFeaturesEXT
498
+ enabled_extensions.push_back (VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME);
499
+
499
500
// Shader printf is a feature of the validation layers that needs to be enabled
500
501
std::vector<VkValidationFeatureEnableEXT> validation_feature_enables = {VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT};
501
502
0 commit comments