[dxvk] Support for SDL2 WSI

This commit is contained in:
Joshua Ashton 2022-08-21 19:12:13 +00:00 committed by Philip Rebohle
parent 5787d9ee04
commit 97350d6c35
2 changed files with 70 additions and 2 deletions

View File

@ -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,

View File

@ -0,0 +1,60 @@
#include "../dxvk_platform_exts.h"
#include <SDL2/SDL.h>
#include <SDL2/SDL_vulkan.h>
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<const char *>(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) {
}
}