diff options
author | dan sinclair <dj2@everburning.com> | 2019-03-05 11:07:37 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-05 11:07:37 -0500 |
commit | 0242b3c38c2bdf3fb56b0f2c3b6c048899e9ea50 (patch) | |
tree | 2f4da403e93e8bd33680291ff52d93c1a5be7d33 /src | |
parent | 4c4017d29dddd40433b5865aa391e212ffe741d6 (diff) | |
download | amber-0242b3c38c2bdf3fb56b0f2c3b6c048899e9ea50.tar.gz |
[vulkan] Generate wrapper functions for vulkan methods. (#328)
This CL adds a update_vk_wrappers.py script which is executed during the
build. The script will generate src/vk-wrappers.h and
src/vk-wrappers.inc files into the binary directory. The .h file lists
the struct entries for the VulkanPtr struct.
The vk-wrappers.inc file contains the code to load the vulkan function
pointers. If the vk.xml file is found, the wrappers will be lambdas, if
vk.xml is not found they're straight function pointers. This should
allow us to work with the CTS as we do now.
Issue #324.
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/vulkan/CMakeLists.txt | 13 | ||||
-rw-r--r-- | src/vulkan/device.cc | 8 | ||||
-rw-r--r-- | src/vulkan/device.h | 5 |
4 files changed, 17 insertions, 10 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index db63393..ae9fa76 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -51,6 +51,7 @@ endif() add_library(libamber ${AMBER_SOURCES}) amber_default_compile_options(libamber) +target_include_directories(libamber PRIVATE "${CMAKE_BINARY_DIR}") set_target_properties(libamber PROPERTIES OUTPUT_NAME "amber") if (${AMBER_ENABLE_SPIRV_TOOLS}) diff --git a/src/vulkan/CMakeLists.txt b/src/vulkan/CMakeLists.txt index 93cd639..9654ca6 100644 --- a/src/vulkan/CMakeLists.txt +++ b/src/vulkan/CMakeLists.txt @@ -30,10 +30,12 @@ set(VULKAN_ENGINE_SOURCES push_constant.cc resource.cc vertex_buffer.cc + ${CMAKE_BINARY_DIR}/src/vk-wrappers.inc.fake ) add_library(libamberenginevulkan ${VULKAN_ENGINE_SOURCES}) amber_default_compile_options(libamberenginevulkan) +target_include_directories(libamberenginevulkan PRIVATE "${CMAKE_BINARY_DIR}") set_target_properties(libamberenginevulkan PROPERTIES OUTPUT_NAME "amberenginevulkan" ) @@ -47,3 +49,14 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") # with XCode 10. target_compile_options(libamberenginevulkan PRIVATE -Wno-zero-as-null-pointer-constant) endif() + +add_custom_command( + OUTPUT ${CMAKE_BINARY_DIR}/src/vk-wrappers.inc.fake + COMMAND + ${PYTHON_EXE} + ${PROJECT_SOURCE_DIR}/tools/update_vk_wrappers.py + ${CMAKE_BINARY_DIR} + ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + COMMENT "Update vk-wrapper files in the build directory" +) diff --git a/src/vulkan/device.cc b/src/vulkan/device.cc index 92191fa..89d1948 100644 --- a/src/vulkan/device.cc +++ b/src/vulkan/device.cc @@ -356,13 +356,7 @@ Device::~Device() = default; Result Device::LoadVulkanPointers( PFN_vkGetInstanceProcAddr getInstanceProcAddr) { -#define AMBER_VK_FUNC(func) \ - if (!(ptrs_.func = reinterpret_cast<PFN_##func>( \ - getInstanceProcAddr(instance_, #func)))) { \ - return Result("Vulkan: Unable to load " #func " pointer"); \ - } -#include "src/vulkan/vk-funcs.inc" -#undef AMBER_VK_FUNC +#include "src/vk-wrappers.inc" return {}; } diff --git a/src/vulkan/device.h b/src/vulkan/device.h index 2a9d263..36df393 100644 --- a/src/vulkan/device.h +++ b/src/vulkan/device.h @@ -15,6 +15,7 @@ #ifndef SRC_VULKAN_DEVICE_H_ #define SRC_VULKAN_DEVICE_H_ +#include <functional> #include <memory> #include <string> #include <vector> @@ -26,9 +27,7 @@ namespace amber { namespace vulkan { struct VulkanPtrs { -#define AMBER_VK_FUNC(func) PFN_##func func; -#include "src/vulkan/vk-funcs.inc" -#undef AMBER_VK_FUNC +#include "src/vk-wrappers.h" }; class Device { |