diff --git a/liblava/base/device.cpp b/liblava/base/device.cpp
index 9b7861b6aa5f8ac0686128e33c79d86968370c7c..2d2d15f29d6ba42f5eb995ff68a94f469d08ce2a 100644
--- a/liblava/base/device.cpp
+++ b/liblava/base/device.cpp
@@ -191,7 +191,12 @@ namespace lava {
     }
 
     bool device::surface_supported(VkSurfaceKHR surface) const {
-        return physical_device->surface_supported(get_graphics_queue().family, surface);
+        for (auto& queue : queue_list) {
+            if (physical_device->surface_supported(queue.family, surface))
+                return true;
+        }
+
+        return false;
     }
 
     VkPhysicalDevice device::get_vk_physical_device() const {
diff --git a/liblava/base/queue.hpp b/liblava/base/queue.hpp
index 9882e65fab18dd8f13891800e9c3ba355e3b262b..e9c2e8b36da5d80e1fa0b57ef685db46bf9c63dd 100644
--- a/liblava/base/queue.hpp
+++ b/liblava/base/queue.hpp
@@ -18,6 +18,10 @@ namespace lava {
         index family = 0;
         r32 priority = 1.f;
 
+        bool valid() const {
+            return vk_queue != nullptr;
+        }
+
         bool operator<(queue const& other) const {
             return priority < other.priority;
         }
diff --git a/liblava/frame/renderer.cpp b/liblava/frame/renderer.cpp
index 5277313b37a66be0d7c29ff3202d226b3bcec3fc..03725d8f236a6eddee9cc3a772b18345f08855d3 100644
--- a/liblava/frame/renderer.cpp
+++ b/liblava/frame/renderer.cpp
@@ -8,10 +8,19 @@
 namespace lava {
 
     bool renderer::create(swapchain* t) {
+        for (auto& queue : t->get_device()->get_graphics_queues()) {
+            if (t->surface_supported(queue.family)) {
+                graphics_queue = queue;
+                break;
+            }
+        }
+
+        if (!graphics_queue.valid())
+            return false;
+
         target = t;
         device = target->get_device();
 
-        graphics_queue = device->get_graphics_queue();
         queued_frames = target->get_backbuffer_count();
 
         fences.resize(queued_frames);
diff --git a/liblava/frame/swapchain.cpp b/liblava/frame/swapchain.cpp
index 25f1d54dff503a01ac55fd6e2ab253e6cb8b6657..16b80e855c210b44678c9cb9afdfda3529b44a94 100644
--- a/liblava/frame/swapchain.cpp
+++ b/liblava/frame/swapchain.cpp
@@ -226,4 +226,8 @@ namespace lava {
         remove(callbacks, cb);
     }
 
+    bool swapchain::surface_supported(index queue_family) const {
+        return device->get_physical_device()->surface_supported(queue_family, surface);
+    }
+
 } // namespace lava
diff --git a/liblava/frame/swapchain.hpp b/liblava/frame/swapchain.hpp
index cd59d3cb577214c4257c2f121ddf011b73854e9a..8b2abcd6cb8f5105433dd87f7c81cc59d82ff03d 100644
--- a/liblava/frame/swapchain.hpp
+++ b/liblava/frame/swapchain.hpp
@@ -61,6 +61,8 @@ namespace lava {
             return v_sync_active;
         }
 
+        bool surface_supported(index queue_family) const;
+
     private:
         void set_surface_format();