diff --git a/src/dxvk/meson.build b/src/dxvk/meson.build index 080f4a964..56aa42102 100644 --- a/src/dxvk/meson.build +++ b/src/dxvk/meson.build @@ -105,8 +105,6 @@ dxvk_src = [ 'dxvk_unbound.cpp', 'dxvk_util.cpp', - 'platform/dxvk_win32_exts.cpp', - 'hud/dxvk_hud.cpp', 'hud/dxvk_hud_font.cpp', 'hud/dxvk_hud_item.cpp', @@ -120,6 +118,16 @@ if platform == 'windows' ] endif +if dxvk_wsi == 'win32' + dxvk_src += [ + 'platform/dxvk_win32_exts.cpp' + ] +elif dxvk_wsi == 'sdl2' + dxvk_src += [ + 'platform/dxvk_sdl2_exts.cpp' + ] +endif + thread_dep = dependency('threads') dxvk_lib = static_library('dxvk', dxvk_src, glsl_generator.process(dxvk_shaders), dxvk_version, diff --git a/src/dxvk/platform/dxvk_sdl2_exts.cpp b/src/dxvk/platform/dxvk_sdl2_exts.cpp new file mode 100644 index 000000000..65a3f4993 --- /dev/null +++ b/src/dxvk/platform/dxvk_sdl2_exts.cpp @@ -0,0 +1,60 @@ +#include "../dxvk_platform_exts.h" + +#include +#include + +namespace dxvk { + + DxvkPlatformExts DxvkPlatformExts::s_instance; + + std::string_view DxvkPlatformExts::getName() { + return "SDL2 WSI"; + } + + + DxvkNameSet DxvkPlatformExts::getInstanceExtensions() { + SDL_Window* window = SDL_CreateWindow( + "Dummy Window", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + 1, 1, + SDL_WINDOW_HIDDEN | SDL_WINDOW_VULKAN); + + if (window == nullptr) + throw DxvkError(str::format("SDL2 WSI: Failed to create dummy window. ", SDL_GetError())); + + uint32_t extensionCount = 0; + if (!SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, nullptr)) + throw DxvkError(str::format("SDL2 WSI: Failed to get instance extension count. ", SDL_GetError())); + + auto extensionNames = std::vector(extensionCount); + if (!SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, extensionNames.data())) + throw DxvkError(str::format("SDL2 WSI: Failed to get instance extensions. ", SDL_GetError())); + + DxvkNameSet names; + for (const char* name : extensionNames) + names.add(name); + + SDL_DestroyWindow(window); + + return names; + } + + + DxvkNameSet DxvkPlatformExts::getDeviceExtensions( + uint32_t adapterId) { + return DxvkNameSet(); + } + + + void DxvkPlatformExts::initInstanceExtensions() { + + } + + + void DxvkPlatformExts::initDeviceExtensions( + const DxvkInstance* instance) { + + } + +}