|
@@ -10,6 +10,7 @@
|
|
|
#include <vector>
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include "common/common_types.h"
|
|
#include "common/common_types.h"
|
|
|
|
|
+#include "common/logging/log.h"
|
|
|
|
|
|
|
|
#include "video_core/renderer_vulkan/wrapper.h"
|
|
#include "video_core/renderer_vulkan/wrapper.h"
|
|
|
|
|
|
|
@@ -375,18 +376,17 @@ VkResult Free(VkDevice device, VkCommandPool handle, Span<VkCommandBuffer> buffe
|
|
|
return VK_SUCCESS;
|
|
return VK_SUCCESS;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-Instance Instance::Create(Span<const char*> layers, Span<const char*> extensions,
|
|
|
|
|
|
|
+Instance Instance::Create(u32 version, Span<const char*> layers, Span<const char*> extensions,
|
|
|
InstanceDispatch& dld) noexcept {
|
|
InstanceDispatch& dld) noexcept {
|
|
|
- static constexpr VkApplicationInfo application_info{
|
|
|
|
|
|
|
+ const VkApplicationInfo application_info{
|
|
|
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
|
|
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
|
|
|
.pNext = nullptr,
|
|
.pNext = nullptr,
|
|
|
.pApplicationName = "yuzu Emulator",
|
|
.pApplicationName = "yuzu Emulator",
|
|
|
.applicationVersion = VK_MAKE_VERSION(0, 1, 0),
|
|
.applicationVersion = VK_MAKE_VERSION(0, 1, 0),
|
|
|
.pEngineName = "yuzu Emulator",
|
|
.pEngineName = "yuzu Emulator",
|
|
|
.engineVersion = VK_MAKE_VERSION(0, 1, 0),
|
|
.engineVersion = VK_MAKE_VERSION(0, 1, 0),
|
|
|
- .apiVersion = VK_API_VERSION_1_1,
|
|
|
|
|
|
|
+ .apiVersion = version,
|
|
|
};
|
|
};
|
|
|
-
|
|
|
|
|
const VkInstanceCreateInfo ci{
|
|
const VkInstanceCreateInfo ci{
|
|
|
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
|
|
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
|
|
|
.pNext = nullptr,
|
|
.pNext = nullptr,
|
|
@@ -775,6 +775,21 @@ VkPhysicalDeviceMemoryProperties PhysicalDevice::GetMemoryProperties() const noe
|
|
|
return properties;
|
|
return properties;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+u32 AvailableVersion(const InstanceDispatch& dld) noexcept {
|
|
|
|
|
+ PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion;
|
|
|
|
|
+ if (!Proc(vkEnumerateInstanceVersion, dld, "vkEnumerateInstanceVersion")) {
|
|
|
|
|
+ // If the procedure is not found, Vulkan 1.0 is assumed
|
|
|
|
|
+ return VK_API_VERSION_1_0;
|
|
|
|
|
+ }
|
|
|
|
|
+ u32 version;
|
|
|
|
|
+ if (const VkResult result = vkEnumerateInstanceVersion(&version); result != VK_SUCCESS) {
|
|
|
|
|
+ LOG_ERROR(Render_Vulkan, "vkEnumerateInstanceVersion returned {}, assuming Vulkan 1.1",
|
|
|
|
|
+ ToString(result));
|
|
|
|
|
+ return VK_API_VERSION_1_1;
|
|
|
|
|
+ }
|
|
|
|
|
+ return version;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
std::optional<std::vector<VkExtensionProperties>> EnumerateInstanceExtensionProperties(
|
|
std::optional<std::vector<VkExtensionProperties>> EnumerateInstanceExtensionProperties(
|
|
|
const InstanceDispatch& dld) {
|
|
const InstanceDispatch& dld) {
|
|
|
u32 num;
|
|
u32 num;
|