summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_vulkan/renderer_vulkan.cpp15
-rw-r--r--src/video_core/renderer_vulkan/renderer_vulkan.h2
-rw-r--r--src/video_core/renderer_vulkan/vk_device.cpp12
-rw-r--r--src/video_core/renderer_vulkan/vk_device.h3
-rw-r--r--src/video_core/vulkan_common/vulkan_wrapper.cpp7
-rw-r--r--src/video_core/vulkan_common/vulkan_wrapper.h2
6 files changed, 10 insertions, 31 deletions
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp
index f64318f25..fdce11b06 100644
--- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp
+++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp
@@ -133,10 +133,8 @@ bool RendererVulkan::Init() try {
133 debug_callback = CreateDebugCallback(instance); 133 debug_callback = CreateDebugCallback(instance);
134 } 134 }
135 surface = CreateSurface(instance, render_window); 135 surface = CreateSurface(instance, render_window);
136 if (!PickDevices()) {
137 return false;
138 }
139 136
137 InitializeDevice();
140 Report(); 138 Report();
141 139
142 memory_manager = std::make_unique<VKMemoryManager>(*device); 140 memory_manager = std::make_unique<VKMemoryManager>(*device);
@@ -178,21 +176,16 @@ void RendererVulkan::ShutDown() {
178 device.reset(); 176 device.reset();
179} 177}
180 178
181bool RendererVulkan::PickDevices() { 179void RendererVulkan::InitializeDevice() {
182 const std::vector<VkPhysicalDevice> devices = instance.EnumeratePhysicalDevices(); 180 const std::vector<VkPhysicalDevice> devices = instance.EnumeratePhysicalDevices();
183 const s32 device_index = Settings::values.vulkan_device.GetValue(); 181 const s32 device_index = Settings::values.vulkan_device.GetValue();
184 if (device_index < 0 || device_index >= static_cast<s32>(devices.size())) { 182 if (device_index < 0 || device_index >= static_cast<s32>(devices.size())) {
185 LOG_ERROR(Render_Vulkan, "Invalid device index {}!", device_index); 183 LOG_ERROR(Render_Vulkan, "Invalid device index {}!", device_index);
186 return false; 184 throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED);
187 }
188 const vk::PhysicalDevice physical_device(devices[static_cast<std::size_t>(device_index)], dld);
189 if (!VKDevice::IsSuitable(physical_device, *surface)) {
190 return false;
191 } 185 }
192 186 const vk::PhysicalDevice physical_device(devices[static_cast<size_t>(device_index)], dld);
193 device = 187 device =
194 std::make_unique<VKDevice>(*instance, instance_version, physical_device, *surface, dld); 188 std::make_unique<VKDevice>(*instance, instance_version, physical_device, *surface, dld);
195 return device->Create();
196} 189}
197 190
198void RendererVulkan::Report() const { 191void RendererVulkan::Report() const {
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.h b/src/video_core/renderer_vulkan/renderer_vulkan.h
index 7c5ce1da4..a05b3bd38 100644
--- a/src/video_core/renderer_vulkan/renderer_vulkan.h
+++ b/src/video_core/renderer_vulkan/renderer_vulkan.h
@@ -56,7 +56,7 @@ public:
56 static std::vector<std::string> EnumerateDevices(); 56 static std::vector<std::string> EnumerateDevices();
57 57
58private: 58private:
59 bool PickDevices(); 59 void InitializeDevice();
60 60
61 void Report() const; 61 void Report() const;
62 62
diff --git a/src/video_core/renderer_vulkan/vk_device.cpp b/src/video_core/renderer_vulkan/vk_device.cpp
index f3dd6eae1..831603e87 100644
--- a/src/video_core/renderer_vulkan/vk_device.cpp
+++ b/src/video_core/renderer_vulkan/vk_device.cpp
@@ -212,11 +212,7 @@ VKDevice::VKDevice(VkInstance instance_, u32 instance_version_, vk::PhysicalDevi
212 instance_version{instance_version_}, format_properties{GetFormatProperties(physical, dld)} { 212 instance_version{instance_version_}, format_properties{GetFormatProperties(physical, dld)} {
213 SetupFamilies(surface); 213 SetupFamilies(surface);
214 SetupFeatures(); 214 SetupFeatures();
215}
216
217VKDevice::~VKDevice() = default;
218 215
219bool VKDevice::Create() {
220 const auto queue_cis = GetDeviceQueueCreateInfos(); 216 const auto queue_cis = GetDeviceQueueCreateInfos();
221 const std::vector extensions = LoadExtensions(); 217 const std::vector extensions = LoadExtensions();
222 218
@@ -426,12 +422,7 @@ bool VKDevice::Create() {
426 }; 422 };
427 first_next = &diagnostics_nv; 423 first_next = &diagnostics_nv;
428 } 424 }
429
430 logical = vk::Device::Create(physical, queue_cis, extensions, first_next, dld); 425 logical = vk::Device::Create(physical, queue_cis, extensions, first_next, dld);
431 if (!logical) {
432 LOG_ERROR(Render_Vulkan, "Failed to create logical device");
433 return false;
434 }
435 426
436 CollectTelemetryParameters(); 427 CollectTelemetryParameters();
437 CollectToolingInfo(); 428 CollectToolingInfo();
@@ -455,9 +446,10 @@ bool VKDevice::Create() {
455 present_queue = logical.GetQueue(present_family); 446 present_queue = logical.GetQueue(present_family);
456 447
457 use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue(); 448 use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue();
458 return true;
459} 449}
460 450
451VKDevice::~VKDevice() = default;
452
461VkFormat VKDevice::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage, 453VkFormat VKDevice::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage,
462 FormatType format_type) const { 454 FormatType format_type) const {
463 if (IsFormatSupported(wanted_format, wanted_usage, format_type)) { 455 if (IsFormatSupported(wanted_format, wanted_usage, format_type)) {
diff --git a/src/video_core/renderer_vulkan/vk_device.h b/src/video_core/renderer_vulkan/vk_device.h
index 9673f47c7..67617f86d 100644
--- a/src/video_core/renderer_vulkan/vk_device.h
+++ b/src/video_core/renderer_vulkan/vk_device.h
@@ -28,9 +28,6 @@ public:
28 VkSurfaceKHR surface, const vk::InstanceDispatch& dld); 28 VkSurfaceKHR surface, const vk::InstanceDispatch& dld);
29 ~VKDevice(); 29 ~VKDevice();
30 30
31 /// Initializes the device. Returns true on success.
32 bool Create();
33
34 /** 31 /**
35 * Returns a format supported by the device for the passed requeriments. 32 * Returns a format supported by the device for the passed requeriments.
36 * @param wanted_format The ideal format to be returned. It may not be the returned format. 33 * @param wanted_format The ideal format to be returned. It may not be the returned format.
diff --git a/src/video_core/vulkan_common/vulkan_wrapper.cpp b/src/video_core/vulkan_common/vulkan_wrapper.cpp
index 8698c3f92..5e15ad607 100644
--- a/src/video_core/vulkan_common/vulkan_wrapper.cpp
+++ b/src/video_core/vulkan_common/vulkan_wrapper.cpp
@@ -580,7 +580,7 @@ void Semaphore::SetObjectNameEXT(const char* name) const {
580 580
581Device Device::Create(VkPhysicalDevice physical_device, Span<VkDeviceQueueCreateInfo> queues_ci, 581Device Device::Create(VkPhysicalDevice physical_device, Span<VkDeviceQueueCreateInfo> queues_ci,
582 Span<const char*> enabled_extensions, const void* next, 582 Span<const char*> enabled_extensions, const void* next,
583 DeviceDispatch& dispatch) noexcept { 583 DeviceDispatch& dispatch) {
584 const VkDeviceCreateInfo ci{ 584 const VkDeviceCreateInfo ci{
585 .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, 585 .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
586 .pNext = next, 586 .pNext = next,
@@ -593,11 +593,8 @@ Device Device::Create(VkPhysicalDevice physical_device, Span<VkDeviceQueueCreate
593 .ppEnabledExtensionNames = enabled_extensions.data(), 593 .ppEnabledExtensionNames = enabled_extensions.data(),
594 .pEnabledFeatures = nullptr, 594 .pEnabledFeatures = nullptr,
595 }; 595 };
596
597 VkDevice device; 596 VkDevice device;
598 if (dispatch.vkCreateDevice(physical_device, &ci, nullptr, &device) != VK_SUCCESS) { 597 Check(dispatch.vkCreateDevice(physical_device, &ci, nullptr, &device));
599 return {};
600 }
601 Load(device, dispatch); 598 Load(device, dispatch);
602 return Device(device, dispatch); 599 return Device(device, dispatch);
603} 600}
diff --git a/src/video_core/vulkan_common/vulkan_wrapper.h b/src/video_core/vulkan_common/vulkan_wrapper.h
index af3083c84..912cab46c 100644
--- a/src/video_core/vulkan_common/vulkan_wrapper.h
+++ b/src/video_core/vulkan_common/vulkan_wrapper.h
@@ -796,7 +796,7 @@ class Device : public Handle<VkDevice, NoOwner, DeviceDispatch> {
796public: 796public:
797 static Device Create(VkPhysicalDevice physical_device, Span<VkDeviceQueueCreateInfo> queues_ci, 797 static Device Create(VkPhysicalDevice physical_device, Span<VkDeviceQueueCreateInfo> queues_ci,
798 Span<const char*> enabled_extensions, const void* next, 798 Span<const char*> enabled_extensions, const void* next,
799 DeviceDispatch& dispatch) noexcept; 799 DeviceDispatch& dispatch);
800 800
801 Queue GetQueue(u32 family_index) const noexcept; 801 Queue GetQueue(u32 family_index) const noexcept;
802 802