summaryrefslogtreecommitdiffstats
path: root/src/video_core/vulkan_common/vulkan_instance.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2020-12-30 08:58:38 +0100
committerReinUsesLisp <reinuseslisp@airmail.cc>2020-12-31 06:07:34 +0100
commitcdbee27692d73046cecf56fdea1c90f72ebbc0ce (patch)
treee360cc51563b7bee53e67587a421a1d15be3221e /src/video_core/vulkan_common/vulkan_instance.cpp
parentvk_device: Use an array to report lacking device limits (diff)
downloadyuzu-cdbee27692d73046cecf56fdea1c90f72ebbc0ce.tar
yuzu-cdbee27692d73046cecf56fdea1c90f72ebbc0ce.tar.gz
yuzu-cdbee27692d73046cecf56fdea1c90f72ebbc0ce.tar.bz2
yuzu-cdbee27692d73046cecf56fdea1c90f72ebbc0ce.tar.lz
yuzu-cdbee27692d73046cecf56fdea1c90f72ebbc0ce.tar.xz
yuzu-cdbee27692d73046cecf56fdea1c90f72ebbc0ce.tar.zst
yuzu-cdbee27692d73046cecf56fdea1c90f72ebbc0ce.zip
Diffstat (limited to 'src/video_core/vulkan_common/vulkan_instance.cpp')
-rw-r--r--src/video_core/vulkan_common/vulkan_instance.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/video_core/vulkan_common/vulkan_instance.cpp b/src/video_core/vulkan_common/vulkan_instance.cpp
index ee46fc6cc..889ecda0c 100644
--- a/src/video_core/vulkan_common/vulkan_instance.cpp
+++ b/src/video_core/vulkan_common/vulkan_instance.cpp
@@ -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