Now using Volk rather than statically linking the Vulkan loader
This commit is contained in:
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -10,3 +10,9 @@
|
||||
[submodule "3rdparty/glslang"]
|
||||
path = 3rdparty/glslang
|
||||
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
1
3rdparty/volk
vendored
Submodule
Submodule 3rdparty/volk added at 5d2e2cf91f
1
3rdparty/vulkan
vendored
Submodule
1
3rdparty/vulkan
vendored
Submodule
Submodule 3rdparty/vulkan added at 8188e3fbbc
@@ -109,11 +109,49 @@ include_directories(hydra/include)
|
||||
list (APPEND EXTRA_LIBS hydra)
|
||||
|
||||
# ---- Vulkan ----
|
||||
if(NOT ANDROID)
|
||||
find_package(Vulkan REQUIRED)
|
||||
list (APPEND EXTRA_LIBS Vulkan::Vulkan)
|
||||
add_library(vulkan INTERFACE)
|
||||
set(VULKAN_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/vulkan/include)
|
||||
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()
|
||||
|
||||
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 ----
|
||||
if(NOT ANDROID)
|
||||
|
||||
@@ -640,6 +640,12 @@ void KRContext::receivedMemoryWarning()
|
||||
void
|
||||
KRContext::createDeviceContexts()
|
||||
{
|
||||
VkResult res = volkInitialize();
|
||||
if (res != VK_SUCCESS) {
|
||||
destroyDeviceContexts();
|
||||
return;
|
||||
}
|
||||
|
||||
// initialize the VkApplicationInfo structure
|
||||
VkApplicationInfo app_info = {};
|
||||
app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
|
||||
@@ -662,10 +668,12 @@ KRContext::createDeviceContexts()
|
||||
inst_info.enabledLayerCount = 0;
|
||||
inst_info.ppEnabledLayerNames = NULL;
|
||||
|
||||
VkResult res = vkCreateInstance(&inst_info, NULL, &m_vulkanInstance);
|
||||
res = vkCreateInstance(&inst_info, NULL, &m_vulkanInstance);
|
||||
if (res != VK_SUCCESS) {
|
||||
destroyDeviceContexts();
|
||||
}
|
||||
|
||||
volkLoadInstance(m_vulkanInstance);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -100,6 +100,7 @@ using std::unordered_multimap;
|
||||
using std::hash;
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
#include <volk.h>
|
||||
#if defined(ANDROID)
|
||||
#include <GLES3/gl3.h>
|
||||
#include <GLES3/gl3ext.h>
|
||||
|
||||
Reference in New Issue
Block a user