Browse Source

external: update generated Vulkan headers for new global function in 1.1.

See https://github.com/mosra/flextgl/issues/18 for a detailed
discussion.
pull/280/head
Vladimír Vondruš 8 years ago
parent
commit
61d0ad9c7c
  1. 7
      src/MagnumExternal/Vulkan/flextVk.cpp
  2. 26
      src/MagnumExternal/Vulkan/flextVk.cpp.template
  3. 9
      src/MagnumExternal/Vulkan/flextVk.h
  4. 19
      src/MagnumExternal/Vulkan/flextVk.h.template
  5. 1
      src/MagnumExternal/Vulkan/flextVkGlobal.h
  6. 2
      src/MagnumExternal/Vulkan/flextVkGlobal.h.template

7
src/MagnumExternal/Vulkan/flextVk.cpp vendored

@ -26,10 +26,16 @@
#include "flextVk.h"
#include "flextVkGlobal.h"
VkResult(VKAPI_PTR *flextvkEnumerateInstanceVersion)(uint32_t*) = nullptr;
FlextVkInstance flextVkInstance{};
FlextVkDevice flextVkDevice{};
void flextVkInit() {
flextvkEnumerateInstanceVersion = reinterpret_cast<VkResult(*)(uint32_t*)>(vkGetInstanceProcAddr(nullptr, "vkEnumerateInstanceVersion"));
}
void flextVkInitInstance(VkInstance instance, FlextVkInstance* data) {
data->GetPhysicalDevicePresentRectanglesKHR = reinterpret_cast<VkResult(VKAPI_PTR*)(VkPhysicalDevice, VkSurfaceKHR, uint32_t*, VkRect2D*)>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDevicePresentRectanglesKHR"));
data->EnumeratePhysicalDeviceGroupsKHR = reinterpret_cast<VkResult(VKAPI_PTR*)(VkInstance, uint32_t*, VkPhysicalDeviceGroupProperties*)>(vkGetInstanceProcAddr(instance, "vkEnumeratePhysicalDeviceGroupsKHR"));
@ -217,7 +223,6 @@ void flextVkInitDevice(VkDevice device, FlextVkDevice* data, PFN_vkVoidFunction(
data->CreateSamplerYcbcrConversion = reinterpret_cast<VkResult(VKAPI_PTR*)(VkDevice, const VkSamplerYcbcrConversionCreateInfo*, const VkAllocationCallbacks*, VkSamplerYcbcrConversion*)>(getDeviceProcAddr(device, "vkCreateSamplerYcbcrConversion"));
data->DestroyDescriptorUpdateTemplate = reinterpret_cast<void(VKAPI_PTR*)(VkDevice, VkDescriptorUpdateTemplate, const VkAllocationCallbacks*)>(getDeviceProcAddr(device, "vkDestroyDescriptorUpdateTemplate"));
data->DestroySamplerYcbcrConversion = reinterpret_cast<void(VKAPI_PTR*)(VkDevice, VkSamplerYcbcrConversion, const VkAllocationCallbacks*)>(getDeviceProcAddr(device, "vkDestroySamplerYcbcrConversion"));
data->EnumerateInstanceVersion = reinterpret_cast<VkResult(VKAPI_PTR*)(uint32_t*)>(getDeviceProcAddr(device, "vkEnumerateInstanceVersion"));
data->GetBufferMemoryRequirements2 = reinterpret_cast<void(VKAPI_PTR*)(VkDevice, const VkBufferMemoryRequirementsInfo2*, VkMemoryRequirements2*)>(getDeviceProcAddr(device, "vkGetBufferMemoryRequirements2"));
data->GetDescriptorSetLayoutSupport = reinterpret_cast<void(VKAPI_PTR*)(VkDevice, const VkDescriptorSetLayoutCreateInfo*, VkDescriptorSetLayoutSupport*)>(getDeviceProcAddr(device, "vkGetDescriptorSetLayoutSupport"));
data->GetDeviceGroupPeerMemoryFeatures = reinterpret_cast<void(VKAPI_PTR*)(VkDevice, uint32_t, uint32_t, uint32_t, VkPeerMemoryFeatureFlags*)>(getDeviceProcAddr(device, "vkGetDeviceGroupPeerMemoryFeatures"));

26
src/MagnumExternal/Vulkan/flextVk.cpp.template vendored

@ -27,10 +27,34 @@
#include "flextVk.h"
#include "flextVkGlobal.h"
@for category,funcs in functions:
@if funcs:
@for f in funcs:
@if f.name in ['EnumerateInstanceVersion']:
@f.returntype\
(VKAPI_PTR *flextvk@f.name)(@f.param_type_list_string()) = nullptr;
@end
@end
@end
@end
FlextVkInstance flextVkInstance{};
FlextVkDevice flextVkDevice{};
void flextVkInit() {
@for category,funcs in functions:
@if funcs:
@for f in funcs:
@if f.name in ['EnumerateInstanceVersion']:
flextvk@f.name = reinterpret_cast<@f.returntype\
(*)(@f.param_type_list_string())>(vkGetInstanceProcAddr(nullptr, "vk@f.name"));
@end
@end
@end
@end
}
void flextVkInitInstance(VkInstance instance, FlextVkInstance* data) {
@for category,funcs in functions:
@if funcs:
@ -47,7 +71,7 @@ void flextVkInitInstance(VkInstance instance, FlextVkInstance* data) {
void flextVkInitDevice(VkDevice device, FlextVkDevice* data, PFN_vkVoidFunction(VKAPI_PTR *getDeviceProcAddr)(VkDevice, const char*)) {
@for category,funcs in functions:
@for f in funcs:
@if f.params[0][1] not in ['VkInstance', 'VkPhysicalDevice'] and f.name not in ['GetInstanceProcAddr', 'GetDeviceProcAddr', 'EnumerateInstanceExtensionProperties', 'EnumerateInstanceLayerProperties', 'CreateInstance']:
@if f.params[0][1] not in ['VkInstance', 'VkPhysicalDevice'] and f.name not in ['GetInstanceProcAddr', 'GetDeviceProcAddr', 'EnumerateInstanceVersion', 'EnumerateInstanceExtensionProperties', 'EnumerateInstanceLayerProperties', 'CreateInstance']:
data->@f.name = reinterpret_cast<@f.returntype\
(VKAPI_PTR*)(@f.param_type_list_string())>(getDeviceProcAddr(device, "vk@f.name"));
@end

9
src/MagnumExternal/Vulkan/flextVk.h vendored

@ -3292,6 +3292,14 @@ VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char
VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t*, VkLayerProperties*);
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance, const char*);
/* Global function pointers. These are not present in all Vulkan versions, so
they need to be loaded at runtime. */
extern FLEXTVK_EXPORT VkResult(VKAPI_PTR *flextvkEnumerateInstanceVersion)(uint32_t*);
#define vkEnumerateInstanceVersion flextvkEnumerateInstanceVersion
/* Global function pointer initialization */
void FLEXTVK_EXPORT flextVkInit();
/* Per-instance function pointers */
struct FlextVkInstance {
@ -3568,7 +3576,6 @@ struct FlextVkDevice {
VkResult (VKAPI_PTR *CreateSamplerYcbcrConversion)(VkDevice, const VkSamplerYcbcrConversionCreateInfo*, const VkAllocationCallbacks*, VkSamplerYcbcrConversion*);
void (VKAPI_PTR *DestroyDescriptorUpdateTemplate)(VkDevice, VkDescriptorUpdateTemplate, const VkAllocationCallbacks*);
void (VKAPI_PTR *DestroySamplerYcbcrConversion)(VkDevice, VkSamplerYcbcrConversion, const VkAllocationCallbacks*);
VkResult (VKAPI_PTR *EnumerateInstanceVersion)(uint32_t*);
void (VKAPI_PTR *GetBufferMemoryRequirements2)(VkDevice, const VkBufferMemoryRequirementsInfo2*, VkMemoryRequirements2*);
void (VKAPI_PTR *GetDescriptorSetLayoutSupport)(VkDevice, const VkDescriptorSetLayoutCreateInfo*, VkDescriptorSetLayoutSupport*);
void (VKAPI_PTR *GetDeviceGroupPeerMemoryFeatures)(VkDevice, uint32_t, uint32_t, uint32_t, VkPeerMemoryFeatureFlags*);

19
src/MagnumExternal/Vulkan/flextVk.h.template vendored

@ -106,6 +106,23 @@ VKAPI_ATTR @f.returntype VKAPI_CALL vk@f.name\
@end
@end
/* Global function pointers. These are not present in all Vulkan versions, so
they need to be loaded at runtime. */
@for cat,funcs in functions:
@if funcs:
@for f in funcs:
@if f.name in ['EnumerateInstanceVersion']:
extern FLEXTVK_EXPORT @f.returntype\
(VKAPI_PTR *flextvk@f.name)(@f.param_type_list_string());
#define vk@f.name flextvk@f.name
@end
@end
@end
@end
/* Global function pointer initialization */
void FLEXTVK_EXPORT flextVkInit();
/* Per-instance function pointers */
struct FlextVkInstance {
@for cat,funcs in functions:
@ -134,7 +151,7 @@ struct FlextVkDevice {
/* VK_@cat */
@for f in funcs:
@if f.params[0][1] not in ['VkInstance', 'VkPhysicalDevice'] and f.name not in ['GetInstanceProcAddr', 'GetDeviceProcAddr', 'EnumerateInstanceExtensionProperties', 'EnumerateInstanceLayerProperties', 'CreateInstance']:
@if f.params[0][1] not in ['VkInstance', 'VkPhysicalDevice'] and f.name not in ['GetInstanceProcAddr', 'GetDeviceProcAddr', 'EnumerateInstanceVersion', 'EnumerateInstanceExtensionProperties', 'EnumerateInstanceLayerProperties', 'CreateInstance']:
@f.returntype\
(VKAPI_PTR *@f.name)(@f.param_type_list_string());
@end

1
src/MagnumExternal/Vulkan/flextVkGlobal.h vendored

@ -305,7 +305,6 @@ extern FLEXTVK_EXPORT FlextVkDevice flextVkDevice;
#define vkCreateSamplerYcbcrConversion flextVkDevice.CreateSamplerYcbcrConversion
#define vkDestroyDescriptorUpdateTemplate flextVkDevice.DestroyDescriptorUpdateTemplate
#define vkDestroySamplerYcbcrConversion flextVkDevice.DestroySamplerYcbcrConversion
#define vkEnumerateInstanceVersion flextVkDevice.EnumerateInstanceVersion
#define vkGetBufferMemoryRequirements2 flextVkDevice.GetBufferMemoryRequirements2
#define vkGetDescriptorSetLayoutSupport flextVkDevice.GetDescriptorSetLayoutSupport
#define vkGetDeviceGroupPeerMemoryFeatures flextVkDevice.GetDeviceGroupPeerMemoryFeatures

2
src/MagnumExternal/Vulkan/flextVkGlobal.h.template vendored

@ -57,7 +57,7 @@ extern FLEXTVK_EXPORT FlextVkDevice flextVkDevice;
/* VK_@cat */
@for f in funcs:
@if f.params[0][1] not in ['VkInstance', 'VkPhysicalDevice'] and f.name not in ['GetInstanceProcAddr', 'GetDeviceProcAddr', 'EnumerateInstanceExtensionProperties', 'EnumerateInstanceLayerProperties', 'CreateInstance']:
@if f.params[0][1] not in ['VkInstance', 'VkPhysicalDevice'] and f.name not in ['GetInstanceProcAddr', 'GetDeviceProcAddr', 'EnumerateInstanceVersion', 'EnumerateInstanceExtensionProperties', 'EnumerateInstanceLayerProperties', 'CreateInstance']:
#define vk@f.name flextVkDevice.@f.name
@end
@end

Loading…
Cancel
Save