Skip to content

Commit

Permalink
Get Vulkan going on Linux
Browse files Browse the repository at this point in the history
  • Loading branch information
hrydgard committed Dec 21, 2017
1 parent 7f758d5 commit 9007abd
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 11 deletions.
11 changes: 9 additions & 2 deletions CMakeLists.txt
Expand Up @@ -106,9 +106,10 @@ else()
message("Normal Build") message("Normal Build")
endif() endif()


if(LINUX) if(LINUX AND VULKAN)
message("Using direct to display extension...") message("Using XCB extension...")
add_definitions(-DVK_USE_PLATFORM_XLIB_KHR) add_definitions(-DVK_USE_PLATFORM_XLIB_KHR)
# add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
endif() endif()


# Doesn't link on some platforms # Doesn't link on some platforms
Expand Down Expand Up @@ -1669,6 +1670,12 @@ endif()


set(CoreExtraLibs ${CoreExtraLibs} armips) set(CoreExtraLibs ${CoreExtraLibs} armips)


# needed for VK_USE_PLATFORM_XCB_KHR only
#if(VULKAN AND NOT WIN32)
# target_link_libraries(native X11-xcb X11)
#endif()


set(GlslangLibs glslang OGLCompiler OSDependent SPIRV SPVRemapper spirv-cross-glsl) set(GlslangLibs glslang OGLCompiler OSDependent SPIRV SPVRemapper spirv-cross-glsl)


target_link_libraries(${CoreLibName} Common native kirk cityhash sfmt19937 xbrz xxhash ${GlslangLibs} target_link_libraries(${CoreLibName} Common native kirk cityhash sfmt19937 xbrz xxhash ${GlslangLibs}
Expand Down
43 changes: 34 additions & 9 deletions SDL/SDLMain.cpp
Expand Up @@ -40,6 +40,11 @@ SDLJoystick *joystick = NULL;
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/Xutil.h> #include <X11/Xutil.h>
#include "SDL_syswm.h" #include "SDL_syswm.h"
#elif defined(VK_USE_PLATFORM_XCB_KHR)
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xlib-xcb.h>
#include "SDL_syswm.h"
#endif #endif


#if defined(USING_EGL) #if defined(USING_EGL)
Expand Down Expand Up @@ -350,6 +355,7 @@ class SDLVulkanGraphicsContext : public GraphicsContext {
} }


void Resize() override { void Resize() override {
/*
draw_->HandleEvent(Draw::Event::LOST_BACKBUFFER, vulkan_->GetBackbufferWidth(), vulkan_->GetBackbufferHeight()); draw_->HandleEvent(Draw::Event::LOST_BACKBUFFER, vulkan_->GetBackbufferWidth(), vulkan_->GetBackbufferHeight());
vulkan_->DestroyObjects(); vulkan_->DestroyObjects();
// TODO: Take from real window dimensions // TODO: Take from real window dimensions
Expand All @@ -358,6 +364,7 @@ class SDLVulkanGraphicsContext : public GraphicsContext {
vulkan_->ReinitSurface(width, height); vulkan_->ReinitSurface(width, height);
vulkan_->InitObjects(); vulkan_->InitObjects();
draw_->HandleEvent(Draw::Event::GOT_BACKBUFFER, vulkan_->GetBackbufferWidth(), vulkan_->GetBackbufferHeight()); draw_->HandleEvent(Draw::Event::GOT_BACKBUFFER, vulkan_->GetBackbufferWidth(), vulkan_->GetBackbufferHeight());
*/
} }


void SwapInterval(int interval) override { void SwapInterval(int interval) override {
Expand All @@ -375,15 +382,11 @@ class SDLVulkanGraphicsContext : public GraphicsContext {
}; };


bool SDLVulkanGraphicsContext::Init(SDL_Window *&window, int x, int y, int mode, std::string *error_message) { bool SDLVulkanGraphicsContext::Init(SDL_Window *&window, int x, int y, int mode, std::string *error_message) {
mode |= SDL_WINDOW_VULKAN;
window = SDL_CreateWindow("Initializing Vulkan...", x, y, pixel_xres, pixel_yres, mode); window = SDL_CreateWindow("Initializing Vulkan...", x, y, pixel_xres, pixel_yres, mode);
SDL_SysWMinfo sys_info; if (!window) {
SDL_VERSION(&sys_info.version); fprintf(stderr, "Error creating SDL window: %s\n", SDL_GetError());
SDL_GetWindowWMInfo(window, &sys_info); exit(1);
Display *display = sys_info.info.x11.display; }
Window x11_window = sys_info.info.x11.window;

ILOG("Display: %p", display);


init_glslang(); init_glslang();


Expand Down Expand Up @@ -421,7 +424,29 @@ bool SDLVulkanGraphicsContext::Init(SDL_Window *&window, int x, int y, int mode,
return false; return false;
} }


vulkan_->InitSurface(WINDOWSYSTEM_XLIB, (void *)display, (void *)(intptr_t)x11_window, pixel_xres, pixel_yres); SDL_SysWMinfo sys_info{};
SDL_VERSION(&sys_info.version); //Set SDL version
if (!SDL_GetWindowWMInfo(window, &sys_info)) {
fprintf(stderr, "Error getting SDL window wm info: %s\n", SDL_GetError());
exit(1);
}
Display *display = sys_info.info.x11.display;
Window x11_window = sys_info.info.x11.window;
switch (sys_info.subsystem) {
case SDL_SYSWM_X11:
break;
default:
fprintf(stderr, "Vulkan subsystem %d not supported\n", sys_info.subsystem);
exit(1);
break;
}
ILOG("Display: %p", display);

#if defined(VK_USE_PLATFORM_XLIB_KHR)
vulkan_->InitSurface(WINDOWSYSTEM_XLIB, (void*)display, (void *)(intptr_t)x11_window, pixel_xres, pixel_yres);
#elif defined(VK_USE_PLATFORM_XCB_KHR)
vulkan_->InitSurface(WINDOWSYSTEM_XCB, (void*)XGetXCBConnection(display), (void *)(intptr_t)x11_window, pixel_xres, pixel_yres);
#endif


if (!vulkan_->InitObjects()) { if (!vulkan_->InitObjects()) {
*error_message = vulkan_->InitError(); *error_message = vulkan_->InitError();
Expand Down

0 comments on commit 9007abd

Please sign in to comment.