diff --git a/source/ps/GameSetup/HWDetect.cpp b/source/ps/GameSetup/HWDetect.cpp index f8e7a6ffa3..64d11b08b6 100644 --- a/source/ps/GameSetup/HWDetect.cpp +++ b/source/ps/GameSetup/HWDetect.cpp @@ -51,16 +51,11 @@ #include #endif -#if SDL_VERSION_ATLEAST(2, 0, 8) -#include -#endif - #include #include static void ReportSDL(const ScriptRequest& rq, JS::HandleValue settings); static void ReportFreeType(const ScriptRequest& rq, JS::HandleValue settings); -static void ReportVulkan(const ScriptRequest& rq, JS::HandleValue settings); void SetDisableAudio(bool disabled) { @@ -142,8 +137,6 @@ void RunHardwareDetection() ReportFreeType(rq, settings); - ReportVulkan(rq, settings); - g_VideoMode.GetBackendDevice()->Report(rq, settings); Script::SetProperty(rq, settings, "video_desktop_xres", g_VideoMode.GetDesktopXRes()); @@ -198,7 +191,7 @@ void RunHardwareDetection() Script::SetProperty(rq, settings, "timer_resolution", timer_Resolution()); // The version should be increased for every meaningful change. - const int reportVersion = 17; + const int reportVersion = 18; // Send the same data to the reporting system g_UserReporter.SubmitReport( @@ -250,25 +243,3 @@ static void ReportFreeType(const ScriptRequest& rq, JS::HandleValue settings) Script::SetProperty(rq, settings, "freetype", FTSupport); } -static void ReportVulkan(const ScriptRequest& rq, JS::HandleValue settings) -{ - std::string vulkanSupport = "unsupported"; - // According to http://wiki.libsdl.org/SDL_Vulkan_LoadLibrary the following - // functionality is supported since SDL 2.0.8. -#if SDL_VERSION_ATLEAST(2, 0, 8) - if (!SDL_Vulkan_LoadLibrary(nullptr)) - { - void* vkGetInstanceProcAddr = SDL_Vulkan_GetVkGetInstanceProcAddr(); - if (vkGetInstanceProcAddr) - vulkanSupport = "supported"; - else - vulkanSupport = "noprocaddr"; - SDL_Vulkan_UnloadLibrary(); - } - else - { - vulkanSupport = "cantload"; - } -#endif - Script::SetProperty(rq, settings, "vulkan", vulkanSupport); -} diff --git a/source/renderer/backend/vulkan/Device.cpp b/source/renderer/backend/vulkan/Device.cpp new file mode 100644 index 0000000000..f0491ae4cd --- /dev/null +++ b/source/renderer/backend/vulkan/Device.cpp @@ -0,0 +1,78 @@ +/* Copyright (C) 2022 Wildfire Games. + * This file is part of 0 A.D. + * + * 0 A.D. is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * 0 A.D. is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with 0 A.D. If not, see . + */ + +#include "precompiled.h" + +#include "Device.h" + +#include "scriptinterface/JSON.h" +#include "scriptinterface/Object.h" +#include "scriptinterface/ScriptInterface.h" +#include "scriptinterface/ScriptRequest.h" + +#if SDL_VERSION_ATLEAST(2, 0, 8) +#include +#endif + +namespace Renderer +{ + +namespace Backend +{ + +namespace Vulkan +{ + +// static +std::unique_ptr CDevice::Create(SDL_Window* window) +{ + std::unique_ptr device(new CDevice()); + return device; +} + +CDevice::CDevice() = default; + +CDevice::~CDevice() = default; + +void CDevice::Report(const ScriptRequest& rq, JS::HandleValue settings) +{ + std::string vulkanSupport = "unsupported"; + // According to http://wiki.libsdl.org/SDL_Vulkan_LoadLibrary the following + // functionality is supported since SDL 2.0.8. +#if SDL_VERSION_ATLEAST(2, 0, 8) + if (!SDL_Vulkan_LoadLibrary(nullptr)) + { + void* vkGetInstanceProcAddr = SDL_Vulkan_GetVkGetInstanceProcAddr(); + if (vkGetInstanceProcAddr) + vulkanSupport = "supported"; + else + vulkanSupport = "noprocaddr"; + SDL_Vulkan_UnloadLibrary(); + } + else + { + vulkanSupport = "cantload"; + } +#endif + Script::SetProperty(rq, settings, "vulkan", vulkanSupport); +} + +} // namespace Vulkan + +} // namespace Backend + +} // namespace Renderer diff --git a/source/renderer/backend/vulkan/Device.h b/source/renderer/backend/vulkan/Device.h new file mode 100644 index 0000000000..b06498f572 --- /dev/null +++ b/source/renderer/backend/vulkan/Device.h @@ -0,0 +1,60 @@ +/* Copyright (C) 2022 Wildfire Games. + * This file is part of 0 A.D. + * + * 0 A.D. is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * 0 A.D. is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with 0 A.D. If not, see . + */ + +#ifndef INCLUDED_RENDERER_BACKEND_VULKAN_DEVICE +#define INCLUDED_RENDERER_BACKEND_VULKAN_DEVICE + +#include "scriptinterface/ScriptForward.h" + +#include + +typedef struct SDL_Window SDL_Window; + +namespace Renderer +{ + +namespace Backend +{ + +namespace Vulkan +{ + +class CDevice +{ +public: + ~CDevice(); + + /** + * Creates the Vulkan device. + */ + static std::unique_ptr Create(SDL_Window* window); + + void Report(const ScriptRequest& rq, JS::HandleValue settings); + +private: + CDevice(); + + SDL_Window* m_Window = nullptr; +}; + +} // namespace Vulkan + +} // namespace Backend + +} // namespace Renderer + +#endif // INCLUDED_RENDERER_BACKEND_VULKAN_DEVICE