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"]
|
[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
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)
|
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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user