Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add None WSI #3365

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions include/native/wsi/native_wsi.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
#include "wsi/native_sdl2.h"
#elif DXVK_WSI_GLFW
#include "wsi/native_glfw.h"
#elif DXVK_WSI_NONE
//empty
#else
#error Unknown wsi!
#endif
2 changes: 2 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ else
elif dxvk_wsi == 'glfw'
lib_glfw = cpp.find_library('glfw')
compiler_args += ['-DDXVK_WSI_GLFW']
elif dxvk_wsi == 'none'
compiler_args += ['-DDXVK_WSI_NONE']
endif

dxvk_name_prefix = 'libdxvk_'
Expand Down
4 changes: 4 additions & 0 deletions src/dxvk/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,10 @@ elif dxvk_wsi == 'glfw'
dxvk_src += [
'platform/dxvk_glfw_exts.cpp'
]
elif dxvk_wsi == 'none'
dxvk_src += [
'platform/dxvk_none_exts.cpp'
]
endif

dxvk_extra_deps = [ dependency('threads') ]
Expand Down
33 changes: 33 additions & 0 deletions src/dxvk/platform/dxvk_none_exts.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#include "../dxvk_platform_exts.h"

namespace dxvk {

DxvkPlatformExts DxvkPlatformExts::s_instance;

std::string_view DxvkPlatformExts::getName() {
return "No WSI";
}


DxvkNameSet DxvkPlatformExts::getInstanceExtensions() {
return {};
}


DxvkNameSet DxvkPlatformExts::getDeviceExtensions(
uint32_t adapterId) {
return {};
}


void DxvkPlatformExts::initInstanceExtensions() {

}


void DxvkPlatformExts::initDeviceExtensions(
const DxvkInstance* instance) {

}

}
9 changes: 9 additions & 0 deletions src/wsi/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ wsi_glfw_src = [
'glfw/wsi_window_glfw.cpp',
]

wsi_none_src = [
'none/wsi_monitor_none.cpp',
'none/wsi_window_none.cpp',
'none/wsi_edid_none.cpp',
]

if dxvk_wsi == 'win32'
wsi_src = wsi_common_src + wsi_win32_src
wsi_deps = [ dep_displayinfo ]
Expand All @@ -26,6 +32,9 @@ elif dxvk_wsi == 'sdl2'
elif dxvk_wsi == 'glfw'
wsi_src = wsi_common_src + wsi_glfw_src
wsi_deps = [ dep_displayinfo, lib_glfw ]
elif dxvk_wsi == 'none'
wsi_src = wsi_none_src
wsi_deps = []
else
error('Unknown wsi')
endif
Expand Down
10 changes: 10 additions & 0 deletions src/wsi/none/wsi_edid_none.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "wsi_edid.h"

namespace dxvk::wsi {

std::optional<WsiDisplayMetadata> parseColorimetryInfo(
const WsiEdidData& edidData) {
return std::nullopt;
}

}
66 changes: 66 additions & 0 deletions src/wsi/none/wsi_monitor_none.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#include "../wsi_monitor.h"

#include "wsi/native_wsi.h"
#include "wsi_platform_none.h"

#include "../../util/util_string.h"
#include "../../util/log/log.h"

namespace dxvk::wsi {

HMONITOR getDefaultMonitor() {
return nullptr;
}


HMONITOR enumMonitors(uint32_t index) {
return nullptr;
}


HMONITOR enumMonitors(const LUID *adapterLUID[], uint32_t numLUIDs, uint32_t index) {
return enumMonitors(index);
}


bool getDisplayName(
HMONITOR hMonitor,
WCHAR (&Name)[32]) {
return false;
}


bool getDesktopCoordinates(
HMONITOR hMonitor,
RECT* pRect) {
return false;
}


bool getDisplayMode(
HMONITOR hMonitor,
uint32_t ModeNumber,
WsiMode* pMode) {
return false;
}


bool getCurrentDisplayMode(
HMONITOR hMonitor,
WsiMode* pMode) {
return false;
}


bool getDesktopDisplayMode(
HMONITOR hMonitor,
WsiMode* pMode) {
return false;
}

std::vector<uint8_t> getMonitorEdid(HMONITOR hMonitor) {
Logger::err("getMonitorEdid not implemented on this platform.");
return {};
}

}
17 changes: 17 additions & 0 deletions src/wsi/none/wsi_platform_none.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#include "../wsi_monitor.h"

namespace dxvk::wsi {

/**
* \brief Impl-dependent state
*/
struct DxvkWindowState {
};

inline bool isDisplayValid(int32_t displayId) {
return false;
}

}
91 changes: 91 additions & 0 deletions src/wsi/none/wsi_window_none.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
#include "../wsi_window.h"

#include "native/wsi/native_wsi.h"
#include "wsi_platform_none.h"

#include "../../util/util_string.h"
#include "../../util/log/log.h"

namespace dxvk::wsi {

void getWindowSize(
HWND hWindow,
uint32_t* pWidth,
uint32_t* pHeight) {
}


void resizeWindow(
HWND hWindow,
DxvkWindowState* pState,
uint32_t Width,
uint32_t Height) {
}


bool setWindowMode(
HMONITOR hMonitor,
HWND hWindow,
const WsiMode& pMode) {
return false;
}



bool enterFullscreenMode(
HMONITOR hMonitor,
HWND hWindow,
DxvkWindowState* pState,
bool ModeSwitch) {
return false;
}


bool leaveFullscreenMode(
HWND hWindow,
DxvkWindowState* pState,
bool restoreCoordinates) {
return false;
}


bool restoreDisplayMode() {
return false;
}


HMONITOR getWindowMonitor(HWND hWindow) {
return nullptr;
}


bool isWindow(HWND hWindow) {
return false;
}


void updateFullscreenWindow(
HMONITOR hMonitor,
HWND hWindow,
bool forceTopmost) {
}


VkResult createSurface(
HWND hWindow,
PFN_vkGetInstanceProcAddr pfnVkGetInstanceProcAddr,
VkInstance instance,
VkSurfaceKHR* pSurface) {
auto pfnVkCreateHeadlessSurfaceEXT = reinterpret_cast<PFN_vkCreateHeadlessSurfaceEXT>(
pfnVkGetInstanceProcAddr(instance, "vkCreateHeadlessSurfaceEXT"));

if (!pfnVkCreateHeadlessSurfaceEXT)
return VK_ERROR_FEATURE_NOT_PRESENT;

VkHeadlessSurfaceCreateInfoEXT info = { VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT };
info.pNext = nullptr;
info.flags = 0;
return pfnVkCreateHeadlessSurfaceEXT(instance, &info, nullptr, pSurface);
}

}
2 changes: 2 additions & 0 deletions src/wsi/wsi_platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@
#include "sdl2/wsi_platform_sdl2.h"
#elif defined(DXVK_WSI_GLFW)
#include "glfw/wsi_platform_glfw.h"
#elif defined(DXVK_WSI_NONE)
#include "none/wsi_platform_none.h"
#endif