Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/doitsujin/dxvk.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Ashton <joshua@froggi.es>2022-08-21 22:12:13 +0300
committerJoshua Ashton <joshua@froggi.es>2022-08-21 22:52:27 +0300
commit37e46cec6941b3434bf2e43eed86027883548713 (patch)
treed45632f5355f63565d351c67fdfee040eb0d8606
parent382aed23cb93272c758ca3436538483ce715dc17 (diff)
[dxvk] Support for SDL2 WSInative-pr-sdl2-wsi
-rw-r--r--src/dxvk/meson.build12
-rw-r--r--src/dxvk/platform/dxvk_sdl2_exts.cpp60
2 files changed, 70 insertions, 2 deletions
diff --git a/src/dxvk/meson.build b/src/dxvk/meson.build
index 080f4a96..56aa4210 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 00000000..65a3f499
--- /dev/null
+++ b/src/dxvk/platform/dxvk_sdl2_exts.cpp
@@ -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) {
+
+ }
+
+}