mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-06 13:00:15 +02:00
Thunks: Use libclang-based code generation for libvulkan
This commit is contained in:
1 parent
bbfb8713a7
commit
0285e35c87
6 files changed
+539
-156
No files matched your search
@@ -453,7 +453,6 @@ if (BUILD_THUNKS)
|
||||
CMAKE_ARGS
|
||||
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
||||
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}"
|
||||
"-DVULKAN_XML=${CMAKE_SOURCE_DIR}/External/Vulkan-Docs/xml/vk.xml"
|
||||
"-DGENERATOR_EXE=$<TARGET_FILE:thunkgen>"
|
||||
INSTALL_COMMAND ""
|
||||
BUILD_ALWAYS ON
|
||||
@@ -479,7 +478,6 @@ if (BUILD_THUNKS)
|
||||
"-DX86_CXX_COMPILER:STRING=${X86_CXX_COMPILER}"
|
||||
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}"
|
||||
"-DSTRUCT_VERIFIER=${CMAKE_SOURCE_DIR}/Scripts/StructPackVerifier.py"
|
||||
"-DVULKAN_XML=${CMAKE_SOURCE_DIR}/External/Vulkan-Docs/xml/vk.xml"
|
||||
"-DGENERATOR_EXE=$<TARGET_FILE:thunkgen>"
|
||||
INSTALL_COMMAND ""
|
||||
BUILD_ALWAYS ON
|
||||
|
||||
@@ -50,28 +50,36 @@ function(generate NAME)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Syntax: generate(libxyz libxyz-interface.cpp generator-targets...)
|
||||
# Syntax: generate(libxyz [LIBNAME libxyz-custom] libxyz-interface.cpp generator-targets...)
|
||||
# This defines two targets and a custom command:
|
||||
# - custom command: Main build step that runs the thunk generator on the given interface definition
|
||||
# - libxyz-interface: Target for IDE integration (making sure libxyz-interface.cpp shows up as a source file in the project tree)
|
||||
# - libxyz-deps: Interface target to read include directories from which are passed to libclang when parsing the interface definition
|
||||
function(generate_new NAME)
|
||||
cmake_parse_arguments(PARSE_ARGV 1 ARGS "" "LIBNAME" "")
|
||||
set(ARGN ${ARGS_UNPARSED_ARGUMENTS})
|
||||
list(POP_FRONT ARGN SOURCE_FILE)
|
||||
|
||||
if (ARGS_LIBNAME)
|
||||
set(LIBNAME ${ARGS_LIBNAME})
|
||||
else()
|
||||
set(LIBNAME ${NAME})
|
||||
endif()
|
||||
|
||||
# Interface target for the user to add include directories
|
||||
add_library(${NAME}-deps INTERFACE)
|
||||
target_include_directories(${NAME}-deps INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/../include")
|
||||
add_library(${LIBNAME}-deps INTERFACE)
|
||||
target_include_directories(${LIBNAME}-deps INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/../include")
|
||||
# Shorthand for the include directories added after calling this function.
|
||||
# This is not evaluated directly, hence directories added after return are still picked up
|
||||
set(prop "$<TARGET_PROPERTY:${NAME}-deps,INTERFACE_INCLUDE_DIRECTORIES>")
|
||||
set(prop "$<TARGET_PROPERTY:${LIBNAME}-deps,INTERFACE_INCLUDE_DIRECTORIES>")
|
||||
|
||||
# Target for IDE integration
|
||||
add_library(${NAME}-interface EXCLUDE_FROM_ALL ${SOURCE_FILE})
|
||||
target_link_libraries(${NAME}-interface PRIVATE ${NAME}-deps)
|
||||
add_library(${LIBNAME}-interface EXCLUDE_FROM_ALL ${SOURCE_FILE})
|
||||
target_link_libraries(${LIBNAME}-interface PRIVATE ${LIBNAME}-deps)
|
||||
|
||||
# Run thunk generator for each of the given output files
|
||||
foreach(WHAT IN LISTS ARGN)
|
||||
set(OUTFOLDER "${CMAKE_CURRENT_BINARY_DIR}/gen/${NAME}")
|
||||
set(OUTFOLDER "${CMAKE_CURRENT_BINARY_DIR}/gen/${LIBNAME}")
|
||||
set(OUTFILE "${OUTFOLDER}/${WHAT}.inl")
|
||||
|
||||
add_custom_command(OUTPUT ${OUTFOLDER}
|
||||
@@ -82,7 +90,7 @@ function(generate_new NAME)
|
||||
DEPENDS "${GENERATOR_EXE}"
|
||||
DEPENDS "${OUTFOLDER}"
|
||||
DEPENDS "${SOURCE_FILE}"
|
||||
COMMAND "${GENERATOR_EXE}" "${SOURCE_FILE}" "${NAME}" "-${WHAT}" "${OUTFILE}" -- -std=c++17
|
||||
COMMAND "${GENERATOR_EXE}" "${SOURCE_FILE}" "${LIBNAME}" "-${WHAT}" "${OUTFILE}" -- -std=c++17
|
||||
# Expand include directories to space-separated list of -isystem parameters
|
||||
"$<$<BOOL:${prop}>:;-isystem$<JOIN:${prop},;-isystem>>"
|
||||
VERBATIM
|
||||
@@ -91,7 +99,7 @@ function(generate_new NAME)
|
||||
|
||||
list(APPEND OUTPUTS "${OUTFILE}")
|
||||
endforeach()
|
||||
set(GEN_${NAME} ${OUTPUTS} PARENT_SCOPE)
|
||||
set(GEN_${LIBNAME} ${OUTPUTS} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
add_custom_target(ThunkGuestsInstall)
|
||||
@@ -173,14 +181,8 @@ set (VULKAN_LIBS
|
||||
)
|
||||
|
||||
foreach (LIB IN LISTS VULKAN_LIBS)
|
||||
set(WITH_ARGS "lib${LIB}" "${VULKAN_XML}" "--print-header")
|
||||
generate_with_name(libvulkan_device lib${LIB} Header)
|
||||
set(WITH_ARGS "")
|
||||
|
||||
set(WITH_ARGS "lib${LIB}" "${VULKAN_XML}" "--print-thunks")
|
||||
generate_with_name(libvulkan_device lib${LIB} thunks function_packs function_packs_public function_pack_pair)
|
||||
generate_new(libvulkan_device LIBNAME lib${LIB} ${CMAKE_CURRENT_SOURCE_DIR}/../libvulkan_device/libvulkan_device_interface.cpp thunks function_packs function_packs_public symbol_list)
|
||||
add_guest_lib_with_name(vulkan_device ${LIB})
|
||||
set(WITH_ARGS "")
|
||||
endforeach()
|
||||
|
||||
generate_new(libxcb ${CMAKE_CURRENT_SOURCE_DIR}/../libxcb/libxcb_interface.cpp thunks function_packs function_packs_public callback_structs callback_unpacks_header callback_unpacks_header_init callback_unpacks callback_typedefs)
|
||||
|
||||
@@ -43,28 +43,36 @@ function(generate NAME)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Syntax: generate(libxyz libxyz-interface.cpp generator-targets...)
|
||||
# Syntax: generate(libxyz [LIBNAME libxyz-custom] libxyz-interface.cpp generator-targets...)
|
||||
# This defines two targets and a custom command:
|
||||
# - custom command: Main build step that runs the thunk generator on the given interface definition
|
||||
# - libxyz-interface: Target for IDE integration (making sure libxyz-interface.cpp shows up as a source file in the project tree)
|
||||
# - libxyz-deps: Interface target to read include directories from which are passed to libclang when parsing the interface definition
|
||||
function(generate_new NAME)
|
||||
cmake_parse_arguments(PARSE_ARGV 1 ARGS "" "LIBNAME" "")
|
||||
set(ARGN ${ARGS_UNPARSED_ARGUMENTS})
|
||||
list(POP_FRONT ARGN SOURCE_FILE)
|
||||
|
||||
if (ARGS_LIBNAME)
|
||||
set(LIBNAME ${ARGS_LIBNAME})
|
||||
else()
|
||||
set(LIBNAME ${NAME})
|
||||
endif()
|
||||
|
||||
# Interface target for the user to add include directories
|
||||
add_library(${NAME}-deps INTERFACE)
|
||||
target_include_directories(${NAME}-deps INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/../include")
|
||||
add_library(${LIBNAME}-deps INTERFACE)
|
||||
target_include_directories(${LIBNAME}-deps INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/../include")
|
||||
# Shorthand for the include directories added after calling this function.
|
||||
# This is not evaluated directly, hence directories added after return are still picked up
|
||||
set(prop "$<TARGET_PROPERTY:${NAME}-deps,INTERFACE_INCLUDE_DIRECTORIES>")
|
||||
set(prop "$<TARGET_PROPERTY:${LIBNAME}-deps,INTERFACE_INCLUDE_DIRECTORIES>")
|
||||
|
||||
# Target for IDE integration
|
||||
add_library(${NAME}-interface EXCLUDE_FROM_ALL ${SOURCE_FILE})
|
||||
target_link_libraries(${NAME}-interface PRIVATE ${NAME}-deps)
|
||||
add_library(${LIBNAME}-interface EXCLUDE_FROM_ALL ${SOURCE_FILE})
|
||||
target_link_libraries(${LIBNAME}-interface PRIVATE ${LIBNAME}-deps)
|
||||
|
||||
# Run thunk generator for each of the given output files
|
||||
foreach(WHAT IN LISTS ARGN)
|
||||
set(OUTFOLDER "${CMAKE_CURRENT_BINARY_DIR}/gen/${NAME}")
|
||||
set(OUTFOLDER "${CMAKE_CURRENT_BINARY_DIR}/gen/${LIBNAME}")
|
||||
set(OUTFILE "${OUTFOLDER}/${WHAT}.inl")
|
||||
|
||||
add_custom_command(OUTPUT ${OUTFOLDER}
|
||||
@@ -75,7 +83,7 @@ function(generate_new NAME)
|
||||
DEPENDS "${GENERATOR_EXE}"
|
||||
DEPENDS "${OUTFOLDER}"
|
||||
DEPENDS "${SOURCE_FILE}"
|
||||
COMMAND "${GENERATOR_EXE}" "${SOURCE_FILE}" "${NAME}" "-${WHAT}" "${OUTFILE}" -- -std=c++17
|
||||
COMMAND "${GENERATOR_EXE}" "${SOURCE_FILE}" "${LIBNAME}" "-${WHAT}" "${OUTFILE}" -- -std=c++17
|
||||
# Expand include directories to space-separated list of -isystem parameters
|
||||
"$<$<BOOL:${prop}>:;-isystem$<JOIN:${prop},;-isystem>>"
|
||||
VERBATIM
|
||||
@@ -84,7 +92,7 @@ function(generate_new NAME)
|
||||
|
||||
list(APPEND OUTPUTS "${OUTFILE}")
|
||||
endforeach()
|
||||
set(GEN_${NAME} ${OUTPUTS} PARENT_SCOPE)
|
||||
set(GEN_${LIBNAME} ${OUTPUTS} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(add_host_lib_with_name NAME LIBNAME)
|
||||
@@ -166,14 +174,8 @@ set (VULKAN_LIBS
|
||||
)
|
||||
|
||||
foreach (LIB IN LISTS VULKAN_LIBS)
|
||||
set(WITH_ARGS "lib${LIB}" "${VULKAN_XML}" "--print-header")
|
||||
generate_with_name(libvulkan_device lib${LIB} Header)
|
||||
set(WITH_ARGS "")
|
||||
|
||||
set(WITH_ARGS "lib${LIB}" "${VULKAN_XML}" "--print-thunks")
|
||||
generate_with_name(libvulkan_device lib${LIB} function_unpacks tab_function_unpacks ldr ldr_ptrs ldr_ptrs_pair)
|
||||
generate_new(libvulkan_device LIBNAME lib${LIB} ${CMAKE_CURRENT_SOURCE_DIR}/../libvulkan_device/libvulkan_device_interface.cpp function_unpacks tab_function_unpacks ldr ldr_ptrs symbol_list)
|
||||
add_host_lib_with_name(vulkan_device ${LIB})
|
||||
set(WITH_ARGS "")
|
||||
endforeach()
|
||||
|
||||
generate_new(libxcb ${CMAKE_CURRENT_SOURCE_DIR}/../libxcb/libxcb_interface.cpp function_unpacks tab_function_unpacks ldr ldr_ptrs callback_structs callback_unpacks_header callback_typedefs)
|
||||
|
||||
@@ -1,56 +1,46 @@
|
||||
/*
|
||||
$info$
|
||||
tags: thunklibs|vulkan
|
||||
$end_info$
|
||||
*/
|
||||
|
||||
#include "Header.inl"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <cstring>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <dlfcn.h>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#define VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
#define VK_USE_PLATFORM_XLIB_KHR
|
||||
#define VK_USE_PLATFORM_XCB_KHR
|
||||
#define VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#include "common/Guest.h"
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <cstdio>
|
||||
#include <dlfcn.h>
|
||||
#include <string_view>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "thunks.inl"
|
||||
#include "function_packs.inl"
|
||||
#include "function_packs_public.inl"
|
||||
#include "symbol_list.inl"
|
||||
|
||||
extern "C" {
|
||||
static bool Setup{};
|
||||
static std::unordered_map<std::string_view,PFN_vkVoidFunction*> PtrsToLookUp{};
|
||||
|
||||
static PFN_vkVoidFunction fexfn_pack_vkGetDeviceProcAddr(VkDevice a_0,const char* a_1);
|
||||
static PFN_vkVoidFunction fexfn_pack_vkGetInstanceProcAddr(VkInstance a_0,const char* a_1);
|
||||
static void fexfn_pack_vkCmdSetBlendConstants(VkCommandBuffer a_0,const float a_1[4]);
|
||||
|
||||
// Setup can't be done on shared library constructor
|
||||
// Needs to be deferred until post-constructor phase to remove the chance of crashing
|
||||
static void DoSetup() {
|
||||
// Initialize unordered_map from generated initializer-list
|
||||
PtrsToLookUp = {
|
||||
#define PAIR(name, ptr) { #name, (PFN_vkVoidFunction*)ptr }
|
||||
#include "function_pack_pair.inl"
|
||||
#define PAIR(name, unused) { #name, (PFN_vkVoidFunction*)name },
|
||||
FOREACH_SYMBOL(PAIR)
|
||||
#undef PAIR
|
||||
};
|
||||
|
||||
Setup = true;
|
||||
}
|
||||
static PFN_vkVoidFunction fexfn_pack_vkGetDeviceProcAddr(VkDevice a_0,const char* a_1){
|
||||
|
||||
PFN_vkVoidFunction vkGetDeviceProcAddr(VkDevice a_0,const char* a_1){
|
||||
if (!Setup) {
|
||||
DoSetup();
|
||||
}
|
||||
|
||||
struct {VkDevice a_0;const char* a_1;PFN_vkVoidFunction rv;} args;
|
||||
args.a_0 = a_0;args.a_1 = a_1;
|
||||
THUNKFUNC(vkGetDeviceProcAddr)(&args);
|
||||
auto ret = fexfn_pack_vkGetDeviceProcAddr(a_0, a_1);
|
||||
|
||||
if (args.rv == nullptr) {
|
||||
if (ret == nullptr) {
|
||||
// Early out if our instance doesn't have the pointer
|
||||
// Definitely means we don't support it
|
||||
return nullptr;
|
||||
@@ -66,17 +56,15 @@ static PFN_vkVoidFunction fexfn_pack_vkGetDeviceProcAddr(VkDevice a_0,const char
|
||||
return (PFN_vkVoidFunction)It->second;
|
||||
}
|
||||
|
||||
static PFN_vkVoidFunction fexfn_pack_vkGetInstanceProcAddr(VkInstance a_0,const char* a_1){
|
||||
PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance a_0,const char* a_1){
|
||||
if (!Setup) {
|
||||
DoSetup();
|
||||
}
|
||||
|
||||
// Search our host install first to see if the pointer exists
|
||||
// This also populates a map on the host facing side
|
||||
struct {VkInstance a_0;const char* a_1;PFN_vkVoidFunction rv;} args;
|
||||
args.a_0 = a_0;args.a_1 = a_1;
|
||||
THUNKFUNC(vkGetInstanceProcAddr)(&args);
|
||||
if (args.rv == nullptr) {
|
||||
auto ret = fexfn_pack_vkGetInstanceProcAddr(a_0, a_1);
|
||||
if (ret == nullptr) {
|
||||
// Early out if our instance doesn't have the pointer
|
||||
// Definitely means we don't support it
|
||||
return nullptr;
|
||||
@@ -90,16 +78,6 @@ static PFN_vkVoidFunction fexfn_pack_vkGetInstanceProcAddr(VkInstance a_0,const
|
||||
return (PFN_vkVoidFunction)It->second;
|
||||
}
|
||||
|
||||
static void fexfn_pack_vkCmdSetBlendConstants(VkCommandBuffer a_0,const float a_1[4]){
|
||||
struct {VkCommandBuffer a_0; float a_1[4];} args;
|
||||
args.a_0 = a_0;
|
||||
memcpy(args.a_1, a_1, sizeof(float) * 4);
|
||||
THUNKFUNC(vkCmdSetBlendConstants)(&args);
|
||||
}
|
||||
|
||||
PFN_vkVoidFunction vkGetDeviceProcAddr(VkDevice a_0,const char* a_1) __attribute__((alias("fexfn_pack_vkGetDeviceProcAddr")));
|
||||
PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance a_0,const char* a_1) __attribute__((alias("fexfn_pack_vkGetInstanceProcAddr")));
|
||||
void vkCmdSetBlendConstants(VkCommandBuffer a_0,const float a_1[4]) __attribute__((alias("fexfn_pack_vkCmdSetBlendConstants")));
|
||||
}
|
||||
|
||||
#define DOLOAD(name) LOAD_LIB(name)
|
||||
|
||||
@@ -1,22 +1,19 @@
|
||||
/*
|
||||
$info$
|
||||
tags: thunklibs|vulkan
|
||||
$end_info$
|
||||
*/
|
||||
|
||||
#include "Header.inl"
|
||||
|
||||
#include <mutex>
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#define VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
#define VK_USE_PLATFORM_XLIB_KHR
|
||||
#define VK_USE_PLATFORM_XCB_KHR
|
||||
#define VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#include "common/Host.h"
|
||||
|
||||
#include <mutex>
|
||||
#include <unordered_map>
|
||||
|
||||
#include <dlfcn.h>
|
||||
|
||||
#include "ldr_ptrs.inl"
|
||||
#include "function_unpacks.inl"
|
||||
|
||||
#include "symbol_list.inl"
|
||||
|
||||
static bool SetupDev{};
|
||||
static bool SetupInstance{};
|
||||
@@ -24,6 +21,11 @@ std::mutex SetupMutex{};
|
||||
|
||||
static std::unordered_map<std::string_view,PFN_vkVoidFunction*> PtrsToLookUp{};
|
||||
|
||||
|
||||
#define CONCAT(a, b, c) a##_##b##_##c
|
||||
#define EVAL(a, b) CONCAT(fexldr_ptr, a, b)
|
||||
#define LDR_PTR(fn) EVAL(LIBLIB_NAME, fn)
|
||||
|
||||
static void DoSetupWithDevice(VkDevice dev) {
|
||||
std::unique_lock lk {SetupMutex};
|
||||
|
||||
@@ -37,8 +39,8 @@ static void DoSetupWithDevice(VkDevice dev) {
|
||||
}
|
||||
};
|
||||
|
||||
#define PAIR(name, ptr_unused) add_ptr(#name);
|
||||
#include "ldr_ptrs_pair.inl"
|
||||
#define PAIR(name, unused) add_ptr(#name);
|
||||
FOREACH_SYMBOL(PAIR)
|
||||
#undef PAIR
|
||||
|
||||
SetupDev = true;
|
||||
@@ -55,8 +57,8 @@ static void DoSetupWithInstance(VkInstance instance) {
|
||||
}
|
||||
};
|
||||
|
||||
#define PAIR(name, ptr) add_ptr(#name);
|
||||
#include "ldr_ptrs_pair.inl"
|
||||
#define PAIR(name, unused) add_ptr(#name);
|
||||
FOREACH_SYMBOL(PAIR);
|
||||
#undef PAIR
|
||||
|
||||
// Only do this lookup once.
|
||||
@@ -66,105 +68,75 @@ static void DoSetupWithInstance(VkInstance instance) {
|
||||
}
|
||||
}
|
||||
|
||||
static void UNPACKFUNC(vkGetDeviceProcAddr)(void *argsv){
|
||||
struct arg_t {VkDevice a_0;const char* a_1;PFN_vkVoidFunction rv;};
|
||||
auto args = (arg_t*)argsv;
|
||||
#define FEXFN_IMPL3(a, b, c) a##_##b##_##c
|
||||
#define FEXFN_IMPL2(a, b) FEXFN_IMPL3(fexfn_impl, a, b)
|
||||
#define FEXFN_IMPL(fn) FEXFN_IMPL2(LIBLIB_NAME, fn)
|
||||
|
||||
static PFN_vkVoidFunction FEXFN_IMPL(vkGetDeviceProcAddr)(VkDevice a_0, const char* a_1) {
|
||||
if (!SetupDev) {
|
||||
DoSetupWithDevice(args->a_0);
|
||||
DoSetupWithDevice(a_0);
|
||||
}
|
||||
|
||||
// Just return the host facing function pointer
|
||||
// The guest will handle mapping if this exists
|
||||
args->rv =
|
||||
LDR_PTR(vkGetDeviceProcAddr)
|
||||
(args->a_0,args->a_1);
|
||||
auto ret = LDR_PTR(vkGetDeviceProcAddr)(a_0, a_1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void UNPACKFUNC(vkGetInstanceProcAddr)(void *argsv){
|
||||
struct arg_t {VkInstance a_0;const char* a_1;PFN_vkVoidFunction rv;};
|
||||
auto args = (arg_t*)argsv;
|
||||
|
||||
static PFN_vkVoidFunction FEXFN_IMPL(vkGetInstanceProcAddr)(VkInstance a_0, const char* a_1) {
|
||||
if (!SetupInstance) {
|
||||
DoSetupWithInstance(args->a_0);
|
||||
DoSetupWithInstance(a_0);
|
||||
}
|
||||
|
||||
// Just return the host facing function pointer
|
||||
// The guest will handle mapping if it exists
|
||||
args->rv =
|
||||
LDR_PTR(vkGetInstanceProcAddr)
|
||||
(args->a_0,args->a_1);
|
||||
auto ret = LDR_PTR(vkGetInstanceProcAddr)(a_0, a_1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void UNPACKFUNC(vkCreateShaderModule)(void *argsv){
|
||||
struct arg_t {VkDevice a_0;const VkShaderModuleCreateInfo* a_1;const VkAllocationCallbacks* a_2;VkShaderModule* a_3;VkResult rv;};
|
||||
auto args = (arg_t*)argsv;
|
||||
args->rv =
|
||||
LDR_PTR(vkCreateShaderModule)
|
||||
(args->a_0,args->a_1, nullptr,args->a_3);
|
||||
|
||||
static VkResult FEXFN_IMPL(vkCreateShaderModule)(VkDevice a_0, const VkShaderModuleCreateInfo* a_1, const VkAllocationCallbacks* a_2, VkShaderModule* a_3) {
|
||||
return LDR_PTR(vkCreateShaderModule)(a_0, a_1, nullptr, a_3);
|
||||
}
|
||||
|
||||
static void UNPACKFUNC(vkCmdSetBlendConstants)(void *argsv){
|
||||
struct arg_t {VkCommandBuffer a_0;const float a_1[4];};
|
||||
auto args = (arg_t*)argsv;
|
||||
LDR_PTR(vkCmdSetBlendConstants)
|
||||
(args->a_0,args->a_1);
|
||||
static VkResult FEXFN_IMPL(vkCreateInstance)(const VkInstanceCreateInfo* a_0, const VkAllocationCallbacks* a_1, VkInstance* a_2) {
|
||||
return LDR_PTR(vkCreateInstance)(a_0, nullptr, a_2);
|
||||
}
|
||||
|
||||
static void UNPACKFUNC(vkCreateInstance)(void *argsv){
|
||||
struct arg_t {const VkInstanceCreateInfo* a_0;const VkAllocationCallbacks* a_1;VkInstance* a_2;VkResult rv;};
|
||||
auto args = (arg_t*)argsv;
|
||||
args->rv =
|
||||
LDR_PTR(vkCreateInstance)
|
||||
(args->a_0, nullptr,args->a_2);
|
||||
static VkResult FEXFN_IMPL(vkCreateDevice)(VkPhysicalDevice a_0, const VkDeviceCreateInfo* a_1, const VkAllocationCallbacks* a_2, VkDevice* a_3){
|
||||
return LDR_PTR(vkCreateDevice)(a_0, a_1, nullptr, a_3);
|
||||
}
|
||||
|
||||
static void UNPACKFUNC(vkCreateDevice)(void *argsv){
|
||||
struct arg_t {VkPhysicalDevice a_0;const VkDeviceCreateInfo* a_1;const VkAllocationCallbacks* a_2;VkDevice* a_3;VkResult rv;};
|
||||
auto args = (arg_t*)argsv;
|
||||
args->rv =
|
||||
LDR_PTR(vkCreateDevice)
|
||||
(args->a_0,args->a_1, nullptr,args->a_3);
|
||||
static VkResult FEXFN_IMPL(vkAllocateMemory)(VkDevice a_0, const VkMemoryAllocateInfo* a_1, const VkAllocationCallbacks* a_2, VkDeviceMemory* a_3){
|
||||
return LDR_PTR(vkAllocateMemory)(a_0, a_1, nullptr, a_3);
|
||||
}
|
||||
|
||||
static void UNPACKFUNC(vkAllocateMemory)(void *argsv){
|
||||
struct arg_t {VkDevice a_0;const VkMemoryAllocateInfo* a_1;const VkAllocationCallbacks* a_2;VkDeviceMemory* a_3;VkResult rv;};
|
||||
auto args = (arg_t*)argsv;
|
||||
args->rv =
|
||||
LDR_PTR(vkAllocateMemory)
|
||||
(args->a_0,args->a_1,nullptr,args->a_3);
|
||||
}
|
||||
static void UNPACKFUNC(vkFreeMemory)(void *argsv){
|
||||
struct arg_t {VkDevice a_0;VkDeviceMemory a_1;const VkAllocationCallbacks* a_2;};
|
||||
auto args = (arg_t*)argsv;
|
||||
LDR_PTR(vkFreeMemory)
|
||||
(args->a_0,args->a_1,nullptr);
|
||||
static void FEXFN_IMPL(vkFreeMemory)(VkDevice a_0, VkDeviceMemory a_1, const VkAllocationCallbacks* a_2) {
|
||||
LDR_PTR(vkFreeMemory)(a_0, a_1, nullptr);
|
||||
}
|
||||
|
||||
static void UNPACKFUNC(vkGetPhysicalDeviceSurfaceSupportKHR)(void *argsv){
|
||||
struct arg_t {VkPhysicalDevice a_0;uint32_t a_1;VkSurfaceKHR a_2;VkBool32* a_3;VkResult rv;};
|
||||
auto args = (arg_t*)argsv;
|
||||
args->rv = LDR_PTR(vkGetPhysicalDeviceSurfaceSupportKHR)
|
||||
(args->a_0,args->a_1,args->a_2,args->a_3);
|
||||
}
|
||||
|
||||
#include "function_unpacks.inl"
|
||||
|
||||
static ExportEntry exports[] = {
|
||||
#include "tab_function_unpacks.inl"
|
||||
{ nullptr, nullptr }
|
||||
};
|
||||
|
||||
#include "ldr.inl"
|
||||
|
||||
static void DoSetup() {
|
||||
// Initialize unordered_map from generated initializer-list
|
||||
#define PAIR(name, unused) { #name, (PFN_vkVoidFunction*)&LDR_PTR(name) },
|
||||
PtrsToLookUp = {
|
||||
#define PAIR(name, ptr) { #name, (PFN_vkVoidFunction*)ptr },
|
||||
#include "ldr_ptrs_pair.inl"
|
||||
#undef PAIR
|
||||
FOREACH_SYMBOL(PAIR)
|
||||
};
|
||||
#undef PAIR
|
||||
}
|
||||
|
||||
#include "ldr.inl"
|
||||
|
||||
#define LDR_HANDLE3(a) fexldr_ptr##_##a##_##so
|
||||
#define LDR_HANDLE2(a) LDR_HANDLE3(a)
|
||||
#define LDR_HANDLE LDR_HANDLE2(LIBLIB_NAME)
|
||||
|
||||
static void init_func() {
|
||||
// Initialize some initial pointers that we can get while loading
|
||||
(void*&)LDR_PTR(vkGetInstanceProcAddr) = dlsym(LDR_HANDLE, "vkGetInstanceProcAddr");
|
||||
|
||||
@@ -0,0 +1,431 @@
|
||||
#include <common/GeneratorInterface.h>
|
||||
|
||||
template<auto>
|
||||
struct fex_gen_config;
|
||||
|
||||
#define VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
#define VK_USE_PLATFORM_XLIB_KHR
|
||||
#define VK_USE_PLATFORM_XCB_KHR
|
||||
#define VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
template<> struct fex_gen_config<vkAcquireNextImage2KHR> {};
|
||||
template<> struct fex_gen_config<vkAcquireNextImageKHR> {};
|
||||
template<> struct fex_gen_config<vkAcquirePerformanceConfigurationINTEL> {};
|
||||
template<> struct fex_gen_config<vkAcquireProfilingLockKHR> {};
|
||||
template<> struct fex_gen_config<vkAcquireXlibDisplayEXT> {};
|
||||
template<> struct fex_gen_config<vkAllocateCommandBuffers> {};
|
||||
template<> struct fex_gen_config<vkAllocateDescriptorSets> {};
|
||||
template<> struct fex_gen_config<vkAllocateMemory> : fexgen::custom_host_impl {};
|
||||
template<> struct fex_gen_config<vkBeginCommandBuffer> {};
|
||||
template<> struct fex_gen_config<vkBindAccelerationStructureMemoryNV> {};
|
||||
template<> struct fex_gen_config<vkBindBufferMemory> {};
|
||||
template<> struct fex_gen_config<vkBindBufferMemory2> {};
|
||||
template<> struct fex_gen_config<vkBindBufferMemory2KHR> {};
|
||||
template<> struct fex_gen_config<vkBindImageMemory> {};
|
||||
template<> struct fex_gen_config<vkBindImageMemory2> {};
|
||||
template<> struct fex_gen_config<vkBindImageMemory2KHR> {};
|
||||
template<> struct fex_gen_config<vkBuildAccelerationStructuresKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdBeginConditionalRenderingEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdBeginDebugUtilsLabelEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdBeginQuery> {};
|
||||
template<> struct fex_gen_config<vkCmdBeginQueryIndexedEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdBeginRenderPass> {};
|
||||
template<> struct fex_gen_config<vkCmdBeginRenderPass2> {};
|
||||
template<> struct fex_gen_config<vkCmdBeginRenderPass2KHR> {};
|
||||
template<> struct fex_gen_config<vkCmdBeginTransformFeedbackEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdBindDescriptorSets> {};
|
||||
template<> struct fex_gen_config<vkCmdBindIndexBuffer> {};
|
||||
template<> struct fex_gen_config<vkCmdBindPipeline> {};
|
||||
template<> struct fex_gen_config<vkCmdBindPipelineShaderGroupNV> {};
|
||||
template<> struct fex_gen_config<vkCmdBindShadingRateImageNV> {};
|
||||
template<> struct fex_gen_config<vkCmdBindTransformFeedbackBuffersEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdBindVertexBuffers> {};
|
||||
template<> struct fex_gen_config<vkCmdBindVertexBuffers2EXT> {};
|
||||
template<> struct fex_gen_config<vkCmdBlitImage> {};
|
||||
template<> struct fex_gen_config<vkCmdBlitImage2KHR> {};
|
||||
template<> struct fex_gen_config<vkCmdBuildAccelerationStructureNV> {};
|
||||
template<> struct fex_gen_config<vkCmdBuildAccelerationStructuresIndirectKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdBuildAccelerationStructuresKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdClearAttachments> {};
|
||||
template<> struct fex_gen_config<vkCmdClearColorImage> {};
|
||||
template<> struct fex_gen_config<vkCmdClearDepthStencilImage> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyAccelerationStructureKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyAccelerationStructureNV> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyAccelerationStructureToMemoryKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyBuffer> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyBuffer2KHR> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyBufferToImage> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyBufferToImage2KHR> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyImage> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyImage2KHR> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyImageToBuffer> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyImageToBuffer2KHR> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyMemoryToAccelerationStructureKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdCopyQueryPoolResults> {};
|
||||
template<> struct fex_gen_config<vkCmdDebugMarkerBeginEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdDebugMarkerEndEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdDebugMarkerInsertEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdDispatch> {};
|
||||
template<> struct fex_gen_config<vkCmdDispatchBase> {};
|
||||
template<> struct fex_gen_config<vkCmdDispatchBaseKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdDispatchIndirect> {};
|
||||
template<> struct fex_gen_config<vkCmdDraw> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawIndexed> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawIndexedIndirect> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawIndexedIndirectCount> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawIndexedIndirectCountAMD> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawIndexedIndirectCountKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawIndirect> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawIndirectByteCountEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawIndirectCount> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawIndirectCountAMD> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawIndirectCountKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawMeshTasksIndirectCountNV> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawMeshTasksIndirectNV> {};
|
||||
template<> struct fex_gen_config<vkCmdDrawMeshTasksNV> {};
|
||||
template<> struct fex_gen_config<vkCmdEndConditionalRenderingEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdEndDebugUtilsLabelEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdEndQuery> {};
|
||||
template<> struct fex_gen_config<vkCmdEndQueryIndexedEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdEndRenderPass> {};
|
||||
template<> struct fex_gen_config<vkCmdEndRenderPass2> {};
|
||||
template<> struct fex_gen_config<vkCmdEndRenderPass2KHR> {};
|
||||
template<> struct fex_gen_config<vkCmdEndTransformFeedbackEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdExecuteCommands> {};
|
||||
template<> struct fex_gen_config<vkCmdExecuteGeneratedCommandsNV> {};
|
||||
template<> struct fex_gen_config<vkCmdFillBuffer> {};
|
||||
template<> struct fex_gen_config<vkCmdInsertDebugUtilsLabelEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdNextSubpass> {};
|
||||
template<> struct fex_gen_config<vkCmdNextSubpass2> {};
|
||||
template<> struct fex_gen_config<vkCmdNextSubpass2KHR> {};
|
||||
template<> struct fex_gen_config<vkCmdPipelineBarrier> {};
|
||||
template<> struct fex_gen_config<vkCmdPreprocessGeneratedCommandsNV> {};
|
||||
template<> struct fex_gen_config<vkCmdPushConstants> {};
|
||||
template<> struct fex_gen_config<vkCmdPushDescriptorSetKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdPushDescriptorSetWithTemplateKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdResetEvent> {};
|
||||
template<> struct fex_gen_config<vkCmdResetQueryPool> {};
|
||||
template<> struct fex_gen_config<vkCmdResolveImage> {};
|
||||
template<> struct fex_gen_config<vkCmdResolveImage2KHR> {};
|
||||
template<> struct fex_gen_config<vkCmdSetBlendConstants> {};
|
||||
template<> struct fex_gen_config<vkCmdSetCheckpointNV> {};
|
||||
template<> struct fex_gen_config<vkCmdSetCoarseSampleOrderNV> {};
|
||||
template<> struct fex_gen_config<vkCmdSetCullModeEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetDepthBias> {};
|
||||
template<> struct fex_gen_config<vkCmdSetDepthBounds> {};
|
||||
template<> struct fex_gen_config<vkCmdSetDepthBoundsTestEnableEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetDepthCompareOpEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetDepthTestEnableEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetDepthWriteEnableEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetDeviceMask> {};
|
||||
template<> struct fex_gen_config<vkCmdSetDeviceMaskKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdSetDiscardRectangleEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetEvent> {};
|
||||
template<> struct fex_gen_config<vkCmdSetExclusiveScissorNV> {};
|
||||
template<> struct fex_gen_config<vkCmdSetFragmentShadingRateEnumNV> {};
|
||||
template<> struct fex_gen_config<vkCmdSetFragmentShadingRateKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdSetFrontFaceEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetLineStippleEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetLineWidth> {};
|
||||
template<> struct fex_gen_config<vkCmdSetPerformanceMarkerINTEL> {};
|
||||
template<> struct fex_gen_config<vkCmdSetPerformanceOverrideINTEL> {};
|
||||
template<> struct fex_gen_config<vkCmdSetPerformanceStreamMarkerINTEL> {};
|
||||
template<> struct fex_gen_config<vkCmdSetPrimitiveTopologyEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetRayTracingPipelineStackSizeKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdSetSampleLocationsEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetScissor> {};
|
||||
template<> struct fex_gen_config<vkCmdSetScissorWithCountEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetStencilCompareMask> {};
|
||||
template<> struct fex_gen_config<vkCmdSetStencilOpEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetStencilReference> {};
|
||||
template<> struct fex_gen_config<vkCmdSetStencilTestEnableEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetStencilWriteMask> {};
|
||||
template<> struct fex_gen_config<vkCmdSetViewport> {};
|
||||
template<> struct fex_gen_config<vkCmdSetViewportShadingRatePaletteNV> {};
|
||||
template<> struct fex_gen_config<vkCmdSetViewportWithCountEXT> {};
|
||||
template<> struct fex_gen_config<vkCmdSetViewportWScalingNV> {};
|
||||
template<> struct fex_gen_config<vkCmdTraceRaysIndirectKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdTraceRaysKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdTraceRaysNV> {};
|
||||
template<> struct fex_gen_config<vkCmdUpdateBuffer> {};
|
||||
template<> struct fex_gen_config<vkCmdWaitEvents> {};
|
||||
template<> struct fex_gen_config<vkCmdWriteAccelerationStructuresPropertiesKHR> {};
|
||||
template<> struct fex_gen_config<vkCmdWriteAccelerationStructuresPropertiesNV> {};
|
||||
template<> struct fex_gen_config<vkCmdWriteBufferMarkerAMD> {};
|
||||
template<> struct fex_gen_config<vkCmdWriteTimestamp> {};
|
||||
template<> struct fex_gen_config<vkCompileDeferredNV> {};
|
||||
template<> struct fex_gen_config<vkCopyAccelerationStructureKHR> {};
|
||||
template<> struct fex_gen_config<vkCopyAccelerationStructureToMemoryKHR> {};
|
||||
template<> struct fex_gen_config<vkCopyMemoryToAccelerationStructureKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateAccelerationStructureKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateAccelerationStructureNV> {};
|
||||
template<> struct fex_gen_config<vkCreateBuffer> {};
|
||||
template<> struct fex_gen_config<vkCreateBufferView> {};
|
||||
template<> struct fex_gen_config<vkCreateCommandPool> {};
|
||||
template<> struct fex_gen_config<vkCreateComputePipelines> {};
|
||||
template<> struct fex_gen_config<vkCreateDebugReportCallbackEXT> {};
|
||||
template<> struct fex_gen_config<vkCreateDebugUtilsMessengerEXT> {};
|
||||
template<> struct fex_gen_config<vkCreateDeferredOperationKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateDescriptorPool> {};
|
||||
template<> struct fex_gen_config<vkCreateDescriptorSetLayout> {};
|
||||
template<> struct fex_gen_config<vkCreateDescriptorUpdateTemplate> {};
|
||||
template<> struct fex_gen_config<vkCreateDescriptorUpdateTemplateKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateDevice> : fexgen::custom_host_impl {};
|
||||
template<> struct fex_gen_config<vkCreateDisplayModeKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateDisplayPlaneSurfaceKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateEvent> {};
|
||||
template<> struct fex_gen_config<vkCreateFence> {};
|
||||
template<> struct fex_gen_config<vkCreateFramebuffer> {};
|
||||
template<> struct fex_gen_config<vkCreateGraphicsPipelines> {};
|
||||
template<> struct fex_gen_config<vkCreateHeadlessSurfaceEXT> {};
|
||||
template<> struct fex_gen_config<vkCreateImage> {};
|
||||
template<> struct fex_gen_config<vkCreateImageView> {};
|
||||
template<> struct fex_gen_config<vkCreateIndirectCommandsLayoutNV> {};
|
||||
template<> struct fex_gen_config<vkCreateInstance> : fexgen::custom_host_impl {};
|
||||
template<> struct fex_gen_config<vkCreatePipelineCache> {};
|
||||
template<> struct fex_gen_config<vkCreatePipelineLayout> {};
|
||||
template<> struct fex_gen_config<vkCreatePrivateDataSlotEXT> {};
|
||||
template<> struct fex_gen_config<vkCreateQueryPool> {};
|
||||
template<> struct fex_gen_config<vkCreateRayTracingPipelinesKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateRayTracingPipelinesNV> {};
|
||||
template<> struct fex_gen_config<vkCreateRenderPass> {};
|
||||
template<> struct fex_gen_config<vkCreateRenderPass2> {};
|
||||
template<> struct fex_gen_config<vkCreateRenderPass2KHR> {};
|
||||
template<> struct fex_gen_config<vkCreateSampler> {};
|
||||
template<> struct fex_gen_config<vkCreateSamplerYcbcrConversion> {};
|
||||
template<> struct fex_gen_config<vkCreateSamplerYcbcrConversionKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateSemaphore> {};
|
||||
template<> struct fex_gen_config<vkCreateShaderModule> : fexgen::custom_host_impl {};
|
||||
template<> struct fex_gen_config<vkCreateSharedSwapchainsKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateSwapchainKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateValidationCacheEXT> {};
|
||||
template<> struct fex_gen_config<vkCreateWaylandSurfaceKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateXcbSurfaceKHR> {};
|
||||
template<> struct fex_gen_config<vkCreateXlibSurfaceKHR> {};
|
||||
template<> struct fex_gen_config<vkDebugMarkerSetObjectNameEXT> {};
|
||||
template<> struct fex_gen_config<vkDebugMarkerSetObjectTagEXT> {};
|
||||
template<> struct fex_gen_config<vkDebugReportMessageEXT> {};
|
||||
template<> struct fex_gen_config<vkDeferredOperationJoinKHR> {};
|
||||
template<> struct fex_gen_config<vkDestroyAccelerationStructureKHR> {};
|
||||
template<> struct fex_gen_config<vkDestroyAccelerationStructureNV> {};
|
||||
template<> struct fex_gen_config<vkDestroyBuffer> {};
|
||||
template<> struct fex_gen_config<vkDestroyBufferView> {};
|
||||
template<> struct fex_gen_config<vkDestroyCommandPool> {};
|
||||
template<> struct fex_gen_config<vkDestroyDebugReportCallbackEXT> {};
|
||||
template<> struct fex_gen_config<vkDestroyDebugUtilsMessengerEXT> {};
|
||||
template<> struct fex_gen_config<vkDestroyDeferredOperationKHR> {};
|
||||
template<> struct fex_gen_config<vkDestroyDescriptorPool> {};
|
||||
template<> struct fex_gen_config<vkDestroyDescriptorSetLayout> {};
|
||||
template<> struct fex_gen_config<vkDestroyDescriptorUpdateTemplate> {};
|
||||
template<> struct fex_gen_config<vkDestroyDescriptorUpdateTemplateKHR> {};
|
||||
template<> struct fex_gen_config<vkDestroyDevice> {};
|
||||
template<> struct fex_gen_config<vkDestroyEvent> {};
|
||||
template<> struct fex_gen_config<vkDestroyFence> {};
|
||||
template<> struct fex_gen_config<vkDestroyFramebuffer> {};
|
||||
template<> struct fex_gen_config<vkDestroyImage> {};
|
||||
template<> struct fex_gen_config<vkDestroyImageView> {};
|
||||
template<> struct fex_gen_config<vkDestroyIndirectCommandsLayoutNV> {};
|
||||
template<> struct fex_gen_config<vkDestroyInstance> {};
|
||||
template<> struct fex_gen_config<vkDestroyPipeline> {};
|
||||
template<> struct fex_gen_config<vkDestroyPipelineCache> {};
|
||||
template<> struct fex_gen_config<vkDestroyPipelineLayout> {};
|
||||
template<> struct fex_gen_config<vkDestroyPrivateDataSlotEXT> {};
|
||||
template<> struct fex_gen_config<vkDestroyQueryPool> {};
|
||||
template<> struct fex_gen_config<vkDestroyRenderPass> {};
|
||||
template<> struct fex_gen_config<vkDestroySampler> {};
|
||||
template<> struct fex_gen_config<vkDestroySamplerYcbcrConversion> {};
|
||||
template<> struct fex_gen_config<vkDestroySamplerYcbcrConversionKHR> {};
|
||||
template<> struct fex_gen_config<vkDestroySemaphore> {};
|
||||
template<> struct fex_gen_config<vkDestroyShaderModule> {};
|
||||
template<> struct fex_gen_config<vkDestroySurfaceKHR> {};
|
||||
template<> struct fex_gen_config<vkDestroySwapchainKHR> {};
|
||||
template<> struct fex_gen_config<vkDestroyValidationCacheEXT> {};
|
||||
template<> struct fex_gen_config<vkDeviceWaitIdle> {};
|
||||
template<> struct fex_gen_config<vkDisplayPowerControlEXT> {};
|
||||
template<> struct fex_gen_config<vkEndCommandBuffer> {};
|
||||
template<> struct fex_gen_config<vkEnumerateDeviceExtensionProperties> {};
|
||||
template<> struct fex_gen_config<vkEnumerateDeviceLayerProperties> {};
|
||||
template<> struct fex_gen_config<vkEnumerateInstanceExtensionProperties> {};
|
||||
template<> struct fex_gen_config<vkEnumerateInstanceLayerProperties> {};
|
||||
template<> struct fex_gen_config<vkEnumerateInstanceVersion> {};
|
||||
template<> struct fex_gen_config<vkEnumeratePhysicalDeviceGroups> {};
|
||||
template<> struct fex_gen_config<vkEnumeratePhysicalDeviceGroupsKHR> {};
|
||||
template<> struct fex_gen_config<vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR> {};
|
||||
template<> struct fex_gen_config<vkEnumeratePhysicalDevices> {};
|
||||
template<> struct fex_gen_config<vkFlushMappedMemoryRanges> {};
|
||||
template<> struct fex_gen_config<vkFreeCommandBuffers> {};
|
||||
template<> struct fex_gen_config<vkFreeDescriptorSets> {};
|
||||
template<> struct fex_gen_config<vkFreeMemory> : fexgen::custom_host_impl {};
|
||||
template<> struct fex_gen_config<vkGetAccelerationStructureBuildSizesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetAccelerationStructureDeviceAddressKHR> {};
|
||||
template<> struct fex_gen_config<vkGetAccelerationStructureHandleNV> {};
|
||||
template<> struct fex_gen_config<vkGetAccelerationStructureMemoryRequirementsNV> {};
|
||||
template<> struct fex_gen_config<vkGetBufferDeviceAddress> {};
|
||||
template<> struct fex_gen_config<vkGetBufferDeviceAddressEXT> {};
|
||||
template<> struct fex_gen_config<vkGetBufferDeviceAddressKHR> {};
|
||||
template<> struct fex_gen_config<vkGetBufferMemoryRequirements> {};
|
||||
template<> struct fex_gen_config<vkGetBufferMemoryRequirements2> {};
|
||||
template<> struct fex_gen_config<vkGetBufferMemoryRequirements2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetBufferOpaqueCaptureAddress> {};
|
||||
template<> struct fex_gen_config<vkGetBufferOpaqueCaptureAddressKHR> {};
|
||||
template<> struct fex_gen_config<vkGetCalibratedTimestampsEXT> {};
|
||||
template<> struct fex_gen_config<vkGetDeferredOperationMaxConcurrencyKHR> {};
|
||||
template<> struct fex_gen_config<vkGetDeferredOperationResultKHR> {};
|
||||
template<> struct fex_gen_config<vkGetDescriptorSetLayoutSupport> {};
|
||||
template<> struct fex_gen_config<vkGetDescriptorSetLayoutSupportKHR> {};
|
||||
template<> struct fex_gen_config<vkGetDeviceAccelerationStructureCompatibilityKHR> {};
|
||||
template<> struct fex_gen_config<vkGetDeviceGroupPeerMemoryFeatures> {};
|
||||
template<> struct fex_gen_config<vkGetDeviceGroupPeerMemoryFeaturesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetDeviceGroupPresentCapabilitiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetDeviceGroupSurfacePresentModesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetDeviceMemoryCommitment> {};
|
||||
template<> struct fex_gen_config<vkGetDeviceMemoryOpaqueCaptureAddress> {};
|
||||
template<> struct fex_gen_config<vkGetDeviceMemoryOpaqueCaptureAddressKHR> {};
|
||||
template<> struct fex_gen_config<vkGetDeviceProcAddr> : fexgen::custom_host_impl, fexgen::custom_guest_entrypoint, fexgen::returns_guest_pointer {};
|
||||
template<> struct fex_gen_config<vkGetDeviceQueue> {};
|
||||
template<> struct fex_gen_config<vkGetDeviceQueue2> {};
|
||||
template<> struct fex_gen_config<vkGetDisplayModeProperties2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetDisplayModePropertiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetDisplayPlaneCapabilities2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetDisplayPlaneCapabilitiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetDisplayPlaneSupportedDisplaysKHR> {};
|
||||
template<> struct fex_gen_config<vkGetEventStatus> {};
|
||||
template<> struct fex_gen_config<vkGetFenceFdKHR> {};
|
||||
template<> struct fex_gen_config<vkGetFenceStatus> {};
|
||||
template<> struct fex_gen_config<vkGetGeneratedCommandsMemoryRequirementsNV> {};
|
||||
template<> struct fex_gen_config<vkGetImageDrmFormatModifierPropertiesEXT> {};
|
||||
template<> struct fex_gen_config<vkGetImageMemoryRequirements> {};
|
||||
template<> struct fex_gen_config<vkGetImageMemoryRequirements2> {};
|
||||
template<> struct fex_gen_config<vkGetImageMemoryRequirements2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetImageSparseMemoryRequirements> {};
|
||||
template<> struct fex_gen_config<vkGetImageSparseMemoryRequirements2> {};
|
||||
template<> struct fex_gen_config<vkGetImageSparseMemoryRequirements2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetImageSubresourceLayout> {};
|
||||
template<> struct fex_gen_config<vkGetImageViewAddressNVX> {};
|
||||
template<> struct fex_gen_config<vkGetImageViewHandleNVX> {};
|
||||
template<> struct fex_gen_config<vkGetInstanceProcAddr> : fexgen::custom_host_impl, fexgen::custom_guest_entrypoint, fexgen::returns_guest_pointer {};
|
||||
template<> struct fex_gen_config<vkGetMemoryFdKHR> {};
|
||||
template<> struct fex_gen_config<vkGetMemoryFdPropertiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetMemoryHostPointerPropertiesEXT> {};
|
||||
template<> struct fex_gen_config<vkGetPastPresentationTimingGOOGLE> {};
|
||||
template<> struct fex_gen_config<vkGetPerformanceParameterINTEL> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceCalibrateableTimeDomainsEXT> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceCooperativeMatrixPropertiesNV> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceDisplayPlaneProperties2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceDisplayPlanePropertiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceDisplayProperties2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceDisplayPropertiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceExternalBufferProperties> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceExternalBufferPropertiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceExternalFenceProperties> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceExternalFencePropertiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceExternalImageFormatPropertiesNV> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceExternalSemaphoreProperties> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceExternalSemaphorePropertiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceFeatures> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceFeatures2> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceFeatures2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceFormatProperties> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceFormatProperties2> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceFormatProperties2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceFragmentShadingRatesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceImageFormatProperties> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceImageFormatProperties2> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceImageFormatProperties2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceMemoryProperties> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceMemoryProperties2> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceMemoryProperties2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceMultisamplePropertiesEXT> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDevicePresentRectanglesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceProperties> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceProperties2> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceProperties2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceQueueFamilyProperties> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceQueueFamilyProperties2> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceQueueFamilyProperties2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSparseImageFormatProperties> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSparseImageFormatProperties2> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSparseImageFormatProperties2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSurfaceCapabilities2EXT> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSurfaceCapabilities2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSurfaceCapabilitiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSurfaceFormats2KHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSurfaceFormatsKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSurfacePresentModesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceSurfaceSupportKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceToolPropertiesEXT> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceWaylandPresentationSupportKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceXcbPresentationSupportKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPhysicalDeviceXlibPresentationSupportKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPipelineCacheData> {};
|
||||
template<> struct fex_gen_config<vkGetPipelineExecutableInternalRepresentationsKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPipelineExecutablePropertiesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPipelineExecutableStatisticsKHR> {};
|
||||
template<> struct fex_gen_config<vkGetPrivateDataEXT> {};
|
||||
template<> struct fex_gen_config<vkGetQueryPoolResults> {};
|
||||
template<> struct fex_gen_config<vkGetQueueCheckpointDataNV> {};
|
||||
template<> struct fex_gen_config<vkGetRandROutputDisplayEXT> {};
|
||||
template<> struct fex_gen_config<vkGetRayTracingCaptureReplayShaderGroupHandlesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetRayTracingShaderGroupHandlesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetRayTracingShaderGroupHandlesNV> {};
|
||||
template<> struct fex_gen_config<vkGetRayTracingShaderGroupStackSizeKHR> {};
|
||||
template<> struct fex_gen_config<vkGetRefreshCycleDurationGOOGLE> {};
|
||||
template<> struct fex_gen_config<vkGetRenderAreaGranularity> {};
|
||||
template<> struct fex_gen_config<vkGetSemaphoreCounterValue> {};
|
||||
template<> struct fex_gen_config<vkGetSemaphoreCounterValueKHR> {};
|
||||
template<> struct fex_gen_config<vkGetSemaphoreFdKHR> {};
|
||||
template<> struct fex_gen_config<vkGetShaderInfoAMD> {};
|
||||
template<> struct fex_gen_config<vkGetSwapchainCounterEXT> {};
|
||||
template<> struct fex_gen_config<vkGetSwapchainImagesKHR> {};
|
||||
template<> struct fex_gen_config<vkGetSwapchainStatusKHR> {};
|
||||
template<> struct fex_gen_config<vkGetValidationCacheDataEXT> {};
|
||||
template<> struct fex_gen_config<vkImportFenceFdKHR> {};
|
||||
template<> struct fex_gen_config<vkImportSemaphoreFdKHR> {};
|
||||
template<> struct fex_gen_config<vkInitializePerformanceApiINTEL> {};
|
||||
template<> struct fex_gen_config<vkInvalidateMappedMemoryRanges> {};
|
||||
template<> struct fex_gen_config<vkMapMemory> {};
|
||||
template<> struct fex_gen_config<vkMergePipelineCaches> {};
|
||||
template<> struct fex_gen_config<vkMergeValidationCachesEXT> {};
|
||||
template<> struct fex_gen_config<vkQueueBeginDebugUtilsLabelEXT> {};
|
||||
template<> struct fex_gen_config<vkQueueBindSparse> {};
|
||||
template<> struct fex_gen_config<vkQueueEndDebugUtilsLabelEXT> {};
|
||||
template<> struct fex_gen_config<vkQueueInsertDebugUtilsLabelEXT> {};
|
||||
template<> struct fex_gen_config<vkQueuePresentKHR> {};
|
||||
template<> struct fex_gen_config<vkQueueSetPerformanceConfigurationINTEL> {};
|
||||
template<> struct fex_gen_config<vkQueueSubmit> {};
|
||||
template<> struct fex_gen_config<vkQueueWaitIdle> {};
|
||||
template<> struct fex_gen_config<vkRegisterDeviceEventEXT> {};
|
||||
template<> struct fex_gen_config<vkRegisterDisplayEventEXT> {};
|
||||
template<> struct fex_gen_config<vkReleaseDisplayEXT> {};
|
||||
template<> struct fex_gen_config<vkReleasePerformanceConfigurationINTEL> {};
|
||||
template<> struct fex_gen_config<vkReleaseProfilingLockKHR> {};
|
||||
template<> struct fex_gen_config<vkResetCommandBuffer> {};
|
||||
template<> struct fex_gen_config<vkResetCommandPool> {};
|
||||
template<> struct fex_gen_config<vkResetDescriptorPool> {};
|
||||
template<> struct fex_gen_config<vkResetEvent> {};
|
||||
template<> struct fex_gen_config<vkResetFences> {};
|
||||
template<> struct fex_gen_config<vkResetQueryPool> {};
|
||||
template<> struct fex_gen_config<vkResetQueryPoolEXT> {};
|
||||
template<> struct fex_gen_config<vkSetDebugUtilsObjectNameEXT> {};
|
||||
template<> struct fex_gen_config<vkSetDebugUtilsObjectTagEXT> {};
|
||||
template<> struct fex_gen_config<vkSetEvent> {};
|
||||
template<> struct fex_gen_config<vkSetHdrMetadataEXT> {};
|
||||
template<> struct fex_gen_config<vkSetLocalDimmingAMD> {};
|
||||
template<> struct fex_gen_config<vkSetPrivateDataEXT> {};
|
||||
template<> struct fex_gen_config<vkSignalSemaphore> {};
|
||||
template<> struct fex_gen_config<vkSignalSemaphoreKHR> {};
|
||||
template<> struct fex_gen_config<vkSubmitDebugUtilsMessageEXT> {};
|
||||
template<> struct fex_gen_config<vkTrimCommandPool> {};
|
||||
template<> struct fex_gen_config<vkTrimCommandPoolKHR> {};
|
||||
template<> struct fex_gen_config<vkUninitializePerformanceApiINTEL> {};
|
||||
template<> struct fex_gen_config<vkUnmapMemory> {};
|
||||
template<> struct fex_gen_config<vkUpdateDescriptorSets> {};
|
||||
template<> struct fex_gen_config<vkUpdateDescriptorSetWithTemplate> {};
|
||||
template<> struct fex_gen_config<vkUpdateDescriptorSetWithTemplateKHR> {};
|
||||
template<> struct fex_gen_config<vkWaitForFences> {};
|
||||
template<> struct fex_gen_config<vkWaitSemaphores> {};
|
||||
template<> struct fex_gen_config<vkWaitSemaphoresKHR> {};
|
||||
template<> struct fex_gen_config<vkWriteAccelerationStructuresPropertiesKHR> {};
|
||||
Reference in new issue
Block a user