@@ -44,6 +44,8 @@ const char* const kRequiredValidationLayers[] = {
44
44
const size_t kNumberOfRequiredValidationLayers =
45
45
sizeof (kRequiredValidationLayers ) / sizeof (const char *);
46
46
47
+ const char kPipelineRuntimeLayerName [] = " VK_LAYER_STADIA_pipeline_runtime" ;
48
+
47
49
const char kVariablePointers [] = " VariablePointerFeatures.variablePointers" ;
48
50
const char kVariablePointersStorageBuffer [] =
49
51
" VariablePointerFeatures.variablePointersStorageBuffer" ;
@@ -672,7 +674,8 @@ amber::Result ConfigHelperVulkan::CreateVulkanInstance(
672
674
uint32_t engine_major,
673
675
uint32_t engine_minor,
674
676
std::vector<std::string> required_extensions,
675
- bool disable_validation_layer) {
677
+ bool disable_validation_layer,
678
+ bool enable_pipeline_runtime_layer) {
676
679
VkApplicationInfo app_info = VkApplicationInfo ();
677
680
app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
678
681
@@ -685,19 +688,29 @@ amber::Result ConfigHelperVulkan::CreateVulkanInstance(
685
688
instance_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
686
689
instance_info.pApplicationInfo = &app_info;
687
690
691
+ std::vector<const char *> layer_names;
692
+
688
693
if (!disable_validation_layer) {
689
694
if (!AreAllValidationLayersSupported ())
690
695
return amber::Result (" Sample: not all validation layers are supported" );
691
696
if (!AreAllValidationExtensionsSupported ()) {
692
697
return amber::Result (
693
698
" Sample: extensions of validation layers are not supported" );
694
699
}
695
- instance_info. enabledLayerCount = kNumberOfRequiredValidationLayers ;
696
- instance_info. ppEnabledLayerNames = kRequiredValidationLayers ;
697
-
700
+ for ( size_t i = 0 ; i < kNumberOfRequiredValidationLayers ; ++i) {
701
+ layer_names. push_back ( kRequiredValidationLayers [i]) ;
702
+ }
698
703
required_extensions.push_back (kExtensionForValidationLayer );
699
704
}
700
705
706
+ if (enable_pipeline_runtime_layer) {
707
+ layer_names.push_back (kPipelineRuntimeLayerName );
708
+ }
709
+
710
+ instance_info.enabledLayerCount = static_cast <uint32_t >(layer_names.size ());
711
+ instance_info.ppEnabledLayerNames =
712
+ instance_info.enabledLayerCount > 0 ? layer_names.data () : nullptr ;
713
+
701
714
available_instance_extensions_ = GetAvailableInstanceExtensions ();
702
715
if (!required_extensions.empty ()) {
703
716
if (!AreAllExtensionsSupported (available_instance_extensions_,
@@ -729,9 +742,12 @@ amber::Result ConfigHelperVulkan::CreateVulkanInstance(
729
742
static_cast <uint32_t >(required_extensions_in_char.size ());
730
743
instance_info.ppEnabledExtensionNames = required_extensions_in_char.data ();
731
744
732
- if (vkCreateInstance (&instance_info, nullptr , &vulkan_instance_) !=
733
- VK_SUCCESS) {
734
- return amber::Result (" Unable to create vulkan instance" );
745
+ const VkResult result =
746
+ vkCreateInstance (&instance_info, nullptr , &vulkan_instance_);
747
+ if (result != VK_SUCCESS) {
748
+ std::stringstream error_message;
749
+ error_message << " Unable to create vulkan instance (code=" << result << " )" ;
750
+ return amber::Result (error_message.str ());
735
751
}
736
752
return {};
737
753
}
@@ -805,7 +821,7 @@ amber::Result ConfigHelperVulkan::CheckVulkanPhysicalDeviceRequirements(
805
821
: nullptr ;
806
822
807
823
shader_subgroup_extended_types_features.sType =
808
- // NOLINTNEXTLINE(whitespace/line_length)
824
+ // NOLINTNEXTLINE(whitespace/line_length)
809
825
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES;
810
826
shader_subgroup_extended_types_features.pNext = &variable_pointers_features;
811
827
@@ -1227,11 +1243,12 @@ amber::Result ConfigHelperVulkan::CreateConfig(
1227
1243
const std::vector<std::string>& required_instance_extensions,
1228
1244
const std::vector<std::string>& required_device_extensions,
1229
1245
bool disable_validation_layer,
1246
+ bool enable_pipeline_runtime_layer,
1230
1247
bool show_version_info,
1231
1248
std::unique_ptr<amber::EngineConfig>* cfg_holder) {
1232
- amber::Result r = CreateVulkanInstance (engine_major, engine_minor,
1233
- required_instance_extensions,
1234
- disable_validation_layer);
1249
+ amber::Result r = CreateVulkanInstance (
1250
+ engine_major, engine_minor, required_instance_extensions,
1251
+ disable_validation_layer, enable_pipeline_runtime_layer );
1235
1252
if (!r.IsSuccess ())
1236
1253
return r;
1237
1254
0 commit comments