Skip to content

Commit 3ec69d2

Browse files
committed
Remove surface creation from ZVulkan
1 parent 319f2ce commit 3ec69d2

File tree

8 files changed

+34
-271
lines changed

8 files changed

+34
-271
lines changed

CMakeLists.txt

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
11
cmake_minimum_required(VERSION 3.11)
22
project(zvulkan)
33

4-
option( VULKAN_USE_XLIB "Use Vulkan xlib (X11) WSI integration" ON )
5-
option( VULKAN_USE_WAYLAND "Use Vulkan Wayland WSI integration" OFF )
6-
7-
if ( VULKAN_USE_XLIB )
8-
add_definitions( -DVULKAN_USE_XLIB=1 )
9-
else()
10-
if (VULKAN_USE_WAYLAND)
11-
add_definitions( -DVULKAN_USE_WAYLAND=1 )
12-
endif()
13-
endif()
14-
154
set(ZVULKAN_SOURCES
165
src/vulkanbuilders.cpp
176
src/vulkandevice.cpp

example/example.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,23 @@ int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmd
6565

6666
// Create vulkan instance
6767
auto instance = VulkanInstanceBuilder()
68-
.RequireWin32Surface()
68+
.RequireExtension(VK_KHR_SURFACE_EXTENSION_NAME)
69+
.RequireExtension(VK_KHR_WIN32_SURFACE_EXTENSION_NAME)
6970
.DebugLayer(false)
7071
.Create();
7172

7273
// Create a surface for our window
73-
auto surface = VulkanSurfaceBuilder()
74-
.Win32Window(hwnd)
75-
.Create(instance);
74+
75+
VkWin32SurfaceCreateInfoKHR createInfo = { VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR };
76+
createInfo.hwnd = hwnd;
77+
createInfo.hinstance = GetModuleHandle(nullptr);
78+
79+
VkSurfaceKHR surfaceHandle = {};
80+
VkResult vkresult = vkCreateWin32SurfaceKHR(instance->Instance, &createInfo, nullptr, &surfaceHandle);
81+
if (vkresult != VK_SUCCESS)
82+
throw std::runtime_error("Could not create vulkan surface");
83+
84+
auto surface = std::make_shared<VulkanSurface>(instance, surfaceHandle);
7685

7786
// Create the vulkan device
7887
auto device = VulkanDeviceBuilder()
@@ -446,7 +455,7 @@ int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmd
446455
lastHeight = height;
447456
framebuffers.clear();
448457

449-
swapchain->Create(width, height, 1, true, false, false);
458+
swapchain->Create(width, height, 1, true, false);
450459

451460
// Create frame buffer objects for the new swap chain images
452461
for (int imageIndex = 0; imageIndex < swapchain->ImageCount(); imageIndex++)

include/zvulkan/vulkanbuilders.h

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,6 @@ class VulkanInstanceBuilder
1717
VulkanInstanceBuilder& RequireExtensions(const std::vector<const char*>& extensions);
1818
VulkanInstanceBuilder& RequireExtensions(const char** extensions, size_t count);
1919
VulkanInstanceBuilder& OptionalExtension(const std::string& extensionName);
20-
#ifdef VK_USE_PLATFORM_WIN32_KHR
21-
VulkanInstanceBuilder& RequireWin32Surface();
22-
#endif
23-
#ifdef VK_USE_PLATFORM_XLIB_KHR
24-
VulkanInstanceBuilder& RequireX11Surface();
25-
#endif
26-
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
27-
VulkanInstanceBuilder& RequireWaylandSurface();
28-
#endif
2920
VulkanInstanceBuilder& OptionalSwapchainColorspace();
3021
VulkanInstanceBuilder& DebugLayer(bool enable = true);
3122

@@ -38,23 +29,6 @@ class VulkanInstanceBuilder
3829
bool debugLayer = false;
3930
};
4031

41-
#ifdef VK_USE_PLATFORM_WIN32_KHR
42-
43-
class VulkanSurfaceBuilder
44-
{
45-
public:
46-
VulkanSurfaceBuilder();
47-
48-
VulkanSurfaceBuilder& Win32Window(HWND handle);
49-
50-
std::shared_ptr<VulkanSurface> Create(std::shared_ptr<VulkanInstance> instance);
51-
52-
private:
53-
HWND hwnd = {};
54-
};
55-
56-
#endif
57-
5832
class VulkanDeviceBuilder
5933
{
6034
public:

include/zvulkan/vulkansurface.h

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,4 @@ class VulkanSurface
1010

1111
std::shared_ptr<VulkanInstance> Instance;
1212
VkSurfaceKHR Surface = VK_NULL_HANDLE;
13-
14-
#ifdef VK_USE_PLATFORM_WIN32_KHR
15-
VulkanSurface(std::shared_ptr<VulkanInstance> instance, HWND window);
16-
HWND Window = 0;
17-
#endif
18-
19-
#ifdef VK_USE_PLATFORM_XLIB_KHR
20-
VulkanSurface(std::shared_ptr<VulkanInstance> instance, Display* display, Window window);
21-
Display* X11Display = nullptr;
22-
Window X11Window = 0;
23-
#endif
24-
25-
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
26-
VulkanSurface(std::shared_ptr<VulkanInstance> instance, wl_display* display, wl_surface* surface);
27-
wl_display* WLDisplay = nullptr;
28-
wl_surface* WLSurface = nullptr;
29-
#endif
3013
};

include/zvulkan/vulkanswapchain.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class VulkanSwapChain
2525
VulkanSwapChain(VulkanDevice* device);
2626
~VulkanSwapChain();
2727

28-
void Create(int width, int height, int imageCount, bool vsync, bool hdr, bool exclusivefullscreen);
28+
void Create(int width, int height, int imageCount, bool vsync, bool hdr);
2929
bool Lost() const { return lost; }
3030

3131
int Width() const { return actualExtent.width; }
@@ -42,17 +42,17 @@ class VulkanSwapChain
4242
private:
4343
void SelectFormat(const VulkanSurfaceCapabilities& caps, bool hdr);
4444

45-
bool CreateSwapchain(int width, int height, int imageCount, bool vsync, bool hdr, bool exclusivefullscreen);
45+
bool CreateSwapchain(int width, int height, int imageCount, bool vsync, bool hdr);
4646

47-
VulkanSurfaceCapabilities GetSurfaceCapabilities(bool exclusivefullscreen);
47+
VulkanSurfaceCapabilities GetSurfaceCapabilities();
4848

4949
VulkanDevice* device = nullptr;
5050
bool lost = true;
5151

5252
VkExtent2D actualExtent = {};
5353
VkSwapchainKHR swapchain = VK_NULL_HANDLE;
5454
VkSurfaceFormatKHR format = {};
55-
VkPresentModeKHR presentMode;
55+
VkPresentModeKHR presentMode = {};
5656
std::vector<std::unique_ptr<VulkanImage>> images;
5757
std::vector<std::unique_ptr<VulkanImageView>> views;
5858

src/vulkanbuilders.cpp

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,33 +1627,6 @@ VulkanInstanceBuilder& VulkanInstanceBuilder::RequireExtensions(const char** ext
16271627
return *this;
16281628
}
16291629

1630-
#ifdef VK_USE_PLATFORM_WIN32_KHR
1631-
VulkanInstanceBuilder& VulkanInstanceBuilder::RequireWin32Surface()
1632-
{
1633-
RequireExtension(VK_KHR_SURFACE_EXTENSION_NAME);
1634-
RequireExtension(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
1635-
return *this;
1636-
}
1637-
#endif
1638-
1639-
#ifdef VK_USE_PLATFORM_XLIB_KHR
1640-
VulkanInstanceBuilder& VulkanInstanceBuilder::RequireX11Surface()
1641-
{
1642-
RequireExtension(VK_KHR_SURFACE_EXTENSION_NAME);
1643-
RequireExtension(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
1644-
return *this;
1645-
}
1646-
#endif
1647-
1648-
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
1649-
VulkanInstanceBuilder& VulkanInstanceBuilder::RequireWaylandSurface()
1650-
{
1651-
RequireExtension(VK_KHR_SURFACE_EXTENSION_NAME);
1652-
RequireExtension(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
1653-
return *this;
1654-
}
1655-
#endif
1656-
16571630
VulkanInstanceBuilder& VulkanInstanceBuilder::OptionalSwapchainColorspace()
16581631
{
16591632
OptionalExtension(VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME); // For HDR support
@@ -1679,27 +1652,6 @@ std::shared_ptr<VulkanInstance> VulkanInstanceBuilder::Create()
16791652

16801653
/////////////////////////////////////////////////////////////////////////////
16811654

1682-
#ifdef VK_USE_PLATFORM_WIN32_KHR
1683-
1684-
VulkanSurfaceBuilder::VulkanSurfaceBuilder()
1685-
{
1686-
}
1687-
1688-
VulkanSurfaceBuilder& VulkanSurfaceBuilder::Win32Window(HWND hwnd)
1689-
{
1690-
this->hwnd = hwnd;
1691-
return *this;
1692-
}
1693-
1694-
std::shared_ptr<VulkanSurface> VulkanSurfaceBuilder::Create(std::shared_ptr<VulkanInstance> instance)
1695-
{
1696-
return std::make_shared<VulkanSurface>(std::move(instance), hwnd);
1697-
}
1698-
1699-
#endif
1700-
1701-
/////////////////////////////////////////////////////////////////////////////
1702-
17031655
#ifndef VK_KHR_MAINTENANCE4_EXTENSION_NAME
17041656
#define VK_KHR_MAINTENANCE4_EXTENSION_NAME "VK_KHR_maintenance4"
17051657
#endif

src/vulkansurface.cpp

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,6 @@
22
#include "vulkansurface.h"
33
#include "vulkaninstance.h"
44

5-
#if defined(WIN32)
6-
#define NOMINMAX
7-
#define WIN32_MEAN_AND_LEAN
8-
#include <Windows.h>
9-
#endif
10-
115
VulkanSurface::VulkanSurface(std::shared_ptr<VulkanInstance> instance, VkSurfaceKHR surface) : Instance(std::move(instance)), Surface(surface)
126
{
137
}
@@ -16,48 +10,3 @@ VulkanSurface::~VulkanSurface()
1610
{
1711
vkDestroySurfaceKHR(Instance->Instance, Surface, nullptr);
1812
}
19-
20-
#ifdef VK_USE_PLATFORM_WIN32_KHR
21-
22-
VulkanSurface::VulkanSurface(std::shared_ptr<VulkanInstance> instance, HWND window) : Instance(std::move(instance)), Window(window)
23-
{
24-
VkWin32SurfaceCreateInfoKHR createInfo = { VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR };
25-
createInfo.hwnd = window;
26-
createInfo.hinstance = GetModuleHandle(nullptr);
27-
28-
VkResult result = vkCreateWin32SurfaceKHR(Instance->Instance, &createInfo, nullptr, &Surface);
29-
if (result != VK_SUCCESS)
30-
VulkanError("Could not create vulkan surface");
31-
}
32-
33-
#endif
34-
35-
#ifdef VK_USE_PLATFORM_XLIB_KHR
36-
37-
VulkanSurface::VulkanSurface(std::shared_ptr<VulkanInstance> instance, Display* display, Window window) : Instance(std::move(instance)), X11Display(display), X11Window(window)
38-
{
39-
VkXlibSurfaceCreateInfoKHR createInfo = { VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR };
40-
createInfo.dpy = display;
41-
createInfo.window = window;
42-
43-
VkResult result = vkCreateXlibSurfaceKHR(Instance->Instance, &createInfo, nullptr, &Surface);
44-
if (result != VK_SUCCESS)
45-
VulkanError("Could not create vulkan surface");
46-
}
47-
48-
#endif
49-
50-
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
51-
52-
VulkanSurface::VulkanSurface(std::shared_ptr<VulkanInstance> instance, wl_display* display, wl_surface* surface) : Instance(std::move(instance)), WLDisplay(display), WLSurface(surface)
53-
{
54-
VkWaylandSurfaceCreateInfoKHR createInfo = { VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR };
55-
createInfo.display = display;
56-
createInfo.surface = surface;
57-
58-
VkResult result = vkCreateWaylandSurfaceKHR(Instance->Instance, &createInfo, nullptr, &Surface);
59-
if (result != VK_SUCCESS)
60-
VulkanError("Could not create vulkan surface");
61-
}
62-
63-
#endif

0 commit comments

Comments
 (0)