|
|
@@ -111,10 +111,9 @@ void RemoveUnavailableLayers(const vk::InstanceDispatch& dld, std::vector<const
|
|
|
}
|
|
|
} // Anonymous namespace
|
|
|
|
|
|
-std::pair<vk::Instance, u32> CreateInstance(const Common::DynamicLibrary& library,
|
|
|
- vk::InstanceDispatch& dld,
|
|
|
- Core::Frontend::WindowSystemType window_type,
|
|
|
- bool enable_debug_utils, bool enable_layers) {
|
|
|
+vk::Instance CreateInstance(const Common::DynamicLibrary& library, vk::InstanceDispatch& dld,
|
|
|
+ u32 required_version, Core::Frontend::WindowSystemType window_type,
|
|
|
+ bool enable_debug_utils, bool enable_layers) {
|
|
|
if (!library.IsOpen()) {
|
|
|
LOG_ERROR(Render_Vulkan, "Vulkan library not available");
|
|
|
throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED);
|
|
|
@@ -134,15 +133,19 @@ std::pair<vk::Instance, u32> CreateInstance(const Common::DynamicLibrary& librar
|
|
|
std::vector<const char*> layers = Layers(enable_layers);
|
|
|
RemoveUnavailableLayers(dld, layers);
|
|
|
|
|
|
- // Limit the maximum version of Vulkan to avoid using untested version.
|
|
|
- const u32 version = std::min(vk::AvailableVersion(dld), VK_API_VERSION_1_1);
|
|
|
-
|
|
|
- vk::Instance instance = vk::Instance::Create(version, layers, extensions, dld);
|
|
|
+ const u32 available_version = vk::AvailableVersion(dld);
|
|
|
+ if (available_version < required_version) {
|
|
|
+ LOG_ERROR(Render_Vulkan, "Vulkan {}.{} is not supported, {}.{} is required",
|
|
|
+ VK_VERSION_MAJOR(available_version), VK_VERSION_MINOR(available_version),
|
|
|
+ VK_VERSION_MAJOR(required_version), VK_VERSION_MINOR(required_version));
|
|
|
+ throw vk::Exception(VK_ERROR_INCOMPATIBLE_DRIVER);
|
|
|
+ }
|
|
|
+ vk::Instance instance = vk::Instance::Create(required_version, layers, extensions, dld);
|
|
|
if (!vk::Load(*instance, dld)) {
|
|
|
LOG_ERROR(Render_Vulkan, "Failed to load Vulkan instance function pointers");
|
|
|
throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED);
|
|
|
}
|
|
|
- return std::make_pair(std::move(instance), version);
|
|
|
+ return instance;
|
|
|
}
|
|
|
|
|
|
} // namespace Vulkan
|