Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision 6493e439340a5e8c494580409ac38e03e31f7289)
+++ vulkan-game.cpp	(revision 6a39266776a43e2a3cce6d759bda1eb046f6de0b)
@@ -1,6 +1,3 @@
 #include "vulkan-game.hpp"
-
-#include "IMGUI/imgui_impl_sdl.h"
-#include "IMGUI/imgui_impl_vulkan.h"
 
 #include <array>
@@ -9,4 +6,7 @@
 #include <set>
 #include <stdexcept>
+
+#include "IMGUI/imgui_impl_sdl.h"
+#include "IMGUI/imgui_impl_vulkan.h"
 
 #include "logger.hpp"
@@ -1368,6 +1368,5 @@
 }
 
-bool VulkanGame::isDeviceSuitable(VkPhysicalDevice physicalDevice,
-      const vector<const char*>& deviceExtensions) {
+bool VulkanGame::isDeviceSuitable(VkPhysicalDevice physicalDevice, const vector<const char*>& deviceExtensions) {
    VkPhysicalDeviceProperties deviceProperties;
    vkGetPhysicalDeviceProperties(physicalDevice, &deviceProperties);
@@ -1393,4 +1392,11 @@
       const vector<const char*>& deviceExtensions) {
    QueueFamilyIndices indices = VulkanUtils::findQueueFamilies(physicalDevice, surface);
+
+   if (!indices.isComplete()) {
+      throw runtime_error("failed to find required queue families!");
+   }
+
+   // TODO: Using separate graphics and present queues currently works, but I should verify that I'm
+   // using them correctly to get the most benefit out of separate queues
 
    vector<VkDeviceQueueCreateInfo> queueCreateInfoList;
@@ -1401,6 +1407,6 @@
       VkDeviceQueueCreateInfo queueCreateInfo = {};
       queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
+      queueCreateInfo.queueCount = 1;
       queueCreateInfo.queueFamilyIndex = queueFamily;
-      queueCreateInfo.queueCount = 1;
       queueCreateInfo.pQueuePriorities = &queuePriority;
 
Index: vulkan-utils.cpp
===================================================================
--- vulkan-utils.cpp	(revision 6493e439340a5e8c494580409ac38e03e31f7289)
+++ vulkan-utils.cpp	(revision 6a39266776a43e2a3cce6d759bda1eb046f6de0b)
@@ -60,4 +60,5 @@
 }
 
+// TODO: Change this to prefer one queue that supports both graphics and presentation
 QueueFamilyIndices VulkanUtils::findQueueFamilies(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface) {
    QueueFamilyIndices indices;
@@ -71,17 +72,19 @@
    int i = 0;
    for (const auto& queueFamily : queueFamilies) {
-      if (queueFamily.queueCount > 0 && queueFamily.queueFlags & VK_QUEUE_GRAPHICS_BIT) {
-         indices.graphicsFamily = i;
-      }
-
-      VkBool32 presentSupport = false;
-      vkGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, i, surface, &presentSupport);
-
-      if (queueFamily.queueCount > 0 && presentSupport) {
-         indices.presentFamily = i;
-      }
-
-      if (indices.isComplete()) {
-         break;
+      if (queueFamily.queueCount > 0) {
+         if (queueFamily.queueFlags & VK_QUEUE_GRAPHICS_BIT) {
+            indices.graphicsFamily = i;
+         }
+
+         VkBool32 presentSupport = false;
+         vkGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, i, surface, &presentSupport);
+
+         if (presentSupport) {
+            indices.presentFamily = i;
+         }
+
+         if (indices.isComplete()) {
+            break;
+         }
       }
 
