aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordan sinclair <dj2@everburning.com>2019-03-05 11:07:37 -0500
committerGitHub <noreply@github.com>2019-03-05 11:07:37 -0500
commit0242b3c38c2bdf3fb56b0f2c3b6c048899e9ea50 (patch)
tree2f4da403e93e8bd33680291ff52d93c1a5be7d33 /src
parent4c4017d29dddd40433b5865aa391e212ffe741d6 (diff)
downloadamber-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.txt1
-rw-r--r--src/vulkan/CMakeLists.txt13
-rw-r--r--src/vulkan/device.cc8
-rw-r--r--src/vulkan/device.h5
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 {