Now using Volk rather than statically linking the Vulkan loader

This commit is contained in:
2020-06-23 15:08:39 -07:00
parent 4761bbc66b
commit 172ca74f70
6 changed files with 59 additions and 4 deletions

6
.gitmodules vendored
View File

@@ -10,3 +10,9 @@
[submodule "3rdparty/glslang"] [submodule "3rdparty/glslang"]
path = 3rdparty/glslang path = 3rdparty/glslang
url = git@github.com:KhronosGroup/glslang.git url = git@github.com:KhronosGroup/glslang.git
[submodule "3rdparty/vulkan"]
path = 3rdparty/vulkan
url = https://github.com/KhronosGroup/Vulkan-Headers
[submodule "3rdparty/volk"]
path = 3rdparty/volk
url = https://github.com/zeux/volk

1
3rdparty/volk vendored Submodule

Submodule 3rdparty/volk added at 5d2e2cf91f

1
3rdparty/vulkan vendored Submodule

Submodule 3rdparty/vulkan added at 8188e3fbbc

View File

@@ -109,11 +109,49 @@ include_directories(hydra/include)
list (APPEND EXTRA_LIBS hydra) list (APPEND EXTRA_LIBS hydra)
# ---- Vulkan ---- # ---- Vulkan ----
if(NOT ANDROID) add_library(vulkan INTERFACE)
find_package(Vulkan REQUIRED) set(VULKAN_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/vulkan/include)
list (APPEND EXTRA_LIBS Vulkan::Vulkan) target_sources(vulkan INTERFACE ${VULKAN_INCLUDE_DIR}/vulkan/vulkan.h)
target_include_directories(vulkan INTERFACE ${VULKAN_INCLUDE_DIR})
target_compile_definitions(vulkan INTERFACE VK_NO_PROTOTYPES)
if(ANDROID)
target_compile_definitions(vulkan INTERFACE VK_USE_PLATFORM_ANDROID_KHR)
elseif(WIN32)
target_compile_definitions(vulkan INTERFACE VK_USE_PLATFORM_WIN32_KHR)
elseif(APPLE)
target_compile_definitions(vulkan INTERFACE VK_USE_PLATFORM_MACOS_MVK)
elseif(UNIX)
# See whether X11 is available. If not, fall back to direct-to-display mode.
find_package(X11 QUIET)
if (X11_FOUND)
target_compile_definitions(vulkan INTERFACE VK_USE_PLATFORM_XCB_KHR)
else()
set(DIRECT_TO_DISPLAY TRUE)
set(DIRECT_TO_DISPLAY TRUE PARENT_SCOPE)
target_compile_definitions(vulkan INTERFACE VK_USE_PLATFORM_DISPLAY_KHR)
endif()
endif() endif()
list (APPEND EXTRA_LIBS vulkan)
# ---- Volk ----
# volk
set(VOLK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/volk")
set(VOLK_FILES
"${VOLK_DIR}/volk.c"
"${VOLK_DIR}/volk.h")
add_library(volk STATIC ${VOLK_FILES})
target_link_libraries(volk PUBLIC vulkan)
target_include_directories(volk PUBLIC ${VOLK_DIR})
set_property(TARGET volk PROPERTY FOLDER "3rdparty")
list (APPEND EXTRA_LIBS volk)
# ---- GLSlang ---- # ---- GLSlang ----
if(NOT ANDROID) if(NOT ANDROID)

View File

@@ -640,6 +640,12 @@ void KRContext::receivedMemoryWarning()
void void
KRContext::createDeviceContexts() KRContext::createDeviceContexts()
{ {
VkResult res = volkInitialize();
if (res != VK_SUCCESS) {
destroyDeviceContexts();
return;
}
// initialize the VkApplicationInfo structure // initialize the VkApplicationInfo structure
VkApplicationInfo app_info = {}; VkApplicationInfo app_info = {};
app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
@@ -662,10 +668,12 @@ KRContext::createDeviceContexts()
inst_info.enabledLayerCount = 0; inst_info.enabledLayerCount = 0;
inst_info.ppEnabledLayerNames = NULL; inst_info.ppEnabledLayerNames = NULL;
VkResult res = vkCreateInstance(&inst_info, NULL, &m_vulkanInstance); res = vkCreateInstance(&inst_info, NULL, &m_vulkanInstance);
if (res != VK_SUCCESS) { if (res != VK_SUCCESS) {
destroyDeviceContexts(); destroyDeviceContexts();
} }
volkLoadInstance(m_vulkanInstance);
} }
void void

View File

@@ -100,6 +100,7 @@ using std::unordered_multimap;
using std::hash; using std::hash;
#include <vulkan/vulkan.h> #include <vulkan/vulkan.h>
#include <volk.h>
#if defined(ANDROID) #if defined(ANDROID)
#include <GLES3/gl3.h> #include <GLES3/gl3.h>
#include <GLES3/gl3ext.h> #include <GLES3/gl3ext.h>