Merge branch 'vulkan2' of https://github.com/coelckers/gzdoom into vulkan2

This commit is contained in:
Magnus Norddahl 2019-03-12 16:17:39 +01:00
commit a26e2cd8e0
4 changed files with 29 additions and 32 deletions

View file

@ -95,6 +95,7 @@ EXTERN_CVAR(Bool, vid_vsync)
EXTERN_CVAR(Bool, vid_hidpi) EXTERN_CVAR(Bool, vid_hidpi)
EXTERN_CVAR(Int, vid_defwidth) EXTERN_CVAR(Int, vid_defwidth)
EXTERN_CVAR(Int, vid_defheight) EXTERN_CVAR(Int, vid_defheight)
EXTERN_CVAR(Int, vid_backend)
CUSTOM_CVAR(Bool, vid_autoswitch, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) CUSTOM_CVAR(Bool, vid_autoswitch, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
{ {
@ -342,7 +343,7 @@ class CocoaVideo : public IVideo
public: public:
CocoaVideo() CocoaVideo()
{ {
ms_isVulkanSupported = true; // todo ms_isVulkanEnabled = vid_backend == 0 && NSAppKitVersionNumber >= 1404; // NSAppKitVersionNumber10_11
} }
~CocoaVideo() ~CocoaVideo()
@ -359,7 +360,7 @@ public:
SystemBaseFrameBuffer *fb = nullptr; SystemBaseFrameBuffer *fb = nullptr;
if (ms_isVulkanSupported) if (ms_isVulkanEnabled)
{ {
const NSRect contentRect = [ms_window contentRectForFrameRect:[ms_window frame]]; const NSRect contentRect = [ms_window contentRectForFrameRect:[ms_window frame]];
@ -380,7 +381,7 @@ public:
} }
catch (std::exception const&) catch (std::exception const&)
{ {
ms_isVulkanSupported = false; ms_isVulkanEnabled = false;
SetupOpenGLView(ms_window); SetupOpenGLView(ms_window);
} }
@ -402,23 +403,18 @@ public:
return ms_window; return ms_window;
} }
static bool IsVulkanSupported()
{
return ms_isVulkanSupported;
}
private: private:
VulkanDevice *m_vulkanDevice = nullptr; VulkanDevice *m_vulkanDevice = nullptr;
static CocoaWindow* ms_window; static CocoaWindow* ms_window;
static bool ms_isVulkanSupported; static bool ms_isVulkanEnabled;
}; };
CocoaWindow* CocoaVideo::ms_window; CocoaWindow* CocoaVideo::ms_window;
bool CocoaVideo::ms_isVulkanSupported; bool CocoaVideo::ms_isVulkanEnabled;
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View file

@ -72,6 +72,7 @@ EXTERN_CVAR (Int, vid_displaybits)
EXTERN_CVAR (Int, vid_maxfps) EXTERN_CVAR (Int, vid_maxfps)
EXTERN_CVAR (Int, vid_defwidth) EXTERN_CVAR (Int, vid_defwidth)
EXTERN_CVAR (Int, vid_defheight) EXTERN_CVAR (Int, vid_defheight)
EXTERN_CVAR (Int, vid_backend)
EXTERN_CVAR (Bool, cl_capfps) EXTERN_CVAR (Bool, cl_capfps)
// PUBLIC DATA DEFINITIONS ------------------------------------------------- // PUBLIC DATA DEFINITIONS -------------------------------------------------
@ -111,7 +112,7 @@ namespace Priv
static const int MIN_HEIGHT = 200; static const int MIN_HEIGHT = 200;
SDL_Window *window; SDL_Window *window;
bool vulkanSupported; bool vulkanEnabled;
bool fullscreenSwitch; bool fullscreenSwitch;
void CreateWindow(uint32_t extraFlags) void CreateWindow(uint32_t extraFlags)
@ -197,7 +198,7 @@ private:
void I_GetVulkanDrawableSize(int *width, int *height) void I_GetVulkanDrawableSize(int *width, int *height)
{ {
assert(Priv::vulkanSupported); assert(Priv::vulkanEnabled);
assert(Priv::window != nullptr); assert(Priv::window != nullptr);
assert(Priv::Vulkan_GetDrawableSize); assert(Priv::Vulkan_GetDrawableSize);
Priv::Vulkan_GetDrawableSize(Priv::window, width, height); Priv::Vulkan_GetDrawableSize(Priv::window, width, height);
@ -205,17 +206,15 @@ void I_GetVulkanDrawableSize(int *width, int *height)
bool I_GetVulkanPlatformExtensions(unsigned int *count, const char **names) bool I_GetVulkanPlatformExtensions(unsigned int *count, const char **names)
{ {
assert(Priv::vulkanSupported); assert(Priv::vulkanEnabled);
assert(Priv::window != nullptr); assert(Priv::window != nullptr);
assert(Priv::Vulkan_GetInstanceExtensions);
return Priv::Vulkan_GetInstanceExtensions(Priv::window, count, names) == SDL_TRUE; return Priv::Vulkan_GetInstanceExtensions(Priv::window, count, names) == SDL_TRUE;
} }
bool I_CreateVulkanSurface(VkInstance instance, VkSurfaceKHR *surface) bool I_CreateVulkanSurface(VkInstance instance, VkSurfaceKHR *surface)
{ {
assert(Priv::vulkanSupported); assert(Priv::vulkanEnabled);
assert(Priv::window != nullptr); assert(Priv::window != nullptr);
assert(Priv::Vulkan_CreateSurface);
return Priv::Vulkan_CreateSurface(Priv::window, instance, surface) == SDL_TRUE; return Priv::Vulkan_CreateSurface(Priv::window, instance, surface) == SDL_TRUE;
} }
@ -234,15 +233,16 @@ SDLVideo::SDLVideo ()
Priv::library.Load({ "libSDL2.so", "libSDL2-2.0.so" }); Priv::library.Load({ "libSDL2.so", "libSDL2-2.0.so" });
} }
Priv::vulkanSupported = Priv::Vulkan_GetDrawableSize && Priv::Vulkan_GetInstanceExtensions && Priv::Vulkan_CreateSurface; Priv::vulkanEnabled = vid_backend == 0
&& Priv::Vulkan_GetDrawableSize && Priv::Vulkan_GetInstanceExtensions && Priv::Vulkan_CreateSurface;
if (Priv::vulkanSupported) if (Priv::vulkanEnabled)
{ {
Priv::CreateWindow(Priv::VulkanWindowFlag | SDL_WINDOW_HIDDEN); Priv::CreateWindow(Priv::VulkanWindowFlag | SDL_WINDOW_HIDDEN);
if (Priv::window == nullptr) if (Priv::window == nullptr)
{ {
Priv::vulkanSupported = false; Priv::vulkanEnabled = false;
} }
} }
} }
@ -257,7 +257,7 @@ DFrameBuffer *SDLVideo::CreateFrameBuffer ()
SystemBaseFrameBuffer *fb = nullptr; SystemBaseFrameBuffer *fb = nullptr;
// first try Vulkan, if that fails OpenGL // first try Vulkan, if that fails OpenGL
if (Priv::vulkanSupported) if (Priv::vulkanEnabled)
{ {
try try
{ {
@ -267,7 +267,7 @@ DFrameBuffer *SDLVideo::CreateFrameBuffer ()
} }
catch (CRecoverableError const&) catch (CRecoverableError const&)
{ {
Priv::vulkanSupported = false; Priv::vulkanEnabled = false;
} }
} }
@ -302,7 +302,7 @@ int SystemBaseFrameBuffer::GetClientWidth()
{ {
int width = 0; int width = 0;
assert(Priv::vulkanSupported); assert(Priv::vulkanEnabled);
Priv::Vulkan_GetDrawableSize(Priv::window, &width, nullptr); Priv::Vulkan_GetDrawableSize(Priv::window, &width, nullptr);
return width; return width;
@ -312,7 +312,7 @@ int SystemBaseFrameBuffer::GetClientHeight()
{ {
int height = 0; int height = 0;
assert(Priv::vulkanSupported); assert(Priv::vulkanEnabled);
Priv::Vulkan_GetDrawableSize(Priv::window, nullptr, &height); Priv::Vulkan_GetDrawableSize(Priv::window, nullptr, &height);
return height; return height;

View file

@ -113,6 +113,15 @@ CUSTOM_CVAR(Int, vid_rendermode, 4, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOIN
// No further checks needed. All this changes now is which scene drawer the render backend calls. // No further checks needed. All this changes now is which scene drawer the render backend calls.
} }
CUSTOM_CVAR(Int, vid_backend, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
{
// [SP] This may seem pointless - but I don't want to implement live switching just
// yet - I'm pretty sure it's going to require a lot of reinits and destructions to
// do it right without memory leaks
Printf("Changing the video backend requires a restart for " GAMENAME ".\n");
}
CVAR(Int, vid_renderer, 1, 0) // for some stupid mods which threw caution out of the window... CVAR(Int, vid_renderer, 1, 0) // for some stupid mods which threw caution out of the window...

View file

@ -50,15 +50,7 @@
#include "swrenderer/r_swrenderer.h" #include "swrenderer/r_swrenderer.h"
EXTERN_CVAR(Int, vid_maxfps) EXTERN_CVAR(Int, vid_maxfps)
EXTERN_CVAR(Int, vid_backend)
CUSTOM_CVAR(Int, vid_backend, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL)
{
// [SP] This may seem pointless - but I don't want to implement live switching just
// yet - I'm pretty sure it's going to require a lot of reinits and destructions to
// do it right without memory leaks
Printf("Changing the video backend requires a restart for " GAMENAME ".\n");
}
extern HWND Window; extern HWND Window;