Add static Vulkan loader.
Initial Vulkan support for Windows. Initial Vulkan support for macOS.
This commit is contained in:
207
thirdparty/vulkan/LICENSE.txt
vendored
Executable file
207
thirdparty/vulkan/LICENSE.txt
vendored
Executable file
@ -0,0 +1,207 @@
|
||||
The majority of files in this project use the Apache 2.0 License.
|
||||
There are a few exceptions and their license can be found in the source.
|
||||
Any license deviations from Apache 2.0 are "more permissive" licenses.
|
||||
|
||||
===========================================================================================
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
175
thirdparty/vulkan/include/vulkan/vk_icd.h
vendored
Normal file
175
thirdparty/vulkan/include/vulkan/vk_icd.h
vendored
Normal file
@ -0,0 +1,175 @@
|
||||
//
|
||||
// File: vk_icd.h
|
||||
//
|
||||
/*
|
||||
* Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2016 Valve Corporation
|
||||
* Copyright (c) 2015-2016 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef VKICD_H
|
||||
#define VKICD_H
|
||||
|
||||
#include "vulkan.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
// Loader-ICD version negotiation API. Versions add the following features:
|
||||
// Version 0 - Initial. Doesn't support vk_icdGetInstanceProcAddr
|
||||
// or vk_icdNegotiateLoaderICDInterfaceVersion.
|
||||
// Version 1 - Add support for vk_icdGetInstanceProcAddr.
|
||||
// Version 2 - Add Loader/ICD Interface version negotiation
|
||||
// via vk_icdNegotiateLoaderICDInterfaceVersion.
|
||||
// Version 3 - Add ICD creation/destruction of KHR_surface objects.
|
||||
// Version 4 - Add unknown physical device extension qyering via
|
||||
// vk_icdGetPhysicalDeviceProcAddr.
|
||||
// Version 5 - Tells ICDs that the loader is now paying attention to the
|
||||
// application version of Vulkan passed into the ApplicationInfo
|
||||
// structure during vkCreateInstance. This will tell the ICD
|
||||
// that if the loader is older, it should automatically fail a
|
||||
// call for any API version > 1.0. Otherwise, the loader will
|
||||
// manually determine if it can support the expected version.
|
||||
#define CURRENT_LOADER_ICD_INTERFACE_VERSION 5
|
||||
#define MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION 0
|
||||
#define MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION 4
|
||||
typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion);
|
||||
|
||||
// This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this
|
||||
// file directly, it won't be found.
|
||||
#ifndef PFN_GetPhysicalDeviceProcAddr
|
||||
typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The ICD must reserve space for a pointer for the loader's dispatch
|
||||
* table, at the start of <each object>.
|
||||
* The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro.
|
||||
*/
|
||||
|
||||
#define ICD_LOADER_MAGIC 0x01CDC0DE
|
||||
|
||||
typedef union {
|
||||
uintptr_t loaderMagic;
|
||||
void *loaderData;
|
||||
} VK_LOADER_DATA;
|
||||
|
||||
static inline void set_loader_magic_value(void *pNewObject) {
|
||||
VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
|
||||
loader_info->loaderMagic = ICD_LOADER_MAGIC;
|
||||
}
|
||||
|
||||
static inline bool valid_loader_magic_value(void *pNewObject) {
|
||||
const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
|
||||
return (loader_info->loaderMagic & 0xffffffff) == ICD_LOADER_MAGIC;
|
||||
}
|
||||
|
||||
/*
|
||||
* Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that
|
||||
* contains the platform-specific connection and surface information.
|
||||
*/
|
||||
typedef enum {
|
||||
VK_ICD_WSI_PLATFORM_MIR,
|
||||
VK_ICD_WSI_PLATFORM_WAYLAND,
|
||||
VK_ICD_WSI_PLATFORM_WIN32,
|
||||
VK_ICD_WSI_PLATFORM_XCB,
|
||||
VK_ICD_WSI_PLATFORM_XLIB,
|
||||
VK_ICD_WSI_PLATFORM_ANDROID,
|
||||
VK_ICD_WSI_PLATFORM_MACOS,
|
||||
VK_ICD_WSI_PLATFORM_IOS,
|
||||
VK_ICD_WSI_PLATFORM_DISPLAY,
|
||||
VK_ICD_WSI_PLATFORM_HEADLESS
|
||||
} VkIcdWsiPlatform;
|
||||
|
||||
typedef struct {
|
||||
VkIcdWsiPlatform platform;
|
||||
} VkIcdSurfaceBase;
|
||||
|
||||
#ifdef VK_USE_PLATFORM_MIR_KHR
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
MirConnection *connection;
|
||||
MirSurface *mirSurface;
|
||||
} VkIcdSurfaceMir;
|
||||
#endif // VK_USE_PLATFORM_MIR_KHR
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
struct wl_display *display;
|
||||
struct wl_surface *surface;
|
||||
} VkIcdSurfaceWayland;
|
||||
#endif // VK_USE_PLATFORM_WAYLAND_KHR
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
HINSTANCE hinstance;
|
||||
HWND hwnd;
|
||||
} VkIcdSurfaceWin32;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
xcb_connection_t *connection;
|
||||
xcb_window_t window;
|
||||
} VkIcdSurfaceXcb;
|
||||
#endif // VK_USE_PLATFORM_XCB_KHR
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
Display *dpy;
|
||||
Window window;
|
||||
} VkIcdSurfaceXlib;
|
||||
#endif // VK_USE_PLATFORM_XLIB_KHR
|
||||
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
struct ANativeWindow *window;
|
||||
} VkIcdSurfaceAndroid;
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
|
||||
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
const void *pView;
|
||||
} VkIcdSurfaceMacOS;
|
||||
#endif // VK_USE_PLATFORM_MACOS_MVK
|
||||
|
||||
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
const void *pView;
|
||||
} VkIcdSurfaceIOS;
|
||||
#endif // VK_USE_PLATFORM_IOS_MVK
|
||||
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
VkDisplayModeKHR displayMode;
|
||||
uint32_t planeIndex;
|
||||
uint32_t planeStackIndex;
|
||||
VkSurfaceTransformFlagBitsKHR transform;
|
||||
float globalAlpha;
|
||||
VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
|
||||
VkExtent2D imageExtent;
|
||||
} VkIcdSurfaceDisplay;
|
||||
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
} VkIcdSurfaceHeadless;
|
||||
|
||||
#endif // VKICD_H
|
||||
202
thirdparty/vulkan/include/vulkan/vk_layer.h
vendored
Normal file
202
thirdparty/vulkan/include/vulkan/vk_layer.h
vendored
Normal file
@ -0,0 +1,202 @@
|
||||
//
|
||||
// File: vk_layer.h
|
||||
//
|
||||
/*
|
||||
* Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2017 Valve Corporation
|
||||
* Copyright (c) 2015-2017 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Need to define dispatch table
|
||||
* Core struct can then have ptr to dispatch table at the top
|
||||
* Along with object ptrs for current and next OBJ
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "vulkan.h"
|
||||
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||
#define VK_LAYER_EXPORT __attribute__((visibility("default")))
|
||||
#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
|
||||
#define VK_LAYER_EXPORT __attribute__((visibility("default")))
|
||||
#else
|
||||
#define VK_LAYER_EXPORT
|
||||
#endif
|
||||
|
||||
#define MAX_NUM_UNKNOWN_EXTS 250
|
||||
|
||||
// Loader-Layer version negotiation API. Versions add the following features:
|
||||
// Versions 0/1 - Initial. Doesn't support vk_layerGetPhysicalDeviceProcAddr
|
||||
// or vk_icdNegotiateLoaderLayerInterfaceVersion.
|
||||
// Version 2 - Add support for vk_layerGetPhysicalDeviceProcAddr and
|
||||
// vk_icdNegotiateLoaderLayerInterfaceVersion.
|
||||
#define CURRENT_LOADER_LAYER_INTERFACE_VERSION 2
|
||||
#define MIN_SUPPORTED_LOADER_LAYER_INTERFACE_VERSION 1
|
||||
|
||||
#define VK_CURRENT_CHAIN_VERSION 1
|
||||
|
||||
// Typedef for use in the interfaces below
|
||||
typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);
|
||||
|
||||
// Version negotiation values
|
||||
typedef enum VkNegotiateLayerStructType {
|
||||
LAYER_NEGOTIATE_UNINTIALIZED = 0,
|
||||
LAYER_NEGOTIATE_INTERFACE_STRUCT = 1,
|
||||
} VkNegotiateLayerStructType;
|
||||
|
||||
// Version negotiation structures
|
||||
typedef struct VkNegotiateLayerInterface {
|
||||
VkNegotiateLayerStructType sType;
|
||||
void *pNext;
|
||||
uint32_t loaderLayerInterfaceVersion;
|
||||
PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr;
|
||||
PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr;
|
||||
PFN_GetPhysicalDeviceProcAddr pfnGetPhysicalDeviceProcAddr;
|
||||
} VkNegotiateLayerInterface;
|
||||
|
||||
// Version negotiation functions
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkNegotiateLoaderLayerInterfaceVersion)(VkNegotiateLayerInterface *pVersionStruct);
|
||||
|
||||
// Function prototype for unknown physical device extension command
|
||||
typedef VkResult(VKAPI_PTR *PFN_PhysDevExt)(VkPhysicalDevice phys_device);
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// CreateInstance and CreateDevice support structures
|
||||
|
||||
/* Sub type of structure for instance and device loader ext of CreateInfo.
|
||||
* When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
|
||||
* or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
|
||||
* then VkLayerFunction indicates struct type pointed to by pNext
|
||||
*/
|
||||
typedef enum VkLayerFunction_ {
|
||||
VK_LAYER_LINK_INFO = 0,
|
||||
VK_LOADER_DATA_CALLBACK = 1,
|
||||
VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2
|
||||
} VkLayerFunction;
|
||||
|
||||
typedef struct VkLayerInstanceLink_ {
|
||||
struct VkLayerInstanceLink_ *pNext;
|
||||
PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
|
||||
PFN_GetPhysicalDeviceProcAddr pfnNextGetPhysicalDeviceProcAddr;
|
||||
} VkLayerInstanceLink;
|
||||
|
||||
/*
|
||||
* When creating the device chain the loader needs to pass
|
||||
* down information about it's device structure needed at
|
||||
* the end of the chain. Passing the data via the
|
||||
* VkLayerDeviceInfo avoids issues with finding the
|
||||
* exact instance being used.
|
||||
*/
|
||||
typedef struct VkLayerDeviceInfo_ {
|
||||
void *device_info;
|
||||
PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
|
||||
} VkLayerDeviceInfo;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance,
|
||||
void *object);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device,
|
||||
void *object);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkLayerCreateDevice)(VkInstance instance, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA);
|
||||
typedef void (VKAPI_PTR *PFN_vkLayerDestroyDevice)(VkDevice physicalDevice, const VkAllocationCallbacks *pAllocator, PFN_vkDestroyDevice destroyFunction);
|
||||
typedef struct {
|
||||
VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
|
||||
const void *pNext;
|
||||
VkLayerFunction function;
|
||||
union {
|
||||
VkLayerInstanceLink *pLayerInfo;
|
||||
PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData;
|
||||
struct {
|
||||
PFN_vkLayerCreateDevice pfnLayerCreateDevice;
|
||||
PFN_vkLayerDestroyDevice pfnLayerDestroyDevice;
|
||||
} layerDevice;
|
||||
} u;
|
||||
} VkLayerInstanceCreateInfo;
|
||||
|
||||
typedef struct VkLayerDeviceLink_ {
|
||||
struct VkLayerDeviceLink_ *pNext;
|
||||
PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
|
||||
PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr;
|
||||
} VkLayerDeviceLink;
|
||||
|
||||
typedef struct {
|
||||
VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
|
||||
const void *pNext;
|
||||
VkLayerFunction function;
|
||||
union {
|
||||
VkLayerDeviceLink *pLayerInfo;
|
||||
PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData;
|
||||
} u;
|
||||
} VkLayerDeviceCreateInfo;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct);
|
||||
|
||||
typedef enum VkChainType {
|
||||
VK_CHAIN_TYPE_UNKNOWN = 0,
|
||||
VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES = 1,
|
||||
VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES = 2,
|
||||
VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION = 3,
|
||||
} VkChainType;
|
||||
|
||||
typedef struct VkChainHeader {
|
||||
VkChainType type;
|
||||
uint32_t version;
|
||||
uint32_t size;
|
||||
} VkChainHeader;
|
||||
|
||||
typedef struct VkEnumerateInstanceExtensionPropertiesChain {
|
||||
VkChainHeader header;
|
||||
VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceExtensionPropertiesChain *, const char *, uint32_t *,
|
||||
VkExtensionProperties *);
|
||||
const struct VkEnumerateInstanceExtensionPropertiesChain *pNextLink;
|
||||
|
||||
#if defined(__cplusplus)
|
||||
inline VkResult CallDown(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) const {
|
||||
return pfnNextLayer(pNextLink, pLayerName, pPropertyCount, pProperties);
|
||||
}
|
||||
#endif
|
||||
} VkEnumerateInstanceExtensionPropertiesChain;
|
||||
|
||||
typedef struct VkEnumerateInstanceLayerPropertiesChain {
|
||||
VkChainHeader header;
|
||||
VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceLayerPropertiesChain *, uint32_t *, VkLayerProperties *);
|
||||
const struct VkEnumerateInstanceLayerPropertiesChain *pNextLink;
|
||||
|
||||
#if defined(__cplusplus)
|
||||
inline VkResult CallDown(uint32_t *pPropertyCount, VkLayerProperties *pProperties) const {
|
||||
return pfnNextLayer(pNextLink, pPropertyCount, pProperties);
|
||||
}
|
||||
#endif
|
||||
} VkEnumerateInstanceLayerPropertiesChain;
|
||||
|
||||
typedef struct VkEnumerateInstanceVersionChain {
|
||||
VkChainHeader header;
|
||||
VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceVersionChain *, uint32_t *);
|
||||
const struct VkEnumerateInstanceVersionChain *pNextLink;
|
||||
|
||||
#if defined(__cplusplus)
|
||||
inline VkResult CallDown(uint32_t *pApiVersion) const {
|
||||
return pfnNextLayer(pNextLink, pApiVersion);
|
||||
}
|
||||
#endif
|
||||
} VkEnumerateInstanceVersionChain;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
92
thirdparty/vulkan/include/vulkan/vk_platform.h
vendored
Normal file
92
thirdparty/vulkan/include/vulkan/vk_platform.h
vendored
Normal file
@ -0,0 +1,92 @@
|
||||
//
|
||||
// File: vk_platform.h
|
||||
//
|
||||
/*
|
||||
** Copyright (c) 2014-2017 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef VK_PLATFORM_H_
|
||||
#define VK_PLATFORM_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif // __cplusplus
|
||||
|
||||
/*
|
||||
***************************************************************************************************
|
||||
* Platform-specific directives and type declarations
|
||||
***************************************************************************************************
|
||||
*/
|
||||
|
||||
/* Platform-specific calling convention macros.
|
||||
*
|
||||
* Platforms should define these so that Vulkan clients call Vulkan commands
|
||||
* with the same calling conventions that the Vulkan implementation expects.
|
||||
*
|
||||
* VKAPI_ATTR - Placed before the return type in function declarations.
|
||||
* Useful for C++11 and GCC/Clang-style function attribute syntax.
|
||||
* VKAPI_CALL - Placed after the return type in function declarations.
|
||||
* Useful for MSVC-style calling convention syntax.
|
||||
* VKAPI_PTR - Placed between the '(' and '*' in function pointer types.
|
||||
*
|
||||
* Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void);
|
||||
* Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
|
||||
*/
|
||||
#if defined(_WIN32)
|
||||
// On Windows, Vulkan commands use the stdcall convention
|
||||
#define VKAPI_ATTR
|
||||
#define VKAPI_CALL __stdcall
|
||||
#define VKAPI_PTR VKAPI_CALL
|
||||
#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
|
||||
#error "Vulkan isn't supported for the 'armeabi' NDK ABI"
|
||||
#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
|
||||
// On Android 32-bit ARM targets, Vulkan functions use the "hardfloat"
|
||||
// calling convention, i.e. float parameters are passed in registers. This
|
||||
// is true even if the rest of the application passes floats on the stack,
|
||||
// as it does by default when compiling for the armeabi-v7a NDK ABI.
|
||||
#define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
|
||||
#define VKAPI_CALL
|
||||
#define VKAPI_PTR VKAPI_ATTR
|
||||
#else
|
||||
// On other platforms, use the default calling convention
|
||||
#define VKAPI_ATTR
|
||||
#define VKAPI_CALL
|
||||
#define VKAPI_PTR
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#if !defined(VK_NO_STDINT_H)
|
||||
#if defined(_MSC_VER) && (_MSC_VER < 1600)
|
||||
typedef signed __int8 int8_t;
|
||||
typedef unsigned __int8 uint8_t;
|
||||
typedef signed __int16 int16_t;
|
||||
typedef unsigned __int16 uint16_t;
|
||||
typedef signed __int32 int32_t;
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef signed __int64 int64_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#endif // !defined(VK_NO_STDINT_H)
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif
|
||||
69
thirdparty/vulkan/include/vulkan/vk_sdk_platform.h
vendored
Normal file
69
thirdparty/vulkan/include/vulkan/vk_sdk_platform.h
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
//
|
||||
// File: vk_sdk_platform.h
|
||||
//
|
||||
/*
|
||||
* Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2016 Valve Corporation
|
||||
* Copyright (c) 2015-2016 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef VK_SDK_PLATFORM_H
|
||||
#define VK_SDK_PLATFORM_H
|
||||
|
||||
#if defined(_WIN32)
|
||||
#define NOMINMAX
|
||||
#ifndef __cplusplus
|
||||
#undef inline
|
||||
#define inline __inline
|
||||
#endif // __cplusplus
|
||||
|
||||
#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/)
|
||||
// C99:
|
||||
// Microsoft didn't implement C99 in Visual Studio; but started adding it with
|
||||
// VS2013. However, VS2013 still didn't have snprintf(). The following is a
|
||||
// work-around (Note: The _CRT_SECURE_NO_WARNINGS macro must be set in the
|
||||
// "CMakeLists.txt" file).
|
||||
// NOTE: This is fixed in Visual Studio 2015.
|
||||
#define snprintf _snprintf
|
||||
#endif
|
||||
|
||||
#define strdup _strdup
|
||||
|
||||
#endif // _WIN32
|
||||
|
||||
// Check for noexcept support using clang, with fallback to Windows or GCC version numbers
|
||||
#ifndef NOEXCEPT
|
||||
#if defined(__clang__)
|
||||
#if __has_feature(cxx_noexcept)
|
||||
#define HAS_NOEXCEPT
|
||||
#endif
|
||||
#else
|
||||
#if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46
|
||||
#define HAS_NOEXCEPT
|
||||
#else
|
||||
#if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026 && defined(_HAS_EXCEPTIONS) && _HAS_EXCEPTIONS
|
||||
#define HAS_NOEXCEPT
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAS_NOEXCEPT
|
||||
#define NOEXCEPT noexcept
|
||||
#else
|
||||
#define NOEXCEPT
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif // VK_SDK_PLATFORM_H
|
||||
86
thirdparty/vulkan/include/vulkan/vulkan.h
vendored
Normal file
86
thirdparty/vulkan/include/vulkan/vulkan.h
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
#ifndef VULKAN_H_
|
||||
#define VULKAN_H_ 1
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
#include "vk_platform.h"
|
||||
#include "vulkan_core.h"
|
||||
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
#include "vulkan_android.h"
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_FUCHSIA
|
||||
#include <zircon/types.h>
|
||||
#include "vulkan_fuchsia.h"
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||
#include "vulkan_ios.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||
#include "vulkan_macos.h"
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
||||
#include "vulkan_metal.h"
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_VI_NN
|
||||
#include "vulkan_vi.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#include <wayland-client.h>
|
||||
#include "vulkan_wayland.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
#include <windows.h>
|
||||
#include "vulkan_win32.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
#include <xcb/xcb.h>
|
||||
#include "vulkan_xcb.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
#include <X11/Xlib.h>
|
||||
#include "vulkan_xlib.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/extensions/Xrandr.h>
|
||||
#include "vulkan_xlib_xrandr.h"
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_GGP
|
||||
#include <ggp_c/vulkan_types.h>
|
||||
#include "vulkan_ggp.h"
|
||||
#endif
|
||||
|
||||
#endif // VULKAN_H_
|
||||
58712
thirdparty/vulkan/include/vulkan/vulkan.hpp
vendored
Normal file
58712
thirdparty/vulkan/include/vulkan/vulkan.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
121
thirdparty/vulkan/include/vulkan/vulkan_android.h
vendored
Normal file
121
thirdparty/vulkan/include/vulkan/vulkan_android.h
vendored
Normal file
@ -0,0 +1,121 @@
|
||||
#ifndef VULKAN_ANDROID_H_
|
||||
#define VULKAN_ANDROID_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_android_surface 1
|
||||
struct ANativeWindow;
|
||||
#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
|
||||
#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
|
||||
typedef VkFlags VkAndroidSurfaceCreateFlagsKHR;
|
||||
typedef struct VkAndroidSurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkAndroidSurfaceCreateFlagsKHR flags;
|
||||
struct ANativeWindow* window;
|
||||
} VkAndroidSurfaceCreateInfoKHR;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
|
||||
VkInstance instance,
|
||||
const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_ANDROID_external_memory_android_hardware_buffer 1
|
||||
struct AHardwareBuffer;
|
||||
#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 3
|
||||
#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer"
|
||||
typedef struct VkAndroidHardwareBufferUsageANDROID {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint64_t androidHardwareBufferUsage;
|
||||
} VkAndroidHardwareBufferUsageANDROID;
|
||||
|
||||
typedef struct VkAndroidHardwareBufferPropertiesANDROID {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkDeviceSize allocationSize;
|
||||
uint32_t memoryTypeBits;
|
||||
} VkAndroidHardwareBufferPropertiesANDROID;
|
||||
|
||||
typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkFormat format;
|
||||
uint64_t externalFormat;
|
||||
VkFormatFeatureFlags formatFeatures;
|
||||
VkComponentMapping samplerYcbcrConversionComponents;
|
||||
VkSamplerYcbcrModelConversion suggestedYcbcrModel;
|
||||
VkSamplerYcbcrRange suggestedYcbcrRange;
|
||||
VkChromaLocation suggestedXChromaOffset;
|
||||
VkChromaLocation suggestedYChromaOffset;
|
||||
} VkAndroidHardwareBufferFormatPropertiesANDROID;
|
||||
|
||||
typedef struct VkImportAndroidHardwareBufferInfoANDROID {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
struct AHardwareBuffer* buffer;
|
||||
} VkImportAndroidHardwareBufferInfoANDROID;
|
||||
|
||||
typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDeviceMemory memory;
|
||||
} VkMemoryGetAndroidHardwareBufferInfoANDROID;
|
||||
|
||||
typedef struct VkExternalFormatANDROID {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint64_t externalFormat;
|
||||
} VkExternalFormatANDROID;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID(
|
||||
VkDevice device,
|
||||
const struct AHardwareBuffer* buffer,
|
||||
VkAndroidHardwareBufferPropertiesANDROID* pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(
|
||||
VkDevice device,
|
||||
const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
|
||||
struct AHardwareBuffer** pBuffer);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
9517
thirdparty/vulkan/include/vulkan/vulkan_core.h
vendored
Normal file
9517
thirdparty/vulkan/include/vulkan/vulkan_core.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
56
thirdparty/vulkan/include/vulkan/vulkan_fuchsia.h
vendored
Normal file
56
thirdparty/vulkan/include/vulkan/vulkan_fuchsia.h
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
#ifndef VULKAN_FUCHSIA_H_
|
||||
#define VULKAN_FUCHSIA_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_FUCHSIA_imagepipe_surface 1
|
||||
#define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1
|
||||
#define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface"
|
||||
typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA;
|
||||
typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkImagePipeSurfaceCreateFlagsFUCHSIA flags;
|
||||
zx_handle_t imagePipeHandle;
|
||||
} VkImagePipeSurfaceCreateInfoFUCHSIA;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA(
|
||||
VkInstance instance,
|
||||
const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
67
thirdparty/vulkan/include/vulkan/vulkan_ggp.h
vendored
Normal file
67
thirdparty/vulkan/include/vulkan/vulkan_ggp.h
vendored
Normal file
@ -0,0 +1,67 @@
|
||||
#ifndef VULKAN_GGP_H_
|
||||
#define VULKAN_GGP_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_GGP_stream_descriptor_surface 1
|
||||
#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1
|
||||
#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME "VK_GGP_stream_descriptor_surface"
|
||||
typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP;
|
||||
typedef struct VkStreamDescriptorSurfaceCreateInfoGGP {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkStreamDescriptorSurfaceCreateFlagsGGP flags;
|
||||
GgpStreamDescriptor streamDescriptor;
|
||||
} VkStreamDescriptorSurfaceCreateInfoGGP;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP(
|
||||
VkInstance instance,
|
||||
const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_GGP_frame_token 1
|
||||
#define VK_GGP_FRAME_TOKEN_SPEC_VERSION 1
|
||||
#define VK_GGP_FRAME_TOKEN_EXTENSION_NAME "VK_GGP_frame_token"
|
||||
typedef struct VkPresentFrameTokenGGP {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
GgpFrameToken frameToken;
|
||||
} VkPresentFrameTokenGGP;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
56
thirdparty/vulkan/include/vulkan/vulkan_ios.h
vendored
Normal file
56
thirdparty/vulkan/include/vulkan/vulkan_ios.h
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
#ifndef VULKAN_IOS_H_
|
||||
#define VULKAN_IOS_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_MVK_ios_surface 1
|
||||
#define VK_MVK_IOS_SURFACE_SPEC_VERSION 2
|
||||
#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface"
|
||||
typedef VkFlags VkIOSSurfaceCreateFlagsMVK;
|
||||
typedef struct VkIOSSurfaceCreateInfoMVK {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkIOSSurfaceCreateFlagsMVK flags;
|
||||
const void* pView;
|
||||
} VkIOSSurfaceCreateInfoMVK;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
|
||||
VkInstance instance,
|
||||
const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
56
thirdparty/vulkan/include/vulkan/vulkan_macos.h
vendored
Normal file
56
thirdparty/vulkan/include/vulkan/vulkan_macos.h
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
#ifndef VULKAN_MACOS_H_
|
||||
#define VULKAN_MACOS_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_MVK_macos_surface 1
|
||||
#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 2
|
||||
#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface"
|
||||
typedef VkFlags VkMacOSSurfaceCreateFlagsMVK;
|
||||
typedef struct VkMacOSSurfaceCreateInfoMVK {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkMacOSSurfaceCreateFlagsMVK flags;
|
||||
const void* pView;
|
||||
} VkMacOSSurfaceCreateInfoMVK;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
|
||||
VkInstance instance,
|
||||
const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
63
thirdparty/vulkan/include/vulkan/vulkan_metal.h
vendored
Normal file
63
thirdparty/vulkan/include/vulkan/vulkan_metal.h
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
#ifndef VULKAN_METAL_H_
|
||||
#define VULKAN_METAL_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_EXT_metal_surface 1
|
||||
|
||||
#ifdef __OBJC__
|
||||
@class CAMetalLayer;
|
||||
#else
|
||||
typedef void CAMetalLayer;
|
||||
#endif
|
||||
|
||||
#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1
|
||||
#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface"
|
||||
typedef VkFlags VkMetalSurfaceCreateFlagsEXT;
|
||||
typedef struct VkMetalSurfaceCreateInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkMetalSurfaceCreateFlagsEXT flags;
|
||||
const CAMetalLayer* pLayer;
|
||||
} VkMetalSurfaceCreateInfoEXT;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(
|
||||
VkInstance instance,
|
||||
const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
56
thirdparty/vulkan/include/vulkan/vulkan_vi.h
vendored
Normal file
56
thirdparty/vulkan/include/vulkan/vulkan_vi.h
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
#ifndef VULKAN_VI_H_
|
||||
#define VULKAN_VI_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_NN_vi_surface 1
|
||||
#define VK_NN_VI_SURFACE_SPEC_VERSION 1
|
||||
#define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface"
|
||||
typedef VkFlags VkViSurfaceCreateFlagsNN;
|
||||
typedef struct VkViSurfaceCreateInfoNN {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkViSurfaceCreateFlagsNN flags;
|
||||
void* window;
|
||||
} VkViSurfaceCreateInfoNN;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN(
|
||||
VkInstance instance,
|
||||
const VkViSurfaceCreateInfoNN* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
63
thirdparty/vulkan/include/vulkan/vulkan_wayland.h
vendored
Normal file
63
thirdparty/vulkan/include/vulkan/vulkan_wayland.h
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
#ifndef VULKAN_WAYLAND_H_
|
||||
#define VULKAN_WAYLAND_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_wayland_surface 1
|
||||
#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6
|
||||
#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
|
||||
typedef VkFlags VkWaylandSurfaceCreateFlagsKHR;
|
||||
typedef struct VkWaylandSurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkWaylandSurfaceCreateFlagsKHR flags;
|
||||
struct wl_display* display;
|
||||
struct wl_surface* surface;
|
||||
} VkWaylandSurfaceCreateInfoKHR;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
|
||||
VkInstance instance,
|
||||
const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex,
|
||||
struct wl_display* display);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
327
thirdparty/vulkan/include/vulkan/vulkan_win32.h
vendored
Normal file
327
thirdparty/vulkan/include/vulkan/vulkan_win32.h
vendored
Normal file
@ -0,0 +1,327 @@
|
||||
#ifndef VULKAN_WIN32_H_
|
||||
#define VULKAN_WIN32_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_win32_surface 1
|
||||
#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6
|
||||
#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
|
||||
typedef VkFlags VkWin32SurfaceCreateFlagsKHR;
|
||||
typedef struct VkWin32SurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkWin32SurfaceCreateFlagsKHR flags;
|
||||
HINSTANCE hinstance;
|
||||
HWND hwnd;
|
||||
} VkWin32SurfaceCreateInfoKHR;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
|
||||
VkInstance instance,
|
||||
const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_KHR_external_memory_win32 1
|
||||
#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32"
|
||||
typedef struct VkImportMemoryWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalMemoryHandleTypeFlagBits handleType;
|
||||
HANDLE handle;
|
||||
LPCWSTR name;
|
||||
} VkImportMemoryWin32HandleInfoKHR;
|
||||
|
||||
typedef struct VkExportMemoryWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
const SECURITY_ATTRIBUTES* pAttributes;
|
||||
DWORD dwAccess;
|
||||
LPCWSTR name;
|
||||
} VkExportMemoryWin32HandleInfoKHR;
|
||||
|
||||
typedef struct VkMemoryWin32HandlePropertiesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint32_t memoryTypeBits;
|
||||
} VkMemoryWin32HandlePropertiesKHR;
|
||||
|
||||
typedef struct VkMemoryGetWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDeviceMemory memory;
|
||||
VkExternalMemoryHandleTypeFlagBits handleType;
|
||||
} VkMemoryGetWin32HandleInfoKHR;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR(
|
||||
VkDevice device,
|
||||
const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
|
||||
HANDLE* pHandle);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR(
|
||||
VkDevice device,
|
||||
VkExternalMemoryHandleTypeFlagBits handleType,
|
||||
HANDLE handle,
|
||||
VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_KHR_win32_keyed_mutex 1
|
||||
#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1
|
||||
#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex"
|
||||
typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t acquireCount;
|
||||
const VkDeviceMemory* pAcquireSyncs;
|
||||
const uint64_t* pAcquireKeys;
|
||||
const uint32_t* pAcquireTimeouts;
|
||||
uint32_t releaseCount;
|
||||
const VkDeviceMemory* pReleaseSyncs;
|
||||
const uint64_t* pReleaseKeys;
|
||||
} VkWin32KeyedMutexAcquireReleaseInfoKHR;
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_external_semaphore_win32 1
|
||||
#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32"
|
||||
typedef struct VkImportSemaphoreWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSemaphore semaphore;
|
||||
VkSemaphoreImportFlags flags;
|
||||
VkExternalSemaphoreHandleTypeFlagBits handleType;
|
||||
HANDLE handle;
|
||||
LPCWSTR name;
|
||||
} VkImportSemaphoreWin32HandleInfoKHR;
|
||||
|
||||
typedef struct VkExportSemaphoreWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
const SECURITY_ATTRIBUTES* pAttributes;
|
||||
DWORD dwAccess;
|
||||
LPCWSTR name;
|
||||
} VkExportSemaphoreWin32HandleInfoKHR;
|
||||
|
||||
typedef struct VkD3D12FenceSubmitInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t waitSemaphoreValuesCount;
|
||||
const uint64_t* pWaitSemaphoreValues;
|
||||
uint32_t signalSemaphoreValuesCount;
|
||||
const uint64_t* pSignalSemaphoreValues;
|
||||
} VkD3D12FenceSubmitInfoKHR;
|
||||
|
||||
typedef struct VkSemaphoreGetWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSemaphore semaphore;
|
||||
VkExternalSemaphoreHandleTypeFlagBits handleType;
|
||||
} VkSemaphoreGetWin32HandleInfoKHR;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR(
|
||||
VkDevice device,
|
||||
const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR(
|
||||
VkDevice device,
|
||||
const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
|
||||
HANDLE* pHandle);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_KHR_external_fence_win32 1
|
||||
#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32"
|
||||
typedef struct VkImportFenceWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkFence fence;
|
||||
VkFenceImportFlags flags;
|
||||
VkExternalFenceHandleTypeFlagBits handleType;
|
||||
HANDLE handle;
|
||||
LPCWSTR name;
|
||||
} VkImportFenceWin32HandleInfoKHR;
|
||||
|
||||
typedef struct VkExportFenceWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
const SECURITY_ATTRIBUTES* pAttributes;
|
||||
DWORD dwAccess;
|
||||
LPCWSTR name;
|
||||
} VkExportFenceWin32HandleInfoKHR;
|
||||
|
||||
typedef struct VkFenceGetWin32HandleInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkFence fence;
|
||||
VkExternalFenceHandleTypeFlagBits handleType;
|
||||
} VkFenceGetWin32HandleInfoKHR;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR(
|
||||
VkDevice device,
|
||||
const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR(
|
||||
VkDevice device,
|
||||
const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
|
||||
HANDLE* pHandle);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_NV_external_memory_win32 1
|
||||
#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
|
||||
#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32"
|
||||
typedef struct VkImportMemoryWin32HandleInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalMemoryHandleTypeFlagsNV handleType;
|
||||
HANDLE handle;
|
||||
} VkImportMemoryWin32HandleInfoNV;
|
||||
|
||||
typedef struct VkExportMemoryWin32HandleInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
const SECURITY_ATTRIBUTES* pAttributes;
|
||||
DWORD dwAccess;
|
||||
} VkExportMemoryWin32HandleInfoNV;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV(
|
||||
VkDevice device,
|
||||
VkDeviceMemory memory,
|
||||
VkExternalMemoryHandleTypeFlagsNV handleType,
|
||||
HANDLE* pHandle);
|
||||
#endif
|
||||
|
||||
|
||||
#define VK_NV_win32_keyed_mutex 1
|
||||
#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 1
|
||||
#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex"
|
||||
typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t acquireCount;
|
||||
const VkDeviceMemory* pAcquireSyncs;
|
||||
const uint64_t* pAcquireKeys;
|
||||
const uint32_t* pAcquireTimeoutMilliseconds;
|
||||
uint32_t releaseCount;
|
||||
const VkDeviceMemory* pReleaseSyncs;
|
||||
const uint64_t* pReleaseKeys;
|
||||
} VkWin32KeyedMutexAcquireReleaseInfoNV;
|
||||
|
||||
|
||||
|
||||
#define VK_EXT_full_screen_exclusive 1
|
||||
#define VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION 3
|
||||
#define VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME "VK_EXT_full_screen_exclusive"
|
||||
|
||||
typedef enum VkFullScreenExclusiveEXT {
|
||||
VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_BEGIN_RANGE_EXT = VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_END_RANGE_EXT = VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT,
|
||||
VK_FULL_SCREEN_EXCLUSIVE_RANGE_SIZE_EXT = (VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT - VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT + 1),
|
||||
VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkFullScreenExclusiveEXT;
|
||||
typedef struct VkSurfaceFullScreenExclusiveInfoEXT {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkFullScreenExclusiveEXT fullScreenExclusive;
|
||||
} VkSurfaceFullScreenExclusiveInfoEXT;
|
||||
|
||||
typedef struct VkSurfaceCapabilitiesFullScreenExclusiveEXT {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkBool32 fullScreenExclusiveSupported;
|
||||
} VkSurfaceCapabilitiesFullScreenExclusiveEXT;
|
||||
|
||||
typedef struct VkSurfaceFullScreenExclusiveWin32InfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
HMONITOR hmonitor;
|
||||
} VkSurfaceFullScreenExclusiveWin32InfoEXT;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkAcquireFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkReleaseFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModes2EXT)(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
uint32_t* pPresentModeCount,
|
||||
VkPresentModeKHR* pPresentModes);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT(
|
||||
VkDevice device,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
VkDeviceGroupPresentModeFlagsKHR* pModes);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
64
thirdparty/vulkan/include/vulkan/vulkan_xcb.h
vendored
Normal file
64
thirdparty/vulkan/include/vulkan/vulkan_xcb.h
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
#ifndef VULKAN_XCB_H_
|
||||
#define VULKAN_XCB_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_xcb_surface 1
|
||||
#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6
|
||||
#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
|
||||
typedef VkFlags VkXcbSurfaceCreateFlagsKHR;
|
||||
typedef struct VkXcbSurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkXcbSurfaceCreateFlagsKHR flags;
|
||||
xcb_connection_t* connection;
|
||||
xcb_window_t window;
|
||||
} VkXcbSurfaceCreateInfoKHR;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
|
||||
VkInstance instance,
|
||||
const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex,
|
||||
xcb_connection_t* connection,
|
||||
xcb_visualid_t visual_id);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
64
thirdparty/vulkan/include/vulkan/vulkan_xlib.h
vendored
Normal file
64
thirdparty/vulkan/include/vulkan/vulkan_xlib.h
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
#ifndef VULKAN_XLIB_H_
|
||||
#define VULKAN_XLIB_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_xlib_surface 1
|
||||
#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6
|
||||
#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
|
||||
typedef VkFlags VkXlibSurfaceCreateFlagsKHR;
|
||||
typedef struct VkXlibSurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkXlibSurfaceCreateFlagsKHR flags;
|
||||
Display* dpy;
|
||||
Window window;
|
||||
} VkXlibSurfaceCreateInfoKHR;
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
|
||||
VkInstance instance,
|
||||
const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex,
|
||||
Display* dpy,
|
||||
VisualID visualID);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
54
thirdparty/vulkan/include/vulkan/vulkan_xlib_xrandr.h
vendored
Normal file
54
thirdparty/vulkan/include/vulkan/vulkan_xlib_xrandr.h
vendored
Normal file
@ -0,0 +1,54 @@
|
||||
#ifndef VULKAN_XLIB_XRANDR_H_
|
||||
#define VULKAN_XLIB_XRANDR_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2019 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#define VK_EXT_acquire_xlib_display 1
|
||||
#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1
|
||||
#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display"
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
Display* dpy,
|
||||
VkDisplayKHR display);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
Display* dpy,
|
||||
RROutput rrOutput,
|
||||
VkDisplayKHR* pDisplay);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
94
thirdparty/vulkan/loader/asm_offset.c
vendored
Executable file
94
thirdparty/vulkan/loader/asm_offset.c
vendored
Executable file
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2018 The Khronos Group Inc.
|
||||
* Copyright (c) 2017-2018 Valve Corporation
|
||||
* Copyright (c) 2017-2018 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Lenny Komow <lenny@lunarg.com>
|
||||
*/
|
||||
|
||||
// This code generates an assembly file which provides offsets to get struct members from assembly code.
|
||||
|
||||
#include <stdio.h>
|
||||
#include "loader.h"
|
||||
|
||||
#if !defined(_MSC_VER) || (_MSC_VER >= 1900)
|
||||
#define SIZE_T_FMT "%-8zu"
|
||||
#else
|
||||
#define SIZE_T_FMT "%-8lu"
|
||||
#endif
|
||||
|
||||
struct ValueInfo
|
||||
{
|
||||
const char *name;
|
||||
size_t value;
|
||||
const char *comment;
|
||||
};
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
const char *assembler = NULL;
|
||||
for (int i = 0; i < argc; ++i) {
|
||||
if (!strcmp(argv[i], "MASM")) {
|
||||
assembler = "MASM";
|
||||
} else if (!strcmp(argv[i], "GAS")) {
|
||||
assembler = "GAS";
|
||||
}
|
||||
}
|
||||
if (assembler == NULL) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct ValueInfo values[] = {
|
||||
{ .name = "VK_DEBUG_REPORT_ERROR_BIT_EXT", .value = (size_t) VK_DEBUG_REPORT_ERROR_BIT_EXT,
|
||||
.comment = "The numerical value of the enum value 'VK_DEBUG_REPORT_ERROR_BIT_EXT'" },
|
||||
{ .name = "PTR_SIZE", .value = sizeof(void*),
|
||||
.comment = "The size of a pointer" },
|
||||
{ .name = "HASH_SIZE", .value = sizeof(struct loader_dispatch_hash_entry),
|
||||
.comment = "The size of a 'loader_dispatch_hash_entry' struct" },
|
||||
{ .name = "HASH_OFFSET_INSTANCE", .value = offsetof(struct loader_instance, phys_dev_ext_disp_hash),
|
||||
.comment = "The offset of 'phys_dev_ext_disp_hash' within a 'loader_instance' struct" },
|
||||
{ .name = "PHYS_DEV_OFFSET_INST_DISPATCH", .value = offsetof(struct loader_instance_dispatch_table, phys_dev_ext),
|
||||
.comment = "The offset of 'phys_dev_ext' within in 'loader_instance_dispatch_table' struct" },
|
||||
{ .name = "PHYS_DEV_OFFSET_PHYS_DEV_TRAMP", .value = offsetof(struct loader_physical_device_tramp, phys_dev),
|
||||
.comment = "The offset of 'phys_dev' within a 'loader_physical_device_tramp' struct" },
|
||||
{ .name = "ICD_TERM_OFFSET_PHYS_DEV_TERM", .value = offsetof(struct loader_physical_device_term, this_icd_term),
|
||||
.comment = "The offset of 'this_icd_term' within a 'loader_physical_device_term' struct" },
|
||||
{ .name = "PHYS_DEV_OFFSET_PHYS_DEV_TERM", .value = offsetof(struct loader_physical_device_term, phys_dev),
|
||||
.comment = "The offset of 'phys_dev' within a 'loader_physical_device_term' struct" },
|
||||
{ .name = "INSTANCE_OFFSET_ICD_TERM", .value = offsetof(struct loader_icd_term, this_instance),
|
||||
.comment = "The offset of 'this_instance' within a 'loader_icd_term' struct" },
|
||||
{ .name = "DISPATCH_OFFSET_ICD_TERM", .value = offsetof(struct loader_icd_term, phys_dev_ext),
|
||||
.comment = "The offset of 'phys_dev_ext' within a 'loader_icd_term' struct" },
|
||||
{ .name = "FUNC_NAME_OFFSET_HASH", .value = offsetof(struct loader_dispatch_hash_entry, func_name),
|
||||
.comment = "The offset of 'func_name' within a 'loader_dispatch_hash_entry' struct" },
|
||||
{ .name = "EXT_OFFSET_DEVICE_DISPATCH", .value = offsetof(struct loader_dev_dispatch_table, ext_dispatch),
|
||||
.comment = "The offset of 'ext_dispatch' within a 'loader_dev_dispatch_table' struct" },
|
||||
};
|
||||
|
||||
FILE *file = fopen("gen_defines.asm", "w");
|
||||
fprintf(file, "\n");
|
||||
if (!strcmp(assembler, "MASM")) {
|
||||
for (size_t i = 0; i < sizeof(values)/sizeof(values[0]); ++i) {
|
||||
fprintf(file, "%-32s equ " SIZE_T_FMT "; %s\n", values[i].name, values[i].value, values[i].comment);
|
||||
}
|
||||
} else if (!strcmp(assembler, "GAS")) {
|
||||
#ifdef __x86_64__
|
||||
fprintf(file, ".set X86_64, 1\n");
|
||||
#endif // __x86_64__
|
||||
for (size_t i = 0; i < sizeof(values)/sizeof(values[0]); ++i) {
|
||||
fprintf(file, ".set %-32s, " SIZE_T_FMT "# %s\n", values[i].name, values[i].value, values[i].comment);
|
||||
}
|
||||
}
|
||||
return fclose(file);
|
||||
}
|
||||
1215
thirdparty/vulkan/loader/cJSON.c
vendored
Executable file
1215
thirdparty/vulkan/loader/cJSON.c
vendored
Executable file
File diff suppressed because it is too large
Load Diff
174
thirdparty/vulkan/loader/cJSON.h
vendored
Executable file
174
thirdparty/vulkan/loader/cJSON.h
vendored
Executable file
@ -0,0 +1,174 @@
|
||||
/*
|
||||
Copyright (c) 2009 Dave Gamble
|
||||
Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||
Copyright (c) 2015-2016 Valve Corporation
|
||||
Copyright (c) 2015-2016 LunarG, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef cJSON__h
|
||||
#define cJSON__h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* cJSON Types: */
|
||||
#define cJSON_False 0
|
||||
#define cJSON_True 1
|
||||
#define cJSON_NULL 2
|
||||
#define cJSON_Number 3
|
||||
#define cJSON_String 4
|
||||
#define cJSON_Array 5
|
||||
#define cJSON_Object 6
|
||||
|
||||
#define cJSON_IsReference 256
|
||||
#define cJSON_StringIsConst 512
|
||||
|
||||
/* The cJSON structure: */
|
||||
typedef struct cJSON {
|
||||
struct cJSON *next, *prev; /* next/prev allow you to walk array/object
|
||||
chains. Alternatively, use
|
||||
GetArraySize/GetArrayItem/GetObjectItem */
|
||||
struct cJSON *child; /* An array or object item will have a child pointer
|
||||
pointing to a chain of the items in the
|
||||
array/object. */
|
||||
|
||||
int type; /* The type of the item, as above. */
|
||||
|
||||
char *valuestring; /* The item's string, if type==cJSON_String */
|
||||
int valueint; /* The item's number, if type==cJSON_Number */
|
||||
double valuedouble; /* The item's number, if type==cJSON_Number */
|
||||
|
||||
char *string; /* The item's name string, if this item is the child of, or is
|
||||
in the list of subitems of an object. */
|
||||
} cJSON;
|
||||
|
||||
typedef struct cJSON_Hooks {
|
||||
void *(*malloc_fn)(size_t sz);
|
||||
void (*free_fn)(void *ptr);
|
||||
} cJSON_Hooks;
|
||||
|
||||
/* Supply malloc, realloc and free functions to cJSON */
|
||||
extern void cJSON_InitHooks(cJSON_Hooks *hooks);
|
||||
|
||||
/* Supply a block of JSON, and this returns a cJSON object you can interrogate.
|
||||
* Call cJSON_Delete when finished. */
|
||||
extern cJSON *cJSON_Parse(const char *value);
|
||||
/* Render a cJSON entity to text for transfer/storage. Free the char* when
|
||||
* finished. */
|
||||
extern char *cJSON_Print(cJSON *item);
|
||||
/* Render a cJSON entity to text for transfer/storage without any formatting.
|
||||
* Free the char* when finished. */
|
||||
extern char *cJSON_PrintUnformatted(cJSON *item);
|
||||
/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess
|
||||
* at the final size. guessing well reduces reallocation. fmt=0 gives
|
||||
* unformatted, =1 gives formatted */
|
||||
extern char *cJSON_PrintBuffered(cJSON *item, int prebuffer, int fmt);
|
||||
/* Delete a cJSON entity and all subentities. */
|
||||
extern void cJSON_Delete(cJSON *c);
|
||||
/* Delete an item allocated inside the JSON parser*/
|
||||
extern void cJSON_Free(void *p);
|
||||
|
||||
/* Returns the number of items in an array (or object). */
|
||||
extern int cJSON_GetArraySize(cJSON *array);
|
||||
/* Retrieve item number "item" from array "array". Returns NULL if unsuccessful.
|
||||
*/
|
||||
extern cJSON *cJSON_GetArrayItem(cJSON *array, int item);
|
||||
/* Get item "string" from object. Case insensitive. */
|
||||
extern cJSON *cJSON_GetObjectItem(cJSON *object, const char *string);
|
||||
|
||||
/* For analysing failed parses. This returns a pointer to the parse error.
|
||||
* You'll probably need to look a few chars back to make sense of it. Defined
|
||||
* when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
|
||||
extern const char *cJSON_GetErrorPtr(void);
|
||||
|
||||
/* These calls create a cJSON item of the appropriate type. */
|
||||
extern cJSON *cJSON_CreateNull(void);
|
||||
extern cJSON *cJSON_CreateTrue(void);
|
||||
extern cJSON *cJSON_CreateFalse(void);
|
||||
extern cJSON *cJSON_CreateBool(int b);
|
||||
extern cJSON *cJSON_CreateNumber(double num);
|
||||
extern cJSON *cJSON_CreateString(const char *string);
|
||||
extern cJSON *cJSON_CreateArray(void);
|
||||
extern cJSON *cJSON_CreateObject(void);
|
||||
|
||||
/* These utilities create an Array of count items. */
|
||||
extern cJSON *cJSON_CreateIntArray(const int *numbers, int count);
|
||||
extern cJSON *cJSON_CreateFloatArray(const float *numbers, int count);
|
||||
extern cJSON *cJSON_CreateDoubleArray(const double *numbers, int count);
|
||||
extern cJSON *cJSON_CreateStringArray(const char **strings, int count);
|
||||
|
||||
/* Append item to the specified array/object. */
|
||||
extern void cJSON_AddItemToArray(cJSON *array, cJSON *item);
|
||||
extern void cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
|
||||
extern void cJSON_AddItemToObjectCS(cJSON *object, const char *string,
|
||||
cJSON *item); /* Use this when string is definitely const (i.e. a literal,
|
||||
or as good as), and will definitely survive the cJSON
|
||||
object */
|
||||
/* Append reference to item to the specified array/object. Use this when you
|
||||
* want to add an existing cJSON to a new cJSON, but don't want to corrupt your
|
||||
* existing cJSON. */
|
||||
extern void cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
|
||||
extern void cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
|
||||
|
||||
/* Remove/Detatch items from Arrays/Objects. */
|
||||
extern cJSON *cJSON_DetachItemFromArray(cJSON *array, int which);
|
||||
extern void cJSON_DeleteItemFromArray(cJSON *array, int which);
|
||||
extern cJSON *cJSON_DetachItemFromObject(cJSON *object, const char *string);
|
||||
extern void cJSON_DeleteItemFromObject(cJSON *object, const char *string);
|
||||
|
||||
/* Update array items. */
|
||||
extern void cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */
|
||||
extern void cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem);
|
||||
extern void cJSON_ReplaceItemInObject(cJSON *object, const char *string, cJSON *newitem);
|
||||
|
||||
/* Duplicate a cJSON item */
|
||||
extern cJSON *cJSON_Duplicate(cJSON *item, int recurse);
|
||||
/* Duplicate will create a new, identical cJSON item to the one you pass, in new
|
||||
memory that will
|
||||
need to be released. With recurse!=0, it will duplicate any children connected
|
||||
to the item.
|
||||
The item->next and ->prev pointers are always zero on return from Duplicate. */
|
||||
|
||||
/* ParseWithOpts allows you to require (and check) that the JSON is null
|
||||
* terminated, and to retrieve the pointer to the final byte parsed. */
|
||||
extern cJSON *cJSON_ParseWithOpts(const char *value, const char **return_parse_end, int require_null_terminated);
|
||||
|
||||
extern void cJSON_Minify(char *json);
|
||||
|
||||
/* Macros for creating things quickly. */
|
||||
#define cJSON_AddNullToObject(object, name) cJSON_AddItemToObject(object, name, cJSON_CreateNull())
|
||||
#define cJSON_AddTrueToObject(object, name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue())
|
||||
#define cJSON_AddFalseToObject(object, name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse())
|
||||
#define cJSON_AddBoolToObject(object, name, b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))
|
||||
#define cJSON_AddNumberToObject(object, name, n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))
|
||||
#define cJSON_AddStringToObject(object, name, s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s))
|
||||
|
||||
/* When assigning an integer value, it needs to be propagated to valuedouble
|
||||
* too. */
|
||||
#define cJSON_SetIntValue(object, val) ((object) ? (object)->valueint = (object)->valuedouble = (val) : (val))
|
||||
#define cJSON_SetNumberValue(object, val) ((object) ? (object)->valueint = (object)->valuedouble = (val) : (val))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
996
thirdparty/vulkan/loader/debug_utils.c
vendored
Executable file
996
thirdparty/vulkan/loader/debug_utils.c
vendored
Executable file
@ -0,0 +1,996 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2017 Valve Corporation
|
||||
* Copyright (c) 2015-2017 LunarG, Inc.
|
||||
* Copyright (C) 2015-2016 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Courtney Goeltzenleuchter <courtney@LunarG.com>
|
||||
* Author: Jon Ashburn <jon@LunarG.com>
|
||||
* Author: Mark Young <marky@lunarg.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <inttypes.h>
|
||||
#ifndef WIN32
|
||||
#include <signal.h>
|
||||
#else
|
||||
#endif
|
||||
#include "vk_loader_platform.h"
|
||||
#include "debug_utils.h"
|
||||
#include "vulkan/vk_layer.h"
|
||||
#include "vk_object_types.h"
|
||||
|
||||
// VK_EXT_debug_report related items
|
||||
|
||||
VkResult util_CreateDebugUtilsMessenger(struct loader_instance *inst, const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerEXT messenger) {
|
||||
VkLayerDbgFunctionNode *pNewDbgFuncNode = NULL;
|
||||
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pNewDbgFuncNode = (VkLayerDbgFunctionNode *)pAllocator->pfnAllocation(pAllocator->pUserData, sizeof(VkLayerDbgFunctionNode),
|
||||
sizeof(int *), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
} else {
|
||||
#endif
|
||||
pNewDbgFuncNode = (VkLayerDbgFunctionNode *)loader_instance_heap_alloc(inst, sizeof(VkLayerDbgFunctionNode),
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
}
|
||||
if (!pNewDbgFuncNode) {
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
memset(pNewDbgFuncNode, 0, sizeof(VkLayerDbgFunctionNode));
|
||||
|
||||
pNewDbgFuncNode->is_messenger = true;
|
||||
pNewDbgFuncNode->messenger.messenger = messenger;
|
||||
pNewDbgFuncNode->messenger.pfnUserCallback = pCreateInfo->pfnUserCallback;
|
||||
pNewDbgFuncNode->messenger.messageSeverity = pCreateInfo->messageSeverity;
|
||||
pNewDbgFuncNode->messenger.messageType = pCreateInfo->messageType;
|
||||
pNewDbgFuncNode->pUserData = pCreateInfo->pUserData;
|
||||
pNewDbgFuncNode->pNext = inst->DbgFunctionHead;
|
||||
inst->DbgFunctionHead = pNewDbgFuncNode;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL
|
||||
debug_utils_CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerEXT *pMessenger) {
|
||||
struct loader_instance *inst = loader_get_instance(instance);
|
||||
loader_platform_thread_lock_mutex(&loader_lock);
|
||||
VkResult result = inst->disp->layer_inst_disp.CreateDebugUtilsMessengerEXT(instance, pCreateInfo, pAllocator, pMessenger);
|
||||
loader_platform_thread_unlock_mutex(&loader_lock);
|
||||
return result;
|
||||
}
|
||||
|
||||
VkBool32 util_SubmitDebugUtilsMessageEXT(const struct loader_instance *inst, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
|
||||
VkDebugUtilsMessageTypeFlagsEXT messageTypes,
|
||||
const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData) {
|
||||
VkBool32 bail = false;
|
||||
|
||||
if (NULL != pCallbackData) {
|
||||
VkLayerDbgFunctionNode *pTrav = inst->DbgFunctionHead;
|
||||
VkDebugReportObjectTypeEXT object_type = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;
|
||||
VkDebugReportFlagsEXT object_flags = 0;
|
||||
uint64_t object_handle = 0;
|
||||
|
||||
debug_utils_AnnotFlagsToReportFlags(messageSeverity, messageTypes, &object_flags);
|
||||
if (0 < pCallbackData->objectCount) {
|
||||
debug_utils_AnnotObjectToDebugReportObject(pCallbackData->pObjects, &object_type, &object_handle);
|
||||
}
|
||||
|
||||
while (pTrav) {
|
||||
if (pTrav->is_messenger && (pTrav->messenger.messageSeverity & messageSeverity) &&
|
||||
(pTrav->messenger.messageType & messageTypes)) {
|
||||
if (pTrav->messenger.pfnUserCallback(messageSeverity, messageTypes, pCallbackData, pTrav->pUserData)) {
|
||||
bail = true;
|
||||
}
|
||||
}
|
||||
if (!pTrav->is_messenger && pTrav->report.msgFlags & object_flags) {
|
||||
if (pTrav->report.pfnMsgCallback(object_flags, object_type, object_handle, 0, pCallbackData->messageIdNumber,
|
||||
pCallbackData->pMessageIdName, pCallbackData->pMessage, pTrav->pUserData)) {
|
||||
bail = true;
|
||||
}
|
||||
}
|
||||
|
||||
pTrav = pTrav->pNext;
|
||||
}
|
||||
}
|
||||
|
||||
return bail;
|
||||
}
|
||||
|
||||
void util_DestroyDebugUtilsMessenger(struct loader_instance *inst, VkDebugUtilsMessengerEXT messenger,
|
||||
const VkAllocationCallbacks *pAllocator) {
|
||||
VkLayerDbgFunctionNode *pTrav = inst->DbgFunctionHead;
|
||||
VkLayerDbgFunctionNode *pPrev = pTrav;
|
||||
|
||||
while (pTrav) {
|
||||
if (pTrav->is_messenger && pTrav->messenger.messenger == messenger) {
|
||||
pPrev->pNext = pTrav->pNext;
|
||||
if (inst->DbgFunctionHead == pTrav) inst->DbgFunctionHead = pTrav->pNext;
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, pTrav);
|
||||
} else {
|
||||
#endif
|
||||
loader_instance_heap_free(inst, pTrav);
|
||||
}
|
||||
break;
|
||||
}
|
||||
pPrev = pTrav;
|
||||
pTrav = pTrav->pNext;
|
||||
}
|
||||
}
|
||||
|
||||
// This utility (used by vkInstanceCreateInfo(), looks at a pNext chain. It
|
||||
// counts any VkDebugUtilsMessengerCreateInfoEXT structs that it finds. It
|
||||
// then allocates array that can hold that many structs, as well as that many
|
||||
// VkDebugUtilsMessengerEXT handles. It then copies each
|
||||
// VkDebugUtilsMessengerCreateInfoEXT, and initializes each handle.
|
||||
VkResult util_CopyDebugUtilsMessengerCreateInfos(const void *pChain, const VkAllocationCallbacks *pAllocator,
|
||||
uint32_t *num_messengers, VkDebugUtilsMessengerCreateInfoEXT **infos,
|
||||
VkDebugUtilsMessengerEXT **messengers) {
|
||||
uint32_t n = *num_messengers = 0;
|
||||
VkDebugUtilsMessengerCreateInfoEXT *pInfos = NULL;
|
||||
VkDebugUtilsMessengerEXT *pMessengers = NULL;
|
||||
|
||||
const void *pNext = pChain;
|
||||
while (pNext) {
|
||||
// 1st, count the number VkDebugUtilsMessengerCreateInfoEXT:
|
||||
if (((VkDebugUtilsMessengerCreateInfoEXT *)pNext)->sType == VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) {
|
||||
n++;
|
||||
}
|
||||
pNext = (void *)((VkDebugUtilsMessengerCreateInfoEXT *)pNext)->pNext;
|
||||
}
|
||||
if (n == 0) {
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
// 2nd, allocate memory for each VkDebugUtilsMessengerCreateInfoEXT:
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pInfos = *infos = ((VkDebugUtilsMessengerCreateInfoEXT *)pAllocator->pfnAllocation(
|
||||
pAllocator->pUserData, n * sizeof(VkDebugUtilsMessengerCreateInfoEXT), sizeof(void *),
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
|
||||
} else {
|
||||
#endif
|
||||
pInfos = *infos = ((VkDebugUtilsMessengerCreateInfoEXT *)malloc(n * sizeof(VkDebugUtilsMessengerCreateInfoEXT)));
|
||||
}
|
||||
if (!pInfos) {
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
// 3rd, allocate memory for a unique handle for each callback:
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pMessengers = *messengers = ((VkDebugUtilsMessengerEXT *)pAllocator->pfnAllocation(
|
||||
pAllocator->pUserData, n * sizeof(VkDebugUtilsMessengerEXT), sizeof(void *), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
|
||||
if (NULL == pMessengers) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, pInfos);
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
} else {
|
||||
#endif
|
||||
pMessengers = *messengers = ((VkDebugUtilsMessengerEXT *)malloc(n * sizeof(VkDebugUtilsMessengerEXT)));
|
||||
if (NULL == pMessengers) {
|
||||
free(pInfos);
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
}
|
||||
// 4th, copy each VkDebugUtilsMessengerCreateInfoEXT for use by
|
||||
// vkDestroyInstance, and assign a unique handle to each messenger (just
|
||||
// use the address of the copied VkDebugUtilsMessengerCreateInfoEXT):
|
||||
pNext = pChain;
|
||||
while (pNext) {
|
||||
if (((VkInstanceCreateInfo *)pNext)->sType == VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) {
|
||||
memcpy(pInfos, pNext, sizeof(VkDebugUtilsMessengerCreateInfoEXT));
|
||||
*pMessengers++ = (VkDebugUtilsMessengerEXT)(uintptr_t)pInfos++;
|
||||
}
|
||||
pNext = (void *)((VkInstanceCreateInfo *)pNext)->pNext;
|
||||
}
|
||||
|
||||
*num_messengers = n;
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
void util_FreeDebugUtilsMessengerCreateInfos(const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerCreateInfoEXT *infos,
|
||||
VkDebugUtilsMessengerEXT *messengers) {
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, infos);
|
||||
pAllocator->pfnFree(pAllocator->pUserData, messengers);
|
||||
} else {
|
||||
#endif
|
||||
free(infos);
|
||||
free(messengers);
|
||||
}
|
||||
}
|
||||
|
||||
VkResult util_CreateDebugUtilsMessengers(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator,
|
||||
uint32_t num_messengers, VkDebugUtilsMessengerCreateInfoEXT *infos,
|
||||
VkDebugUtilsMessengerEXT *messengers) {
|
||||
VkResult rtn = VK_SUCCESS;
|
||||
for (uint32_t i = 0; i < num_messengers; i++) {
|
||||
rtn = util_CreateDebugUtilsMessenger(inst, &infos[i], pAllocator, messengers[i]);
|
||||
if (rtn != VK_SUCCESS) {
|
||||
for (uint32_t j = 0; j < i; j++) {
|
||||
util_DestroyDebugUtilsMessenger(inst, messengers[j], pAllocator);
|
||||
}
|
||||
return rtn;
|
||||
}
|
||||
}
|
||||
return rtn;
|
||||
}
|
||||
|
||||
void util_DestroyDebugUtilsMessengers(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator,
|
||||
uint32_t num_messengers, VkDebugUtilsMessengerEXT *messengers) {
|
||||
for (uint32_t i = 0; i < num_messengers; i++) {
|
||||
util_DestroyDebugUtilsMessenger(inst, messengers[i], pAllocator);
|
||||
}
|
||||
}
|
||||
|
||||
static VKAPI_ATTR void VKAPI_CALL debug_utils_SubmitDebugUtilsMessageEXT(
|
||||
VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes,
|
||||
const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData) {
|
||||
struct loader_instance *inst = loader_get_instance(instance);
|
||||
|
||||
inst->disp->layer_inst_disp.SubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, pCallbackData);
|
||||
}
|
||||
|
||||
static VKAPI_ATTR void VKAPI_CALL debug_utils_DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger,
|
||||
const VkAllocationCallbacks *pAllocator) {
|
||||
struct loader_instance *inst = loader_get_instance(instance);
|
||||
loader_platform_thread_lock_mutex(&loader_lock);
|
||||
|
||||
inst->disp->layer_inst_disp.DestroyDebugUtilsMessengerEXT(instance, messenger, pAllocator);
|
||||
|
||||
loader_platform_thread_unlock_mutex(&loader_lock);
|
||||
}
|
||||
|
||||
// This is the instance chain terminator function for CreateDebugUtilsMessenger
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDebugUtilsMessengerEXT(VkInstance instance,
|
||||
const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkDebugUtilsMessengerEXT *pMessenger) {
|
||||
VkDebugUtilsMessengerEXT *icd_info = NULL;
|
||||
const struct loader_icd_term *icd_term;
|
||||
struct loader_instance *inst = (struct loader_instance *)instance;
|
||||
VkResult res = VK_SUCCESS;
|
||||
uint32_t storage_idx;
|
||||
VkLayerDbgFunctionNode *pNewDbgFuncNode = NULL;
|
||||
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
icd_info = ((VkDebugUtilsMessengerEXT *)pAllocator->pfnAllocation(pAllocator->pUserData,
|
||||
inst->total_icd_count * sizeof(VkDebugUtilsMessengerEXT),
|
||||
sizeof(void *), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
|
||||
if (icd_info) {
|
||||
memset(icd_info, 0, inst->total_icd_count * sizeof(VkDebugUtilsMessengerEXT));
|
||||
}
|
||||
} else {
|
||||
#endif
|
||||
icd_info = calloc(sizeof(VkDebugUtilsMessengerEXT), inst->total_icd_count);
|
||||
}
|
||||
if (!icd_info) {
|
||||
res = VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
storage_idx = 0;
|
||||
for (icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) {
|
||||
if (!icd_term->dispatch.CreateDebugUtilsMessengerEXT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
res = icd_term->dispatch.CreateDebugUtilsMessengerEXT(icd_term->instance, pCreateInfo, pAllocator, &icd_info[storage_idx]);
|
||||
|
||||
if (res != VK_SUCCESS) {
|
||||
goto out;
|
||||
}
|
||||
storage_idx++;
|
||||
}
|
||||
|
||||
// Setup the debug report callback in the terminator since a layer may want
|
||||
// to grab the information itself (RenderDoc) and then return back to the
|
||||
// user callback a sub-set of the messages.
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 0)
|
||||
if (pAllocator != NULL) {
|
||||
pNewDbgFuncNode = (VkLayerDbgFunctionNode *)pAllocator->pfnAllocation(pAllocator->pUserData, sizeof(VkLayerDbgFunctionNode),
|
||||
sizeof(int *), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
} else {
|
||||
#else
|
||||
{
|
||||
#endif
|
||||
pNewDbgFuncNode = (VkLayerDbgFunctionNode *)loader_instance_heap_alloc(inst, sizeof(VkLayerDbgFunctionNode),
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
}
|
||||
if (!pNewDbgFuncNode) {
|
||||
res = VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
goto out;
|
||||
}
|
||||
memset(pNewDbgFuncNode, 0, sizeof(VkLayerDbgFunctionNode));
|
||||
|
||||
pNewDbgFuncNode->is_messenger = true;
|
||||
pNewDbgFuncNode->messenger.pfnUserCallback = pCreateInfo->pfnUserCallback;
|
||||
pNewDbgFuncNode->messenger.messageSeverity = pCreateInfo->messageSeverity;
|
||||
pNewDbgFuncNode->messenger.messageType = pCreateInfo->messageType;
|
||||
pNewDbgFuncNode->pUserData = pCreateInfo->pUserData;
|
||||
pNewDbgFuncNode->pNext = inst->DbgFunctionHead;
|
||||
inst->DbgFunctionHead = pNewDbgFuncNode;
|
||||
|
||||
*(VkDebugUtilsMessengerEXT **)pMessenger = icd_info;
|
||||
pNewDbgFuncNode->messenger.messenger = *pMessenger;
|
||||
|
||||
out:
|
||||
|
||||
// Roll back on errors
|
||||
if (VK_SUCCESS != res) {
|
||||
storage_idx = 0;
|
||||
for (icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) {
|
||||
if (NULL == icd_term->dispatch.DestroyDebugUtilsMessengerEXT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (icd_info && icd_info[storage_idx]) {
|
||||
icd_term->dispatch.DestroyDebugUtilsMessengerEXT(icd_term->instance, icd_info[storage_idx], pAllocator);
|
||||
}
|
||||
storage_idx++;
|
||||
}
|
||||
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
if (NULL != pNewDbgFuncNode) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, pNewDbgFuncNode);
|
||||
}
|
||||
if (NULL != icd_info) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, icd_info);
|
||||
}
|
||||
} else {
|
||||
#endif
|
||||
if (NULL != pNewDbgFuncNode) {
|
||||
free(pNewDbgFuncNode);
|
||||
}
|
||||
if (NULL != icd_info) {
|
||||
free(icd_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
// This is the instance chain terminator function for DestroyDebugUtilsMessenger
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger,
|
||||
const VkAllocationCallbacks *pAllocator) {
|
||||
uint32_t storage_idx;
|
||||
VkDebugUtilsMessengerEXT *icd_info;
|
||||
const struct loader_icd_term *icd_term;
|
||||
|
||||
struct loader_instance *inst = (struct loader_instance *)instance;
|
||||
icd_info = *(VkDebugUtilsMessengerEXT **)&messenger;
|
||||
storage_idx = 0;
|
||||
for (icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) {
|
||||
if (NULL == icd_term->dispatch.DestroyDebugUtilsMessengerEXT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (icd_info[storage_idx]) {
|
||||
icd_term->dispatch.DestroyDebugUtilsMessengerEXT(icd_term->instance, icd_info[storage_idx], pAllocator);
|
||||
}
|
||||
storage_idx++;
|
||||
}
|
||||
|
||||
util_DestroyDebugUtilsMessenger(inst, messenger, pAllocator);
|
||||
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, icd_info);
|
||||
} else {
|
||||
#endif
|
||||
free(icd_info);
|
||||
}
|
||||
}
|
||||
|
||||
// This is the instance chain terminator function for SubmitDebugUtilsMessageEXT
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_SubmitDebugUtilsMessageEXT(VkInstance instance,
|
||||
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
|
||||
VkDebugUtilsMessageTypeFlagsEXT messageTypes,
|
||||
const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData) {
|
||||
loader_platform_thread_lock_mutex(&loader_lock);
|
||||
// NOTE: Just make the callback ourselves because there could be one or more ICDs that support this extension
|
||||
// and each one will trigger the callback to the user. This would result in multiple callback triggers
|
||||
// per message. Instead, if we get a messaged up to here, then just trigger the message ourselves and
|
||||
// return. This would still allow the ICDs to trigger their own messages, but won't get any external ones.
|
||||
struct loader_instance *inst = (struct loader_instance *)instance;
|
||||
util_SubmitDebugUtilsMessageEXT(inst, messageSeverity, messageTypes, pCallbackData);
|
||||
loader_platform_thread_unlock_mutex(&loader_lock);
|
||||
}
|
||||
|
||||
// VK_EXT_debug_report related items
|
||||
|
||||
VkResult util_CreateDebugReportCallback(struct loader_instance *inst, VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkDebugReportCallbackEXT callback) {
|
||||
VkLayerDbgFunctionNode *pNewDbgFuncNode = NULL;
|
||||
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pNewDbgFuncNode = (VkLayerDbgFunctionNode *)pAllocator->pfnAllocation(pAllocator->pUserData, sizeof(VkLayerDbgFunctionNode),
|
||||
sizeof(int *), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
} else {
|
||||
#endif
|
||||
pNewDbgFuncNode = (VkLayerDbgFunctionNode *)loader_instance_heap_alloc(inst, sizeof(VkLayerDbgFunctionNode),
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
}
|
||||
if (!pNewDbgFuncNode) {
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
memset(pNewDbgFuncNode, 0, sizeof(VkLayerDbgFunctionNode));
|
||||
|
||||
pNewDbgFuncNode->is_messenger = false;
|
||||
pNewDbgFuncNode->report.msgCallback = callback;
|
||||
pNewDbgFuncNode->report.pfnMsgCallback = pCreateInfo->pfnCallback;
|
||||
pNewDbgFuncNode->report.msgFlags = pCreateInfo->flags;
|
||||
pNewDbgFuncNode->pUserData = pCreateInfo->pUserData;
|
||||
pNewDbgFuncNode->pNext = inst->DbgFunctionHead;
|
||||
inst->DbgFunctionHead = pNewDbgFuncNode;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL
|
||||
debug_utils_CreateDebugReportCallbackEXT(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkDebugReportCallbackEXT *pCallback) {
|
||||
struct loader_instance *inst = loader_get_instance(instance);
|
||||
loader_platform_thread_lock_mutex(&loader_lock);
|
||||
VkResult result = inst->disp->layer_inst_disp.CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback);
|
||||
loader_platform_thread_unlock_mutex(&loader_lock);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Utility function to handle reporting
|
||||
VkBool32 util_DebugReportMessage(const struct loader_instance *inst, VkFlags msgFlags, VkDebugReportObjectTypeEXT objectType,
|
||||
uint64_t srcObject, size_t location, int32_t msgCode, const char *pLayerPrefix, const char *pMsg) {
|
||||
VkBool32 bail = false;
|
||||
VkLayerDbgFunctionNode *pTrav = inst->DbgFunctionHead;
|
||||
VkDebugUtilsMessageSeverityFlagBitsEXT severity;
|
||||
VkDebugUtilsMessageTypeFlagsEXT types;
|
||||
VkDebugUtilsMessengerCallbackDataEXT callback_data;
|
||||
VkDebugUtilsObjectNameInfoEXT object_name;
|
||||
|
||||
debug_utils_ReportFlagsToAnnotFlags(msgFlags, false, &severity, &types);
|
||||
debug_utils_ReportObjectToAnnotObject(objectType, srcObject, &object_name);
|
||||
|
||||
callback_data.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT;
|
||||
callback_data.pNext = NULL;
|
||||
callback_data.flags = 0;
|
||||
callback_data.pMessageIdName = pLayerPrefix;
|
||||
callback_data.messageIdNumber = msgCode;
|
||||
callback_data.pMessage = pMsg;
|
||||
callback_data.cmdBufLabelCount = 0;
|
||||
callback_data.pCmdBufLabels = NULL;
|
||||
callback_data.queueLabelCount = 0;
|
||||
callback_data.pQueueLabels = NULL;
|
||||
callback_data.objectCount = 1;
|
||||
callback_data.pObjects = &object_name;
|
||||
|
||||
while (pTrav) {
|
||||
if (!pTrav->is_messenger && pTrav->report.msgFlags & msgFlags) {
|
||||
if (pTrav->report.pfnMsgCallback(msgFlags, objectType, srcObject, location, msgCode, pLayerPrefix, pMsg,
|
||||
pTrav->pUserData)) {
|
||||
bail = true;
|
||||
}
|
||||
}
|
||||
if (pTrav->is_messenger && (pTrav->messenger.messageSeverity & severity) && (pTrav->messenger.messageType & types)) {
|
||||
if (pTrav->messenger.pfnUserCallback(severity, types, &callback_data, pTrav->pUserData)) {
|
||||
bail = true;
|
||||
}
|
||||
}
|
||||
|
||||
pTrav = pTrav->pNext;
|
||||
}
|
||||
|
||||
return bail;
|
||||
}
|
||||
|
||||
void util_DestroyDebugReportCallback(struct loader_instance *inst, VkDebugReportCallbackEXT callback,
|
||||
const VkAllocationCallbacks *pAllocator) {
|
||||
VkLayerDbgFunctionNode *pTrav = inst->DbgFunctionHead;
|
||||
VkLayerDbgFunctionNode *pPrev = pTrav;
|
||||
|
||||
while (pTrav) {
|
||||
if (!pTrav->is_messenger && pTrav->report.msgCallback == callback) {
|
||||
pPrev->pNext = pTrav->pNext;
|
||||
if (inst->DbgFunctionHead == pTrav) inst->DbgFunctionHead = pTrav->pNext;
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, pTrav);
|
||||
} else {
|
||||
#endif
|
||||
loader_instance_heap_free(inst, pTrav);
|
||||
}
|
||||
break;
|
||||
}
|
||||
pPrev = pTrav;
|
||||
pTrav = pTrav->pNext;
|
||||
}
|
||||
}
|
||||
|
||||
// This utility (used by vkInstanceCreateInfo(), looks at a pNext chain. It
|
||||
// counts any VkDebugReportCallbackCreateInfoEXT structs that it finds. It
|
||||
// then allocates array that can hold that many structs, as well as that many
|
||||
// VkDebugReportCallbackEXT handles. It then copies each
|
||||
// VkDebugReportCallbackCreateInfoEXT, and initializes each handle.
|
||||
VkResult util_CopyDebugReportCreateInfos(const void *pChain, const VkAllocationCallbacks *pAllocator, uint32_t *num_callbacks,
|
||||
VkDebugReportCallbackCreateInfoEXT **infos, VkDebugReportCallbackEXT **callbacks) {
|
||||
uint32_t n = *num_callbacks = 0;
|
||||
VkDebugReportCallbackCreateInfoEXT *pInfos = NULL;
|
||||
VkDebugReportCallbackEXT *pCallbacks = NULL;
|
||||
|
||||
const void *pNext = pChain;
|
||||
while (pNext) {
|
||||
// 1st, count the number VkDebugReportCallbackCreateInfoEXT:
|
||||
if (((VkDebugReportCallbackCreateInfoEXT *)pNext)->sType == VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT) {
|
||||
n++;
|
||||
}
|
||||
pNext = (void *)((VkDebugReportCallbackCreateInfoEXT *)pNext)->pNext;
|
||||
}
|
||||
if (n == 0) {
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
// 2nd, allocate memory for each VkDebugReportCallbackCreateInfoEXT:
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pInfos = *infos = ((VkDebugReportCallbackCreateInfoEXT *)pAllocator->pfnAllocation(
|
||||
pAllocator->pUserData, n * sizeof(VkDebugReportCallbackCreateInfoEXT), sizeof(void *),
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
|
||||
} else {
|
||||
#endif
|
||||
pInfos = *infos = ((VkDebugReportCallbackCreateInfoEXT *)malloc(n * sizeof(VkDebugReportCallbackCreateInfoEXT)));
|
||||
}
|
||||
if (!pInfos) {
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
// 3rd, allocate memory for a unique handle for each callback:
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pCallbacks = *callbacks = ((VkDebugReportCallbackEXT *)pAllocator->pfnAllocation(
|
||||
pAllocator->pUserData, n * sizeof(VkDebugReportCallbackEXT), sizeof(void *), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
|
||||
if (!pCallbacks) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, pInfos);
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
} else {
|
||||
#endif
|
||||
pCallbacks = *callbacks = ((VkDebugReportCallbackEXT *)malloc(n * sizeof(VkDebugReportCallbackEXT)));
|
||||
if (!pCallbacks) {
|
||||
free(pInfos);
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
}
|
||||
// 4th, copy each VkDebugReportCallbackCreateInfoEXT for use by
|
||||
// vkDestroyInstance, and assign a unique handle to each callback (just
|
||||
// use the address of the copied VkDebugReportCallbackCreateInfoEXT):
|
||||
pNext = pChain;
|
||||
while (pNext) {
|
||||
if (((VkInstanceCreateInfo *)pNext)->sType == VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT) {
|
||||
memcpy(pInfos, pNext, sizeof(VkDebugReportCallbackCreateInfoEXT));
|
||||
*pCallbacks++ = (VkDebugReportCallbackEXT)(uintptr_t)pInfos++;
|
||||
}
|
||||
pNext = (void *)((VkInstanceCreateInfo *)pNext)->pNext;
|
||||
}
|
||||
|
||||
*num_callbacks = n;
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
void util_FreeDebugReportCreateInfos(const VkAllocationCallbacks *pAllocator, VkDebugReportCallbackCreateInfoEXT *infos,
|
||||
VkDebugReportCallbackEXT *callbacks) {
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, infos);
|
||||
pAllocator->pfnFree(pAllocator->pUserData, callbacks);
|
||||
} else {
|
||||
#endif
|
||||
free(infos);
|
||||
free(callbacks);
|
||||
}
|
||||
}
|
||||
|
||||
VkResult util_CreateDebugReportCallbacks(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator,
|
||||
uint32_t num_callbacks, VkDebugReportCallbackCreateInfoEXT *infos,
|
||||
VkDebugReportCallbackEXT *callbacks) {
|
||||
VkResult rtn = VK_SUCCESS;
|
||||
for (uint32_t i = 0; i < num_callbacks; i++) {
|
||||
rtn = util_CreateDebugReportCallback(inst, &infos[i], pAllocator, callbacks[i]);
|
||||
if (rtn != VK_SUCCESS) {
|
||||
for (uint32_t j = 0; j < i; j++) {
|
||||
util_DestroyDebugReportCallback(inst, callbacks[j], pAllocator);
|
||||
}
|
||||
return rtn;
|
||||
}
|
||||
}
|
||||
return rtn;
|
||||
}
|
||||
|
||||
void util_DestroyDebugReportCallbacks(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator, uint32_t num_callbacks,
|
||||
VkDebugReportCallbackEXT *callbacks) {
|
||||
for (uint32_t i = 0; i < num_callbacks; i++) {
|
||||
util_DestroyDebugReportCallback(inst, callbacks[i], pAllocator);
|
||||
}
|
||||
}
|
||||
|
||||
static VKAPI_ATTR void VKAPI_CALL debug_utils_DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT callback,
|
||||
const VkAllocationCallbacks *pAllocator) {
|
||||
struct loader_instance *inst = loader_get_instance(instance);
|
||||
loader_platform_thread_lock_mutex(&loader_lock);
|
||||
|
||||
inst->disp->layer_inst_disp.DestroyDebugReportCallbackEXT(instance, callback, pAllocator);
|
||||
|
||||
loader_platform_thread_unlock_mutex(&loader_lock);
|
||||
}
|
||||
|
||||
static VKAPI_ATTR void VKAPI_CALL debug_utils_DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags,
|
||||
VkDebugReportObjectTypeEXT objType, uint64_t object,
|
||||
size_t location, int32_t msgCode, const char *pLayerPrefix,
|
||||
const char *pMsg) {
|
||||
struct loader_instance *inst = loader_get_instance(instance);
|
||||
|
||||
inst->disp->layer_inst_disp.DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
|
||||
}
|
||||
|
||||
// This is the instance chain terminator function
|
||||
// for CreateDebugReportCallback
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDebugReportCallbackEXT(VkInstance instance,
|
||||
const VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkDebugReportCallbackEXT *pCallback) {
|
||||
VkDebugReportCallbackEXT *icd_info = NULL;
|
||||
const struct loader_icd_term *icd_term;
|
||||
struct loader_instance *inst = (struct loader_instance *)instance;
|
||||
VkResult res = VK_SUCCESS;
|
||||
uint32_t storage_idx;
|
||||
VkLayerDbgFunctionNode *pNewDbgFuncNode = NULL;
|
||||
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
icd_info = ((VkDebugReportCallbackEXT *)pAllocator->pfnAllocation(pAllocator->pUserData,
|
||||
inst->total_icd_count * sizeof(VkDebugReportCallbackEXT),
|
||||
sizeof(void *), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT));
|
||||
if (icd_info) {
|
||||
memset(icd_info, 0, inst->total_icd_count * sizeof(VkDebugReportCallbackEXT));
|
||||
}
|
||||
} else {
|
||||
#endif
|
||||
icd_info = calloc(sizeof(VkDebugReportCallbackEXT), inst->total_icd_count);
|
||||
}
|
||||
if (!icd_info) {
|
||||
res = VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
storage_idx = 0;
|
||||
for (icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) {
|
||||
if (!icd_term->dispatch.CreateDebugReportCallbackEXT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
res = icd_term->dispatch.CreateDebugReportCallbackEXT(icd_term->instance, pCreateInfo, pAllocator, &icd_info[storage_idx]);
|
||||
|
||||
if (res != VK_SUCCESS) {
|
||||
goto out;
|
||||
}
|
||||
storage_idx++;
|
||||
}
|
||||
|
||||
// Setup the debug report callback in the terminator since a layer may want
|
||||
// to grab the information itself (RenderDoc) and then return back to the
|
||||
// user callback a sub-set of the messages.
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 0)
|
||||
if (pAllocator != NULL) {
|
||||
pNewDbgFuncNode = (VkLayerDbgFunctionNode *)pAllocator->pfnAllocation(pAllocator->pUserData, sizeof(VkLayerDbgFunctionNode),
|
||||
sizeof(int *), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
} else {
|
||||
#else
|
||||
{
|
||||
#endif
|
||||
pNewDbgFuncNode = (VkLayerDbgFunctionNode *)loader_instance_heap_alloc(inst, sizeof(VkLayerDbgFunctionNode),
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
|
||||
}
|
||||
if (!pNewDbgFuncNode) {
|
||||
res = VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
goto out;
|
||||
}
|
||||
memset(pNewDbgFuncNode, 0, sizeof(VkLayerDbgFunctionNode));
|
||||
|
||||
pNewDbgFuncNode->is_messenger = false;
|
||||
pNewDbgFuncNode->report.pfnMsgCallback = pCreateInfo->pfnCallback;
|
||||
pNewDbgFuncNode->report.msgFlags = pCreateInfo->flags;
|
||||
pNewDbgFuncNode->pUserData = pCreateInfo->pUserData;
|
||||
pNewDbgFuncNode->pNext = inst->DbgFunctionHead;
|
||||
inst->DbgFunctionHead = pNewDbgFuncNode;
|
||||
|
||||
*(VkDebugReportCallbackEXT **)pCallback = icd_info;
|
||||
pNewDbgFuncNode->report.msgCallback = *pCallback;
|
||||
|
||||
out:
|
||||
|
||||
// Roll back on errors
|
||||
if (VK_SUCCESS != res) {
|
||||
storage_idx = 0;
|
||||
for (icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) {
|
||||
if (NULL == icd_term->dispatch.DestroyDebugReportCallbackEXT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (icd_info && icd_info[storage_idx]) {
|
||||
icd_term->dispatch.DestroyDebugReportCallbackEXT(icd_term->instance, icd_info[storage_idx], pAllocator);
|
||||
}
|
||||
storage_idx++;
|
||||
}
|
||||
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
if (NULL != pNewDbgFuncNode) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, pNewDbgFuncNode);
|
||||
}
|
||||
if (NULL != icd_info) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, icd_info);
|
||||
}
|
||||
} else {
|
||||
#endif
|
||||
if (NULL != pNewDbgFuncNode) {
|
||||
free(pNewDbgFuncNode);
|
||||
}
|
||||
if (NULL != icd_info) {
|
||||
free(icd_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
// This is the instance chain terminator function for DestroyDebugReportCallback
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT callback,
|
||||
const VkAllocationCallbacks *pAllocator) {
|
||||
uint32_t storage_idx;
|
||||
VkDebugReportCallbackEXT *icd_info;
|
||||
const struct loader_icd_term *icd_term;
|
||||
|
||||
struct loader_instance *inst = (struct loader_instance *)instance;
|
||||
icd_info = *(VkDebugReportCallbackEXT **)&callback;
|
||||
storage_idx = 0;
|
||||
for (icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) {
|
||||
if (NULL == icd_term->dispatch.DestroyDebugReportCallbackEXT) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (icd_info[storage_idx]) {
|
||||
icd_term->dispatch.DestroyDebugReportCallbackEXT(icd_term->instance, icd_info[storage_idx], pAllocator);
|
||||
}
|
||||
storage_idx++;
|
||||
}
|
||||
|
||||
util_DestroyDebugReportCallback(inst, callback, pAllocator);
|
||||
|
||||
#if (DEBUG_DISABLE_APP_ALLOCATORS == 1)
|
||||
{
|
||||
#else
|
||||
if (pAllocator != NULL) {
|
||||
pAllocator->pfnFree(pAllocator->pUserData, icd_info);
|
||||
} else {
|
||||
#endif
|
||||
free(icd_info);
|
||||
}
|
||||
}
|
||||
|
||||
// This is the instance chain terminator function for DebugReportMessage
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags,
|
||||
VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location,
|
||||
int32_t msgCode, const char *pLayerPrefix, const char *pMsg) {
|
||||
const struct loader_icd_term *icd_term;
|
||||
|
||||
struct loader_instance *inst = (struct loader_instance *)instance;
|
||||
|
||||
loader_platform_thread_lock_mutex(&loader_lock);
|
||||
for (icd_term = inst->icd_terms; icd_term; icd_term = icd_term->next) {
|
||||
if (icd_term->dispatch.DebugReportMessageEXT != NULL) {
|
||||
icd_term->dispatch.DebugReportMessageEXT(icd_term->instance, flags, objType, object, location, msgCode, pLayerPrefix,
|
||||
pMsg);
|
||||
}
|
||||
}
|
||||
|
||||
// Now that all ICDs have seen the message, call the necessary callbacks. Ignoring "bail" return value
|
||||
// as there is nothing to bail from at this point.
|
||||
|
||||
util_DebugReportMessage(inst, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
|
||||
|
||||
loader_platform_thread_unlock_mutex(&loader_lock);
|
||||
}
|
||||
|
||||
// General utilities
|
||||
|
||||
static const VkExtensionProperties debug_utils_extension_info[] = {
|
||||
{VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION},
|
||||
{VK_EXT_DEBUG_UTILS_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_SPEC_VERSION},
|
||||
};
|
||||
|
||||
void debug_utils_AddInstanceExtensions(const struct loader_instance *inst, struct loader_extension_list *ext_list) {
|
||||
loader_add_to_ext_list(inst, ext_list, sizeof(debug_utils_extension_info) / sizeof(VkExtensionProperties),
|
||||
debug_utils_extension_info);
|
||||
}
|
||||
|
||||
void debug_utils_CreateInstance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo) {
|
||||
ptr_instance->enabled_known_extensions.ext_debug_report = 0;
|
||||
ptr_instance->enabled_known_extensions.ext_debug_utils = 0;
|
||||
|
||||
for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) {
|
||||
if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_EXT_DEBUG_REPORT_EXTENSION_NAME) == 0) {
|
||||
ptr_instance->enabled_known_extensions.ext_debug_report = 1;
|
||||
} else if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_EXT_DEBUG_UTILS_EXTENSION_NAME) == 0) {
|
||||
ptr_instance->enabled_known_extensions.ext_debug_utils = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool debug_utils_InstanceGpa(struct loader_instance *ptr_instance, const char *name, void **addr) {
|
||||
bool ret_type = false;
|
||||
|
||||
*addr = NULL;
|
||||
|
||||
if (!strcmp("vkCreateDebugReportCallbackEXT", name)) {
|
||||
*addr = ptr_instance->enabled_known_extensions.ext_debug_report == 1 ? (void *)debug_utils_CreateDebugReportCallbackEXT : NULL;
|
||||
ret_type = true;
|
||||
} else if (!strcmp("vkDestroyDebugReportCallbackEXT", name)) {
|
||||
*addr = ptr_instance->enabled_known_extensions.ext_debug_report == 1 ? (void *)debug_utils_DestroyDebugReportCallbackEXT : NULL;
|
||||
ret_type = true;
|
||||
} else if (!strcmp("vkDebugReportMessageEXT", name)) {
|
||||
*addr = ptr_instance->enabled_known_extensions.ext_debug_report == 1 ? (void *)debug_utils_DebugReportMessageEXT : NULL;
|
||||
return true;
|
||||
}
|
||||
if (!strcmp("vkCreateDebugUtilsMessengerEXT", name)) {
|
||||
*addr = ptr_instance->enabled_known_extensions.ext_debug_utils == 1 ? (void *)debug_utils_CreateDebugUtilsMessengerEXT : NULL;
|
||||
ret_type = true;
|
||||
} else if (!strcmp("vkDestroyDebugUtilsMessengerEXT", name)) {
|
||||
*addr = ptr_instance->enabled_known_extensions.ext_debug_utils == 1 ? (void *)debug_utils_DestroyDebugUtilsMessengerEXT : NULL;
|
||||
ret_type = true;
|
||||
} else if (!strcmp("vkSubmitDebugUtilsMessageEXT", name)) {
|
||||
*addr = ptr_instance->enabled_known_extensions.ext_debug_utils == 1 ? (void *)debug_utils_SubmitDebugUtilsMessageEXT : NULL;
|
||||
ret_type = true;
|
||||
}
|
||||
|
||||
return ret_type;
|
||||
}
|
||||
|
||||
bool debug_utils_ReportFlagsToAnnotFlags(VkDebugReportFlagsEXT dr_flags, bool default_flag_is_spec,
|
||||
VkDebugUtilsMessageSeverityFlagBitsEXT *da_severity,
|
||||
VkDebugUtilsMessageTypeFlagsEXT *da_type) {
|
||||
bool type_set = false;
|
||||
if (NULL == da_severity || NULL == da_type) {
|
||||
return false;
|
||||
}
|
||||
*da_type = 0;
|
||||
*da_severity = 0;
|
||||
|
||||
if ((dr_flags & VK_DEBUG_REPORT_INFORMATION_BIT_EXT) != 0) {
|
||||
*da_severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT;
|
||||
*da_type |= VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT;
|
||||
type_set = true;
|
||||
} else if ((dr_flags & (VK_DEBUG_REPORT_WARNING_BIT_EXT | VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT)) != 0) {
|
||||
*da_severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT;
|
||||
} else if ((dr_flags & VK_DEBUG_REPORT_ERROR_BIT_EXT) != 0) {
|
||||
*da_severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
|
||||
} else if ((dr_flags & VK_DEBUG_REPORT_DEBUG_BIT_EXT) != 0) {
|
||||
*da_severity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT;
|
||||
*da_type |= VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT;
|
||||
type_set = true;
|
||||
}
|
||||
|
||||
if ((dr_flags & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT) != 0) {
|
||||
*da_type |= VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
|
||||
} else if (!type_set) {
|
||||
if (default_flag_is_spec) {
|
||||
*da_type |= VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
|
||||
} else {
|
||||
*da_type |= VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool debug_utils_AnnotFlagsToReportFlags(VkDebugUtilsMessageSeverityFlagBitsEXT da_severity,
|
||||
VkDebugUtilsMessageTypeFlagsEXT da_type, VkDebugReportFlagsEXT *dr_flags) {
|
||||
if (NULL == dr_flags) {
|
||||
return false;
|
||||
}
|
||||
|
||||
*dr_flags = 0;
|
||||
|
||||
if ((da_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) != 0) {
|
||||
*dr_flags |= VK_DEBUG_REPORT_ERROR_BIT_EXT;
|
||||
} else if ((da_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) != 0) {
|
||||
if ((da_type & VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) != 0) {
|
||||
*dr_flags |= VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT;
|
||||
} else {
|
||||
*dr_flags |= VK_DEBUG_REPORT_WARNING_BIT_EXT;
|
||||
}
|
||||
} else if ((da_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) != 0) {
|
||||
*dr_flags |= VK_DEBUG_REPORT_INFORMATION_BIT_EXT;
|
||||
} else if ((da_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) != 0) {
|
||||
*dr_flags |= VK_DEBUG_REPORT_DEBUG_BIT_EXT;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool debug_utils_ReportObjectToAnnotObject(VkDebugReportObjectTypeEXT dr_object_type, uint64_t object_handle,
|
||||
VkDebugUtilsObjectNameInfoEXT *da_object_name_info) {
|
||||
if (NULL == da_object_name_info) {
|
||||
return false;
|
||||
}
|
||||
da_object_name_info->sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
|
||||
da_object_name_info->pNext = NULL;
|
||||
da_object_name_info->objectHandle = (uint64_t)(uintptr_t)object_handle;
|
||||
da_object_name_info->pObjectName = NULL;
|
||||
da_object_name_info->objectType = convertDebugReportObjectToCoreObject(dr_object_type);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool debug_utils_AnnotObjectToDebugReportObject(const VkDebugUtilsObjectNameInfoEXT *da_object_name_info,
|
||||
VkDebugReportObjectTypeEXT *dr_object_type, uint64_t *dr_object_handle) {
|
||||
if (NULL == da_object_name_info || NULL == dr_object_type || NULL == dr_object_handle) {
|
||||
return false;
|
||||
}
|
||||
*dr_object_type = convertCoreObjectToDebugReportObject(da_object_name_info->objectType);
|
||||
*dr_object_handle = da_object_name_info->objectHandle;
|
||||
return true;
|
||||
}
|
||||
101
thirdparty/vulkan/loader/debug_utils.h
vendored
Executable file
101
thirdparty/vulkan/loader/debug_utils.h
vendored
Executable file
@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2017 Valve Corporation
|
||||
* Copyright (c) 2015-2017 LunarG, Inc.
|
||||
* Copyright (C) 2015-2016 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Courtney Goeltzenleuchter <courtney@LunarG.com>
|
||||
* Author: Jon Ashburn <jon@lunarg.com>
|
||||
* Author: Mark Young <markyk@lunarg.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "vk_loader_platform.h"
|
||||
#include "loader.h"
|
||||
|
||||
// General utilities
|
||||
|
||||
void debug_utils_AddInstanceExtensions(const struct loader_instance *inst, struct loader_extension_list *ext_list);
|
||||
void debug_utils_CreateInstance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo);
|
||||
bool debug_utils_InstanceGpa(struct loader_instance *ptr_instance, const char *name, void **addr);
|
||||
bool debug_utils_ReportFlagsToAnnotFlags(VkDebugReportFlagsEXT dr_flags, bool default_flag_is_spec,
|
||||
VkDebugUtilsMessageSeverityFlagBitsEXT *da_severity,
|
||||
VkDebugUtilsMessageTypeFlagsEXT *da_type);
|
||||
bool debug_utils_AnnotFlagsToReportFlags(VkDebugUtilsMessageSeverityFlagBitsEXT da_severity,
|
||||
VkDebugUtilsMessageTypeFlagsEXT da_type, VkDebugReportFlagsEXT *dr_flags);
|
||||
bool debug_utils_ReportObjectToAnnotObject(VkDebugReportObjectTypeEXT dr_object_type, uint64_t object_handle,
|
||||
VkDebugUtilsObjectNameInfoEXT *da_object_name_info);
|
||||
bool debug_utils_AnnotObjectToDebugReportObject(const VkDebugUtilsObjectNameInfoEXT *da_object_name_info,
|
||||
VkDebugReportObjectTypeEXT *dr_object_type, uint64_t *dr_object_handle);
|
||||
|
||||
// VK_EXT_debug_utils related items
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDebugUtilsMessengerEXT(VkInstance instance,
|
||||
const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkDebugUtilsMessengerEXT *pMessenger);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger,
|
||||
const VkAllocationCallbacks *pAllocator);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_SubmitDebugUtilsMessageEXT(VkInstance instance,
|
||||
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
|
||||
VkDebugUtilsMessageTypeFlagsEXT messageTypes,
|
||||
const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData);
|
||||
VkResult util_CreateDebugUtilsMessenger(struct loader_instance *inst, const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerEXT messenger);
|
||||
VkResult util_CreateDebugUtilsMessengers(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator,
|
||||
uint32_t num_messengers, VkDebugUtilsMessengerCreateInfoEXT *infos,
|
||||
VkDebugUtilsMessengerEXT *messengers);
|
||||
VkBool32 util_SubmitDebugUtilsMessageEXT(const struct loader_instance *inst, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
|
||||
VkDebugUtilsMessageTypeFlagsEXT messageTypes,
|
||||
const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData);
|
||||
VkResult util_CopyDebugUtilsMessengerCreateInfos(const void *pChain, const VkAllocationCallbacks *pAllocator,
|
||||
uint32_t *num_messengers, VkDebugUtilsMessengerCreateInfoEXT **infos,
|
||||
VkDebugUtilsMessengerEXT **messengers);
|
||||
void util_DestroyDebugUtilsMessenger(struct loader_instance *inst, VkDebugUtilsMessengerEXT messenger,
|
||||
const VkAllocationCallbacks *pAllocator);
|
||||
void util_DestroyDebugUtilsMessengers(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator,
|
||||
uint32_t num_messengers, VkDebugUtilsMessengerEXT *messengers);
|
||||
void util_FreeDebugUtilsMessengerCreateInfos(const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerCreateInfoEXT *infos,
|
||||
VkDebugUtilsMessengerEXT *messengers);
|
||||
|
||||
// VK_EXT_debug_report related items
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDebugReportCallbackEXT(VkInstance instance,
|
||||
const VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkDebugReportCallbackEXT *pCallback);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT callback,
|
||||
const VkAllocationCallbacks *pAllocator);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags,
|
||||
VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location,
|
||||
int32_t msgCode, const char *pLayerPrefix, const char *pMsg);
|
||||
|
||||
VkResult util_CreateDebugReportCallback(struct loader_instance *inst, VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkDebugReportCallbackEXT callback);
|
||||
VkResult util_CreateDebugReportCallbacks(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator,
|
||||
uint32_t num_callbacks, VkDebugReportCallbackCreateInfoEXT *infos,
|
||||
VkDebugReportCallbackEXT *callbacks);
|
||||
VkBool32 util_DebugReportMessage(const struct loader_instance *inst, VkFlags msgFlags, VkDebugReportObjectTypeEXT objectType,
|
||||
uint64_t srcObject, size_t location, int32_t msgCode, const char *pLayerPrefix, const char *pMsg);
|
||||
VkResult util_CopyDebugReportCreateInfos(const void *pChain, const VkAllocationCallbacks *pAllocator, uint32_t *num_callbacks,
|
||||
VkDebugReportCallbackCreateInfoEXT **infos, VkDebugReportCallbackEXT **callbacks);
|
||||
void util_DestroyDebugReportCallback(struct loader_instance *inst, VkDebugReportCallbackEXT callback,
|
||||
const VkAllocationCallbacks *pAllocator);
|
||||
void util_DestroyDebugReportCallbacks(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator, uint32_t num_callbacks,
|
||||
VkDebugReportCallbackEXT *callbacks);
|
||||
void util_FreeDebugReportCreateInfos(const VkAllocationCallbacks *pAllocator, VkDebugReportCallbackCreateInfoEXT *infos,
|
||||
VkDebugReportCallbackEXT *callbacks);
|
||||
538
thirdparty/vulkan/loader/dev_ext_trampoline.c
vendored
Executable file
538
thirdparty/vulkan/loader/dev_ext_trampoline.c
vendored
Executable file
@ -0,0 +1,538 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2016 Valve Corporation
|
||||
* Copyright (c) 2015-2016 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Jon Ashburn <jon@lunarg.com>
|
||||
* Author: Lenny Komow <lenny@lunarg.com>
|
||||
*/
|
||||
|
||||
#include "vk_loader_platform.h"
|
||||
#include "loader.h"
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
#pragma GCC optimize(3) // force gcc to use tail-calls
|
||||
#endif
|
||||
|
||||
// Clang-format does not understand macros.
|
||||
// clang-format off
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext0(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext1(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext2(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext3(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext4(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext5(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext6(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext7(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext8(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext9(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext10(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext11(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext12(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext13(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext14(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext15(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext16(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext17(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext18(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext19(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext20(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext21(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext22(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext23(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext24(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext25(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext26(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext27(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext28(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext29(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext30(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext31(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext32(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext33(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext34(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext35(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext36(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext37(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext38(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext39(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext40(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext41(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext42(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext43(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext44(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext45(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext46(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext47(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext48(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext49(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext50(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext51(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext52(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext53(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext54(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext55(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext56(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext57(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext58(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext59(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext60(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext61(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext62(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext63(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext64(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext65(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext66(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext67(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext68(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext69(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext70(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext71(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext72(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext73(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext74(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext75(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext76(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext77(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext78(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext79(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext80(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext81(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext82(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext83(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext84(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext85(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext86(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext87(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext88(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext89(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext90(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext91(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext92(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext93(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext94(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext95(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext96(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext97(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext98(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext99(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext100(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext101(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext102(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext103(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext104(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext105(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext106(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext107(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext108(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext109(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext110(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext111(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext112(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext113(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext114(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext115(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext116(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext117(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext118(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext119(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext120(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext121(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext122(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext123(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext124(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext125(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext126(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext127(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext128(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext129(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext130(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext131(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext132(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext133(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext134(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext135(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext136(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext137(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext138(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext139(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext140(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext141(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext142(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext143(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext144(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext145(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext146(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext147(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext148(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext149(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext150(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext151(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext152(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext153(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext154(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext155(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext156(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext157(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext158(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext159(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext160(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext161(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext162(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext163(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext164(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext165(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext166(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext167(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext168(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext169(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext170(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext171(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext172(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext173(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext174(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext175(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext176(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext177(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext178(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext179(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext180(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext181(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext182(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext183(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext184(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext185(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext186(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext187(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext188(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext189(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext190(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext191(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext192(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext193(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext194(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext195(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext196(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext197(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext198(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext199(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext200(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext201(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext202(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext203(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext204(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext205(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext206(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext207(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext208(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext209(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext210(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext211(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext212(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext213(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext214(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext215(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext216(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext217(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext218(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext219(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext220(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext221(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext222(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext223(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext224(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext225(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext226(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext227(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext228(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext229(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext230(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext231(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext232(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext233(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext234(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext235(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext236(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext237(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext238(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext239(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext240(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext241(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext242(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext243(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext244(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext245(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext246(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext247(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext248(VkDevice device);
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext249(VkDevice device);
|
||||
|
||||
void *loader_get_dev_ext_trampoline(uint32_t index) {
|
||||
switch (index) {
|
||||
#define CASE_HANDLE(num) case num: return vkdev_ext##num
|
||||
CASE_HANDLE(0);
|
||||
CASE_HANDLE(1);
|
||||
CASE_HANDLE(2);
|
||||
CASE_HANDLE(3);
|
||||
CASE_HANDLE(4);
|
||||
CASE_HANDLE(5);
|
||||
CASE_HANDLE(6);
|
||||
CASE_HANDLE(7);
|
||||
CASE_HANDLE(8);
|
||||
CASE_HANDLE(9);
|
||||
CASE_HANDLE(10);
|
||||
CASE_HANDLE(11);
|
||||
CASE_HANDLE(12);
|
||||
CASE_HANDLE(13);
|
||||
CASE_HANDLE(14);
|
||||
CASE_HANDLE(15);
|
||||
CASE_HANDLE(16);
|
||||
CASE_HANDLE(17);
|
||||
CASE_HANDLE(18);
|
||||
CASE_HANDLE(19);
|
||||
CASE_HANDLE(20);
|
||||
CASE_HANDLE(21);
|
||||
CASE_HANDLE(22);
|
||||
CASE_HANDLE(23);
|
||||
CASE_HANDLE(24);
|
||||
CASE_HANDLE(25);
|
||||
CASE_HANDLE(26);
|
||||
CASE_HANDLE(27);
|
||||
CASE_HANDLE(28);
|
||||
CASE_HANDLE(29);
|
||||
CASE_HANDLE(30);
|
||||
CASE_HANDLE(31);
|
||||
CASE_HANDLE(32);
|
||||
CASE_HANDLE(33);
|
||||
CASE_HANDLE(34);
|
||||
CASE_HANDLE(35);
|
||||
CASE_HANDLE(36);
|
||||
CASE_HANDLE(37);
|
||||
CASE_HANDLE(38);
|
||||
CASE_HANDLE(39);
|
||||
CASE_HANDLE(40);
|
||||
CASE_HANDLE(41);
|
||||
CASE_HANDLE(42);
|
||||
CASE_HANDLE(43);
|
||||
CASE_HANDLE(44);
|
||||
CASE_HANDLE(45);
|
||||
CASE_HANDLE(46);
|
||||
CASE_HANDLE(47);
|
||||
CASE_HANDLE(48);
|
||||
CASE_HANDLE(49);
|
||||
CASE_HANDLE(50);
|
||||
CASE_HANDLE(51);
|
||||
CASE_HANDLE(52);
|
||||
CASE_HANDLE(53);
|
||||
CASE_HANDLE(54);
|
||||
CASE_HANDLE(55);
|
||||
CASE_HANDLE(56);
|
||||
CASE_HANDLE(57);
|
||||
CASE_HANDLE(58);
|
||||
CASE_HANDLE(59);
|
||||
CASE_HANDLE(60);
|
||||
CASE_HANDLE(61);
|
||||
CASE_HANDLE(62);
|
||||
CASE_HANDLE(63);
|
||||
CASE_HANDLE(64);
|
||||
CASE_HANDLE(65);
|
||||
CASE_HANDLE(66);
|
||||
CASE_HANDLE(67);
|
||||
CASE_HANDLE(68);
|
||||
CASE_HANDLE(69);
|
||||
CASE_HANDLE(70);
|
||||
CASE_HANDLE(71);
|
||||
CASE_HANDLE(72);
|
||||
CASE_HANDLE(73);
|
||||
CASE_HANDLE(74);
|
||||
CASE_HANDLE(75);
|
||||
CASE_HANDLE(76);
|
||||
CASE_HANDLE(77);
|
||||
CASE_HANDLE(78);
|
||||
CASE_HANDLE(79);
|
||||
CASE_HANDLE(80);
|
||||
CASE_HANDLE(81);
|
||||
CASE_HANDLE(82);
|
||||
CASE_HANDLE(83);
|
||||
CASE_HANDLE(84);
|
||||
CASE_HANDLE(85);
|
||||
CASE_HANDLE(86);
|
||||
CASE_HANDLE(87);
|
||||
CASE_HANDLE(88);
|
||||
CASE_HANDLE(89);
|
||||
CASE_HANDLE(90);
|
||||
CASE_HANDLE(91);
|
||||
CASE_HANDLE(92);
|
||||
CASE_HANDLE(93);
|
||||
CASE_HANDLE(94);
|
||||
CASE_HANDLE(95);
|
||||
CASE_HANDLE(96);
|
||||
CASE_HANDLE(97);
|
||||
CASE_HANDLE(98);
|
||||
CASE_HANDLE(99);
|
||||
CASE_HANDLE(100);
|
||||
CASE_HANDLE(101);
|
||||
CASE_HANDLE(102);
|
||||
CASE_HANDLE(103);
|
||||
CASE_HANDLE(104);
|
||||
CASE_HANDLE(105);
|
||||
CASE_HANDLE(106);
|
||||
CASE_HANDLE(107);
|
||||
CASE_HANDLE(108);
|
||||
CASE_HANDLE(109);
|
||||
CASE_HANDLE(110);
|
||||
CASE_HANDLE(111);
|
||||
CASE_HANDLE(112);
|
||||
CASE_HANDLE(113);
|
||||
CASE_HANDLE(114);
|
||||
CASE_HANDLE(115);
|
||||
CASE_HANDLE(116);
|
||||
CASE_HANDLE(117);
|
||||
CASE_HANDLE(118);
|
||||
CASE_HANDLE(119);
|
||||
CASE_HANDLE(120);
|
||||
CASE_HANDLE(121);
|
||||
CASE_HANDLE(122);
|
||||
CASE_HANDLE(123);
|
||||
CASE_HANDLE(124);
|
||||
CASE_HANDLE(125);
|
||||
CASE_HANDLE(126);
|
||||
CASE_HANDLE(127);
|
||||
CASE_HANDLE(128);
|
||||
CASE_HANDLE(129);
|
||||
CASE_HANDLE(130);
|
||||
CASE_HANDLE(131);
|
||||
CASE_HANDLE(132);
|
||||
CASE_HANDLE(133);
|
||||
CASE_HANDLE(134);
|
||||
CASE_HANDLE(135);
|
||||
CASE_HANDLE(136);
|
||||
CASE_HANDLE(137);
|
||||
CASE_HANDLE(138);
|
||||
CASE_HANDLE(139);
|
||||
CASE_HANDLE(140);
|
||||
CASE_HANDLE(141);
|
||||
CASE_HANDLE(142);
|
||||
CASE_HANDLE(143);
|
||||
CASE_HANDLE(144);
|
||||
CASE_HANDLE(145);
|
||||
CASE_HANDLE(146);
|
||||
CASE_HANDLE(147);
|
||||
CASE_HANDLE(148);
|
||||
CASE_HANDLE(149);
|
||||
CASE_HANDLE(150);
|
||||
CASE_HANDLE(151);
|
||||
CASE_HANDLE(152);
|
||||
CASE_HANDLE(153);
|
||||
CASE_HANDLE(154);
|
||||
CASE_HANDLE(155);
|
||||
CASE_HANDLE(156);
|
||||
CASE_HANDLE(157);
|
||||
CASE_HANDLE(158);
|
||||
CASE_HANDLE(159);
|
||||
CASE_HANDLE(160);
|
||||
CASE_HANDLE(161);
|
||||
CASE_HANDLE(162);
|
||||
CASE_HANDLE(163);
|
||||
CASE_HANDLE(164);
|
||||
CASE_HANDLE(165);
|
||||
CASE_HANDLE(166);
|
||||
CASE_HANDLE(167);
|
||||
CASE_HANDLE(168);
|
||||
CASE_HANDLE(169);
|
||||
CASE_HANDLE(170);
|
||||
CASE_HANDLE(171);
|
||||
CASE_HANDLE(172);
|
||||
CASE_HANDLE(173);
|
||||
CASE_HANDLE(174);
|
||||
CASE_HANDLE(175);
|
||||
CASE_HANDLE(176);
|
||||
CASE_HANDLE(177);
|
||||
CASE_HANDLE(178);
|
||||
CASE_HANDLE(179);
|
||||
CASE_HANDLE(180);
|
||||
CASE_HANDLE(181);
|
||||
CASE_HANDLE(182);
|
||||
CASE_HANDLE(183);
|
||||
CASE_HANDLE(184);
|
||||
CASE_HANDLE(185);
|
||||
CASE_HANDLE(186);
|
||||
CASE_HANDLE(187);
|
||||
CASE_HANDLE(188);
|
||||
CASE_HANDLE(189);
|
||||
CASE_HANDLE(190);
|
||||
CASE_HANDLE(191);
|
||||
CASE_HANDLE(192);
|
||||
CASE_HANDLE(193);
|
||||
CASE_HANDLE(194);
|
||||
CASE_HANDLE(195);
|
||||
CASE_HANDLE(196);
|
||||
CASE_HANDLE(197);
|
||||
CASE_HANDLE(198);
|
||||
CASE_HANDLE(199);
|
||||
CASE_HANDLE(200);
|
||||
CASE_HANDLE(201);
|
||||
CASE_HANDLE(202);
|
||||
CASE_HANDLE(203);
|
||||
CASE_HANDLE(204);
|
||||
CASE_HANDLE(205);
|
||||
CASE_HANDLE(206);
|
||||
CASE_HANDLE(207);
|
||||
CASE_HANDLE(208);
|
||||
CASE_HANDLE(209);
|
||||
CASE_HANDLE(210);
|
||||
CASE_HANDLE(211);
|
||||
CASE_HANDLE(212);
|
||||
CASE_HANDLE(213);
|
||||
CASE_HANDLE(214);
|
||||
CASE_HANDLE(215);
|
||||
CASE_HANDLE(216);
|
||||
CASE_HANDLE(217);
|
||||
CASE_HANDLE(218);
|
||||
CASE_HANDLE(219);
|
||||
CASE_HANDLE(220);
|
||||
CASE_HANDLE(221);
|
||||
CASE_HANDLE(222);
|
||||
CASE_HANDLE(223);
|
||||
CASE_HANDLE(224);
|
||||
CASE_HANDLE(225);
|
||||
CASE_HANDLE(226);
|
||||
CASE_HANDLE(227);
|
||||
CASE_HANDLE(228);
|
||||
CASE_HANDLE(229);
|
||||
CASE_HANDLE(230);
|
||||
CASE_HANDLE(231);
|
||||
CASE_HANDLE(232);
|
||||
CASE_HANDLE(233);
|
||||
CASE_HANDLE(234);
|
||||
CASE_HANDLE(235);
|
||||
CASE_HANDLE(236);
|
||||
CASE_HANDLE(237);
|
||||
CASE_HANDLE(238);
|
||||
CASE_HANDLE(239);
|
||||
CASE_HANDLE(240);
|
||||
CASE_HANDLE(241);
|
||||
CASE_HANDLE(242);
|
||||
CASE_HANDLE(243);
|
||||
CASE_HANDLE(244);
|
||||
CASE_HANDLE(245);
|
||||
CASE_HANDLE(246);
|
||||
CASE_HANDLE(247);
|
||||
CASE_HANDLE(248);
|
||||
CASE_HANDLE(249);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
128
thirdparty/vulkan/loader/dirent_on_windows.c
vendored
Executable file
128
thirdparty/vulkan/loader/dirent_on_windows.c
vendored
Executable file
@ -0,0 +1,128 @@
|
||||
/*
|
||||
|
||||
Implementation of POSIX directory browsing functions and types for Win32.
|
||||
|
||||
Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com)
|
||||
History: Created March 1997. Updated June 2003 and July 2012.
|
||||
Rights: See end of file.
|
||||
|
||||
*/
|
||||
#include "dirent_on_windows.h"
|
||||
#include <errno.h>
|
||||
#include <io.h> /* _findfirst and _findnext set errno iff they return -1 */
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "vk_loader_platform.h"
|
||||
#include "loader.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef ptrdiff_t handle_type; /* C99's intptr_t not sufficiently portable */
|
||||
|
||||
struct DIR {
|
||||
handle_type handle; /* -1 for failed rewind */
|
||||
struct _finddata_t info;
|
||||
struct dirent result; /* d_name null iff first time */
|
||||
char *name; /* null-terminated char string */
|
||||
};
|
||||
|
||||
DIR *opendir(const char *name) {
|
||||
DIR *dir = 0;
|
||||
|
||||
if (name && name[0]) {
|
||||
size_t base_length = strlen(name);
|
||||
const char *all = /* search pattern must end with suitable wildcard */
|
||||
strchr("/\\", name[base_length - 1]) ? "*" : "/*";
|
||||
|
||||
if ((dir = (DIR *)loader_instance_tls_heap_alloc(sizeof *dir)) != 0 &&
|
||||
(dir->name = (char *)loader_instance_tls_heap_alloc(base_length + strlen(all) + 1)) != 0) {
|
||||
strcat(strcpy(dir->name, name), all);
|
||||
|
||||
if ((dir->handle = (handle_type)_findfirst(dir->name, &dir->info)) != -1) {
|
||||
dir->result.d_name = 0;
|
||||
} else /* rollback */
|
||||
{
|
||||
loader_instance_tls_heap_free(dir->name);
|
||||
loader_instance_tls_heap_free(dir);
|
||||
dir = 0;
|
||||
}
|
||||
} else /* rollback */
|
||||
{
|
||||
loader_instance_tls_heap_free(dir);
|
||||
dir = 0;
|
||||
errno = ENOMEM;
|
||||
}
|
||||
} else {
|
||||
errno = EINVAL;
|
||||
}
|
||||
|
||||
return dir;
|
||||
}
|
||||
|
||||
int closedir(DIR *dir) {
|
||||
int result = -1;
|
||||
|
||||
if (dir) {
|
||||
if (dir->handle != -1) {
|
||||
result = _findclose(dir->handle);
|
||||
}
|
||||
|
||||
loader_instance_tls_heap_free(dir->name);
|
||||
loader_instance_tls_heap_free(dir);
|
||||
}
|
||||
|
||||
if (result == -1) /* map all errors to EBADF */
|
||||
{
|
||||
errno = EBADF;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
struct dirent *readdir(DIR *dir) {
|
||||
struct dirent *result = 0;
|
||||
|
||||
if (dir && dir->handle != -1) {
|
||||
if (!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) {
|
||||
result = &dir->result;
|
||||
result->d_name = dir->info.name;
|
||||
}
|
||||
} else {
|
||||
errno = EBADF;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void rewinddir(DIR *dir) {
|
||||
if (dir && dir->handle != -1) {
|
||||
_findclose(dir->handle);
|
||||
dir->handle = (handle_type)_findfirst(dir->name, &dir->info);
|
||||
dir->result.d_name = 0;
|
||||
} else {
|
||||
errno = EBADF;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
Copyright Kevlin Henney, 1997, 2003, 2012. All rights reserved.
|
||||
Copyright (c) 2015 The Khronos Group Inc.
|
||||
Copyright (c) 2015 Valve Corporation
|
||||
Copyright (c) 2015 LunarG, Inc.
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided
|
||||
that this copyright and permissions notice appear in all copies and
|
||||
derivatives.
|
||||
|
||||
This software is supplied "as is" without express or implied warranty.
|
||||
|
||||
But that said, if there are any problems please get in touch.
|
||||
|
||||
*/
|
||||
51
thirdparty/vulkan/loader/dirent_on_windows.h
vendored
Executable file
51
thirdparty/vulkan/loader/dirent_on_windows.h
vendored
Executable file
@ -0,0 +1,51 @@
|
||||
#ifndef DIRENT_INCLUDED
|
||||
#define DIRENT_INCLUDED
|
||||
|
||||
/*
|
||||
|
||||
Declaration of POSIX directory browsing functions and types for Win32.
|
||||
|
||||
Author: Kevlin Henney (kevlin@acm.org, kevlin@curbralan.com)
|
||||
History: Created March 1997. Updated June 2003.
|
||||
Rights: See end of file.
|
||||
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct DIR DIR;
|
||||
|
||||
struct dirent {
|
||||
char *d_name;
|
||||
};
|
||||
|
||||
DIR *opendir(const char *);
|
||||
int closedir(DIR *);
|
||||
struct dirent *readdir(DIR *);
|
||||
void rewinddir(DIR *);
|
||||
|
||||
/*
|
||||
|
||||
Copyright Kevlin Henney, 1997, 2003. All rights reserved.
|
||||
Copyright (c) 2015 The Khronos Group Inc.
|
||||
Copyright (c) 2015 Valve Corporation
|
||||
Copyright (c) 2015 LunarG, Inc.
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose is hereby granted without fee, provided
|
||||
that this copyright and permissions notice appear in all copies and
|
||||
derivatives.
|
||||
|
||||
This software is supplied "as is" without express or implied warranty.
|
||||
|
||||
But that said, if there are any problems please get in touch.
|
||||
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
432
thirdparty/vulkan/loader/extension_manual.c
vendored
Executable file
432
thirdparty/vulkan/loader/extension_manual.c
vendored
Executable file
@ -0,0 +1,432 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2017 Valve Corporation
|
||||
* Copyright (c) 2015-2017 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Mark Young <marky@lunarg.com>
|
||||
* Author: Lenny Komow <lenny@lunarg.com>
|
||||
*/
|
||||
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "vk_loader_platform.h"
|
||||
#include "loader.h"
|
||||
#include "vk_loader_extensions.h"
|
||||
#include <vulkan/vk_icd.h>
|
||||
#include "wsi.h"
|
||||
#include "debug_utils.h"
|
||||
|
||||
// ---- Manually added trampoline/terminator functions
|
||||
|
||||
// These functions, for whatever reason, require more complex changes than
|
||||
// can easily be automatically generated.
|
||||
|
||||
// ---- VK_KHR_device_group extension trampoline/terminators
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo,
|
||||
VkSurfaceCapabilities2KHR *pSurfaceCapabilities) {
|
||||
const VkLayerInstanceDispatchTable *disp;
|
||||
VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
|
||||
disp = loader_get_instance_layer_dispatch(physicalDevice);
|
||||
return disp->GetPhysicalDeviceSurfaceCapabilities2KHR(unwrapped_phys_dev, pSurfaceInfo, pSurfaceCapabilities);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilities2KHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo,
|
||||
VkSurfaceCapabilities2KHR *pSurfaceCapabilities) {
|
||||
struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice;
|
||||
struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;
|
||||
|
||||
VkIcdSurface *icd_surface = (VkIcdSurface *)(pSurfaceInfo->surface);
|
||||
uint8_t icd_index = phys_dev_term->icd_index;
|
||||
|
||||
if (icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilities2KHR != NULL) {
|
||||
// Pass the call to the driver, possibly unwrapping the ICD surface
|
||||
if (icd_surface->real_icd_surfaces != NULL && (void *)icd_surface->real_icd_surfaces[icd_index] != NULL) {
|
||||
VkPhysicalDeviceSurfaceInfo2KHR info_copy = *pSurfaceInfo;
|
||||
info_copy.surface = icd_surface->real_icd_surfaces[icd_index];
|
||||
return icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilities2KHR(phys_dev_term->phys_dev, &info_copy,
|
||||
pSurfaceCapabilities);
|
||||
} else {
|
||||
return icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilities2KHR(phys_dev_term->phys_dev, pSurfaceInfo,
|
||||
pSurfaceCapabilities);
|
||||
}
|
||||
} else {
|
||||
// Emulate the call
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, 0,
|
||||
"vkGetPhysicalDeviceSurfaceCapabilities2KHR: Emulating call in ICD \"%s\" using "
|
||||
"vkGetPhysicalDeviceSurfaceCapabilitiesKHR",
|
||||
icd_term->scanned_icd->lib_name);
|
||||
|
||||
if (pSurfaceInfo->pNext != NULL) {
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0,
|
||||
"vkGetPhysicalDeviceSurfaceCapabilities2KHR: Emulation found unrecognized structure type in "
|
||||
"pSurfaceInfo->pNext - this struct will be ignored");
|
||||
}
|
||||
|
||||
// Write to the VkSurfaceCapabilities2KHR struct
|
||||
VkSurfaceKHR surface = pSurfaceInfo->surface;
|
||||
if (icd_surface->real_icd_surfaces != NULL && (void *)icd_surface->real_icd_surfaces[icd_index] != NULL) {
|
||||
surface = icd_surface->real_icd_surfaces[icd_index];
|
||||
}
|
||||
VkResult res = icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilitiesKHR(phys_dev_term->phys_dev, surface,
|
||||
&pSurfaceCapabilities->surfaceCapabilities);
|
||||
|
||||
if (pSurfaceCapabilities->pNext != NULL) {
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0,
|
||||
"vkGetPhysicalDeviceSurfaceCapabilities2KHR: Emulation found unrecognized structure type in "
|
||||
"pSurfaceCapabilities->pNext - this struct will be ignored");
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
// ---- VK_NV_external_memory_capabilities extension trampoline/terminators
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
GetPhysicalDeviceExternalImageFormatPropertiesNV(
|
||||
VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type,
|
||||
VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags,
|
||||
VkExternalMemoryHandleTypeFlagsNV externalHandleType,
|
||||
VkExternalImageFormatPropertiesNV *pExternalImageFormatProperties) {
|
||||
const VkLayerInstanceDispatchTable *disp;
|
||||
VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
|
||||
disp = loader_get_instance_layer_dispatch(physicalDevice);
|
||||
|
||||
return disp->GetPhysicalDeviceExternalImageFormatPropertiesNV(
|
||||
unwrapped_phys_dev, format, type, tiling, usage, flags,
|
||||
externalHandleType, pExternalImageFormatProperties);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
terminator_GetPhysicalDeviceExternalImageFormatPropertiesNV(
|
||||
VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type,
|
||||
VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags,
|
||||
VkExternalMemoryHandleTypeFlagsNV externalHandleType,
|
||||
VkExternalImageFormatPropertiesNV *pExternalImageFormatProperties) {
|
||||
struct loader_physical_device_term *phys_dev_term =
|
||||
(struct loader_physical_device_term *)physicalDevice;
|
||||
struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;
|
||||
|
||||
if (!icd_term->dispatch.GetPhysicalDeviceExternalImageFormatPropertiesNV) {
|
||||
if (externalHandleType) {
|
||||
return VK_ERROR_FORMAT_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
if (!icd_term->dispatch.GetPhysicalDeviceImageFormatProperties) {
|
||||
return VK_ERROR_INITIALIZATION_FAILED;
|
||||
}
|
||||
|
||||
pExternalImageFormatProperties->externalMemoryFeatures = 0;
|
||||
pExternalImageFormatProperties->exportFromImportedHandleTypes = 0;
|
||||
pExternalImageFormatProperties->compatibleHandleTypes = 0;
|
||||
|
||||
return icd_term->dispatch.GetPhysicalDeviceImageFormatProperties(
|
||||
phys_dev_term->phys_dev, format, type, tiling, usage, flags,
|
||||
&pExternalImageFormatProperties->imageFormatProperties);
|
||||
}
|
||||
|
||||
return icd_term->dispatch.GetPhysicalDeviceExternalImageFormatPropertiesNV(
|
||||
phys_dev_term->phys_dev, format, type, tiling, usage, flags,
|
||||
externalHandleType, pExternalImageFormatProperties);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo,
|
||||
uint32_t *pSurfaceFormatCount,
|
||||
VkSurfaceFormat2KHR *pSurfaceFormats) {
|
||||
const VkLayerInstanceDispatchTable *disp;
|
||||
VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
|
||||
disp = loader_get_instance_layer_dispatch(physicalDevice);
|
||||
return disp->GetPhysicalDeviceSurfaceFormats2KHR(unwrapped_phys_dev, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo,
|
||||
uint32_t *pSurfaceFormatCount,
|
||||
VkSurfaceFormat2KHR *pSurfaceFormats) {
|
||||
struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice;
|
||||
struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;
|
||||
|
||||
VkIcdSurface *icd_surface = (VkIcdSurface *)(pSurfaceInfo->surface);
|
||||
uint8_t icd_index = phys_dev_term->icd_index;
|
||||
|
||||
if (icd_term->dispatch.GetPhysicalDeviceSurfaceFormats2KHR != NULL) {
|
||||
// Pass the call to the driver, possibly unwrapping the ICD surface
|
||||
if (icd_surface->real_icd_surfaces != NULL && (void *)icd_surface->real_icd_surfaces[icd_index] != NULL) {
|
||||
VkPhysicalDeviceSurfaceInfo2KHR info_copy = *pSurfaceInfo;
|
||||
info_copy.surface = icd_surface->real_icd_surfaces[icd_index];
|
||||
return icd_term->dispatch.GetPhysicalDeviceSurfaceFormats2KHR(phys_dev_term->phys_dev, &info_copy, pSurfaceFormatCount,
|
||||
pSurfaceFormats);
|
||||
} else {
|
||||
return icd_term->dispatch.GetPhysicalDeviceSurfaceFormats2KHR(phys_dev_term->phys_dev, pSurfaceInfo,
|
||||
pSurfaceFormatCount, pSurfaceFormats);
|
||||
}
|
||||
} else {
|
||||
// Emulate the call
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, 0,
|
||||
"vkGetPhysicalDeviceSurfaceFormats2KHR: Emulating call in ICD \"%s\" using vkGetPhysicalDeviceSurfaceFormatsKHR",
|
||||
icd_term->scanned_icd->lib_name);
|
||||
|
||||
if (pSurfaceInfo->pNext != NULL) {
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0,
|
||||
"vkGetPhysicalDeviceSurfaceFormats2KHR: Emulation found unrecognized structure type in pSurfaceInfo->pNext "
|
||||
"- this struct will be ignored");
|
||||
}
|
||||
|
||||
VkSurfaceKHR surface = pSurfaceInfo->surface;
|
||||
if (icd_surface->real_icd_surfaces != NULL && (void *)icd_surface->real_icd_surfaces[icd_index] != NULL) {
|
||||
surface = icd_surface->real_icd_surfaces[icd_index];
|
||||
}
|
||||
|
||||
if (*pSurfaceFormatCount == 0 || pSurfaceFormats == NULL) {
|
||||
// Write to pSurfaceFormatCount
|
||||
return icd_term->dispatch.GetPhysicalDeviceSurfaceFormatsKHR(phys_dev_term->phys_dev, surface, pSurfaceFormatCount,
|
||||
NULL);
|
||||
} else {
|
||||
// Allocate a temporary array for the output of the old function
|
||||
VkSurfaceFormatKHR *formats = loader_stack_alloc(*pSurfaceFormatCount * sizeof(VkSurfaceFormatKHR));
|
||||
if (formats == NULL) {
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
|
||||
VkResult res = icd_term->dispatch.GetPhysicalDeviceSurfaceFormatsKHR(phys_dev_term->phys_dev, surface,
|
||||
pSurfaceFormatCount, formats);
|
||||
for (uint32_t i = 0; i < *pSurfaceFormatCount; ++i) {
|
||||
pSurfaceFormats[i].surfaceFormat = formats[i];
|
||||
if (pSurfaceFormats[i].pNext != NULL) {
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0,
|
||||
"vkGetPhysicalDeviceSurfaceFormats2KHR: Emulation found unrecognized structure type in "
|
||||
"pSurfaceFormats[%d].pNext - this struct will be ignored",
|
||||
i);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---- VK_EXT_display_surface_counter extension trampoline/terminators
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
|
||||
VkSurfaceCapabilities2EXT *pSurfaceCapabilities) {
|
||||
const VkLayerInstanceDispatchTable *disp;
|
||||
VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
|
||||
disp = loader_get_instance_layer_dispatch(physicalDevice);
|
||||
return disp->GetPhysicalDeviceSurfaceCapabilities2EXT(unwrapped_phys_dev, surface, pSurfaceCapabilities);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilities2EXT(
|
||||
VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT *pSurfaceCapabilities) {
|
||||
struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice;
|
||||
struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;
|
||||
|
||||
VkIcdSurface *icd_surface = (VkIcdSurface *)(surface);
|
||||
uint8_t icd_index = phys_dev_term->icd_index;
|
||||
|
||||
// Unwrap the surface if needed
|
||||
VkSurfaceKHR unwrapped_surface = surface;
|
||||
if (icd_surface->real_icd_surfaces != NULL && (void *)icd_surface->real_icd_surfaces[icd_index] != NULL) {
|
||||
unwrapped_surface = icd_surface->real_icd_surfaces[icd_index];
|
||||
}
|
||||
|
||||
if (icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilities2EXT != NULL) {
|
||||
// Pass the call to the driver
|
||||
return icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilities2EXT(phys_dev_term->phys_dev, unwrapped_surface,
|
||||
pSurfaceCapabilities);
|
||||
} else {
|
||||
// Emulate the call
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, 0,
|
||||
"vkGetPhysicalDeviceSurfaceCapabilities2EXT: Emulating call in ICD \"%s\" using "
|
||||
"vkGetPhysicalDeviceSurfaceCapabilitiesKHR",
|
||||
icd_term->scanned_icd->lib_name);
|
||||
|
||||
VkSurfaceCapabilitiesKHR surface_caps;
|
||||
VkResult res =
|
||||
icd_term->dispatch.GetPhysicalDeviceSurfaceCapabilitiesKHR(phys_dev_term->phys_dev, unwrapped_surface, &surface_caps);
|
||||
pSurfaceCapabilities->minImageCount = surface_caps.minImageCount;
|
||||
pSurfaceCapabilities->maxImageCount = surface_caps.maxImageCount;
|
||||
pSurfaceCapabilities->currentExtent = surface_caps.currentExtent;
|
||||
pSurfaceCapabilities->minImageExtent = surface_caps.minImageExtent;
|
||||
pSurfaceCapabilities->maxImageExtent = surface_caps.maxImageExtent;
|
||||
pSurfaceCapabilities->maxImageArrayLayers = surface_caps.maxImageArrayLayers;
|
||||
pSurfaceCapabilities->supportedTransforms = surface_caps.supportedTransforms;
|
||||
pSurfaceCapabilities->currentTransform = surface_caps.currentTransform;
|
||||
pSurfaceCapabilities->supportedCompositeAlpha = surface_caps.supportedCompositeAlpha;
|
||||
pSurfaceCapabilities->supportedUsageFlags = surface_caps.supportedUsageFlags;
|
||||
pSurfaceCapabilities->supportedSurfaceCounters = 0;
|
||||
|
||||
if (pSurfaceCapabilities->pNext != NULL) {
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_WARNING_BIT_EXT, 0,
|
||||
"vkGetPhysicalDeviceSurfaceCapabilities2EXT: Emulation found unrecognized structure type in "
|
||||
"pSurfaceCapabilities->pNext - this struct will be ignored");
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
// ---- VK_EXT_direct_mode_display extension trampoline/terminators
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkDisplayKHR display) {
|
||||
const VkLayerInstanceDispatchTable *disp;
|
||||
VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
|
||||
disp = loader_get_instance_layer_dispatch(physicalDevice);
|
||||
return disp->ReleaseDisplayEXT(unwrapped_phys_dev, display);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_ReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkDisplayKHR display) {
|
||||
struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice;
|
||||
struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;
|
||||
|
||||
if (icd_term->dispatch.ReleaseDisplayEXT == NULL) {
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
|
||||
"ICD \"%s\" associated with VkPhysicalDevice does not support vkReleaseDisplayEXT - Consequently, the call is "
|
||||
"invalid because it should not be possible to acquire a display on this device",
|
||||
icd_term->scanned_icd->lib_name);
|
||||
}
|
||||
return icd_term->dispatch.ReleaseDisplayEXT(phys_dev_term->phys_dev, display);
|
||||
}
|
||||
|
||||
// ---- VK_EXT_acquire_xlib_display extension trampoline/terminators
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy, VkDisplayKHR display) {
|
||||
const VkLayerInstanceDispatchTable *disp;
|
||||
VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
|
||||
disp = loader_get_instance_layer_dispatch(physicalDevice);
|
||||
return disp->AcquireXlibDisplayEXT(unwrapped_phys_dev, dpy, display);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_AcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy,
|
||||
VkDisplayKHR display) {
|
||||
struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice;
|
||||
struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;
|
||||
|
||||
if (icd_term->dispatch.AcquireXlibDisplayEXT != NULL) {
|
||||
// Pass the call to the driver
|
||||
return icd_term->dispatch.AcquireXlibDisplayEXT(phys_dev_term->phys_dev, dpy, display);
|
||||
} else {
|
||||
// Emulate the call
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, 0,
|
||||
"vkAcquireXLibDisplayEXT: Emulating call in ICD \"%s\" by returning error", icd_term->scanned_icd->lib_name);
|
||||
|
||||
// Fail for the unsupported command
|
||||
return VK_ERROR_INITIALIZATION_FAILED;
|
||||
}
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy, RROutput rrOutput,
|
||||
VkDisplayKHR *pDisplay) {
|
||||
const VkLayerInstanceDispatchTable *disp;
|
||||
VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
|
||||
disp = loader_get_instance_layer_dispatch(physicalDevice);
|
||||
return disp->GetRandROutputDisplayEXT(unwrapped_phys_dev, dpy, rrOutput, pDisplay);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display *dpy, RROutput rrOutput,
|
||||
VkDisplayKHR *pDisplay) {
|
||||
struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice;
|
||||
struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;
|
||||
|
||||
if (icd_term->dispatch.GetRandROutputDisplayEXT != NULL) {
|
||||
// Pass the call to the driver
|
||||
return icd_term->dispatch.GetRandROutputDisplayEXT(phys_dev_term->phys_dev, dpy, rrOutput, pDisplay);
|
||||
} else {
|
||||
// Emulate the call
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, 0,
|
||||
"vkGetRandROutputDisplayEXT: Emulating call in ICD \"%s\" by returning null display",
|
||||
icd_term->scanned_icd->lib_name);
|
||||
|
||||
// Return a null handle to indicate this can't be done
|
||||
*pDisplay = VK_NULL_HANDLE;
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
uint32_t* pPresentModeCount,
|
||||
VkPresentModeKHR* pPresentModes) {
|
||||
const VkLayerInstanceDispatchTable *disp;
|
||||
VkPhysicalDevice unwrapped_phys_dev = loader_unwrap_physical_device(physicalDevice);
|
||||
disp = loader_get_instance_layer_dispatch(physicalDevice);
|
||||
return disp->GetPhysicalDeviceSurfacePresentModes2EXT(unwrapped_phys_dev, pSurfaceInfo, pPresentModeCount, pPresentModes);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModes2EXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
uint32_t* pPresentModeCount,
|
||||
VkPresentModeKHR* pPresentModes) {
|
||||
struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice;
|
||||
struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;
|
||||
if (NULL == icd_term->dispatch.GetPhysicalDeviceSurfacePresentModes2EXT) {
|
||||
loader_log(icd_term->this_instance, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0,
|
||||
"ICD associated with VkPhysicalDevice does not support GetPhysicalDeviceSurfacePresentModes2EXT");
|
||||
}
|
||||
VkIcdSurface *icd_surface = (VkIcdSurface *)(pSurfaceInfo->surface);
|
||||
uint8_t icd_index = phys_dev_term->icd_index;
|
||||
if (NULL != icd_surface->real_icd_surfaces && NULL != (void *)icd_surface->real_icd_surfaces[icd_index]) {
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR surface_info_copy = {
|
||||
.sType = pSurfaceInfo->sType,
|
||||
.pNext = pSurfaceInfo->pNext,
|
||||
.surface = icd_surface->real_icd_surfaces[icd_index],
|
||||
};
|
||||
return icd_term->dispatch.GetPhysicalDeviceSurfacePresentModes2EXT(phys_dev_term->phys_dev, &surface_info_copy, pPresentModeCount, pPresentModes);
|
||||
}
|
||||
return icd_term->dispatch.GetPhysicalDeviceSurfacePresentModes2EXT(phys_dev_term->phys_dev, pSurfaceInfo, pPresentModeCount, pPresentModes);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT(
|
||||
VkDevice device,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
VkDeviceGroupPresentModeFlagsKHR* pModes) {
|
||||
const VkLayerDispatchTable *disp = loader_get_dispatch(device);
|
||||
return disp->GetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes);
|
||||
}
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDeviceGroupSurfacePresentModes2EXT(
|
||||
VkDevice device,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
VkDeviceGroupPresentModeFlagsKHR* pModes) {
|
||||
uint32_t icd_index = 0;
|
||||
struct loader_device *dev;
|
||||
struct loader_icd_term *icd_term = loader_get_icd_and_device(device, &dev, &icd_index);
|
||||
if (NULL != icd_term && NULL != icd_term->dispatch.GetDeviceGroupSurfacePresentModes2EXT) {
|
||||
VkIcdSurface *icd_surface = (VkIcdSurface *)(uintptr_t)pSurfaceInfo->surface;
|
||||
if (NULL != icd_surface->real_icd_surfaces && (VkSurfaceKHR)NULL != icd_surface->real_icd_surfaces[icd_index]) {
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR surface_info_copy = {
|
||||
.sType = pSurfaceInfo->sType,
|
||||
.pNext = pSurfaceInfo->pNext,
|
||||
.surface = icd_surface->real_icd_surfaces[icd_index],
|
||||
};
|
||||
return icd_term->dispatch.GetDeviceGroupSurfacePresentModes2EXT(device, &surface_info_copy, pModes);
|
||||
}
|
||||
return icd_term->dispatch.GetDeviceGroupSurfacePresentModes2EXT(device, pSurfaceInfo, pModes);
|
||||
}
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
106
thirdparty/vulkan/loader/extension_manual.h
vendored
Executable file
106
thirdparty/vulkan/loader/extension_manual.h
vendored
Executable file
@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2017 Valve Corporation
|
||||
* Copyright (c) 2015-2017 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Mark Young <marky@lunarg.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// ---- Manually added trampoline/terminator functions
|
||||
|
||||
// These functions, for whatever reason, require more complex changes than
|
||||
// can easily be automatically generated.
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
GetPhysicalDeviceExternalImageFormatPropertiesNV(
|
||||
VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type,
|
||||
VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags,
|
||||
VkExternalMemoryHandleTypeFlagsNV externalHandleType,
|
||||
VkExternalImageFormatPropertiesNV *pExternalImageFormatProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
terminator_GetPhysicalDeviceExternalImageFormatPropertiesNV(
|
||||
VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type,
|
||||
VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags,
|
||||
VkExternalMemoryHandleTypeFlagsNV externalHandleType,
|
||||
VkExternalImageFormatPropertiesNV *pExternalImageFormatProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilities2KHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
uint32_t* pSurfaceFormatCount,
|
||||
VkSurfaceFormat2KHR* pSurfaceFormats);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
uint32_t* pSurfaceFormatCount,
|
||||
VkSurfaceFormat2KHR* pSurfaceFormats);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
|
||||
VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilities2EXT(VkPhysicalDevice physicalDevice,
|
||||
VkSurfaceKHR surface,
|
||||
VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL ReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_ReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
VKAPI_ATTR VkResult VKAPI_CALL AcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_AcquireXlibDisplayEXT(VkPhysicalDevice physicalDevice, Display* dpy,
|
||||
VkDisplayKHR display);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput,
|
||||
VkDisplayKHR* pDisplay);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetRandROutputDisplayEXT(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput,
|
||||
VkDisplayKHR* pDisplay);
|
||||
#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModes2EXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
uint32_t* pPresentModeCount,
|
||||
VkPresentModeKHR* pPresentModes);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModes2EXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
uint32_t* pPresentModeCount,
|
||||
VkPresentModeKHR* pPresentModes);
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetDeviceGroupSurfacePresentModes2EXT(
|
||||
VkDevice device,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
VkDeviceGroupPresentModeFlagsKHR* pModes);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDeviceGroupSurfacePresentModes2EXT(
|
||||
VkDevice device,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
VkDeviceGroupPresentModeFlagsKHR* pModes);
|
||||
233
thirdparty/vulkan/loader/gpa_helper.h
vendored
Executable file
233
thirdparty/vulkan/loader/gpa_helper.h
vendored
Executable file
@ -0,0 +1,233 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2015 The Khronos Group Inc.
|
||||
* Copyright (c) 2015 Valve Corporation
|
||||
* Copyright (c) 2015 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Jon Ashburn <jon@lunarg.com>
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include "debug_utils.h"
|
||||
#include "wsi.h"
|
||||
|
||||
static inline void *trampolineGetProcAddr(struct loader_instance *inst, const char *funcName) {
|
||||
// Don't include or check global functions
|
||||
if (!strcmp(funcName, "vkGetInstanceProcAddr")) return vkGetInstanceProcAddr;
|
||||
if (!strcmp(funcName, "vkDestroyInstance")) return vkDestroyInstance;
|
||||
if (!strcmp(funcName, "vkEnumeratePhysicalDevices")) return vkEnumeratePhysicalDevices;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures")) return vkGetPhysicalDeviceFeatures;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties")) return vkGetPhysicalDeviceFormatProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties")) return vkGetPhysicalDeviceImageFormatProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties")) return vkGetPhysicalDeviceSparseImageFormatProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceProperties")) return vkGetPhysicalDeviceProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties")) return vkGetPhysicalDeviceQueueFamilyProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties")) return vkGetPhysicalDeviceMemoryProperties;
|
||||
if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties")) return vkEnumerateDeviceLayerProperties;
|
||||
if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties")) return vkEnumerateDeviceExtensionProperties;
|
||||
if (!strcmp(funcName, "vkCreateDevice")) return vkCreateDevice;
|
||||
if (!strcmp(funcName, "vkGetDeviceProcAddr")) return vkGetDeviceProcAddr;
|
||||
if (!strcmp(funcName, "vkDestroyDevice")) return vkDestroyDevice;
|
||||
if (!strcmp(funcName, "vkGetDeviceQueue")) return vkGetDeviceQueue;
|
||||
if (!strcmp(funcName, "vkQueueSubmit")) return vkQueueSubmit;
|
||||
if (!strcmp(funcName, "vkQueueWaitIdle")) return vkQueueWaitIdle;
|
||||
if (!strcmp(funcName, "vkDeviceWaitIdle")) return vkDeviceWaitIdle;
|
||||
if (!strcmp(funcName, "vkAllocateMemory")) return vkAllocateMemory;
|
||||
if (!strcmp(funcName, "vkFreeMemory")) return vkFreeMemory;
|
||||
if (!strcmp(funcName, "vkMapMemory")) return vkMapMemory;
|
||||
if (!strcmp(funcName, "vkUnmapMemory")) return vkUnmapMemory;
|
||||
if (!strcmp(funcName, "vkFlushMappedMemoryRanges")) return vkFlushMappedMemoryRanges;
|
||||
if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges")) return vkInvalidateMappedMemoryRanges;
|
||||
if (!strcmp(funcName, "vkGetDeviceMemoryCommitment")) return vkGetDeviceMemoryCommitment;
|
||||
if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements")) return vkGetImageSparseMemoryRequirements;
|
||||
if (!strcmp(funcName, "vkGetImageMemoryRequirements")) return vkGetImageMemoryRequirements;
|
||||
if (!strcmp(funcName, "vkGetBufferMemoryRequirements")) return vkGetBufferMemoryRequirements;
|
||||
if (!strcmp(funcName, "vkBindImageMemory")) return vkBindImageMemory;
|
||||
if (!strcmp(funcName, "vkBindBufferMemory")) return vkBindBufferMemory;
|
||||
if (!strcmp(funcName, "vkQueueBindSparse")) return vkQueueBindSparse;
|
||||
if (!strcmp(funcName, "vkCreateFence")) return vkCreateFence;
|
||||
if (!strcmp(funcName, "vkDestroyFence")) return vkDestroyFence;
|
||||
if (!strcmp(funcName, "vkGetFenceStatus")) return vkGetFenceStatus;
|
||||
if (!strcmp(funcName, "vkResetFences")) return vkResetFences;
|
||||
if (!strcmp(funcName, "vkWaitForFences")) return vkWaitForFences;
|
||||
if (!strcmp(funcName, "vkCreateSemaphore")) return vkCreateSemaphore;
|
||||
if (!strcmp(funcName, "vkDestroySemaphore")) return vkDestroySemaphore;
|
||||
if (!strcmp(funcName, "vkCreateEvent")) return vkCreateEvent;
|
||||
if (!strcmp(funcName, "vkDestroyEvent")) return vkDestroyEvent;
|
||||
if (!strcmp(funcName, "vkGetEventStatus")) return vkGetEventStatus;
|
||||
if (!strcmp(funcName, "vkSetEvent")) return vkSetEvent;
|
||||
if (!strcmp(funcName, "vkResetEvent")) return vkResetEvent;
|
||||
if (!strcmp(funcName, "vkCreateQueryPool")) return vkCreateQueryPool;
|
||||
if (!strcmp(funcName, "vkDestroyQueryPool")) return vkDestroyQueryPool;
|
||||
if (!strcmp(funcName, "vkGetQueryPoolResults")) return vkGetQueryPoolResults;
|
||||
if (!strcmp(funcName, "vkCreateBuffer")) return vkCreateBuffer;
|
||||
if (!strcmp(funcName, "vkDestroyBuffer")) return vkDestroyBuffer;
|
||||
if (!strcmp(funcName, "vkCreateBufferView")) return vkCreateBufferView;
|
||||
if (!strcmp(funcName, "vkDestroyBufferView")) return vkDestroyBufferView;
|
||||
if (!strcmp(funcName, "vkCreateImage")) return vkCreateImage;
|
||||
if (!strcmp(funcName, "vkDestroyImage")) return vkDestroyImage;
|
||||
if (!strcmp(funcName, "vkGetImageSubresourceLayout")) return vkGetImageSubresourceLayout;
|
||||
if (!strcmp(funcName, "vkCreateImageView")) return vkCreateImageView;
|
||||
if (!strcmp(funcName, "vkDestroyImageView")) return vkDestroyImageView;
|
||||
if (!strcmp(funcName, "vkCreateShaderModule")) return vkCreateShaderModule;
|
||||
if (!strcmp(funcName, "vkDestroyShaderModule")) return vkDestroyShaderModule;
|
||||
if (!strcmp(funcName, "vkCreatePipelineCache")) return vkCreatePipelineCache;
|
||||
if (!strcmp(funcName, "vkDestroyPipelineCache")) return vkDestroyPipelineCache;
|
||||
if (!strcmp(funcName, "vkGetPipelineCacheData")) return vkGetPipelineCacheData;
|
||||
if (!strcmp(funcName, "vkMergePipelineCaches")) return vkMergePipelineCaches;
|
||||
if (!strcmp(funcName, "vkCreateGraphicsPipelines")) return vkCreateGraphicsPipelines;
|
||||
if (!strcmp(funcName, "vkCreateComputePipelines")) return vkCreateComputePipelines;
|
||||
if (!strcmp(funcName, "vkDestroyPipeline")) return vkDestroyPipeline;
|
||||
if (!strcmp(funcName, "vkCreatePipelineLayout")) return vkCreatePipelineLayout;
|
||||
if (!strcmp(funcName, "vkDestroyPipelineLayout")) return vkDestroyPipelineLayout;
|
||||
if (!strcmp(funcName, "vkCreateSampler")) return vkCreateSampler;
|
||||
if (!strcmp(funcName, "vkDestroySampler")) return vkDestroySampler;
|
||||
if (!strcmp(funcName, "vkCreateDescriptorSetLayout")) return vkCreateDescriptorSetLayout;
|
||||
if (!strcmp(funcName, "vkDestroyDescriptorSetLayout")) return vkDestroyDescriptorSetLayout;
|
||||
if (!strcmp(funcName, "vkCreateDescriptorPool")) return vkCreateDescriptorPool;
|
||||
if (!strcmp(funcName, "vkDestroyDescriptorPool")) return vkDestroyDescriptorPool;
|
||||
if (!strcmp(funcName, "vkResetDescriptorPool")) return vkResetDescriptorPool;
|
||||
if (!strcmp(funcName, "vkAllocateDescriptorSets")) return vkAllocateDescriptorSets;
|
||||
if (!strcmp(funcName, "vkFreeDescriptorSets")) return vkFreeDescriptorSets;
|
||||
if (!strcmp(funcName, "vkUpdateDescriptorSets")) return vkUpdateDescriptorSets;
|
||||
if (!strcmp(funcName, "vkCreateFramebuffer")) return vkCreateFramebuffer;
|
||||
if (!strcmp(funcName, "vkDestroyFramebuffer")) return vkDestroyFramebuffer;
|
||||
if (!strcmp(funcName, "vkCreateRenderPass")) return vkCreateRenderPass;
|
||||
if (!strcmp(funcName, "vkDestroyRenderPass")) return vkDestroyRenderPass;
|
||||
if (!strcmp(funcName, "vkGetRenderAreaGranularity")) return vkGetRenderAreaGranularity;
|
||||
if (!strcmp(funcName, "vkCreateCommandPool")) return vkCreateCommandPool;
|
||||
if (!strcmp(funcName, "vkDestroyCommandPool")) return vkDestroyCommandPool;
|
||||
if (!strcmp(funcName, "vkResetCommandPool")) return vkResetCommandPool;
|
||||
if (!strcmp(funcName, "vkAllocateCommandBuffers")) return vkAllocateCommandBuffers;
|
||||
if (!strcmp(funcName, "vkFreeCommandBuffers")) return vkFreeCommandBuffers;
|
||||
if (!strcmp(funcName, "vkBeginCommandBuffer")) return vkBeginCommandBuffer;
|
||||
if (!strcmp(funcName, "vkEndCommandBuffer")) return vkEndCommandBuffer;
|
||||
if (!strcmp(funcName, "vkResetCommandBuffer")) return vkResetCommandBuffer;
|
||||
if (!strcmp(funcName, "vkCmdBindPipeline")) return vkCmdBindPipeline;
|
||||
if (!strcmp(funcName, "vkCmdBindDescriptorSets")) return vkCmdBindDescriptorSets;
|
||||
if (!strcmp(funcName, "vkCmdBindVertexBuffers")) return vkCmdBindVertexBuffers;
|
||||
if (!strcmp(funcName, "vkCmdBindIndexBuffer")) return vkCmdBindIndexBuffer;
|
||||
if (!strcmp(funcName, "vkCmdSetViewport")) return vkCmdSetViewport;
|
||||
if (!strcmp(funcName, "vkCmdSetScissor")) return vkCmdSetScissor;
|
||||
if (!strcmp(funcName, "vkCmdSetLineWidth")) return vkCmdSetLineWidth;
|
||||
if (!strcmp(funcName, "vkCmdSetDepthBias")) return vkCmdSetDepthBias;
|
||||
if (!strcmp(funcName, "vkCmdSetBlendConstants")) return vkCmdSetBlendConstants;
|
||||
if (!strcmp(funcName, "vkCmdSetDepthBounds")) return vkCmdSetDepthBounds;
|
||||
if (!strcmp(funcName, "vkCmdSetStencilCompareMask")) return vkCmdSetStencilCompareMask;
|
||||
if (!strcmp(funcName, "vkCmdSetStencilWriteMask")) return vkCmdSetStencilWriteMask;
|
||||
if (!strcmp(funcName, "vkCmdSetStencilReference")) return vkCmdSetStencilReference;
|
||||
if (!strcmp(funcName, "vkCmdDraw")) return vkCmdDraw;
|
||||
if (!strcmp(funcName, "vkCmdDrawIndexed")) return vkCmdDrawIndexed;
|
||||
if (!strcmp(funcName, "vkCmdDrawIndirect")) return vkCmdDrawIndirect;
|
||||
if (!strcmp(funcName, "vkCmdDrawIndexedIndirect")) return vkCmdDrawIndexedIndirect;
|
||||
if (!strcmp(funcName, "vkCmdDispatch")) return vkCmdDispatch;
|
||||
if (!strcmp(funcName, "vkCmdDispatchIndirect")) return vkCmdDispatchIndirect;
|
||||
if (!strcmp(funcName, "vkCmdCopyBuffer")) return vkCmdCopyBuffer;
|
||||
if (!strcmp(funcName, "vkCmdCopyImage")) return vkCmdCopyImage;
|
||||
if (!strcmp(funcName, "vkCmdBlitImage")) return vkCmdBlitImage;
|
||||
if (!strcmp(funcName, "vkCmdCopyBufferToImage")) return vkCmdCopyBufferToImage;
|
||||
if (!strcmp(funcName, "vkCmdCopyImageToBuffer")) return vkCmdCopyImageToBuffer;
|
||||
if (!strcmp(funcName, "vkCmdUpdateBuffer")) return vkCmdUpdateBuffer;
|
||||
if (!strcmp(funcName, "vkCmdFillBuffer")) return vkCmdFillBuffer;
|
||||
if (!strcmp(funcName, "vkCmdClearColorImage")) return vkCmdClearColorImage;
|
||||
if (!strcmp(funcName, "vkCmdClearDepthStencilImage")) return vkCmdClearDepthStencilImage;
|
||||
if (!strcmp(funcName, "vkCmdClearAttachments")) return vkCmdClearAttachments;
|
||||
if (!strcmp(funcName, "vkCmdResolveImage")) return vkCmdResolveImage;
|
||||
if (!strcmp(funcName, "vkCmdSetEvent")) return vkCmdSetEvent;
|
||||
if (!strcmp(funcName, "vkCmdResetEvent")) return vkCmdResetEvent;
|
||||
if (!strcmp(funcName, "vkCmdWaitEvents")) return vkCmdWaitEvents;
|
||||
if (!strcmp(funcName, "vkCmdPipelineBarrier")) return vkCmdPipelineBarrier;
|
||||
if (!strcmp(funcName, "vkCmdBeginQuery")) return vkCmdBeginQuery;
|
||||
if (!strcmp(funcName, "vkCmdEndQuery")) return vkCmdEndQuery;
|
||||
if (!strcmp(funcName, "vkCmdResetQueryPool")) return vkCmdResetQueryPool;
|
||||
if (!strcmp(funcName, "vkCmdWriteTimestamp")) return vkCmdWriteTimestamp;
|
||||
if (!strcmp(funcName, "vkCmdCopyQueryPoolResults")) return vkCmdCopyQueryPoolResults;
|
||||
if (!strcmp(funcName, "vkCmdPushConstants")) return vkCmdPushConstants;
|
||||
if (!strcmp(funcName, "vkCmdBeginRenderPass")) return vkCmdBeginRenderPass;
|
||||
if (!strcmp(funcName, "vkCmdNextSubpass")) return vkCmdNextSubpass;
|
||||
if (!strcmp(funcName, "vkCmdEndRenderPass")) return vkCmdEndRenderPass;
|
||||
if (!strcmp(funcName, "vkCmdExecuteCommands")) return vkCmdExecuteCommands;
|
||||
|
||||
// Core 1.1 functions
|
||||
if (!strcmp(funcName, "vkEnumeratePhysicalDeviceGroups")) return vkEnumeratePhysicalDeviceGroups;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures2")) return vkGetPhysicalDeviceFeatures2;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceProperties2")) return vkGetPhysicalDeviceProperties2;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties2")) return vkGetPhysicalDeviceFormatProperties2;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties2")) return vkGetPhysicalDeviceImageFormatProperties2;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties2")) return vkGetPhysicalDeviceQueueFamilyProperties2;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties2")) return vkGetPhysicalDeviceMemoryProperties2;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties2"))
|
||||
return vkGetPhysicalDeviceSparseImageFormatProperties2;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceExternalBufferProperties")) return vkGetPhysicalDeviceExternalBufferProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceExternalSemaphoreProperties")) return vkGetPhysicalDeviceExternalSemaphoreProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceExternalFenceProperties")) return vkGetPhysicalDeviceExternalFenceProperties;
|
||||
if (!strcmp(funcName, "vkBindBufferMemory2")) return vkBindBufferMemory2;
|
||||
if (!strcmp(funcName, "vkBindImageMemory2")) return vkBindImageMemory2;
|
||||
if (!strcmp(funcName, "vkGetDeviceGroupPeerMemoryFeatures")) return vkGetDeviceGroupPeerMemoryFeatures;
|
||||
if (!strcmp(funcName, "vkCmdSetDeviceMask")) return vkCmdSetDeviceMask;
|
||||
if (!strcmp(funcName, "vkCmdDispatchBase")) return vkCmdDispatchBase;
|
||||
if (!strcmp(funcName, "vkGetImageMemoryRequirements2")) return vkGetImageMemoryRequirements2;
|
||||
if (!strcmp(funcName, "vkTrimCommandPool")) return vkTrimCommandPool;
|
||||
if (!strcmp(funcName, "vkGetDeviceQueue2")) return vkGetDeviceQueue2;
|
||||
if (!strcmp(funcName, "vkCreateSamplerYcbcrConversion")) return vkCreateSamplerYcbcrConversion;
|
||||
if (!strcmp(funcName, "vkDestroySamplerYcbcrConversion")) return vkDestroySamplerYcbcrConversion;
|
||||
if (!strcmp(funcName, "vkGetDescriptorSetLayoutSupport")) return vkGetDescriptorSetLayoutSupport;
|
||||
if (!strcmp(funcName, "vkCreateDescriptorUpdateTemplate")) return vkCreateDescriptorUpdateTemplate;
|
||||
if (!strcmp(funcName, "vkDestroyDescriptorUpdateTemplate")) return vkDestroyDescriptorUpdateTemplate;
|
||||
if (!strcmp(funcName, "vkUpdateDescriptorSetWithTemplate")) return vkUpdateDescriptorSetWithTemplate;
|
||||
if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements2")) return vkGetImageSparseMemoryRequirements2;
|
||||
if (!strcmp(funcName, "vkGetBufferMemoryRequirements2")) return vkGetBufferMemoryRequirements2;
|
||||
|
||||
// Instance extensions
|
||||
void *addr;
|
||||
if (debug_utils_InstanceGpa(inst, funcName, &addr)) return addr;
|
||||
|
||||
if (wsi_swapchain_instance_gpa(inst, funcName, &addr)) return addr;
|
||||
|
||||
if (extension_instance_gpa(inst, funcName, &addr)) return addr;
|
||||
|
||||
// Unknown physical device extensions
|
||||
if (loader_phys_dev_ext_gpa(inst, funcName, true, &addr, NULL)) return addr;
|
||||
|
||||
// Unknown device extensions
|
||||
addr = loader_dev_ext_gpa(inst, funcName);
|
||||
return addr;
|
||||
}
|
||||
|
||||
static inline void *globalGetProcAddr(const char *name) {
|
||||
if (!name || name[0] != 'v' || name[1] != 'k') return NULL;
|
||||
|
||||
name += 2;
|
||||
if (!strcmp(name, "CreateInstance")) return vkCreateInstance;
|
||||
if (!strcmp(name, "EnumerateInstanceExtensionProperties")) return vkEnumerateInstanceExtensionProperties;
|
||||
if (!strcmp(name, "EnumerateInstanceLayerProperties")) return vkEnumerateInstanceLayerProperties;
|
||||
if (!strcmp(name, "EnumerateInstanceVersion")) return vkEnumerateInstanceVersion;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void *loader_non_passthrough_gdpa(const char *name) {
|
||||
if (!name || name[0] != 'v' || name[1] != 'k') return NULL;
|
||||
|
||||
name += 2;
|
||||
|
||||
if (!strcmp(name, "GetDeviceProcAddr")) return vkGetDeviceProcAddr;
|
||||
if (!strcmp(name, "DestroyDevice")) return vkDestroyDevice;
|
||||
if (!strcmp(name, "GetDeviceQueue")) return vkGetDeviceQueue;
|
||||
if (!strcmp(name, "GetDeviceQueue2")) return vkGetDeviceQueue2;
|
||||
if (!strcmp(name, "AllocateCommandBuffers")) return vkAllocateCommandBuffers;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
7841
thirdparty/vulkan/loader/loader.c
vendored
Executable file
7841
thirdparty/vulkan/loader/loader.c
vendored
Executable file
File diff suppressed because it is too large
Load Diff
529
thirdparty/vulkan/loader/loader.h
vendored
Executable file
529
thirdparty/vulkan/loader/loader.h
vendored
Executable file
@ -0,0 +1,529 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2014-2019 The Khronos Group Inc.
|
||||
* Copyright (c) 2014-2019 Valve Corporation
|
||||
* Copyright (c) 2014-2019 LunarG, Inc.
|
||||
* Copyright (C) 2015 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Jon Ashburn <jon@lunarg.com>
|
||||
* Author: Courtney Goeltzenleuchter <courtney@LunarG.com>
|
||||
* Author: Chia-I Wu <olvaffe@gmail.com>
|
||||
* Author: Chia-I Wu <olv@lunarg.com>
|
||||
* Author: Mark Lobodzinski <mark@LunarG.com>
|
||||
* Author: Lenny Komow <lenny@lunarg.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LOADER_H
|
||||
#define LOADER_H
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
#include "vk_loader_platform.h"
|
||||
#include "vk_loader_layer.h"
|
||||
#include <vulkan/vk_layer.h>
|
||||
#include <vulkan/vk_icd.h>
|
||||
#include <assert.h>
|
||||
#include "vk_layer_dispatch_table.h"
|
||||
#include "vk_loader_extensions.h"
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||
#define LOADER_EXPORT __attribute__((visibility("default")))
|
||||
#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
|
||||
#define LOADER_EXPORT __attribute__((visibility("default")))
|
||||
#else
|
||||
#define LOADER_EXPORT
|
||||
#endif
|
||||
|
||||
// A debug option to disable allocators at compile time to investigate future issues.
|
||||
#define DEBUG_DISABLE_APP_ALLOCATORS 0
|
||||
|
||||
#define MAX_STRING_SIZE 1024
|
||||
|
||||
// This is defined in vk_layer.h, but if there's problems we need to create the define
|
||||
// here.
|
||||
#ifndef MAX_NUM_UNKNOWN_EXTS
|
||||
#define MAX_NUM_UNKNOWN_EXTS 250
|
||||
#endif
|
||||
|
||||
enum layer_type_flags {
|
||||
VK_LAYER_TYPE_FLAG_INSTANCE_LAYER = 0x1, // If not set, indicates Device layer
|
||||
VK_LAYER_TYPE_FLAG_EXPLICIT_LAYER = 0x2, // If not set, indicates Implicit layer
|
||||
VK_LAYER_TYPE_FLAG_META_LAYER = 0x4, // If not set, indicates standard layer
|
||||
};
|
||||
|
||||
typedef enum VkStringErrorFlagBits {
|
||||
VK_STRING_ERROR_NONE = 0x00000000,
|
||||
VK_STRING_ERROR_LENGTH = 0x00000001,
|
||||
VK_STRING_ERROR_BAD_DATA = 0x00000002,
|
||||
} VkStringErrorFlagBits;
|
||||
typedef VkFlags VkStringErrorFlags;
|
||||
|
||||
static const int MaxLoaderStringLength = 256;
|
||||
static const char UTF8_ONE_BYTE_CODE = 0xC0;
|
||||
static const char UTF8_ONE_BYTE_MASK = 0xE0;
|
||||
static const char UTF8_TWO_BYTE_CODE = 0xE0;
|
||||
static const char UTF8_TWO_BYTE_MASK = 0xF0;
|
||||
static const char UTF8_THREE_BYTE_CODE = 0xF0;
|
||||
static const char UTF8_THREE_BYTE_MASK = 0xF8;
|
||||
static const char UTF8_DATA_BYTE_CODE = 0x80;
|
||||
static const char UTF8_DATA_BYTE_MASK = 0xC0;
|
||||
|
||||
// form of all dynamic lists/arrays
|
||||
// only the list element should be changed
|
||||
struct loader_generic_list {
|
||||
size_t capacity;
|
||||
uint32_t count;
|
||||
void *list;
|
||||
};
|
||||
|
||||
struct loader_extension_list {
|
||||
size_t capacity;
|
||||
uint32_t count;
|
||||
VkExtensionProperties *list;
|
||||
};
|
||||
|
||||
struct loader_dev_ext_props {
|
||||
VkExtensionProperties props;
|
||||
uint32_t entrypoint_count;
|
||||
char **entrypoints;
|
||||
};
|
||||
|
||||
struct loader_device_extension_list {
|
||||
size_t capacity;
|
||||
uint32_t count;
|
||||
struct loader_dev_ext_props *list;
|
||||
};
|
||||
|
||||
struct loader_name_value {
|
||||
char name[MAX_STRING_SIZE];
|
||||
char value[MAX_STRING_SIZE];
|
||||
};
|
||||
|
||||
struct loader_layer_functions {
|
||||
char str_gipa[MAX_STRING_SIZE];
|
||||
char str_gdpa[MAX_STRING_SIZE];
|
||||
char str_negotiate_interface[MAX_STRING_SIZE];
|
||||
PFN_vkNegotiateLoaderLayerInterfaceVersion negotiate_layer_interface;
|
||||
PFN_vkGetInstanceProcAddr get_instance_proc_addr;
|
||||
PFN_vkGetDeviceProcAddr get_device_proc_addr;
|
||||
PFN_GetPhysicalDeviceProcAddr get_physical_device_proc_addr;
|
||||
};
|
||||
|
||||
struct loader_override_expiration {
|
||||
uint16_t year;
|
||||
uint8_t month;
|
||||
uint8_t day;
|
||||
uint8_t hour;
|
||||
uint8_t minute;
|
||||
};
|
||||
|
||||
struct loader_layer_properties {
|
||||
VkLayerProperties info;
|
||||
enum layer_type_flags type_flags;
|
||||
uint32_t interface_version; // PFN_vkNegotiateLoaderLayerInterfaceVersion
|
||||
char lib_name[MAX_STRING_SIZE];
|
||||
loader_platform_dl_handle lib_handle;
|
||||
struct loader_layer_functions functions;
|
||||
struct loader_extension_list instance_extension_list;
|
||||
struct loader_device_extension_list device_extension_list;
|
||||
struct loader_name_value disable_env_var;
|
||||
struct loader_name_value enable_env_var;
|
||||
uint32_t num_component_layers;
|
||||
char (*component_layer_names)[MAX_STRING_SIZE];
|
||||
struct {
|
||||
char enumerate_instance_extension_properties[MAX_STRING_SIZE];
|
||||
char enumerate_instance_layer_properties[MAX_STRING_SIZE];
|
||||
char enumerate_instance_version[MAX_STRING_SIZE];
|
||||
} pre_instance_functions;
|
||||
uint32_t num_override_paths;
|
||||
char (*override_paths)[MAX_STRING_SIZE];
|
||||
bool is_override;
|
||||
bool has_expiration;
|
||||
struct loader_override_expiration expiration;
|
||||
bool keep;
|
||||
uint32_t num_blacklist_layers;
|
||||
char (*blacklist_layer_names)[MAX_STRING_SIZE];
|
||||
};
|
||||
|
||||
struct loader_layer_list {
|
||||
size_t capacity;
|
||||
uint32_t count;
|
||||
struct loader_layer_properties *list;
|
||||
};
|
||||
|
||||
struct loader_dispatch_hash_list {
|
||||
size_t capacity;
|
||||
uint32_t count;
|
||||
uint32_t *index; // index into the dev_ext dispatch table
|
||||
};
|
||||
|
||||
// loader_dispatch_hash_entry and loader_dev_ext_dispatch_table.dev_ext have
|
||||
// one to one correspondence; one loader_dispatch_hash_entry for one dev_ext
|
||||
// dispatch entry.
|
||||
// Also have a one to one correspondence with functions in dev_ext_trampoline.c
|
||||
struct loader_dispatch_hash_entry {
|
||||
char *func_name;
|
||||
struct loader_dispatch_hash_list list; // to handle hashing collisions
|
||||
};
|
||||
|
||||
typedef VkResult(VKAPI_PTR *PFN_vkDevExt)(VkDevice device);
|
||||
struct loader_dev_ext_dispatch_table {
|
||||
PFN_vkDevExt dev_ext[MAX_NUM_UNKNOWN_EXTS];
|
||||
};
|
||||
|
||||
struct loader_dev_dispatch_table {
|
||||
VkLayerDispatchTable core_dispatch;
|
||||
struct loader_dev_ext_dispatch_table ext_dispatch;
|
||||
};
|
||||
|
||||
// per CreateDevice structure
|
||||
struct loader_device {
|
||||
struct loader_dev_dispatch_table loader_dispatch;
|
||||
VkDevice chain_device; // device object from the dispatch chain
|
||||
VkDevice icd_device; // device object from the icd
|
||||
struct loader_physical_device_term *phys_dev_term;
|
||||
|
||||
// List of activated layers.
|
||||
// app_ is the version based on exactly what the application asked for.
|
||||
// This is what must be returned to the application on Enumerate calls.
|
||||
// expanded_ is the version based on expanding meta-layers into their
|
||||
// individual component layers. This is what is used internally.
|
||||
struct loader_layer_list app_activated_layer_list;
|
||||
struct loader_layer_list expanded_activated_layer_list;
|
||||
|
||||
VkAllocationCallbacks alloc_callbacks;
|
||||
|
||||
// List of activated device extensions that have terminators implemented in the loader
|
||||
struct {
|
||||
bool khr_swapchain_enabled;
|
||||
bool khr_display_swapchain_enabled;
|
||||
bool khr_device_group_enabled;
|
||||
bool ext_debug_marker_enabled;
|
||||
bool ext_debug_utils_enabled;
|
||||
bool ext_full_screen_exclusive_enabled;
|
||||
} extensions;
|
||||
|
||||
struct loader_device *next;
|
||||
};
|
||||
|
||||
// Per ICD information
|
||||
|
||||
// Per ICD structure
|
||||
struct loader_icd_term {
|
||||
// pointers to find other structs
|
||||
const struct loader_scanned_icd *scanned_icd;
|
||||
const struct loader_instance *this_instance;
|
||||
struct loader_device *logical_device_list;
|
||||
VkInstance instance; // instance object from the icd
|
||||
struct loader_icd_term_dispatch dispatch;
|
||||
|
||||
struct loader_icd_term *next;
|
||||
|
||||
PFN_PhysDevExt phys_dev_ext[MAX_NUM_UNKNOWN_EXTS];
|
||||
};
|
||||
|
||||
// Per ICD library structure
|
||||
struct loader_icd_tramp_list {
|
||||
size_t capacity;
|
||||
uint32_t count;
|
||||
struct loader_scanned_icd *scanned_list;
|
||||
};
|
||||
|
||||
struct loader_instance_dispatch_table {
|
||||
VkLayerInstanceDispatchTable layer_inst_disp; // must be first entry in structure
|
||||
|
||||
// Physical device functions unknown to the loader
|
||||
PFN_PhysDevExt phys_dev_ext[MAX_NUM_UNKNOWN_EXTS];
|
||||
};
|
||||
|
||||
// Per instance structure
|
||||
struct loader_instance {
|
||||
struct loader_instance_dispatch_table *disp; // must be first entry in structure
|
||||
|
||||
// Vulkan API version the app is intending to use.
|
||||
uint16_t app_api_major_version;
|
||||
uint16_t app_api_minor_version;
|
||||
|
||||
// We need to manually track physical devices over time. If the user
|
||||
// re-queries the information, we don't want to delete old data or
|
||||
// create new data unless necessary.
|
||||
uint32_t total_gpu_count;
|
||||
uint32_t phys_dev_count_term;
|
||||
struct loader_physical_device_term **phys_devs_term;
|
||||
uint32_t phys_dev_count_tramp;
|
||||
struct loader_physical_device_tramp **phys_devs_tramp;
|
||||
|
||||
// We also need to manually track physical device groups, but we don't need
|
||||
// loader specific structures since we have that content in the physical
|
||||
// device stored internal to the public structures.
|
||||
uint32_t phys_dev_group_count_term;
|
||||
struct VkPhysicalDeviceGroupProperties **phys_dev_groups_term;
|
||||
uint32_t phys_dev_group_count_tramp;
|
||||
struct VkPhysicalDeviceGroupProperties **phys_dev_groups_tramp;
|
||||
|
||||
struct loader_instance *next;
|
||||
|
||||
uint32_t total_icd_count;
|
||||
struct loader_icd_term *icd_terms;
|
||||
struct loader_icd_tramp_list icd_tramp_list;
|
||||
|
||||
struct loader_dispatch_hash_entry dev_ext_disp_hash[MAX_NUM_UNKNOWN_EXTS];
|
||||
struct loader_dispatch_hash_entry phys_dev_ext_disp_hash[MAX_NUM_UNKNOWN_EXTS];
|
||||
|
||||
struct loader_msg_callback_map_entry *icd_msg_callback_map;
|
||||
|
||||
struct loader_layer_list instance_layer_list;
|
||||
bool override_layer_present;
|
||||
|
||||
// List of activated layers.
|
||||
// app_ is the version based on exactly what the application asked for.
|
||||
// This is what must be returned to the application on Enumerate calls.
|
||||
// expanded_ is the version based on expanding meta-layers into their
|
||||
// individual component layers. This is what is used internally.
|
||||
struct loader_layer_list app_activated_layer_list;
|
||||
struct loader_layer_list expanded_activated_layer_list;
|
||||
|
||||
VkInstance instance; // layers/ICD instance returned to trampoline
|
||||
|
||||
struct loader_extension_list ext_list; // icds and loaders extensions
|
||||
union loader_instance_extension_enables enabled_known_extensions;
|
||||
|
||||
VkLayerDbgFunctionNode *DbgFunctionHead;
|
||||
uint32_t num_tmp_report_callbacks;
|
||||
VkDebugReportCallbackCreateInfoEXT *tmp_report_create_infos;
|
||||
VkDebugReportCallbackEXT *tmp_report_callbacks;
|
||||
uint32_t num_tmp_messengers;
|
||||
VkDebugUtilsMessengerCreateInfoEXT *tmp_messenger_create_infos;
|
||||
VkDebugUtilsMessengerEXT *tmp_messengers;
|
||||
|
||||
VkAllocationCallbacks alloc_callbacks;
|
||||
|
||||
bool wsi_surface_enabled;
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
bool wsi_win32_surface_enabled;
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
bool wsi_wayland_surface_enabled;
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
bool wsi_xcb_surface_enabled;
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
bool wsi_xlib_surface_enabled;
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
bool wsi_android_surface_enabled;
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||
bool wsi_macos_surface_enabled;
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||
bool wsi_ios_surface_enabled;
|
||||
#endif
|
||||
bool wsi_headless_surface_enabled;
|
||||
bool wsi_display_enabled;
|
||||
bool wsi_display_props2_enabled;
|
||||
};
|
||||
|
||||
// VkPhysicalDevice requires special treatment by loader. Firstly, terminator
|
||||
// code must be able to get the struct loader_icd_term to call into the proper
|
||||
// driver (multiple ICD/gpu case). This can be accomplished by wrapping the
|
||||
// created VkPhysicalDevice in loader terminate_EnumeratePhysicalDevices().
|
||||
// Secondly, the loader must be able to handle wrapped by layer VkPhysicalDevice
|
||||
// in trampoline code. This implies, that the loader trampoline code must also
|
||||
// wrap the VkPhysicalDevice object in trampoline code. Thus, loader has to
|
||||
// wrap the VkPhysicalDevice created object twice. In trampoline code it can't
|
||||
// rely on the terminator object wrapping since a layer may also wrap. Since
|
||||
// trampoline code wraps the VkPhysicalDevice this means all loader trampoline
|
||||
// code that passes a VkPhysicalDevice should unwrap it.
|
||||
|
||||
// Per enumerated PhysicalDevice structure, used to wrap in trampoline code and
|
||||
// also same structure used to wrap in terminator code
|
||||
struct loader_physical_device_tramp {
|
||||
struct loader_instance_dispatch_table *disp; // must be first entry in structure
|
||||
struct loader_instance *this_instance;
|
||||
VkPhysicalDevice phys_dev; // object from layers/loader terminator
|
||||
};
|
||||
|
||||
// Per enumerated PhysicalDevice structure, used to wrap in terminator code
|
||||
struct loader_physical_device_term {
|
||||
struct loader_instance_dispatch_table *disp; // must be first entry in structure
|
||||
struct loader_icd_term *this_icd_term;
|
||||
uint8_t icd_index;
|
||||
VkPhysicalDevice phys_dev; // object from ICD
|
||||
};
|
||||
|
||||
struct loader_struct {
|
||||
struct loader_instance *instances;
|
||||
};
|
||||
|
||||
struct loader_scanned_icd {
|
||||
char *lib_name;
|
||||
loader_platform_dl_handle handle;
|
||||
uint32_t api_version;
|
||||
uint32_t interface_version;
|
||||
PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
|
||||
PFN_GetPhysicalDeviceProcAddr GetPhysicalDeviceProcAddr;
|
||||
PFN_vkCreateInstance CreateInstance;
|
||||
PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties;
|
||||
};
|
||||
|
||||
static inline struct loader_instance *loader_instance(VkInstance instance) { return (struct loader_instance *)instance; }
|
||||
|
||||
static inline VkPhysicalDevice loader_unwrap_physical_device(VkPhysicalDevice physicalDevice) {
|
||||
struct loader_physical_device_tramp *phys_dev = (struct loader_physical_device_tramp *)physicalDevice;
|
||||
return phys_dev->phys_dev;
|
||||
}
|
||||
|
||||
static inline void loader_set_dispatch(void *obj, const void *data) { *((const void **)obj) = data; }
|
||||
|
||||
static inline VkLayerDispatchTable *loader_get_dispatch(const void *obj) { return *((VkLayerDispatchTable **)obj); }
|
||||
|
||||
static inline struct loader_dev_dispatch_table *loader_get_dev_dispatch(const void *obj) {
|
||||
return *((struct loader_dev_dispatch_table **)obj);
|
||||
}
|
||||
|
||||
static inline VkLayerInstanceDispatchTable *loader_get_instance_layer_dispatch(const void *obj) {
|
||||
return *((VkLayerInstanceDispatchTable **)obj);
|
||||
}
|
||||
|
||||
static inline struct loader_instance_dispatch_table *loader_get_instance_dispatch(const void *obj) {
|
||||
return *((struct loader_instance_dispatch_table **)obj);
|
||||
}
|
||||
|
||||
static inline void loader_init_dispatch(void *obj, const void *data) {
|
||||
#ifdef DEBUG
|
||||
assert(valid_loader_magic_value(obj) &&
|
||||
"Incompatible ICD, first dword must be initialized to "
|
||||
"ICD_LOADER_MAGIC. See loader/README.md for details.");
|
||||
#endif
|
||||
|
||||
loader_set_dispatch(obj, data);
|
||||
}
|
||||
|
||||
// Global variables used across files
|
||||
extern struct loader_struct loader;
|
||||
extern THREAD_LOCAL_DECL struct loader_instance *tls_instance;
|
||||
#if defined(_WIN32) && !defined(LOADER_DYNAMIC_LIB)
|
||||
extern LOADER_PLATFORM_THREAD_ONCE_DEFINITION(once_init);
|
||||
#endif
|
||||
extern loader_platform_thread_mutex loader_lock;
|
||||
extern loader_platform_thread_mutex loader_json_lock;
|
||||
|
||||
struct loader_msg_callback_map_entry {
|
||||
VkDebugReportCallbackEXT icd_obj;
|
||||
VkDebugReportCallbackEXT loader_obj;
|
||||
};
|
||||
|
||||
// Helper function definitions
|
||||
void *loader_instance_heap_alloc(const struct loader_instance *instance, size_t size, VkSystemAllocationScope allocationScope);
|
||||
void loader_instance_heap_free(const struct loader_instance *instance, void *pMemory);
|
||||
void *loader_instance_heap_realloc(const struct loader_instance *instance, void *pMemory, size_t orig_size, size_t size,
|
||||
VkSystemAllocationScope alloc_scope);
|
||||
void *loader_instance_tls_heap_alloc(size_t size);
|
||||
void loader_instance_tls_heap_free(void *pMemory);
|
||||
void *loader_device_heap_alloc(const struct loader_device *device, size_t size, VkSystemAllocationScope allocationScope);
|
||||
void loader_device_heap_free(const struct loader_device *device, void *pMemory);
|
||||
void *loader_device_heap_realloc(const struct loader_device *device, void *pMemory, size_t orig_size, size_t size,
|
||||
VkSystemAllocationScope alloc_scope);
|
||||
|
||||
void loader_log(const struct loader_instance *inst, VkFlags msg_type, int32_t msg_code, const char *format, ...);
|
||||
|
||||
bool compare_vk_extension_properties(const VkExtensionProperties *op1, const VkExtensionProperties *op2);
|
||||
|
||||
VkResult loaderValidateLayers(const struct loader_instance *inst, const uint32_t layer_count,
|
||||
const char *const *ppEnabledLayerNames, const struct loader_layer_list *list);
|
||||
|
||||
VkResult loader_validate_instance_extensions(struct loader_instance *inst, const struct loader_extension_list *icd_exts,
|
||||
const struct loader_layer_list *instance_layer,
|
||||
const VkInstanceCreateInfo *pCreateInfo);
|
||||
|
||||
void loader_initialize(void);
|
||||
bool has_vk_extension_property_array(const VkExtensionProperties *vk_ext_prop, const uint32_t count,
|
||||
const VkExtensionProperties *ext_array);
|
||||
bool has_vk_extension_property(const VkExtensionProperties *vk_ext_prop, const struct loader_extension_list *ext_list);
|
||||
|
||||
VkResult loader_add_to_ext_list(const struct loader_instance *inst, struct loader_extension_list *ext_list,
|
||||
uint32_t prop_list_count, const VkExtensionProperties *props);
|
||||
VkResult loader_add_to_dev_ext_list(const struct loader_instance *inst, struct loader_device_extension_list *ext_list,
|
||||
const VkExtensionProperties *props, uint32_t entry_count, char **entrys);
|
||||
VkResult loader_add_device_extensions(const struct loader_instance *inst,
|
||||
PFN_vkEnumerateDeviceExtensionProperties fpEnumerateDeviceExtensionProperties,
|
||||
VkPhysicalDevice physical_device, const char *lib_name,
|
||||
struct loader_extension_list *ext_list);
|
||||
VkResult loader_init_generic_list(const struct loader_instance *inst, struct loader_generic_list *list_info, size_t element_size);
|
||||
void loader_destroy_generic_list(const struct loader_instance *inst, struct loader_generic_list *list);
|
||||
void loaderDestroyLayerList(const struct loader_instance *inst, struct loader_device *device, struct loader_layer_list *layer_list);
|
||||
void loaderDeleteLayerListAndProperties(const struct loader_instance *inst, struct loader_layer_list *layer_list);
|
||||
void loaderAddLayerNameToList(const struct loader_instance *inst, const char *name, const enum layer_type_flags type_flags,
|
||||
const struct loader_layer_list *source_list, struct loader_layer_list *target_list,
|
||||
struct loader_layer_list *expanded_target_list);
|
||||
void loader_scanned_icd_clear(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list);
|
||||
VkResult loader_icd_scan(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list);
|
||||
void loaderScanForLayers(struct loader_instance *inst, struct loader_layer_list *instance_layers);
|
||||
void loaderScanForImplicitLayers(struct loader_instance *inst, struct loader_layer_list *instance_layers);
|
||||
bool loaderImplicitLayerIsEnabled(const struct loader_instance *inst, const struct loader_layer_properties *prop);
|
||||
VkResult loader_get_icd_loader_instance_extensions(const struct loader_instance *inst, struct loader_icd_tramp_list *icd_tramp_list,
|
||||
struct loader_extension_list *inst_exts);
|
||||
struct loader_icd_term *loader_get_icd_and_device(const VkDevice device, struct loader_device **found_dev, uint32_t *icd_index);
|
||||
void loader_init_dispatch_dev_ext(struct loader_instance *inst, struct loader_device *dev);
|
||||
void *loader_dev_ext_gpa(struct loader_instance *inst, const char *funcName);
|
||||
void *loader_get_dev_ext_trampoline(uint32_t index);
|
||||
bool loader_phys_dev_ext_gpa(struct loader_instance *inst, const char *funcName, bool perform_checking, void **tramp_addr,
|
||||
void **term_addr);
|
||||
void *loader_get_phys_dev_ext_tramp(uint32_t index);
|
||||
void *loader_get_phys_dev_ext_termin(uint32_t index);
|
||||
struct loader_instance *loader_get_instance(const VkInstance instance);
|
||||
void loaderDeactivateLayers(const struct loader_instance *instance, struct loader_device *device, struct loader_layer_list *list);
|
||||
struct loader_device *loader_create_logical_device(const struct loader_instance *inst, const VkAllocationCallbacks *pAllocator);
|
||||
void loader_add_logical_device(const struct loader_instance *inst, struct loader_icd_term *icd_term,
|
||||
struct loader_device *found_dev);
|
||||
void loader_remove_logical_device(const struct loader_instance *inst, struct loader_icd_term *icd_term,
|
||||
struct loader_device *found_dev, const VkAllocationCallbacks *pAllocator);
|
||||
// NOTE: Outside of loader, this entry-point is only provided for error
|
||||
// cleanup.
|
||||
void loader_destroy_logical_device(const struct loader_instance *inst, struct loader_device *dev,
|
||||
const VkAllocationCallbacks *pAllocator);
|
||||
|
||||
VkResult loaderEnableInstanceLayers(struct loader_instance *inst, const VkInstanceCreateInfo *pCreateInfo,
|
||||
const struct loader_layer_list *instance_layers);
|
||||
|
||||
VkResult loader_create_instance_chain(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator,
|
||||
struct loader_instance *inst, VkInstance *created_instance);
|
||||
|
||||
void loaderActivateInstanceLayerExtensions(struct loader_instance *inst, VkInstance created_inst);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL loader_layer_create_device(VkInstance instance, VkPhysicalDevice physicalDevice,
|
||||
const VkDeviceCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkDevice *pDevice,
|
||||
PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA);
|
||||
VKAPI_ATTR void VKAPI_CALL loader_layer_destroy_device(VkDevice device, const VkAllocationCallbacks *pAllocator,
|
||||
PFN_vkDestroyDevice destroyFunction);
|
||||
|
||||
VkResult loader_create_device_chain(const VkPhysicalDevice pd, const VkDeviceCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, const struct loader_instance *inst,
|
||||
struct loader_device *dev, PFN_vkGetInstanceProcAddr callingLayer,
|
||||
PFN_vkGetDeviceProcAddr *layerNextGDPA);
|
||||
|
||||
VkResult loader_validate_device_extensions(struct loader_instance *this_instance,
|
||||
const struct loader_layer_list *activated_device_layers,
|
||||
const struct loader_extension_list *icd_exts, const VkDeviceCreateInfo *pCreateInfo);
|
||||
|
||||
VkResult setupLoaderTrampPhysDevs(VkInstance instance);
|
||||
VkResult setupLoaderTermPhysDevs(struct loader_instance *inst);
|
||||
|
||||
VkStringErrorFlags vk_string_validate(const int max_length, const char *char_array);
|
||||
|
||||
#endif // LOADER_H
|
||||
98
thirdparty/vulkan/loader/murmurhash.c
vendored
Executable file
98
thirdparty/vulkan/loader/murmurhash.c
vendored
Executable file
@ -0,0 +1,98 @@
|
||||
|
||||
/**
|
||||
* `murmurhash.h' - murmurhash
|
||||
*
|
||||
* copyright (c) 2014 joseph werle <joseph.werle@gmail.com>
|
||||
* Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2016 Valve Corporation
|
||||
* Copyright (c) 2015-2016 LunarG, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and/or associated documentation files (the "Materials"), to
|
||||
* deal in the Materials without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Materials, and to permit persons to whom the Materials are
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice(s) and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Materials.
|
||||
*
|
||||
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
*
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
|
||||
* USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include "murmurhash.h"
|
||||
|
||||
uint32_t murmurhash(const char *key, size_t len, uint32_t seed) {
|
||||
uint32_t c1 = 0xcc9e2d51;
|
||||
uint32_t c2 = 0x1b873593;
|
||||
uint32_t r1 = 15;
|
||||
uint32_t r2 = 13;
|
||||
uint32_t m = 5;
|
||||
uint32_t n = 0xe6546b64;
|
||||
uint32_t h = 0;
|
||||
uint32_t k = 0;
|
||||
uint8_t *d = (uint8_t *)key; // 32 bit extract from `key'
|
||||
const uint32_t *chunks = NULL;
|
||||
const uint8_t *tail = NULL; // tail - last 8 bytes
|
||||
int i = 0;
|
||||
int l = (int)len / 4; // chunk length
|
||||
|
||||
h = seed;
|
||||
|
||||
chunks = (const uint32_t *)(d + l * 4); // body
|
||||
tail = (const uint8_t *)(d + l * 4); // last 8 byte chunk of `key'
|
||||
|
||||
// for each 4 byte chunk of `key'
|
||||
for (i = -l; i != 0; ++i) {
|
||||
// next 4 byte chunk of `key'
|
||||
k = chunks[i];
|
||||
|
||||
// encode next 4 byte chunk of `key'
|
||||
k *= c1;
|
||||
k = (k << r1) | (k >> (32 - r1));
|
||||
k *= c2;
|
||||
|
||||
// append to hash
|
||||
h ^= k;
|
||||
h = (h << r2) | (h >> (32 - r2));
|
||||
h = h * m + n;
|
||||
}
|
||||
|
||||
k = 0;
|
||||
|
||||
// remainder
|
||||
switch (len & 3) { // `len % 4'
|
||||
case 3:
|
||||
k ^= (tail[2] << 16);
|
||||
// fall through
|
||||
case 2:
|
||||
k ^= (tail[1] << 8);
|
||||
// fall through
|
||||
case 1:
|
||||
k ^= tail[0];
|
||||
k *= c1;
|
||||
k = (k << r1) | (k >> (32 - r1));
|
||||
k *= c2;
|
||||
h ^= k;
|
||||
}
|
||||
|
||||
h ^= len;
|
||||
|
||||
h ^= (h >> 16);
|
||||
h *= 0x85ebca6b;
|
||||
h ^= (h >> 13);
|
||||
h *= 0xc2b2ae35;
|
||||
h ^= (h >> 16);
|
||||
|
||||
return h;
|
||||
}
|
||||
52
thirdparty/vulkan/loader/murmurhash.h
vendored
Executable file
52
thirdparty/vulkan/loader/murmurhash.h
vendored
Executable file
@ -0,0 +1,52 @@
|
||||
|
||||
/**
|
||||
* `murmurhash.h' - murmurhash
|
||||
*
|
||||
* copyright (c) 2014 joseph werle <joseph.werle@gmail.com>
|
||||
* Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2016 Valve Corporation
|
||||
* Copyright (c) 2015-2016 LunarG, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and/or associated documentation files (the "Materials"), to
|
||||
* deal in the Materials without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Materials, and to permit persons to whom the Materials are
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice(s) and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Materials.
|
||||
*
|
||||
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
*
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
|
||||
* USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||
*/
|
||||
|
||||
#ifndef MURMURHASH_H
|
||||
#define MURMURHASH_H 1
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define MURMURHASH_VERSION "0.0.3"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Returns a murmur hash of `key' based on `seed'
|
||||
* using the MurmurHash3 algorithm
|
||||
*/
|
||||
|
||||
uint32_t murmurhash(const char *key, size_t len, uint32_t seed);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
1056
thirdparty/vulkan/loader/phys_dev_ext.c
vendored
Executable file
1056
thirdparty/vulkan/loader/phys_dev_ext.c
vendored
Executable file
File diff suppressed because it is too large
Load Diff
2480
thirdparty/vulkan/loader/trampoline.c
vendored
Executable file
2480
thirdparty/vulkan/loader/trampoline.c
vendored
Executable file
File diff suppressed because it is too large
Load Diff
819
thirdparty/vulkan/loader/unknown_ext_chain.c
vendored
Executable file
819
thirdparty/vulkan/loader/unknown_ext_chain.c
vendored
Executable file
@ -0,0 +1,819 @@
|
||||
/*
|
||||
* Copyright (c) 2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2017 Valve Corporation
|
||||
* Copyright (c) 2017 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author Jon Ashburn <jon@lunarg.com>
|
||||
* Author: Lenny Komow <lenny@lunarg.com>
|
||||
*/
|
||||
|
||||
// This code is used to pass on physical device extensions through the call chain. It must do this without creating a stack frame,
|
||||
// because the actual parameters of the call are not known. Since the first parameter is known to be a VkPhysicalDevice, it can
|
||||
// unwrap the physical device, overwriting the wrapped device, and then jump to the next function in the call chain. This code
|
||||
// attempts to accomplish this by relying on tail-call optimizations, but there is no guarantee that this will work. As a result,
|
||||
// this code is only compiled on systems where an assembly alternative has not been written.
|
||||
|
||||
#include "vk_loader_platform.h"
|
||||
#include "loader.h"
|
||||
|
||||
#if defined(__GNUC__) && !defined(__clang__)
|
||||
#pragma GCC optimize(3) // force gcc to use tail-calls
|
||||
#endif
|
||||
|
||||
// Trampoline function macro for unknown physical device extension command.
|
||||
#define PhysDevExtTramp(num) \
|
||||
VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp##num(VkPhysicalDevice physical_device) { \
|
||||
const struct loader_instance_dispatch_table *disp; \
|
||||
disp = loader_get_instance_dispatch(physical_device); \
|
||||
disp->phys_dev_ext[num](loader_unwrap_physical_device(physical_device)); \
|
||||
}
|
||||
|
||||
// Terminator function macro for unknown physical device extension command.
|
||||
#define PhysDevExtTermin(num) \
|
||||
VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin##num(VkPhysicalDevice physical_device) { \
|
||||
struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physical_device; \
|
||||
struct loader_icd_term *icd_term = phys_dev_term->this_icd_term; \
|
||||
struct loader_instance *inst = (struct loader_instance *)icd_term->this_instance; \
|
||||
if (NULL == icd_term->phys_dev_ext[num]) { \
|
||||
loader_log(inst, VK_DEBUG_REPORT_ERROR_BIT_EXT, 0, "Extension %s not supported for this physical device", \
|
||||
inst->phys_dev_ext_disp_hash[num].func_name); \
|
||||
} \
|
||||
icd_term->phys_dev_ext[num](phys_dev_term->phys_dev); \
|
||||
}
|
||||
|
||||
// Trampoline function macro for unknown physical device extension command.
|
||||
#define DevExtTramp(num) \
|
||||
VKAPI_ATTR void VKAPI_CALL vkdev_ext##num(VkDevice device) { \
|
||||
const struct loader_dev_dispatch_table *disp; \
|
||||
disp = loader_get_dev_dispatch(device); \
|
||||
disp->ext_dispatch.dev_ext[num](device); \
|
||||
}
|
||||
|
||||
|
||||
// Instantiations of the trampoline
|
||||
PhysDevExtTramp(0)
|
||||
PhysDevExtTramp(1)
|
||||
PhysDevExtTramp(2)
|
||||
PhysDevExtTramp(3)
|
||||
PhysDevExtTramp(4)
|
||||
PhysDevExtTramp(5)
|
||||
PhysDevExtTramp(6)
|
||||
PhysDevExtTramp(7)
|
||||
PhysDevExtTramp(8)
|
||||
PhysDevExtTramp(9)
|
||||
PhysDevExtTramp(10)
|
||||
PhysDevExtTramp(11)
|
||||
PhysDevExtTramp(12)
|
||||
PhysDevExtTramp(13)
|
||||
PhysDevExtTramp(14)
|
||||
PhysDevExtTramp(15)
|
||||
PhysDevExtTramp(16)
|
||||
PhysDevExtTramp(17)
|
||||
PhysDevExtTramp(18)
|
||||
PhysDevExtTramp(19)
|
||||
PhysDevExtTramp(20)
|
||||
PhysDevExtTramp(21)
|
||||
PhysDevExtTramp(22)
|
||||
PhysDevExtTramp(23)
|
||||
PhysDevExtTramp(24)
|
||||
PhysDevExtTramp(25)
|
||||
PhysDevExtTramp(26)
|
||||
PhysDevExtTramp(27)
|
||||
PhysDevExtTramp(28)
|
||||
PhysDevExtTramp(29)
|
||||
PhysDevExtTramp(30)
|
||||
PhysDevExtTramp(31)
|
||||
PhysDevExtTramp(32)
|
||||
PhysDevExtTramp(33)
|
||||
PhysDevExtTramp(34)
|
||||
PhysDevExtTramp(35)
|
||||
PhysDevExtTramp(36)
|
||||
PhysDevExtTramp(37)
|
||||
PhysDevExtTramp(38)
|
||||
PhysDevExtTramp(39)
|
||||
PhysDevExtTramp(40)
|
||||
PhysDevExtTramp(41)
|
||||
PhysDevExtTramp(42)
|
||||
PhysDevExtTramp(43)
|
||||
PhysDevExtTramp(44)
|
||||
PhysDevExtTramp(45)
|
||||
PhysDevExtTramp(46)
|
||||
PhysDevExtTramp(47)
|
||||
PhysDevExtTramp(48)
|
||||
PhysDevExtTramp(49)
|
||||
PhysDevExtTramp(50)
|
||||
PhysDevExtTramp(51)
|
||||
PhysDevExtTramp(52)
|
||||
PhysDevExtTramp(53)
|
||||
PhysDevExtTramp(54)
|
||||
PhysDevExtTramp(55)
|
||||
PhysDevExtTramp(56)
|
||||
PhysDevExtTramp(57)
|
||||
PhysDevExtTramp(58)
|
||||
PhysDevExtTramp(59)
|
||||
PhysDevExtTramp(60)
|
||||
PhysDevExtTramp(61)
|
||||
PhysDevExtTramp(62)
|
||||
PhysDevExtTramp(63)
|
||||
PhysDevExtTramp(64)
|
||||
PhysDevExtTramp(65)
|
||||
PhysDevExtTramp(66)
|
||||
PhysDevExtTramp(67)
|
||||
PhysDevExtTramp(68)
|
||||
PhysDevExtTramp(69)
|
||||
PhysDevExtTramp(70)
|
||||
PhysDevExtTramp(71)
|
||||
PhysDevExtTramp(72)
|
||||
PhysDevExtTramp(73)
|
||||
PhysDevExtTramp(74)
|
||||
PhysDevExtTramp(75)
|
||||
PhysDevExtTramp(76)
|
||||
PhysDevExtTramp(77)
|
||||
PhysDevExtTramp(78)
|
||||
PhysDevExtTramp(79)
|
||||
PhysDevExtTramp(80)
|
||||
PhysDevExtTramp(81)
|
||||
PhysDevExtTramp(82)
|
||||
PhysDevExtTramp(83)
|
||||
PhysDevExtTramp(84)
|
||||
PhysDevExtTramp(85)
|
||||
PhysDevExtTramp(86)
|
||||
PhysDevExtTramp(87)
|
||||
PhysDevExtTramp(88)
|
||||
PhysDevExtTramp(89)
|
||||
PhysDevExtTramp(90)
|
||||
PhysDevExtTramp(91)
|
||||
PhysDevExtTramp(92)
|
||||
PhysDevExtTramp(93)
|
||||
PhysDevExtTramp(94)
|
||||
PhysDevExtTramp(95)
|
||||
PhysDevExtTramp(96)
|
||||
PhysDevExtTramp(97)
|
||||
PhysDevExtTramp(98)
|
||||
PhysDevExtTramp(99)
|
||||
PhysDevExtTramp(100)
|
||||
PhysDevExtTramp(101)
|
||||
PhysDevExtTramp(102)
|
||||
PhysDevExtTramp(103)
|
||||
PhysDevExtTramp(104)
|
||||
PhysDevExtTramp(105)
|
||||
PhysDevExtTramp(106)
|
||||
PhysDevExtTramp(107)
|
||||
PhysDevExtTramp(108)
|
||||
PhysDevExtTramp(109)
|
||||
PhysDevExtTramp(110)
|
||||
PhysDevExtTramp(111)
|
||||
PhysDevExtTramp(112)
|
||||
PhysDevExtTramp(113)
|
||||
PhysDevExtTramp(114)
|
||||
PhysDevExtTramp(115)
|
||||
PhysDevExtTramp(116)
|
||||
PhysDevExtTramp(117)
|
||||
PhysDevExtTramp(118)
|
||||
PhysDevExtTramp(119)
|
||||
PhysDevExtTramp(120)
|
||||
PhysDevExtTramp(121)
|
||||
PhysDevExtTramp(122)
|
||||
PhysDevExtTramp(123)
|
||||
PhysDevExtTramp(124)
|
||||
PhysDevExtTramp(125)
|
||||
PhysDevExtTramp(126)
|
||||
PhysDevExtTramp(127)
|
||||
PhysDevExtTramp(128)
|
||||
PhysDevExtTramp(129)
|
||||
PhysDevExtTramp(130)
|
||||
PhysDevExtTramp(131)
|
||||
PhysDevExtTramp(132)
|
||||
PhysDevExtTramp(133)
|
||||
PhysDevExtTramp(134)
|
||||
PhysDevExtTramp(135)
|
||||
PhysDevExtTramp(136)
|
||||
PhysDevExtTramp(137)
|
||||
PhysDevExtTramp(138)
|
||||
PhysDevExtTramp(139)
|
||||
PhysDevExtTramp(140)
|
||||
PhysDevExtTramp(141)
|
||||
PhysDevExtTramp(142)
|
||||
PhysDevExtTramp(143)
|
||||
PhysDevExtTramp(144)
|
||||
PhysDevExtTramp(145)
|
||||
PhysDevExtTramp(146)
|
||||
PhysDevExtTramp(147)
|
||||
PhysDevExtTramp(148)
|
||||
PhysDevExtTramp(149)
|
||||
PhysDevExtTramp(150)
|
||||
PhysDevExtTramp(151)
|
||||
PhysDevExtTramp(152)
|
||||
PhysDevExtTramp(153)
|
||||
PhysDevExtTramp(154)
|
||||
PhysDevExtTramp(155)
|
||||
PhysDevExtTramp(156)
|
||||
PhysDevExtTramp(157)
|
||||
PhysDevExtTramp(158)
|
||||
PhysDevExtTramp(159)
|
||||
PhysDevExtTramp(160)
|
||||
PhysDevExtTramp(161)
|
||||
PhysDevExtTramp(162)
|
||||
PhysDevExtTramp(163)
|
||||
PhysDevExtTramp(164)
|
||||
PhysDevExtTramp(165)
|
||||
PhysDevExtTramp(166)
|
||||
PhysDevExtTramp(167)
|
||||
PhysDevExtTramp(168)
|
||||
PhysDevExtTramp(169)
|
||||
PhysDevExtTramp(170)
|
||||
PhysDevExtTramp(171)
|
||||
PhysDevExtTramp(172)
|
||||
PhysDevExtTramp(173)
|
||||
PhysDevExtTramp(174)
|
||||
PhysDevExtTramp(175)
|
||||
PhysDevExtTramp(176)
|
||||
PhysDevExtTramp(177)
|
||||
PhysDevExtTramp(178)
|
||||
PhysDevExtTramp(179)
|
||||
PhysDevExtTramp(180)
|
||||
PhysDevExtTramp(181)
|
||||
PhysDevExtTramp(182)
|
||||
PhysDevExtTramp(183)
|
||||
PhysDevExtTramp(184)
|
||||
PhysDevExtTramp(185)
|
||||
PhysDevExtTramp(186)
|
||||
PhysDevExtTramp(187)
|
||||
PhysDevExtTramp(188)
|
||||
PhysDevExtTramp(189)
|
||||
PhysDevExtTramp(190)
|
||||
PhysDevExtTramp(191)
|
||||
PhysDevExtTramp(192)
|
||||
PhysDevExtTramp(193)
|
||||
PhysDevExtTramp(194)
|
||||
PhysDevExtTramp(195)
|
||||
PhysDevExtTramp(196)
|
||||
PhysDevExtTramp(197)
|
||||
PhysDevExtTramp(198)
|
||||
PhysDevExtTramp(199)
|
||||
PhysDevExtTramp(200)
|
||||
PhysDevExtTramp(201)
|
||||
PhysDevExtTramp(202)
|
||||
PhysDevExtTramp(203)
|
||||
PhysDevExtTramp(204)
|
||||
PhysDevExtTramp(205)
|
||||
PhysDevExtTramp(206)
|
||||
PhysDevExtTramp(207)
|
||||
PhysDevExtTramp(208)
|
||||
PhysDevExtTramp(209)
|
||||
PhysDevExtTramp(210)
|
||||
PhysDevExtTramp(211)
|
||||
PhysDevExtTramp(212)
|
||||
PhysDevExtTramp(213)
|
||||
PhysDevExtTramp(214)
|
||||
PhysDevExtTramp(215)
|
||||
PhysDevExtTramp(216)
|
||||
PhysDevExtTramp(217)
|
||||
PhysDevExtTramp(218)
|
||||
PhysDevExtTramp(219)
|
||||
PhysDevExtTramp(220)
|
||||
PhysDevExtTramp(221)
|
||||
PhysDevExtTramp(222)
|
||||
PhysDevExtTramp(223)
|
||||
PhysDevExtTramp(224)
|
||||
PhysDevExtTramp(225)
|
||||
PhysDevExtTramp(226)
|
||||
PhysDevExtTramp(227)
|
||||
PhysDevExtTramp(228)
|
||||
PhysDevExtTramp(229)
|
||||
PhysDevExtTramp(230)
|
||||
PhysDevExtTramp(231)
|
||||
PhysDevExtTramp(232)
|
||||
PhysDevExtTramp(233)
|
||||
PhysDevExtTramp(234)
|
||||
PhysDevExtTramp(235)
|
||||
PhysDevExtTramp(236)
|
||||
PhysDevExtTramp(237)
|
||||
PhysDevExtTramp(238)
|
||||
PhysDevExtTramp(239)
|
||||
PhysDevExtTramp(240)
|
||||
PhysDevExtTramp(241)
|
||||
PhysDevExtTramp(242)
|
||||
PhysDevExtTramp(243)
|
||||
PhysDevExtTramp(244)
|
||||
PhysDevExtTramp(245)
|
||||
PhysDevExtTramp(246)
|
||||
PhysDevExtTramp(247)
|
||||
PhysDevExtTramp(248)
|
||||
PhysDevExtTramp(249)
|
||||
|
||||
// Instantiations of the terminator
|
||||
PhysDevExtTermin(0)
|
||||
PhysDevExtTermin(1)
|
||||
PhysDevExtTermin(2)
|
||||
PhysDevExtTermin(3)
|
||||
PhysDevExtTermin(4)
|
||||
PhysDevExtTermin(5)
|
||||
PhysDevExtTermin(6)
|
||||
PhysDevExtTermin(7)
|
||||
PhysDevExtTermin(8)
|
||||
PhysDevExtTermin(9)
|
||||
PhysDevExtTermin(10)
|
||||
PhysDevExtTermin(11)
|
||||
PhysDevExtTermin(12)
|
||||
PhysDevExtTermin(13)
|
||||
PhysDevExtTermin(14)
|
||||
PhysDevExtTermin(15)
|
||||
PhysDevExtTermin(16)
|
||||
PhysDevExtTermin(17)
|
||||
PhysDevExtTermin(18)
|
||||
PhysDevExtTermin(19)
|
||||
PhysDevExtTermin(20)
|
||||
PhysDevExtTermin(21)
|
||||
PhysDevExtTermin(22)
|
||||
PhysDevExtTermin(23)
|
||||
PhysDevExtTermin(24)
|
||||
PhysDevExtTermin(25)
|
||||
PhysDevExtTermin(26)
|
||||
PhysDevExtTermin(27)
|
||||
PhysDevExtTermin(28)
|
||||
PhysDevExtTermin(29)
|
||||
PhysDevExtTermin(30)
|
||||
PhysDevExtTermin(31)
|
||||
PhysDevExtTermin(32)
|
||||
PhysDevExtTermin(33)
|
||||
PhysDevExtTermin(34)
|
||||
PhysDevExtTermin(35)
|
||||
PhysDevExtTermin(36)
|
||||
PhysDevExtTermin(37)
|
||||
PhysDevExtTermin(38)
|
||||
PhysDevExtTermin(39)
|
||||
PhysDevExtTermin(40)
|
||||
PhysDevExtTermin(41)
|
||||
PhysDevExtTermin(42)
|
||||
PhysDevExtTermin(43)
|
||||
PhysDevExtTermin(44)
|
||||
PhysDevExtTermin(45)
|
||||
PhysDevExtTermin(46)
|
||||
PhysDevExtTermin(47)
|
||||
PhysDevExtTermin(48)
|
||||
PhysDevExtTermin(49)
|
||||
PhysDevExtTermin(50)
|
||||
PhysDevExtTermin(51)
|
||||
PhysDevExtTermin(52)
|
||||
PhysDevExtTermin(53)
|
||||
PhysDevExtTermin(54)
|
||||
PhysDevExtTermin(55)
|
||||
PhysDevExtTermin(56)
|
||||
PhysDevExtTermin(57)
|
||||
PhysDevExtTermin(58)
|
||||
PhysDevExtTermin(59)
|
||||
PhysDevExtTermin(60)
|
||||
PhysDevExtTermin(61)
|
||||
PhysDevExtTermin(62)
|
||||
PhysDevExtTermin(63)
|
||||
PhysDevExtTermin(64)
|
||||
PhysDevExtTermin(65)
|
||||
PhysDevExtTermin(66)
|
||||
PhysDevExtTermin(67)
|
||||
PhysDevExtTermin(68)
|
||||
PhysDevExtTermin(69)
|
||||
PhysDevExtTermin(70)
|
||||
PhysDevExtTermin(71)
|
||||
PhysDevExtTermin(72)
|
||||
PhysDevExtTermin(73)
|
||||
PhysDevExtTermin(74)
|
||||
PhysDevExtTermin(75)
|
||||
PhysDevExtTermin(76)
|
||||
PhysDevExtTermin(77)
|
||||
PhysDevExtTermin(78)
|
||||
PhysDevExtTermin(79)
|
||||
PhysDevExtTermin(80)
|
||||
PhysDevExtTermin(81)
|
||||
PhysDevExtTermin(82)
|
||||
PhysDevExtTermin(83)
|
||||
PhysDevExtTermin(84)
|
||||
PhysDevExtTermin(85)
|
||||
PhysDevExtTermin(86)
|
||||
PhysDevExtTermin(87)
|
||||
PhysDevExtTermin(88)
|
||||
PhysDevExtTermin(89)
|
||||
PhysDevExtTermin(90)
|
||||
PhysDevExtTermin(91)
|
||||
PhysDevExtTermin(92)
|
||||
PhysDevExtTermin(93)
|
||||
PhysDevExtTermin(94)
|
||||
PhysDevExtTermin(95)
|
||||
PhysDevExtTermin(96)
|
||||
PhysDevExtTermin(97)
|
||||
PhysDevExtTermin(98)
|
||||
PhysDevExtTermin(99)
|
||||
PhysDevExtTermin(100)
|
||||
PhysDevExtTermin(101)
|
||||
PhysDevExtTermin(102)
|
||||
PhysDevExtTermin(103)
|
||||
PhysDevExtTermin(104)
|
||||
PhysDevExtTermin(105)
|
||||
PhysDevExtTermin(106)
|
||||
PhysDevExtTermin(107)
|
||||
PhysDevExtTermin(108)
|
||||
PhysDevExtTermin(109)
|
||||
PhysDevExtTermin(110)
|
||||
PhysDevExtTermin(111)
|
||||
PhysDevExtTermin(112)
|
||||
PhysDevExtTermin(113)
|
||||
PhysDevExtTermin(114)
|
||||
PhysDevExtTermin(115)
|
||||
PhysDevExtTermin(116)
|
||||
PhysDevExtTermin(117)
|
||||
PhysDevExtTermin(118)
|
||||
PhysDevExtTermin(119)
|
||||
PhysDevExtTermin(120)
|
||||
PhysDevExtTermin(121)
|
||||
PhysDevExtTermin(122)
|
||||
PhysDevExtTermin(123)
|
||||
PhysDevExtTermin(124)
|
||||
PhysDevExtTermin(125)
|
||||
PhysDevExtTermin(126)
|
||||
PhysDevExtTermin(127)
|
||||
PhysDevExtTermin(128)
|
||||
PhysDevExtTermin(129)
|
||||
PhysDevExtTermin(130)
|
||||
PhysDevExtTermin(131)
|
||||
PhysDevExtTermin(132)
|
||||
PhysDevExtTermin(133)
|
||||
PhysDevExtTermin(134)
|
||||
PhysDevExtTermin(135)
|
||||
PhysDevExtTermin(136)
|
||||
PhysDevExtTermin(137)
|
||||
PhysDevExtTermin(138)
|
||||
PhysDevExtTermin(139)
|
||||
PhysDevExtTermin(140)
|
||||
PhysDevExtTermin(141)
|
||||
PhysDevExtTermin(142)
|
||||
PhysDevExtTermin(143)
|
||||
PhysDevExtTermin(144)
|
||||
PhysDevExtTermin(145)
|
||||
PhysDevExtTermin(146)
|
||||
PhysDevExtTermin(147)
|
||||
PhysDevExtTermin(148)
|
||||
PhysDevExtTermin(149)
|
||||
PhysDevExtTermin(150)
|
||||
PhysDevExtTermin(151)
|
||||
PhysDevExtTermin(152)
|
||||
PhysDevExtTermin(153)
|
||||
PhysDevExtTermin(154)
|
||||
PhysDevExtTermin(155)
|
||||
PhysDevExtTermin(156)
|
||||
PhysDevExtTermin(157)
|
||||
PhysDevExtTermin(158)
|
||||
PhysDevExtTermin(159)
|
||||
PhysDevExtTermin(160)
|
||||
PhysDevExtTermin(161)
|
||||
PhysDevExtTermin(162)
|
||||
PhysDevExtTermin(163)
|
||||
PhysDevExtTermin(164)
|
||||
PhysDevExtTermin(165)
|
||||
PhysDevExtTermin(166)
|
||||
PhysDevExtTermin(167)
|
||||
PhysDevExtTermin(168)
|
||||
PhysDevExtTermin(169)
|
||||
PhysDevExtTermin(170)
|
||||
PhysDevExtTermin(171)
|
||||
PhysDevExtTermin(172)
|
||||
PhysDevExtTermin(173)
|
||||
PhysDevExtTermin(174)
|
||||
PhysDevExtTermin(175)
|
||||
PhysDevExtTermin(176)
|
||||
PhysDevExtTermin(177)
|
||||
PhysDevExtTermin(178)
|
||||
PhysDevExtTermin(179)
|
||||
PhysDevExtTermin(180)
|
||||
PhysDevExtTermin(181)
|
||||
PhysDevExtTermin(182)
|
||||
PhysDevExtTermin(183)
|
||||
PhysDevExtTermin(184)
|
||||
PhysDevExtTermin(185)
|
||||
PhysDevExtTermin(186)
|
||||
PhysDevExtTermin(187)
|
||||
PhysDevExtTermin(188)
|
||||
PhysDevExtTermin(189)
|
||||
PhysDevExtTermin(190)
|
||||
PhysDevExtTermin(191)
|
||||
PhysDevExtTermin(192)
|
||||
PhysDevExtTermin(193)
|
||||
PhysDevExtTermin(194)
|
||||
PhysDevExtTermin(195)
|
||||
PhysDevExtTermin(196)
|
||||
PhysDevExtTermin(197)
|
||||
PhysDevExtTermin(198)
|
||||
PhysDevExtTermin(199)
|
||||
PhysDevExtTermin(200)
|
||||
PhysDevExtTermin(201)
|
||||
PhysDevExtTermin(202)
|
||||
PhysDevExtTermin(203)
|
||||
PhysDevExtTermin(204)
|
||||
PhysDevExtTermin(205)
|
||||
PhysDevExtTermin(206)
|
||||
PhysDevExtTermin(207)
|
||||
PhysDevExtTermin(208)
|
||||
PhysDevExtTermin(209)
|
||||
PhysDevExtTermin(210)
|
||||
PhysDevExtTermin(211)
|
||||
PhysDevExtTermin(212)
|
||||
PhysDevExtTermin(213)
|
||||
PhysDevExtTermin(214)
|
||||
PhysDevExtTermin(215)
|
||||
PhysDevExtTermin(216)
|
||||
PhysDevExtTermin(217)
|
||||
PhysDevExtTermin(218)
|
||||
PhysDevExtTermin(219)
|
||||
PhysDevExtTermin(220)
|
||||
PhysDevExtTermin(221)
|
||||
PhysDevExtTermin(222)
|
||||
PhysDevExtTermin(223)
|
||||
PhysDevExtTermin(224)
|
||||
PhysDevExtTermin(225)
|
||||
PhysDevExtTermin(226)
|
||||
PhysDevExtTermin(227)
|
||||
PhysDevExtTermin(228)
|
||||
PhysDevExtTermin(229)
|
||||
PhysDevExtTermin(230)
|
||||
PhysDevExtTermin(231)
|
||||
PhysDevExtTermin(232)
|
||||
PhysDevExtTermin(233)
|
||||
PhysDevExtTermin(234)
|
||||
PhysDevExtTermin(235)
|
||||
PhysDevExtTermin(236)
|
||||
PhysDevExtTermin(237)
|
||||
PhysDevExtTermin(238)
|
||||
PhysDevExtTermin(239)
|
||||
PhysDevExtTermin(240)
|
||||
PhysDevExtTermin(241)
|
||||
PhysDevExtTermin(242)
|
||||
PhysDevExtTermin(243)
|
||||
PhysDevExtTermin(244)
|
||||
PhysDevExtTermin(245)
|
||||
PhysDevExtTermin(246)
|
||||
PhysDevExtTermin(247)
|
||||
PhysDevExtTermin(248)
|
||||
PhysDevExtTermin(249)
|
||||
|
||||
// Instantiations of the device trampoline
|
||||
DevExtTramp(0)
|
||||
DevExtTramp(1)
|
||||
DevExtTramp(2)
|
||||
DevExtTramp(3)
|
||||
DevExtTramp(4)
|
||||
DevExtTramp(5)
|
||||
DevExtTramp(6)
|
||||
DevExtTramp(7)
|
||||
DevExtTramp(8)
|
||||
DevExtTramp(9)
|
||||
DevExtTramp(10)
|
||||
DevExtTramp(11)
|
||||
DevExtTramp(12)
|
||||
DevExtTramp(13)
|
||||
DevExtTramp(14)
|
||||
DevExtTramp(15)
|
||||
DevExtTramp(16)
|
||||
DevExtTramp(17)
|
||||
DevExtTramp(18)
|
||||
DevExtTramp(19)
|
||||
DevExtTramp(20)
|
||||
DevExtTramp(21)
|
||||
DevExtTramp(22)
|
||||
DevExtTramp(23)
|
||||
DevExtTramp(24)
|
||||
DevExtTramp(25)
|
||||
DevExtTramp(26)
|
||||
DevExtTramp(27)
|
||||
DevExtTramp(28)
|
||||
DevExtTramp(29)
|
||||
DevExtTramp(30)
|
||||
DevExtTramp(31)
|
||||
DevExtTramp(32)
|
||||
DevExtTramp(33)
|
||||
DevExtTramp(34)
|
||||
DevExtTramp(35)
|
||||
DevExtTramp(36)
|
||||
DevExtTramp(37)
|
||||
DevExtTramp(38)
|
||||
DevExtTramp(39)
|
||||
DevExtTramp(40)
|
||||
DevExtTramp(41)
|
||||
DevExtTramp(42)
|
||||
DevExtTramp(43)
|
||||
DevExtTramp(44)
|
||||
DevExtTramp(45)
|
||||
DevExtTramp(46)
|
||||
DevExtTramp(47)
|
||||
DevExtTramp(48)
|
||||
DevExtTramp(49)
|
||||
DevExtTramp(50)
|
||||
DevExtTramp(51)
|
||||
DevExtTramp(52)
|
||||
DevExtTramp(53)
|
||||
DevExtTramp(54)
|
||||
DevExtTramp(55)
|
||||
DevExtTramp(56)
|
||||
DevExtTramp(57)
|
||||
DevExtTramp(58)
|
||||
DevExtTramp(59)
|
||||
DevExtTramp(60)
|
||||
DevExtTramp(61)
|
||||
DevExtTramp(62)
|
||||
DevExtTramp(63)
|
||||
DevExtTramp(64)
|
||||
DevExtTramp(65)
|
||||
DevExtTramp(66)
|
||||
DevExtTramp(67)
|
||||
DevExtTramp(68)
|
||||
DevExtTramp(69)
|
||||
DevExtTramp(70)
|
||||
DevExtTramp(71)
|
||||
DevExtTramp(72)
|
||||
DevExtTramp(73)
|
||||
DevExtTramp(74)
|
||||
DevExtTramp(75)
|
||||
DevExtTramp(76)
|
||||
DevExtTramp(77)
|
||||
DevExtTramp(78)
|
||||
DevExtTramp(79)
|
||||
DevExtTramp(80)
|
||||
DevExtTramp(81)
|
||||
DevExtTramp(82)
|
||||
DevExtTramp(83)
|
||||
DevExtTramp(84)
|
||||
DevExtTramp(85)
|
||||
DevExtTramp(86)
|
||||
DevExtTramp(87)
|
||||
DevExtTramp(88)
|
||||
DevExtTramp(89)
|
||||
DevExtTramp(90)
|
||||
DevExtTramp(91)
|
||||
DevExtTramp(92)
|
||||
DevExtTramp(93)
|
||||
DevExtTramp(94)
|
||||
DevExtTramp(95)
|
||||
DevExtTramp(96)
|
||||
DevExtTramp(97)
|
||||
DevExtTramp(98)
|
||||
DevExtTramp(99)
|
||||
DevExtTramp(100)
|
||||
DevExtTramp(101)
|
||||
DevExtTramp(102)
|
||||
DevExtTramp(103)
|
||||
DevExtTramp(104)
|
||||
DevExtTramp(105)
|
||||
DevExtTramp(106)
|
||||
DevExtTramp(107)
|
||||
DevExtTramp(108)
|
||||
DevExtTramp(109)
|
||||
DevExtTramp(110)
|
||||
DevExtTramp(111)
|
||||
DevExtTramp(112)
|
||||
DevExtTramp(113)
|
||||
DevExtTramp(114)
|
||||
DevExtTramp(115)
|
||||
DevExtTramp(116)
|
||||
DevExtTramp(117)
|
||||
DevExtTramp(118)
|
||||
DevExtTramp(119)
|
||||
DevExtTramp(120)
|
||||
DevExtTramp(121)
|
||||
DevExtTramp(122)
|
||||
DevExtTramp(123)
|
||||
DevExtTramp(124)
|
||||
DevExtTramp(125)
|
||||
DevExtTramp(126)
|
||||
DevExtTramp(127)
|
||||
DevExtTramp(128)
|
||||
DevExtTramp(129)
|
||||
DevExtTramp(130)
|
||||
DevExtTramp(131)
|
||||
DevExtTramp(132)
|
||||
DevExtTramp(133)
|
||||
DevExtTramp(134)
|
||||
DevExtTramp(135)
|
||||
DevExtTramp(136)
|
||||
DevExtTramp(137)
|
||||
DevExtTramp(138)
|
||||
DevExtTramp(139)
|
||||
DevExtTramp(140)
|
||||
DevExtTramp(141)
|
||||
DevExtTramp(142)
|
||||
DevExtTramp(143)
|
||||
DevExtTramp(144)
|
||||
DevExtTramp(145)
|
||||
DevExtTramp(146)
|
||||
DevExtTramp(147)
|
||||
DevExtTramp(148)
|
||||
DevExtTramp(149)
|
||||
DevExtTramp(150)
|
||||
DevExtTramp(151)
|
||||
DevExtTramp(152)
|
||||
DevExtTramp(153)
|
||||
DevExtTramp(154)
|
||||
DevExtTramp(155)
|
||||
DevExtTramp(156)
|
||||
DevExtTramp(157)
|
||||
DevExtTramp(158)
|
||||
DevExtTramp(159)
|
||||
DevExtTramp(160)
|
||||
DevExtTramp(161)
|
||||
DevExtTramp(162)
|
||||
DevExtTramp(163)
|
||||
DevExtTramp(164)
|
||||
DevExtTramp(165)
|
||||
DevExtTramp(166)
|
||||
DevExtTramp(167)
|
||||
DevExtTramp(168)
|
||||
DevExtTramp(169)
|
||||
DevExtTramp(170)
|
||||
DevExtTramp(171)
|
||||
DevExtTramp(172)
|
||||
DevExtTramp(173)
|
||||
DevExtTramp(174)
|
||||
DevExtTramp(175)
|
||||
DevExtTramp(176)
|
||||
DevExtTramp(177)
|
||||
DevExtTramp(178)
|
||||
DevExtTramp(179)
|
||||
DevExtTramp(180)
|
||||
DevExtTramp(181)
|
||||
DevExtTramp(182)
|
||||
DevExtTramp(183)
|
||||
DevExtTramp(184)
|
||||
DevExtTramp(185)
|
||||
DevExtTramp(186)
|
||||
DevExtTramp(187)
|
||||
DevExtTramp(188)
|
||||
DevExtTramp(189)
|
||||
DevExtTramp(190)
|
||||
DevExtTramp(191)
|
||||
DevExtTramp(192)
|
||||
DevExtTramp(193)
|
||||
DevExtTramp(194)
|
||||
DevExtTramp(195)
|
||||
DevExtTramp(196)
|
||||
DevExtTramp(197)
|
||||
DevExtTramp(198)
|
||||
DevExtTramp(199)
|
||||
DevExtTramp(200)
|
||||
DevExtTramp(201)
|
||||
DevExtTramp(202)
|
||||
DevExtTramp(203)
|
||||
DevExtTramp(204)
|
||||
DevExtTramp(205)
|
||||
DevExtTramp(206)
|
||||
DevExtTramp(207)
|
||||
DevExtTramp(208)
|
||||
DevExtTramp(209)
|
||||
DevExtTramp(210)
|
||||
DevExtTramp(211)
|
||||
DevExtTramp(212)
|
||||
DevExtTramp(213)
|
||||
DevExtTramp(214)
|
||||
DevExtTramp(215)
|
||||
DevExtTramp(216)
|
||||
DevExtTramp(217)
|
||||
DevExtTramp(218)
|
||||
DevExtTramp(219)
|
||||
DevExtTramp(220)
|
||||
DevExtTramp(221)
|
||||
DevExtTramp(222)
|
||||
DevExtTramp(223)
|
||||
DevExtTramp(224)
|
||||
DevExtTramp(225)
|
||||
DevExtTramp(226)
|
||||
DevExtTramp(227)
|
||||
DevExtTramp(228)
|
||||
DevExtTramp(229)
|
||||
DevExtTramp(230)
|
||||
DevExtTramp(231)
|
||||
DevExtTramp(232)
|
||||
DevExtTramp(233)
|
||||
DevExtTramp(234)
|
||||
DevExtTramp(235)
|
||||
DevExtTramp(236)
|
||||
DevExtTramp(237)
|
||||
DevExtTramp(238)
|
||||
DevExtTramp(239)
|
||||
DevExtTramp(240)
|
||||
DevExtTramp(241)
|
||||
DevExtTramp(242)
|
||||
DevExtTramp(243)
|
||||
DevExtTramp(244)
|
||||
DevExtTramp(245)
|
||||
DevExtTramp(246)
|
||||
DevExtTramp(247)
|
||||
DevExtTramp(248)
|
||||
DevExtTramp(249)
|
||||
873
thirdparty/vulkan/loader/unknown_ext_chain_gas.asm
vendored
Executable file
873
thirdparty/vulkan/loader/unknown_ext_chain_gas.asm
vendored
Executable file
@ -0,0 +1,873 @@
|
||||
#
|
||||
# Copyright (c) 2017 The Khronos Group Inc.
|
||||
# Copyright (c) 2017 Valve Corporation
|
||||
# Copyright (c) 2017 LunarG, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# Author: Lenny Komow <lenny@lunarg.com>
|
||||
#
|
||||
|
||||
# This code is used to pass on device (including physical device) extensions through the call chain. It must do this without
|
||||
# creating a stack frame, because the actual parameters of the call are not known. Since the first parameter is known to be a
|
||||
# VkPhysicalDevice or a dispatchable object it can unwrap the object, possibly overwriting the wrapped physical device, and then
|
||||
# jump to the next function in the call chain
|
||||
|
||||
.intel_syntax noprefix
|
||||
.include "gen_defines.asm"
|
||||
|
||||
.ifdef X86_64
|
||||
|
||||
.macro PhysDevExtTramp num
|
||||
.global vkPhysDevExtTramp\num
|
||||
vkPhysDevExtTramp\num:
|
||||
mov rax, [rdi]
|
||||
mov rdi, [rdi + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP]
|
||||
jmp [rax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * \num))]
|
||||
.endm
|
||||
|
||||
.macro PhysDevExtTermin num
|
||||
.global vkPhysDevExtTermin\num
|
||||
vkPhysDevExtTermin\num:
|
||||
mov rax, [rdi + ICD_TERM_OFFSET_PHYS_DEV_TERM] # Store the loader_icd_term* in rax
|
||||
cmp qword ptr [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))], 0 # Check if the next function in the chain is NULL
|
||||
je terminError\num # Go to the error section if it is NULL
|
||||
mov rdi, [rdi + PHYS_DEV_OFFSET_PHYS_DEV_TERM] # Load the unwrapped VkPhysicalDevice into the first arg
|
||||
jmp [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))] # Jump to the next function in the chain
|
||||
terminError\num:
|
||||
sub rsp, 56 # Create the stack frame
|
||||
mov rdi, [rax + INSTANCE_OFFSET_ICD_TERM] # Load the loader_instance into rdi (first arg)
|
||||
mov r8, [rdi + (HASH_OFFSET_INSTANCE + (HASH_SIZE * \num) + FUNC_NAME_OFFSET_HASH)] # Load the func name into r8 (fifth arg)
|
||||
lea rcx, termin_error_string@GOTPCREL # Load the error string into rcx (fourth arg)
|
||||
xor edx, edx # Set rdx to zero (third arg)
|
||||
lea esi, [rdx + VK_DEBUG_REPORT_ERROR_BIT_EXT] # Write the error logging bit to rsi (second arg)
|
||||
call loader_log # Log the error message before we crash
|
||||
add rsp, 56 # Clean up the stack frame
|
||||
mov rax, 0
|
||||
jmp rax # Crash intentionally by jumping to address zero
|
||||
.endm
|
||||
|
||||
.macro DevExtTramp num
|
||||
.global vkdev_ext\num
|
||||
vkdev_ext\num:
|
||||
mov rax, [rdi] # Dereference the handle to get the dispatch table
|
||||
jmp [rax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * \num))] # Jump to the appropriate call chain
|
||||
.endm
|
||||
|
||||
.else
|
||||
|
||||
.macro PhysDevExtTramp num
|
||||
.global vkPhysDevExtTramp\num
|
||||
vkPhysDevExtTramp\num:
|
||||
mov eax, [esp + 4] # Load the wrapped VkPhysicalDevice into eax
|
||||
mov ecx, [eax + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] # Load the unwrapped VkPhysicalDevice into ecx
|
||||
mov [esp + 4], ecx # Overwrite the wrapped VkPhysicalDevice with the unwrapped one (on the stack)
|
||||
mov eax, [eax] # Dereference the wrapped VkPhysicalDevice to get the dispatch table in eax
|
||||
jmp [eax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * \num))] # Dereference the wrapped VkPhysicalDevice to get the dispatch table in eax
|
||||
.endm
|
||||
|
||||
.macro PhysDevExtTermin num
|
||||
.global vkPhysDevExtTermin\num
|
||||
vkPhysDevExtTermin\num:
|
||||
mov ecx, [esp + 4] # Move the wrapped VkPhysicalDevice into ecx
|
||||
mov eax, [ecx + ICD_TERM_OFFSET_PHYS_DEV_TERM] # Store the loader_icd_term* in eax
|
||||
cmp dword ptr [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))], 0 # Check if the next function in the chain is NULL
|
||||
je terminError\num # Go to the error section if it is NULL
|
||||
mov ecx, [ecx + PHYS_DEV_OFFSET_PHYS_DEV_TERM] # Unwrap the VkPhysicalDevice in ecx
|
||||
mov [esp + 4], ecx # Copy the unwrapped VkPhysicalDevice into the first arg
|
||||
jmp [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * \num))] # Jump to the next function in the chain
|
||||
terminError\num:
|
||||
mov eax, [eax + INSTANCE_OFFSET_ICD_TERM] # Load the loader_instance into eax
|
||||
push [eax + (HASH_OFFSET_INSTANCE + (HASH_SIZE * \num) + FUNC_NAME_OFFSET_HASH)] # Push the func name (fifth arg)
|
||||
push offset termin_error_string@GOT # Push the error string (fourth arg)
|
||||
push 0 # Push zero (third arg)
|
||||
push VK_DEBUG_REPORT_ERROR_BIT_EXT # Push the error logging bit (second arg)
|
||||
push eax # Push the loader_instance (first arg)
|
||||
call loader_log # Log the error message before we crash
|
||||
add esp, 20 # Clean up the args
|
||||
mov eax, 0
|
||||
jmp eax # Crash intentionally by jumping to address zero
|
||||
.endm
|
||||
|
||||
.macro DevExtTramp num
|
||||
.global vkdev_ext\num
|
||||
vkdev_ext\num:
|
||||
mov eax, [esp + 4] # Dereference the handle to get the dispatch table
|
||||
jmp [eax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * \num))] # Jump to the appropriate call chain
|
||||
.endm
|
||||
|
||||
.endif
|
||||
|
||||
#if defined(__ELF__)
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
#endif
|
||||
|
||||
.data
|
||||
|
||||
termin_error_string:
|
||||
.string "Extension %s not supported for this physical device"
|
||||
|
||||
.text
|
||||
|
||||
PhysDevExtTramp 0
|
||||
PhysDevExtTramp 1
|
||||
PhysDevExtTramp 2
|
||||
PhysDevExtTramp 3
|
||||
PhysDevExtTramp 4
|
||||
PhysDevExtTramp 5
|
||||
PhysDevExtTramp 6
|
||||
PhysDevExtTramp 7
|
||||
PhysDevExtTramp 8
|
||||
PhysDevExtTramp 9
|
||||
PhysDevExtTramp 10
|
||||
PhysDevExtTramp 11
|
||||
PhysDevExtTramp 12
|
||||
PhysDevExtTramp 13
|
||||
PhysDevExtTramp 14
|
||||
PhysDevExtTramp 15
|
||||
PhysDevExtTramp 16
|
||||
PhysDevExtTramp 17
|
||||
PhysDevExtTramp 18
|
||||
PhysDevExtTramp 19
|
||||
PhysDevExtTramp 20
|
||||
PhysDevExtTramp 21
|
||||
PhysDevExtTramp 22
|
||||
PhysDevExtTramp 23
|
||||
PhysDevExtTramp 24
|
||||
PhysDevExtTramp 25
|
||||
PhysDevExtTramp 26
|
||||
PhysDevExtTramp 27
|
||||
PhysDevExtTramp 28
|
||||
PhysDevExtTramp 29
|
||||
PhysDevExtTramp 30
|
||||
PhysDevExtTramp 31
|
||||
PhysDevExtTramp 32
|
||||
PhysDevExtTramp 33
|
||||
PhysDevExtTramp 34
|
||||
PhysDevExtTramp 35
|
||||
PhysDevExtTramp 36
|
||||
PhysDevExtTramp 37
|
||||
PhysDevExtTramp 38
|
||||
PhysDevExtTramp 39
|
||||
PhysDevExtTramp 40
|
||||
PhysDevExtTramp 41
|
||||
PhysDevExtTramp 42
|
||||
PhysDevExtTramp 43
|
||||
PhysDevExtTramp 44
|
||||
PhysDevExtTramp 45
|
||||
PhysDevExtTramp 46
|
||||
PhysDevExtTramp 47
|
||||
PhysDevExtTramp 48
|
||||
PhysDevExtTramp 49
|
||||
PhysDevExtTramp 50
|
||||
PhysDevExtTramp 51
|
||||
PhysDevExtTramp 52
|
||||
PhysDevExtTramp 53
|
||||
PhysDevExtTramp 54
|
||||
PhysDevExtTramp 55
|
||||
PhysDevExtTramp 56
|
||||
PhysDevExtTramp 57
|
||||
PhysDevExtTramp 58
|
||||
PhysDevExtTramp 59
|
||||
PhysDevExtTramp 60
|
||||
PhysDevExtTramp 61
|
||||
PhysDevExtTramp 62
|
||||
PhysDevExtTramp 63
|
||||
PhysDevExtTramp 64
|
||||
PhysDevExtTramp 65
|
||||
PhysDevExtTramp 66
|
||||
PhysDevExtTramp 67
|
||||
PhysDevExtTramp 68
|
||||
PhysDevExtTramp 69
|
||||
PhysDevExtTramp 70
|
||||
PhysDevExtTramp 71
|
||||
PhysDevExtTramp 72
|
||||
PhysDevExtTramp 73
|
||||
PhysDevExtTramp 74
|
||||
PhysDevExtTramp 75
|
||||
PhysDevExtTramp 76
|
||||
PhysDevExtTramp 77
|
||||
PhysDevExtTramp 78
|
||||
PhysDevExtTramp 79
|
||||
PhysDevExtTramp 80
|
||||
PhysDevExtTramp 81
|
||||
PhysDevExtTramp 82
|
||||
PhysDevExtTramp 83
|
||||
PhysDevExtTramp 84
|
||||
PhysDevExtTramp 85
|
||||
PhysDevExtTramp 86
|
||||
PhysDevExtTramp 87
|
||||
PhysDevExtTramp 88
|
||||
PhysDevExtTramp 89
|
||||
PhysDevExtTramp 90
|
||||
PhysDevExtTramp 91
|
||||
PhysDevExtTramp 92
|
||||
PhysDevExtTramp 93
|
||||
PhysDevExtTramp 94
|
||||
PhysDevExtTramp 95
|
||||
PhysDevExtTramp 96
|
||||
PhysDevExtTramp 97
|
||||
PhysDevExtTramp 98
|
||||
PhysDevExtTramp 99
|
||||
PhysDevExtTramp 100
|
||||
PhysDevExtTramp 101
|
||||
PhysDevExtTramp 102
|
||||
PhysDevExtTramp 103
|
||||
PhysDevExtTramp 104
|
||||
PhysDevExtTramp 105
|
||||
PhysDevExtTramp 106
|
||||
PhysDevExtTramp 107
|
||||
PhysDevExtTramp 108
|
||||
PhysDevExtTramp 109
|
||||
PhysDevExtTramp 110
|
||||
PhysDevExtTramp 111
|
||||
PhysDevExtTramp 112
|
||||
PhysDevExtTramp 113
|
||||
PhysDevExtTramp 114
|
||||
PhysDevExtTramp 115
|
||||
PhysDevExtTramp 116
|
||||
PhysDevExtTramp 117
|
||||
PhysDevExtTramp 118
|
||||
PhysDevExtTramp 119
|
||||
PhysDevExtTramp 120
|
||||
PhysDevExtTramp 121
|
||||
PhysDevExtTramp 122
|
||||
PhysDevExtTramp 123
|
||||
PhysDevExtTramp 124
|
||||
PhysDevExtTramp 125
|
||||
PhysDevExtTramp 126
|
||||
PhysDevExtTramp 127
|
||||
PhysDevExtTramp 128
|
||||
PhysDevExtTramp 129
|
||||
PhysDevExtTramp 130
|
||||
PhysDevExtTramp 131
|
||||
PhysDevExtTramp 132
|
||||
PhysDevExtTramp 133
|
||||
PhysDevExtTramp 134
|
||||
PhysDevExtTramp 135
|
||||
PhysDevExtTramp 136
|
||||
PhysDevExtTramp 137
|
||||
PhysDevExtTramp 138
|
||||
PhysDevExtTramp 139
|
||||
PhysDevExtTramp 140
|
||||
PhysDevExtTramp 141
|
||||
PhysDevExtTramp 142
|
||||
PhysDevExtTramp 143
|
||||
PhysDevExtTramp 144
|
||||
PhysDevExtTramp 145
|
||||
PhysDevExtTramp 146
|
||||
PhysDevExtTramp 147
|
||||
PhysDevExtTramp 148
|
||||
PhysDevExtTramp 149
|
||||
PhysDevExtTramp 150
|
||||
PhysDevExtTramp 151
|
||||
PhysDevExtTramp 152
|
||||
PhysDevExtTramp 153
|
||||
PhysDevExtTramp 154
|
||||
PhysDevExtTramp 155
|
||||
PhysDevExtTramp 156
|
||||
PhysDevExtTramp 157
|
||||
PhysDevExtTramp 158
|
||||
PhysDevExtTramp 159
|
||||
PhysDevExtTramp 160
|
||||
PhysDevExtTramp 161
|
||||
PhysDevExtTramp 162
|
||||
PhysDevExtTramp 163
|
||||
PhysDevExtTramp 164
|
||||
PhysDevExtTramp 165
|
||||
PhysDevExtTramp 166
|
||||
PhysDevExtTramp 167
|
||||
PhysDevExtTramp 168
|
||||
PhysDevExtTramp 169
|
||||
PhysDevExtTramp 170
|
||||
PhysDevExtTramp 171
|
||||
PhysDevExtTramp 172
|
||||
PhysDevExtTramp 173
|
||||
PhysDevExtTramp 174
|
||||
PhysDevExtTramp 175
|
||||
PhysDevExtTramp 176
|
||||
PhysDevExtTramp 177
|
||||
PhysDevExtTramp 178
|
||||
PhysDevExtTramp 179
|
||||
PhysDevExtTramp 180
|
||||
PhysDevExtTramp 181
|
||||
PhysDevExtTramp 182
|
||||
PhysDevExtTramp 183
|
||||
PhysDevExtTramp 184
|
||||
PhysDevExtTramp 185
|
||||
PhysDevExtTramp 186
|
||||
PhysDevExtTramp 187
|
||||
PhysDevExtTramp 188
|
||||
PhysDevExtTramp 189
|
||||
PhysDevExtTramp 190
|
||||
PhysDevExtTramp 191
|
||||
PhysDevExtTramp 192
|
||||
PhysDevExtTramp 193
|
||||
PhysDevExtTramp 194
|
||||
PhysDevExtTramp 195
|
||||
PhysDevExtTramp 196
|
||||
PhysDevExtTramp 197
|
||||
PhysDevExtTramp 198
|
||||
PhysDevExtTramp 199
|
||||
PhysDevExtTramp 200
|
||||
PhysDevExtTramp 201
|
||||
PhysDevExtTramp 202
|
||||
PhysDevExtTramp 203
|
||||
PhysDevExtTramp 204
|
||||
PhysDevExtTramp 205
|
||||
PhysDevExtTramp 206
|
||||
PhysDevExtTramp 207
|
||||
PhysDevExtTramp 208
|
||||
PhysDevExtTramp 209
|
||||
PhysDevExtTramp 210
|
||||
PhysDevExtTramp 211
|
||||
PhysDevExtTramp 212
|
||||
PhysDevExtTramp 213
|
||||
PhysDevExtTramp 214
|
||||
PhysDevExtTramp 215
|
||||
PhysDevExtTramp 216
|
||||
PhysDevExtTramp 217
|
||||
PhysDevExtTramp 218
|
||||
PhysDevExtTramp 219
|
||||
PhysDevExtTramp 220
|
||||
PhysDevExtTramp 221
|
||||
PhysDevExtTramp 222
|
||||
PhysDevExtTramp 223
|
||||
PhysDevExtTramp 224
|
||||
PhysDevExtTramp 225
|
||||
PhysDevExtTramp 226
|
||||
PhysDevExtTramp 227
|
||||
PhysDevExtTramp 228
|
||||
PhysDevExtTramp 229
|
||||
PhysDevExtTramp 230
|
||||
PhysDevExtTramp 231
|
||||
PhysDevExtTramp 232
|
||||
PhysDevExtTramp 233
|
||||
PhysDevExtTramp 234
|
||||
PhysDevExtTramp 235
|
||||
PhysDevExtTramp 236
|
||||
PhysDevExtTramp 237
|
||||
PhysDevExtTramp 238
|
||||
PhysDevExtTramp 239
|
||||
PhysDevExtTramp 240
|
||||
PhysDevExtTramp 241
|
||||
PhysDevExtTramp 242
|
||||
PhysDevExtTramp 243
|
||||
PhysDevExtTramp 244
|
||||
PhysDevExtTramp 245
|
||||
PhysDevExtTramp 246
|
||||
PhysDevExtTramp 247
|
||||
PhysDevExtTramp 248
|
||||
PhysDevExtTramp 249
|
||||
|
||||
PhysDevExtTermin 0
|
||||
PhysDevExtTermin 1
|
||||
PhysDevExtTermin 2
|
||||
PhysDevExtTermin 3
|
||||
PhysDevExtTermin 4
|
||||
PhysDevExtTermin 5
|
||||
PhysDevExtTermin 6
|
||||
PhysDevExtTermin 7
|
||||
PhysDevExtTermin 8
|
||||
PhysDevExtTermin 9
|
||||
PhysDevExtTermin 10
|
||||
PhysDevExtTermin 11
|
||||
PhysDevExtTermin 12
|
||||
PhysDevExtTermin 13
|
||||
PhysDevExtTermin 14
|
||||
PhysDevExtTermin 15
|
||||
PhysDevExtTermin 16
|
||||
PhysDevExtTermin 17
|
||||
PhysDevExtTermin 18
|
||||
PhysDevExtTermin 19
|
||||
PhysDevExtTermin 20
|
||||
PhysDevExtTermin 21
|
||||
PhysDevExtTermin 22
|
||||
PhysDevExtTermin 23
|
||||
PhysDevExtTermin 24
|
||||
PhysDevExtTermin 25
|
||||
PhysDevExtTermin 26
|
||||
PhysDevExtTermin 27
|
||||
PhysDevExtTermin 28
|
||||
PhysDevExtTermin 29
|
||||
PhysDevExtTermin 30
|
||||
PhysDevExtTermin 31
|
||||
PhysDevExtTermin 32
|
||||
PhysDevExtTermin 33
|
||||
PhysDevExtTermin 34
|
||||
PhysDevExtTermin 35
|
||||
PhysDevExtTermin 36
|
||||
PhysDevExtTermin 37
|
||||
PhysDevExtTermin 38
|
||||
PhysDevExtTermin 39
|
||||
PhysDevExtTermin 40
|
||||
PhysDevExtTermin 41
|
||||
PhysDevExtTermin 42
|
||||
PhysDevExtTermin 43
|
||||
PhysDevExtTermin 44
|
||||
PhysDevExtTermin 45
|
||||
PhysDevExtTermin 46
|
||||
PhysDevExtTermin 47
|
||||
PhysDevExtTermin 48
|
||||
PhysDevExtTermin 49
|
||||
PhysDevExtTermin 50
|
||||
PhysDevExtTermin 51
|
||||
PhysDevExtTermin 52
|
||||
PhysDevExtTermin 53
|
||||
PhysDevExtTermin 54
|
||||
PhysDevExtTermin 55
|
||||
PhysDevExtTermin 56
|
||||
PhysDevExtTermin 57
|
||||
PhysDevExtTermin 58
|
||||
PhysDevExtTermin 59
|
||||
PhysDevExtTermin 60
|
||||
PhysDevExtTermin 61
|
||||
PhysDevExtTermin 62
|
||||
PhysDevExtTermin 63
|
||||
PhysDevExtTermin 64
|
||||
PhysDevExtTermin 65
|
||||
PhysDevExtTermin 66
|
||||
PhysDevExtTermin 67
|
||||
PhysDevExtTermin 68
|
||||
PhysDevExtTermin 69
|
||||
PhysDevExtTermin 70
|
||||
PhysDevExtTermin 71
|
||||
PhysDevExtTermin 72
|
||||
PhysDevExtTermin 73
|
||||
PhysDevExtTermin 74
|
||||
PhysDevExtTermin 75
|
||||
PhysDevExtTermin 76
|
||||
PhysDevExtTermin 77
|
||||
PhysDevExtTermin 78
|
||||
PhysDevExtTermin 79
|
||||
PhysDevExtTermin 80
|
||||
PhysDevExtTermin 81
|
||||
PhysDevExtTermin 82
|
||||
PhysDevExtTermin 83
|
||||
PhysDevExtTermin 84
|
||||
PhysDevExtTermin 85
|
||||
PhysDevExtTermin 86
|
||||
PhysDevExtTermin 87
|
||||
PhysDevExtTermin 88
|
||||
PhysDevExtTermin 89
|
||||
PhysDevExtTermin 90
|
||||
PhysDevExtTermin 91
|
||||
PhysDevExtTermin 92
|
||||
PhysDevExtTermin 93
|
||||
PhysDevExtTermin 94
|
||||
PhysDevExtTermin 95
|
||||
PhysDevExtTermin 96
|
||||
PhysDevExtTermin 97
|
||||
PhysDevExtTermin 98
|
||||
PhysDevExtTermin 99
|
||||
PhysDevExtTermin 100
|
||||
PhysDevExtTermin 101
|
||||
PhysDevExtTermin 102
|
||||
PhysDevExtTermin 103
|
||||
PhysDevExtTermin 104
|
||||
PhysDevExtTermin 105
|
||||
PhysDevExtTermin 106
|
||||
PhysDevExtTermin 107
|
||||
PhysDevExtTermin 108
|
||||
PhysDevExtTermin 109
|
||||
PhysDevExtTermin 110
|
||||
PhysDevExtTermin 111
|
||||
PhysDevExtTermin 112
|
||||
PhysDevExtTermin 113
|
||||
PhysDevExtTermin 114
|
||||
PhysDevExtTermin 115
|
||||
PhysDevExtTermin 116
|
||||
PhysDevExtTermin 117
|
||||
PhysDevExtTermin 118
|
||||
PhysDevExtTermin 119
|
||||
PhysDevExtTermin 120
|
||||
PhysDevExtTermin 121
|
||||
PhysDevExtTermin 122
|
||||
PhysDevExtTermin 123
|
||||
PhysDevExtTermin 124
|
||||
PhysDevExtTermin 125
|
||||
PhysDevExtTermin 126
|
||||
PhysDevExtTermin 127
|
||||
PhysDevExtTermin 128
|
||||
PhysDevExtTermin 129
|
||||
PhysDevExtTermin 130
|
||||
PhysDevExtTermin 131
|
||||
PhysDevExtTermin 132
|
||||
PhysDevExtTermin 133
|
||||
PhysDevExtTermin 134
|
||||
PhysDevExtTermin 135
|
||||
PhysDevExtTermin 136
|
||||
PhysDevExtTermin 137
|
||||
PhysDevExtTermin 138
|
||||
PhysDevExtTermin 139
|
||||
PhysDevExtTermin 140
|
||||
PhysDevExtTermin 141
|
||||
PhysDevExtTermin 142
|
||||
PhysDevExtTermin 143
|
||||
PhysDevExtTermin 144
|
||||
PhysDevExtTermin 145
|
||||
PhysDevExtTermin 146
|
||||
PhysDevExtTermin 147
|
||||
PhysDevExtTermin 148
|
||||
PhysDevExtTermin 149
|
||||
PhysDevExtTermin 150
|
||||
PhysDevExtTermin 151
|
||||
PhysDevExtTermin 152
|
||||
PhysDevExtTermin 153
|
||||
PhysDevExtTermin 154
|
||||
PhysDevExtTermin 155
|
||||
PhysDevExtTermin 156
|
||||
PhysDevExtTermin 157
|
||||
PhysDevExtTermin 158
|
||||
PhysDevExtTermin 159
|
||||
PhysDevExtTermin 160
|
||||
PhysDevExtTermin 161
|
||||
PhysDevExtTermin 162
|
||||
PhysDevExtTermin 163
|
||||
PhysDevExtTermin 164
|
||||
PhysDevExtTermin 165
|
||||
PhysDevExtTermin 166
|
||||
PhysDevExtTermin 167
|
||||
PhysDevExtTermin 168
|
||||
PhysDevExtTermin 169
|
||||
PhysDevExtTermin 170
|
||||
PhysDevExtTermin 171
|
||||
PhysDevExtTermin 172
|
||||
PhysDevExtTermin 173
|
||||
PhysDevExtTermin 174
|
||||
PhysDevExtTermin 175
|
||||
PhysDevExtTermin 176
|
||||
PhysDevExtTermin 177
|
||||
PhysDevExtTermin 178
|
||||
PhysDevExtTermin 179
|
||||
PhysDevExtTermin 180
|
||||
PhysDevExtTermin 181
|
||||
PhysDevExtTermin 182
|
||||
PhysDevExtTermin 183
|
||||
PhysDevExtTermin 184
|
||||
PhysDevExtTermin 185
|
||||
PhysDevExtTermin 186
|
||||
PhysDevExtTermin 187
|
||||
PhysDevExtTermin 188
|
||||
PhysDevExtTermin 189
|
||||
PhysDevExtTermin 190
|
||||
PhysDevExtTermin 191
|
||||
PhysDevExtTermin 192
|
||||
PhysDevExtTermin 193
|
||||
PhysDevExtTermin 194
|
||||
PhysDevExtTermin 195
|
||||
PhysDevExtTermin 196
|
||||
PhysDevExtTermin 197
|
||||
PhysDevExtTermin 198
|
||||
PhysDevExtTermin 199
|
||||
PhysDevExtTermin 200
|
||||
PhysDevExtTermin 201
|
||||
PhysDevExtTermin 202
|
||||
PhysDevExtTermin 203
|
||||
PhysDevExtTermin 204
|
||||
PhysDevExtTermin 205
|
||||
PhysDevExtTermin 206
|
||||
PhysDevExtTermin 207
|
||||
PhysDevExtTermin 208
|
||||
PhysDevExtTermin 209
|
||||
PhysDevExtTermin 210
|
||||
PhysDevExtTermin 211
|
||||
PhysDevExtTermin 212
|
||||
PhysDevExtTermin 213
|
||||
PhysDevExtTermin 214
|
||||
PhysDevExtTermin 215
|
||||
PhysDevExtTermin 216
|
||||
PhysDevExtTermin 217
|
||||
PhysDevExtTermin 218
|
||||
PhysDevExtTermin 219
|
||||
PhysDevExtTermin 220
|
||||
PhysDevExtTermin 221
|
||||
PhysDevExtTermin 222
|
||||
PhysDevExtTermin 223
|
||||
PhysDevExtTermin 224
|
||||
PhysDevExtTermin 225
|
||||
PhysDevExtTermin 226
|
||||
PhysDevExtTermin 227
|
||||
PhysDevExtTermin 228
|
||||
PhysDevExtTermin 229
|
||||
PhysDevExtTermin 230
|
||||
PhysDevExtTermin 231
|
||||
PhysDevExtTermin 232
|
||||
PhysDevExtTermin 233
|
||||
PhysDevExtTermin 234
|
||||
PhysDevExtTermin 235
|
||||
PhysDevExtTermin 236
|
||||
PhysDevExtTermin 237
|
||||
PhysDevExtTermin 238
|
||||
PhysDevExtTermin 239
|
||||
PhysDevExtTermin 240
|
||||
PhysDevExtTermin 241
|
||||
PhysDevExtTermin 242
|
||||
PhysDevExtTermin 243
|
||||
PhysDevExtTermin 244
|
||||
PhysDevExtTermin 245
|
||||
PhysDevExtTermin 246
|
||||
PhysDevExtTermin 247
|
||||
PhysDevExtTermin 248
|
||||
PhysDevExtTermin 249
|
||||
|
||||
DevExtTramp 0
|
||||
DevExtTramp 1
|
||||
DevExtTramp 2
|
||||
DevExtTramp 3
|
||||
DevExtTramp 4
|
||||
DevExtTramp 5
|
||||
DevExtTramp 6
|
||||
DevExtTramp 7
|
||||
DevExtTramp 8
|
||||
DevExtTramp 9
|
||||
DevExtTramp 10
|
||||
DevExtTramp 11
|
||||
DevExtTramp 12
|
||||
DevExtTramp 13
|
||||
DevExtTramp 14
|
||||
DevExtTramp 15
|
||||
DevExtTramp 16
|
||||
DevExtTramp 17
|
||||
DevExtTramp 18
|
||||
DevExtTramp 19
|
||||
DevExtTramp 20
|
||||
DevExtTramp 21
|
||||
DevExtTramp 22
|
||||
DevExtTramp 23
|
||||
DevExtTramp 24
|
||||
DevExtTramp 25
|
||||
DevExtTramp 26
|
||||
DevExtTramp 27
|
||||
DevExtTramp 28
|
||||
DevExtTramp 29
|
||||
DevExtTramp 30
|
||||
DevExtTramp 31
|
||||
DevExtTramp 32
|
||||
DevExtTramp 33
|
||||
DevExtTramp 34
|
||||
DevExtTramp 35
|
||||
DevExtTramp 36
|
||||
DevExtTramp 37
|
||||
DevExtTramp 38
|
||||
DevExtTramp 39
|
||||
DevExtTramp 40
|
||||
DevExtTramp 41
|
||||
DevExtTramp 42
|
||||
DevExtTramp 43
|
||||
DevExtTramp 44
|
||||
DevExtTramp 45
|
||||
DevExtTramp 46
|
||||
DevExtTramp 47
|
||||
DevExtTramp 48
|
||||
DevExtTramp 49
|
||||
DevExtTramp 50
|
||||
DevExtTramp 51
|
||||
DevExtTramp 52
|
||||
DevExtTramp 53
|
||||
DevExtTramp 54
|
||||
DevExtTramp 55
|
||||
DevExtTramp 56
|
||||
DevExtTramp 57
|
||||
DevExtTramp 58
|
||||
DevExtTramp 59
|
||||
DevExtTramp 60
|
||||
DevExtTramp 61
|
||||
DevExtTramp 62
|
||||
DevExtTramp 63
|
||||
DevExtTramp 64
|
||||
DevExtTramp 65
|
||||
DevExtTramp 66
|
||||
DevExtTramp 67
|
||||
DevExtTramp 68
|
||||
DevExtTramp 69
|
||||
DevExtTramp 70
|
||||
DevExtTramp 71
|
||||
DevExtTramp 72
|
||||
DevExtTramp 73
|
||||
DevExtTramp 74
|
||||
DevExtTramp 75
|
||||
DevExtTramp 76
|
||||
DevExtTramp 77
|
||||
DevExtTramp 78
|
||||
DevExtTramp 79
|
||||
DevExtTramp 80
|
||||
DevExtTramp 81
|
||||
DevExtTramp 82
|
||||
DevExtTramp 83
|
||||
DevExtTramp 84
|
||||
DevExtTramp 85
|
||||
DevExtTramp 86
|
||||
DevExtTramp 87
|
||||
DevExtTramp 88
|
||||
DevExtTramp 89
|
||||
DevExtTramp 90
|
||||
DevExtTramp 91
|
||||
DevExtTramp 92
|
||||
DevExtTramp 93
|
||||
DevExtTramp 94
|
||||
DevExtTramp 95
|
||||
DevExtTramp 96
|
||||
DevExtTramp 97
|
||||
DevExtTramp 98
|
||||
DevExtTramp 99
|
||||
DevExtTramp 100
|
||||
DevExtTramp 101
|
||||
DevExtTramp 102
|
||||
DevExtTramp 103
|
||||
DevExtTramp 104
|
||||
DevExtTramp 105
|
||||
DevExtTramp 106
|
||||
DevExtTramp 107
|
||||
DevExtTramp 108
|
||||
DevExtTramp 109
|
||||
DevExtTramp 110
|
||||
DevExtTramp 111
|
||||
DevExtTramp 112
|
||||
DevExtTramp 113
|
||||
DevExtTramp 114
|
||||
DevExtTramp 115
|
||||
DevExtTramp 116
|
||||
DevExtTramp 117
|
||||
DevExtTramp 118
|
||||
DevExtTramp 119
|
||||
DevExtTramp 120
|
||||
DevExtTramp 121
|
||||
DevExtTramp 122
|
||||
DevExtTramp 123
|
||||
DevExtTramp 124
|
||||
DevExtTramp 125
|
||||
DevExtTramp 126
|
||||
DevExtTramp 127
|
||||
DevExtTramp 128
|
||||
DevExtTramp 129
|
||||
DevExtTramp 130
|
||||
DevExtTramp 131
|
||||
DevExtTramp 132
|
||||
DevExtTramp 133
|
||||
DevExtTramp 134
|
||||
DevExtTramp 135
|
||||
DevExtTramp 136
|
||||
DevExtTramp 137
|
||||
DevExtTramp 138
|
||||
DevExtTramp 139
|
||||
DevExtTramp 140
|
||||
DevExtTramp 141
|
||||
DevExtTramp 142
|
||||
DevExtTramp 143
|
||||
DevExtTramp 144
|
||||
DevExtTramp 145
|
||||
DevExtTramp 146
|
||||
DevExtTramp 147
|
||||
DevExtTramp 148
|
||||
DevExtTramp 149
|
||||
DevExtTramp 150
|
||||
DevExtTramp 151
|
||||
DevExtTramp 152
|
||||
DevExtTramp 153
|
||||
DevExtTramp 154
|
||||
DevExtTramp 155
|
||||
DevExtTramp 156
|
||||
DevExtTramp 157
|
||||
DevExtTramp 158
|
||||
DevExtTramp 159
|
||||
DevExtTramp 160
|
||||
DevExtTramp 161
|
||||
DevExtTramp 162
|
||||
DevExtTramp 163
|
||||
DevExtTramp 164
|
||||
DevExtTramp 165
|
||||
DevExtTramp 166
|
||||
DevExtTramp 167
|
||||
DevExtTramp 168
|
||||
DevExtTramp 169
|
||||
DevExtTramp 170
|
||||
DevExtTramp 171
|
||||
DevExtTramp 172
|
||||
DevExtTramp 173
|
||||
DevExtTramp 174
|
||||
DevExtTramp 175
|
||||
DevExtTramp 176
|
||||
DevExtTramp 177
|
||||
DevExtTramp 178
|
||||
DevExtTramp 179
|
||||
DevExtTramp 180
|
||||
DevExtTramp 181
|
||||
DevExtTramp 182
|
||||
DevExtTramp 183
|
||||
DevExtTramp 184
|
||||
DevExtTramp 185
|
||||
DevExtTramp 186
|
||||
DevExtTramp 187
|
||||
DevExtTramp 188
|
||||
DevExtTramp 189
|
||||
DevExtTramp 190
|
||||
DevExtTramp 191
|
||||
DevExtTramp 192
|
||||
DevExtTramp 193
|
||||
DevExtTramp 194
|
||||
DevExtTramp 195
|
||||
DevExtTramp 196
|
||||
DevExtTramp 197
|
||||
DevExtTramp 198
|
||||
DevExtTramp 199
|
||||
DevExtTramp 200
|
||||
DevExtTramp 201
|
||||
DevExtTramp 202
|
||||
DevExtTramp 203
|
||||
DevExtTramp 204
|
||||
DevExtTramp 205
|
||||
DevExtTramp 206
|
||||
DevExtTramp 207
|
||||
DevExtTramp 208
|
||||
DevExtTramp 209
|
||||
DevExtTramp 210
|
||||
DevExtTramp 211
|
||||
DevExtTramp 212
|
||||
DevExtTramp 213
|
||||
DevExtTramp 214
|
||||
DevExtTramp 215
|
||||
DevExtTramp 216
|
||||
DevExtTramp 217
|
||||
DevExtTramp 218
|
||||
DevExtTramp 219
|
||||
DevExtTramp 220
|
||||
DevExtTramp 221
|
||||
DevExtTramp 222
|
||||
DevExtTramp 223
|
||||
DevExtTramp 224
|
||||
DevExtTramp 225
|
||||
DevExtTramp 226
|
||||
DevExtTramp 227
|
||||
DevExtTramp 228
|
||||
DevExtTramp 229
|
||||
DevExtTramp 230
|
||||
DevExtTramp 231
|
||||
DevExtTramp 232
|
||||
DevExtTramp 233
|
||||
DevExtTramp 234
|
||||
DevExtTramp 235
|
||||
DevExtTramp 236
|
||||
DevExtTramp 237
|
||||
DevExtTramp 238
|
||||
DevExtTramp 239
|
||||
DevExtTramp 240
|
||||
DevExtTramp 241
|
||||
DevExtTramp 242
|
||||
DevExtTramp 243
|
||||
DevExtTramp 244
|
||||
DevExtTramp 245
|
||||
DevExtTramp 246
|
||||
DevExtTramp 247
|
||||
DevExtTramp 248
|
||||
DevExtTramp 249
|
||||
883
thirdparty/vulkan/loader/unknown_ext_chain_masm.asm
vendored
Executable file
883
thirdparty/vulkan/loader/unknown_ext_chain_masm.asm
vendored
Executable file
@ -0,0 +1,883 @@
|
||||
;
|
||||
; Copyright (c) 2017 The Khronos Group Inc.
|
||||
; Copyright (c) 2017 Valve Corporation
|
||||
; Copyright (c) 2017 LunarG, Inc.
|
||||
;
|
||||
; Licensed under the Apache License, Version 2.0 (the "License");
|
||||
; you may not use this file except in compliance with the License.
|
||||
; You may obtain a copy of the License at
|
||||
;
|
||||
; http://www.apache.org/licenses/LICENSE-2.0
|
||||
;
|
||||
; Unless required by applicable law or agreed to in writing, software
|
||||
; distributed under the License is distributed on an "AS IS" BASIS,
|
||||
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
; See the License for the specific language governing permissions and
|
||||
; limitations under the License.
|
||||
;
|
||||
; Author: Lenny Komow <lenny@lunarg.com>
|
||||
;
|
||||
|
||||
; This code is used to pass on device (including physical device) extensions through the call chain. It must do this without
|
||||
; creating a stack frame, because the actual parameters of the call are not known. Since the first parameter is known to be a
|
||||
; VkPhysicalDevice or a dispatchable object it can unwrap the object, possibly overwriting the wrapped physical device, and then
|
||||
; jump to the next function in the call chain
|
||||
|
||||
; Codegen defines a number of values, chiefly offsets of members within structs and sizes of data types within gen_defines.asm.
|
||||
; Struct member offsets are defined in the format "XX_OFFSET_YY" where XX indicates the member within the struct and YY indicates
|
||||
; the struct type that it is a member of. Data type sizes are defined in the format "XX_SIZE" where XX indicates the data type.
|
||||
INCLUDE gen_defines.asm
|
||||
|
||||
; 64-bit values and macro
|
||||
IFDEF rax
|
||||
|
||||
PhysDevExtTramp macro num:req
|
||||
public vkPhysDevExtTramp&num&
|
||||
vkPhysDevExtTramp&num&:
|
||||
mov rax, qword ptr [rcx] ; Dereference the wrapped VkPhysicalDevice to get the dispatch table in rax
|
||||
mov rcx, qword ptr [rcx + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] ; Load the unwrapped VkPhysicalDevice into rcx
|
||||
jmp qword ptr [rax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * num))] ; Jump to the next function in the chain, preserving the args in other registers
|
||||
endm
|
||||
|
||||
PhysDevExtTermin macro num
|
||||
public vkPhysDevExtTermin&num&
|
||||
vkPhysDevExtTermin&num&:
|
||||
mov rax, qword ptr [rcx + ICD_TERM_OFFSET_PHYS_DEV_TERM] ; Store the loader_icd_term* in rax
|
||||
cmp qword ptr [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))], 0 ; Check if the next function in the chain is NULL
|
||||
je terminError&num& ; Go to the error section if it is NULL
|
||||
mov rcx, qword ptr [rcx + PHYS_DEV_OFFSET_PHYS_DEV_TERM] ; Load the unwrapped VkPhysicalDevice into the first arg
|
||||
jmp qword ptr [rax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))] ; Jump to the next function in the chain
|
||||
terminError&num&:
|
||||
sub rsp, 56 ; Create the stack frame
|
||||
mov rcx, qword ptr [rax + INSTANCE_OFFSET_ICD_TERM] ; Load the loader_instance into rcx (first arg)
|
||||
mov rax, qword ptr [rcx + (HASH_OFFSET_INSTANCE + (HASH_SIZE * num) + FUNC_NAME_OFFSET_HASH)] ; Load the func name into rax
|
||||
lea r9, termin_error_string ; Load the error string into r9 (fourth arg)
|
||||
xor r8d, r8d ; Set r8 to zero (third arg)
|
||||
mov qword ptr [rsp + 32], rax ; Move the func name onto the stack (fifth arg)
|
||||
lea edx, [r8 + VK_DEBUG_REPORT_ERROR_BIT_EXT] ; Write the error logging bit to rdx (second arg)
|
||||
call loader_log ; Log the error message before we crash
|
||||
add rsp, 56 ; Clean up the stack frame
|
||||
mov rax, 0
|
||||
jmp rax ; Crash intentionally by jumping to address zero
|
||||
endm
|
||||
|
||||
DevExtTramp macro num
|
||||
public vkdev_ext&num&
|
||||
vkdev_ext&num&:
|
||||
mov rax, qword ptr [rcx] ; Dereference the handle to get the dispatch table
|
||||
jmp qword ptr [rax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * num))] ; Jump to the appropriate call chain
|
||||
endm
|
||||
|
||||
; 32-bit values and macro
|
||||
ELSE
|
||||
|
||||
PhysDevExtTramp macro num
|
||||
public _vkPhysDevExtTramp&num&@4
|
||||
_vkPhysDevExtTramp&num&@4:
|
||||
mov eax, dword ptr [esp + 4] ; Load the wrapped VkPhysicalDevice into eax
|
||||
mov ecx, [eax + PHYS_DEV_OFFSET_PHYS_DEV_TRAMP] ; Load the unwrapped VkPhysicalDevice into ecx
|
||||
mov [esp + 4], ecx ; Overwrite the wrapped VkPhysicalDevice with the unwrapped one (on the stack)
|
||||
mov eax, [eax] ; Dereference the wrapped VkPhysicalDevice to get the dispatch table in eax
|
||||
jmp dword ptr [eax + (PHYS_DEV_OFFSET_INST_DISPATCH + (PTR_SIZE * num))] ; Jump to the next function in the chain, preserving the args on the stack
|
||||
endm
|
||||
|
||||
PhysDevExtTermin macro num
|
||||
public _vkPhysDevExtTermin&num&@4
|
||||
_vkPhysDevExtTermin&num&@4:
|
||||
mov ecx, dword ptr [esp + 4] ; Move the wrapped VkPhysicalDevice into ecx
|
||||
mov eax, dword ptr [ecx + ICD_TERM_OFFSET_PHYS_DEV_TERM] ; Store the loader_icd_term* in eax
|
||||
cmp dword ptr [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))], 0 ; Check if the next function in the chain is NULL
|
||||
je terminError&num& ; Go to the error section if it is NULL
|
||||
mov ecx, dword ptr [ecx + PHYS_DEV_OFFSET_PHYS_DEV_TERM] ; Unwrap the VkPhysicalDevice in ecx
|
||||
mov dword ptr [esp + 4], ecx ; Copy the unwrapped VkPhysicalDevice into the first arg
|
||||
jmp dword ptr [eax + (DISPATCH_OFFSET_ICD_TERM + (PTR_SIZE * num))] ; Jump to the next function in the chain
|
||||
terminError&num&:
|
||||
mov eax, dword ptr [eax + INSTANCE_OFFSET_ICD_TERM] ; Load the loader_instance into eax
|
||||
push dword ptr [eax + (HASH_OFFSET_INSTANCE + (HASH_SIZE * num) + FUNC_NAME_OFFSET_HASH)] ; Push the func name (fifth arg)
|
||||
push offset termin_error_string ; Push the error string (fourth arg)
|
||||
push 0 ; Push zero (third arg)
|
||||
push VK_DEBUG_REPORT_ERROR_BIT_EXT ; Push the error logging bit (second arg)
|
||||
push eax ; Push the loader_instance (first arg)
|
||||
call _loader_log ; Log the error message before we crash
|
||||
add esp, 20 ; Clean up the args
|
||||
mov eax, 0
|
||||
jmp eax ; Crash intentionally by jumping to address zero
|
||||
endm
|
||||
|
||||
DevExtTramp macro num
|
||||
public _vkdev_ext&num&@4
|
||||
_vkdev_ext&num&@4:
|
||||
mov eax, dword ptr [esp + 4] ; Dereference the handle to get the dispatch table
|
||||
jmp dword ptr [eax + (EXT_OFFSET_DEVICE_DISPATCH + (PTR_SIZE * num))] ; Jump to the appropriate call chain
|
||||
endm
|
||||
|
||||
; This is also needed for 32-bit only
|
||||
.model flat
|
||||
|
||||
ENDIF
|
||||
|
||||
.const
|
||||
termin_error_string db 'Extension %s not supported for this physical device', 0
|
||||
|
||||
.code
|
||||
|
||||
IFDEF rax
|
||||
extrn loader_log:near
|
||||
ELSE
|
||||
extrn _loader_log:near
|
||||
ENDIF
|
||||
|
||||
PhysDevExtTramp 0
|
||||
PhysDevExtTramp 1
|
||||
PhysDevExtTramp 2
|
||||
PhysDevExtTramp 3
|
||||
PhysDevExtTramp 4
|
||||
PhysDevExtTramp 5
|
||||
PhysDevExtTramp 6
|
||||
PhysDevExtTramp 7
|
||||
PhysDevExtTramp 8
|
||||
PhysDevExtTramp 9
|
||||
PhysDevExtTramp 10
|
||||
PhysDevExtTramp 11
|
||||
PhysDevExtTramp 12
|
||||
PhysDevExtTramp 13
|
||||
PhysDevExtTramp 14
|
||||
PhysDevExtTramp 15
|
||||
PhysDevExtTramp 16
|
||||
PhysDevExtTramp 17
|
||||
PhysDevExtTramp 18
|
||||
PhysDevExtTramp 19
|
||||
PhysDevExtTramp 20
|
||||
PhysDevExtTramp 21
|
||||
PhysDevExtTramp 22
|
||||
PhysDevExtTramp 23
|
||||
PhysDevExtTramp 24
|
||||
PhysDevExtTramp 25
|
||||
PhysDevExtTramp 26
|
||||
PhysDevExtTramp 27
|
||||
PhysDevExtTramp 28
|
||||
PhysDevExtTramp 29
|
||||
PhysDevExtTramp 30
|
||||
PhysDevExtTramp 31
|
||||
PhysDevExtTramp 32
|
||||
PhysDevExtTramp 33
|
||||
PhysDevExtTramp 34
|
||||
PhysDevExtTramp 35
|
||||
PhysDevExtTramp 36
|
||||
PhysDevExtTramp 37
|
||||
PhysDevExtTramp 38
|
||||
PhysDevExtTramp 39
|
||||
PhysDevExtTramp 40
|
||||
PhysDevExtTramp 41
|
||||
PhysDevExtTramp 42
|
||||
PhysDevExtTramp 43
|
||||
PhysDevExtTramp 44
|
||||
PhysDevExtTramp 45
|
||||
PhysDevExtTramp 46
|
||||
PhysDevExtTramp 47
|
||||
PhysDevExtTramp 48
|
||||
PhysDevExtTramp 49
|
||||
PhysDevExtTramp 50
|
||||
PhysDevExtTramp 51
|
||||
PhysDevExtTramp 52
|
||||
PhysDevExtTramp 53
|
||||
PhysDevExtTramp 54
|
||||
PhysDevExtTramp 55
|
||||
PhysDevExtTramp 56
|
||||
PhysDevExtTramp 57
|
||||
PhysDevExtTramp 58
|
||||
PhysDevExtTramp 59
|
||||
PhysDevExtTramp 60
|
||||
PhysDevExtTramp 61
|
||||
PhysDevExtTramp 62
|
||||
PhysDevExtTramp 63
|
||||
PhysDevExtTramp 64
|
||||
PhysDevExtTramp 65
|
||||
PhysDevExtTramp 66
|
||||
PhysDevExtTramp 67
|
||||
PhysDevExtTramp 68
|
||||
PhysDevExtTramp 69
|
||||
PhysDevExtTramp 70
|
||||
PhysDevExtTramp 71
|
||||
PhysDevExtTramp 72
|
||||
PhysDevExtTramp 73
|
||||
PhysDevExtTramp 74
|
||||
PhysDevExtTramp 75
|
||||
PhysDevExtTramp 76
|
||||
PhysDevExtTramp 77
|
||||
PhysDevExtTramp 78
|
||||
PhysDevExtTramp 79
|
||||
PhysDevExtTramp 80
|
||||
PhysDevExtTramp 81
|
||||
PhysDevExtTramp 82
|
||||
PhysDevExtTramp 83
|
||||
PhysDevExtTramp 84
|
||||
PhysDevExtTramp 85
|
||||
PhysDevExtTramp 86
|
||||
PhysDevExtTramp 87
|
||||
PhysDevExtTramp 88
|
||||
PhysDevExtTramp 89
|
||||
PhysDevExtTramp 90
|
||||
PhysDevExtTramp 91
|
||||
PhysDevExtTramp 92
|
||||
PhysDevExtTramp 93
|
||||
PhysDevExtTramp 94
|
||||
PhysDevExtTramp 95
|
||||
PhysDevExtTramp 96
|
||||
PhysDevExtTramp 97
|
||||
PhysDevExtTramp 98
|
||||
PhysDevExtTramp 99
|
||||
PhysDevExtTramp 100
|
||||
PhysDevExtTramp 101
|
||||
PhysDevExtTramp 102
|
||||
PhysDevExtTramp 103
|
||||
PhysDevExtTramp 104
|
||||
PhysDevExtTramp 105
|
||||
PhysDevExtTramp 106
|
||||
PhysDevExtTramp 107
|
||||
PhysDevExtTramp 108
|
||||
PhysDevExtTramp 109
|
||||
PhysDevExtTramp 110
|
||||
PhysDevExtTramp 111
|
||||
PhysDevExtTramp 112
|
||||
PhysDevExtTramp 113
|
||||
PhysDevExtTramp 114
|
||||
PhysDevExtTramp 115
|
||||
PhysDevExtTramp 116
|
||||
PhysDevExtTramp 117
|
||||
PhysDevExtTramp 118
|
||||
PhysDevExtTramp 119
|
||||
PhysDevExtTramp 120
|
||||
PhysDevExtTramp 121
|
||||
PhysDevExtTramp 122
|
||||
PhysDevExtTramp 123
|
||||
PhysDevExtTramp 124
|
||||
PhysDevExtTramp 125
|
||||
PhysDevExtTramp 126
|
||||
PhysDevExtTramp 127
|
||||
PhysDevExtTramp 128
|
||||
PhysDevExtTramp 129
|
||||
PhysDevExtTramp 130
|
||||
PhysDevExtTramp 131
|
||||
PhysDevExtTramp 132
|
||||
PhysDevExtTramp 133
|
||||
PhysDevExtTramp 134
|
||||
PhysDevExtTramp 135
|
||||
PhysDevExtTramp 136
|
||||
PhysDevExtTramp 137
|
||||
PhysDevExtTramp 138
|
||||
PhysDevExtTramp 139
|
||||
PhysDevExtTramp 140
|
||||
PhysDevExtTramp 141
|
||||
PhysDevExtTramp 142
|
||||
PhysDevExtTramp 143
|
||||
PhysDevExtTramp 144
|
||||
PhysDevExtTramp 145
|
||||
PhysDevExtTramp 146
|
||||
PhysDevExtTramp 147
|
||||
PhysDevExtTramp 148
|
||||
PhysDevExtTramp 149
|
||||
PhysDevExtTramp 150
|
||||
PhysDevExtTramp 151
|
||||
PhysDevExtTramp 152
|
||||
PhysDevExtTramp 153
|
||||
PhysDevExtTramp 154
|
||||
PhysDevExtTramp 155
|
||||
PhysDevExtTramp 156
|
||||
PhysDevExtTramp 157
|
||||
PhysDevExtTramp 158
|
||||
PhysDevExtTramp 159
|
||||
PhysDevExtTramp 160
|
||||
PhysDevExtTramp 161
|
||||
PhysDevExtTramp 162
|
||||
PhysDevExtTramp 163
|
||||
PhysDevExtTramp 164
|
||||
PhysDevExtTramp 165
|
||||
PhysDevExtTramp 166
|
||||
PhysDevExtTramp 167
|
||||
PhysDevExtTramp 168
|
||||
PhysDevExtTramp 169
|
||||
PhysDevExtTramp 170
|
||||
PhysDevExtTramp 171
|
||||
PhysDevExtTramp 172
|
||||
PhysDevExtTramp 173
|
||||
PhysDevExtTramp 174
|
||||
PhysDevExtTramp 175
|
||||
PhysDevExtTramp 176
|
||||
PhysDevExtTramp 177
|
||||
PhysDevExtTramp 178
|
||||
PhysDevExtTramp 179
|
||||
PhysDevExtTramp 180
|
||||
PhysDevExtTramp 181
|
||||
PhysDevExtTramp 182
|
||||
PhysDevExtTramp 183
|
||||
PhysDevExtTramp 184
|
||||
PhysDevExtTramp 185
|
||||
PhysDevExtTramp 186
|
||||
PhysDevExtTramp 187
|
||||
PhysDevExtTramp 188
|
||||
PhysDevExtTramp 189
|
||||
PhysDevExtTramp 190
|
||||
PhysDevExtTramp 191
|
||||
PhysDevExtTramp 192
|
||||
PhysDevExtTramp 193
|
||||
PhysDevExtTramp 194
|
||||
PhysDevExtTramp 195
|
||||
PhysDevExtTramp 196
|
||||
PhysDevExtTramp 197
|
||||
PhysDevExtTramp 198
|
||||
PhysDevExtTramp 199
|
||||
PhysDevExtTramp 200
|
||||
PhysDevExtTramp 201
|
||||
PhysDevExtTramp 202
|
||||
PhysDevExtTramp 203
|
||||
PhysDevExtTramp 204
|
||||
PhysDevExtTramp 205
|
||||
PhysDevExtTramp 206
|
||||
PhysDevExtTramp 207
|
||||
PhysDevExtTramp 208
|
||||
PhysDevExtTramp 209
|
||||
PhysDevExtTramp 210
|
||||
PhysDevExtTramp 211
|
||||
PhysDevExtTramp 212
|
||||
PhysDevExtTramp 213
|
||||
PhysDevExtTramp 214
|
||||
PhysDevExtTramp 215
|
||||
PhysDevExtTramp 216
|
||||
PhysDevExtTramp 217
|
||||
PhysDevExtTramp 218
|
||||
PhysDevExtTramp 219
|
||||
PhysDevExtTramp 220
|
||||
PhysDevExtTramp 221
|
||||
PhysDevExtTramp 222
|
||||
PhysDevExtTramp 223
|
||||
PhysDevExtTramp 224
|
||||
PhysDevExtTramp 225
|
||||
PhysDevExtTramp 226
|
||||
PhysDevExtTramp 227
|
||||
PhysDevExtTramp 228
|
||||
PhysDevExtTramp 229
|
||||
PhysDevExtTramp 230
|
||||
PhysDevExtTramp 231
|
||||
PhysDevExtTramp 232
|
||||
PhysDevExtTramp 233
|
||||
PhysDevExtTramp 234
|
||||
PhysDevExtTramp 235
|
||||
PhysDevExtTramp 236
|
||||
PhysDevExtTramp 237
|
||||
PhysDevExtTramp 238
|
||||
PhysDevExtTramp 239
|
||||
PhysDevExtTramp 240
|
||||
PhysDevExtTramp 241
|
||||
PhysDevExtTramp 242
|
||||
PhysDevExtTramp 243
|
||||
PhysDevExtTramp 244
|
||||
PhysDevExtTramp 245
|
||||
PhysDevExtTramp 246
|
||||
PhysDevExtTramp 247
|
||||
PhysDevExtTramp 248
|
||||
PhysDevExtTramp 249
|
||||
|
||||
PhysDevExtTermin 0
|
||||
PhysDevExtTermin 1
|
||||
PhysDevExtTermin 2
|
||||
PhysDevExtTermin 3
|
||||
PhysDevExtTermin 4
|
||||
PhysDevExtTermin 5
|
||||
PhysDevExtTermin 6
|
||||
PhysDevExtTermin 7
|
||||
PhysDevExtTermin 8
|
||||
PhysDevExtTermin 9
|
||||
PhysDevExtTermin 10
|
||||
PhysDevExtTermin 11
|
||||
PhysDevExtTermin 12
|
||||
PhysDevExtTermin 13
|
||||
PhysDevExtTermin 14
|
||||
PhysDevExtTermin 15
|
||||
PhysDevExtTermin 16
|
||||
PhysDevExtTermin 17
|
||||
PhysDevExtTermin 18
|
||||
PhysDevExtTermin 19
|
||||
PhysDevExtTermin 20
|
||||
PhysDevExtTermin 21
|
||||
PhysDevExtTermin 22
|
||||
PhysDevExtTermin 23
|
||||
PhysDevExtTermin 24
|
||||
PhysDevExtTermin 25
|
||||
PhysDevExtTermin 26
|
||||
PhysDevExtTermin 27
|
||||
PhysDevExtTermin 28
|
||||
PhysDevExtTermin 29
|
||||
PhysDevExtTermin 30
|
||||
PhysDevExtTermin 31
|
||||
PhysDevExtTermin 32
|
||||
PhysDevExtTermin 33
|
||||
PhysDevExtTermin 34
|
||||
PhysDevExtTermin 35
|
||||
PhysDevExtTermin 36
|
||||
PhysDevExtTermin 37
|
||||
PhysDevExtTermin 38
|
||||
PhysDevExtTermin 39
|
||||
PhysDevExtTermin 40
|
||||
PhysDevExtTermin 41
|
||||
PhysDevExtTermin 42
|
||||
PhysDevExtTermin 43
|
||||
PhysDevExtTermin 44
|
||||
PhysDevExtTermin 45
|
||||
PhysDevExtTermin 46
|
||||
PhysDevExtTermin 47
|
||||
PhysDevExtTermin 48
|
||||
PhysDevExtTermin 49
|
||||
PhysDevExtTermin 50
|
||||
PhysDevExtTermin 51
|
||||
PhysDevExtTermin 52
|
||||
PhysDevExtTermin 53
|
||||
PhysDevExtTermin 54
|
||||
PhysDevExtTermin 55
|
||||
PhysDevExtTermin 56
|
||||
PhysDevExtTermin 57
|
||||
PhysDevExtTermin 58
|
||||
PhysDevExtTermin 59
|
||||
PhysDevExtTermin 60
|
||||
PhysDevExtTermin 61
|
||||
PhysDevExtTermin 62
|
||||
PhysDevExtTermin 63
|
||||
PhysDevExtTermin 64
|
||||
PhysDevExtTermin 65
|
||||
PhysDevExtTermin 66
|
||||
PhysDevExtTermin 67
|
||||
PhysDevExtTermin 68
|
||||
PhysDevExtTermin 69
|
||||
PhysDevExtTermin 70
|
||||
PhysDevExtTermin 71
|
||||
PhysDevExtTermin 72
|
||||
PhysDevExtTermin 73
|
||||
PhysDevExtTermin 74
|
||||
PhysDevExtTermin 75
|
||||
PhysDevExtTermin 76
|
||||
PhysDevExtTermin 77
|
||||
PhysDevExtTermin 78
|
||||
PhysDevExtTermin 79
|
||||
PhysDevExtTermin 80
|
||||
PhysDevExtTermin 81
|
||||
PhysDevExtTermin 82
|
||||
PhysDevExtTermin 83
|
||||
PhysDevExtTermin 84
|
||||
PhysDevExtTermin 85
|
||||
PhysDevExtTermin 86
|
||||
PhysDevExtTermin 87
|
||||
PhysDevExtTermin 88
|
||||
PhysDevExtTermin 89
|
||||
PhysDevExtTermin 90
|
||||
PhysDevExtTermin 91
|
||||
PhysDevExtTermin 92
|
||||
PhysDevExtTermin 93
|
||||
PhysDevExtTermin 94
|
||||
PhysDevExtTermin 95
|
||||
PhysDevExtTermin 96
|
||||
PhysDevExtTermin 97
|
||||
PhysDevExtTermin 98
|
||||
PhysDevExtTermin 99
|
||||
PhysDevExtTermin 100
|
||||
PhysDevExtTermin 101
|
||||
PhysDevExtTermin 102
|
||||
PhysDevExtTermin 103
|
||||
PhysDevExtTermin 104
|
||||
PhysDevExtTermin 105
|
||||
PhysDevExtTermin 106
|
||||
PhysDevExtTermin 107
|
||||
PhysDevExtTermin 108
|
||||
PhysDevExtTermin 109
|
||||
PhysDevExtTermin 110
|
||||
PhysDevExtTermin 111
|
||||
PhysDevExtTermin 112
|
||||
PhysDevExtTermin 113
|
||||
PhysDevExtTermin 114
|
||||
PhysDevExtTermin 115
|
||||
PhysDevExtTermin 116
|
||||
PhysDevExtTermin 117
|
||||
PhysDevExtTermin 118
|
||||
PhysDevExtTermin 119
|
||||
PhysDevExtTermin 120
|
||||
PhysDevExtTermin 121
|
||||
PhysDevExtTermin 122
|
||||
PhysDevExtTermin 123
|
||||
PhysDevExtTermin 124
|
||||
PhysDevExtTermin 125
|
||||
PhysDevExtTermin 126
|
||||
PhysDevExtTermin 127
|
||||
PhysDevExtTermin 128
|
||||
PhysDevExtTermin 129
|
||||
PhysDevExtTermin 130
|
||||
PhysDevExtTermin 131
|
||||
PhysDevExtTermin 132
|
||||
PhysDevExtTermin 133
|
||||
PhysDevExtTermin 134
|
||||
PhysDevExtTermin 135
|
||||
PhysDevExtTermin 136
|
||||
PhysDevExtTermin 137
|
||||
PhysDevExtTermin 138
|
||||
PhysDevExtTermin 139
|
||||
PhysDevExtTermin 140
|
||||
PhysDevExtTermin 141
|
||||
PhysDevExtTermin 142
|
||||
PhysDevExtTermin 143
|
||||
PhysDevExtTermin 144
|
||||
PhysDevExtTermin 145
|
||||
PhysDevExtTermin 146
|
||||
PhysDevExtTermin 147
|
||||
PhysDevExtTermin 148
|
||||
PhysDevExtTermin 149
|
||||
PhysDevExtTermin 150
|
||||
PhysDevExtTermin 151
|
||||
PhysDevExtTermin 152
|
||||
PhysDevExtTermin 153
|
||||
PhysDevExtTermin 154
|
||||
PhysDevExtTermin 155
|
||||
PhysDevExtTermin 156
|
||||
PhysDevExtTermin 157
|
||||
PhysDevExtTermin 158
|
||||
PhysDevExtTermin 159
|
||||
PhysDevExtTermin 160
|
||||
PhysDevExtTermin 161
|
||||
PhysDevExtTermin 162
|
||||
PhysDevExtTermin 163
|
||||
PhysDevExtTermin 164
|
||||
PhysDevExtTermin 165
|
||||
PhysDevExtTermin 166
|
||||
PhysDevExtTermin 167
|
||||
PhysDevExtTermin 168
|
||||
PhysDevExtTermin 169
|
||||
PhysDevExtTermin 170
|
||||
PhysDevExtTermin 171
|
||||
PhysDevExtTermin 172
|
||||
PhysDevExtTermin 173
|
||||
PhysDevExtTermin 174
|
||||
PhysDevExtTermin 175
|
||||
PhysDevExtTermin 176
|
||||
PhysDevExtTermin 177
|
||||
PhysDevExtTermin 178
|
||||
PhysDevExtTermin 179
|
||||
PhysDevExtTermin 180
|
||||
PhysDevExtTermin 181
|
||||
PhysDevExtTermin 182
|
||||
PhysDevExtTermin 183
|
||||
PhysDevExtTermin 184
|
||||
PhysDevExtTermin 185
|
||||
PhysDevExtTermin 186
|
||||
PhysDevExtTermin 187
|
||||
PhysDevExtTermin 188
|
||||
PhysDevExtTermin 189
|
||||
PhysDevExtTermin 190
|
||||
PhysDevExtTermin 191
|
||||
PhysDevExtTermin 192
|
||||
PhysDevExtTermin 193
|
||||
PhysDevExtTermin 194
|
||||
PhysDevExtTermin 195
|
||||
PhysDevExtTermin 196
|
||||
PhysDevExtTermin 197
|
||||
PhysDevExtTermin 198
|
||||
PhysDevExtTermin 199
|
||||
PhysDevExtTermin 200
|
||||
PhysDevExtTermin 201
|
||||
PhysDevExtTermin 202
|
||||
PhysDevExtTermin 203
|
||||
PhysDevExtTermin 204
|
||||
PhysDevExtTermin 205
|
||||
PhysDevExtTermin 206
|
||||
PhysDevExtTermin 207
|
||||
PhysDevExtTermin 208
|
||||
PhysDevExtTermin 209
|
||||
PhysDevExtTermin 210
|
||||
PhysDevExtTermin 211
|
||||
PhysDevExtTermin 212
|
||||
PhysDevExtTermin 213
|
||||
PhysDevExtTermin 214
|
||||
PhysDevExtTermin 215
|
||||
PhysDevExtTermin 216
|
||||
PhysDevExtTermin 217
|
||||
PhysDevExtTermin 218
|
||||
PhysDevExtTermin 219
|
||||
PhysDevExtTermin 220
|
||||
PhysDevExtTermin 221
|
||||
PhysDevExtTermin 222
|
||||
PhysDevExtTermin 223
|
||||
PhysDevExtTermin 224
|
||||
PhysDevExtTermin 225
|
||||
PhysDevExtTermin 226
|
||||
PhysDevExtTermin 227
|
||||
PhysDevExtTermin 228
|
||||
PhysDevExtTermin 229
|
||||
PhysDevExtTermin 230
|
||||
PhysDevExtTermin 231
|
||||
PhysDevExtTermin 232
|
||||
PhysDevExtTermin 233
|
||||
PhysDevExtTermin 234
|
||||
PhysDevExtTermin 235
|
||||
PhysDevExtTermin 236
|
||||
PhysDevExtTermin 237
|
||||
PhysDevExtTermin 238
|
||||
PhysDevExtTermin 239
|
||||
PhysDevExtTermin 240
|
||||
PhysDevExtTermin 241
|
||||
PhysDevExtTermin 242
|
||||
PhysDevExtTermin 243
|
||||
PhysDevExtTermin 244
|
||||
PhysDevExtTermin 245
|
||||
PhysDevExtTermin 246
|
||||
PhysDevExtTermin 247
|
||||
PhysDevExtTermin 248
|
||||
PhysDevExtTermin 249
|
||||
|
||||
DevExtTramp 0
|
||||
DevExtTramp 1
|
||||
DevExtTramp 2
|
||||
DevExtTramp 3
|
||||
DevExtTramp 4
|
||||
DevExtTramp 5
|
||||
DevExtTramp 6
|
||||
DevExtTramp 7
|
||||
DevExtTramp 8
|
||||
DevExtTramp 9
|
||||
DevExtTramp 10
|
||||
DevExtTramp 11
|
||||
DevExtTramp 12
|
||||
DevExtTramp 13
|
||||
DevExtTramp 14
|
||||
DevExtTramp 15
|
||||
DevExtTramp 16
|
||||
DevExtTramp 17
|
||||
DevExtTramp 18
|
||||
DevExtTramp 19
|
||||
DevExtTramp 20
|
||||
DevExtTramp 21
|
||||
DevExtTramp 22
|
||||
DevExtTramp 23
|
||||
DevExtTramp 24
|
||||
DevExtTramp 25
|
||||
DevExtTramp 26
|
||||
DevExtTramp 27
|
||||
DevExtTramp 28
|
||||
DevExtTramp 29
|
||||
DevExtTramp 30
|
||||
DevExtTramp 31
|
||||
DevExtTramp 32
|
||||
DevExtTramp 33
|
||||
DevExtTramp 34
|
||||
DevExtTramp 35
|
||||
DevExtTramp 36
|
||||
DevExtTramp 37
|
||||
DevExtTramp 38
|
||||
DevExtTramp 39
|
||||
DevExtTramp 40
|
||||
DevExtTramp 41
|
||||
DevExtTramp 42
|
||||
DevExtTramp 43
|
||||
DevExtTramp 44
|
||||
DevExtTramp 45
|
||||
DevExtTramp 46
|
||||
DevExtTramp 47
|
||||
DevExtTramp 48
|
||||
DevExtTramp 49
|
||||
DevExtTramp 50
|
||||
DevExtTramp 51
|
||||
DevExtTramp 52
|
||||
DevExtTramp 53
|
||||
DevExtTramp 54
|
||||
DevExtTramp 55
|
||||
DevExtTramp 56
|
||||
DevExtTramp 57
|
||||
DevExtTramp 58
|
||||
DevExtTramp 59
|
||||
DevExtTramp 60
|
||||
DevExtTramp 61
|
||||
DevExtTramp 62
|
||||
DevExtTramp 63
|
||||
DevExtTramp 64
|
||||
DevExtTramp 65
|
||||
DevExtTramp 66
|
||||
DevExtTramp 67
|
||||
DevExtTramp 68
|
||||
DevExtTramp 69
|
||||
DevExtTramp 70
|
||||
DevExtTramp 71
|
||||
DevExtTramp 72
|
||||
DevExtTramp 73
|
||||
DevExtTramp 74
|
||||
DevExtTramp 75
|
||||
DevExtTramp 76
|
||||
DevExtTramp 77
|
||||
DevExtTramp 78
|
||||
DevExtTramp 79
|
||||
DevExtTramp 80
|
||||
DevExtTramp 81
|
||||
DevExtTramp 82
|
||||
DevExtTramp 83
|
||||
DevExtTramp 84
|
||||
DevExtTramp 85
|
||||
DevExtTramp 86
|
||||
DevExtTramp 87
|
||||
DevExtTramp 88
|
||||
DevExtTramp 89
|
||||
DevExtTramp 90
|
||||
DevExtTramp 91
|
||||
DevExtTramp 92
|
||||
DevExtTramp 93
|
||||
DevExtTramp 94
|
||||
DevExtTramp 95
|
||||
DevExtTramp 96
|
||||
DevExtTramp 97
|
||||
DevExtTramp 98
|
||||
DevExtTramp 99
|
||||
DevExtTramp 100
|
||||
DevExtTramp 101
|
||||
DevExtTramp 102
|
||||
DevExtTramp 103
|
||||
DevExtTramp 104
|
||||
DevExtTramp 105
|
||||
DevExtTramp 106
|
||||
DevExtTramp 107
|
||||
DevExtTramp 108
|
||||
DevExtTramp 109
|
||||
DevExtTramp 110
|
||||
DevExtTramp 111
|
||||
DevExtTramp 112
|
||||
DevExtTramp 113
|
||||
DevExtTramp 114
|
||||
DevExtTramp 115
|
||||
DevExtTramp 116
|
||||
DevExtTramp 117
|
||||
DevExtTramp 118
|
||||
DevExtTramp 119
|
||||
DevExtTramp 120
|
||||
DevExtTramp 121
|
||||
DevExtTramp 122
|
||||
DevExtTramp 123
|
||||
DevExtTramp 124
|
||||
DevExtTramp 125
|
||||
DevExtTramp 126
|
||||
DevExtTramp 127
|
||||
DevExtTramp 128
|
||||
DevExtTramp 129
|
||||
DevExtTramp 130
|
||||
DevExtTramp 131
|
||||
DevExtTramp 132
|
||||
DevExtTramp 133
|
||||
DevExtTramp 134
|
||||
DevExtTramp 135
|
||||
DevExtTramp 136
|
||||
DevExtTramp 137
|
||||
DevExtTramp 138
|
||||
DevExtTramp 139
|
||||
DevExtTramp 140
|
||||
DevExtTramp 141
|
||||
DevExtTramp 142
|
||||
DevExtTramp 143
|
||||
DevExtTramp 144
|
||||
DevExtTramp 145
|
||||
DevExtTramp 146
|
||||
DevExtTramp 147
|
||||
DevExtTramp 148
|
||||
DevExtTramp 149
|
||||
DevExtTramp 150
|
||||
DevExtTramp 151
|
||||
DevExtTramp 152
|
||||
DevExtTramp 153
|
||||
DevExtTramp 154
|
||||
DevExtTramp 155
|
||||
DevExtTramp 156
|
||||
DevExtTramp 157
|
||||
DevExtTramp 158
|
||||
DevExtTramp 159
|
||||
DevExtTramp 160
|
||||
DevExtTramp 161
|
||||
DevExtTramp 162
|
||||
DevExtTramp 163
|
||||
DevExtTramp 164
|
||||
DevExtTramp 165
|
||||
DevExtTramp 166
|
||||
DevExtTramp 167
|
||||
DevExtTramp 168
|
||||
DevExtTramp 169
|
||||
DevExtTramp 170
|
||||
DevExtTramp 171
|
||||
DevExtTramp 172
|
||||
DevExtTramp 173
|
||||
DevExtTramp 174
|
||||
DevExtTramp 175
|
||||
DevExtTramp 176
|
||||
DevExtTramp 177
|
||||
DevExtTramp 178
|
||||
DevExtTramp 179
|
||||
DevExtTramp 180
|
||||
DevExtTramp 181
|
||||
DevExtTramp 182
|
||||
DevExtTramp 183
|
||||
DevExtTramp 184
|
||||
DevExtTramp 185
|
||||
DevExtTramp 186
|
||||
DevExtTramp 187
|
||||
DevExtTramp 188
|
||||
DevExtTramp 189
|
||||
DevExtTramp 190
|
||||
DevExtTramp 191
|
||||
DevExtTramp 192
|
||||
DevExtTramp 193
|
||||
DevExtTramp 194
|
||||
DevExtTramp 195
|
||||
DevExtTramp 196
|
||||
DevExtTramp 197
|
||||
DevExtTramp 198
|
||||
DevExtTramp 199
|
||||
DevExtTramp 200
|
||||
DevExtTramp 201
|
||||
DevExtTramp 202
|
||||
DevExtTramp 203
|
||||
DevExtTramp 204
|
||||
DevExtTramp 205
|
||||
DevExtTramp 206
|
||||
DevExtTramp 207
|
||||
DevExtTramp 208
|
||||
DevExtTramp 209
|
||||
DevExtTramp 210
|
||||
DevExtTramp 211
|
||||
DevExtTramp 212
|
||||
DevExtTramp 213
|
||||
DevExtTramp 214
|
||||
DevExtTramp 215
|
||||
DevExtTramp 216
|
||||
DevExtTramp 217
|
||||
DevExtTramp 218
|
||||
DevExtTramp 219
|
||||
DevExtTramp 220
|
||||
DevExtTramp 221
|
||||
DevExtTramp 222
|
||||
DevExtTramp 223
|
||||
DevExtTramp 224
|
||||
DevExtTramp 225
|
||||
DevExtTramp 226
|
||||
DevExtTramp 227
|
||||
DevExtTramp 228
|
||||
DevExtTramp 229
|
||||
DevExtTramp 230
|
||||
DevExtTramp 231
|
||||
DevExtTramp 232
|
||||
DevExtTramp 233
|
||||
DevExtTramp 234
|
||||
DevExtTramp 235
|
||||
DevExtTramp 236
|
||||
DevExtTramp 237
|
||||
DevExtTramp 238
|
||||
DevExtTramp 239
|
||||
DevExtTramp 240
|
||||
DevExtTramp 241
|
||||
DevExtTramp 242
|
||||
DevExtTramp 243
|
||||
DevExtTramp 244
|
||||
DevExtTramp 245
|
||||
DevExtTramp 246
|
||||
DevExtTramp 247
|
||||
DevExtTramp 248
|
||||
DevExtTramp 249
|
||||
|
||||
end
|
||||
740
thirdparty/vulkan/loader/vk_dispatch_table_helper.h
vendored
Normal file
740
thirdparty/vulkan/loader/vk_dispatch_table_helper.h
vendored
Normal file
@ -0,0 +1,740 @@
|
||||
#pragma once
|
||||
// *** THIS FILE IS GENERATED - DO NOT EDIT ***
|
||||
// See dispatch_helper_generator.py for modifications
|
||||
|
||||
/*
|
||||
* Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2017 Valve Corporation
|
||||
* Copyright (c) 2015-2017 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Courtney Goeltzenleuchter <courtney@LunarG.com>
|
||||
* Author: Jon Ashburn <jon@lunarg.com>
|
||||
* Author: Mark Lobodzinski <mark@lunarg.com>
|
||||
*/
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
#include <vulkan/vk_layer.h>
|
||||
#include <string.h>
|
||||
#include "vk_layer_dispatch_table.h"
|
||||
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR* pPresentInfo) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetDeviceGroupPresentCapabilitiesKHR(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubAcquireNextImage2KHR(VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubGetDeviceGroupPeerMemoryFeaturesKHR(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdSetDeviceMaskKHR(VkCommandBuffer commandBuffer, uint32_t deviceMask) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDispatchBaseKHR(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubTrimCommandPoolKHR(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags) { };
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetMemoryWin32HandleKHR(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetMemoryWin32HandlePropertiesKHR(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetMemoryFdKHR(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetMemoryFdPropertiesKHR(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties) { return VK_SUCCESS; };
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubImportSemaphoreWin32HandleKHR(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetSemaphoreWin32HandleKHR(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubImportSemaphoreFdKHR(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetSemaphoreFdKHR(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdPushDescriptorSetKHR(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdPushDescriptorSetWithTemplateKHR(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCreateDescriptorUpdateTemplateKHR(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubDestroyDescriptorUpdateTemplateKHR(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubUpdateDescriptorSetWithTemplateKHR(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCreateRenderPass2KHR(VkDevice device, const VkRenderPassCreateInfo2KHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdBeginRenderPass2KHR(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfoKHR* pSubpassBeginInfo) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdNextSubpass2KHR(VkCommandBuffer commandBuffer, const VkSubpassBeginInfoKHR* pSubpassBeginInfo, const VkSubpassEndInfoKHR* pSubpassEndInfo) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdEndRenderPass2KHR(VkCommandBuffer commandBuffer, const VkSubpassEndInfoKHR* pSubpassEndInfo) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetSwapchainStatusKHR(VkDevice device, VkSwapchainKHR swapchain) { return VK_SUCCESS; };
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubImportFenceWin32HandleKHR(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetFenceWin32HandleKHR(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubImportFenceFdKHR(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetFenceFdKHR(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubGetImageMemoryRequirements2KHR(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubGetBufferMemoryRequirements2KHR(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubGetImageSparseMemoryRequirements2KHR(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCreateSamplerYcbcrConversionKHR(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubDestroySamplerYcbcrConversionKHR(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubBindBufferMemory2KHR(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubBindImageMemory2KHR(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubGetDescriptorSetLayoutSupportKHR(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDrawIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDrawIndexedIndirectCountKHR(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubDebugMarkerSetObjectTagEXT(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubDebugMarkerSetObjectNameEXT(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDebugMarkerBeginEXT(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDebugMarkerEndEXT(VkCommandBuffer commandBuffer) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDebugMarkerInsertEXT(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdBeginQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdEndQueryIndexedEXT(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubGetImageViewHandleNVX(VkDevice device, const VkImageViewHandleInfoNVX* pInfo) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDrawIndirectCountAMD(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDrawIndexedIndirectCountAMD(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetShaderInfoAMD(VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo) { return VK_SUCCESS; };
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetMemoryWin32HandleNV(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdBeginConditionalRenderingEXT(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdEndConditionalRenderingEXT(VkCommandBuffer commandBuffer) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdProcessCommandsNVX(VkCommandBuffer commandBuffer, const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdReserveSpaceForCommandsNVX(VkCommandBuffer commandBuffer, const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCreateIndirectCommandsLayoutNVX(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubDestroyIndirectCommandsLayoutNVX(VkDevice device, VkIndirectCommandsLayoutNVX indirectCommandsLayout, const VkAllocationCallbacks* pAllocator) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCreateObjectTableNVX(VkDevice device, const VkObjectTableCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkObjectTableNVX* pObjectTable) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubDestroyObjectTableNVX(VkDevice device, VkObjectTableNVX objectTable, const VkAllocationCallbacks* pAllocator) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubRegisterObjectsNVX(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectTableEntryNVX* const* ppObjectTableEntries, const uint32_t* pObjectIndices) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubUnregisterObjectsNVX(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectEntryTypeNVX* pObjectEntryTypes, const uint32_t* pObjectIndices) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdSetViewportWScalingNV(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubDisplayPowerControlEXT(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubRegisterDeviceEventEXT(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubRegisterDisplayEventEXT(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetSwapchainCounterEXT(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetRefreshCycleDurationGOOGLE(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetPastPresentationTimingGOOGLE(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubSetHdrMetadataEXT(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata) { };
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetAndroidHardwareBufferPropertiesANDROID(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetMemoryAndroidHardwareBufferANDROID(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdSetSampleLocationsEXT(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetImageDrmFormatModifierPropertiesEXT(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCreateValidationCacheEXT(VkDevice device, const VkValidationCacheCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkValidationCacheEXT* pValidationCache) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubDestroyValidationCacheEXT(VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks* pAllocator) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubMergeValidationCachesEXT(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT* pSrcCaches) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetValidationCacheDataEXT(VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdBindShadingRateImageNV(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdSetViewportShadingRatePaletteNV(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdSetCoarseSampleOrderNV(VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCreateAccelerationStructureNV(VkDevice device, const VkAccelerationStructureCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureNV* pAccelerationStructure) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubDestroyAccelerationStructureNV(VkDevice device, VkAccelerationStructureNV accelerationStructure, const VkAllocationCallbacks* pAllocator) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubGetAccelerationStructureMemoryRequirementsNV(VkDevice device, const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubBindAccelerationStructureMemoryNV(VkDevice device, uint32_t bindInfoCount, const VkBindAccelerationStructureMemoryInfoNV* pBindInfos) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdBuildAccelerationStructureNV(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdCopyAccelerationStructureNV(VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeNV mode) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdTraceRaysNV(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCreateRayTracingPipelinesNV(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoNV* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetRayTracingShaderGroupHandlesNV(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetAccelerationStructureHandleNV(VkDevice device, VkAccelerationStructureNV accelerationStructure, size_t dataSize, void* pData) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdWriteAccelerationStructuresPropertiesNV(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCompileDeferredNV(VkDevice device, VkPipeline pipeline, uint32_t shader) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetMemoryHostPointerPropertiesEXT(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdWriteBufferMarkerAMD(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetCalibratedTimestampsEXT(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDrawMeshTasksNV(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDrawMeshTasksIndirectNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdDrawMeshTasksIndirectCountNV(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdSetExclusiveScissorNV(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubCmdSetCheckpointNV(VkCommandBuffer commandBuffer, const void* pCheckpointMarker) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubGetQueueCheckpointDataNV(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointDataNV* pCheckpointData) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubInitializePerformanceApiINTEL(VkDevice device, const VkInitializePerformanceApiInfoINTEL* pInitializeInfo) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubUninitializePerformanceApiINTEL(VkDevice device) { };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCmdSetPerformanceMarkerINTEL(VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL* pMarkerInfo) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCmdSetPerformanceStreamMarkerINTEL(VkCommandBuffer commandBuffer, const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubCmdSetPerformanceOverrideINTEL(VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL* pOverrideInfo) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubAcquirePerformanceConfigurationINTEL(VkDevice device, const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, VkPerformanceConfigurationINTEL* pConfiguration) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubReleasePerformanceConfigurationINTEL(VkDevice device, VkPerformanceConfigurationINTEL configuration) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubQueueSetPerformanceConfigurationINTEL(VkQueue queue, VkPerformanceConfigurationINTEL configuration) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetPerformanceParameterINTEL(VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL* pValue) { return VK_SUCCESS; };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubSetLocalDimmingAMD(VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable) { };
|
||||
static VKAPI_ATTR void VKAPI_CALL StubGetBufferDeviceAddressEXT(VkDevice device, const VkBufferDeviceAddressInfoEXT* pInfo) { };
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubAcquireFullScreenExclusiveModeEXT(VkDevice device, VkSwapchainKHR swapchain) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubReleaseFullScreenExclusiveModeEXT(VkDevice device, VkSwapchainKHR swapchain) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL StubGetDeviceGroupSurfacePresentModes2EXT(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes) { return VK_SUCCESS; };
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
static VKAPI_ATTR void VKAPI_CALL StubResetQueryPoolEXT(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount) { };
|
||||
|
||||
|
||||
|
||||
static inline void layer_init_device_dispatch_table(VkDevice device, VkLayerDispatchTable *table, PFN_vkGetDeviceProcAddr gpa) {
|
||||
memset(table, 0, sizeof(*table));
|
||||
// Device function pointers
|
||||
table->GetDeviceProcAddr = gpa;
|
||||
table->DestroyDevice = (PFN_vkDestroyDevice) gpa(device, "vkDestroyDevice");
|
||||
table->GetDeviceQueue = (PFN_vkGetDeviceQueue) gpa(device, "vkGetDeviceQueue");
|
||||
table->QueueSubmit = (PFN_vkQueueSubmit) gpa(device, "vkQueueSubmit");
|
||||
table->QueueWaitIdle = (PFN_vkQueueWaitIdle) gpa(device, "vkQueueWaitIdle");
|
||||
table->DeviceWaitIdle = (PFN_vkDeviceWaitIdle) gpa(device, "vkDeviceWaitIdle");
|
||||
table->AllocateMemory = (PFN_vkAllocateMemory) gpa(device, "vkAllocateMemory");
|
||||
table->FreeMemory = (PFN_vkFreeMemory) gpa(device, "vkFreeMemory");
|
||||
table->MapMemory = (PFN_vkMapMemory) gpa(device, "vkMapMemory");
|
||||
table->UnmapMemory = (PFN_vkUnmapMemory) gpa(device, "vkUnmapMemory");
|
||||
table->FlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges) gpa(device, "vkFlushMappedMemoryRanges");
|
||||
table->InvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges) gpa(device, "vkInvalidateMappedMemoryRanges");
|
||||
table->GetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment) gpa(device, "vkGetDeviceMemoryCommitment");
|
||||
table->BindBufferMemory = (PFN_vkBindBufferMemory) gpa(device, "vkBindBufferMemory");
|
||||
table->BindImageMemory = (PFN_vkBindImageMemory) gpa(device, "vkBindImageMemory");
|
||||
table->GetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements) gpa(device, "vkGetBufferMemoryRequirements");
|
||||
table->GetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements) gpa(device, "vkGetImageMemoryRequirements");
|
||||
table->GetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements) gpa(device, "vkGetImageSparseMemoryRequirements");
|
||||
table->QueueBindSparse = (PFN_vkQueueBindSparse) gpa(device, "vkQueueBindSparse");
|
||||
table->CreateFence = (PFN_vkCreateFence) gpa(device, "vkCreateFence");
|
||||
table->DestroyFence = (PFN_vkDestroyFence) gpa(device, "vkDestroyFence");
|
||||
table->ResetFences = (PFN_vkResetFences) gpa(device, "vkResetFences");
|
||||
table->GetFenceStatus = (PFN_vkGetFenceStatus) gpa(device, "vkGetFenceStatus");
|
||||
table->WaitForFences = (PFN_vkWaitForFences) gpa(device, "vkWaitForFences");
|
||||
table->CreateSemaphore = (PFN_vkCreateSemaphore) gpa(device, "vkCreateSemaphore");
|
||||
table->DestroySemaphore = (PFN_vkDestroySemaphore) gpa(device, "vkDestroySemaphore");
|
||||
table->CreateEvent = (PFN_vkCreateEvent) gpa(device, "vkCreateEvent");
|
||||
table->DestroyEvent = (PFN_vkDestroyEvent) gpa(device, "vkDestroyEvent");
|
||||
table->GetEventStatus = (PFN_vkGetEventStatus) gpa(device, "vkGetEventStatus");
|
||||
table->SetEvent = (PFN_vkSetEvent) gpa(device, "vkSetEvent");
|
||||
table->ResetEvent = (PFN_vkResetEvent) gpa(device, "vkResetEvent");
|
||||
table->CreateQueryPool = (PFN_vkCreateQueryPool) gpa(device, "vkCreateQueryPool");
|
||||
table->DestroyQueryPool = (PFN_vkDestroyQueryPool) gpa(device, "vkDestroyQueryPool");
|
||||
table->GetQueryPoolResults = (PFN_vkGetQueryPoolResults) gpa(device, "vkGetQueryPoolResults");
|
||||
table->CreateBuffer = (PFN_vkCreateBuffer) gpa(device, "vkCreateBuffer");
|
||||
table->DestroyBuffer = (PFN_vkDestroyBuffer) gpa(device, "vkDestroyBuffer");
|
||||
table->CreateBufferView = (PFN_vkCreateBufferView) gpa(device, "vkCreateBufferView");
|
||||
table->DestroyBufferView = (PFN_vkDestroyBufferView) gpa(device, "vkDestroyBufferView");
|
||||
table->CreateImage = (PFN_vkCreateImage) gpa(device, "vkCreateImage");
|
||||
table->DestroyImage = (PFN_vkDestroyImage) gpa(device, "vkDestroyImage");
|
||||
table->GetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout) gpa(device, "vkGetImageSubresourceLayout");
|
||||
table->CreateImageView = (PFN_vkCreateImageView) gpa(device, "vkCreateImageView");
|
||||
table->DestroyImageView = (PFN_vkDestroyImageView) gpa(device, "vkDestroyImageView");
|
||||
table->CreateShaderModule = (PFN_vkCreateShaderModule) gpa(device, "vkCreateShaderModule");
|
||||
table->DestroyShaderModule = (PFN_vkDestroyShaderModule) gpa(device, "vkDestroyShaderModule");
|
||||
table->CreatePipelineCache = (PFN_vkCreatePipelineCache) gpa(device, "vkCreatePipelineCache");
|
||||
table->DestroyPipelineCache = (PFN_vkDestroyPipelineCache) gpa(device, "vkDestroyPipelineCache");
|
||||
table->GetPipelineCacheData = (PFN_vkGetPipelineCacheData) gpa(device, "vkGetPipelineCacheData");
|
||||
table->MergePipelineCaches = (PFN_vkMergePipelineCaches) gpa(device, "vkMergePipelineCaches");
|
||||
table->CreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines) gpa(device, "vkCreateGraphicsPipelines");
|
||||
table->CreateComputePipelines = (PFN_vkCreateComputePipelines) gpa(device, "vkCreateComputePipelines");
|
||||
table->DestroyPipeline = (PFN_vkDestroyPipeline) gpa(device, "vkDestroyPipeline");
|
||||
table->CreatePipelineLayout = (PFN_vkCreatePipelineLayout) gpa(device, "vkCreatePipelineLayout");
|
||||
table->DestroyPipelineLayout = (PFN_vkDestroyPipelineLayout) gpa(device, "vkDestroyPipelineLayout");
|
||||
table->CreateSampler = (PFN_vkCreateSampler) gpa(device, "vkCreateSampler");
|
||||
table->DestroySampler = (PFN_vkDestroySampler) gpa(device, "vkDestroySampler");
|
||||
table->CreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout) gpa(device, "vkCreateDescriptorSetLayout");
|
||||
table->DestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout) gpa(device, "vkDestroyDescriptorSetLayout");
|
||||
table->CreateDescriptorPool = (PFN_vkCreateDescriptorPool) gpa(device, "vkCreateDescriptorPool");
|
||||
table->DestroyDescriptorPool = (PFN_vkDestroyDescriptorPool) gpa(device, "vkDestroyDescriptorPool");
|
||||
table->ResetDescriptorPool = (PFN_vkResetDescriptorPool) gpa(device, "vkResetDescriptorPool");
|
||||
table->AllocateDescriptorSets = (PFN_vkAllocateDescriptorSets) gpa(device, "vkAllocateDescriptorSets");
|
||||
table->FreeDescriptorSets = (PFN_vkFreeDescriptorSets) gpa(device, "vkFreeDescriptorSets");
|
||||
table->UpdateDescriptorSets = (PFN_vkUpdateDescriptorSets) gpa(device, "vkUpdateDescriptorSets");
|
||||
table->CreateFramebuffer = (PFN_vkCreateFramebuffer) gpa(device, "vkCreateFramebuffer");
|
||||
table->DestroyFramebuffer = (PFN_vkDestroyFramebuffer) gpa(device, "vkDestroyFramebuffer");
|
||||
table->CreateRenderPass = (PFN_vkCreateRenderPass) gpa(device, "vkCreateRenderPass");
|
||||
table->DestroyRenderPass = (PFN_vkDestroyRenderPass) gpa(device, "vkDestroyRenderPass");
|
||||
table->GetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity) gpa(device, "vkGetRenderAreaGranularity");
|
||||
table->CreateCommandPool = (PFN_vkCreateCommandPool) gpa(device, "vkCreateCommandPool");
|
||||
table->DestroyCommandPool = (PFN_vkDestroyCommandPool) gpa(device, "vkDestroyCommandPool");
|
||||
table->ResetCommandPool = (PFN_vkResetCommandPool) gpa(device, "vkResetCommandPool");
|
||||
table->AllocateCommandBuffers = (PFN_vkAllocateCommandBuffers) gpa(device, "vkAllocateCommandBuffers");
|
||||
table->FreeCommandBuffers = (PFN_vkFreeCommandBuffers) gpa(device, "vkFreeCommandBuffers");
|
||||
table->BeginCommandBuffer = (PFN_vkBeginCommandBuffer) gpa(device, "vkBeginCommandBuffer");
|
||||
table->EndCommandBuffer = (PFN_vkEndCommandBuffer) gpa(device, "vkEndCommandBuffer");
|
||||
table->ResetCommandBuffer = (PFN_vkResetCommandBuffer) gpa(device, "vkResetCommandBuffer");
|
||||
table->CmdBindPipeline = (PFN_vkCmdBindPipeline) gpa(device, "vkCmdBindPipeline");
|
||||
table->CmdSetViewport = (PFN_vkCmdSetViewport) gpa(device, "vkCmdSetViewport");
|
||||
table->CmdSetScissor = (PFN_vkCmdSetScissor) gpa(device, "vkCmdSetScissor");
|
||||
table->CmdSetLineWidth = (PFN_vkCmdSetLineWidth) gpa(device, "vkCmdSetLineWidth");
|
||||
table->CmdSetDepthBias = (PFN_vkCmdSetDepthBias) gpa(device, "vkCmdSetDepthBias");
|
||||
table->CmdSetBlendConstants = (PFN_vkCmdSetBlendConstants) gpa(device, "vkCmdSetBlendConstants");
|
||||
table->CmdSetDepthBounds = (PFN_vkCmdSetDepthBounds) gpa(device, "vkCmdSetDepthBounds");
|
||||
table->CmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask) gpa(device, "vkCmdSetStencilCompareMask");
|
||||
table->CmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask) gpa(device, "vkCmdSetStencilWriteMask");
|
||||
table->CmdSetStencilReference = (PFN_vkCmdSetStencilReference) gpa(device, "vkCmdSetStencilReference");
|
||||
table->CmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets) gpa(device, "vkCmdBindDescriptorSets");
|
||||
table->CmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer) gpa(device, "vkCmdBindIndexBuffer");
|
||||
table->CmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers) gpa(device, "vkCmdBindVertexBuffers");
|
||||
table->CmdDraw = (PFN_vkCmdDraw) gpa(device, "vkCmdDraw");
|
||||
table->CmdDrawIndexed = (PFN_vkCmdDrawIndexed) gpa(device, "vkCmdDrawIndexed");
|
||||
table->CmdDrawIndirect = (PFN_vkCmdDrawIndirect) gpa(device, "vkCmdDrawIndirect");
|
||||
table->CmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect) gpa(device, "vkCmdDrawIndexedIndirect");
|
||||
table->CmdDispatch = (PFN_vkCmdDispatch) gpa(device, "vkCmdDispatch");
|
||||
table->CmdDispatchIndirect = (PFN_vkCmdDispatchIndirect) gpa(device, "vkCmdDispatchIndirect");
|
||||
table->CmdCopyBuffer = (PFN_vkCmdCopyBuffer) gpa(device, "vkCmdCopyBuffer");
|
||||
table->CmdCopyImage = (PFN_vkCmdCopyImage) gpa(device, "vkCmdCopyImage");
|
||||
table->CmdBlitImage = (PFN_vkCmdBlitImage) gpa(device, "vkCmdBlitImage");
|
||||
table->CmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage) gpa(device, "vkCmdCopyBufferToImage");
|
||||
table->CmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer) gpa(device, "vkCmdCopyImageToBuffer");
|
||||
table->CmdUpdateBuffer = (PFN_vkCmdUpdateBuffer) gpa(device, "vkCmdUpdateBuffer");
|
||||
table->CmdFillBuffer = (PFN_vkCmdFillBuffer) gpa(device, "vkCmdFillBuffer");
|
||||
table->CmdClearColorImage = (PFN_vkCmdClearColorImage) gpa(device, "vkCmdClearColorImage");
|
||||
table->CmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage) gpa(device, "vkCmdClearDepthStencilImage");
|
||||
table->CmdClearAttachments = (PFN_vkCmdClearAttachments) gpa(device, "vkCmdClearAttachments");
|
||||
table->CmdResolveImage = (PFN_vkCmdResolveImage) gpa(device, "vkCmdResolveImage");
|
||||
table->CmdSetEvent = (PFN_vkCmdSetEvent) gpa(device, "vkCmdSetEvent");
|
||||
table->CmdResetEvent = (PFN_vkCmdResetEvent) gpa(device, "vkCmdResetEvent");
|
||||
table->CmdWaitEvents = (PFN_vkCmdWaitEvents) gpa(device, "vkCmdWaitEvents");
|
||||
table->CmdPipelineBarrier = (PFN_vkCmdPipelineBarrier) gpa(device, "vkCmdPipelineBarrier");
|
||||
table->CmdBeginQuery = (PFN_vkCmdBeginQuery) gpa(device, "vkCmdBeginQuery");
|
||||
table->CmdEndQuery = (PFN_vkCmdEndQuery) gpa(device, "vkCmdEndQuery");
|
||||
table->CmdResetQueryPool = (PFN_vkCmdResetQueryPool) gpa(device, "vkCmdResetQueryPool");
|
||||
table->CmdWriteTimestamp = (PFN_vkCmdWriteTimestamp) gpa(device, "vkCmdWriteTimestamp");
|
||||
table->CmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults) gpa(device, "vkCmdCopyQueryPoolResults");
|
||||
table->CmdPushConstants = (PFN_vkCmdPushConstants) gpa(device, "vkCmdPushConstants");
|
||||
table->CmdBeginRenderPass = (PFN_vkCmdBeginRenderPass) gpa(device, "vkCmdBeginRenderPass");
|
||||
table->CmdNextSubpass = (PFN_vkCmdNextSubpass) gpa(device, "vkCmdNextSubpass");
|
||||
table->CmdEndRenderPass = (PFN_vkCmdEndRenderPass) gpa(device, "vkCmdEndRenderPass");
|
||||
table->CmdExecuteCommands = (PFN_vkCmdExecuteCommands) gpa(device, "vkCmdExecuteCommands");
|
||||
table->BindBufferMemory2 = (PFN_vkBindBufferMemory2) gpa(device, "vkBindBufferMemory2");
|
||||
table->BindImageMemory2 = (PFN_vkBindImageMemory2) gpa(device, "vkBindImageMemory2");
|
||||
table->GetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures) gpa(device, "vkGetDeviceGroupPeerMemoryFeatures");
|
||||
table->CmdSetDeviceMask = (PFN_vkCmdSetDeviceMask) gpa(device, "vkCmdSetDeviceMask");
|
||||
table->CmdDispatchBase = (PFN_vkCmdDispatchBase) gpa(device, "vkCmdDispatchBase");
|
||||
table->GetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2) gpa(device, "vkGetImageMemoryRequirements2");
|
||||
table->GetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2) gpa(device, "vkGetBufferMemoryRequirements2");
|
||||
table->GetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2) gpa(device, "vkGetImageSparseMemoryRequirements2");
|
||||
table->TrimCommandPool = (PFN_vkTrimCommandPool) gpa(device, "vkTrimCommandPool");
|
||||
table->GetDeviceQueue2 = (PFN_vkGetDeviceQueue2) gpa(device, "vkGetDeviceQueue2");
|
||||
table->CreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion) gpa(device, "vkCreateSamplerYcbcrConversion");
|
||||
table->DestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion) gpa(device, "vkDestroySamplerYcbcrConversion");
|
||||
table->CreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate) gpa(device, "vkCreateDescriptorUpdateTemplate");
|
||||
table->DestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate) gpa(device, "vkDestroyDescriptorUpdateTemplate");
|
||||
table->UpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate) gpa(device, "vkUpdateDescriptorSetWithTemplate");
|
||||
table->GetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport) gpa(device, "vkGetDescriptorSetLayoutSupport");
|
||||
table->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR) gpa(device, "vkCreateSwapchainKHR");
|
||||
if (table->CreateSwapchainKHR == nullptr) { table->CreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)StubCreateSwapchainKHR; }
|
||||
table->DestroySwapchainKHR = (PFN_vkDestroySwapchainKHR) gpa(device, "vkDestroySwapchainKHR");
|
||||
if (table->DestroySwapchainKHR == nullptr) { table->DestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)StubDestroySwapchainKHR; }
|
||||
table->GetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR) gpa(device, "vkGetSwapchainImagesKHR");
|
||||
if (table->GetSwapchainImagesKHR == nullptr) { table->GetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)StubGetSwapchainImagesKHR; }
|
||||
table->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR) gpa(device, "vkAcquireNextImageKHR");
|
||||
if (table->AcquireNextImageKHR == nullptr) { table->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)StubAcquireNextImageKHR; }
|
||||
table->QueuePresentKHR = (PFN_vkQueuePresentKHR) gpa(device, "vkQueuePresentKHR");
|
||||
if (table->QueuePresentKHR == nullptr) { table->QueuePresentKHR = (PFN_vkQueuePresentKHR)StubQueuePresentKHR; }
|
||||
table->GetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR) gpa(device, "vkGetDeviceGroupPresentCapabilitiesKHR");
|
||||
if (table->GetDeviceGroupPresentCapabilitiesKHR == nullptr) { table->GetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR)StubGetDeviceGroupPresentCapabilitiesKHR; }
|
||||
table->GetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR) gpa(device, "vkGetDeviceGroupSurfacePresentModesKHR");
|
||||
if (table->GetDeviceGroupSurfacePresentModesKHR == nullptr) { table->GetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)StubGetDeviceGroupSurfacePresentModesKHR; }
|
||||
table->AcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR) gpa(device, "vkAcquireNextImage2KHR");
|
||||
if (table->AcquireNextImage2KHR == nullptr) { table->AcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR)StubAcquireNextImage2KHR; }
|
||||
table->CreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR) gpa(device, "vkCreateSharedSwapchainsKHR");
|
||||
if (table->CreateSharedSwapchainsKHR == nullptr) { table->CreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)StubCreateSharedSwapchainsKHR; }
|
||||
table->GetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR) gpa(device, "vkGetDeviceGroupPeerMemoryFeaturesKHR");
|
||||
if (table->GetDeviceGroupPeerMemoryFeaturesKHR == nullptr) { table->GetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)StubGetDeviceGroupPeerMemoryFeaturesKHR; }
|
||||
table->CmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR) gpa(device, "vkCmdSetDeviceMaskKHR");
|
||||
if (table->CmdSetDeviceMaskKHR == nullptr) { table->CmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR)StubCmdSetDeviceMaskKHR; }
|
||||
table->CmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR) gpa(device, "vkCmdDispatchBaseKHR");
|
||||
if (table->CmdDispatchBaseKHR == nullptr) { table->CmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR)StubCmdDispatchBaseKHR; }
|
||||
table->TrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR) gpa(device, "vkTrimCommandPoolKHR");
|
||||
if (table->TrimCommandPoolKHR == nullptr) { table->TrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)StubTrimCommandPoolKHR; }
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->GetMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR) gpa(device, "vkGetMemoryWin32HandleKHR");
|
||||
if (table->GetMemoryWin32HandleKHR == nullptr) { table->GetMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR)StubGetMemoryWin32HandleKHR; }
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->GetMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR) gpa(device, "vkGetMemoryWin32HandlePropertiesKHR");
|
||||
if (table->GetMemoryWin32HandlePropertiesKHR == nullptr) { table->GetMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR)StubGetMemoryWin32HandlePropertiesKHR; }
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
table->GetMemoryFdKHR = (PFN_vkGetMemoryFdKHR) gpa(device, "vkGetMemoryFdKHR");
|
||||
if (table->GetMemoryFdKHR == nullptr) { table->GetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)StubGetMemoryFdKHR; }
|
||||
table->GetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR) gpa(device, "vkGetMemoryFdPropertiesKHR");
|
||||
if (table->GetMemoryFdPropertiesKHR == nullptr) { table->GetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR)StubGetMemoryFdPropertiesKHR; }
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->ImportSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR) gpa(device, "vkImportSemaphoreWin32HandleKHR");
|
||||
if (table->ImportSemaphoreWin32HandleKHR == nullptr) { table->ImportSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR)StubImportSemaphoreWin32HandleKHR; }
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->GetSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR) gpa(device, "vkGetSemaphoreWin32HandleKHR");
|
||||
if (table->GetSemaphoreWin32HandleKHR == nullptr) { table->GetSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR)StubGetSemaphoreWin32HandleKHR; }
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
table->ImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR) gpa(device, "vkImportSemaphoreFdKHR");
|
||||
if (table->ImportSemaphoreFdKHR == nullptr) { table->ImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR)StubImportSemaphoreFdKHR; }
|
||||
table->GetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR) gpa(device, "vkGetSemaphoreFdKHR");
|
||||
if (table->GetSemaphoreFdKHR == nullptr) { table->GetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)StubGetSemaphoreFdKHR; }
|
||||
table->CmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR) gpa(device, "vkCmdPushDescriptorSetKHR");
|
||||
if (table->CmdPushDescriptorSetKHR == nullptr) { table->CmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)StubCmdPushDescriptorSetKHR; }
|
||||
table->CmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR) gpa(device, "vkCmdPushDescriptorSetWithTemplateKHR");
|
||||
if (table->CmdPushDescriptorSetWithTemplateKHR == nullptr) { table->CmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)StubCmdPushDescriptorSetWithTemplateKHR; }
|
||||
table->CreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR) gpa(device, "vkCreateDescriptorUpdateTemplateKHR");
|
||||
if (table->CreateDescriptorUpdateTemplateKHR == nullptr) { table->CreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)StubCreateDescriptorUpdateTemplateKHR; }
|
||||
table->DestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR) gpa(device, "vkDestroyDescriptorUpdateTemplateKHR");
|
||||
if (table->DestroyDescriptorUpdateTemplateKHR == nullptr) { table->DestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)StubDestroyDescriptorUpdateTemplateKHR; }
|
||||
table->UpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR) gpa(device, "vkUpdateDescriptorSetWithTemplateKHR");
|
||||
if (table->UpdateDescriptorSetWithTemplateKHR == nullptr) { table->UpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)StubUpdateDescriptorSetWithTemplateKHR; }
|
||||
table->CreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR) gpa(device, "vkCreateRenderPass2KHR");
|
||||
if (table->CreateRenderPass2KHR == nullptr) { table->CreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR)StubCreateRenderPass2KHR; }
|
||||
table->CmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR) gpa(device, "vkCmdBeginRenderPass2KHR");
|
||||
if (table->CmdBeginRenderPass2KHR == nullptr) { table->CmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR)StubCmdBeginRenderPass2KHR; }
|
||||
table->CmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR) gpa(device, "vkCmdNextSubpass2KHR");
|
||||
if (table->CmdNextSubpass2KHR == nullptr) { table->CmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)StubCmdNextSubpass2KHR; }
|
||||
table->CmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR) gpa(device, "vkCmdEndRenderPass2KHR");
|
||||
if (table->CmdEndRenderPass2KHR == nullptr) { table->CmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR)StubCmdEndRenderPass2KHR; }
|
||||
table->GetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR) gpa(device, "vkGetSwapchainStatusKHR");
|
||||
if (table->GetSwapchainStatusKHR == nullptr) { table->GetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)StubGetSwapchainStatusKHR; }
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->ImportFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR) gpa(device, "vkImportFenceWin32HandleKHR");
|
||||
if (table->ImportFenceWin32HandleKHR == nullptr) { table->ImportFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR)StubImportFenceWin32HandleKHR; }
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->GetFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR) gpa(device, "vkGetFenceWin32HandleKHR");
|
||||
if (table->GetFenceWin32HandleKHR == nullptr) { table->GetFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR)StubGetFenceWin32HandleKHR; }
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
table->ImportFenceFdKHR = (PFN_vkImportFenceFdKHR) gpa(device, "vkImportFenceFdKHR");
|
||||
if (table->ImportFenceFdKHR == nullptr) { table->ImportFenceFdKHR = (PFN_vkImportFenceFdKHR)StubImportFenceFdKHR; }
|
||||
table->GetFenceFdKHR = (PFN_vkGetFenceFdKHR) gpa(device, "vkGetFenceFdKHR");
|
||||
if (table->GetFenceFdKHR == nullptr) { table->GetFenceFdKHR = (PFN_vkGetFenceFdKHR)StubGetFenceFdKHR; }
|
||||
table->GetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR) gpa(device, "vkGetImageMemoryRequirements2KHR");
|
||||
if (table->GetImageMemoryRequirements2KHR == nullptr) { table->GetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)StubGetImageMemoryRequirements2KHR; }
|
||||
table->GetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR) gpa(device, "vkGetBufferMemoryRequirements2KHR");
|
||||
if (table->GetBufferMemoryRequirements2KHR == nullptr) { table->GetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)StubGetBufferMemoryRequirements2KHR; }
|
||||
table->GetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR) gpa(device, "vkGetImageSparseMemoryRequirements2KHR");
|
||||
if (table->GetImageSparseMemoryRequirements2KHR == nullptr) { table->GetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)StubGetImageSparseMemoryRequirements2KHR; }
|
||||
table->CreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR) gpa(device, "vkCreateSamplerYcbcrConversionKHR");
|
||||
if (table->CreateSamplerYcbcrConversionKHR == nullptr) { table->CreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR)StubCreateSamplerYcbcrConversionKHR; }
|
||||
table->DestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR) gpa(device, "vkDestroySamplerYcbcrConversionKHR");
|
||||
if (table->DestroySamplerYcbcrConversionKHR == nullptr) { table->DestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR)StubDestroySamplerYcbcrConversionKHR; }
|
||||
table->BindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR) gpa(device, "vkBindBufferMemory2KHR");
|
||||
if (table->BindBufferMemory2KHR == nullptr) { table->BindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)StubBindBufferMemory2KHR; }
|
||||
table->BindImageMemory2KHR = (PFN_vkBindImageMemory2KHR) gpa(device, "vkBindImageMemory2KHR");
|
||||
if (table->BindImageMemory2KHR == nullptr) { table->BindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)StubBindImageMemory2KHR; }
|
||||
table->GetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR) gpa(device, "vkGetDescriptorSetLayoutSupportKHR");
|
||||
if (table->GetDescriptorSetLayoutSupportKHR == nullptr) { table->GetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)StubGetDescriptorSetLayoutSupportKHR; }
|
||||
table->CmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR) gpa(device, "vkCmdDrawIndirectCountKHR");
|
||||
if (table->CmdDrawIndirectCountKHR == nullptr) { table->CmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)StubCmdDrawIndirectCountKHR; }
|
||||
table->CmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR) gpa(device, "vkCmdDrawIndexedIndirectCountKHR");
|
||||
if (table->CmdDrawIndexedIndirectCountKHR == nullptr) { table->CmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)StubCmdDrawIndexedIndirectCountKHR; }
|
||||
table->DebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT) gpa(device, "vkDebugMarkerSetObjectTagEXT");
|
||||
if (table->DebugMarkerSetObjectTagEXT == nullptr) { table->DebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)StubDebugMarkerSetObjectTagEXT; }
|
||||
table->DebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT) gpa(device, "vkDebugMarkerSetObjectNameEXT");
|
||||
if (table->DebugMarkerSetObjectNameEXT == nullptr) { table->DebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)StubDebugMarkerSetObjectNameEXT; }
|
||||
table->CmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT) gpa(device, "vkCmdDebugMarkerBeginEXT");
|
||||
if (table->CmdDebugMarkerBeginEXT == nullptr) { table->CmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)StubCmdDebugMarkerBeginEXT; }
|
||||
table->CmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT) gpa(device, "vkCmdDebugMarkerEndEXT");
|
||||
if (table->CmdDebugMarkerEndEXT == nullptr) { table->CmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)StubCmdDebugMarkerEndEXT; }
|
||||
table->CmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT) gpa(device, "vkCmdDebugMarkerInsertEXT");
|
||||
if (table->CmdDebugMarkerInsertEXT == nullptr) { table->CmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)StubCmdDebugMarkerInsertEXT; }
|
||||
table->CmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT) gpa(device, "vkCmdBindTransformFeedbackBuffersEXT");
|
||||
if (table->CmdBindTransformFeedbackBuffersEXT == nullptr) { table->CmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT)StubCmdBindTransformFeedbackBuffersEXT; }
|
||||
table->CmdBeginTransformFeedbackEXT = (PFN_vkCmdBeginTransformFeedbackEXT) gpa(device, "vkCmdBeginTransformFeedbackEXT");
|
||||
if (table->CmdBeginTransformFeedbackEXT == nullptr) { table->CmdBeginTransformFeedbackEXT = (PFN_vkCmdBeginTransformFeedbackEXT)StubCmdBeginTransformFeedbackEXT; }
|
||||
table->CmdEndTransformFeedbackEXT = (PFN_vkCmdEndTransformFeedbackEXT) gpa(device, "vkCmdEndTransformFeedbackEXT");
|
||||
if (table->CmdEndTransformFeedbackEXT == nullptr) { table->CmdEndTransformFeedbackEXT = (PFN_vkCmdEndTransformFeedbackEXT)StubCmdEndTransformFeedbackEXT; }
|
||||
table->CmdBeginQueryIndexedEXT = (PFN_vkCmdBeginQueryIndexedEXT) gpa(device, "vkCmdBeginQueryIndexedEXT");
|
||||
if (table->CmdBeginQueryIndexedEXT == nullptr) { table->CmdBeginQueryIndexedEXT = (PFN_vkCmdBeginQueryIndexedEXT)StubCmdBeginQueryIndexedEXT; }
|
||||
table->CmdEndQueryIndexedEXT = (PFN_vkCmdEndQueryIndexedEXT) gpa(device, "vkCmdEndQueryIndexedEXT");
|
||||
if (table->CmdEndQueryIndexedEXT == nullptr) { table->CmdEndQueryIndexedEXT = (PFN_vkCmdEndQueryIndexedEXT)StubCmdEndQueryIndexedEXT; }
|
||||
table->CmdDrawIndirectByteCountEXT = (PFN_vkCmdDrawIndirectByteCountEXT) gpa(device, "vkCmdDrawIndirectByteCountEXT");
|
||||
if (table->CmdDrawIndirectByteCountEXT == nullptr) { table->CmdDrawIndirectByteCountEXT = (PFN_vkCmdDrawIndirectByteCountEXT)StubCmdDrawIndirectByteCountEXT; }
|
||||
table->GetImageViewHandleNVX = (PFN_vkGetImageViewHandleNVX) gpa(device, "vkGetImageViewHandleNVX");
|
||||
if (table->GetImageViewHandleNVX == nullptr) { table->GetImageViewHandleNVX = (PFN_vkGetImageViewHandleNVX)StubGetImageViewHandleNVX; }
|
||||
table->CmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD) gpa(device, "vkCmdDrawIndirectCountAMD");
|
||||
if (table->CmdDrawIndirectCountAMD == nullptr) { table->CmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)StubCmdDrawIndirectCountAMD; }
|
||||
table->CmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD) gpa(device, "vkCmdDrawIndexedIndirectCountAMD");
|
||||
if (table->CmdDrawIndexedIndirectCountAMD == nullptr) { table->CmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)StubCmdDrawIndexedIndirectCountAMD; }
|
||||
table->GetShaderInfoAMD = (PFN_vkGetShaderInfoAMD) gpa(device, "vkGetShaderInfoAMD");
|
||||
if (table->GetShaderInfoAMD == nullptr) { table->GetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)StubGetShaderInfoAMD; }
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->GetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV) gpa(device, "vkGetMemoryWin32HandleNV");
|
||||
if (table->GetMemoryWin32HandleNV == nullptr) { table->GetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)StubGetMemoryWin32HandleNV; }
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
table->CmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT) gpa(device, "vkCmdBeginConditionalRenderingEXT");
|
||||
if (table->CmdBeginConditionalRenderingEXT == nullptr) { table->CmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT)StubCmdBeginConditionalRenderingEXT; }
|
||||
table->CmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT) gpa(device, "vkCmdEndConditionalRenderingEXT");
|
||||
if (table->CmdEndConditionalRenderingEXT == nullptr) { table->CmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT)StubCmdEndConditionalRenderingEXT; }
|
||||
table->CmdProcessCommandsNVX = (PFN_vkCmdProcessCommandsNVX) gpa(device, "vkCmdProcessCommandsNVX");
|
||||
if (table->CmdProcessCommandsNVX == nullptr) { table->CmdProcessCommandsNVX = (PFN_vkCmdProcessCommandsNVX)StubCmdProcessCommandsNVX; }
|
||||
table->CmdReserveSpaceForCommandsNVX = (PFN_vkCmdReserveSpaceForCommandsNVX) gpa(device, "vkCmdReserveSpaceForCommandsNVX");
|
||||
if (table->CmdReserveSpaceForCommandsNVX == nullptr) { table->CmdReserveSpaceForCommandsNVX = (PFN_vkCmdReserveSpaceForCommandsNVX)StubCmdReserveSpaceForCommandsNVX; }
|
||||
table->CreateIndirectCommandsLayoutNVX = (PFN_vkCreateIndirectCommandsLayoutNVX) gpa(device, "vkCreateIndirectCommandsLayoutNVX");
|
||||
if (table->CreateIndirectCommandsLayoutNVX == nullptr) { table->CreateIndirectCommandsLayoutNVX = (PFN_vkCreateIndirectCommandsLayoutNVX)StubCreateIndirectCommandsLayoutNVX; }
|
||||
table->DestroyIndirectCommandsLayoutNVX = (PFN_vkDestroyIndirectCommandsLayoutNVX) gpa(device, "vkDestroyIndirectCommandsLayoutNVX");
|
||||
if (table->DestroyIndirectCommandsLayoutNVX == nullptr) { table->DestroyIndirectCommandsLayoutNVX = (PFN_vkDestroyIndirectCommandsLayoutNVX)StubDestroyIndirectCommandsLayoutNVX; }
|
||||
table->CreateObjectTableNVX = (PFN_vkCreateObjectTableNVX) gpa(device, "vkCreateObjectTableNVX");
|
||||
if (table->CreateObjectTableNVX == nullptr) { table->CreateObjectTableNVX = (PFN_vkCreateObjectTableNVX)StubCreateObjectTableNVX; }
|
||||
table->DestroyObjectTableNVX = (PFN_vkDestroyObjectTableNVX) gpa(device, "vkDestroyObjectTableNVX");
|
||||
if (table->DestroyObjectTableNVX == nullptr) { table->DestroyObjectTableNVX = (PFN_vkDestroyObjectTableNVX)StubDestroyObjectTableNVX; }
|
||||
table->RegisterObjectsNVX = (PFN_vkRegisterObjectsNVX) gpa(device, "vkRegisterObjectsNVX");
|
||||
if (table->RegisterObjectsNVX == nullptr) { table->RegisterObjectsNVX = (PFN_vkRegisterObjectsNVX)StubRegisterObjectsNVX; }
|
||||
table->UnregisterObjectsNVX = (PFN_vkUnregisterObjectsNVX) gpa(device, "vkUnregisterObjectsNVX");
|
||||
if (table->UnregisterObjectsNVX == nullptr) { table->UnregisterObjectsNVX = (PFN_vkUnregisterObjectsNVX)StubUnregisterObjectsNVX; }
|
||||
table->CmdSetViewportWScalingNV = (PFN_vkCmdSetViewportWScalingNV) gpa(device, "vkCmdSetViewportWScalingNV");
|
||||
if (table->CmdSetViewportWScalingNV == nullptr) { table->CmdSetViewportWScalingNV = (PFN_vkCmdSetViewportWScalingNV)StubCmdSetViewportWScalingNV; }
|
||||
table->DisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT) gpa(device, "vkDisplayPowerControlEXT");
|
||||
if (table->DisplayPowerControlEXT == nullptr) { table->DisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT)StubDisplayPowerControlEXT; }
|
||||
table->RegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT) gpa(device, "vkRegisterDeviceEventEXT");
|
||||
if (table->RegisterDeviceEventEXT == nullptr) { table->RegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT)StubRegisterDeviceEventEXT; }
|
||||
table->RegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT) gpa(device, "vkRegisterDisplayEventEXT");
|
||||
if (table->RegisterDisplayEventEXT == nullptr) { table->RegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT)StubRegisterDisplayEventEXT; }
|
||||
table->GetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT) gpa(device, "vkGetSwapchainCounterEXT");
|
||||
if (table->GetSwapchainCounterEXT == nullptr) { table->GetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT)StubGetSwapchainCounterEXT; }
|
||||
table->GetRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE) gpa(device, "vkGetRefreshCycleDurationGOOGLE");
|
||||
if (table->GetRefreshCycleDurationGOOGLE == nullptr) { table->GetRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE)StubGetRefreshCycleDurationGOOGLE; }
|
||||
table->GetPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE) gpa(device, "vkGetPastPresentationTimingGOOGLE");
|
||||
if (table->GetPastPresentationTimingGOOGLE == nullptr) { table->GetPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE)StubGetPastPresentationTimingGOOGLE; }
|
||||
table->CmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT) gpa(device, "vkCmdSetDiscardRectangleEXT");
|
||||
if (table->CmdSetDiscardRectangleEXT == nullptr) { table->CmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT)StubCmdSetDiscardRectangleEXT; }
|
||||
table->SetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT) gpa(device, "vkSetHdrMetadataEXT");
|
||||
if (table->SetHdrMetadataEXT == nullptr) { table->SetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT)StubSetHdrMetadataEXT; }
|
||||
table->SetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT) gpa(device, "vkSetDebugUtilsObjectNameEXT");
|
||||
table->SetDebugUtilsObjectTagEXT = (PFN_vkSetDebugUtilsObjectTagEXT) gpa(device, "vkSetDebugUtilsObjectTagEXT");
|
||||
table->QueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT) gpa(device, "vkQueueBeginDebugUtilsLabelEXT");
|
||||
table->QueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT) gpa(device, "vkQueueEndDebugUtilsLabelEXT");
|
||||
table->QueueInsertDebugUtilsLabelEXT = (PFN_vkQueueInsertDebugUtilsLabelEXT) gpa(device, "vkQueueInsertDebugUtilsLabelEXT");
|
||||
table->CmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT) gpa(device, "vkCmdBeginDebugUtilsLabelEXT");
|
||||
table->CmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT) gpa(device, "vkCmdEndDebugUtilsLabelEXT");
|
||||
table->CmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT) gpa(device, "vkCmdInsertDebugUtilsLabelEXT");
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
table->GetAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID) gpa(device, "vkGetAndroidHardwareBufferPropertiesANDROID");
|
||||
if (table->GetAndroidHardwareBufferPropertiesANDROID == nullptr) { table->GetAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)StubGetAndroidHardwareBufferPropertiesANDROID; }
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
table->GetMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID) gpa(device, "vkGetMemoryAndroidHardwareBufferANDROID");
|
||||
if (table->GetMemoryAndroidHardwareBufferANDROID == nullptr) { table->GetMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID)StubGetMemoryAndroidHardwareBufferANDROID; }
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
table->CmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT) gpa(device, "vkCmdSetSampleLocationsEXT");
|
||||
if (table->CmdSetSampleLocationsEXT == nullptr) { table->CmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT)StubCmdSetSampleLocationsEXT; }
|
||||
table->GetImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT) gpa(device, "vkGetImageDrmFormatModifierPropertiesEXT");
|
||||
if (table->GetImageDrmFormatModifierPropertiesEXT == nullptr) { table->GetImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT)StubGetImageDrmFormatModifierPropertiesEXT; }
|
||||
table->CreateValidationCacheEXT = (PFN_vkCreateValidationCacheEXT) gpa(device, "vkCreateValidationCacheEXT");
|
||||
if (table->CreateValidationCacheEXT == nullptr) { table->CreateValidationCacheEXT = (PFN_vkCreateValidationCacheEXT)StubCreateValidationCacheEXT; }
|
||||
table->DestroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT) gpa(device, "vkDestroyValidationCacheEXT");
|
||||
if (table->DestroyValidationCacheEXT == nullptr) { table->DestroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT)StubDestroyValidationCacheEXT; }
|
||||
table->MergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT) gpa(device, "vkMergeValidationCachesEXT");
|
||||
if (table->MergeValidationCachesEXT == nullptr) { table->MergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT)StubMergeValidationCachesEXT; }
|
||||
table->GetValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT) gpa(device, "vkGetValidationCacheDataEXT");
|
||||
if (table->GetValidationCacheDataEXT == nullptr) { table->GetValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT)StubGetValidationCacheDataEXT; }
|
||||
table->CmdBindShadingRateImageNV = (PFN_vkCmdBindShadingRateImageNV) gpa(device, "vkCmdBindShadingRateImageNV");
|
||||
if (table->CmdBindShadingRateImageNV == nullptr) { table->CmdBindShadingRateImageNV = (PFN_vkCmdBindShadingRateImageNV)StubCmdBindShadingRateImageNV; }
|
||||
table->CmdSetViewportShadingRatePaletteNV = (PFN_vkCmdSetViewportShadingRatePaletteNV) gpa(device, "vkCmdSetViewportShadingRatePaletteNV");
|
||||
if (table->CmdSetViewportShadingRatePaletteNV == nullptr) { table->CmdSetViewportShadingRatePaletteNV = (PFN_vkCmdSetViewportShadingRatePaletteNV)StubCmdSetViewportShadingRatePaletteNV; }
|
||||
table->CmdSetCoarseSampleOrderNV = (PFN_vkCmdSetCoarseSampleOrderNV) gpa(device, "vkCmdSetCoarseSampleOrderNV");
|
||||
if (table->CmdSetCoarseSampleOrderNV == nullptr) { table->CmdSetCoarseSampleOrderNV = (PFN_vkCmdSetCoarseSampleOrderNV)StubCmdSetCoarseSampleOrderNV; }
|
||||
table->CreateAccelerationStructureNV = (PFN_vkCreateAccelerationStructureNV) gpa(device, "vkCreateAccelerationStructureNV");
|
||||
if (table->CreateAccelerationStructureNV == nullptr) { table->CreateAccelerationStructureNV = (PFN_vkCreateAccelerationStructureNV)StubCreateAccelerationStructureNV; }
|
||||
table->DestroyAccelerationStructureNV = (PFN_vkDestroyAccelerationStructureNV) gpa(device, "vkDestroyAccelerationStructureNV");
|
||||
if (table->DestroyAccelerationStructureNV == nullptr) { table->DestroyAccelerationStructureNV = (PFN_vkDestroyAccelerationStructureNV)StubDestroyAccelerationStructureNV; }
|
||||
table->GetAccelerationStructureMemoryRequirementsNV = (PFN_vkGetAccelerationStructureMemoryRequirementsNV) gpa(device, "vkGetAccelerationStructureMemoryRequirementsNV");
|
||||
if (table->GetAccelerationStructureMemoryRequirementsNV == nullptr) { table->GetAccelerationStructureMemoryRequirementsNV = (PFN_vkGetAccelerationStructureMemoryRequirementsNV)StubGetAccelerationStructureMemoryRequirementsNV; }
|
||||
table->BindAccelerationStructureMemoryNV = (PFN_vkBindAccelerationStructureMemoryNV) gpa(device, "vkBindAccelerationStructureMemoryNV");
|
||||
if (table->BindAccelerationStructureMemoryNV == nullptr) { table->BindAccelerationStructureMemoryNV = (PFN_vkBindAccelerationStructureMemoryNV)StubBindAccelerationStructureMemoryNV; }
|
||||
table->CmdBuildAccelerationStructureNV = (PFN_vkCmdBuildAccelerationStructureNV) gpa(device, "vkCmdBuildAccelerationStructureNV");
|
||||
if (table->CmdBuildAccelerationStructureNV == nullptr) { table->CmdBuildAccelerationStructureNV = (PFN_vkCmdBuildAccelerationStructureNV)StubCmdBuildAccelerationStructureNV; }
|
||||
table->CmdCopyAccelerationStructureNV = (PFN_vkCmdCopyAccelerationStructureNV) gpa(device, "vkCmdCopyAccelerationStructureNV");
|
||||
if (table->CmdCopyAccelerationStructureNV == nullptr) { table->CmdCopyAccelerationStructureNV = (PFN_vkCmdCopyAccelerationStructureNV)StubCmdCopyAccelerationStructureNV; }
|
||||
table->CmdTraceRaysNV = (PFN_vkCmdTraceRaysNV) gpa(device, "vkCmdTraceRaysNV");
|
||||
if (table->CmdTraceRaysNV == nullptr) { table->CmdTraceRaysNV = (PFN_vkCmdTraceRaysNV)StubCmdTraceRaysNV; }
|
||||
table->CreateRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV) gpa(device, "vkCreateRayTracingPipelinesNV");
|
||||
if (table->CreateRayTracingPipelinesNV == nullptr) { table->CreateRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV)StubCreateRayTracingPipelinesNV; }
|
||||
table->GetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV) gpa(device, "vkGetRayTracingShaderGroupHandlesNV");
|
||||
if (table->GetRayTracingShaderGroupHandlesNV == nullptr) { table->GetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV)StubGetRayTracingShaderGroupHandlesNV; }
|
||||
table->GetAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV) gpa(device, "vkGetAccelerationStructureHandleNV");
|
||||
if (table->GetAccelerationStructureHandleNV == nullptr) { table->GetAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV)StubGetAccelerationStructureHandleNV; }
|
||||
table->CmdWriteAccelerationStructuresPropertiesNV = (PFN_vkCmdWriteAccelerationStructuresPropertiesNV) gpa(device, "vkCmdWriteAccelerationStructuresPropertiesNV");
|
||||
if (table->CmdWriteAccelerationStructuresPropertiesNV == nullptr) { table->CmdWriteAccelerationStructuresPropertiesNV = (PFN_vkCmdWriteAccelerationStructuresPropertiesNV)StubCmdWriteAccelerationStructuresPropertiesNV; }
|
||||
table->CompileDeferredNV = (PFN_vkCompileDeferredNV) gpa(device, "vkCompileDeferredNV");
|
||||
if (table->CompileDeferredNV == nullptr) { table->CompileDeferredNV = (PFN_vkCompileDeferredNV)StubCompileDeferredNV; }
|
||||
table->GetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT) gpa(device, "vkGetMemoryHostPointerPropertiesEXT");
|
||||
if (table->GetMemoryHostPointerPropertiesEXT == nullptr) { table->GetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT)StubGetMemoryHostPointerPropertiesEXT; }
|
||||
table->CmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD) gpa(device, "vkCmdWriteBufferMarkerAMD");
|
||||
if (table->CmdWriteBufferMarkerAMD == nullptr) { table->CmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)StubCmdWriteBufferMarkerAMD; }
|
||||
table->GetCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT) gpa(device, "vkGetCalibratedTimestampsEXT");
|
||||
if (table->GetCalibratedTimestampsEXT == nullptr) { table->GetCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT)StubGetCalibratedTimestampsEXT; }
|
||||
table->CmdDrawMeshTasksNV = (PFN_vkCmdDrawMeshTasksNV) gpa(device, "vkCmdDrawMeshTasksNV");
|
||||
if (table->CmdDrawMeshTasksNV == nullptr) { table->CmdDrawMeshTasksNV = (PFN_vkCmdDrawMeshTasksNV)StubCmdDrawMeshTasksNV; }
|
||||
table->CmdDrawMeshTasksIndirectNV = (PFN_vkCmdDrawMeshTasksIndirectNV) gpa(device, "vkCmdDrawMeshTasksIndirectNV");
|
||||
if (table->CmdDrawMeshTasksIndirectNV == nullptr) { table->CmdDrawMeshTasksIndirectNV = (PFN_vkCmdDrawMeshTasksIndirectNV)StubCmdDrawMeshTasksIndirectNV; }
|
||||
table->CmdDrawMeshTasksIndirectCountNV = (PFN_vkCmdDrawMeshTasksIndirectCountNV) gpa(device, "vkCmdDrawMeshTasksIndirectCountNV");
|
||||
if (table->CmdDrawMeshTasksIndirectCountNV == nullptr) { table->CmdDrawMeshTasksIndirectCountNV = (PFN_vkCmdDrawMeshTasksIndirectCountNV)StubCmdDrawMeshTasksIndirectCountNV; }
|
||||
table->CmdSetExclusiveScissorNV = (PFN_vkCmdSetExclusiveScissorNV) gpa(device, "vkCmdSetExclusiveScissorNV");
|
||||
if (table->CmdSetExclusiveScissorNV == nullptr) { table->CmdSetExclusiveScissorNV = (PFN_vkCmdSetExclusiveScissorNV)StubCmdSetExclusiveScissorNV; }
|
||||
table->CmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV) gpa(device, "vkCmdSetCheckpointNV");
|
||||
if (table->CmdSetCheckpointNV == nullptr) { table->CmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV)StubCmdSetCheckpointNV; }
|
||||
table->GetQueueCheckpointDataNV = (PFN_vkGetQueueCheckpointDataNV) gpa(device, "vkGetQueueCheckpointDataNV");
|
||||
if (table->GetQueueCheckpointDataNV == nullptr) { table->GetQueueCheckpointDataNV = (PFN_vkGetQueueCheckpointDataNV)StubGetQueueCheckpointDataNV; }
|
||||
table->InitializePerformanceApiINTEL = (PFN_vkInitializePerformanceApiINTEL) gpa(device, "vkInitializePerformanceApiINTEL");
|
||||
if (table->InitializePerformanceApiINTEL == nullptr) { table->InitializePerformanceApiINTEL = (PFN_vkInitializePerformanceApiINTEL)StubInitializePerformanceApiINTEL; }
|
||||
table->UninitializePerformanceApiINTEL = (PFN_vkUninitializePerformanceApiINTEL) gpa(device, "vkUninitializePerformanceApiINTEL");
|
||||
if (table->UninitializePerformanceApiINTEL == nullptr) { table->UninitializePerformanceApiINTEL = (PFN_vkUninitializePerformanceApiINTEL)StubUninitializePerformanceApiINTEL; }
|
||||
table->CmdSetPerformanceMarkerINTEL = (PFN_vkCmdSetPerformanceMarkerINTEL) gpa(device, "vkCmdSetPerformanceMarkerINTEL");
|
||||
if (table->CmdSetPerformanceMarkerINTEL == nullptr) { table->CmdSetPerformanceMarkerINTEL = (PFN_vkCmdSetPerformanceMarkerINTEL)StubCmdSetPerformanceMarkerINTEL; }
|
||||
table->CmdSetPerformanceStreamMarkerINTEL = (PFN_vkCmdSetPerformanceStreamMarkerINTEL) gpa(device, "vkCmdSetPerformanceStreamMarkerINTEL");
|
||||
if (table->CmdSetPerformanceStreamMarkerINTEL == nullptr) { table->CmdSetPerformanceStreamMarkerINTEL = (PFN_vkCmdSetPerformanceStreamMarkerINTEL)StubCmdSetPerformanceStreamMarkerINTEL; }
|
||||
table->CmdSetPerformanceOverrideINTEL = (PFN_vkCmdSetPerformanceOverrideINTEL) gpa(device, "vkCmdSetPerformanceOverrideINTEL");
|
||||
if (table->CmdSetPerformanceOverrideINTEL == nullptr) { table->CmdSetPerformanceOverrideINTEL = (PFN_vkCmdSetPerformanceOverrideINTEL)StubCmdSetPerformanceOverrideINTEL; }
|
||||
table->AcquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL) gpa(device, "vkAcquirePerformanceConfigurationINTEL");
|
||||
if (table->AcquirePerformanceConfigurationINTEL == nullptr) { table->AcquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL)StubAcquirePerformanceConfigurationINTEL; }
|
||||
table->ReleasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL) gpa(device, "vkReleasePerformanceConfigurationINTEL");
|
||||
if (table->ReleasePerformanceConfigurationINTEL == nullptr) { table->ReleasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL)StubReleasePerformanceConfigurationINTEL; }
|
||||
table->QueueSetPerformanceConfigurationINTEL = (PFN_vkQueueSetPerformanceConfigurationINTEL) gpa(device, "vkQueueSetPerformanceConfigurationINTEL");
|
||||
if (table->QueueSetPerformanceConfigurationINTEL == nullptr) { table->QueueSetPerformanceConfigurationINTEL = (PFN_vkQueueSetPerformanceConfigurationINTEL)StubQueueSetPerformanceConfigurationINTEL; }
|
||||
table->GetPerformanceParameterINTEL = (PFN_vkGetPerformanceParameterINTEL) gpa(device, "vkGetPerformanceParameterINTEL");
|
||||
if (table->GetPerformanceParameterINTEL == nullptr) { table->GetPerformanceParameterINTEL = (PFN_vkGetPerformanceParameterINTEL)StubGetPerformanceParameterINTEL; }
|
||||
table->SetLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD) gpa(device, "vkSetLocalDimmingAMD");
|
||||
if (table->SetLocalDimmingAMD == nullptr) { table->SetLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD)StubSetLocalDimmingAMD; }
|
||||
table->GetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT) gpa(device, "vkGetBufferDeviceAddressEXT");
|
||||
if (table->GetBufferDeviceAddressEXT == nullptr) { table->GetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT)StubGetBufferDeviceAddressEXT; }
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->AcquireFullScreenExclusiveModeEXT = (PFN_vkAcquireFullScreenExclusiveModeEXT) gpa(device, "vkAcquireFullScreenExclusiveModeEXT");
|
||||
if (table->AcquireFullScreenExclusiveModeEXT == nullptr) { table->AcquireFullScreenExclusiveModeEXT = (PFN_vkAcquireFullScreenExclusiveModeEXT)StubAcquireFullScreenExclusiveModeEXT; }
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->ReleaseFullScreenExclusiveModeEXT = (PFN_vkReleaseFullScreenExclusiveModeEXT) gpa(device, "vkReleaseFullScreenExclusiveModeEXT");
|
||||
if (table->ReleaseFullScreenExclusiveModeEXT == nullptr) { table->ReleaseFullScreenExclusiveModeEXT = (PFN_vkReleaseFullScreenExclusiveModeEXT)StubReleaseFullScreenExclusiveModeEXT; }
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->GetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT) gpa(device, "vkGetDeviceGroupSurfacePresentModes2EXT");
|
||||
if (table->GetDeviceGroupSurfacePresentModes2EXT == nullptr) { table->GetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)StubGetDeviceGroupSurfacePresentModes2EXT; }
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
table->ResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT) gpa(device, "vkResetQueryPoolEXT");
|
||||
if (table->ResetQueryPoolEXT == nullptr) { table->ResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT)StubResetQueryPoolEXT; }
|
||||
}
|
||||
|
||||
|
||||
static inline void layer_init_instance_dispatch_table(VkInstance instance, VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa) {
|
||||
memset(table, 0, sizeof(*table));
|
||||
// Instance function pointers
|
||||
table->DestroyInstance = (PFN_vkDestroyInstance) gpa(instance, "vkDestroyInstance");
|
||||
table->EnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices) gpa(instance, "vkEnumeratePhysicalDevices");
|
||||
table->GetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures) gpa(instance, "vkGetPhysicalDeviceFeatures");
|
||||
table->GetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties) gpa(instance, "vkGetPhysicalDeviceFormatProperties");
|
||||
table->GetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties) gpa(instance, "vkGetPhysicalDeviceImageFormatProperties");
|
||||
table->GetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties) gpa(instance, "vkGetPhysicalDeviceProperties");
|
||||
table->GetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties) gpa(instance, "vkGetPhysicalDeviceQueueFamilyProperties");
|
||||
table->GetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties) gpa(instance, "vkGetPhysicalDeviceMemoryProperties");
|
||||
table->GetInstanceProcAddr = gpa;
|
||||
table->EnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties) gpa(instance, "vkEnumerateDeviceExtensionProperties");
|
||||
table->EnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties) gpa(instance, "vkEnumerateDeviceLayerProperties");
|
||||
table->GetPhysicalDeviceSparseImageFormatProperties = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties) gpa(instance, "vkGetPhysicalDeviceSparseImageFormatProperties");
|
||||
table->EnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups) gpa(instance, "vkEnumeratePhysicalDeviceGroups");
|
||||
table->GetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2) gpa(instance, "vkGetPhysicalDeviceFeatures2");
|
||||
table->GetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2) gpa(instance, "vkGetPhysicalDeviceProperties2");
|
||||
table->GetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2) gpa(instance, "vkGetPhysicalDeviceFormatProperties2");
|
||||
table->GetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2) gpa(instance, "vkGetPhysicalDeviceImageFormatProperties2");
|
||||
table->GetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2) gpa(instance, "vkGetPhysicalDeviceQueueFamilyProperties2");
|
||||
table->GetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2) gpa(instance, "vkGetPhysicalDeviceMemoryProperties2");
|
||||
table->GetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2) gpa(instance, "vkGetPhysicalDeviceSparseImageFormatProperties2");
|
||||
table->GetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties) gpa(instance, "vkGetPhysicalDeviceExternalBufferProperties");
|
||||
table->GetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties) gpa(instance, "vkGetPhysicalDeviceExternalFenceProperties");
|
||||
table->GetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties) gpa(instance, "vkGetPhysicalDeviceExternalSemaphoreProperties");
|
||||
table->DestroySurfaceKHR = (PFN_vkDestroySurfaceKHR) gpa(instance, "vkDestroySurfaceKHR");
|
||||
table->GetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR) gpa(instance, "vkGetPhysicalDeviceSurfaceSupportKHR");
|
||||
table->GetPhysicalDeviceSurfaceCapabilitiesKHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR) gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR");
|
||||
table->GetPhysicalDeviceSurfaceFormatsKHR = (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR) gpa(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR");
|
||||
table->GetPhysicalDeviceSurfacePresentModesKHR = (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR) gpa(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR");
|
||||
table->GetPhysicalDevicePresentRectanglesKHR = (PFN_vkGetPhysicalDevicePresentRectanglesKHR) gpa(instance, "vkGetPhysicalDevicePresentRectanglesKHR");
|
||||
table->GetPhysicalDeviceDisplayPropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR) gpa(instance, "vkGetPhysicalDeviceDisplayPropertiesKHR");
|
||||
table->GetPhysicalDeviceDisplayPlanePropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR) gpa(instance, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR");
|
||||
table->GetDisplayPlaneSupportedDisplaysKHR = (PFN_vkGetDisplayPlaneSupportedDisplaysKHR) gpa(instance, "vkGetDisplayPlaneSupportedDisplaysKHR");
|
||||
table->GetDisplayModePropertiesKHR = (PFN_vkGetDisplayModePropertiesKHR) gpa(instance, "vkGetDisplayModePropertiesKHR");
|
||||
table->CreateDisplayModeKHR = (PFN_vkCreateDisplayModeKHR) gpa(instance, "vkCreateDisplayModeKHR");
|
||||
table->GetDisplayPlaneCapabilitiesKHR = (PFN_vkGetDisplayPlaneCapabilitiesKHR) gpa(instance, "vkGetDisplayPlaneCapabilitiesKHR");
|
||||
table->CreateDisplayPlaneSurfaceKHR = (PFN_vkCreateDisplayPlaneSurfaceKHR) gpa(instance, "vkCreateDisplayPlaneSurfaceKHR");
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
table->CreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR) gpa(instance, "vkCreateXlibSurfaceKHR");
|
||||
#endif // VK_USE_PLATFORM_XLIB_KHR
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
table->GetPhysicalDeviceXlibPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR) gpa(instance, "vkGetPhysicalDeviceXlibPresentationSupportKHR");
|
||||
#endif // VK_USE_PLATFORM_XLIB_KHR
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
table->CreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR) gpa(instance, "vkCreateXcbSurfaceKHR");
|
||||
#endif // VK_USE_PLATFORM_XCB_KHR
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
table->GetPhysicalDeviceXcbPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR) gpa(instance, "vkGetPhysicalDeviceXcbPresentationSupportKHR");
|
||||
#endif // VK_USE_PLATFORM_XCB_KHR
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
table->CreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR) gpa(instance, "vkCreateWaylandSurfaceKHR");
|
||||
#endif // VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
table->GetPhysicalDeviceWaylandPresentationSupportKHR = (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR) gpa(instance, "vkGetPhysicalDeviceWaylandPresentationSupportKHR");
|
||||
#endif // VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
table->CreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR) gpa(instance, "vkCreateAndroidSurfaceKHR");
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->CreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR) gpa(instance, "vkCreateWin32SurfaceKHR");
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->GetPhysicalDeviceWin32PresentationSupportKHR = (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR) gpa(instance, "vkGetPhysicalDeviceWin32PresentationSupportKHR");
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
table->GetPhysicalDeviceFeatures2KHR = (PFN_vkGetPhysicalDeviceFeatures2KHR) gpa(instance, "vkGetPhysicalDeviceFeatures2KHR");
|
||||
table->GetPhysicalDeviceProperties2KHR = (PFN_vkGetPhysicalDeviceProperties2KHR) gpa(instance, "vkGetPhysicalDeviceProperties2KHR");
|
||||
table->GetPhysicalDeviceFormatProperties2KHR = (PFN_vkGetPhysicalDeviceFormatProperties2KHR) gpa(instance, "vkGetPhysicalDeviceFormatProperties2KHR");
|
||||
table->GetPhysicalDeviceImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR) gpa(instance, "vkGetPhysicalDeviceImageFormatProperties2KHR");
|
||||
table->GetPhysicalDeviceQueueFamilyProperties2KHR = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR) gpa(instance, "vkGetPhysicalDeviceQueueFamilyProperties2KHR");
|
||||
table->GetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2KHR) gpa(instance, "vkGetPhysicalDeviceMemoryProperties2KHR");
|
||||
table->GetPhysicalDeviceSparseImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR) gpa(instance, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR");
|
||||
table->EnumeratePhysicalDeviceGroupsKHR = (PFN_vkEnumeratePhysicalDeviceGroupsKHR) gpa(instance, "vkEnumeratePhysicalDeviceGroupsKHR");
|
||||
table->GetPhysicalDeviceExternalBufferPropertiesKHR = (PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR) gpa(instance, "vkGetPhysicalDeviceExternalBufferPropertiesKHR");
|
||||
table->GetPhysicalDeviceExternalSemaphorePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR) gpa(instance, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR");
|
||||
table->GetPhysicalDeviceExternalFencePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR) gpa(instance, "vkGetPhysicalDeviceExternalFencePropertiesKHR");
|
||||
table->GetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR) gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilities2KHR");
|
||||
table->GetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR) gpa(instance, "vkGetPhysicalDeviceSurfaceFormats2KHR");
|
||||
table->GetPhysicalDeviceDisplayProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayProperties2KHR) gpa(instance, "vkGetPhysicalDeviceDisplayProperties2KHR");
|
||||
table->GetPhysicalDeviceDisplayPlaneProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR) gpa(instance, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR");
|
||||
table->GetDisplayModeProperties2KHR = (PFN_vkGetDisplayModeProperties2KHR) gpa(instance, "vkGetDisplayModeProperties2KHR");
|
||||
table->GetDisplayPlaneCapabilities2KHR = (PFN_vkGetDisplayPlaneCapabilities2KHR) gpa(instance, "vkGetDisplayPlaneCapabilities2KHR");
|
||||
table->CreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT) gpa(instance, "vkCreateDebugReportCallbackEXT");
|
||||
table->DestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT) gpa(instance, "vkDestroyDebugReportCallbackEXT");
|
||||
table->DebugReportMessageEXT = (PFN_vkDebugReportMessageEXT) gpa(instance, "vkDebugReportMessageEXT");
|
||||
#ifdef VK_USE_PLATFORM_GGP
|
||||
table->CreateStreamDescriptorSurfaceGGP = (PFN_vkCreateStreamDescriptorSurfaceGGP) gpa(instance, "vkCreateStreamDescriptorSurfaceGGP");
|
||||
#endif // VK_USE_PLATFORM_GGP
|
||||
table->GetPhysicalDeviceExternalImageFormatPropertiesNV = (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV) gpa(instance, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV");
|
||||
#ifdef VK_USE_PLATFORM_VI_NN
|
||||
table->CreateViSurfaceNN = (PFN_vkCreateViSurfaceNN) gpa(instance, "vkCreateViSurfaceNN");
|
||||
#endif // VK_USE_PLATFORM_VI_NN
|
||||
table->GetPhysicalDeviceGeneratedCommandsPropertiesNVX = (PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX) gpa(instance, "vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX");
|
||||
table->ReleaseDisplayEXT = (PFN_vkReleaseDisplayEXT) gpa(instance, "vkReleaseDisplayEXT");
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
table->AcquireXlibDisplayEXT = (PFN_vkAcquireXlibDisplayEXT) gpa(instance, "vkAcquireXlibDisplayEXT");
|
||||
#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
table->GetRandROutputDisplayEXT = (PFN_vkGetRandROutputDisplayEXT) gpa(instance, "vkGetRandROutputDisplayEXT");
|
||||
#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
table->GetPhysicalDeviceSurfaceCapabilities2EXT = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT) gpa(instance, "vkGetPhysicalDeviceSurfaceCapabilities2EXT");
|
||||
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||
table->CreateIOSSurfaceMVK = (PFN_vkCreateIOSSurfaceMVK) gpa(instance, "vkCreateIOSSurfaceMVK");
|
||||
#endif // VK_USE_PLATFORM_IOS_MVK
|
||||
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||
table->CreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK) gpa(instance, "vkCreateMacOSSurfaceMVK");
|
||||
#endif // VK_USE_PLATFORM_MACOS_MVK
|
||||
table->CreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT) gpa(instance, "vkCreateDebugUtilsMessengerEXT");
|
||||
table->DestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT) gpa(instance, "vkDestroyDebugUtilsMessengerEXT");
|
||||
table->SubmitDebugUtilsMessageEXT = (PFN_vkSubmitDebugUtilsMessageEXT) gpa(instance, "vkSubmitDebugUtilsMessageEXT");
|
||||
table->GetPhysicalDeviceMultisamplePropertiesEXT = (PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT) gpa(instance, "vkGetPhysicalDeviceMultisamplePropertiesEXT");
|
||||
table->GetPhysicalDeviceCalibrateableTimeDomainsEXT = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT) gpa(instance, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT");
|
||||
#ifdef VK_USE_PLATFORM_FUCHSIA
|
||||
table->CreateImagePipeSurfaceFUCHSIA = (PFN_vkCreateImagePipeSurfaceFUCHSIA) gpa(instance, "vkCreateImagePipeSurfaceFUCHSIA");
|
||||
#endif // VK_USE_PLATFORM_FUCHSIA
|
||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
||||
table->CreateMetalSurfaceEXT = (PFN_vkCreateMetalSurfaceEXT) gpa(instance, "vkCreateMetalSurfaceEXT");
|
||||
#endif // VK_USE_PLATFORM_METAL_EXT
|
||||
table->GetPhysicalDeviceCooperativeMatrixPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV) gpa(instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV");
|
||||
table->GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = (PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV) gpa(instance, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV");
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
table->GetPhysicalDeviceSurfacePresentModes2EXT = (PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT) gpa(instance, "vkGetPhysicalDeviceSurfacePresentModes2EXT");
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
table->CreateHeadlessSurfaceEXT = (PFN_vkCreateHeadlessSurfaceEXT) gpa(instance, "vkCreateHeadlessSurfaceEXT");
|
||||
}
|
||||
638
thirdparty/vulkan/loader/vk_layer_dispatch_table.h
vendored
Normal file
638
thirdparty/vulkan/loader/vk_layer_dispatch_table.h
vendored
Normal file
@ -0,0 +1,638 @@
|
||||
// *** THIS FILE IS GENERATED - DO NOT EDIT ***
|
||||
// See loader_extension_generator.py for modifications
|
||||
|
||||
/*
|
||||
* Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2017 Valve Corporation
|
||||
* Copyright (c) 2015-2017 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Mark Lobodzinski <mark@lunarg.com>
|
||||
* Author: Mark Young <marky@lunarg.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);
|
||||
|
||||
// Instance function pointer dispatch table
|
||||
typedef struct VkLayerInstanceDispatchTable_ {
|
||||
// Manually add in GetPhysicalDeviceProcAddr entry
|
||||
PFN_GetPhysicalDeviceProcAddr GetPhysicalDeviceProcAddr;
|
||||
|
||||
// ---- Core 1_0 commands
|
||||
PFN_vkCreateInstance CreateInstance;
|
||||
PFN_vkDestroyInstance DestroyInstance;
|
||||
PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
|
||||
PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
|
||||
PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
|
||||
PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties;
|
||||
PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
|
||||
PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties;
|
||||
PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
|
||||
PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
|
||||
PFN_vkCreateDevice CreateDevice;
|
||||
PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties;
|
||||
PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
|
||||
PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties;
|
||||
PFN_vkEnumerateDeviceLayerProperties EnumerateDeviceLayerProperties;
|
||||
PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
|
||||
|
||||
// ---- Core 1_1 commands
|
||||
PFN_vkEnumerateInstanceVersion EnumerateInstanceVersion;
|
||||
PFN_vkEnumeratePhysicalDeviceGroups EnumeratePhysicalDeviceGroups;
|
||||
PFN_vkGetPhysicalDeviceFeatures2 GetPhysicalDeviceFeatures2;
|
||||
PFN_vkGetPhysicalDeviceProperties2 GetPhysicalDeviceProperties2;
|
||||
PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysicalDeviceFormatProperties2;
|
||||
PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysicalDeviceImageFormatProperties2;
|
||||
PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysicalDeviceQueueFamilyProperties2;
|
||||
PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysicalDeviceMemoryProperties2;
|
||||
PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysicalDeviceSparseImageFormatProperties2;
|
||||
PFN_vkGetPhysicalDeviceExternalBufferProperties GetPhysicalDeviceExternalBufferProperties;
|
||||
PFN_vkGetPhysicalDeviceExternalFenceProperties GetPhysicalDeviceExternalFenceProperties;
|
||||
PFN_vkGetPhysicalDeviceExternalSemaphoreProperties GetPhysicalDeviceExternalSemaphoreProperties;
|
||||
|
||||
// ---- VK_KHR_surface extension commands
|
||||
PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR;
|
||||
|
||||
// ---- VK_KHR_swapchain extension commands
|
||||
PFN_vkGetPhysicalDevicePresentRectanglesKHR GetPhysicalDevicePresentRectanglesKHR;
|
||||
|
||||
// ---- VK_KHR_display extension commands
|
||||
PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR;
|
||||
PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR;
|
||||
PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR;
|
||||
PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR;
|
||||
PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR;
|
||||
PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR;
|
||||
PFN_vkCreateDisplayPlaneSurfaceKHR CreateDisplayPlaneSurfaceKHR;
|
||||
|
||||
// ---- VK_KHR_xlib_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_XLIB_KHR
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR GetPhysicalDeviceXlibPresentationSupportKHR;
|
||||
#endif // VK_USE_PLATFORM_XLIB_KHR
|
||||
|
||||
// ---- VK_KHR_xcb_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_XCB_KHR
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR GetPhysicalDeviceXcbPresentationSupportKHR;
|
||||
#endif // VK_USE_PLATFORM_XCB_KHR
|
||||
|
||||
// ---- VK_KHR_wayland_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR GetPhysicalDeviceWaylandPresentationSupportKHR;
|
||||
#endif // VK_USE_PLATFORM_WAYLAND_KHR
|
||||
|
||||
// ---- VK_KHR_android_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
|
||||
// ---- VK_KHR_win32_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR GetPhysicalDeviceWin32PresentationSupportKHR;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
// ---- VK_KHR_get_physical_device_properties2 extension commands
|
||||
PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysicalDeviceFeatures2KHR;
|
||||
PFN_vkGetPhysicalDeviceProperties2KHR GetPhysicalDeviceProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysicalDeviceFormatProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysicalDeviceImageFormatProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysicalDeviceQueueFamilyProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysicalDeviceMemoryProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysicalDeviceSparseImageFormatProperties2KHR;
|
||||
|
||||
// ---- VK_KHR_device_group_creation extension commands
|
||||
PFN_vkEnumeratePhysicalDeviceGroupsKHR EnumeratePhysicalDeviceGroupsKHR;
|
||||
|
||||
// ---- VK_KHR_external_memory_capabilities extension commands
|
||||
PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR GetPhysicalDeviceExternalBufferPropertiesKHR;
|
||||
|
||||
// ---- VK_KHR_external_semaphore_capabilities extension commands
|
||||
PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR GetPhysicalDeviceExternalSemaphorePropertiesKHR;
|
||||
|
||||
// ---- VK_KHR_external_fence_capabilities extension commands
|
||||
PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR GetPhysicalDeviceExternalFencePropertiesKHR;
|
||||
|
||||
// ---- VK_KHR_get_surface_capabilities2 extension commands
|
||||
PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR;
|
||||
PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR;
|
||||
|
||||
// ---- VK_KHR_get_display_properties2 extension commands
|
||||
PFN_vkGetPhysicalDeviceDisplayProperties2KHR GetPhysicalDeviceDisplayProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR GetPhysicalDeviceDisplayPlaneProperties2KHR;
|
||||
PFN_vkGetDisplayModeProperties2KHR GetDisplayModeProperties2KHR;
|
||||
PFN_vkGetDisplayPlaneCapabilities2KHR GetDisplayPlaneCapabilities2KHR;
|
||||
|
||||
// ---- VK_EXT_debug_report extension commands
|
||||
PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
|
||||
PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
|
||||
PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
|
||||
|
||||
// ---- VK_GGP_stream_descriptor_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_GGP
|
||||
PFN_vkCreateStreamDescriptorSurfaceGGP CreateStreamDescriptorSurfaceGGP;
|
||||
#endif // VK_USE_PLATFORM_GGP
|
||||
|
||||
// ---- VK_NV_external_memory_capabilities extension commands
|
||||
PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV GetPhysicalDeviceExternalImageFormatPropertiesNV;
|
||||
|
||||
// ---- VK_NN_vi_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_VI_NN
|
||||
PFN_vkCreateViSurfaceNN CreateViSurfaceNN;
|
||||
#endif // VK_USE_PLATFORM_VI_NN
|
||||
|
||||
// ---- VK_NVX_device_generated_commands extension commands
|
||||
PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX GetPhysicalDeviceGeneratedCommandsPropertiesNVX;
|
||||
|
||||
// ---- VK_EXT_direct_mode_display extension commands
|
||||
PFN_vkReleaseDisplayEXT ReleaseDisplayEXT;
|
||||
|
||||
// ---- VK_EXT_acquire_xlib_display extension commands
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
PFN_vkAcquireXlibDisplayEXT AcquireXlibDisplayEXT;
|
||||
#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
PFN_vkGetRandROutputDisplayEXT GetRandROutputDisplayEXT;
|
||||
#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
|
||||
// ---- VK_EXT_display_surface_counter extension commands
|
||||
PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT GetPhysicalDeviceSurfaceCapabilities2EXT;
|
||||
|
||||
// ---- VK_MVK_ios_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||
PFN_vkCreateIOSSurfaceMVK CreateIOSSurfaceMVK;
|
||||
#endif // VK_USE_PLATFORM_IOS_MVK
|
||||
|
||||
// ---- VK_MVK_macos_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||
PFN_vkCreateMacOSSurfaceMVK CreateMacOSSurfaceMVK;
|
||||
#endif // VK_USE_PLATFORM_MACOS_MVK
|
||||
|
||||
// ---- VK_EXT_debug_utils extension commands
|
||||
PFN_vkCreateDebugUtilsMessengerEXT CreateDebugUtilsMessengerEXT;
|
||||
PFN_vkDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessengerEXT;
|
||||
PFN_vkSubmitDebugUtilsMessageEXT SubmitDebugUtilsMessageEXT;
|
||||
|
||||
// ---- VK_EXT_sample_locations extension commands
|
||||
PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT GetPhysicalDeviceMultisamplePropertiesEXT;
|
||||
|
||||
// ---- VK_EXT_calibrated_timestamps extension commands
|
||||
PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT GetPhysicalDeviceCalibrateableTimeDomainsEXT;
|
||||
|
||||
// ---- VK_FUCHSIA_imagepipe_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_FUCHSIA
|
||||
PFN_vkCreateImagePipeSurfaceFUCHSIA CreateImagePipeSurfaceFUCHSIA;
|
||||
#endif // VK_USE_PLATFORM_FUCHSIA
|
||||
|
||||
// ---- VK_EXT_metal_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
||||
PFN_vkCreateMetalSurfaceEXT CreateMetalSurfaceEXT;
|
||||
#endif // VK_USE_PLATFORM_METAL_EXT
|
||||
|
||||
// ---- VK_NV_cooperative_matrix extension commands
|
||||
PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV GetPhysicalDeviceCooperativeMatrixPropertiesNV;
|
||||
|
||||
// ---- VK_NV_coverage_reduction_mode extension commands
|
||||
PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV;
|
||||
|
||||
// ---- VK_EXT_full_screen_exclusive extension commands
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT GetPhysicalDeviceSurfacePresentModes2EXT;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
// ---- VK_EXT_headless_surface extension commands
|
||||
PFN_vkCreateHeadlessSurfaceEXT CreateHeadlessSurfaceEXT;
|
||||
} VkLayerInstanceDispatchTable;
|
||||
|
||||
// Device function pointer dispatch table
|
||||
typedef struct VkLayerDispatchTable_ {
|
||||
|
||||
// ---- Core 1_0 commands
|
||||
PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
|
||||
PFN_vkDestroyDevice DestroyDevice;
|
||||
PFN_vkGetDeviceQueue GetDeviceQueue;
|
||||
PFN_vkQueueSubmit QueueSubmit;
|
||||
PFN_vkQueueWaitIdle QueueWaitIdle;
|
||||
PFN_vkDeviceWaitIdle DeviceWaitIdle;
|
||||
PFN_vkAllocateMemory AllocateMemory;
|
||||
PFN_vkFreeMemory FreeMemory;
|
||||
PFN_vkMapMemory MapMemory;
|
||||
PFN_vkUnmapMemory UnmapMemory;
|
||||
PFN_vkFlushMappedMemoryRanges FlushMappedMemoryRanges;
|
||||
PFN_vkInvalidateMappedMemoryRanges InvalidateMappedMemoryRanges;
|
||||
PFN_vkGetDeviceMemoryCommitment GetDeviceMemoryCommitment;
|
||||
PFN_vkBindBufferMemory BindBufferMemory;
|
||||
PFN_vkBindImageMemory BindImageMemory;
|
||||
PFN_vkGetBufferMemoryRequirements GetBufferMemoryRequirements;
|
||||
PFN_vkGetImageMemoryRequirements GetImageMemoryRequirements;
|
||||
PFN_vkGetImageSparseMemoryRequirements GetImageSparseMemoryRequirements;
|
||||
PFN_vkQueueBindSparse QueueBindSparse;
|
||||
PFN_vkCreateFence CreateFence;
|
||||
PFN_vkDestroyFence DestroyFence;
|
||||
PFN_vkResetFences ResetFences;
|
||||
PFN_vkGetFenceStatus GetFenceStatus;
|
||||
PFN_vkWaitForFences WaitForFences;
|
||||
PFN_vkCreateSemaphore CreateSemaphore;
|
||||
PFN_vkDestroySemaphore DestroySemaphore;
|
||||
PFN_vkCreateEvent CreateEvent;
|
||||
PFN_vkDestroyEvent DestroyEvent;
|
||||
PFN_vkGetEventStatus GetEventStatus;
|
||||
PFN_vkSetEvent SetEvent;
|
||||
PFN_vkResetEvent ResetEvent;
|
||||
PFN_vkCreateQueryPool CreateQueryPool;
|
||||
PFN_vkDestroyQueryPool DestroyQueryPool;
|
||||
PFN_vkGetQueryPoolResults GetQueryPoolResults;
|
||||
PFN_vkCreateBuffer CreateBuffer;
|
||||
PFN_vkDestroyBuffer DestroyBuffer;
|
||||
PFN_vkCreateBufferView CreateBufferView;
|
||||
PFN_vkDestroyBufferView DestroyBufferView;
|
||||
PFN_vkCreateImage CreateImage;
|
||||
PFN_vkDestroyImage DestroyImage;
|
||||
PFN_vkGetImageSubresourceLayout GetImageSubresourceLayout;
|
||||
PFN_vkCreateImageView CreateImageView;
|
||||
PFN_vkDestroyImageView DestroyImageView;
|
||||
PFN_vkCreateShaderModule CreateShaderModule;
|
||||
PFN_vkDestroyShaderModule DestroyShaderModule;
|
||||
PFN_vkCreatePipelineCache CreatePipelineCache;
|
||||
PFN_vkDestroyPipelineCache DestroyPipelineCache;
|
||||
PFN_vkGetPipelineCacheData GetPipelineCacheData;
|
||||
PFN_vkMergePipelineCaches MergePipelineCaches;
|
||||
PFN_vkCreateGraphicsPipelines CreateGraphicsPipelines;
|
||||
PFN_vkCreateComputePipelines CreateComputePipelines;
|
||||
PFN_vkDestroyPipeline DestroyPipeline;
|
||||
PFN_vkCreatePipelineLayout CreatePipelineLayout;
|
||||
PFN_vkDestroyPipelineLayout DestroyPipelineLayout;
|
||||
PFN_vkCreateSampler CreateSampler;
|
||||
PFN_vkDestroySampler DestroySampler;
|
||||
PFN_vkCreateDescriptorSetLayout CreateDescriptorSetLayout;
|
||||
PFN_vkDestroyDescriptorSetLayout DestroyDescriptorSetLayout;
|
||||
PFN_vkCreateDescriptorPool CreateDescriptorPool;
|
||||
PFN_vkDestroyDescriptorPool DestroyDescriptorPool;
|
||||
PFN_vkResetDescriptorPool ResetDescriptorPool;
|
||||
PFN_vkAllocateDescriptorSets AllocateDescriptorSets;
|
||||
PFN_vkFreeDescriptorSets FreeDescriptorSets;
|
||||
PFN_vkUpdateDescriptorSets UpdateDescriptorSets;
|
||||
PFN_vkCreateFramebuffer CreateFramebuffer;
|
||||
PFN_vkDestroyFramebuffer DestroyFramebuffer;
|
||||
PFN_vkCreateRenderPass CreateRenderPass;
|
||||
PFN_vkDestroyRenderPass DestroyRenderPass;
|
||||
PFN_vkGetRenderAreaGranularity GetRenderAreaGranularity;
|
||||
PFN_vkCreateCommandPool CreateCommandPool;
|
||||
PFN_vkDestroyCommandPool DestroyCommandPool;
|
||||
PFN_vkResetCommandPool ResetCommandPool;
|
||||
PFN_vkAllocateCommandBuffers AllocateCommandBuffers;
|
||||
PFN_vkFreeCommandBuffers FreeCommandBuffers;
|
||||
PFN_vkBeginCommandBuffer BeginCommandBuffer;
|
||||
PFN_vkEndCommandBuffer EndCommandBuffer;
|
||||
PFN_vkResetCommandBuffer ResetCommandBuffer;
|
||||
PFN_vkCmdBindPipeline CmdBindPipeline;
|
||||
PFN_vkCmdSetViewport CmdSetViewport;
|
||||
PFN_vkCmdSetScissor CmdSetScissor;
|
||||
PFN_vkCmdSetLineWidth CmdSetLineWidth;
|
||||
PFN_vkCmdSetDepthBias CmdSetDepthBias;
|
||||
PFN_vkCmdSetBlendConstants CmdSetBlendConstants;
|
||||
PFN_vkCmdSetDepthBounds CmdSetDepthBounds;
|
||||
PFN_vkCmdSetStencilCompareMask CmdSetStencilCompareMask;
|
||||
PFN_vkCmdSetStencilWriteMask CmdSetStencilWriteMask;
|
||||
PFN_vkCmdSetStencilReference CmdSetStencilReference;
|
||||
PFN_vkCmdBindDescriptorSets CmdBindDescriptorSets;
|
||||
PFN_vkCmdBindIndexBuffer CmdBindIndexBuffer;
|
||||
PFN_vkCmdBindVertexBuffers CmdBindVertexBuffers;
|
||||
PFN_vkCmdDraw CmdDraw;
|
||||
PFN_vkCmdDrawIndexed CmdDrawIndexed;
|
||||
PFN_vkCmdDrawIndirect CmdDrawIndirect;
|
||||
PFN_vkCmdDrawIndexedIndirect CmdDrawIndexedIndirect;
|
||||
PFN_vkCmdDispatch CmdDispatch;
|
||||
PFN_vkCmdDispatchIndirect CmdDispatchIndirect;
|
||||
PFN_vkCmdCopyBuffer CmdCopyBuffer;
|
||||
PFN_vkCmdCopyImage CmdCopyImage;
|
||||
PFN_vkCmdBlitImage CmdBlitImage;
|
||||
PFN_vkCmdCopyBufferToImage CmdCopyBufferToImage;
|
||||
PFN_vkCmdCopyImageToBuffer CmdCopyImageToBuffer;
|
||||
PFN_vkCmdUpdateBuffer CmdUpdateBuffer;
|
||||
PFN_vkCmdFillBuffer CmdFillBuffer;
|
||||
PFN_vkCmdClearColorImage CmdClearColorImage;
|
||||
PFN_vkCmdClearDepthStencilImage CmdClearDepthStencilImage;
|
||||
PFN_vkCmdClearAttachments CmdClearAttachments;
|
||||
PFN_vkCmdResolveImage CmdResolveImage;
|
||||
PFN_vkCmdSetEvent CmdSetEvent;
|
||||
PFN_vkCmdResetEvent CmdResetEvent;
|
||||
PFN_vkCmdWaitEvents CmdWaitEvents;
|
||||
PFN_vkCmdPipelineBarrier CmdPipelineBarrier;
|
||||
PFN_vkCmdBeginQuery CmdBeginQuery;
|
||||
PFN_vkCmdEndQuery CmdEndQuery;
|
||||
PFN_vkCmdResetQueryPool CmdResetQueryPool;
|
||||
PFN_vkCmdWriteTimestamp CmdWriteTimestamp;
|
||||
PFN_vkCmdCopyQueryPoolResults CmdCopyQueryPoolResults;
|
||||
PFN_vkCmdPushConstants CmdPushConstants;
|
||||
PFN_vkCmdBeginRenderPass CmdBeginRenderPass;
|
||||
PFN_vkCmdNextSubpass CmdNextSubpass;
|
||||
PFN_vkCmdEndRenderPass CmdEndRenderPass;
|
||||
PFN_vkCmdExecuteCommands CmdExecuteCommands;
|
||||
|
||||
// ---- Core 1_1 commands
|
||||
PFN_vkBindBufferMemory2 BindBufferMemory2;
|
||||
PFN_vkBindImageMemory2 BindImageMemory2;
|
||||
PFN_vkGetDeviceGroupPeerMemoryFeatures GetDeviceGroupPeerMemoryFeatures;
|
||||
PFN_vkCmdSetDeviceMask CmdSetDeviceMask;
|
||||
PFN_vkCmdDispatchBase CmdDispatchBase;
|
||||
PFN_vkGetImageMemoryRequirements2 GetImageMemoryRequirements2;
|
||||
PFN_vkGetBufferMemoryRequirements2 GetBufferMemoryRequirements2;
|
||||
PFN_vkGetImageSparseMemoryRequirements2 GetImageSparseMemoryRequirements2;
|
||||
PFN_vkTrimCommandPool TrimCommandPool;
|
||||
PFN_vkGetDeviceQueue2 GetDeviceQueue2;
|
||||
PFN_vkCreateSamplerYcbcrConversion CreateSamplerYcbcrConversion;
|
||||
PFN_vkDestroySamplerYcbcrConversion DestroySamplerYcbcrConversion;
|
||||
PFN_vkCreateDescriptorUpdateTemplate CreateDescriptorUpdateTemplate;
|
||||
PFN_vkDestroyDescriptorUpdateTemplate DestroyDescriptorUpdateTemplate;
|
||||
PFN_vkUpdateDescriptorSetWithTemplate UpdateDescriptorSetWithTemplate;
|
||||
PFN_vkGetDescriptorSetLayoutSupport GetDescriptorSetLayoutSupport;
|
||||
|
||||
// ---- VK_KHR_swapchain extension commands
|
||||
PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
|
||||
PFN_vkDestroySwapchainKHR DestroySwapchainKHR;
|
||||
PFN_vkGetSwapchainImagesKHR GetSwapchainImagesKHR;
|
||||
PFN_vkAcquireNextImageKHR AcquireNextImageKHR;
|
||||
PFN_vkQueuePresentKHR QueuePresentKHR;
|
||||
PFN_vkGetDeviceGroupPresentCapabilitiesKHR GetDeviceGroupPresentCapabilitiesKHR;
|
||||
PFN_vkGetDeviceGroupSurfacePresentModesKHR GetDeviceGroupSurfacePresentModesKHR;
|
||||
PFN_vkAcquireNextImage2KHR AcquireNextImage2KHR;
|
||||
|
||||
// ---- VK_KHR_display_swapchain extension commands
|
||||
PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR;
|
||||
|
||||
// ---- VK_KHR_device_group extension commands
|
||||
PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR GetDeviceGroupPeerMemoryFeaturesKHR;
|
||||
PFN_vkCmdSetDeviceMaskKHR CmdSetDeviceMaskKHR;
|
||||
PFN_vkCmdDispatchBaseKHR CmdDispatchBaseKHR;
|
||||
|
||||
// ---- VK_KHR_maintenance1 extension commands
|
||||
PFN_vkTrimCommandPoolKHR TrimCommandPoolKHR;
|
||||
|
||||
// ---- VK_KHR_external_memory_win32 extension commands
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetMemoryWin32HandleKHR GetMemoryWin32HandleKHR;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetMemoryWin32HandlePropertiesKHR GetMemoryWin32HandlePropertiesKHR;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
// ---- VK_KHR_external_memory_fd extension commands
|
||||
PFN_vkGetMemoryFdKHR GetMemoryFdKHR;
|
||||
PFN_vkGetMemoryFdPropertiesKHR GetMemoryFdPropertiesKHR;
|
||||
|
||||
// ---- VK_KHR_external_semaphore_win32 extension commands
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkImportSemaphoreWin32HandleKHR ImportSemaphoreWin32HandleKHR;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetSemaphoreWin32HandleKHR GetSemaphoreWin32HandleKHR;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
// ---- VK_KHR_external_semaphore_fd extension commands
|
||||
PFN_vkImportSemaphoreFdKHR ImportSemaphoreFdKHR;
|
||||
PFN_vkGetSemaphoreFdKHR GetSemaphoreFdKHR;
|
||||
|
||||
// ---- VK_KHR_push_descriptor extension commands
|
||||
PFN_vkCmdPushDescriptorSetKHR CmdPushDescriptorSetKHR;
|
||||
PFN_vkCmdPushDescriptorSetWithTemplateKHR CmdPushDescriptorSetWithTemplateKHR;
|
||||
|
||||
// ---- VK_KHR_descriptor_update_template extension commands
|
||||
PFN_vkCreateDescriptorUpdateTemplateKHR CreateDescriptorUpdateTemplateKHR;
|
||||
PFN_vkDestroyDescriptorUpdateTemplateKHR DestroyDescriptorUpdateTemplateKHR;
|
||||
PFN_vkUpdateDescriptorSetWithTemplateKHR UpdateDescriptorSetWithTemplateKHR;
|
||||
|
||||
// ---- VK_KHR_create_renderpass2 extension commands
|
||||
PFN_vkCreateRenderPass2KHR CreateRenderPass2KHR;
|
||||
PFN_vkCmdBeginRenderPass2KHR CmdBeginRenderPass2KHR;
|
||||
PFN_vkCmdNextSubpass2KHR CmdNextSubpass2KHR;
|
||||
PFN_vkCmdEndRenderPass2KHR CmdEndRenderPass2KHR;
|
||||
|
||||
// ---- VK_KHR_shared_presentable_image extension commands
|
||||
PFN_vkGetSwapchainStatusKHR GetSwapchainStatusKHR;
|
||||
|
||||
// ---- VK_KHR_external_fence_win32 extension commands
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkImportFenceWin32HandleKHR ImportFenceWin32HandleKHR;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetFenceWin32HandleKHR GetFenceWin32HandleKHR;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
// ---- VK_KHR_external_fence_fd extension commands
|
||||
PFN_vkImportFenceFdKHR ImportFenceFdKHR;
|
||||
PFN_vkGetFenceFdKHR GetFenceFdKHR;
|
||||
|
||||
// ---- VK_KHR_get_memory_requirements2 extension commands
|
||||
PFN_vkGetImageMemoryRequirements2KHR GetImageMemoryRequirements2KHR;
|
||||
PFN_vkGetBufferMemoryRequirements2KHR GetBufferMemoryRequirements2KHR;
|
||||
PFN_vkGetImageSparseMemoryRequirements2KHR GetImageSparseMemoryRequirements2KHR;
|
||||
|
||||
// ---- VK_KHR_sampler_ycbcr_conversion extension commands
|
||||
PFN_vkCreateSamplerYcbcrConversionKHR CreateSamplerYcbcrConversionKHR;
|
||||
PFN_vkDestroySamplerYcbcrConversionKHR DestroySamplerYcbcrConversionKHR;
|
||||
|
||||
// ---- VK_KHR_bind_memory2 extension commands
|
||||
PFN_vkBindBufferMemory2KHR BindBufferMemory2KHR;
|
||||
PFN_vkBindImageMemory2KHR BindImageMemory2KHR;
|
||||
|
||||
// ---- VK_KHR_maintenance3 extension commands
|
||||
PFN_vkGetDescriptorSetLayoutSupportKHR GetDescriptorSetLayoutSupportKHR;
|
||||
|
||||
// ---- VK_KHR_draw_indirect_count extension commands
|
||||
PFN_vkCmdDrawIndirectCountKHR CmdDrawIndirectCountKHR;
|
||||
PFN_vkCmdDrawIndexedIndirectCountKHR CmdDrawIndexedIndirectCountKHR;
|
||||
|
||||
// ---- VK_EXT_debug_marker extension commands
|
||||
PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT;
|
||||
PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT;
|
||||
PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBeginEXT;
|
||||
PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEndEXT;
|
||||
PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsertEXT;
|
||||
|
||||
// ---- VK_EXT_transform_feedback extension commands
|
||||
PFN_vkCmdBindTransformFeedbackBuffersEXT CmdBindTransformFeedbackBuffersEXT;
|
||||
PFN_vkCmdBeginTransformFeedbackEXT CmdBeginTransformFeedbackEXT;
|
||||
PFN_vkCmdEndTransformFeedbackEXT CmdEndTransformFeedbackEXT;
|
||||
PFN_vkCmdBeginQueryIndexedEXT CmdBeginQueryIndexedEXT;
|
||||
PFN_vkCmdEndQueryIndexedEXT CmdEndQueryIndexedEXT;
|
||||
PFN_vkCmdDrawIndirectByteCountEXT CmdDrawIndirectByteCountEXT;
|
||||
|
||||
// ---- VK_NVX_image_view_handle extension commands
|
||||
PFN_vkGetImageViewHandleNVX GetImageViewHandleNVX;
|
||||
|
||||
// ---- VK_AMD_draw_indirect_count extension commands
|
||||
PFN_vkCmdDrawIndirectCountAMD CmdDrawIndirectCountAMD;
|
||||
PFN_vkCmdDrawIndexedIndirectCountAMD CmdDrawIndexedIndirectCountAMD;
|
||||
|
||||
// ---- VK_AMD_shader_info extension commands
|
||||
PFN_vkGetShaderInfoAMD GetShaderInfoAMD;
|
||||
|
||||
// ---- VK_NV_external_memory_win32 extension commands
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetMemoryWin32HandleNV GetMemoryWin32HandleNV;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
// ---- VK_EXT_conditional_rendering extension commands
|
||||
PFN_vkCmdBeginConditionalRenderingEXT CmdBeginConditionalRenderingEXT;
|
||||
PFN_vkCmdEndConditionalRenderingEXT CmdEndConditionalRenderingEXT;
|
||||
|
||||
// ---- VK_NVX_device_generated_commands extension commands
|
||||
PFN_vkCmdProcessCommandsNVX CmdProcessCommandsNVX;
|
||||
PFN_vkCmdReserveSpaceForCommandsNVX CmdReserveSpaceForCommandsNVX;
|
||||
PFN_vkCreateIndirectCommandsLayoutNVX CreateIndirectCommandsLayoutNVX;
|
||||
PFN_vkDestroyIndirectCommandsLayoutNVX DestroyIndirectCommandsLayoutNVX;
|
||||
PFN_vkCreateObjectTableNVX CreateObjectTableNVX;
|
||||
PFN_vkDestroyObjectTableNVX DestroyObjectTableNVX;
|
||||
PFN_vkRegisterObjectsNVX RegisterObjectsNVX;
|
||||
PFN_vkUnregisterObjectsNVX UnregisterObjectsNVX;
|
||||
|
||||
// ---- VK_NV_clip_space_w_scaling extension commands
|
||||
PFN_vkCmdSetViewportWScalingNV CmdSetViewportWScalingNV;
|
||||
|
||||
// ---- VK_EXT_display_control extension commands
|
||||
PFN_vkDisplayPowerControlEXT DisplayPowerControlEXT;
|
||||
PFN_vkRegisterDeviceEventEXT RegisterDeviceEventEXT;
|
||||
PFN_vkRegisterDisplayEventEXT RegisterDisplayEventEXT;
|
||||
PFN_vkGetSwapchainCounterEXT GetSwapchainCounterEXT;
|
||||
|
||||
// ---- VK_GOOGLE_display_timing extension commands
|
||||
PFN_vkGetRefreshCycleDurationGOOGLE GetRefreshCycleDurationGOOGLE;
|
||||
PFN_vkGetPastPresentationTimingGOOGLE GetPastPresentationTimingGOOGLE;
|
||||
|
||||
// ---- VK_EXT_discard_rectangles extension commands
|
||||
PFN_vkCmdSetDiscardRectangleEXT CmdSetDiscardRectangleEXT;
|
||||
|
||||
// ---- VK_EXT_hdr_metadata extension commands
|
||||
PFN_vkSetHdrMetadataEXT SetHdrMetadataEXT;
|
||||
|
||||
// ---- VK_EXT_debug_utils extension commands
|
||||
PFN_vkSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT;
|
||||
PFN_vkSetDebugUtilsObjectTagEXT SetDebugUtilsObjectTagEXT;
|
||||
PFN_vkQueueBeginDebugUtilsLabelEXT QueueBeginDebugUtilsLabelEXT;
|
||||
PFN_vkQueueEndDebugUtilsLabelEXT QueueEndDebugUtilsLabelEXT;
|
||||
PFN_vkQueueInsertDebugUtilsLabelEXT QueueInsertDebugUtilsLabelEXT;
|
||||
PFN_vkCmdBeginDebugUtilsLabelEXT CmdBeginDebugUtilsLabelEXT;
|
||||
PFN_vkCmdEndDebugUtilsLabelEXT CmdEndDebugUtilsLabelEXT;
|
||||
PFN_vkCmdInsertDebugUtilsLabelEXT CmdInsertDebugUtilsLabelEXT;
|
||||
|
||||
// ---- VK_ANDROID_external_memory_android_hardware_buffer extension commands
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
PFN_vkGetAndroidHardwareBufferPropertiesANDROID GetAndroidHardwareBufferPropertiesANDROID;
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
PFN_vkGetMemoryAndroidHardwareBufferANDROID GetMemoryAndroidHardwareBufferANDROID;
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
|
||||
// ---- VK_EXT_sample_locations extension commands
|
||||
PFN_vkCmdSetSampleLocationsEXT CmdSetSampleLocationsEXT;
|
||||
|
||||
// ---- VK_EXT_image_drm_format_modifier extension commands
|
||||
PFN_vkGetImageDrmFormatModifierPropertiesEXT GetImageDrmFormatModifierPropertiesEXT;
|
||||
|
||||
// ---- VK_EXT_validation_cache extension commands
|
||||
PFN_vkCreateValidationCacheEXT CreateValidationCacheEXT;
|
||||
PFN_vkDestroyValidationCacheEXT DestroyValidationCacheEXT;
|
||||
PFN_vkMergeValidationCachesEXT MergeValidationCachesEXT;
|
||||
PFN_vkGetValidationCacheDataEXT GetValidationCacheDataEXT;
|
||||
|
||||
// ---- VK_NV_shading_rate_image extension commands
|
||||
PFN_vkCmdBindShadingRateImageNV CmdBindShadingRateImageNV;
|
||||
PFN_vkCmdSetViewportShadingRatePaletteNV CmdSetViewportShadingRatePaletteNV;
|
||||
PFN_vkCmdSetCoarseSampleOrderNV CmdSetCoarseSampleOrderNV;
|
||||
|
||||
// ---- VK_NV_ray_tracing extension commands
|
||||
PFN_vkCreateAccelerationStructureNV CreateAccelerationStructureNV;
|
||||
PFN_vkDestroyAccelerationStructureNV DestroyAccelerationStructureNV;
|
||||
PFN_vkGetAccelerationStructureMemoryRequirementsNV GetAccelerationStructureMemoryRequirementsNV;
|
||||
PFN_vkBindAccelerationStructureMemoryNV BindAccelerationStructureMemoryNV;
|
||||
PFN_vkCmdBuildAccelerationStructureNV CmdBuildAccelerationStructureNV;
|
||||
PFN_vkCmdCopyAccelerationStructureNV CmdCopyAccelerationStructureNV;
|
||||
PFN_vkCmdTraceRaysNV CmdTraceRaysNV;
|
||||
PFN_vkCreateRayTracingPipelinesNV CreateRayTracingPipelinesNV;
|
||||
PFN_vkGetRayTracingShaderGroupHandlesNV GetRayTracingShaderGroupHandlesNV;
|
||||
PFN_vkGetAccelerationStructureHandleNV GetAccelerationStructureHandleNV;
|
||||
PFN_vkCmdWriteAccelerationStructuresPropertiesNV CmdWriteAccelerationStructuresPropertiesNV;
|
||||
PFN_vkCompileDeferredNV CompileDeferredNV;
|
||||
|
||||
// ---- VK_EXT_external_memory_host extension commands
|
||||
PFN_vkGetMemoryHostPointerPropertiesEXT GetMemoryHostPointerPropertiesEXT;
|
||||
|
||||
// ---- VK_AMD_buffer_marker extension commands
|
||||
PFN_vkCmdWriteBufferMarkerAMD CmdWriteBufferMarkerAMD;
|
||||
|
||||
// ---- VK_EXT_calibrated_timestamps extension commands
|
||||
PFN_vkGetCalibratedTimestampsEXT GetCalibratedTimestampsEXT;
|
||||
|
||||
// ---- VK_NV_mesh_shader extension commands
|
||||
PFN_vkCmdDrawMeshTasksNV CmdDrawMeshTasksNV;
|
||||
PFN_vkCmdDrawMeshTasksIndirectNV CmdDrawMeshTasksIndirectNV;
|
||||
PFN_vkCmdDrawMeshTasksIndirectCountNV CmdDrawMeshTasksIndirectCountNV;
|
||||
|
||||
// ---- VK_NV_scissor_exclusive extension commands
|
||||
PFN_vkCmdSetExclusiveScissorNV CmdSetExclusiveScissorNV;
|
||||
|
||||
// ---- VK_NV_device_diagnostic_checkpoints extension commands
|
||||
PFN_vkCmdSetCheckpointNV CmdSetCheckpointNV;
|
||||
PFN_vkGetQueueCheckpointDataNV GetQueueCheckpointDataNV;
|
||||
|
||||
// ---- VK_INTEL_performance_query extension commands
|
||||
PFN_vkInitializePerformanceApiINTEL InitializePerformanceApiINTEL;
|
||||
PFN_vkUninitializePerformanceApiINTEL UninitializePerformanceApiINTEL;
|
||||
PFN_vkCmdSetPerformanceMarkerINTEL CmdSetPerformanceMarkerINTEL;
|
||||
PFN_vkCmdSetPerformanceStreamMarkerINTEL CmdSetPerformanceStreamMarkerINTEL;
|
||||
PFN_vkCmdSetPerformanceOverrideINTEL CmdSetPerformanceOverrideINTEL;
|
||||
PFN_vkAcquirePerformanceConfigurationINTEL AcquirePerformanceConfigurationINTEL;
|
||||
PFN_vkReleasePerformanceConfigurationINTEL ReleasePerformanceConfigurationINTEL;
|
||||
PFN_vkQueueSetPerformanceConfigurationINTEL QueueSetPerformanceConfigurationINTEL;
|
||||
PFN_vkGetPerformanceParameterINTEL GetPerformanceParameterINTEL;
|
||||
|
||||
// ---- VK_AMD_display_native_hdr extension commands
|
||||
PFN_vkSetLocalDimmingAMD SetLocalDimmingAMD;
|
||||
|
||||
// ---- VK_EXT_buffer_device_address extension commands
|
||||
PFN_vkGetBufferDeviceAddressEXT GetBufferDeviceAddressEXT;
|
||||
|
||||
// ---- VK_EXT_full_screen_exclusive extension commands
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkAcquireFullScreenExclusiveModeEXT AcquireFullScreenExclusiveModeEXT;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkReleaseFullScreenExclusiveModeEXT ReleaseFullScreenExclusiveModeEXT;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetDeviceGroupSurfacePresentModes2EXT GetDeviceGroupSurfacePresentModes2EXT;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
// ---- VK_EXT_host_query_reset extension commands
|
||||
PFN_vkResetQueryPoolEXT ResetQueryPoolEXT;
|
||||
} VkLayerDispatchTable;
|
||||
|
||||
|
||||
4359
thirdparty/vulkan/loader/vk_loader_extensions.c
vendored
Normal file
4359
thirdparty/vulkan/loader/vk_loader_extensions.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
445
thirdparty/vulkan/loader/vk_loader_extensions.h
vendored
Normal file
445
thirdparty/vulkan/loader/vk_loader_extensions.h
vendored
Normal file
@ -0,0 +1,445 @@
|
||||
// *** THIS FILE IS GENERATED - DO NOT EDIT ***
|
||||
// See loader_extension_generator.py for modifications
|
||||
|
||||
/*
|
||||
* Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2017 Valve Corporation
|
||||
* Copyright (c) 2015-2017 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Mark Lobodzinski <mark@lunarg.com>
|
||||
* Author: Mark Young <marky@lunarg.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Structures defined externally, but used here
|
||||
struct loader_instance;
|
||||
struct loader_device;
|
||||
struct loader_icd_term;
|
||||
struct loader_dev_dispatch_table;
|
||||
|
||||
// Device extension error function
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkDevExtError(VkDevice dev);
|
||||
|
||||
// Extension interception for vkGetInstanceProcAddr function, so we can return
|
||||
// the appropriate information for any instance extensions we know about.
|
||||
bool extension_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr);
|
||||
|
||||
// Extension interception for vkCreateInstance function, so we can properly
|
||||
// detect and enable any instance extension information for extensions we know
|
||||
// about.
|
||||
void extensions_create_instance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo);
|
||||
|
||||
// Extension interception for vkGetDeviceProcAddr function, so we can return
|
||||
// an appropriate terminator if this is one of those few device commands requiring
|
||||
// a terminator.
|
||||
PFN_vkVoidFunction get_extension_device_proc_terminator(struct loader_device *dev, const char *pName);
|
||||
|
||||
// Dispatch table properly filled in with appropriate terminators for the
|
||||
// supported extensions.
|
||||
extern const VkLayerInstanceDispatchTable instance_disp;
|
||||
|
||||
// Array of extension strings for instance extensions we support.
|
||||
extern const char *const LOADER_INSTANCE_EXTENSIONS[];
|
||||
|
||||
VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_icd_term *icd_term, VkInstance inst,
|
||||
const PFN_vkGetInstanceProcAddr fp_gipa);
|
||||
|
||||
// Init Device function pointer dispatch table with core commands
|
||||
VKAPI_ATTR void VKAPI_CALL loader_init_device_dispatch_table(struct loader_dev_dispatch_table *dev_table, PFN_vkGetDeviceProcAddr gpa,
|
||||
VkDevice dev);
|
||||
|
||||
// Init Device function pointer dispatch table with extension commands
|
||||
VKAPI_ATTR void VKAPI_CALL loader_init_device_extension_dispatch_table(struct loader_dev_dispatch_table *dev_table,
|
||||
PFN_vkGetInstanceProcAddr gipa,
|
||||
PFN_vkGetDeviceProcAddr gdpa,
|
||||
VkInstance inst,
|
||||
VkDevice dev);
|
||||
|
||||
// Init Instance function pointer dispatch table with core commands
|
||||
VKAPI_ATTR void VKAPI_CALL loader_init_instance_core_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,
|
||||
VkInstance inst);
|
||||
|
||||
// Init Instance function pointer dispatch table with core commands
|
||||
VKAPI_ATTR void VKAPI_CALL loader_init_instance_extension_dispatch_table(VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa,
|
||||
VkInstance inst);
|
||||
|
||||
// Device command lookup function
|
||||
VKAPI_ATTR void* VKAPI_CALL loader_lookup_device_dispatch_table(const VkLayerDispatchTable *table, const char *name);
|
||||
|
||||
// Instance command lookup function
|
||||
VKAPI_ATTR void* VKAPI_CALL loader_lookup_instance_dispatch_table(const VkLayerInstanceDispatchTable *table, const char *name,
|
||||
bool *found_name);
|
||||
|
||||
VKAPI_ATTR bool VKAPI_CALL loader_icd_init_entries(struct loader_icd_term *icd_term, VkInstance inst,
|
||||
const PFN_vkGetInstanceProcAddr fp_gipa);
|
||||
|
||||
// Loader core instance terminators
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateInstance(
|
||||
const VkInstanceCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkInstance* pInstance);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_DestroyInstance(
|
||||
VkInstance instance,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDevices(
|
||||
VkInstance instance,
|
||||
uint32_t* pPhysicalDeviceCount,
|
||||
VkPhysicalDevice* pPhysicalDevices);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceFeatures* pFeatures);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkFormat format,
|
||||
VkFormatProperties* pFormatProperties);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkFormat format,
|
||||
VkImageType type,
|
||||
VkImageTiling tiling,
|
||||
VkImageUsageFlags usage,
|
||||
VkImageCreateFlags flags,
|
||||
VkImageFormatProperties* pImageFormatProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceProperties* pProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pQueueFamilyPropertyCount,
|
||||
VkQueueFamilyProperties* pQueueFamilyProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceMemoryProperties* pMemoryProperties);
|
||||
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL terminator_GetInstanceProcAddr(
|
||||
VkInstance instance,
|
||||
const char* pName);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDevice(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkDeviceCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkDevice* pDevice);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceExtensionProperties(
|
||||
const VkEnumerateInstanceExtensionPropertiesChain* chain,
|
||||
const char* pLayerName,
|
||||
uint32_t* pPropertyCount,
|
||||
VkExtensionProperties* pProperties);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateDeviceExtensionProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const char* pLayerName,
|
||||
uint32_t* pPropertyCount,
|
||||
VkExtensionProperties* pProperties);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceLayerProperties(
|
||||
const VkEnumerateInstanceLayerPropertiesChain* chain,
|
||||
uint32_t* pPropertyCount,
|
||||
VkLayerProperties* pProperties);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateDeviceLayerProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pPropertyCount,
|
||||
VkLayerProperties* pProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkFormat format,
|
||||
VkImageType type,
|
||||
VkSampleCountFlagBits samples,
|
||||
VkImageUsageFlags usage,
|
||||
VkImageTiling tiling,
|
||||
uint32_t* pPropertyCount,
|
||||
VkSparseImageFormatProperties* pProperties);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumerateInstanceVersion(
|
||||
const VkEnumerateInstanceVersionChain* chain,
|
||||
uint32_t* pApiVersion);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDeviceGroups(
|
||||
VkInstance instance,
|
||||
uint32_t* pPhysicalDeviceGroupCount,
|
||||
VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures2(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceFeatures2* pFeatures);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties2(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceProperties2* pProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties2(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkFormat format,
|
||||
VkFormatProperties2* pFormatProperties);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties2(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
|
||||
VkImageFormatProperties2* pImageFormatProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties2(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pQueueFamilyPropertyCount,
|
||||
VkQueueFamilyProperties2* pQueueFamilyProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties2(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties2(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
|
||||
uint32_t* pPropertyCount,
|
||||
VkSparseImageFormatProperties2* pProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalBufferProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
|
||||
VkExternalBufferProperties* pExternalBufferProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalFenceProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
|
||||
VkExternalFenceProperties* pExternalFenceProperties);
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalSemaphoreProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
|
||||
VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
|
||||
|
||||
// ICD function pointer dispatch table
|
||||
struct loader_icd_term_dispatch {
|
||||
|
||||
// ---- Core 1_0 commands
|
||||
PFN_vkCreateInstance CreateInstance;
|
||||
PFN_vkDestroyInstance DestroyInstance;
|
||||
PFN_vkEnumeratePhysicalDevices EnumeratePhysicalDevices;
|
||||
PFN_vkGetPhysicalDeviceFeatures GetPhysicalDeviceFeatures;
|
||||
PFN_vkGetPhysicalDeviceFormatProperties GetPhysicalDeviceFormatProperties;
|
||||
PFN_vkGetPhysicalDeviceImageFormatProperties GetPhysicalDeviceImageFormatProperties;
|
||||
PFN_vkGetPhysicalDeviceProperties GetPhysicalDeviceProperties;
|
||||
PFN_vkGetPhysicalDeviceQueueFamilyProperties GetPhysicalDeviceQueueFamilyProperties;
|
||||
PFN_vkGetPhysicalDeviceMemoryProperties GetPhysicalDeviceMemoryProperties;
|
||||
PFN_vkGetDeviceProcAddr GetDeviceProcAddr;
|
||||
PFN_vkCreateDevice CreateDevice;
|
||||
PFN_vkEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties;
|
||||
PFN_vkEnumerateDeviceExtensionProperties EnumerateDeviceExtensionProperties;
|
||||
PFN_vkEnumerateInstanceLayerProperties EnumerateInstanceLayerProperties;
|
||||
PFN_vkGetPhysicalDeviceSparseImageFormatProperties GetPhysicalDeviceSparseImageFormatProperties;
|
||||
|
||||
// ---- Core 1_1 commands
|
||||
PFN_vkEnumerateInstanceVersion EnumerateInstanceVersion;
|
||||
PFN_vkEnumeratePhysicalDeviceGroups EnumeratePhysicalDeviceGroups;
|
||||
PFN_vkGetPhysicalDeviceFeatures2 GetPhysicalDeviceFeatures2;
|
||||
PFN_vkGetPhysicalDeviceProperties2 GetPhysicalDeviceProperties2;
|
||||
PFN_vkGetPhysicalDeviceFormatProperties2 GetPhysicalDeviceFormatProperties2;
|
||||
PFN_vkGetPhysicalDeviceImageFormatProperties2 GetPhysicalDeviceImageFormatProperties2;
|
||||
PFN_vkGetPhysicalDeviceQueueFamilyProperties2 GetPhysicalDeviceQueueFamilyProperties2;
|
||||
PFN_vkGetPhysicalDeviceMemoryProperties2 GetPhysicalDeviceMemoryProperties2;
|
||||
PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 GetPhysicalDeviceSparseImageFormatProperties2;
|
||||
PFN_vkGetPhysicalDeviceExternalBufferProperties GetPhysicalDeviceExternalBufferProperties;
|
||||
PFN_vkGetPhysicalDeviceExternalFenceProperties GetPhysicalDeviceExternalFenceProperties;
|
||||
PFN_vkGetPhysicalDeviceExternalSemaphoreProperties GetPhysicalDeviceExternalSemaphoreProperties;
|
||||
|
||||
// ---- VK_KHR_surface extension commands
|
||||
PFN_vkDestroySurfaceKHR DestroySurfaceKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfaceSupportKHR GetPhysicalDeviceSurfaceSupportKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR GetPhysicalDeviceSurfaceCapabilitiesKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfaceFormatsKHR GetPhysicalDeviceSurfaceFormatsKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfacePresentModesKHR GetPhysicalDeviceSurfacePresentModesKHR;
|
||||
|
||||
// ---- VK_KHR_swapchain extension commands
|
||||
PFN_vkCreateSwapchainKHR CreateSwapchainKHR;
|
||||
PFN_vkGetDeviceGroupSurfacePresentModesKHR GetDeviceGroupSurfacePresentModesKHR;
|
||||
PFN_vkGetPhysicalDevicePresentRectanglesKHR GetPhysicalDevicePresentRectanglesKHR;
|
||||
|
||||
// ---- VK_KHR_display extension commands
|
||||
PFN_vkGetPhysicalDeviceDisplayPropertiesKHR GetPhysicalDeviceDisplayPropertiesKHR;
|
||||
PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR GetPhysicalDeviceDisplayPlanePropertiesKHR;
|
||||
PFN_vkGetDisplayPlaneSupportedDisplaysKHR GetDisplayPlaneSupportedDisplaysKHR;
|
||||
PFN_vkGetDisplayModePropertiesKHR GetDisplayModePropertiesKHR;
|
||||
PFN_vkCreateDisplayModeKHR CreateDisplayModeKHR;
|
||||
PFN_vkGetDisplayPlaneCapabilitiesKHR GetDisplayPlaneCapabilitiesKHR;
|
||||
PFN_vkCreateDisplayPlaneSurfaceKHR CreateDisplayPlaneSurfaceKHR;
|
||||
|
||||
// ---- VK_KHR_display_swapchain extension commands
|
||||
PFN_vkCreateSharedSwapchainsKHR CreateSharedSwapchainsKHR;
|
||||
|
||||
// ---- VK_KHR_xlib_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
PFN_vkCreateXlibSurfaceKHR CreateXlibSurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_XLIB_KHR
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR GetPhysicalDeviceXlibPresentationSupportKHR;
|
||||
#endif // VK_USE_PLATFORM_XLIB_KHR
|
||||
|
||||
// ---- VK_KHR_xcb_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
PFN_vkCreateXcbSurfaceKHR CreateXcbSurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_XCB_KHR
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR GetPhysicalDeviceXcbPresentationSupportKHR;
|
||||
#endif // VK_USE_PLATFORM_XCB_KHR
|
||||
|
||||
// ---- VK_KHR_wayland_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
PFN_vkCreateWaylandSurfaceKHR CreateWaylandSurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR GetPhysicalDeviceWaylandPresentationSupportKHR;
|
||||
#endif // VK_USE_PLATFORM_WAYLAND_KHR
|
||||
|
||||
// ---- VK_KHR_android_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
PFN_vkCreateAndroidSurfaceKHR CreateAndroidSurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||
|
||||
// ---- VK_KHR_win32_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkCreateWin32SurfaceKHR CreateWin32SurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR GetPhysicalDeviceWin32PresentationSupportKHR;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
// ---- VK_KHR_get_physical_device_properties2 extension commands
|
||||
PFN_vkGetPhysicalDeviceFeatures2KHR GetPhysicalDeviceFeatures2KHR;
|
||||
PFN_vkGetPhysicalDeviceProperties2KHR GetPhysicalDeviceProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceFormatProperties2KHR GetPhysicalDeviceFormatProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceImageFormatProperties2KHR GetPhysicalDeviceImageFormatProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR GetPhysicalDeviceQueueFamilyProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceMemoryProperties2KHR GetPhysicalDeviceMemoryProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR GetPhysicalDeviceSparseImageFormatProperties2KHR;
|
||||
|
||||
// ---- VK_KHR_device_group_creation extension commands
|
||||
PFN_vkEnumeratePhysicalDeviceGroupsKHR EnumeratePhysicalDeviceGroupsKHR;
|
||||
|
||||
// ---- VK_KHR_external_memory_capabilities extension commands
|
||||
PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR GetPhysicalDeviceExternalBufferPropertiesKHR;
|
||||
|
||||
// ---- VK_KHR_external_semaphore_capabilities extension commands
|
||||
PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR GetPhysicalDeviceExternalSemaphorePropertiesKHR;
|
||||
|
||||
// ---- VK_KHR_external_fence_capabilities extension commands
|
||||
PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR GetPhysicalDeviceExternalFencePropertiesKHR;
|
||||
|
||||
// ---- VK_KHR_get_surface_capabilities2 extension commands
|
||||
PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR GetPhysicalDeviceSurfaceCapabilities2KHR;
|
||||
PFN_vkGetPhysicalDeviceSurfaceFormats2KHR GetPhysicalDeviceSurfaceFormats2KHR;
|
||||
|
||||
// ---- VK_KHR_get_display_properties2 extension commands
|
||||
PFN_vkGetPhysicalDeviceDisplayProperties2KHR GetPhysicalDeviceDisplayProperties2KHR;
|
||||
PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR GetPhysicalDeviceDisplayPlaneProperties2KHR;
|
||||
PFN_vkGetDisplayModeProperties2KHR GetDisplayModeProperties2KHR;
|
||||
PFN_vkGetDisplayPlaneCapabilities2KHR GetDisplayPlaneCapabilities2KHR;
|
||||
|
||||
// ---- VK_EXT_debug_report extension commands
|
||||
PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT;
|
||||
PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT;
|
||||
PFN_vkDebugReportMessageEXT DebugReportMessageEXT;
|
||||
|
||||
// ---- VK_EXT_debug_marker extension commands
|
||||
PFN_vkDebugMarkerSetObjectTagEXT DebugMarkerSetObjectTagEXT;
|
||||
PFN_vkDebugMarkerSetObjectNameEXT DebugMarkerSetObjectNameEXT;
|
||||
|
||||
// ---- VK_GGP_stream_descriptor_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_GGP
|
||||
PFN_vkCreateStreamDescriptorSurfaceGGP CreateStreamDescriptorSurfaceGGP;
|
||||
#endif // VK_USE_PLATFORM_GGP
|
||||
|
||||
// ---- VK_NV_external_memory_capabilities extension commands
|
||||
PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV GetPhysicalDeviceExternalImageFormatPropertiesNV;
|
||||
|
||||
// ---- VK_NN_vi_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_VI_NN
|
||||
PFN_vkCreateViSurfaceNN CreateViSurfaceNN;
|
||||
#endif // VK_USE_PLATFORM_VI_NN
|
||||
|
||||
// ---- VK_NVX_device_generated_commands extension commands
|
||||
PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX GetPhysicalDeviceGeneratedCommandsPropertiesNVX;
|
||||
|
||||
// ---- VK_EXT_direct_mode_display extension commands
|
||||
PFN_vkReleaseDisplayEXT ReleaseDisplayEXT;
|
||||
|
||||
// ---- VK_EXT_acquire_xlib_display extension commands
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
PFN_vkAcquireXlibDisplayEXT AcquireXlibDisplayEXT;
|
||||
#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
PFN_vkGetRandROutputDisplayEXT GetRandROutputDisplayEXT;
|
||||
#endif // VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
|
||||
// ---- VK_EXT_display_surface_counter extension commands
|
||||
PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT GetPhysicalDeviceSurfaceCapabilities2EXT;
|
||||
|
||||
// ---- VK_MVK_ios_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||
PFN_vkCreateIOSSurfaceMVK CreateIOSSurfaceMVK;
|
||||
#endif // VK_USE_PLATFORM_IOS_MVK
|
||||
|
||||
// ---- VK_MVK_macos_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||
PFN_vkCreateMacOSSurfaceMVK CreateMacOSSurfaceMVK;
|
||||
#endif // VK_USE_PLATFORM_MACOS_MVK
|
||||
|
||||
// ---- VK_EXT_debug_utils extension commands
|
||||
PFN_vkSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT;
|
||||
PFN_vkSetDebugUtilsObjectTagEXT SetDebugUtilsObjectTagEXT;
|
||||
PFN_vkCreateDebugUtilsMessengerEXT CreateDebugUtilsMessengerEXT;
|
||||
PFN_vkDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessengerEXT;
|
||||
PFN_vkSubmitDebugUtilsMessageEXT SubmitDebugUtilsMessageEXT;
|
||||
|
||||
// ---- VK_EXT_sample_locations extension commands
|
||||
PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT GetPhysicalDeviceMultisamplePropertiesEXT;
|
||||
|
||||
// ---- VK_EXT_calibrated_timestamps extension commands
|
||||
PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT GetPhysicalDeviceCalibrateableTimeDomainsEXT;
|
||||
|
||||
// ---- VK_FUCHSIA_imagepipe_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_FUCHSIA
|
||||
PFN_vkCreateImagePipeSurfaceFUCHSIA CreateImagePipeSurfaceFUCHSIA;
|
||||
#endif // VK_USE_PLATFORM_FUCHSIA
|
||||
|
||||
// ---- VK_EXT_metal_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
||||
PFN_vkCreateMetalSurfaceEXT CreateMetalSurfaceEXT;
|
||||
#endif // VK_USE_PLATFORM_METAL_EXT
|
||||
|
||||
// ---- VK_NV_cooperative_matrix extension commands
|
||||
PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV GetPhysicalDeviceCooperativeMatrixPropertiesNV;
|
||||
|
||||
// ---- VK_NV_coverage_reduction_mode extension commands
|
||||
PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV GetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV;
|
||||
|
||||
// ---- VK_EXT_full_screen_exclusive extension commands
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT GetPhysicalDeviceSurfacePresentModes2EXT;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
PFN_vkGetDeviceGroupSurfacePresentModes2EXT GetDeviceGroupSurfacePresentModes2EXT;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
|
||||
// ---- VK_EXT_headless_surface extension commands
|
||||
PFN_vkCreateHeadlessSurfaceEXT CreateHeadlessSurfaceEXT;
|
||||
};
|
||||
|
||||
union loader_instance_extension_enables {
|
||||
struct {
|
||||
uint8_t khr_get_physical_device_properties2 : 1;
|
||||
uint8_t khr_device_group_creation : 1;
|
||||
uint8_t khr_external_memory_capabilities : 1;
|
||||
uint8_t khr_external_semaphore_capabilities : 1;
|
||||
uint8_t khr_external_fence_capabilities : 1;
|
||||
uint8_t khr_get_surface_capabilities2 : 1;
|
||||
uint8_t ext_debug_report : 1;
|
||||
uint8_t ggp_stream_descriptor_surface : 1;
|
||||
uint8_t nv_external_memory_capabilities : 1;
|
||||
uint8_t nn_vi_surface : 1;
|
||||
uint8_t ext_direct_mode_display : 1;
|
||||
uint8_t ext_acquire_xlib_display : 1;
|
||||
uint8_t ext_display_surface_counter : 1;
|
||||
uint8_t ext_debug_utils : 1;
|
||||
uint8_t fuchsia_imagepipe_surface : 1;
|
||||
uint8_t ext_metal_surface : 1;
|
||||
};
|
||||
uint64_t padding[4];
|
||||
};
|
||||
|
||||
|
||||
46
thirdparty/vulkan/loader/vk_loader_layer.h
vendored
Executable file
46
thirdparty/vulkan/loader/vk_loader_layer.h
vendored
Executable file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2016 The Khronos Group Inc.
|
||||
* Copyright (c) 2016 Valve Corporation
|
||||
* Copyright (c) 2016 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Mark Lobodzinski <mark@lunarg.com>
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
// Linked list node for tree of debug callbacks
|
||||
typedef struct VkDebugReportContent {
|
||||
VkDebugReportCallbackEXT msgCallback;
|
||||
PFN_vkDebugReportCallbackEXT pfnMsgCallback;
|
||||
VkFlags msgFlags;
|
||||
} VkDebugReportContent;
|
||||
|
||||
typedef struct VkDebugUtilsMessengerContent {
|
||||
VkDebugUtilsMessengerEXT messenger;
|
||||
VkDebugUtilsMessageSeverityFlagsEXT messageSeverity;
|
||||
VkDebugUtilsMessageTypeFlagsEXT messageType;
|
||||
PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback;
|
||||
} VkDebugUtilsMessengerContent;
|
||||
|
||||
typedef struct VkLayerDbgFunctionNode_ {
|
||||
bool is_messenger;
|
||||
union {
|
||||
VkDebugReportContent report;
|
||||
VkDebugUtilsMessengerContent messenger;
|
||||
};
|
||||
void *pUserData;
|
||||
struct VkLayerDbgFunctionNode_ *pNext;
|
||||
} VkLayerDbgFunctionNode;
|
||||
380
thirdparty/vulkan/loader/vk_loader_platform.h
vendored
Executable file
380
thirdparty/vulkan/loader/vk_loader_platform.h
vendored
Executable file
@ -0,0 +1,380 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) 2015-2018 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2018 Valve Corporation
|
||||
* Copyright (c) 2015-2018 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Ian Elliot <ian@lunarg.com>
|
||||
* Author: Jon Ashburn <jon@lunarg.com>
|
||||
* Author: Lenny Komow <lenny@lunarg.com>
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#if defined(_WIN32)
|
||||
// WinSock2.h must be included *BEFORE* windows.h
|
||||
#include <WinSock2.h>
|
||||
#endif // _WIN32
|
||||
|
||||
#include "vulkan/vk_platform.h"
|
||||
#include "vulkan/vk_sdk_platform.h"
|
||||
|
||||
#if defined(__linux__) || defined(__APPLE__)
|
||||
/* Linux-specific common code: */
|
||||
|
||||
// Headers:
|
||||
//#ifndef _GNU_SOURCE
|
||||
//#define _GNU_SOURCE 1
|
||||
//#endif
|
||||
// TBD: Are the contents of the following file used?
|
||||
#include <unistd.h>
|
||||
// Note: The following file is for dynamic loading:
|
||||
#include <dlfcn.h>
|
||||
#include <pthread.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <libgen.h>
|
||||
|
||||
// VK Library Filenames, Paths, etc.:
|
||||
#define PATH_SEPARATOR ':'
|
||||
#define DIRECTORY_SYMBOL '/'
|
||||
|
||||
#define VULKAN_DIR "vulkan/"
|
||||
#define VULKAN_ICDCONF_DIR "icd.d"
|
||||
#define VULKAN_ICD_DIR "icd"
|
||||
#define VULKAN_SETTINGSCONF_DIR "settings.d"
|
||||
#define VULKAN_ELAYERCONF_DIR "explicit_layer.d"
|
||||
#define VULKAN_ILAYERCONF_DIR "implicit_layer.d"
|
||||
#define VULKAN_LAYER_DIR "layer"
|
||||
|
||||
#define VK_DRIVERS_INFO_RELATIVE_DIR VULKAN_DIR VULKAN_ICDCONF_DIR
|
||||
#define VK_SETTINGS_INFO_RELATIVE_DIR VULKAN_DIR VULKAN_SETTINGSCONF_DIR
|
||||
#define VK_ELAYERS_INFO_RELATIVE_DIR VULKAN_DIR VULKAN_ELAYERCONF_DIR
|
||||
#define VK_ILAYERS_INFO_RELATIVE_DIR VULKAN_DIR VULKAN_ILAYERCONF_DIR
|
||||
|
||||
#define VK_DRIVERS_INFO_REGISTRY_LOC ""
|
||||
#define VK_SETTINGS_INFO_REGISTRY_LOC ""
|
||||
#define VK_ELAYERS_INFO_REGISTRY_LOC ""
|
||||
#define VK_ILAYERS_INFO_REGISTRY_LOC ""
|
||||
|
||||
#if !defined(DEFAULT_VK_LAYERS_PATH)
|
||||
#define DEFAULT_VK_LAYERS_PATH ""
|
||||
#endif
|
||||
#if !defined(LAYERS_SOURCE_PATH)
|
||||
#define LAYERS_SOURCE_PATH NULL
|
||||
#endif
|
||||
#define LAYERS_PATH_ENV "VK_LAYER_PATH"
|
||||
#define ENABLED_LAYERS_ENV "VK_INSTANCE_LAYERS"
|
||||
|
||||
// C99:
|
||||
#define PRINTF_SIZE_T_SPECIFIER "%zu"
|
||||
|
||||
// File IO
|
||||
static inline bool loader_platform_file_exists(const char *path) {
|
||||
if (access(path, F_OK))
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool loader_platform_is_path_absolute(const char *path) {
|
||||
if (path[0] == '/')
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline char *loader_platform_dirname(char *path) { return dirname(path); }
|
||||
|
||||
// Dynamic Loading of libraries:
|
||||
typedef void *loader_platform_dl_handle;
|
||||
static inline loader_platform_dl_handle loader_platform_open_library(const char *libPath) {
|
||||
// When loading the library, we use RTLD_LAZY so that not all symbols have to be
|
||||
// resolved at this time (which improves performance). Note that if not all symbols
|
||||
// can be resolved, this could cause crashes later. Use the LD_BIND_NOW environment
|
||||
// variable to force all symbols to be resolved here.
|
||||
return dlopen(libPath, RTLD_LAZY | RTLD_LOCAL);
|
||||
}
|
||||
static inline const char *loader_platform_open_library_error(const char *libPath) { return dlerror(); }
|
||||
static inline void loader_platform_close_library(loader_platform_dl_handle library) { dlclose(library); }
|
||||
static inline void *loader_platform_get_proc_address(loader_platform_dl_handle library, const char *name) {
|
||||
assert(library);
|
||||
assert(name);
|
||||
return dlsym(library, name);
|
||||
}
|
||||
static inline const char *loader_platform_get_proc_address_error(const char *name) { return dlerror(); }
|
||||
|
||||
// Threads:
|
||||
typedef pthread_t loader_platform_thread;
|
||||
#define THREAD_LOCAL_DECL __thread
|
||||
|
||||
// The once init functionality is not used on Linux
|
||||
#define LOADER_PLATFORM_THREAD_ONCE_DECLARATION(var)
|
||||
#define LOADER_PLATFORM_THREAD_ONCE_DEFINITION(var)
|
||||
#define LOADER_PLATFORM_THREAD_ONCE(ctl, func)
|
||||
|
||||
// Thread IDs:
|
||||
typedef pthread_t loader_platform_thread_id;
|
||||
static inline loader_platform_thread_id loader_platform_get_thread_id() { return pthread_self(); }
|
||||
|
||||
// Thread mutex:
|
||||
typedef pthread_mutex_t loader_platform_thread_mutex;
|
||||
static inline void loader_platform_thread_create_mutex(loader_platform_thread_mutex *pMutex) { pthread_mutex_init(pMutex, NULL); }
|
||||
static inline void loader_platform_thread_lock_mutex(loader_platform_thread_mutex *pMutex) { pthread_mutex_lock(pMutex); }
|
||||
static inline void loader_platform_thread_unlock_mutex(loader_platform_thread_mutex *pMutex) { pthread_mutex_unlock(pMutex); }
|
||||
static inline void loader_platform_thread_delete_mutex(loader_platform_thread_mutex *pMutex) { pthread_mutex_destroy(pMutex); }
|
||||
typedef pthread_cond_t loader_platform_thread_cond;
|
||||
static inline void loader_platform_thread_init_cond(loader_platform_thread_cond *pCond) { pthread_cond_init(pCond, NULL); }
|
||||
static inline void loader_platform_thread_cond_wait(loader_platform_thread_cond *pCond, loader_platform_thread_mutex *pMutex) {
|
||||
pthread_cond_wait(pCond, pMutex);
|
||||
}
|
||||
static inline void loader_platform_thread_cond_broadcast(loader_platform_thread_cond *pCond) { pthread_cond_broadcast(pCond); }
|
||||
|
||||
#define loader_stack_alloc(size) alloca(size)
|
||||
|
||||
#elif defined(_WIN32) // defined(__linux__)
|
||||
/* Windows-specific common code: */
|
||||
// WinBase.h defines CreateSemaphore and synchapi.h defines CreateEvent
|
||||
// undefine them to avoid conflicts with VkLayerDispatchTable struct members.
|
||||
#ifdef CreateSemaphore
|
||||
#undef CreateSemaphore
|
||||
#endif
|
||||
#ifdef CreateEvent
|
||||
#undef CreateEvent
|
||||
#endif
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <io.h>
|
||||
#include <stdbool.h>
|
||||
#include <shlwapi.h>
|
||||
#ifdef __cplusplus
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#endif // __cplusplus
|
||||
|
||||
// VK Library Filenames, Paths, etc.:
|
||||
#define PATH_SEPARATOR ';'
|
||||
#define DIRECTORY_SYMBOL '\\'
|
||||
#define DEFAULT_VK_REGISTRY_HIVE HKEY_LOCAL_MACHINE
|
||||
#define DEFAULT_VK_REGISTRY_HIVE_STR "HKEY_LOCAL_MACHINE"
|
||||
#define SECONDARY_VK_REGISTRY_HIVE HKEY_CURRENT_USER
|
||||
#define SECONDARY_VK_REGISTRY_HIVE_STR "HKEY_CURRENT_USER"
|
||||
|
||||
#define VK_DRIVERS_INFO_RELATIVE_DIR ""
|
||||
#define VK_SETTINGS_INFO_RELATIVE_DIR ""
|
||||
#define VK_ELAYERS_INFO_RELATIVE_DIR ""
|
||||
#define VK_ILAYERS_INFO_RELATIVE_DIR ""
|
||||
|
||||
#ifdef _WIN64
|
||||
#define HKR_VK_DRIVER_NAME API_NAME "DriverName"
|
||||
#else
|
||||
#define HKR_VK_DRIVER_NAME API_NAME "DriverNameWow"
|
||||
#endif
|
||||
#define VK_DRIVERS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\" API_NAME "\\Drivers"
|
||||
#define VK_SETTINGS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\" API_NAME "\\Settings"
|
||||
#define VK_ELAYERS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\" API_NAME "\\ExplicitLayers"
|
||||
#define VK_ILAYERS_INFO_REGISTRY_LOC "SOFTWARE\\Khronos\\" API_NAME "\\ImplicitLayers"
|
||||
|
||||
#if !defined(DEFAULT_VK_LAYERS_PATH)
|
||||
#define DEFAULT_VK_LAYERS_PATH ""
|
||||
#endif
|
||||
#if !defined(LAYERS_SOURCE_PATH)
|
||||
#define LAYERS_SOURCE_PATH NULL
|
||||
#endif
|
||||
#define LAYERS_PATH_ENV "VK_LAYER_PATH"
|
||||
#define ENABLED_LAYERS_ENV "VK_INSTANCE_LAYERS"
|
||||
|
||||
#define PRINTF_SIZE_T_SPECIFIER "%Iu"
|
||||
|
||||
#if defined(_WIN32)
|
||||
// Get the key for the plug n play driver registry
|
||||
// The string returned by this function should NOT be freed
|
||||
static inline const char *LoaderPnpDriverRegistry() {
|
||||
BOOL is_wow;
|
||||
IsWow64Process(GetCurrentProcess(), &is_wow);
|
||||
return is_wow ? (API_NAME "DriverNameWow") : (API_NAME "DriverName");
|
||||
}
|
||||
|
||||
// Get the key for the plug 'n play explicit layer registry
|
||||
// The string returned by this function should NOT be freed
|
||||
static inline const char *LoaderPnpELayerRegistry() {
|
||||
BOOL is_wow;
|
||||
IsWow64Process(GetCurrentProcess(), &is_wow);
|
||||
return is_wow ? (API_NAME "ExplicitLayersWow") : (API_NAME "ExplicitLayers");
|
||||
}
|
||||
// Get the key for the plug 'n play implicit layer registry
|
||||
// The string returned by this function should NOT be freed
|
||||
|
||||
static inline const char *LoaderPnpILayerRegistry() {
|
||||
BOOL is_wow;
|
||||
IsWow64Process(GetCurrentProcess(), &is_wow);
|
||||
return is_wow ? (API_NAME "ImplicitLayersWow") : (API_NAME "ImplicitLayers");
|
||||
}
|
||||
#endif
|
||||
|
||||
// File IO
|
||||
static bool loader_platform_file_exists(const char *path) {
|
||||
if ((_access(path, 0)) == -1)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool loader_platform_is_path_absolute(const char *path) {
|
||||
if (!path || !*path) {
|
||||
return false;
|
||||
}
|
||||
if (*path == DIRECTORY_SYMBOL || path[1] == ':') {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// WIN32 runtime doesn't have dirname().
|
||||
static inline char *loader_platform_dirname(char *path) {
|
||||
char *current, *next;
|
||||
|
||||
// TODO/TBD: Do we need to deal with the Windows's ":" character?
|
||||
|
||||
for (current = path; *current != '\0'; current = next) {
|
||||
next = strchr(current, DIRECTORY_SYMBOL);
|
||||
if (next == NULL) {
|
||||
if (current != path) *(current - 1) = '\0';
|
||||
return path;
|
||||
} else {
|
||||
// Point one character past the DIRECTORY_SYMBOL:
|
||||
next++;
|
||||
}
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
// WIN32 runtime doesn't have basename().
|
||||
// Microsoft also doesn't have basename(). Paths are different on Windows, and
|
||||
// so this is just a temporary solution in order to get us compiling, so that we
|
||||
// can test some scenarios, and develop the correct solution for Windows.
|
||||
// TODO: Develop a better, permanent solution for Windows, to replace this
|
||||
// temporary code:
|
||||
static char *loader_platform_basename(char *pathname) {
|
||||
char *current, *next;
|
||||
|
||||
// TODO/TBD: Do we need to deal with the Windows's ":" character?
|
||||
|
||||
for (current = pathname; *current != '\0'; current = next) {
|
||||
next = strchr(current, DIRECTORY_SYMBOL);
|
||||
if (next == NULL) {
|
||||
// No more DIRECTORY_SYMBOL's so return p:
|
||||
return current;
|
||||
} else {
|
||||
// Point one character past the DIRECTORY_SYMBOL:
|
||||
next++;
|
||||
}
|
||||
}
|
||||
// We shouldn't get to here, but this makes the compiler happy:
|
||||
return current;
|
||||
}
|
||||
|
||||
// Dynamic Loading:
|
||||
typedef HMODULE loader_platform_dl_handle;
|
||||
static loader_platform_dl_handle loader_platform_open_library(const char *lib_path) {
|
||||
// Try loading the library the original way first.
|
||||
loader_platform_dl_handle lib_handle = LoadLibrary(lib_path);
|
||||
if (lib_handle == NULL && GetLastError() == ERROR_MOD_NOT_FOUND) {
|
||||
// If that failed, then try loading it with broader search folders.
|
||||
lib_handle = LoadLibraryEx(lib_path, NULL, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR);
|
||||
}
|
||||
return lib_handle;
|
||||
}
|
||||
static char *loader_platform_open_library_error(const char *libPath) {
|
||||
static char errorMsg[164];
|
||||
(void)snprintf(errorMsg, 163, "Failed to open dynamic library \"%s\" with error %lu", libPath, GetLastError());
|
||||
return errorMsg;
|
||||
}
|
||||
static void loader_platform_close_library(loader_platform_dl_handle library) { FreeLibrary(library); }
|
||||
static void *loader_platform_get_proc_address(loader_platform_dl_handle library, const char *name) {
|
||||
assert(library);
|
||||
assert(name);
|
||||
return (void *)GetProcAddress(library, name);
|
||||
}
|
||||
static char *loader_platform_get_proc_address_error(const char *name) {
|
||||
static char errorMsg[120];
|
||||
(void)snprintf(errorMsg, 119, "Failed to find function \"%s\" in dynamic library", name);
|
||||
return errorMsg;
|
||||
}
|
||||
|
||||
// Threads:
|
||||
typedef HANDLE loader_platform_thread;
|
||||
#define THREAD_LOCAL_DECL __declspec(thread)
|
||||
|
||||
// The once init functionality is not used when building a DLL on Windows. This is because there is no way to clean up the
|
||||
// resources allocated by anything allocated by once init. This isn't a problem for static libraries, but it is for dynamic
|
||||
// ones. When building a DLL, we use DllMain() instead to allow properly cleaning up resources.
|
||||
#if defined(LOADER_DYNAMIC_LIB)
|
||||
#define LOADER_PLATFORM_THREAD_ONCE_DECLARATION(var)
|
||||
#define LOADER_PLATFORM_THREAD_ONCE_DEFINITION(var)
|
||||
#define LOADER_PLATFORM_THREAD_ONCE(ctl, func)
|
||||
#else
|
||||
#define LOADER_PLATFORM_THREAD_ONCE_DECLARATION(var) INIT_ONCE var = INIT_ONCE_STATIC_INIT;
|
||||
#define LOADER_PLATFORM_THREAD_ONCE_DEFINITION(var) INIT_ONCE var;
|
||||
#define LOADER_PLATFORM_THREAD_ONCE(ctl, func) loader_platform_thread_once_fn(ctl, func)
|
||||
static BOOL CALLBACK InitFuncWrapper(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context) {
|
||||
void (*func)(void) = (void (*)(void))Parameter;
|
||||
func();
|
||||
return TRUE;
|
||||
}
|
||||
static void loader_platform_thread_once_fn(void *ctl, void (*func)(void)) {
|
||||
assert(func != NULL);
|
||||
assert(ctl != NULL);
|
||||
InitOnceExecuteOnce((PINIT_ONCE)ctl, InitFuncWrapper, (void *)func, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Thread IDs:
|
||||
typedef DWORD loader_platform_thread_id;
|
||||
static loader_platform_thread_id loader_platform_get_thread_id() { return GetCurrentThreadId(); }
|
||||
|
||||
// Thread mutex:
|
||||
typedef CRITICAL_SECTION loader_platform_thread_mutex;
|
||||
static void loader_platform_thread_create_mutex(loader_platform_thread_mutex *pMutex) { InitializeCriticalSection(pMutex); }
|
||||
static void loader_platform_thread_lock_mutex(loader_platform_thread_mutex *pMutex) { EnterCriticalSection(pMutex); }
|
||||
static void loader_platform_thread_unlock_mutex(loader_platform_thread_mutex *pMutex) { LeaveCriticalSection(pMutex); }
|
||||
static void loader_platform_thread_delete_mutex(loader_platform_thread_mutex *pMutex) { DeleteCriticalSection(pMutex); }
|
||||
typedef CONDITION_VARIABLE loader_platform_thread_cond;
|
||||
static void loader_platform_thread_init_cond(loader_platform_thread_cond *pCond) { InitializeConditionVariable(pCond); }
|
||||
static void loader_platform_thread_cond_wait(loader_platform_thread_cond *pCond, loader_platform_thread_mutex *pMutex) {
|
||||
SleepConditionVariableCS(pCond, pMutex, INFINITE);
|
||||
}
|
||||
static void loader_platform_thread_cond_broadcast(loader_platform_thread_cond *pCond) { WakeAllConditionVariable(pCond); }
|
||||
|
||||
#define loader_stack_alloc(size) _alloca(size)
|
||||
#else // defined(_WIN32)
|
||||
|
||||
#error The "loader_platform.h" file must be modified for this OS.
|
||||
|
||||
// NOTE: In order to support another OS, an #elif needs to be added (above the
|
||||
// "#else // defined(_WIN32)") for that OS, and OS-specific versions of the
|
||||
// contents of this file must be created.
|
||||
|
||||
// NOTE: Other OS-specific changes are also needed for this OS. Search for
|
||||
// files with "WIN32" in it, as a quick way to find files that must be changed.
|
||||
|
||||
#endif // defined(_WIN32)
|
||||
|
||||
// returns true if the given string appears to be a relative or absolute
|
||||
// path, as opposed to a bare filename.
|
||||
static inline bool loader_platform_is_path(const char *path) { return strchr(path, DIRECTORY_SYMBOL) != NULL; }
|
||||
383
thirdparty/vulkan/loader/vk_object_types.h
vendored
Normal file
383
thirdparty/vulkan/loader/vk_object_types.h
vendored
Normal file
@ -0,0 +1,383 @@
|
||||
// *** THIS FILE IS GENERATED - DO NOT EDIT ***
|
||||
// See helper_file_generator.py for modifications
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2017 Valve Corporation
|
||||
* Copyright (c) 2015-2017 LunarG, Inc.
|
||||
* Copyright (c) 2015-2017 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Mark Lobodzinski <mark@lunarg.com>
|
||||
* Author: Courtney Goeltzenleuchter <courtneygo@google.com>
|
||||
* Author: Tobin Ehlis <tobine@google.com>
|
||||
* Author: Chris Forbes <chrisforbes@google.com>
|
||||
* Author: John Zulauf<jzulauf@lunarg.com>
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
// Object Type enum for validation layer internal object handling
|
||||
typedef enum VulkanObjectType {
|
||||
kVulkanObjectTypeUnknown = 0,
|
||||
kVulkanObjectTypeInstance = 1,
|
||||
kVulkanObjectTypePhysicalDevice = 2,
|
||||
kVulkanObjectTypeDevice = 3,
|
||||
kVulkanObjectTypeQueue = 4,
|
||||
kVulkanObjectTypeSemaphore = 5,
|
||||
kVulkanObjectTypeCommandBuffer = 6,
|
||||
kVulkanObjectTypeFence = 7,
|
||||
kVulkanObjectTypeDeviceMemory = 8,
|
||||
kVulkanObjectTypeBuffer = 9,
|
||||
kVulkanObjectTypeImage = 10,
|
||||
kVulkanObjectTypeEvent = 11,
|
||||
kVulkanObjectTypeQueryPool = 12,
|
||||
kVulkanObjectTypeBufferView = 13,
|
||||
kVulkanObjectTypeImageView = 14,
|
||||
kVulkanObjectTypeShaderModule = 15,
|
||||
kVulkanObjectTypePipelineCache = 16,
|
||||
kVulkanObjectTypePipelineLayout = 17,
|
||||
kVulkanObjectTypeRenderPass = 18,
|
||||
kVulkanObjectTypePipeline = 19,
|
||||
kVulkanObjectTypeDescriptorSetLayout = 20,
|
||||
kVulkanObjectTypeSampler = 21,
|
||||
kVulkanObjectTypeDescriptorPool = 22,
|
||||
kVulkanObjectTypeDescriptorSet = 23,
|
||||
kVulkanObjectTypeFramebuffer = 24,
|
||||
kVulkanObjectTypeCommandPool = 25,
|
||||
kVulkanObjectTypeSamplerYcbcrConversion = 26,
|
||||
kVulkanObjectTypeDescriptorUpdateTemplate = 27,
|
||||
kVulkanObjectTypeSurfaceKHR = 28,
|
||||
kVulkanObjectTypeSwapchainKHR = 29,
|
||||
kVulkanObjectTypeDisplayKHR = 30,
|
||||
kVulkanObjectTypeDisplayModeKHR = 31,
|
||||
kVulkanObjectTypeDebugReportCallbackEXT = 32,
|
||||
kVulkanObjectTypeObjectTableNVX = 33,
|
||||
kVulkanObjectTypeIndirectCommandsLayoutNVX = 34,
|
||||
kVulkanObjectTypeDebugUtilsMessengerEXT = 35,
|
||||
kVulkanObjectTypeValidationCacheEXT = 36,
|
||||
kVulkanObjectTypeAccelerationStructureNV = 37,
|
||||
kVulkanObjectTypePerformanceConfigurationINTEL = 38,
|
||||
kVulkanObjectTypeMax = 39,
|
||||
// Aliases for backwards compatibilty of "promoted" types
|
||||
kVulkanObjectTypeDescriptorUpdateTemplateKHR = kVulkanObjectTypeDescriptorUpdateTemplate,
|
||||
kVulkanObjectTypeSamplerYcbcrConversionKHR = kVulkanObjectTypeSamplerYcbcrConversion,
|
||||
} VulkanObjectType;
|
||||
|
||||
// Array of object name strings for OBJECT_TYPE enum conversion
|
||||
static const char * const object_string[kVulkanObjectTypeMax] = {
|
||||
"Unknown",
|
||||
"Instance",
|
||||
"PhysicalDevice",
|
||||
"Device",
|
||||
"Queue",
|
||||
"Semaphore",
|
||||
"CommandBuffer",
|
||||
"Fence",
|
||||
"DeviceMemory",
|
||||
"Buffer",
|
||||
"Image",
|
||||
"Event",
|
||||
"QueryPool",
|
||||
"BufferView",
|
||||
"ImageView",
|
||||
"ShaderModule",
|
||||
"PipelineCache",
|
||||
"PipelineLayout",
|
||||
"RenderPass",
|
||||
"Pipeline",
|
||||
"DescriptorSetLayout",
|
||||
"Sampler",
|
||||
"DescriptorPool",
|
||||
"DescriptorSet",
|
||||
"Framebuffer",
|
||||
"CommandPool",
|
||||
"SamplerYcbcrConversion",
|
||||
"DescriptorUpdateTemplate",
|
||||
"SurfaceKHR",
|
||||
"SwapchainKHR",
|
||||
"DisplayKHR",
|
||||
"DisplayModeKHR",
|
||||
"DebugReportCallbackEXT",
|
||||
"ObjectTableNVX",
|
||||
"IndirectCommandsLayoutNVX",
|
||||
"DebugUtilsMessengerEXT",
|
||||
"ValidationCacheEXT",
|
||||
"AccelerationStructureNV",
|
||||
"PerformanceConfigurationINTEL",
|
||||
};
|
||||
|
||||
// Helper array to get Vulkan VK_EXT_debug_report object type enum from the internal layers version
|
||||
const VkDebugReportObjectTypeEXT get_debug_report_enum[] = {
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeUnknown
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, // kVulkanObjectTypeInstance
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, // kVulkanObjectTypePhysicalDevice
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, // kVulkanObjectTypeDevice
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, // kVulkanObjectTypeQueue
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, // kVulkanObjectTypeSemaphore
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, // kVulkanObjectTypeCommandBuffer
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, // kVulkanObjectTypeFence
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, // kVulkanObjectTypeDeviceMemory
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, // kVulkanObjectTypeBuffer
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, // kVulkanObjectTypeImage
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, // kVulkanObjectTypeEvent
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, // kVulkanObjectTypeQueryPool
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, // kVulkanObjectTypeBufferView
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, // kVulkanObjectTypeImageView
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, // kVulkanObjectTypeShaderModule
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, // kVulkanObjectTypePipelineCache
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, // kVulkanObjectTypePipelineLayout
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, // kVulkanObjectTypeRenderPass
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, // kVulkanObjectTypePipeline
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, // kVulkanObjectTypeDescriptorSetLayout
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, // kVulkanObjectTypeSampler
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, // kVulkanObjectTypeDescriptorPool
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, // kVulkanObjectTypeDescriptorSet
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, // kVulkanObjectTypeFramebuffer
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, // kVulkanObjectTypeCommandPool
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, // kVulkanObjectTypeSamplerYcbcrConversion
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, // kVulkanObjectTypeDescriptorUpdateTemplate
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, // kVulkanObjectTypeSurfaceKHR
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, // kVulkanObjectTypeSwapchainKHR
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT, // kVulkanObjectTypeDisplayKHR
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT, // kVulkanObjectTypeDisplayModeKHR
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, // kVulkanObjectTypeDebugReportCallbackEXT
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT, // kVulkanObjectTypeObjectTableNVX
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT, // kVulkanObjectTypeIndirectCommandsLayoutNVX
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeDebugUtilsMessengerEXT
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT, // kVulkanObjectTypeValidationCacheEXT
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT, // kVulkanObjectTypeAccelerationStructureNV
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypePerformanceConfigurationINTEL
|
||||
};
|
||||
|
||||
// Helper array to get Official Vulkan VkObjectType enum from the internal layers version
|
||||
const VkObjectType get_object_type_enum[] = {
|
||||
VK_OBJECT_TYPE_UNKNOWN, // kVulkanObjectTypeUnknown
|
||||
VK_OBJECT_TYPE_INSTANCE, // kVulkanObjectTypeInstance
|
||||
VK_OBJECT_TYPE_PHYSICAL_DEVICE, // kVulkanObjectTypePhysicalDevice
|
||||
VK_OBJECT_TYPE_DEVICE, // kVulkanObjectTypeDevice
|
||||
VK_OBJECT_TYPE_QUEUE, // kVulkanObjectTypeQueue
|
||||
VK_OBJECT_TYPE_SEMAPHORE, // kVulkanObjectTypeSemaphore
|
||||
VK_OBJECT_TYPE_COMMAND_BUFFER, // kVulkanObjectTypeCommandBuffer
|
||||
VK_OBJECT_TYPE_FENCE, // kVulkanObjectTypeFence
|
||||
VK_OBJECT_TYPE_DEVICE_MEMORY, // kVulkanObjectTypeDeviceMemory
|
||||
VK_OBJECT_TYPE_BUFFER, // kVulkanObjectTypeBuffer
|
||||
VK_OBJECT_TYPE_IMAGE, // kVulkanObjectTypeImage
|
||||
VK_OBJECT_TYPE_EVENT, // kVulkanObjectTypeEvent
|
||||
VK_OBJECT_TYPE_QUERY_POOL, // kVulkanObjectTypeQueryPool
|
||||
VK_OBJECT_TYPE_BUFFER_VIEW, // kVulkanObjectTypeBufferView
|
||||
VK_OBJECT_TYPE_IMAGE_VIEW, // kVulkanObjectTypeImageView
|
||||
VK_OBJECT_TYPE_SHADER_MODULE, // kVulkanObjectTypeShaderModule
|
||||
VK_OBJECT_TYPE_PIPELINE_CACHE, // kVulkanObjectTypePipelineCache
|
||||
VK_OBJECT_TYPE_PIPELINE_LAYOUT, // kVulkanObjectTypePipelineLayout
|
||||
VK_OBJECT_TYPE_RENDER_PASS, // kVulkanObjectTypeRenderPass
|
||||
VK_OBJECT_TYPE_PIPELINE, // kVulkanObjectTypePipeline
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, // kVulkanObjectTypeDescriptorSetLayout
|
||||
VK_OBJECT_TYPE_SAMPLER, // kVulkanObjectTypeSampler
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_POOL, // kVulkanObjectTypeDescriptorPool
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_SET, // kVulkanObjectTypeDescriptorSet
|
||||
VK_OBJECT_TYPE_FRAMEBUFFER, // kVulkanObjectTypeFramebuffer
|
||||
VK_OBJECT_TYPE_COMMAND_POOL, // kVulkanObjectTypeCommandPool
|
||||
VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, // kVulkanObjectTypeSamplerYcbcrConversion
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, // kVulkanObjectTypeDescriptorUpdateTemplate
|
||||
VK_OBJECT_TYPE_SURFACE_KHR, // kVulkanObjectTypeSurfaceKHR
|
||||
VK_OBJECT_TYPE_SWAPCHAIN_KHR, // kVulkanObjectTypeSwapchainKHR
|
||||
VK_OBJECT_TYPE_DISPLAY_KHR, // kVulkanObjectTypeDisplayKHR
|
||||
VK_OBJECT_TYPE_DISPLAY_MODE_KHR, // kVulkanObjectTypeDisplayModeKHR
|
||||
VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT, // kVulkanObjectTypeDebugReportCallbackEXT
|
||||
VK_OBJECT_TYPE_OBJECT_TABLE_NVX, // kVulkanObjectTypeObjectTableNVX
|
||||
VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX, // kVulkanObjectTypeIndirectCommandsLayoutNVX
|
||||
VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, // kVulkanObjectTypeDebugUtilsMessengerEXT
|
||||
VK_OBJECT_TYPE_VALIDATION_CACHE_EXT, // kVulkanObjectTypeValidationCacheEXT
|
||||
VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV, // kVulkanObjectTypeAccelerationStructureNV
|
||||
VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL, // kVulkanObjectTypePerformanceConfigurationINTEL
|
||||
};
|
||||
|
||||
// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType
|
||||
static inline VkObjectType convertDebugReportObjectToCoreObject(VkDebugReportObjectTypeEXT debug_report_obj){
|
||||
if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT) {
|
||||
return VK_OBJECT_TYPE_UNKNOWN;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT) {
|
||||
return VK_OBJECT_TYPE_UNKNOWN;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT) {
|
||||
return VK_OBJECT_TYPE_INSTANCE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT) {
|
||||
return VK_OBJECT_TYPE_PHYSICAL_DEVICE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT) {
|
||||
return VK_OBJECT_TYPE_DEVICE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT) {
|
||||
return VK_OBJECT_TYPE_QUEUE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT) {
|
||||
return VK_OBJECT_TYPE_SEMAPHORE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT) {
|
||||
return VK_OBJECT_TYPE_COMMAND_BUFFER;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT) {
|
||||
return VK_OBJECT_TYPE_FENCE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT) {
|
||||
return VK_OBJECT_TYPE_DEVICE_MEMORY;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT) {
|
||||
return VK_OBJECT_TYPE_BUFFER;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT) {
|
||||
return VK_OBJECT_TYPE_IMAGE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT) {
|
||||
return VK_OBJECT_TYPE_EVENT;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT) {
|
||||
return VK_OBJECT_TYPE_QUERY_POOL;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT) {
|
||||
return VK_OBJECT_TYPE_BUFFER_VIEW;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT) {
|
||||
return VK_OBJECT_TYPE_IMAGE_VIEW;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT) {
|
||||
return VK_OBJECT_TYPE_SHADER_MODULE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT) {
|
||||
return VK_OBJECT_TYPE_PIPELINE_CACHE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT) {
|
||||
return VK_OBJECT_TYPE_PIPELINE_LAYOUT;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT) {
|
||||
return VK_OBJECT_TYPE_RENDER_PASS;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT) {
|
||||
return VK_OBJECT_TYPE_PIPELINE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT) {
|
||||
return VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT) {
|
||||
return VK_OBJECT_TYPE_SAMPLER;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT) {
|
||||
return VK_OBJECT_TYPE_DESCRIPTOR_POOL;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT) {
|
||||
return VK_OBJECT_TYPE_DESCRIPTOR_SET;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT) {
|
||||
return VK_OBJECT_TYPE_FRAMEBUFFER;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT) {
|
||||
return VK_OBJECT_TYPE_COMMAND_POOL;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT) {
|
||||
return VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT) {
|
||||
return VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT) {
|
||||
return VK_OBJECT_TYPE_SURFACE_KHR;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT) {
|
||||
return VK_OBJECT_TYPE_SWAPCHAIN_KHR;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT) {
|
||||
return VK_OBJECT_TYPE_DISPLAY_KHR;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT) {
|
||||
return VK_OBJECT_TYPE_DISPLAY_MODE_KHR;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT) {
|
||||
return VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT) {
|
||||
return VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT) {
|
||||
return VK_OBJECT_TYPE_OBJECT_TABLE_NVX;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT) {
|
||||
return VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT) {
|
||||
return VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT) {
|
||||
return VK_OBJECT_TYPE_VALIDATION_CACHE_EXT;
|
||||
} else if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT) {
|
||||
return VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV;
|
||||
}
|
||||
return VK_OBJECT_TYPE_UNKNOWN;
|
||||
}
|
||||
|
||||
// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType
|
||||
static inline VkDebugReportObjectTypeEXT convertCoreObjectToDebugReportObject(VkObjectType core_report_obj){
|
||||
if (core_report_obj == VK_OBJECT_TYPE_UNKNOWN) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_UNKNOWN) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_INSTANCE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_PHYSICAL_DEVICE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_DEVICE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_QUEUE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_SEMAPHORE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_COMMAND_BUFFER) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_FENCE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_DEVICE_MEMORY) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_BUFFER) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_IMAGE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_EVENT) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_QUERY_POOL) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_BUFFER_VIEW) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_IMAGE_VIEW) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_SHADER_MODULE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_PIPELINE_CACHE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_PIPELINE_LAYOUT) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_RENDER_PASS) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_PIPELINE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_SAMPLER) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_DESCRIPTOR_POOL) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_DESCRIPTOR_SET) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_FRAMEBUFFER) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_COMMAND_POOL) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_SURFACE_KHR) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_SWAPCHAIN_KHR) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_DISPLAY_KHR) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_DISPLAY_MODE_KHR) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_OBJECT_TABLE_NVX) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_VALIDATION_CACHE_EXT) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT;
|
||||
} else if (core_report_obj == VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV) {
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT;
|
||||
}
|
||||
return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;
|
||||
}
|
||||
1940
thirdparty/vulkan/loader/wsi.c
vendored
Executable file
1940
thirdparty/vulkan/loader/wsi.c
vendored
Executable file
File diff suppressed because it is too large
Load Diff
177
thirdparty/vulkan/loader/wsi.h
vendored
Executable file
177
thirdparty/vulkan/loader/wsi.h
vendored
Executable file
@ -0,0 +1,177 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2016 Valve Corporation
|
||||
* Copyright (c) 2015-2016 LunarG, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Author: Ian Elliott <ian@lunarg.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef WSI_H
|
||||
#define WSI_H
|
||||
|
||||
#include "vk_loader_platform.h"
|
||||
#include "loader.h"
|
||||
|
||||
typedef struct {
|
||||
union {
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
VkIcdSurfaceWayland wayland_surf;
|
||||
#endif // VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
VkIcdSurfaceWin32 win_surf;
|
||||
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
VkIcdSurfaceXcb xcb_surf;
|
||||
#endif // VK_USE_PLATFORM_XCB_KHR
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
VkIcdSurfaceXlib xlib_surf;
|
||||
#endif // VK_USE_PLATFORM_XLIB_KHR
|
||||
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||
VkIcdSurfaceMacOS macos_surf;
|
||||
#endif // VK_USE_PLATFORM_MACOS_MVK
|
||||
VkIcdSurfaceDisplay display_surf;
|
||||
VkIcdSurfaceHeadless headless_surf;
|
||||
};
|
||||
uint32_t base_size; // Size of VkIcdSurfaceBase
|
||||
uint32_t platform_size; // Size of corresponding VkIcdSurfaceXXX
|
||||
uint32_t non_platform_offset; // Start offset to base_size
|
||||
uint32_t entire_size; // Size of entire VkIcdSurface
|
||||
VkSurfaceKHR *real_icd_surfaces;
|
||||
} VkIcdSurface;
|
||||
|
||||
bool wsi_swapchain_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr);
|
||||
|
||||
void wsi_create_instance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo);
|
||||
bool wsi_unsupported_instance_extension(const VkExtensionProperties *ext_prop);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateHeadlessSurfaceEXT(VkInstance instance,
|
||||
const VkHeadlessSurfaceCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface,
|
||||
const VkAllocationCallbacks *pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex, VkSurfaceKHR surface,
|
||||
VkBool32 *pSupported);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice,
|
||||
VkSurfaceKHR surface,
|
||||
VkSurfaceCapabilitiesKHR *pSurfaceCapabilities);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface,
|
||||
uint32_t *pSurfaceFormatCount,
|
||||
VkSurfaceFormatKHR *pSurfaceFormats);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice,
|
||||
VkSurfaceKHR surface, uint32_t *pPresentModeCount,
|
||||
VkPresentModeKHR *pPresentModes);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDeviceGroupSurfacePresentModesKHR(
|
||||
VkDevice device,
|
||||
VkSurfaceKHR surface,
|
||||
VkDeviceGroupPresentModeFlagsKHR* pModes);
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex);
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateWaylandSurfaceKHR(VkInstance instance,
|
||||
const VkWaylandSurfaceCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex,
|
||||
struct wl_display *display);
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex,
|
||||
xcb_connection_t *connection,
|
||||
xcb_visualid_t visual_id);
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex, Display *dpy,
|
||||
VisualID visualID);
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMacOSSurfaceMVK(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateIOSSurfaceMVK(VkInstance instance, const VkIOSSurfaceCreateInfoMVK *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
#endif
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t *pPropertyCount,
|
||||
VkDisplayPropertiesKHR *pProperties);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t *pPropertyCount,
|
||||
VkDisplayPlanePropertiesKHR *pProperties);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, uint32_t planeIndex,
|
||||
uint32_t *pDisplayCount, VkDisplayKHR *pDisplays);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display,
|
||||
uint32_t *pPropertyCount,
|
||||
VkDisplayModePropertiesKHR *pProperties);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display,
|
||||
const VkDisplayModeCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkDisplayModeKHR *pMode);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode,
|
||||
uint32_t planeIndex,
|
||||
VkDisplayPlaneCapabilitiesKHR *pCapabilities);
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateDisplayPlaneSurfaceKHR(VkInstance instance,
|
||||
const VkDisplaySurfaceCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkSurfaceKHR *pSurface);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount,
|
||||
const VkSwapchainCreateInfoKHR *pCreateInfos,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkSwapchainKHR *pSwapchains);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice,
|
||||
VkSurfaceKHR surface,
|
||||
uint32_t* pRectCount,
|
||||
VkRect2D* pRects);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayProperties2KHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t *pPropertyCount,
|
||||
VkDisplayProperties2KHR *pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceDisplayPlaneProperties2KHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t *pPropertyCount,
|
||||
VkDisplayPlaneProperties2KHR *pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayModeProperties2KHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display,
|
||||
uint32_t *pPropertyCount,
|
||||
VkDisplayModeProperties2KHR *pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetDisplayPlaneCapabilities2KHR(VkPhysicalDevice physicalDevice,
|
||||
const VkDisplayPlaneInfo2KHR *pDisplayPlaneInfo,
|
||||
VkDisplayPlaneCapabilities2KHR *pCapabilities);
|
||||
|
||||
#endif // WSI_H
|
||||
425
thirdparty/vulkan/registry/cgenerator.py
vendored
Executable file
425
thirdparty/vulkan/registry/cgenerator.py
vendored
Executable file
@ -0,0 +1,425 @@
|
||||
#!/usr/bin/python3 -i
|
||||
#
|
||||
# Copyright (c) 2013-2019 The Khronos Group Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from generator import (GeneratorOptions, OutputGenerator, noneStr,
|
||||
regSortFeatures, write)
|
||||
|
||||
# CGeneratorOptions - subclass of GeneratorOptions.
|
||||
#
|
||||
# Adds options used by COutputGenerator objects during C language header
|
||||
# generation.
|
||||
#
|
||||
# Additional members
|
||||
# prefixText - list of strings to prefix generated header with
|
||||
# (usually a copyright statement + calling convention macros).
|
||||
# protectFile - True if multiple inclusion protection should be
|
||||
# generated (based on the filename) around the entire header.
|
||||
# protectFeature - True if #ifndef..#endif protection should be
|
||||
# generated around a feature interface in the header file.
|
||||
# genFuncPointers - True if function pointer typedefs should be
|
||||
# generated
|
||||
# protectProto - If conditional protection should be generated
|
||||
# around prototype declarations, set to either '#ifdef'
|
||||
# to require opt-in (#ifdef protectProtoStr) or '#ifndef'
|
||||
# to require opt-out (#ifndef protectProtoStr). Otherwise
|
||||
# set to None.
|
||||
# protectProtoStr - #ifdef/#ifndef symbol to use around prototype
|
||||
# declarations, if protectProto is set
|
||||
# apicall - string to use for the function declaration prefix,
|
||||
# such as APICALL on Windows.
|
||||
# apientry - string to use for the calling convention macro,
|
||||
# in typedefs, such as APIENTRY.
|
||||
# apientryp - string to use for the calling convention macro
|
||||
# in function pointer typedefs, such as APIENTRYP.
|
||||
# directory - directory into which to generate include files
|
||||
# indentFuncProto - True if prototype declarations should put each
|
||||
# parameter on a separate line
|
||||
# indentFuncPointer - True if typedefed function pointers should put each
|
||||
# parameter on a separate line
|
||||
# alignFuncParam - if nonzero and parameters are being put on a
|
||||
# separate line, align parameter names at the specified column
|
||||
# genEnumBeginEndRange - True if BEGIN_RANGE / END_RANGE macros should
|
||||
# be generated for enumerated types
|
||||
# genAliasMacro - True if the OpenXR alias macro should be generated
|
||||
# for aliased types (unclear what other circumstances this is useful)
|
||||
# aliasMacro - alias macro to inject when genAliasMacro is True
|
||||
class CGeneratorOptions(GeneratorOptions):
|
||||
"""Represents options during C interface generation for headers"""
|
||||
|
||||
def __init__(self,
|
||||
conventions = None,
|
||||
filename = None,
|
||||
directory = '.',
|
||||
apiname = None,
|
||||
profile = None,
|
||||
versions = '.*',
|
||||
emitversions = '.*',
|
||||
defaultExtensions = None,
|
||||
addExtensions = None,
|
||||
removeExtensions = None,
|
||||
emitExtensions = None,
|
||||
sortProcedure = regSortFeatures,
|
||||
prefixText = "",
|
||||
genFuncPointers = True,
|
||||
protectFile = True,
|
||||
protectFeature = True,
|
||||
protectProto = None,
|
||||
protectProtoStr = None,
|
||||
apicall = '',
|
||||
apientry = '',
|
||||
apientryp = '',
|
||||
indentFuncProto = True,
|
||||
indentFuncPointer = False,
|
||||
alignFuncParam = 0,
|
||||
genEnumBeginEndRange = False,
|
||||
genAliasMacro = False,
|
||||
aliasMacro = ''
|
||||
):
|
||||
GeneratorOptions.__init__(self, conventions, filename, directory, apiname, profile,
|
||||
versions, emitversions, defaultExtensions,
|
||||
addExtensions, removeExtensions,
|
||||
emitExtensions, sortProcedure)
|
||||
self.prefixText = prefixText
|
||||
self.genFuncPointers = genFuncPointers
|
||||
self.protectFile = protectFile
|
||||
self.protectFeature = protectFeature
|
||||
self.protectProto = protectProto
|
||||
self.protectProtoStr = protectProtoStr
|
||||
self.apicall = apicall
|
||||
self.apientry = apientry
|
||||
self.apientryp = apientryp
|
||||
self.indentFuncProto = indentFuncProto
|
||||
self.indentFuncPointer = indentFuncPointer
|
||||
self.alignFuncParam = alignFuncParam
|
||||
self.genEnumBeginEndRange = genEnumBeginEndRange
|
||||
self.genAliasMacro = genAliasMacro
|
||||
self.aliasMacro = aliasMacro
|
||||
|
||||
# COutputGenerator - subclass of OutputGenerator.
|
||||
# Generates C-language API interfaces.
|
||||
#
|
||||
# ---- methods ----
|
||||
# COutputGenerator(errFile, warnFile, diagFile) - args as for
|
||||
# OutputGenerator. Defines additional internal state.
|
||||
# ---- methods overriding base class ----
|
||||
# beginFile(genOpts)
|
||||
# endFile()
|
||||
# beginFeature(interface, emit)
|
||||
# endFeature()
|
||||
# genType(typeinfo,name)
|
||||
# genStruct(typeinfo,name)
|
||||
# genGroup(groupinfo,name)
|
||||
# genEnum(enuminfo, name)
|
||||
# genCmd(cmdinfo)
|
||||
class COutputGenerator(OutputGenerator):
|
||||
"""Generate specified API interfaces in a specific style, such as a C header"""
|
||||
# This is an ordered list of sections in the header file.
|
||||
TYPE_SECTIONS = ['include', 'define', 'basetype', 'handle', 'enum',
|
||||
'group', 'bitmask', 'funcpointer', 'struct']
|
||||
ALL_SECTIONS = TYPE_SECTIONS + ['commandPointer', 'command']
|
||||
|
||||
def __init__(self,
|
||||
errFile = sys.stderr,
|
||||
warnFile = sys.stderr,
|
||||
diagFile = sys.stdout):
|
||||
OutputGenerator.__init__(self, errFile, warnFile, diagFile)
|
||||
# Internal state - accumulators for different inner block text
|
||||
self.sections = {section: [] for section in self.ALL_SECTIONS}
|
||||
self.feature_not_empty = False
|
||||
self.need_platform_include = False
|
||||
self.may_alias = None
|
||||
|
||||
def beginFile(self, genOpts):
|
||||
OutputGenerator.beginFile(self, genOpts)
|
||||
# C-specific
|
||||
#
|
||||
# Multiple inclusion protection & C++ wrappers.
|
||||
if genOpts.protectFile and self.genOpts.filename:
|
||||
headerSym = re.sub(r'\.h', '_h_',
|
||||
os.path.basename(self.genOpts.filename)).upper()
|
||||
write('#ifndef', headerSym, file=self.outFile)
|
||||
write('#define', headerSym, '1', file=self.outFile)
|
||||
self.newline()
|
||||
write('#ifdef __cplusplus', file=self.outFile)
|
||||
write('extern "C" {', file=self.outFile)
|
||||
write('#endif', file=self.outFile)
|
||||
self.newline()
|
||||
|
||||
# User-supplied prefix text, if any (list of strings)
|
||||
if genOpts.prefixText:
|
||||
for s in genOpts.prefixText:
|
||||
write(s, file=self.outFile)
|
||||
|
||||
def endFile(self):
|
||||
# C-specific
|
||||
# Finish C++ wrapper and multiple inclusion protection
|
||||
self.newline()
|
||||
write('#ifdef __cplusplus', file=self.outFile)
|
||||
write('}', file=self.outFile)
|
||||
write('#endif', file=self.outFile)
|
||||
if self.genOpts.protectFile and self.genOpts.filename:
|
||||
self.newline()
|
||||
write('#endif', file=self.outFile)
|
||||
# Finish processing in superclass
|
||||
OutputGenerator.endFile(self)
|
||||
|
||||
def beginFeature(self, interface, emit):
|
||||
# Start processing in superclass
|
||||
OutputGenerator.beginFeature(self, interface, emit)
|
||||
# C-specific
|
||||
# Accumulate includes, defines, types, enums, function pointer typedefs,
|
||||
# end function prototypes separately for this feature. They're only
|
||||
# printed in endFeature().
|
||||
self.sections = {section: [] for section in self.ALL_SECTIONS}
|
||||
self.feature_not_empty = False
|
||||
|
||||
def endFeature(self):
|
||||
# C-specific
|
||||
# Actually write the interface to the output file.
|
||||
if self.emit:
|
||||
if self.feature_not_empty:
|
||||
if self.genOpts.conventions.writeFeature(self.featureExtraProtect, self.genOpts.filename):
|
||||
self.newline()
|
||||
if self.genOpts.protectFeature:
|
||||
write('#ifndef', self.featureName, file=self.outFile)
|
||||
# If type declarations are needed by other features based on
|
||||
# this one, it may be necessary to suppress the ExtraProtect,
|
||||
# or move it below the 'for section...' loop.
|
||||
if self.featureExtraProtect is not None:
|
||||
write('#ifdef', self.featureExtraProtect, file=self.outFile)
|
||||
self.newline()
|
||||
write('#define', self.featureName, '1', file=self.outFile)
|
||||
for section in self.TYPE_SECTIONS:
|
||||
# OpenXR:
|
||||
# If we need the explicit include of the external platform header,
|
||||
# put it right before the function pointer definitions
|
||||
if section == "funcpointer" and self.need_platform_include:
|
||||
write('// Include for OpenXR Platform-Specific Types', file=self.outFile)
|
||||
write('#include "openxr_platform.h"', file=self.outFile)
|
||||
self.newline()
|
||||
self.need_platform_include = False
|
||||
contents = self.sections[section]
|
||||
if contents:
|
||||
write('\n'.join(contents), file=self.outFile)
|
||||
if self.genOpts.genFuncPointers and self.sections['commandPointer']:
|
||||
write('\n'.join(self.sections['commandPointer']), file=self.outFile)
|
||||
self.newline()
|
||||
if self.sections['command']:
|
||||
if self.genOpts.protectProto:
|
||||
write(self.genOpts.protectProto,
|
||||
self.genOpts.protectProtoStr, file=self.outFile)
|
||||
write('\n'.join(self.sections['command']), end='', file=self.outFile)
|
||||
if self.genOpts.protectProto:
|
||||
write('#endif', file=self.outFile)
|
||||
else:
|
||||
self.newline()
|
||||
if self.featureExtraProtect is not None:
|
||||
write('#endif /*', self.featureExtraProtect, '*/', file=self.outFile)
|
||||
if self.genOpts.protectFeature:
|
||||
write('#endif /*', self.featureName, '*/', file=self.outFile)
|
||||
# Finish processing in superclass
|
||||
OutputGenerator.endFeature(self)
|
||||
|
||||
# Append a definition to the specified section
|
||||
def appendSection(self, section, text):
|
||||
# self.sections[section].append('SECTION: ' + section + '\n')
|
||||
self.sections[section].append(text)
|
||||
self.feature_not_empty = True
|
||||
|
||||
# Type generation
|
||||
def genType(self, typeinfo, name, alias):
|
||||
OutputGenerator.genType(self, typeinfo, name, alias)
|
||||
typeElem = typeinfo.elem
|
||||
|
||||
# Vulkan:
|
||||
# Determine the category of the type, and the type section to add
|
||||
# its definition to.
|
||||
# 'funcpointer' is added to the 'struct' section as a workaround for
|
||||
# internal issue #877, since structures and function pointer types
|
||||
# can have cross-dependencies.
|
||||
category = typeElem.get('category')
|
||||
if category == 'funcpointer':
|
||||
section = 'struct'
|
||||
else:
|
||||
section = category
|
||||
|
||||
if category in ('struct', 'union'):
|
||||
# If the type is a struct type, generate it using the
|
||||
# special-purpose generator.
|
||||
self.genStruct(typeinfo, name, alias)
|
||||
else:
|
||||
# OpenXR: this section was not under 'else:' previously, just fell through
|
||||
if alias:
|
||||
# If the type is an alias, just emit a typedef declaration
|
||||
body = 'typedef ' + alias + ' ' + name + ';\n'
|
||||
else:
|
||||
# Replace <apientry /> tags with an APIENTRY-style string
|
||||
# (from self.genOpts). Copy other text through unchanged.
|
||||
# If the resulting text is an empty string, don't emit it.
|
||||
body = noneStr(typeElem.text)
|
||||
for elem in typeElem:
|
||||
if elem.tag == 'apientry':
|
||||
body += self.genOpts.apientry + noneStr(elem.tail)
|
||||
else:
|
||||
body += noneStr(elem.text) + noneStr(elem.tail)
|
||||
if body:
|
||||
# Add extra newline after multi-line entries.
|
||||
if '\n' in body[0:-1]:
|
||||
body += '\n'
|
||||
self.appendSection(section, body)
|
||||
|
||||
# Protection string generation
|
||||
# Protection strings are the strings defining the OS/Platform/Graphics
|
||||
# requirements for a given OpenXR command. When generating the
|
||||
# language header files, we need to make sure the items specific to a
|
||||
# graphics API or OS platform are properly wrapped in #ifs.
|
||||
def genProtectString(self, protect_str):
|
||||
protect_if_str = ''
|
||||
protect_end_str = ''
|
||||
protect_list = []
|
||||
if protect_str:
|
||||
if ',' in protect_str:
|
||||
protect_list.extend(protect_str.split(","))
|
||||
protect_def_str = ''
|
||||
count = 0
|
||||
for protect_define in protect_list:
|
||||
if count > 0:
|
||||
protect_def_str += ' &&'
|
||||
protect_def_str += ' defined(%s)' % protect_define
|
||||
count = count + 1
|
||||
count = count + 1
|
||||
protect_if_str = '#if'
|
||||
protect_if_str += protect_def_str
|
||||
protect_if_str += '\n'
|
||||
protect_end_str = '#endif //'
|
||||
protect_end_str += protect_def_str
|
||||
protect_end_str += '\n'
|
||||
else:
|
||||
protect_if_str += '#ifdef %s\n' % protect_str
|
||||
protect_end_str += '#endif // %s\n' % protect_str
|
||||
return (protect_if_str, protect_end_str)
|
||||
|
||||
def typeMayAlias(self, typeName):
|
||||
if not self.may_alias:
|
||||
# First time we've asked if a type may alias.
|
||||
# So, let's populate the set of all names of types that may.
|
||||
|
||||
# Everyone with an explicit mayalias="true"
|
||||
self.may_alias = set(typeName
|
||||
for typeName, data in self.registry.typedict.items()
|
||||
if data.elem.get('mayalias') == 'true')
|
||||
|
||||
# Every type mentioned in some other type's parentstruct attribute.
|
||||
self.may_alias.update(set(x for x in
|
||||
[otherType.elem.get('parentstruct')
|
||||
for _, otherType in self.registry.typedict.items()]
|
||||
if x is not None
|
||||
))
|
||||
return typeName in self.may_alias
|
||||
|
||||
# Struct (e.g. C "struct" type) generation.
|
||||
# This is a special case of the <type> tag where the contents are
|
||||
# interpreted as a set of <member> tags instead of freeform C
|
||||
# C type declarations. The <member> tags are just like <param>
|
||||
# tags - they are a declaration of a struct or union member.
|
||||
# Only simple member declarations are supported (no nested
|
||||
# structs etc.)
|
||||
# If alias is not None, then this struct aliases another; just
|
||||
# generate a typedef of that alias.
|
||||
def genStruct(self, typeinfo, typeName, alias):
|
||||
OutputGenerator.genStruct(self, typeinfo, typeName, alias)
|
||||
|
||||
typeElem = typeinfo.elem
|
||||
|
||||
if alias:
|
||||
body = 'typedef ' + alias + ' ' + typeName + ';\n'
|
||||
else:
|
||||
body = ''
|
||||
(protect_begin, protect_end) = self.genProtectString(typeElem.get('protect'))
|
||||
if protect_begin:
|
||||
body += protect_begin
|
||||
body += 'typedef ' + typeElem.get('category')
|
||||
|
||||
# This is an OpenXR-specific alternative where aliasing refers
|
||||
# to an inheritance hierarchy of types rather than C-level type
|
||||
# aliases.
|
||||
if self.genOpts.genAliasMacro and self.typeMayAlias(typeName):
|
||||
body += ' ' + self.genOpts.aliasMacro
|
||||
|
||||
body += ' ' + typeName + ' {\n'
|
||||
|
||||
targetLen = 0
|
||||
for member in typeElem.findall('.//member'):
|
||||
targetLen = max(targetLen, self.getCParamTypeLength(member))
|
||||
for member in typeElem.findall('.//member'):
|
||||
body += self.makeCParamDecl(member, targetLen + 4)
|
||||
body += ';\n'
|
||||
body += '} ' + typeName + ';\n'
|
||||
if protect_end:
|
||||
body += protect_end
|
||||
|
||||
self.appendSection('struct', body)
|
||||
|
||||
# Group (e.g. C "enum" type) generation.
|
||||
# These are concatenated together with other types.
|
||||
# If alias is not None, it is the name of another group type
|
||||
# which aliases this type; just generate that alias.
|
||||
def genGroup(self, groupinfo, groupName, alias = None):
|
||||
OutputGenerator.genGroup(self, groupinfo, groupName, alias)
|
||||
groupElem = groupinfo.elem
|
||||
|
||||
# After either enumerated type or alias paths, add the declaration
|
||||
# to the appropriate section for the group being defined.
|
||||
if groupElem.get('type') == 'bitmask':
|
||||
section = 'bitmask'
|
||||
else:
|
||||
section = 'group'
|
||||
|
||||
if alias:
|
||||
# If the group name is aliased, just emit a typedef declaration
|
||||
# for the alias.
|
||||
body = 'typedef ' + alias + ' ' + groupName + ';\n'
|
||||
self.appendSection(section, body)
|
||||
else:
|
||||
(section, body) = self.buildEnumCDecl(self.genOpts.genEnumBeginEndRange, groupinfo, groupName)
|
||||
self.appendSection(section, "\n" + body)
|
||||
|
||||
# Enumerant generation
|
||||
# <enum> tags may specify their values in several ways, but are usually
|
||||
# just integers.
|
||||
def genEnum(self, enuminfo, name, alias):
|
||||
OutputGenerator.genEnum(self, enuminfo, name, alias)
|
||||
(_, strVal) = self.enumToValue(enuminfo.elem, False)
|
||||
body = '#define ' + name.ljust(33) + ' ' + strVal
|
||||
self.appendSection('enum', body)
|
||||
|
||||
# Command generation
|
||||
def genCmd(self, cmdinfo, name, alias):
|
||||
OutputGenerator.genCmd(self, cmdinfo, name, alias)
|
||||
|
||||
# if alias:
|
||||
# prefix = '// ' + name + ' is an alias of command ' + alias + '\n'
|
||||
# else:
|
||||
# prefix = ''
|
||||
|
||||
prefix = ''
|
||||
decls = self.makeCDecls(cmdinfo.elem)
|
||||
self.appendSection('command', prefix + decls[0] + '\n')
|
||||
if self.genOpts.genFuncPointers:
|
||||
self.appendSection('commandPointer', decls[1])
|
||||
73
thirdparty/vulkan/registry/common_codegen.py
vendored
Executable file
73
thirdparty/vulkan/registry/common_codegen.py
vendored
Executable file
@ -0,0 +1,73 @@
|
||||
#!/usr/bin/python3 -i
|
||||
#
|
||||
# Copyright (c) 2015-2017, 2019 The Khronos Group Inc.
|
||||
# Copyright (c) 2015-2017, 2019 Valve Corporation
|
||||
# Copyright (c) 2015-2017, 2019 LunarG, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# Author: Mark Lobodzinski <mark@lunarg.com>
|
||||
|
||||
import os,re,sys,string
|
||||
import xml.etree.ElementTree as etree
|
||||
from generator import *
|
||||
from collections import namedtuple
|
||||
|
||||
# Copyright text prefixing all headers (list of strings).
|
||||
prefixStrings = [
|
||||
'/*',
|
||||
'** Copyright (c) 2015-2017, 2019 The Khronos Group Inc.',
|
||||
'** Copyright (c) 2015-2017, 2019 Valve Corporation',
|
||||
'** Copyright (c) 2015-2017, 2019 LunarG, Inc.',
|
||||
'** Copyright (c) 2015-2017, 2019 Google Inc.',
|
||||
'**',
|
||||
'** Licensed under the Apache License, Version 2.0 (the "License");',
|
||||
'** you may not use this file except in compliance with the License.',
|
||||
'** You may obtain a copy of the License at',
|
||||
'**',
|
||||
'** http://www.apache.org/licenses/LICENSE-2.0',
|
||||
'**',
|
||||
'** Unless required by applicable law or agreed to in writing, software',
|
||||
'** distributed under the License is distributed on an "AS IS" BASIS,',
|
||||
'** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.',
|
||||
'** See the License for the specific language governing permissions and',
|
||||
'** limitations under the License.',
|
||||
'*/',
|
||||
''
|
||||
]
|
||||
|
||||
|
||||
platform_dict = {
|
||||
'android' : 'VK_USE_PLATFORM_ANDROID_KHR',
|
||||
'fuchsia' : 'VK_USE_PLATFORM_FUCHSIA',
|
||||
'ggp': 'VK_USE_PLATFORM_GGP',
|
||||
'ios' : 'VK_USE_PLATFORM_IOS_MVK',
|
||||
'macos' : 'VK_USE_PLATFORM_MACOS_MVK',
|
||||
'metal' : 'VK_USE_PLATFORM_METAL_EXT',
|
||||
'vi' : 'VK_USE_PLATFORM_VI_NN',
|
||||
'wayland' : 'VK_USE_PLATFORM_WAYLAND_KHR',
|
||||
'win32' : 'VK_USE_PLATFORM_WIN32_KHR',
|
||||
'xcb' : 'VK_USE_PLATFORM_XCB_KHR',
|
||||
'xlib' : 'VK_USE_PLATFORM_XLIB_KHR',
|
||||
'xlib_xrandr' : 'VK_USE_PLATFORM_XLIB_XRANDR_EXT',
|
||||
}
|
||||
|
||||
#
|
||||
# Return appropriate feature protect string from 'platform' tag on feature
|
||||
def GetFeatureProtect(interface):
|
||||
"""Get platform protection string"""
|
||||
platform = interface.get('platform')
|
||||
protect = None
|
||||
if platform is not None:
|
||||
protect = platform_dict[platform]
|
||||
return protect
|
||||
132
thirdparty/vulkan/registry/conventions.py
vendored
Executable file
132
thirdparty/vulkan/registry/conventions.py
vendored
Executable file
@ -0,0 +1,132 @@
|
||||
#!/usr/bin/python3 -i
|
||||
#
|
||||
# Copyright (c) 2013-2019 The Khronos Group Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Base class for working-group-specific style conventions,
|
||||
# used in generation.
|
||||
|
||||
from abc import ABCMeta, abstractmethod
|
||||
|
||||
ABC = ABCMeta('ABC', (object,), {})
|
||||
|
||||
class ConventionsBase(ABC):
|
||||
"""WG-specific conventions."""
|
||||
|
||||
@abstractmethod
|
||||
def formatExtension(self, name):
|
||||
"""Mark up a name as an extension for the spec."""
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
def null(self):
|
||||
"""Preferred spelling of NULL."""
|
||||
raise NotImplementedError
|
||||
|
||||
def makeProseList(self, elements, connective='and'):
|
||||
"""Make a (comma-separated) list for use in prose.
|
||||
|
||||
Adds a connective (by default, 'and')
|
||||
before the last element if there are more than 1.
|
||||
|
||||
Override with a different method or different call to
|
||||
_implMakeProseList if you want to add a comma for two elements,
|
||||
or not use a serial comma.
|
||||
"""
|
||||
return self._implMakeProseList(elements, connective)
|
||||
|
||||
@property
|
||||
def struct_macro(self):
|
||||
"""Get the appropriate format macro for a structure.
|
||||
|
||||
May override.
|
||||
"""
|
||||
return 'sname:'
|
||||
|
||||
def makeStructName(self, name):
|
||||
"""Prepend the appropriate format macro for a structure to a structure type name.
|
||||
|
||||
Uses struct_macro, so just override that if you want to change behavior.
|
||||
"""
|
||||
return self.struct_macro + name
|
||||
|
||||
@property
|
||||
def external_macro(self):
|
||||
"""Get the appropriate format macro for an external type like uint32_t.
|
||||
|
||||
May override.
|
||||
"""
|
||||
return 'basetype:'
|
||||
|
||||
def makeExternalTypeName(self, name):
|
||||
"""Prepend the appropriate format macro for an external type like uint32_t to a type name.
|
||||
|
||||
Uses external_macro, so just override that if you want to change behavior.
|
||||
"""
|
||||
return self.external_macro + name
|
||||
|
||||
def _implMakeProseList(self, elements, connective, comma_for_two_elts=False, serial_comma=True):
|
||||
"""Internal-use implementation to make a (comma-separated) list for use in prose.
|
||||
|
||||
Adds a connective (by default, 'and')
|
||||
before the last element if there are more than 1,
|
||||
and only includes commas if there are more than 2
|
||||
(if comma_for_two_elts is False).
|
||||
|
||||
Don't edit these defaults, override self.makeProseList().
|
||||
"""
|
||||
assert(serial_comma) # didn't implement what we didn't need
|
||||
my_elts = list(elements)
|
||||
if len(my_elts) > 1:
|
||||
my_elts[-1] = '{} {}'.format(connective, my_elts[-1])
|
||||
|
||||
if not comma_for_two_elts and len(my_elts) <= 2:
|
||||
return ' '.join(my_elts)
|
||||
return ', '.join(my_elts)
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
def file_suffix(self):
|
||||
"""Return suffix of generated Asciidoctor files"""
|
||||
raise NotImplementedError
|
||||
|
||||
@abstractmethod
|
||||
def api_name(self, spectype = None):
|
||||
"""Return API name"""
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
def api_prefix(self):
|
||||
"""Return API token prefix"""
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
def api_version_prefix(self):
|
||||
"""Return API core version token prefix"""
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
def KHR_prefix(self):
|
||||
"""Return extension name prefix for KHR extensions"""
|
||||
raise NotImplementedError
|
||||
|
||||
@property
|
||||
@abstractmethod
|
||||
def EXT_prefix(self):
|
||||
"""Return extension name prefix for EXT extensions"""
|
||||
raise NotImplementedError
|
||||
240
thirdparty/vulkan/registry/dispatch_table_helper_generator.py
vendored
Executable file
240
thirdparty/vulkan/registry/dispatch_table_helper_generator.py
vendored
Executable file
@ -0,0 +1,240 @@
|
||||
#!/usr/bin/python3 -i
|
||||
#
|
||||
# Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
# Copyright (c) 2015-2017 Valve Corporation
|
||||
# Copyright (c) 2015-2017 LunarG, Inc.
|
||||
# Copyright (c) 2015-2017 Google Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# Author: Mark Lobodzinski <mark@lunarg.com>
|
||||
|
||||
import os,re,sys
|
||||
import xml.etree.ElementTree as etree
|
||||
from generator import *
|
||||
from collections import namedtuple
|
||||
from common_codegen import *
|
||||
|
||||
#
|
||||
# DispatchTableHelperOutputGeneratorOptions - subclass of GeneratorOptions.
|
||||
class DispatchTableHelperOutputGeneratorOptions(GeneratorOptions):
|
||||
def __init__(self,
|
||||
conventions = None,
|
||||
filename = None,
|
||||
directory = '.',
|
||||
apiname = None,
|
||||
profile = None,
|
||||
versions = '.*',
|
||||
emitversions = '.*',
|
||||
defaultExtensions = None,
|
||||
addExtensions = None,
|
||||
removeExtensions = None,
|
||||
emitExtensions = None,
|
||||
sortProcedure = regSortFeatures,
|
||||
prefixText = "",
|
||||
genFuncPointers = True,
|
||||
apicall = '',
|
||||
apientry = '',
|
||||
apientryp = '',
|
||||
alignFuncParam = 0,
|
||||
expandEnumerants = True):
|
||||
GeneratorOptions.__init__(self, conventions, filename, directory, apiname, profile,
|
||||
versions, emitversions, defaultExtensions,
|
||||
addExtensions, removeExtensions, emitExtensions, sortProcedure)
|
||||
self.prefixText = prefixText
|
||||
self.genFuncPointers = genFuncPointers
|
||||
self.prefixText = None
|
||||
self.apicall = apicall
|
||||
self.apientry = apientry
|
||||
self.apientryp = apientryp
|
||||
self.alignFuncParam = alignFuncParam
|
||||
#
|
||||
# DispatchTableHelperOutputGenerator - subclass of OutputGenerator.
|
||||
# Generates dispatch table helper header files for LVL
|
||||
class DispatchTableHelperOutputGenerator(OutputGenerator):
|
||||
"""Generate dispatch table helper header based on XML element attributes"""
|
||||
def __init__(self,
|
||||
errFile = sys.stderr,
|
||||
warnFile = sys.stderr,
|
||||
diagFile = sys.stdout):
|
||||
OutputGenerator.__init__(self, errFile, warnFile, diagFile)
|
||||
# Internal state - accumulators for different inner block text
|
||||
self.instance_dispatch_list = [] # List of entries for instance dispatch list
|
||||
self.device_dispatch_list = [] # List of entries for device dispatch list
|
||||
self.dev_ext_stub_list = [] # List of stub functions for device extension functions
|
||||
self.device_extension_list = [] # List of device extension functions
|
||||
self.extension_type = ''
|
||||
#
|
||||
# Called once at the beginning of each run
|
||||
def beginFile(self, genOpts):
|
||||
OutputGenerator.beginFile(self, genOpts)
|
||||
write("#pragma once", file=self.outFile)
|
||||
# User-supplied prefix text, if any (list of strings)
|
||||
if (genOpts.prefixText):
|
||||
for s in genOpts.prefixText:
|
||||
write(s, file=self.outFile)
|
||||
# File Comment
|
||||
file_comment = '// *** THIS FILE IS GENERATED - DO NOT EDIT ***\n'
|
||||
file_comment += '// See dispatch_helper_generator.py for modifications\n'
|
||||
write(file_comment, file=self.outFile)
|
||||
# Copyright Notice
|
||||
copyright = '/*\n'
|
||||
copyright += ' * Copyright (c) 2015-2017 The Khronos Group Inc.\n'
|
||||
copyright += ' * Copyright (c) 2015-2017 Valve Corporation\n'
|
||||
copyright += ' * Copyright (c) 2015-2017 LunarG, Inc.\n'
|
||||
copyright += ' *\n'
|
||||
copyright += ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
|
||||
copyright += ' * you may not use this file except in compliance with the License.\n'
|
||||
copyright += ' * You may obtain a copy of the License at\n'
|
||||
copyright += ' *\n'
|
||||
copyright += ' * http://www.apache.org/licenses/LICENSE-2.0\n'
|
||||
copyright += ' *\n'
|
||||
copyright += ' * Unless required by applicable law or agreed to in writing, software\n'
|
||||
copyright += ' * distributed under the License is distributed on an "AS IS" BASIS,\n'
|
||||
copyright += ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
|
||||
copyright += ' * See the License for the specific language governing permissions and\n'
|
||||
copyright += ' * limitations under the License.\n'
|
||||
copyright += ' *\n'
|
||||
copyright += ' * Author: Courtney Goeltzenleuchter <courtney@LunarG.com>\n'
|
||||
copyright += ' * Author: Jon Ashburn <jon@lunarg.com>\n'
|
||||
copyright += ' * Author: Mark Lobodzinski <mark@lunarg.com>\n'
|
||||
copyright += ' */\n'
|
||||
|
||||
preamble = ''
|
||||
preamble += '#include <vulkan/vulkan.h>\n'
|
||||
preamble += '#include <vulkan/vk_layer.h>\n'
|
||||
preamble += '#include <string.h>\n'
|
||||
preamble += '#include "vk_layer_dispatch_table.h"\n'
|
||||
|
||||
write(copyright, file=self.outFile)
|
||||
write(preamble, file=self.outFile)
|
||||
#
|
||||
# Write generate and write dispatch tables to output file
|
||||
def endFile(self):
|
||||
device_table = ''
|
||||
instance_table = ''
|
||||
|
||||
device_table += self.OutputDispatchTableHelper('device')
|
||||
instance_table += self.OutputDispatchTableHelper('instance')
|
||||
|
||||
for stub in self.dev_ext_stub_list:
|
||||
write(stub, file=self.outFile)
|
||||
write("\n\n", file=self.outFile)
|
||||
write(device_table, file=self.outFile);
|
||||
write("\n", file=self.outFile)
|
||||
write(instance_table, file=self.outFile);
|
||||
|
||||
# Finish processing in superclass
|
||||
OutputGenerator.endFile(self)
|
||||
#
|
||||
# Processing at beginning of each feature or extension
|
||||
def beginFeature(self, interface, emit):
|
||||
OutputGenerator.beginFeature(self, interface, emit)
|
||||
self.featureExtraProtect = GetFeatureProtect(interface)
|
||||
self.extension_type = interface.get('type')
|
||||
|
||||
#
|
||||
# Process commands, adding to appropriate dispatch tables
|
||||
def genCmd(self, cmdinfo, name, alias):
|
||||
OutputGenerator.genCmd(self, cmdinfo, name, alias)
|
||||
|
||||
avoid_entries = ['vkCreateInstance',
|
||||
'vkCreateDevice']
|
||||
# Get first param type
|
||||
params = cmdinfo.elem.findall('param')
|
||||
info = self.getTypeNameTuple(params[0])
|
||||
|
||||
if name not in avoid_entries:
|
||||
self.AddCommandToDispatchList(name, info[0], self.featureExtraProtect, cmdinfo)
|
||||
|
||||
#
|
||||
# Determine if this API should be ignored or added to the instance or device dispatch table
|
||||
def AddCommandToDispatchList(self, name, handle_type, protect, cmdinfo):
|
||||
handle = self.registry.tree.find("types/type/[name='" + handle_type + "'][@category='handle']")
|
||||
if handle is None:
|
||||
return
|
||||
if handle_type != 'VkInstance' and handle_type != 'VkPhysicalDevice' and name != 'vkGetInstanceProcAddr':
|
||||
self.device_dispatch_list.append((name, self.featureExtraProtect))
|
||||
if "VK_VERSION" not in self.featureName and self.extension_type == 'device':
|
||||
self.device_extension_list.append(name)
|
||||
# Build up stub function
|
||||
return_type = ''
|
||||
decl = self.makeCDecls(cmdinfo.elem)[1]
|
||||
if 'typedef VkResult' in decl:
|
||||
return_type = 'return VK_SUCCESS;'
|
||||
decl = decl.split('*PFN_vk')[1]
|
||||
decl = decl.replace(')(', '(')
|
||||
if return_type == '':
|
||||
decl = 'static VKAPI_ATTR void VKAPI_CALL Stub' + decl
|
||||
else:
|
||||
decl = 'static VKAPI_ATTR VkResult VKAPI_CALL Stub' + decl
|
||||
func_body = ' { ' + return_type + ' };'
|
||||
decl = decl.replace (';', func_body)
|
||||
if self.featureExtraProtect is not None:
|
||||
self.dev_ext_stub_list.append('#ifdef %s' % self.featureExtraProtect)
|
||||
self.dev_ext_stub_list.append(decl)
|
||||
if self.featureExtraProtect is not None:
|
||||
self.dev_ext_stub_list.append('#endif // %s' % self.featureExtraProtect)
|
||||
else:
|
||||
self.instance_dispatch_list.append((name, self.featureExtraProtect))
|
||||
return
|
||||
#
|
||||
# Retrieve the type and name for a parameter
|
||||
def getTypeNameTuple(self, param):
|
||||
type = ''
|
||||
name = ''
|
||||
for elem in param:
|
||||
if elem.tag == 'type':
|
||||
type = noneStr(elem.text)
|
||||
elif elem.tag == 'name':
|
||||
name = noneStr(elem.text)
|
||||
return (type, name)
|
||||
#
|
||||
# Create a dispatch table from the appropriate list and return it as a string
|
||||
def OutputDispatchTableHelper(self, table_type):
|
||||
entries = []
|
||||
table = ''
|
||||
if table_type == 'device':
|
||||
entries = self.device_dispatch_list
|
||||
table += 'static inline void layer_init_device_dispatch_table(VkDevice device, VkLayerDispatchTable *table, PFN_vkGetDeviceProcAddr gpa) {\n'
|
||||
table += ' memset(table, 0, sizeof(*table));\n'
|
||||
table += ' // Device function pointers\n'
|
||||
else:
|
||||
entries = self.instance_dispatch_list
|
||||
table += 'static inline void layer_init_instance_dispatch_table(VkInstance instance, VkLayerInstanceDispatchTable *table, PFN_vkGetInstanceProcAddr gpa) {\n'
|
||||
table += ' memset(table, 0, sizeof(*table));\n'
|
||||
table += ' // Instance function pointers\n'
|
||||
|
||||
for item in entries:
|
||||
# Remove 'vk' from proto name
|
||||
base_name = item[0][2:]
|
||||
|
||||
if item[1] is not None:
|
||||
table += '#ifdef %s\n' % item[1]
|
||||
|
||||
# If we're looking for the proc we are passing in, just point the table to it. This fixes the issue where
|
||||
# a layer overrides the function name for the loader.
|
||||
if (table_type == 'device' and base_name == 'GetDeviceProcAddr'):
|
||||
table += ' table->GetDeviceProcAddr = gpa;\n'
|
||||
elif (table_type != 'device' and base_name == 'GetInstanceProcAddr'):
|
||||
table += ' table->GetInstanceProcAddr = gpa;\n'
|
||||
else:
|
||||
table += ' table->%s = (PFN_%s) gpa(%s, "%s");\n' % (base_name, item[0], table_type, item[0])
|
||||
if item[0] in self.device_extension_list:
|
||||
stub_check = ' if (table->%s == nullptr) { table->%s = (PFN_%s)Stub%s; }\n' % (base_name, base_name, item[0], base_name)
|
||||
table += stub_check
|
||||
if item[1] is not None:
|
||||
table += '#endif // %s\n' % item[1]
|
||||
|
||||
table += '}'
|
||||
return table
|
||||
9
thirdparty/vulkan/registry/generate_headers.sh
vendored
Executable file
9
thirdparty/vulkan/registry/generate_headers.sh
vendored
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
python loader_genvk.py -registry vk.xml -scripts . vk_layer_dispatch_table.h
|
||||
python loader_genvk.py -registry vk.xml -scripts . vk_dispatch_table_helper.h
|
||||
python loader_genvk.py -registry vk.xml -scripts . vk_object_types.h
|
||||
python loader_genvk.py -registry vk.xml -scripts . vk_loader_extensions.h
|
||||
python loader_genvk.py -registry vk.xml -scripts . vk_loader_extensions.c
|
||||
mv ./*.c ../loader/
|
||||
mv ./*.h ../loader/
|
||||
738
thirdparty/vulkan/registry/generator.py
vendored
Executable file
738
thirdparty/vulkan/registry/generator.py
vendored
Executable file
@ -0,0 +1,738 @@
|
||||
#!/usr/bin/python3 -i
|
||||
#
|
||||
# Copyright (c) 2013-2019 The Khronos Group Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import io
|
||||
import os
|
||||
import re
|
||||
import pdb
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
def write( *args, **kwargs ):
|
||||
file = kwargs.pop('file',sys.stdout)
|
||||
end = kwargs.pop('end','\n')
|
||||
file.write(' '.join(str(arg) for arg in args))
|
||||
file.write(end)
|
||||
|
||||
# noneStr - returns string argument, or "" if argument is None.
|
||||
# Used in converting etree Elements into text.
|
||||
# s - string to convert
|
||||
def noneStr(s):
|
||||
if s:
|
||||
return s
|
||||
return ""
|
||||
|
||||
# enquote - returns string argument with surrounding quotes,
|
||||
# for serialization into Python code.
|
||||
def enquote(s):
|
||||
if s:
|
||||
return "'{}'".format(s)
|
||||
return None
|
||||
|
||||
# Primary sort key for regSortFeatures.
|
||||
# Sorts by category of the feature name string:
|
||||
# Core API features (those defined with a <feature> tag)
|
||||
# ARB/KHR/OES (Khronos extensions)
|
||||
# other (EXT/vendor extensions)
|
||||
# This will need changing for Vulkan!
|
||||
def regSortCategoryKey(feature):
|
||||
if feature.elem.tag == 'feature':
|
||||
return 0
|
||||
if (feature.category == 'ARB' or
|
||||
feature.category == 'KHR' or
|
||||
feature.category == 'OES'):
|
||||
return 1
|
||||
|
||||
return 2
|
||||
|
||||
# Secondary sort key for regSortFeatures.
|
||||
# Sorts by extension name.
|
||||
def regSortNameKey(feature):
|
||||
return feature.name
|
||||
|
||||
# Second sort key for regSortFeatures.
|
||||
# Sorts by feature version. <extension> elements all have version number "0"
|
||||
def regSortFeatureVersionKey(feature):
|
||||
return float(feature.versionNumber)
|
||||
|
||||
# Tertiary sort key for regSortFeatures.
|
||||
# Sorts by extension number. <feature> elements all have extension number 0.
|
||||
def regSortExtensionNumberKey(feature):
|
||||
return int(feature.number)
|
||||
|
||||
# regSortFeatures - default sort procedure for features.
|
||||
# Sorts by primary key of feature category ('feature' or 'extension')
|
||||
# then by version number (for features)
|
||||
# then by extension number (for extensions)
|
||||
def regSortFeatures(featureList):
|
||||
featureList.sort(key = regSortExtensionNumberKey)
|
||||
featureList.sort(key = regSortFeatureVersionKey)
|
||||
featureList.sort(key = regSortCategoryKey)
|
||||
|
||||
# GeneratorOptions - base class for options used during header production
|
||||
# These options are target language independent, and used by
|
||||
# Registry.apiGen() and by base OutputGenerator objects.
|
||||
#
|
||||
# Members
|
||||
# conventions - may be mandatory for some generators:
|
||||
# an object that implements ConventionsBase
|
||||
# filename - basename of file to generate, or None to write to stdout.
|
||||
# directory - directory in which to generate filename
|
||||
# apiname - string matching <api> 'apiname' attribute, e.g. 'gl'.
|
||||
# profile - string specifying API profile , e.g. 'core', or None.
|
||||
# versions - regex matching API versions to process interfaces for.
|
||||
# Normally '.*' or '[0-9]\.[0-9]' to match all defined versions.
|
||||
# emitversions - regex matching API versions to actually emit
|
||||
# interfaces for (though all requested versions are considered
|
||||
# when deciding which interfaces to generate). For GL 4.3 glext.h,
|
||||
# this might be '1\.[2-5]|[2-4]\.[0-9]'.
|
||||
# defaultExtensions - If not None, a string which must in its
|
||||
# entirety match the pattern in the "supported" attribute of
|
||||
# the <extension>. Defaults to None. Usually the same as apiname.
|
||||
# addExtensions - regex matching names of additional extensions
|
||||
# to include. Defaults to None.
|
||||
# removeExtensions - regex matching names of extensions to
|
||||
# remove (after defaultExtensions and addExtensions). Defaults
|
||||
# to None.
|
||||
# emitExtensions - regex matching names of extensions to actually emit
|
||||
# interfaces for (though all requested versions are considered when
|
||||
# deciding which interfaces to generate).
|
||||
# sortProcedure - takes a list of FeatureInfo objects and sorts
|
||||
# them in place to a preferred order in the generated output.
|
||||
# Default is core API versions, ARB/KHR/OES extensions, all
|
||||
# other extensions, alphabetically within each group.
|
||||
# The regex patterns can be None or empty, in which case they match
|
||||
# nothing.
|
||||
class GeneratorOptions:
|
||||
"""Represents options during header production from an API registry"""
|
||||
|
||||
def __init__(self,
|
||||
conventions = None,
|
||||
filename = None,
|
||||
directory = '.',
|
||||
apiname = None,
|
||||
profile = None,
|
||||
versions = '.*',
|
||||
emitversions = '.*',
|
||||
defaultExtensions = None,
|
||||
addExtensions = None,
|
||||
removeExtensions = None,
|
||||
emitExtensions = None,
|
||||
sortProcedure = regSortFeatures):
|
||||
self.conventions = conventions
|
||||
self.filename = filename
|
||||
self.directory = directory
|
||||
self.apiname = apiname
|
||||
self.profile = profile
|
||||
self.versions = self.emptyRegex(versions)
|
||||
self.emitversions = self.emptyRegex(emitversions)
|
||||
self.defaultExtensions = defaultExtensions
|
||||
self.addExtensions = self.emptyRegex(addExtensions)
|
||||
self.removeExtensions = self.emptyRegex(removeExtensions)
|
||||
self.emitExtensions = self.emptyRegex(emitExtensions)
|
||||
self.sortProcedure = sortProcedure
|
||||
|
||||
# Substitute a regular expression which matches no version
|
||||
# or extension names for None or the empty string.
|
||||
def emptyRegex(self, pat):
|
||||
if pat is None or pat == '':
|
||||
return '_nomatch_^'
|
||||
|
||||
return pat
|
||||
|
||||
# OutputGenerator - base class for generating API interfaces.
|
||||
# Manages basic logic, logging, and output file control
|
||||
# Derived classes actually generate formatted output.
|
||||
#
|
||||
# ---- methods ----
|
||||
# OutputGenerator(errFile, warnFile, diagFile)
|
||||
# errFile, warnFile, diagFile - file handles to write errors,
|
||||
# warnings, diagnostics to. May be None to not write.
|
||||
# logMsg(level, *args) - log messages of different categories
|
||||
# level - 'error', 'warn', or 'diag'. 'error' will also
|
||||
# raise a UserWarning exception
|
||||
# *args - print()-style arguments
|
||||
# setExtMap(map) - specify a dictionary map from extension names to
|
||||
# numbers, used in creating values for extension enumerants.
|
||||
# makeDir(directory) - create a directory, if not already done.
|
||||
# Generally called from derived generators creating hierarchies.
|
||||
# beginFile(genOpts) - start a new interface file
|
||||
# genOpts - GeneratorOptions controlling what's generated and how
|
||||
# endFile() - finish an interface file, closing it when done
|
||||
# beginFeature(interface, emit) - write interface for a feature
|
||||
# and tag generated features as having been done.
|
||||
# interface - element for the <version> / <extension> to generate
|
||||
# emit - actually write to the header only when True
|
||||
# endFeature() - finish an interface.
|
||||
# genType(typeinfo,name,alias) - generate interface for a type
|
||||
# typeinfo - TypeInfo for a type
|
||||
# genStruct(typeinfo,name,alias) - generate interface for a C "struct" type.
|
||||
# typeinfo - TypeInfo for a type interpreted as a struct
|
||||
# genGroup(groupinfo,name,alias) - generate interface for a group of enums (C "enum")
|
||||
# groupinfo - GroupInfo for a group
|
||||
# genEnum(enuminfo,name,alias) - generate interface for an enum (constant)
|
||||
# enuminfo - EnumInfo for an enum
|
||||
# name - enum name
|
||||
# genCmd(cmdinfo,name,alias) - generate interface for a command
|
||||
# cmdinfo - CmdInfo for a command
|
||||
# isEnumRequired(enumElem) - return True if this <enum> element is required
|
||||
# elem - <enum> element to test
|
||||
# makeCDecls(cmd) - return C prototype and function pointer typedef for a
|
||||
# <command> Element, as a list of two strings
|
||||
# cmd - Element for the <command>
|
||||
# newline() - print a newline to the output file (utility function)
|
||||
#
|
||||
class OutputGenerator:
|
||||
"""Generate specified API interfaces in a specific style, such as a C header"""
|
||||
|
||||
# categoryToPath - map XML 'category' to include file directory name
|
||||
categoryToPath = {
|
||||
'bitmask' : 'flags',
|
||||
'enum' : 'enums',
|
||||
'funcpointer' : 'funcpointers',
|
||||
'handle' : 'handles',
|
||||
'define' : 'defines',
|
||||
'basetype' : 'basetypes',
|
||||
}
|
||||
|
||||
# Constructor
|
||||
def __init__(self,
|
||||
errFile = sys.stderr,
|
||||
warnFile = sys.stderr,
|
||||
diagFile = sys.stdout):
|
||||
self.outFile = None
|
||||
self.errFile = errFile
|
||||
self.warnFile = warnFile
|
||||
self.diagFile = diagFile
|
||||
# Internal state
|
||||
self.featureName = None
|
||||
self.genOpts = None
|
||||
self.registry = None
|
||||
# Used for extension enum value generation
|
||||
self.extBase = 1000000000
|
||||
self.extBlockSize = 1000
|
||||
self.madeDirs = {}
|
||||
|
||||
# logMsg - write a message of different categories to different
|
||||
# destinations.
|
||||
# level -
|
||||
# 'diag' (diagnostic, voluminous)
|
||||
# 'warn' (warning)
|
||||
# 'error' (fatal error - raises exception after logging)
|
||||
# *args - print()-style arguments to direct to corresponding log
|
||||
def logMsg(self, level, *args):
|
||||
"""Log a message at the given level. Can be ignored or log to a file"""
|
||||
if level == 'error':
|
||||
strfile = io.StringIO()
|
||||
write('ERROR:', *args, file=strfile)
|
||||
if self.errFile is not None:
|
||||
write(strfile.getvalue(), file=self.errFile)
|
||||
raise UserWarning(strfile.getvalue())
|
||||
elif level == 'warn':
|
||||
if self.warnFile is not None:
|
||||
write('WARNING:', *args, file=self.warnFile)
|
||||
elif level == 'diag':
|
||||
if self.diagFile is not None:
|
||||
write('DIAG:', *args, file=self.diagFile)
|
||||
else:
|
||||
raise UserWarning(
|
||||
'*** FATAL ERROR in Generator.logMsg: unknown level:' + level)
|
||||
|
||||
# enumToValue - parses and converts an <enum> tag into a value.
|
||||
# Returns a list
|
||||
# first element - integer representation of the value, or None
|
||||
# if needsNum is False. The value must be a legal number
|
||||
# if needsNum is True.
|
||||
# second element - string representation of the value
|
||||
# There are several possible representations of values.
|
||||
# A 'value' attribute simply contains the value.
|
||||
# A 'bitpos' attribute defines a value by specifying the bit
|
||||
# position which is set in that value.
|
||||
# A 'offset','extbase','extends' triplet specifies a value
|
||||
# as an offset to a base value defined by the specified
|
||||
# 'extbase' extension name, which is then cast to the
|
||||
# typename specified by 'extends'. This requires probing
|
||||
# the registry database, and imbeds knowledge of the
|
||||
# API extension enum scheme in this function.
|
||||
# A 'alias' attribute contains the name of another enum
|
||||
# which this is an alias of. The other enum must be
|
||||
# declared first when emitting this enum.
|
||||
def enumToValue(self, elem, needsNum):
|
||||
name = elem.get('name')
|
||||
numVal = None
|
||||
if 'value' in elem.keys():
|
||||
value = elem.get('value')
|
||||
# print('About to translate value =', value, 'type =', type(value))
|
||||
if needsNum:
|
||||
numVal = int(value, 0)
|
||||
# If there's a non-integer, numeric 'type' attribute (e.g. 'u' or
|
||||
# 'ull'), append it to the string value.
|
||||
# t = enuminfo.elem.get('type')
|
||||
# if t is not None and t != '' and t != 'i' and t != 's':
|
||||
# value += enuminfo.type
|
||||
self.logMsg('diag', 'Enum', name, '-> value [', numVal, ',', value, ']')
|
||||
return [numVal, value]
|
||||
if 'bitpos' in elem.keys():
|
||||
value = elem.get('bitpos')
|
||||
bitpos = int(value, 0)
|
||||
numVal = 1 << bitpos
|
||||
value = '0x%08x' % numVal
|
||||
if( bitpos >= 32 ):
|
||||
value = value + 'ULL'
|
||||
self.logMsg('diag', 'Enum', name, '-> bitpos [', numVal, ',', value, ']')
|
||||
return [numVal, value]
|
||||
if 'offset' in elem.keys():
|
||||
# Obtain values in the mapping from the attributes
|
||||
enumNegative = False
|
||||
offset = int(elem.get('offset'),0)
|
||||
extnumber = int(elem.get('extnumber'),0)
|
||||
extends = elem.get('extends')
|
||||
if 'dir' in elem.keys():
|
||||
enumNegative = True
|
||||
self.logMsg('diag', 'Enum', name, 'offset =', offset,
|
||||
'extnumber =', extnumber, 'extends =', extends,
|
||||
'enumNegative =', enumNegative)
|
||||
# Now determine the actual enumerant value, as defined
|
||||
# in the "Layers and Extensions" appendix of the spec.
|
||||
numVal = self.extBase + (extnumber - 1) * self.extBlockSize + offset
|
||||
if enumNegative:
|
||||
numVal *= -1
|
||||
value = '%d' % numVal
|
||||
# More logic needed!
|
||||
self.logMsg('diag', 'Enum', name, '-> offset [', numVal, ',', value, ']')
|
||||
return [numVal, value]
|
||||
if 'alias' in elem.keys():
|
||||
return [None, elem.get('alias')]
|
||||
return [None, None]
|
||||
|
||||
# checkDuplicateEnums - sanity check for enumerated values
|
||||
# enums - list of <enum> Elements
|
||||
# returns the list with duplicates stripped
|
||||
def checkDuplicateEnums(self, enums):
|
||||
# Dictionaries indexed by name and numeric value.
|
||||
# Entries are [ Element, numVal, strVal ] matching name or value
|
||||
|
||||
nameMap = {}
|
||||
valueMap = {}
|
||||
|
||||
stripped = []
|
||||
for elem in enums:
|
||||
name = elem.get('name')
|
||||
(numVal, strVal) = self.enumToValue(elem, True)
|
||||
|
||||
if name in nameMap:
|
||||
# Duplicate name found; check values
|
||||
(name2, numVal2, strVal2) = nameMap[name]
|
||||
|
||||
# Duplicate enum values for the same name are benign. This
|
||||
# happens when defining the same enum conditionally in
|
||||
# several extension blocks.
|
||||
if (strVal2 == strVal or (numVal is not None and
|
||||
numVal == numVal2)):
|
||||
True
|
||||
# self.logMsg('info', 'checkDuplicateEnums: Duplicate enum (' + name +
|
||||
# ') found with the same value:' + strVal)
|
||||
else:
|
||||
self.logMsg('warn', 'checkDuplicateEnums: Duplicate enum (' + name +
|
||||
') found with different values:' + strVal +
|
||||
' and ' + strVal2)
|
||||
|
||||
# Don't add the duplicate to the returned list
|
||||
continue
|
||||
elif numVal in valueMap:
|
||||
# Duplicate value found (such as an alias); report it, but
|
||||
# still add this enum to the list.
|
||||
(name2, numVal2, strVal2) = valueMap[numVal]
|
||||
|
||||
try:
|
||||
self.logMsg('warn', 'Two enums found with the same value: '
|
||||
+ name + ' = ' + name2.get('name') + ' = ' + strVal)
|
||||
except:
|
||||
pdb.set_trace()
|
||||
|
||||
# Track this enum to detect followon duplicates
|
||||
nameMap[name] = [ elem, numVal, strVal ]
|
||||
if numVal is not None:
|
||||
valueMap[numVal] = [ elem, numVal, strVal ]
|
||||
|
||||
# Add this enum to the list
|
||||
stripped.append(elem)
|
||||
|
||||
# Return the list
|
||||
return stripped
|
||||
|
||||
# buildEnumCDecl
|
||||
# Generates the C declaration for an enum
|
||||
def buildEnumCDecl(self, expand, groupinfo, groupName):
|
||||
groupElem = groupinfo.elem
|
||||
|
||||
if self.genOpts.conventions.constFlagBits and groupElem.get('type') == 'bitmask':
|
||||
return self.buildEnumCDecl_Bitmask( groupinfo, groupName)
|
||||
else:
|
||||
return self.buildEnumCDecl_Enum(expand, groupinfo, groupName)
|
||||
|
||||
# buildEnumCDecl_Bitmask
|
||||
# Generates the C declaration for an "enum" that is actually a
|
||||
# set of flag bits
|
||||
def buildEnumCDecl_Bitmask(self, groupinfo, groupName):
|
||||
groupElem = groupinfo.elem
|
||||
flagTypeName = groupinfo.flagType.elem.get('name')
|
||||
|
||||
# Prefix
|
||||
body = "// Flag bits for " + flagTypeName + "\n"
|
||||
|
||||
# Loop over the nested 'enum' tags.
|
||||
for elem in groupElem.findall('enum'):
|
||||
# Convert the value to an integer and use that to track min/max.
|
||||
# Values of form -(number) are accepted but nothing more complex.
|
||||
# Should catch exceptions here for more complex constructs. Not yet.
|
||||
(_, strVal) = self.enumToValue(elem, True)
|
||||
name = elem.get('name')
|
||||
body += "static const " + flagTypeName + " " + name + " = " + strVal + ";\n"
|
||||
|
||||
# Postfix
|
||||
|
||||
return ("bitmask", body)
|
||||
|
||||
# Generates the C declaration for an enumerated type
|
||||
def buildEnumCDecl_Enum(self, expand, groupinfo, groupName):
|
||||
groupElem = groupinfo.elem
|
||||
|
||||
# Break the group name into prefix and suffix portions for range
|
||||
# enum generation
|
||||
expandName = re.sub(r'([0-9a-z_])([A-Z0-9])',r'\1_\2',groupName).upper()
|
||||
expandPrefix = expandName
|
||||
expandSuffix = ''
|
||||
expandSuffixMatch = re.search(r'[A-Z][A-Z]+$',groupName)
|
||||
if expandSuffixMatch:
|
||||
expandSuffix = '_' + expandSuffixMatch.group()
|
||||
# Strip off the suffix from the prefix
|
||||
expandPrefix = expandName.rsplit(expandSuffix, 1)[0]
|
||||
|
||||
# Prefix
|
||||
body = "typedef enum " + groupName + " {\n"
|
||||
|
||||
# @@ Should use the type="bitmask" attribute instead
|
||||
isEnum = ('FLAG_BITS' not in expandPrefix)
|
||||
|
||||
# Get a list of nested 'enum' tags.
|
||||
enums = groupElem.findall('enum')
|
||||
|
||||
# Check for and report duplicates, and return a list with them
|
||||
# removed.
|
||||
enums = self.checkDuplicateEnums(enums)
|
||||
|
||||
# Loop over the nested 'enum' tags. Keep track of the minimum and
|
||||
# maximum numeric values, if they can be determined; but only for
|
||||
# core API enumerants, not extension enumerants. This is inferred
|
||||
# by looking for 'extends' attributes.
|
||||
minName = None
|
||||
|
||||
# Accumulate non-numeric enumerant values separately and append
|
||||
# them following the numeric values, to allow for aliases.
|
||||
# NOTE: this doesn't do a topological sort yet, so aliases of
|
||||
# aliases can still get in the wrong order.
|
||||
aliasText = ""
|
||||
|
||||
for elem in enums:
|
||||
# Convert the value to an integer and use that to track min/max.
|
||||
# Values of form -(number) are accepted but nothing more complex.
|
||||
# Should catch exceptions here for more complex constructs. Not yet.
|
||||
(numVal,strVal) = self.enumToValue(elem, True)
|
||||
name = elem.get('name')
|
||||
|
||||
# Extension enumerants are only included if they are required
|
||||
if self.isEnumRequired(elem):
|
||||
decl = " " + name + " = " + strVal + ",\n"
|
||||
if numVal is not None:
|
||||
body += decl
|
||||
else:
|
||||
aliasText += decl
|
||||
|
||||
# Don't track min/max for non-numbers (numVal is None)
|
||||
if isEnum and numVal is not None and elem.get('extends') is None:
|
||||
if minName is None:
|
||||
minName = maxName = name
|
||||
minValue = maxValue = numVal
|
||||
elif numVal < minValue:
|
||||
minName = name
|
||||
minValue = numVal
|
||||
elif numVal > maxValue:
|
||||
maxName = name
|
||||
maxValue = numVal
|
||||
|
||||
# Now append the non-numeric enumerant values
|
||||
body += aliasText
|
||||
|
||||
# Generate min/max value tokens and a range-padding enum. Need some
|
||||
# additional padding to generate correct names...
|
||||
if isEnum and expand:
|
||||
body += " " + expandPrefix + "_BEGIN_RANGE" + expandSuffix + " = " + minName + ",\n"
|
||||
body += " " + expandPrefix + "_END_RANGE" + expandSuffix + " = " + maxName + ",\n"
|
||||
body += " " + expandPrefix + "_RANGE_SIZE" + expandSuffix + " = (" + maxName + " - " + minName + " + 1),\n"
|
||||
|
||||
# Always generate this to make sure the enumerated type is 32 bits
|
||||
body += " " + expandPrefix + "_MAX_ENUM" + expandSuffix + " = 0x7FFFFFFF\n"
|
||||
|
||||
# Postfix
|
||||
body += "} " + groupName + ";"
|
||||
|
||||
# Determine appropriate section for this declaration
|
||||
if groupElem.get('type') == 'bitmask':
|
||||
section = 'bitmask'
|
||||
else:
|
||||
section = 'group'
|
||||
|
||||
return (section, body)
|
||||
|
||||
def makeDir(self, path):
|
||||
self.logMsg('diag', 'OutputGenerator::makeDir(' + path + ')')
|
||||
if path not in self.madeDirs:
|
||||
# This can get race conditions with multiple writers, see
|
||||
# https://stackoverflow.com/questions/273192/
|
||||
if not os.path.exists(path):
|
||||
os.makedirs(path)
|
||||
self.madeDirs[path] = None
|
||||
|
||||
def beginFile(self, genOpts):
|
||||
self.genOpts = genOpts
|
||||
|
||||
# Open specified output file. Not done in constructor since a
|
||||
# Generator can be used without writing to a file.
|
||||
if self.genOpts.filename is not None:
|
||||
if sys.platform == 'win32':
|
||||
directory = Path(self.genOpts.directory)
|
||||
if not Path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
self.outFile = (directory / self.genOpts.filename).open('w', encoding='utf-8')
|
||||
else:
|
||||
filename = self.genOpts.directory + '/' + self.genOpts.filename
|
||||
self.outFile = io.open(filename, 'w', encoding='utf-8')
|
||||
else:
|
||||
self.outFile = sys.stdout
|
||||
|
||||
def endFile(self):
|
||||
if self.errFile:
|
||||
self.errFile.flush()
|
||||
if self.warnFile:
|
||||
self.warnFile.flush()
|
||||
if self.diagFile:
|
||||
self.diagFile.flush()
|
||||
self.outFile.flush()
|
||||
if self.outFile != sys.stdout and self.outFile != sys.stderr:
|
||||
self.outFile.close()
|
||||
self.genOpts = None
|
||||
|
||||
def beginFeature(self, interface, emit):
|
||||
self.emit = emit
|
||||
self.featureName = interface.get('name')
|
||||
# If there's an additional 'protect' attribute in the feature, save it
|
||||
self.featureExtraProtect = interface.get('protect')
|
||||
|
||||
def endFeature(self):
|
||||
# Derived classes responsible for emitting feature
|
||||
self.featureName = None
|
||||
self.featureExtraProtect = None
|
||||
|
||||
# Utility method to validate we're generating something only inside a
|
||||
# <feature> tag
|
||||
def validateFeature(self, featureType, featureName):
|
||||
if self.featureName is None:
|
||||
raise UserWarning('Attempt to generate', featureType,
|
||||
featureName, 'when not in feature')
|
||||
|
||||
# Type generation
|
||||
def genType(self, typeinfo, name, alias):
|
||||
self.validateFeature('type', name)
|
||||
|
||||
# Struct (e.g. C "struct" type) generation
|
||||
def genStruct(self, typeinfo, typeName, alias):
|
||||
self.validateFeature('struct', typeName)
|
||||
|
||||
# The mixed-mode <member> tags may contain no-op <comment> tags.
|
||||
# It is convenient to remove them here where all output generators
|
||||
# will benefit.
|
||||
for member in typeinfo.elem.findall('.//member'):
|
||||
for comment in member.findall('comment'):
|
||||
member.remove(comment)
|
||||
|
||||
# Group (e.g. C "enum" type) generation
|
||||
def genGroup(self, groupinfo, groupName, alias):
|
||||
self.validateFeature('group', groupName)
|
||||
|
||||
# Enumerant (really, constant) generation
|
||||
def genEnum(self, enuminfo, typeName, alias):
|
||||
self.validateFeature('enum', typeName)
|
||||
|
||||
# Command generation
|
||||
def genCmd(self, cmd, cmdinfo, alias):
|
||||
self.validateFeature('command', cmdinfo)
|
||||
|
||||
# Utility functions - turn a <proto> <name> into C-language prototype
|
||||
# and typedef declarations for that name.
|
||||
# name - contents of <name> tag
|
||||
# tail - whatever text follows that tag in the Element
|
||||
def makeProtoName(self, name, tail):
|
||||
return self.genOpts.apientry + name + tail
|
||||
|
||||
def makeTypedefName(self, name, tail):
|
||||
return '(' + self.genOpts.apientryp + 'PFN_' + name + tail + ')'
|
||||
|
||||
# makeCParamDecl - return a string which is an indented, formatted
|
||||
# declaration for a <param> or <member> block (e.g. function parameter
|
||||
# or structure/union member).
|
||||
# param - Element (<param> or <member>) to format
|
||||
# aligncol - if non-zero, attempt to align the nested <name> element
|
||||
# at this column
|
||||
def makeCParamDecl(self, param, aligncol):
|
||||
paramdecl = ' ' + noneStr(param.text)
|
||||
for elem in param:
|
||||
text = noneStr(elem.text)
|
||||
tail = noneStr(elem.tail)
|
||||
|
||||
if self.genOpts.conventions.is_voidpointer_alias(elem.tag, text, tail):
|
||||
# OpenXR-specific macro insertion
|
||||
tail = self.genOpts.conventions.make_voidpointer_alias(tail)
|
||||
if elem.tag == 'name' and aligncol > 0:
|
||||
self.logMsg('diag', 'Aligning parameter', elem.text, 'to column', self.genOpts.alignFuncParam)
|
||||
# Align at specified column, if possible
|
||||
paramdecl = paramdecl.rstrip()
|
||||
oldLen = len(paramdecl)
|
||||
# This works around a problem where very long type names -
|
||||
# longer than the alignment column - would run into the tail
|
||||
# text.
|
||||
paramdecl = paramdecl.ljust(aligncol-1) + ' '
|
||||
newLen = len(paramdecl)
|
||||
self.logMsg('diag', 'Adjust length of parameter decl from', oldLen, 'to', newLen, ':', paramdecl)
|
||||
paramdecl += text + tail
|
||||
return paramdecl
|
||||
|
||||
# getCParamTypeLength - return the length of the type field is an indented, formatted
|
||||
# declaration for a <param> or <member> block (e.g. function parameter
|
||||
# or structure/union member).
|
||||
# param - Element (<param> or <member>) to identify
|
||||
def getCParamTypeLength(self, param):
|
||||
paramdecl = ' ' + noneStr(param.text)
|
||||
for elem in param:
|
||||
text = noneStr(elem.text)
|
||||
tail = noneStr(elem.tail)
|
||||
|
||||
if self.genOpts.conventions.is_voidpointer_alias(elem.tag, text, tail):
|
||||
# OpenXR-specific macro insertion
|
||||
tail = self.genOpts.conventions.make_voidpointer_alias(tail)
|
||||
if elem.tag == 'name':
|
||||
# Align at specified column, if possible
|
||||
newLen = len(paramdecl.rstrip())
|
||||
self.logMsg('diag', 'Identifying length of', elem.text, 'as', newLen)
|
||||
paramdecl += text + tail
|
||||
|
||||
return newLen
|
||||
|
||||
# isEnumRequired(elem) - return True if this <enum> element is
|
||||
# required, False otherwise
|
||||
# elem - <enum> element to test
|
||||
def isEnumRequired(self, elem):
|
||||
required = elem.get('required') is not None
|
||||
self.logMsg('diag', 'isEnumRequired:', elem.get('name'),
|
||||
'->', required)
|
||||
return required
|
||||
|
||||
#@@@ This code is overridden by equivalent code now run in
|
||||
#@@@ Registry.generateFeature
|
||||
|
||||
required = False
|
||||
|
||||
extname = elem.get('extname')
|
||||
if extname is not None:
|
||||
# 'supported' attribute was injected when the <enum> element was
|
||||
# moved into the <enums> group in Registry.parseTree()
|
||||
if self.genOpts.defaultExtensions == elem.get('supported'):
|
||||
required = True
|
||||
elif re.match(self.genOpts.addExtensions, extname) is not None:
|
||||
required = True
|
||||
elif elem.get('version') is not None:
|
||||
required = re.match(self.genOpts.emitversions, elem.get('version')) is not None
|
||||
else:
|
||||
required = True
|
||||
|
||||
return required
|
||||
|
||||
# makeCDecls - return C prototype and function pointer typedef for a
|
||||
# command, as a two-element list of strings.
|
||||
# cmd - Element containing a <command> tag
|
||||
def makeCDecls(self, cmd):
|
||||
"""Generate C function pointer typedef for <command> Element"""
|
||||
proto = cmd.find('proto')
|
||||
params = cmd.findall('param')
|
||||
# Begin accumulating prototype and typedef strings
|
||||
pdecl = self.genOpts.apicall
|
||||
tdecl = 'typedef '
|
||||
|
||||
# Insert the function return type/name.
|
||||
# For prototypes, add APIENTRY macro before the name
|
||||
# For typedefs, add (APIENTRY *<name>) around the name and
|
||||
# use the PFN_cmdnameproc naming convention.
|
||||
# Done by walking the tree for <proto> element by element.
|
||||
# etree has elem.text followed by (elem[i], elem[i].tail)
|
||||
# for each child element and any following text
|
||||
# Leading text
|
||||
pdecl += noneStr(proto.text)
|
||||
tdecl += noneStr(proto.text)
|
||||
# For each child element, if it's a <name> wrap in appropriate
|
||||
# declaration. Otherwise append its contents and tail contents.
|
||||
for elem in proto:
|
||||
text = noneStr(elem.text)
|
||||
tail = noneStr(elem.tail)
|
||||
if elem.tag == 'name':
|
||||
pdecl += self.makeProtoName(text, tail)
|
||||
tdecl += self.makeTypedefName(text, tail)
|
||||
else:
|
||||
pdecl += text + tail
|
||||
tdecl += text + tail
|
||||
# Now add the parameter declaration list, which is identical
|
||||
# for prototypes and typedefs. Concatenate all the text from
|
||||
# a <param> node without the tags. No tree walking required
|
||||
# since all tags are ignored.
|
||||
# Uses: self.indentFuncProto
|
||||
# self.indentFuncPointer
|
||||
# self.alignFuncParam
|
||||
n = len(params)
|
||||
# Indented parameters
|
||||
if n > 0:
|
||||
indentdecl = '(\n'
|
||||
indentdecl += ',\n'.join(self.makeCParamDecl(p, self.genOpts.alignFuncParam)
|
||||
for p in params)
|
||||
indentdecl += ');'
|
||||
else:
|
||||
indentdecl = '(void);'
|
||||
# Non-indented parameters
|
||||
paramdecl = '('
|
||||
if n > 0:
|
||||
paramnames = (''.join(t for t in p.itertext())
|
||||
for p in params)
|
||||
paramdecl += ', '.join(paramnames)
|
||||
else:
|
||||
paramdecl += 'void'
|
||||
paramdecl += ");"
|
||||
return [ pdecl + indentdecl, tdecl + paramdecl ]
|
||||
|
||||
def newline(self):
|
||||
write('', file=self.outFile)
|
||||
|
||||
def setRegistry(self, registry):
|
||||
self.registry = registry
|
||||
541
thirdparty/vulkan/registry/genvk.py
vendored
Executable file
541
thirdparty/vulkan/registry/genvk.py
vendored
Executable file
@ -0,0 +1,541 @@
|
||||
#!/usr/bin/python3
|
||||
#
|
||||
# Copyright (c) 2013-2019 The Khronos Group Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import argparse
|
||||
import pdb
|
||||
import re
|
||||
import sys
|
||||
import time
|
||||
import xml.etree.ElementTree as etree
|
||||
|
||||
from cgenerator import CGeneratorOptions, COutputGenerator
|
||||
from docgenerator import DocGeneratorOptions, DocOutputGenerator
|
||||
from extensionmetadocgenerator import (ExtensionMetaDocGeneratorOptions,
|
||||
ExtensionMetaDocOutputGenerator)
|
||||
from generator import write
|
||||
from hostsyncgenerator import HostSynchronizationOutputGenerator
|
||||
from pygenerator import PyOutputGenerator
|
||||
from reg import Registry
|
||||
from validitygenerator import ValidityOutputGenerator
|
||||
from vkconventions import VulkanConventions
|
||||
|
||||
# Simple timer functions
|
||||
startTime = None
|
||||
|
||||
|
||||
def startTimer(timeit):
|
||||
global startTime
|
||||
if timeit:
|
||||
startTime = time.process_time()
|
||||
|
||||
def endTimer(timeit, msg):
|
||||
global startTime
|
||||
if timeit:
|
||||
endTime = time.process_time()
|
||||
write(msg, endTime - startTime, file=sys.stderr)
|
||||
startTime = None
|
||||
|
||||
# Turn a list of strings into a regexp string matching exactly those strings
|
||||
def makeREstring(list, default = None):
|
||||
if len(list) > 0 or default is None:
|
||||
return '^(' + '|'.join(list) + ')$'
|
||||
else:
|
||||
return default
|
||||
|
||||
# Returns a directory of [ generator function, generator options ] indexed
|
||||
# by specified short names. The generator options incorporate the following
|
||||
# parameters:
|
||||
#
|
||||
# args is an parsed argument object; see below for the fields that are used.
|
||||
def makeGenOpts(args):
|
||||
global genOpts
|
||||
genOpts = {}
|
||||
|
||||
# Default class of extensions to include, or None
|
||||
defaultExtensions = args.defaultExtensions
|
||||
|
||||
# Additional extensions to include (list of extensions)
|
||||
extensions = args.extension
|
||||
|
||||
# Extensions to remove (list of extensions)
|
||||
removeExtensions = args.removeExtensions
|
||||
|
||||
# Extensions to emit (list of extensions)
|
||||
emitExtensions = args.emitExtensions
|
||||
|
||||
# Features to include (list of features)
|
||||
features = args.feature
|
||||
|
||||
# Whether to disable inclusion protect in headers
|
||||
protect = args.protect
|
||||
|
||||
# Output target directory
|
||||
directory = args.directory
|
||||
|
||||
# Descriptive names for various regexp patterns used to select
|
||||
# versions and extensions
|
||||
allFeatures = allExtensions = r'.*'
|
||||
|
||||
# Turn lists of names/patterns into matching regular expressions
|
||||
addExtensionsPat = makeREstring(extensions, None)
|
||||
removeExtensionsPat = makeREstring(removeExtensions, None)
|
||||
emitExtensionsPat = makeREstring(emitExtensions, allExtensions)
|
||||
featuresPat = makeREstring(features, allFeatures)
|
||||
|
||||
# Copyright text prefixing all headers (list of strings).
|
||||
prefixStrings = [
|
||||
'/*',
|
||||
'** Copyright (c) 2015-2019 The Khronos Group Inc.',
|
||||
'**',
|
||||
'** Licensed under the Apache License, Version 2.0 (the "License");',
|
||||
'** you may not use this file except in compliance with the License.',
|
||||
'** You may obtain a copy of the License at',
|
||||
'**',
|
||||
'** http://www.apache.org/licenses/LICENSE-2.0',
|
||||
'**',
|
||||
'** Unless required by applicable law or agreed to in writing, software',
|
||||
'** distributed under the License is distributed on an "AS IS" BASIS,',
|
||||
'** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.',
|
||||
'** See the License for the specific language governing permissions and',
|
||||
'** limitations under the License.',
|
||||
'*/',
|
||||
''
|
||||
]
|
||||
|
||||
# Text specific to Vulkan headers
|
||||
vkPrefixStrings = [
|
||||
'/*',
|
||||
'** This header is generated from the Khronos Vulkan XML API Registry.',
|
||||
'**',
|
||||
'*/',
|
||||
''
|
||||
]
|
||||
|
||||
# Defaults for generating re-inclusion protection wrappers (or not)
|
||||
protectFile = protect
|
||||
|
||||
# An API style conventions object
|
||||
conventions = VulkanConventions()
|
||||
|
||||
# API include files for spec and ref pages
|
||||
# Overwrites include subdirectories in spec source tree
|
||||
# The generated include files do not include the calling convention
|
||||
# macros (apientry etc.), unlike the header files.
|
||||
# Because the 1.0 core branch includes ref pages for extensions,
|
||||
# all the extension interfaces need to be generated, even though
|
||||
# none are used by the core spec itself.
|
||||
genOpts['apiinc'] = [
|
||||
DocOutputGenerator,
|
||||
DocGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'timeMarker',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = None,
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
apicall = '',
|
||||
apientry = '',
|
||||
apientryp = '*',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False)
|
||||
]
|
||||
|
||||
# API names to validate man/api spec includes & links
|
||||
genOpts['vkapi.py'] = [
|
||||
PyOutputGenerator,
|
||||
DocGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vkapi.py',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = None,
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat)
|
||||
]
|
||||
|
||||
# API validity files for spec
|
||||
genOpts['validinc'] = [
|
||||
ValidityOutputGenerator,
|
||||
DocGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'timeMarker',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = None,
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat)
|
||||
]
|
||||
|
||||
# API host sync table files for spec
|
||||
genOpts['hostsyncinc'] = [
|
||||
HostSynchronizationOutputGenerator,
|
||||
DocGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'timeMarker',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = None,
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat)
|
||||
]
|
||||
|
||||
# Extension metainformation for spec extension appendices
|
||||
genOpts['extinc'] = [
|
||||
ExtensionMetaDocOutputGenerator,
|
||||
ExtensionMetaDocGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'timeMarker',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = None,
|
||||
defaultExtensions = defaultExtensions,
|
||||
addExtensions = None,
|
||||
removeExtensions = None,
|
||||
emitExtensions = emitExtensionsPat)
|
||||
]
|
||||
|
||||
# Platform extensions, in their own header files
|
||||
# Each element of the platforms[] array defines information for
|
||||
# generating a single platform:
|
||||
# [0] is the generated header file name
|
||||
# [1] is the set of platform extensions to generate
|
||||
# [2] is additional extensions whose interfaces should be considered,
|
||||
# but suppressed in the output, to avoid duplicate definitions of
|
||||
# dependent types like VkDisplayKHR and VkSurfaceKHR which come from
|
||||
# non-platform extensions.
|
||||
|
||||
# Track all platform extensions, for exclusion from vulkan_core.h
|
||||
allPlatformExtensions = []
|
||||
|
||||
# Extensions suppressed for all platforms.
|
||||
# Covers common WSI extension types.
|
||||
commonSuppressExtensions = [ 'VK_KHR_display', 'VK_KHR_swapchain' ]
|
||||
|
||||
platforms = [
|
||||
[ 'vulkan_android.h', [ 'VK_KHR_android_surface',
|
||||
'VK_ANDROID_external_memory_android_hardware_buffer'
|
||||
], commonSuppressExtensions ],
|
||||
[ 'vulkan_fuchsia.h', [ 'VK_FUCHSIA_imagepipe_surface'], commonSuppressExtensions ],
|
||||
[ 'vulkan_ggp.h', [ 'VK_GGP_stream_descriptor_surface',
|
||||
'VK_GGP_frame_token' ], commonSuppressExtensions ],
|
||||
[ 'vulkan_ios.h', [ 'VK_MVK_ios_surface' ], commonSuppressExtensions ],
|
||||
[ 'vulkan_macos.h', [ 'VK_MVK_macos_surface' ], commonSuppressExtensions ],
|
||||
[ 'vulkan_vi.h', [ 'VK_NN_vi_surface' ], commonSuppressExtensions ],
|
||||
[ 'vulkan_wayland.h', [ 'VK_KHR_wayland_surface' ], commonSuppressExtensions ],
|
||||
[ 'vulkan_win32.h', [ 'VK_.*_win32(|_.*)', 'VK_EXT_full_screen_exclusive' ],
|
||||
commonSuppressExtensions +
|
||||
[ 'VK_KHR_external_semaphore',
|
||||
'VK_KHR_external_memory_capabilities',
|
||||
'VK_KHR_external_fence',
|
||||
'VK_KHR_external_fence_capabilities',
|
||||
'VK_KHR_get_surface_capabilities2',
|
||||
'VK_NV_external_memory_capabilities',
|
||||
] ],
|
||||
[ 'vulkan_xcb.h', [ 'VK_KHR_xcb_surface' ], commonSuppressExtensions ],
|
||||
[ 'vulkan_xlib.h', [ 'VK_KHR_xlib_surface' ], commonSuppressExtensions ],
|
||||
[ 'vulkan_xlib_xrandr.h', [ 'VK_EXT_acquire_xlib_display' ], commonSuppressExtensions ],
|
||||
[ 'vulkan_metal.h', [ 'VK_EXT_metal_surface' ], commonSuppressExtensions ],
|
||||
]
|
||||
|
||||
for platform in platforms:
|
||||
headername = platform[0]
|
||||
|
||||
allPlatformExtensions += platform[1]
|
||||
|
||||
addPlatformExtensionsRE = makeREstring(platform[1] + platform[2])
|
||||
emitPlatformExtensionsRE = makeREstring(platform[1])
|
||||
|
||||
opts = CGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = headername,
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = None,
|
||||
defaultExtensions = None,
|
||||
addExtensions = addPlatformExtensionsRE,
|
||||
removeExtensions = None,
|
||||
emitExtensions = emitPlatformExtensionsRE,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
genFuncPointers = True,
|
||||
protectFile = protectFile,
|
||||
protectFeature = False,
|
||||
protectProto = '#ifndef',
|
||||
protectProtoStr = 'VK_NO_PROTOTYPES',
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
genEnumBeginEndRange = True)
|
||||
|
||||
genOpts[headername] = [ COutputGenerator, opts ]
|
||||
|
||||
# Header for core API + extensions.
|
||||
# To generate just the core API,
|
||||
# change to 'defaultExtensions = None' below.
|
||||
#
|
||||
# By default this adds all enabled, non-platform extensions.
|
||||
# It removes all platform extensions (from the platform headers options
|
||||
# constructed above) as well as any explicitly specified removals.
|
||||
|
||||
removeExtensionsPat = makeREstring(allPlatformExtensions + removeExtensions, None)
|
||||
|
||||
genOpts['vulkan_core.h'] = [
|
||||
COutputGenerator,
|
||||
CGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vulkan_core.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = defaultExtensions,
|
||||
addExtensions = None,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
genFuncPointers = True,
|
||||
protectFile = protectFile,
|
||||
protectFeature = False,
|
||||
protectProto = '#ifndef',
|
||||
protectProtoStr = 'VK_NO_PROTOTYPES',
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
genEnumBeginEndRange = True)
|
||||
]
|
||||
|
||||
# Unused - vulkan10.h target.
|
||||
# It is possible to generate a header with just the Vulkan 1.0 +
|
||||
# extension interfaces defined, but since the promoted KHR extensions
|
||||
# are now defined in terms of the 1.1 interfaces, such a header is very
|
||||
# similar to vulkan_core.h.
|
||||
genOpts['vulkan10.h'] = [
|
||||
COutputGenerator,
|
||||
CGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vulkan10.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = 'VK_VERSION_1_0',
|
||||
emitversions = 'VK_VERSION_1_0',
|
||||
defaultExtensions = defaultExtensions,
|
||||
addExtensions = None,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
genFuncPointers = True,
|
||||
protectFile = protectFile,
|
||||
protectFeature = False,
|
||||
protectProto = '#ifndef',
|
||||
protectProtoStr = 'VK_NO_PROTOTYPES',
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48)
|
||||
]
|
||||
|
||||
genOpts['alias.h'] = [
|
||||
COutputGenerator,
|
||||
CGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'alias.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = defaultExtensions,
|
||||
addExtensions = None,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = None,
|
||||
genFuncPointers = False,
|
||||
protectFile = False,
|
||||
protectFeature = False,
|
||||
protectProto = '',
|
||||
protectProtoStr = '',
|
||||
apicall = '',
|
||||
apientry = '',
|
||||
apientryp = '',
|
||||
alignFuncParam = 36)
|
||||
]
|
||||
|
||||
# Generate a target based on the options in the matching genOpts{} object.
|
||||
# This is encapsulated in a function so it can be profiled and/or timed.
|
||||
# The args parameter is an parsed argument object containing the following
|
||||
# fields that are used:
|
||||
# target - target to generate
|
||||
# directory - directory to generate it in
|
||||
# protect - True if re-inclusion wrappers should be created
|
||||
# extensions - list of additional extensions to include in generated
|
||||
# interfaces
|
||||
def genTarget(args):
|
||||
# Create generator options with specified parameters
|
||||
makeGenOpts(args)
|
||||
|
||||
if args.target in genOpts:
|
||||
createGenerator = genOpts[args.target][0]
|
||||
options = genOpts[args.target][1]
|
||||
|
||||
if not args.quiet:
|
||||
write('* Building', options.filename, file=sys.stderr)
|
||||
write('* options.versions =', options.versions, file=sys.stderr)
|
||||
write('* options.emitversions =', options.emitversions, file=sys.stderr)
|
||||
write('* options.defaultExtensions =', options.defaultExtensions, file=sys.stderr)
|
||||
write('* options.addExtensions =', options.addExtensions, file=sys.stderr)
|
||||
write('* options.removeExtensions =', options.removeExtensions, file=sys.stderr)
|
||||
write('* options.emitExtensions =', options.emitExtensions, file=sys.stderr)
|
||||
|
||||
startTimer(args.time)
|
||||
gen = createGenerator(errFile=errWarn,
|
||||
warnFile=errWarn,
|
||||
diagFile=diag)
|
||||
reg.setGenerator(gen)
|
||||
reg.apiGen(options)
|
||||
|
||||
if not args.quiet:
|
||||
write('* Generated', options.filename, file=sys.stderr)
|
||||
endTimer(args.time, '* Time to generate ' + options.filename + ' =')
|
||||
else:
|
||||
write('No generator options for unknown target:',
|
||||
args.target, file=sys.stderr)
|
||||
|
||||
|
||||
# -feature name
|
||||
# -extension name
|
||||
# For both, "name" may be a single name, or a space-separated list
|
||||
# of names, or a regular expression.
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument('-defaultExtensions', action='store',
|
||||
default='vulkan',
|
||||
help='Specify a single class of extensions to add to targets')
|
||||
parser.add_argument('-extension', action='append',
|
||||
default=[],
|
||||
help='Specify an extension or extensions to add to targets')
|
||||
parser.add_argument('-removeExtensions', action='append',
|
||||
default=[],
|
||||
help='Specify an extension or extensions to remove from targets')
|
||||
parser.add_argument('-emitExtensions', action='append',
|
||||
default=[],
|
||||
help='Specify an extension or extensions to emit in targets')
|
||||
parser.add_argument('-feature', action='append',
|
||||
default=[],
|
||||
help='Specify a core API feature name or names to add to targets')
|
||||
parser.add_argument('-debug', action='store_true',
|
||||
help='Enable debugging')
|
||||
parser.add_argument('-dump', action='store_true',
|
||||
help='Enable dump to stderr')
|
||||
parser.add_argument('-diagfile', action='store',
|
||||
default=None,
|
||||
help='Write diagnostics to specified file')
|
||||
parser.add_argument('-errfile', action='store',
|
||||
default=None,
|
||||
help='Write errors and warnings to specified file instead of stderr')
|
||||
parser.add_argument('-noprotect', dest='protect', action='store_false',
|
||||
help='Disable inclusion protection in output headers')
|
||||
parser.add_argument('-profile', action='store_true',
|
||||
help='Enable profiling')
|
||||
parser.add_argument('-registry', action='store',
|
||||
default='vk.xml',
|
||||
help='Use specified registry file instead of vk.xml')
|
||||
parser.add_argument('-time', action='store_true',
|
||||
help='Enable timing')
|
||||
parser.add_argument('-validate', action='store_true',
|
||||
help='Enable group validation')
|
||||
parser.add_argument('-o', action='store', dest='directory',
|
||||
default='.',
|
||||
help='Create target and related files in specified directory')
|
||||
parser.add_argument('target', metavar='target', nargs='?',
|
||||
help='Specify target')
|
||||
parser.add_argument('-quiet', action='store_true', default=True,
|
||||
help='Suppress script output during normal execution.')
|
||||
parser.add_argument('-verbose', action='store_false', dest='quiet', default=True,
|
||||
help='Enable script output during normal execution.')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# This splits arguments which are space-separated lists
|
||||
args.feature = [name for arg in args.feature for name in arg.split()]
|
||||
args.extension = [name for arg in args.extension for name in arg.split()]
|
||||
|
||||
# Load & parse registry
|
||||
reg = Registry()
|
||||
|
||||
startTimer(args.time)
|
||||
tree = etree.parse(args.registry)
|
||||
endTimer(args.time, '* Time to make ElementTree =')
|
||||
|
||||
if args.debug:
|
||||
pdb.run('reg.loadElementTree(tree)')
|
||||
else:
|
||||
startTimer(args.time)
|
||||
reg.loadElementTree(tree)
|
||||
endTimer(args.time, '* Time to parse ElementTree =')
|
||||
|
||||
if args.validate:
|
||||
reg.validateGroups()
|
||||
|
||||
if args.dump:
|
||||
write('* Dumping registry to regdump.txt', file=sys.stderr)
|
||||
reg.dumpReg(filehandle = open('regdump.txt', 'w', encoding='utf-8'))
|
||||
|
||||
# create error/warning & diagnostic files
|
||||
if args.errfile:
|
||||
errWarn = open(args.errfile, 'w', encoding='utf-8')
|
||||
else:
|
||||
errWarn = sys.stderr
|
||||
|
||||
if args.diagfile:
|
||||
diag = open(args.diagfile, 'w', encoding='utf-8')
|
||||
else:
|
||||
diag = None
|
||||
|
||||
if args.debug:
|
||||
pdb.run('genTarget(args)')
|
||||
elif args.profile:
|
||||
import cProfile, pstats
|
||||
cProfile.run('genTarget(args)', 'profile.txt')
|
||||
p = pstats.Stats('profile.txt')
|
||||
p.strip_dirs().sort_stats('time').print_stats(50)
|
||||
else:
|
||||
genTarget(args)
|
||||
513
thirdparty/vulkan/registry/helper_file_generator.py
vendored
Executable file
513
thirdparty/vulkan/registry/helper_file_generator.py
vendored
Executable file
@ -0,0 +1,513 @@
|
||||
#!/usr/bin/python3 -i
|
||||
#
|
||||
# Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
# Copyright (c) 2015-2017 Valve Corporation
|
||||
# Copyright (c) 2015-2017 LunarG, Inc.
|
||||
# Copyright (c) 2015-2017 Google Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# Author: Mark Lobodzinski <mark@lunarg.com>
|
||||
# Author: Tobin Ehlis <tobine@google.com>
|
||||
# Author: John Zulauf <jzulauf@lunarg.com>
|
||||
|
||||
import os,re,sys
|
||||
import xml.etree.ElementTree as etree
|
||||
from generator import *
|
||||
from collections import namedtuple
|
||||
from common_codegen import *
|
||||
|
||||
#
|
||||
# HelperFileOutputGeneratorOptions - subclass of GeneratorOptions.
|
||||
class HelperFileOutputGeneratorOptions(GeneratorOptions):
|
||||
def __init__(self,
|
||||
conventions = None,
|
||||
filename = None,
|
||||
directory = '.',
|
||||
apiname = None,
|
||||
profile = None,
|
||||
versions = '.*',
|
||||
emitversions = '.*',
|
||||
defaultExtensions = None,
|
||||
addExtensions = None,
|
||||
removeExtensions = None,
|
||||
emitExtensions = None,
|
||||
sortProcedure = regSortFeatures,
|
||||
prefixText = "",
|
||||
genFuncPointers = True,
|
||||
protectFile = True,
|
||||
protectFeature = True,
|
||||
apicall = '',
|
||||
apientry = '',
|
||||
apientryp = '',
|
||||
alignFuncParam = 0,
|
||||
library_name = '',
|
||||
expandEnumerants = True,
|
||||
helper_file_type = ''):
|
||||
GeneratorOptions.__init__(self, conventions, filename, directory, apiname, profile,
|
||||
versions, emitversions, defaultExtensions,
|
||||
addExtensions, removeExtensions, emitExtensions, sortProcedure)
|
||||
self.prefixText = prefixText
|
||||
self.genFuncPointers = genFuncPointers
|
||||
self.protectFile = protectFile
|
||||
self.protectFeature = protectFeature
|
||||
self.apicall = apicall
|
||||
self.apientry = apientry
|
||||
self.apientryp = apientryp
|
||||
self.alignFuncParam = alignFuncParam
|
||||
self.library_name = library_name
|
||||
self.helper_file_type = helper_file_type
|
||||
#
|
||||
# HelperFileOutputGenerator - subclass of OutputGenerator. Outputs Vulkan helper files
|
||||
class HelperFileOutputGenerator(OutputGenerator):
|
||||
"""Generate helper file based on XML element attributes"""
|
||||
def __init__(self,
|
||||
errFile = sys.stderr,
|
||||
warnFile = sys.stderr,
|
||||
diagFile = sys.stdout):
|
||||
OutputGenerator.__init__(self, errFile, warnFile, diagFile)
|
||||
# Internal state - accumulators for different inner block text
|
||||
self.enum_output = '' # string built up of enum string routines
|
||||
# Internal state - accumulators for different inner block text
|
||||
self.structNames = [] # List of Vulkan struct typenames
|
||||
self.structTypes = dict() # Map of Vulkan struct typename to required VkStructureType
|
||||
self.structMembers = [] # List of StructMemberData records for all Vulkan structs
|
||||
self.object_types = [] # List of all handle types
|
||||
self.object_type_aliases = [] # Aliases to handles types (for handles that were extensions)
|
||||
self.debug_report_object_types = [] # Handy copy of debug_report_object_type enum data
|
||||
self.core_object_types = [] # Handy copy of core_object_type enum data
|
||||
self.device_extension_info = dict() # Dict of device extension name defines and ifdef values
|
||||
self.instance_extension_info = dict() # Dict of instance extension name defines and ifdef values
|
||||
|
||||
# Named tuples to store struct and command data
|
||||
self.StructType = namedtuple('StructType', ['name', 'value'])
|
||||
self.CommandParam = namedtuple('CommandParam', ['type', 'name', 'ispointer', 'isstaticarray', 'isconst', 'iscount', 'len', 'extstructs', 'cdecl'])
|
||||
self.StructMemberData = namedtuple('StructMemberData', ['name', 'members', 'ifdef_protect'])
|
||||
|
||||
self.custom_construct_params = {
|
||||
# safe_VkGraphicsPipelineCreateInfo needs to know if subpass has color and\or depth\stencil attachments to use its pointers
|
||||
'VkGraphicsPipelineCreateInfo' :
|
||||
', const bool uses_color_attachment, const bool uses_depthstencil_attachment',
|
||||
# safe_VkPipelineViewportStateCreateInfo needs to know if viewport and scissor is dynamic to use its pointers
|
||||
'VkPipelineViewportStateCreateInfo' :
|
||||
', const bool is_dynamic_viewports, const bool is_dynamic_scissors',
|
||||
}
|
||||
#
|
||||
# Called once at the beginning of each run
|
||||
def beginFile(self, genOpts):
|
||||
OutputGenerator.beginFile(self, genOpts)
|
||||
# User-supplied prefix text, if any (list of strings)
|
||||
self.helper_file_type = genOpts.helper_file_type
|
||||
self.library_name = genOpts.library_name
|
||||
# File Comment
|
||||
file_comment = '// *** THIS FILE IS GENERATED - DO NOT EDIT ***\n'
|
||||
file_comment += '// See helper_file_generator.py for modifications\n'
|
||||
write(file_comment, file=self.outFile)
|
||||
# Copyright Notice
|
||||
copyright = ''
|
||||
copyright += '\n'
|
||||
copyright += '/***************************************************************************\n'
|
||||
copyright += ' *\n'
|
||||
copyright += ' * Copyright (c) 2015-2017 The Khronos Group Inc.\n'
|
||||
copyright += ' * Copyright (c) 2015-2017 Valve Corporation\n'
|
||||
copyright += ' * Copyright (c) 2015-2017 LunarG, Inc.\n'
|
||||
copyright += ' * Copyright (c) 2015-2017 Google Inc.\n'
|
||||
copyright += ' *\n'
|
||||
copyright += ' * Licensed under the Apache License, Version 2.0 (the "License");\n'
|
||||
copyright += ' * you may not use this file except in compliance with the License.\n'
|
||||
copyright += ' * You may obtain a copy of the License at\n'
|
||||
copyright += ' *\n'
|
||||
copyright += ' * http://www.apache.org/licenses/LICENSE-2.0\n'
|
||||
copyright += ' *\n'
|
||||
copyright += ' * Unless required by applicable law or agreed to in writing, software\n'
|
||||
copyright += ' * distributed under the License is distributed on an "AS IS" BASIS,\n'
|
||||
copyright += ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
|
||||
copyright += ' * See the License for the specific language governing permissions and\n'
|
||||
copyright += ' * limitations under the License.\n'
|
||||
copyright += ' *\n'
|
||||
copyright += ' * Author: Mark Lobodzinski <mark@lunarg.com>\n'
|
||||
copyright += ' * Author: Courtney Goeltzenleuchter <courtneygo@google.com>\n'
|
||||
copyright += ' * Author: Tobin Ehlis <tobine@google.com>\n'
|
||||
copyright += ' * Author: Chris Forbes <chrisforbes@google.com>\n'
|
||||
copyright += ' * Author: John Zulauf<jzulauf@lunarg.com>\n'
|
||||
copyright += ' *\n'
|
||||
copyright += ' ****************************************************************************/\n'
|
||||
write(copyright, file=self.outFile)
|
||||
#
|
||||
# Write generated file content to output file
|
||||
def endFile(self):
|
||||
dest_file = ''
|
||||
dest_file += self.OutputDestFile()
|
||||
# Remove blank lines at EOF
|
||||
if dest_file.endswith('\n'):
|
||||
dest_file = dest_file[:-1]
|
||||
write(dest_file, file=self.outFile);
|
||||
# Finish processing in superclass
|
||||
OutputGenerator.endFile(self)
|
||||
#
|
||||
# Override parent class to be notified of the beginning of an extension
|
||||
def beginFeature(self, interface, emit):
|
||||
# Start processing in superclass
|
||||
OutputGenerator.beginFeature(self, interface, emit)
|
||||
self.featureExtraProtect = GetFeatureProtect(interface)
|
||||
|
||||
if self.featureName == 'VK_VERSION_1_0' or self.featureName == 'VK_VERSION_1_1':
|
||||
return
|
||||
name = self.featureName
|
||||
nameElem = interface[0][1]
|
||||
name_define = nameElem.get('name')
|
||||
if 'EXTENSION_NAME' not in name_define:
|
||||
print("Error in vk.xml file -- extension name is not available")
|
||||
requires = interface.get('requires')
|
||||
if requires is not None:
|
||||
required_extensions = requires.split(',')
|
||||
else:
|
||||
required_extensions = list()
|
||||
info = { 'define': name_define, 'ifdef':self.featureExtraProtect, 'reqs':required_extensions }
|
||||
if interface.get('type') == 'instance':
|
||||
self.instance_extension_info[name] = info
|
||||
else:
|
||||
self.device_extension_info[name] = info
|
||||
|
||||
#
|
||||
# Override parent class to be notified of the end of an extension
|
||||
def endFeature(self):
|
||||
# Finish processing in superclass
|
||||
OutputGenerator.endFeature(self)
|
||||
#
|
||||
# Grab group (e.g. C "enum" type) info to output for enum-string conversion helper
|
||||
def genGroup(self, groupinfo, groupName, alias):
|
||||
OutputGenerator.genGroup(self, groupinfo, groupName, alias)
|
||||
groupElem = groupinfo.elem
|
||||
# For enum_string_header
|
||||
if self.helper_file_type == 'enum_string_header':
|
||||
value_set = set()
|
||||
for elem in groupElem.findall('enum'):
|
||||
if elem.get('supported') != 'disabled' and elem.get('alias') is None:
|
||||
value_set.add(elem.get('name'))
|
||||
self.enum_output += self.GenerateEnumStringConversion(groupName, value_set)
|
||||
elif self.helper_file_type == 'object_types_header':
|
||||
if groupName == 'VkDebugReportObjectTypeEXT':
|
||||
for elem in groupElem.findall('enum'):
|
||||
if elem.get('supported') != 'disabled':
|
||||
item_name = elem.get('name')
|
||||
self.debug_report_object_types.append(item_name)
|
||||
elif groupName == 'VkObjectType':
|
||||
for elem in groupElem.findall('enum'):
|
||||
if elem.get('supported') != 'disabled':
|
||||
item_name = elem.get('name')
|
||||
self.core_object_types.append(item_name)
|
||||
|
||||
#
|
||||
# Called for each type -- if the type is a struct/union, grab the metadata
|
||||
def genType(self, typeinfo, name, alias):
|
||||
OutputGenerator.genType(self, typeinfo, name, alias)
|
||||
typeElem = typeinfo.elem
|
||||
# If the type is a struct type, traverse the imbedded <member> tags generating a structure.
|
||||
# Otherwise, emit the tag text.
|
||||
category = typeElem.get('category')
|
||||
if category == 'handle':
|
||||
if alias:
|
||||
self.object_type_aliases.append((name,alias))
|
||||
else:
|
||||
self.object_types.append(name)
|
||||
elif (category == 'struct' or category == 'union'):
|
||||
self.structNames.append(name)
|
||||
self.genStruct(typeinfo, name, alias)
|
||||
#
|
||||
# Generate a VkStructureType based on a structure typename
|
||||
def genVkStructureType(self, typename):
|
||||
# Add underscore between lowercase then uppercase
|
||||
value = re.sub('([a-z0-9])([A-Z])', r'\1_\2', typename)
|
||||
# Change to uppercase
|
||||
value = value.upper()
|
||||
# Add STRUCTURE_TYPE_
|
||||
return re.sub('VK_', 'VK_STRUCTURE_TYPE_', value)
|
||||
#
|
||||
# Check if the parameter passed in is a pointer
|
||||
def paramIsPointer(self, param):
|
||||
ispointer = False
|
||||
for elem in param:
|
||||
if ((elem.tag is not 'type') and (elem.tail is not None)) and '*' in elem.tail:
|
||||
ispointer = True
|
||||
return ispointer
|
||||
#
|
||||
# Check if the parameter passed in is a static array
|
||||
def paramIsStaticArray(self, param):
|
||||
isstaticarray = 0
|
||||
paramname = param.find('name')
|
||||
if (paramname.tail is not None) and ('[' in paramname.tail):
|
||||
isstaticarray = paramname.tail.count('[')
|
||||
return isstaticarray
|
||||
#
|
||||
# Retrieve the type and name for a parameter
|
||||
def getTypeNameTuple(self, param):
|
||||
type = ''
|
||||
name = ''
|
||||
for elem in param:
|
||||
if elem.tag == 'type':
|
||||
type = noneStr(elem.text)
|
||||
elif elem.tag == 'name':
|
||||
name = noneStr(elem.text)
|
||||
return (type, name)
|
||||
# Extract length values from latexmath. Currently an inflexible solution that looks for specific
|
||||
# patterns that are found in vk.xml. Will need to be updated when new patterns are introduced.
|
||||
def parseLateXMath(self, source):
|
||||
name = 'ERROR'
|
||||
decoratedName = 'ERROR'
|
||||
if 'mathit' in source:
|
||||
# Matches expressions similar to 'latexmath:[\lceil{\mathit{rasterizationSamples} \over 32}\rceil]'
|
||||
match = re.match(r'latexmath\s*\:\s*\[\s*\\l(\w+)\s*\{\s*\\mathit\s*\{\s*(\w+)\s*\}\s*\\over\s*(\d+)\s*\}\s*\\r(\w+)\s*\]', source)
|
||||
if not match or match.group(1) != match.group(4):
|
||||
raise 'Unrecognized latexmath expression'
|
||||
name = match.group(2)
|
||||
# Need to add 1 for ceiling function; otherwise, the allocated packet
|
||||
# size will be less than needed during capture for some title which use
|
||||
# this in VkPipelineMultisampleStateCreateInfo. based on ceiling function
|
||||
# definition,it is '{0}%{1}?{0}/{1} + 1:{0}/{1}'.format(*match.group(2, 3)),
|
||||
# its value <= '{}/{} + 1'.
|
||||
if match.group(1) == 'ceil':
|
||||
decoratedName = '{}/{} + 1'.format(*match.group(2, 3))
|
||||
else:
|
||||
decoratedName = '{}/{}'.format(*match.group(2, 3))
|
||||
else:
|
||||
# Matches expressions similar to 'latexmath : [dataSize \over 4]'
|
||||
match = re.match(r'latexmath\s*\:\s*\[\s*(\\textrm\{)?(\w+)\}?\s*\\over\s*(\d+)\s*\]', source)
|
||||
name = match.group(2)
|
||||
decoratedName = '{}/{}'.format(*match.group(2, 3))
|
||||
return name, decoratedName
|
||||
#
|
||||
# Retrieve the value of the len tag
|
||||
def getLen(self, param):
|
||||
result = None
|
||||
len = param.attrib.get('len')
|
||||
if len and len != 'null-terminated':
|
||||
# For string arrays, 'len' can look like 'count,null-terminated', indicating that we
|
||||
# have a null terminated array of strings. We strip the null-terminated from the
|
||||
# 'len' field and only return the parameter specifying the string count
|
||||
if 'null-terminated' in len:
|
||||
result = len.split(',')[0]
|
||||
else:
|
||||
result = len
|
||||
if 'latexmath' in len:
|
||||
param_type, param_name = self.getTypeNameTuple(param)
|
||||
len_name, result = self.parseLateXMath(len)
|
||||
# Spec has now notation for len attributes, using :: instead of platform specific pointer symbol
|
||||
result = str(result).replace('::', '->')
|
||||
return result
|
||||
#
|
||||
# Check if a structure is or contains a dispatchable (dispatchable = True) or
|
||||
# non-dispatchable (dispatchable = False) handle
|
||||
def TypeContainsObjectHandle(self, handle_type, dispatchable):
|
||||
if dispatchable:
|
||||
type_key = 'VK_DEFINE_HANDLE'
|
||||
else:
|
||||
type_key = 'VK_DEFINE_NON_DISPATCHABLE_HANDLE'
|
||||
handle = self.registry.tree.find("types/type/[name='" + handle_type + "'][@category='handle']")
|
||||
if handle is not None and handle.find('type').text == type_key:
|
||||
return True
|
||||
# if handle_type is a struct, search its members
|
||||
if handle_type in self.structNames:
|
||||
member_index = next((i for i, v in enumerate(self.structMembers) if v[0] == handle_type), None)
|
||||
if member_index is not None:
|
||||
for item in self.structMembers[member_index].members:
|
||||
handle = self.registry.tree.find("types/type/[name='" + item.type + "'][@category='handle']")
|
||||
if handle is not None and handle.find('type').text == type_key:
|
||||
return True
|
||||
return False
|
||||
#
|
||||
# Generate local ready-access data describing Vulkan structures and unions from the XML metadata
|
||||
def genStruct(self, typeinfo, typeName, alias):
|
||||
OutputGenerator.genStruct(self, typeinfo, typeName, alias)
|
||||
members = typeinfo.elem.findall('.//member')
|
||||
# Iterate over members once to get length parameters for arrays
|
||||
lens = set()
|
||||
for member in members:
|
||||
len = self.getLen(member)
|
||||
if len:
|
||||
lens.add(len)
|
||||
# Generate member info
|
||||
membersInfo = []
|
||||
for member in members:
|
||||
# Get the member's type and name
|
||||
info = self.getTypeNameTuple(member)
|
||||
type = info[0]
|
||||
name = info[1]
|
||||
cdecl = self.makeCParamDecl(member, 1)
|
||||
# Process VkStructureType
|
||||
if type == 'VkStructureType':
|
||||
# Extract the required struct type value from the comments
|
||||
# embedded in the original text defining the 'typeinfo' element
|
||||
rawXml = etree.tostring(typeinfo.elem).decode('ascii')
|
||||
result = re.search(r'VK_STRUCTURE_TYPE_\w+', rawXml)
|
||||
if result:
|
||||
value = result.group(0)
|
||||
else:
|
||||
value = self.genVkStructureType(typeName)
|
||||
# Store the required type value
|
||||
self.structTypes[typeName] = self.StructType(name=name, value=value)
|
||||
# Store pointer/array/string info
|
||||
isstaticarray = self.paramIsStaticArray(member)
|
||||
membersInfo.append(self.CommandParam(type=type,
|
||||
name=name,
|
||||
ispointer=self.paramIsPointer(member),
|
||||
isstaticarray=isstaticarray,
|
||||
isconst=True if 'const' in cdecl else False,
|
||||
iscount=True if name in lens else False,
|
||||
len=self.getLen(member),
|
||||
extstructs=self.registry.validextensionstructs[typeName] if name == 'pNext' else None,
|
||||
cdecl=cdecl))
|
||||
self.structMembers.append(self.StructMemberData(name=typeName, members=membersInfo, ifdef_protect=self.featureExtraProtect))
|
||||
#
|
||||
# Enum_string_header: Create a routine to convert an enumerated value into a string
|
||||
def GenerateEnumStringConversion(self, groupName, value_list):
|
||||
outstring = '\n'
|
||||
outstring += 'static inline const char* string_%s(%s input_value)\n' % (groupName, groupName)
|
||||
outstring += '{\n'
|
||||
outstring += ' switch ((%s)input_value)\n' % groupName
|
||||
outstring += ' {\n'
|
||||
for item in value_list:
|
||||
outstring += ' case %s:\n' % item
|
||||
outstring += ' return "%s";\n' % item
|
||||
outstring += ' default:\n'
|
||||
outstring += ' return "Unhandled %s";\n' % groupName
|
||||
outstring += ' }\n'
|
||||
outstring += '}\n'
|
||||
return outstring
|
||||
#
|
||||
# Combine object types helper header file preamble with body text and return
|
||||
def GenerateObjectTypesHelperHeader(self):
|
||||
object_types_helper_header = '\n'
|
||||
object_types_helper_header += '#pragma once\n'
|
||||
object_types_helper_header += '\n'
|
||||
object_types_helper_header += '#include <vulkan/vulkan.h>\n\n'
|
||||
object_types_helper_header += self.GenerateObjectTypesHeader()
|
||||
return object_types_helper_header
|
||||
#
|
||||
# Object types header: create object enum type header file
|
||||
def GenerateObjectTypesHeader(self):
|
||||
object_types_header = ''
|
||||
object_types_header += '// Object Type enum for validation layer internal object handling\n'
|
||||
object_types_header += 'typedef enum VulkanObjectType {\n'
|
||||
object_types_header += ' kVulkanObjectTypeUnknown = 0,\n'
|
||||
enum_num = 1
|
||||
type_list = [];
|
||||
enum_entry_map = {}
|
||||
|
||||
# Output enum definition as each handle is processed, saving the names to use for the conversion routine
|
||||
for item in self.object_types:
|
||||
fixup_name = item[2:]
|
||||
enum_entry = 'kVulkanObjectType%s' % fixup_name
|
||||
enum_entry_map[item] = enum_entry
|
||||
object_types_header += ' ' + enum_entry
|
||||
object_types_header += ' = %d,\n' % enum_num
|
||||
enum_num += 1
|
||||
type_list.append(enum_entry)
|
||||
object_types_header += ' kVulkanObjectTypeMax = %d,\n' % enum_num
|
||||
object_types_header += ' // Aliases for backwards compatibilty of "promoted" types\n'
|
||||
for (name, alias) in self.object_type_aliases:
|
||||
fixup_name = name[2:]
|
||||
object_types_header += ' kVulkanObjectType{} = {},\n'.format(fixup_name, enum_entry_map[alias])
|
||||
object_types_header += '} VulkanObjectType;\n\n'
|
||||
|
||||
# Output name string helper
|
||||
object_types_header += '// Array of object name strings for OBJECT_TYPE enum conversion\n'
|
||||
object_types_header += 'static const char * const object_string[kVulkanObjectTypeMax] = {\n'
|
||||
object_types_header += ' "Unknown",\n'
|
||||
for item in self.object_types:
|
||||
fixup_name = item[2:]
|
||||
object_types_header += ' "%s",\n' % fixup_name
|
||||
object_types_header += '};\n'
|
||||
|
||||
# Key creation helper for map comprehensions that convert between k<Name> and VK<Name> symbols
|
||||
def to_key(regex, raw_key): return re.search(regex, raw_key).group(1).lower().replace("_","")
|
||||
|
||||
# Output a conversion routine from the layer object definitions to the debug report definitions
|
||||
# As the VK_DEBUG_REPORT types are not being updated, specify UNKNOWN for unmatched types
|
||||
object_types_header += '\n'
|
||||
object_types_header += '// Helper array to get Vulkan VK_EXT_debug_report object type enum from the internal layers version\n'
|
||||
object_types_header += 'const VkDebugReportObjectTypeEXT get_debug_report_enum[] = {\n'
|
||||
object_types_header += ' VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, // kVulkanObjectTypeUnknown\n'
|
||||
|
||||
dbg_re = '^VK_DEBUG_REPORT_OBJECT_TYPE_(.*)_EXT$'
|
||||
dbg_map = {to_key(dbg_re, dbg) : dbg for dbg in self.debug_report_object_types}
|
||||
dbg_default = 'VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT'
|
||||
for object_type in type_list:
|
||||
vk_object_type = dbg_map.get(object_type.replace("kVulkanObjectType", "").lower(), dbg_default)
|
||||
object_types_header += ' %s, // %s\n' % (vk_object_type, object_type)
|
||||
object_types_header += '};\n'
|
||||
|
||||
# Output a conversion routine from the layer object definitions to the core object type definitions
|
||||
# This will intentionally *fail* for unmatched types as the VK_OBJECT_TYPE list should match the kVulkanObjectType list
|
||||
object_types_header += '\n'
|
||||
object_types_header += '// Helper array to get Official Vulkan VkObjectType enum from the internal layers version\n'
|
||||
object_types_header += 'const VkObjectType get_object_type_enum[] = {\n'
|
||||
object_types_header += ' VK_OBJECT_TYPE_UNKNOWN, // kVulkanObjectTypeUnknown\n'
|
||||
|
||||
vko_re = '^VK_OBJECT_TYPE_(.*)'
|
||||
vko_map = {to_key(vko_re, vko) : vko for vko in self.core_object_types}
|
||||
for object_type in type_list:
|
||||
vk_object_type = vko_map[object_type.replace("kVulkanObjectType", "").lower()]
|
||||
object_types_header += ' %s, // %s\n' % (vk_object_type, object_type)
|
||||
object_types_header += '};\n'
|
||||
|
||||
# Create a function to convert from VkDebugReportObjectTypeEXT to VkObjectType
|
||||
object_types_header += '\n'
|
||||
object_types_header += '// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType\n'
|
||||
object_types_header += 'static inline VkObjectType convertDebugReportObjectToCoreObject(VkDebugReportObjectTypeEXT debug_report_obj){\n'
|
||||
object_types_header += ' if (debug_report_obj == VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT) {\n'
|
||||
object_types_header += ' return VK_OBJECT_TYPE_UNKNOWN;\n'
|
||||
for core_object_type in self.core_object_types:
|
||||
core_target_type = core_object_type.replace("VK_OBJECT_TYPE_", "").lower()
|
||||
core_target_type = core_target_type.replace("_", "")
|
||||
for dr_object_type in self.debug_report_object_types:
|
||||
dr_target_type = dr_object_type.replace("VK_DEBUG_REPORT_OBJECT_TYPE_", "").lower()
|
||||
dr_target_type = dr_target_type[:-4]
|
||||
dr_target_type = dr_target_type.replace("_", "")
|
||||
if core_target_type == dr_target_type:
|
||||
object_types_header += ' } else if (debug_report_obj == %s) {\n' % dr_object_type
|
||||
object_types_header += ' return %s;\n' % core_object_type
|
||||
break
|
||||
object_types_header += ' }\n'
|
||||
object_types_header += ' return VK_OBJECT_TYPE_UNKNOWN;\n'
|
||||
object_types_header += '}\n'
|
||||
|
||||
# Create a function to convert from VkObjectType to VkDebugReportObjectTypeEXT
|
||||
object_types_header += '\n'
|
||||
object_types_header += '// Helper function to convert from VkDebugReportObjectTypeEXT to VkObjectType\n'
|
||||
object_types_header += 'static inline VkDebugReportObjectTypeEXT convertCoreObjectToDebugReportObject(VkObjectType core_report_obj){\n'
|
||||
object_types_header += ' if (core_report_obj == VK_OBJECT_TYPE_UNKNOWN) {\n'
|
||||
object_types_header += ' return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;\n'
|
||||
for core_object_type in self.core_object_types:
|
||||
core_target_type = core_object_type.replace("VK_OBJECT_TYPE_", "").lower()
|
||||
core_target_type = core_target_type.replace("_", "")
|
||||
for dr_object_type in self.debug_report_object_types:
|
||||
dr_target_type = dr_object_type.replace("VK_DEBUG_REPORT_OBJECT_TYPE_", "").lower()
|
||||
dr_target_type = dr_target_type[:-4]
|
||||
dr_target_type = dr_target_type.replace("_", "")
|
||||
if core_target_type == dr_target_type:
|
||||
object_types_header += ' } else if (core_report_obj == %s) {\n' % core_object_type
|
||||
object_types_header += ' return %s;\n' % dr_object_type
|
||||
break
|
||||
object_types_header += ' }\n'
|
||||
object_types_header += ' return VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;\n'
|
||||
object_types_header += '}\n'
|
||||
return object_types_header
|
||||
|
||||
#
|
||||
# Create a helper file and return it as a string
|
||||
def OutputDestFile(self):
|
||||
if self.helper_file_type == 'object_types_header':
|
||||
return self.GenerateObjectTypesHelperHeader()
|
||||
else:
|
||||
return 'Bad Helper File Generator Option %s' % self.helper_file_type
|
||||
15
thirdparty/vulkan/registry/known_good.json
vendored
Executable file
15
thirdparty/vulkan/registry/known_good.json
vendored
Executable file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"repos" : [
|
||||
{
|
||||
"name" : "Vulkan-Headers",
|
||||
"url" : "https://github.com/KhronosGroup/Vulkan-Headers.git",
|
||||
"sub_dir" : "Vulkan-Headers",
|
||||
"build_dir" : "Vulkan-Headers/build",
|
||||
"install_dir" : "Vulkan-Headers/build/install",
|
||||
"commit" : "v1.1.113"
|
||||
}
|
||||
],
|
||||
"install_names" : {
|
||||
"Vulkan-Headers" : "VULKAN_HEADERS_INSTALL_DIR"
|
||||
}
|
||||
}
|
||||
1571
thirdparty/vulkan/registry/loader_extension_generator.py
vendored
Executable file
1571
thirdparty/vulkan/registry/loader_extension_generator.py
vendored
Executable file
File diff suppressed because it is too large
Load Diff
516
thirdparty/vulkan/registry/loader_genvk.py
vendored
Executable file
516
thirdparty/vulkan/registry/loader_genvk.py
vendored
Executable file
@ -0,0 +1,516 @@
|
||||
#!/usr/bin/python3
|
||||
#
|
||||
# Copyright (c) 2013-2019 The Khronos Group Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import argparse, cProfile, pdb, string, sys, time, os
|
||||
|
||||
# Simple timer functions
|
||||
startTime = None
|
||||
|
||||
def startTimer(timeit):
|
||||
global startTime
|
||||
if timeit:
|
||||
startTime = time.process_time()
|
||||
|
||||
def endTimer(timeit, msg):
|
||||
global startTime
|
||||
if timeit:
|
||||
endTime = time.process_time()
|
||||
write(msg, endTime - startTime, file=sys.stderr)
|
||||
startTime = None
|
||||
|
||||
# Turn a list of strings into a regexp string matching exactly those strings
|
||||
def makeREstring(list, default = None):
|
||||
if len(list) > 0 or default is None:
|
||||
return '^(' + '|'.join(list) + ')$'
|
||||
else:
|
||||
return default
|
||||
|
||||
# Returns a directory of [ generator function, generator options ] indexed
|
||||
# by specified short names. The generator options incorporate the following
|
||||
# parameters:
|
||||
#
|
||||
# args is an parsed argument object; see below for the fields that are used.
|
||||
def makeGenOpts(args):
|
||||
global genOpts
|
||||
genOpts = {}
|
||||
|
||||
# Default class of extensions to include, or None
|
||||
defaultExtensions = args.defaultExtensions
|
||||
|
||||
# Additional extensions to include (list of extensions)
|
||||
extensions = args.extension
|
||||
|
||||
# Extensions to remove (list of extensions)
|
||||
removeExtensions = args.removeExtensions
|
||||
|
||||
# Extensions to emit (list of extensions)
|
||||
emitExtensions = args.emitExtensions
|
||||
|
||||
# Features to include (list of features)
|
||||
features = args.feature
|
||||
|
||||
# Whether to disable inclusion protect in headers
|
||||
protect = args.protect
|
||||
|
||||
# Output target directory
|
||||
directory = args.directory
|
||||
|
||||
# Descriptive names for various regexp patterns used to select
|
||||
# versions and extensions
|
||||
allFeatures = allExtensions = '.*'
|
||||
noFeatures = noExtensions = None
|
||||
|
||||
# Turn lists of names/patterns into matching regular expressions
|
||||
addExtensionsPat = makeREstring(extensions, None)
|
||||
removeExtensionsPat = makeREstring(removeExtensions, None)
|
||||
emitExtensionsPat = makeREstring(emitExtensions, allExtensions)
|
||||
featuresPat = makeREstring(features, allFeatures)
|
||||
|
||||
# Copyright text prefixing all headers (list of strings).
|
||||
prefixStrings = [
|
||||
'/*',
|
||||
'** Copyright (c) 2015-2019 The Khronos Group Inc.',
|
||||
'**',
|
||||
'** Licensed under the Apache License, Version 2.0 (the "License");',
|
||||
'** you may not use this file except in compliance with the License.',
|
||||
'** You may obtain a copy of the License at',
|
||||
'**',
|
||||
'** http://www.apache.org/licenses/LICENSE-2.0',
|
||||
'**',
|
||||
'** Unless required by applicable law or agreed to in writing, software',
|
||||
'** distributed under the License is distributed on an "AS IS" BASIS,',
|
||||
'** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.',
|
||||
'** See the License for the specific language governing permissions and',
|
||||
'** limitations under the License.',
|
||||
'*/',
|
||||
''
|
||||
]
|
||||
|
||||
# Text specific to Vulkan headers
|
||||
vkPrefixStrings = [
|
||||
'/*',
|
||||
'** This header is generated from the Khronos Vulkan XML API Registry.',
|
||||
'**',
|
||||
'*/',
|
||||
''
|
||||
]
|
||||
|
||||
# Defaults for generating re-inclusion protection wrappers (or not)
|
||||
protectFeature = protect
|
||||
|
||||
# An API style conventions object
|
||||
conventions = VulkanConventions()
|
||||
|
||||
# Loader Generators
|
||||
# Options for dispatch table helper generator
|
||||
genOpts['vk_dispatch_table_helper.h'] = [
|
||||
DispatchTableHelperOutputGenerator,
|
||||
DispatchTableHelperOutputGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vk_dispatch_table_helper.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = 'vulkan',
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False)
|
||||
]
|
||||
|
||||
# Options for Layer dispatch table generator
|
||||
genOpts['vk_layer_dispatch_table.h'] = [
|
||||
LoaderExtensionOutputGenerator,
|
||||
LoaderExtensionGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vk_layer_dispatch_table.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = 'vulkan',
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False)
|
||||
]
|
||||
|
||||
# Options for loader extension source generator
|
||||
genOpts['vk_loader_extensions.h'] = [
|
||||
LoaderExtensionOutputGenerator,
|
||||
LoaderExtensionGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vk_loader_extensions.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = 'vulkan',
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False)
|
||||
]
|
||||
|
||||
# Options for loader extension source generator
|
||||
genOpts['vk_loader_extensions.c'] = [
|
||||
LoaderExtensionOutputGenerator,
|
||||
LoaderExtensionGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vk_loader_extensions.c',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = 'vulkan',
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False)
|
||||
]
|
||||
|
||||
# Helper file generator options for vk_enum_string_helper.h
|
||||
genOpts['vk_enum_string_helper.h'] = [
|
||||
HelperFileOutputGenerator,
|
||||
HelperFileOutputGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vk_enum_string_helper.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = 'vulkan',
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False,
|
||||
helper_file_type = 'enum_string_header')
|
||||
]
|
||||
|
||||
# Helper file generator options for vk_safe_struct.h
|
||||
genOpts['vk_safe_struct.h'] = [
|
||||
HelperFileOutputGenerator,
|
||||
HelperFileOutputGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vk_safe_struct.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = 'vulkan',
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False,
|
||||
helper_file_type = 'safe_struct_header')
|
||||
]
|
||||
|
||||
# Helper file generator options for vk_safe_struct.cpp
|
||||
genOpts['vk_safe_struct.cpp'] = [
|
||||
HelperFileOutputGenerator,
|
||||
HelperFileOutputGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vk_safe_struct.cpp',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = 'vulkan',
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False,
|
||||
helper_file_type = 'safe_struct_source')
|
||||
]
|
||||
|
||||
# Helper file generator options for vk_object_types.h
|
||||
genOpts['vk_object_types.h'] = [
|
||||
HelperFileOutputGenerator,
|
||||
HelperFileOutputGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vk_object_types.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = 'vulkan',
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False,
|
||||
helper_file_type = 'object_types_header')
|
||||
]
|
||||
|
||||
# Helper file generator options for extension_helper.h
|
||||
genOpts['vk_extension_helper.h'] = [
|
||||
HelperFileOutputGenerator,
|
||||
HelperFileOutputGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vk_extension_helper.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = 'vulkan',
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False,
|
||||
helper_file_type = 'extension_helper_header')
|
||||
]
|
||||
|
||||
# Helper file generator options for typemap_helper.h
|
||||
genOpts['vk_typemap_helper.h'] = [
|
||||
HelperFileOutputGenerator,
|
||||
HelperFileOutputGeneratorOptions(
|
||||
conventions = conventions,
|
||||
filename = 'vk_typemap_helper.h',
|
||||
directory = directory,
|
||||
apiname = 'vulkan',
|
||||
profile = None,
|
||||
versions = featuresPat,
|
||||
emitversions = featuresPat,
|
||||
defaultExtensions = 'vulkan',
|
||||
addExtensions = addExtensionsPat,
|
||||
removeExtensions = removeExtensionsPat,
|
||||
emitExtensions = emitExtensionsPat,
|
||||
prefixText = prefixStrings + vkPrefixStrings,
|
||||
protectFeature = False,
|
||||
apicall = 'VKAPI_ATTR ',
|
||||
apientry = 'VKAPI_CALL ',
|
||||
apientryp = 'VKAPI_PTR *',
|
||||
alignFuncParam = 48,
|
||||
expandEnumerants = False,
|
||||
helper_file_type = 'typemap_helper_header')
|
||||
]
|
||||
|
||||
# Generate a target based on the options in the matching genOpts{} object.
|
||||
# This is encapsulated in a function so it can be profiled and/or timed.
|
||||
# The args parameter is an parsed argument object containing the following
|
||||
# fields that are used:
|
||||
# target - target to generate
|
||||
# directory - directory to generate it in
|
||||
# protect - True if re-inclusion wrappers should be created
|
||||
# extensions - list of additional extensions to include in generated
|
||||
# interfaces
|
||||
def genTarget(args):
|
||||
global genOpts
|
||||
|
||||
# Create generator options with specified parameters
|
||||
makeGenOpts(args)
|
||||
|
||||
if (args.target in genOpts.keys()):
|
||||
createGenerator = genOpts[args.target][0]
|
||||
options = genOpts[args.target][1]
|
||||
|
||||
if not args.quiet:
|
||||
write('* Building', options.filename, file=sys.stderr)
|
||||
write('* options.versions =', options.versions, file=sys.stderr)
|
||||
write('* options.emitversions =', options.emitversions, file=sys.stderr)
|
||||
write('* options.defaultExtensions =', options.defaultExtensions, file=sys.stderr)
|
||||
write('* options.addExtensions =', options.addExtensions, file=sys.stderr)
|
||||
write('* options.removeExtensions =', options.removeExtensions, file=sys.stderr)
|
||||
write('* options.emitExtensions =', options.emitExtensions, file=sys.stderr)
|
||||
|
||||
startTimer(args.time)
|
||||
gen = createGenerator(errFile=errWarn,
|
||||
warnFile=errWarn,
|
||||
diagFile=diag)
|
||||
reg.setGenerator(gen)
|
||||
reg.apiGen(options)
|
||||
|
||||
if not args.quiet:
|
||||
write('* Generated', options.filename, file=sys.stderr)
|
||||
endTimer(args.time, '* Time to generate ' + options.filename + ' =')
|
||||
else:
|
||||
write('No generator options for unknown target:',
|
||||
args.target, file=sys.stderr)
|
||||
|
||||
# -feature name
|
||||
# -extension name
|
||||
# For both, "name" may be a single name, or a space-separated list
|
||||
# of names, or a regular expression.
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument('-defaultExtensions', action='store',
|
||||
default='vulkan',
|
||||
help='Specify a single class of extensions to add to targets')
|
||||
parser.add_argument('-extension', action='append',
|
||||
default=[],
|
||||
help='Specify an extension or extensions to add to targets')
|
||||
parser.add_argument('-removeExtensions', action='append',
|
||||
default=[],
|
||||
help='Specify an extension or extensions to remove from targets')
|
||||
parser.add_argument('-emitExtensions', action='append',
|
||||
default=[],
|
||||
help='Specify an extension or extensions to emit in targets')
|
||||
parser.add_argument('-feature', action='append',
|
||||
default=[],
|
||||
help='Specify a core API feature name or names to add to targets')
|
||||
parser.add_argument('-debug', action='store_true',
|
||||
help='Enable debugging')
|
||||
parser.add_argument('-dump', action='store_true',
|
||||
help='Enable dump to stderr')
|
||||
parser.add_argument('-diagfile', action='store',
|
||||
default=None,
|
||||
help='Write diagnostics to specified file')
|
||||
parser.add_argument('-errfile', action='store',
|
||||
default=None,
|
||||
help='Write errors and warnings to specified file instead of stderr')
|
||||
parser.add_argument('-noprotect', dest='protect', action='store_false',
|
||||
help='Disable inclusion protection in output headers')
|
||||
parser.add_argument('-profile', action='store_true',
|
||||
help='Enable profiling')
|
||||
parser.add_argument('-registry', action='store',
|
||||
default='vk.xml',
|
||||
help='Use specified registry file instead of vk.xml')
|
||||
parser.add_argument('-time', action='store_true',
|
||||
help='Enable timing')
|
||||
parser.add_argument('-validate', action='store_true',
|
||||
help='Enable group validation')
|
||||
parser.add_argument('-o', action='store', dest='directory',
|
||||
default='.',
|
||||
help='Create target and related files in specified directory')
|
||||
parser.add_argument('target', metavar='target', nargs='?',
|
||||
help='Specify target')
|
||||
parser.add_argument('-quiet', action='store_true', default=True,
|
||||
help='Suppress script output during normal execution.')
|
||||
parser.add_argument('-verbose', action='store_false', dest='quiet', default=True,
|
||||
help='Enable script output during normal execution.')
|
||||
|
||||
# This argument tells us where to load the script from the Vulkan-Headers registry
|
||||
parser.add_argument('-scripts', action='store',
|
||||
help='Find additional scripts in this directory')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
scripts_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
registry_dir = os.path.join(scripts_dir, args.scripts)
|
||||
sys.path.insert(0, registry_dir)
|
||||
|
||||
# The imports need to be done here so that they can be picked up from Vulkan-Headers
|
||||
from reg import *
|
||||
from generator import write
|
||||
from cgenerator import CGeneratorOptions, COutputGenerator
|
||||
|
||||
from dispatch_table_helper_generator import DispatchTableHelperOutputGenerator, DispatchTableHelperOutputGeneratorOptions
|
||||
from helper_file_generator import HelperFileOutputGenerator, HelperFileOutputGeneratorOptions
|
||||
from loader_extension_generator import LoaderExtensionOutputGenerator, LoaderExtensionGeneratorOptions
|
||||
# Temporary workaround for vkconventions python2 compatibility
|
||||
import abc; abc.ABC = abc.ABCMeta('ABC', (object,), {})
|
||||
from vkconventions import VulkanConventions
|
||||
|
||||
# This splits arguments which are space-separated lists
|
||||
args.feature = [name for arg in args.feature for name in arg.split()]
|
||||
args.extension = [name for arg in args.extension for name in arg.split()]
|
||||
|
||||
# Load & parse registry
|
||||
reg = Registry()
|
||||
|
||||
startTimer(args.time)
|
||||
tree = etree.parse(args.registry)
|
||||
endTimer(args.time, '* Time to make ElementTree =')
|
||||
|
||||
if args.debug:
|
||||
pdb.run('reg.loadElementTree(tree)')
|
||||
else:
|
||||
startTimer(args.time)
|
||||
reg.loadElementTree(tree)
|
||||
endTimer(args.time, '* Time to parse ElementTree =')
|
||||
|
||||
if (args.validate):
|
||||
reg.validateGroups()
|
||||
|
||||
if (args.dump):
|
||||
write('* Dumping registry to regdump.txt', file=sys.stderr)
|
||||
reg.dumpReg(filehandle = open('regdump.txt', 'w', encoding='utf-8'))
|
||||
|
||||
# create error/warning & diagnostic files
|
||||
if (args.errfile):
|
||||
errWarn = open(args.errfile, 'w', encoding='utf-8')
|
||||
else:
|
||||
errWarn = sys.stderr
|
||||
|
||||
if (args.diagfile):
|
||||
diag = open(args.diagfile, 'w', encoding='utf-8')
|
||||
else:
|
||||
diag = None
|
||||
|
||||
if (args.debug):
|
||||
pdb.run('genTarget(args)')
|
||||
elif (args.profile):
|
||||
import cProfile, pstats
|
||||
cProfile.run('genTarget(args)', 'profile.txt')
|
||||
p = pstats.Stats('profile.txt')
|
||||
p.strip_dirs().sort_stats('time').print_stats(50)
|
||||
else:
|
||||
genTarget(args)
|
||||
1122
thirdparty/vulkan/registry/reg.py
vendored
Executable file
1122
thirdparty/vulkan/registry/reg.py
vendored
Executable file
File diff suppressed because it is too large
Load Diff
679
thirdparty/vulkan/registry/update_deps.py
vendored
Executable file
679
thirdparty/vulkan/registry/update_deps.py
vendored
Executable file
@ -0,0 +1,679 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Copyright 2017 The Glslang Authors. All rights reserved.
|
||||
# Copyright (c) 2018 Valve Corporation
|
||||
# Copyright (c) 2018 LunarG, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# This script was heavily leveraged from KhronosGroup/glslang
|
||||
# update_glslang_sources.py.
|
||||
"""update_deps.py
|
||||
|
||||
Get and build dependent repositories using known-good commits.
|
||||
|
||||
Purpose
|
||||
-------
|
||||
|
||||
This program is intended to assist a developer of this repository
|
||||
(the "home" repository) by gathering and building the repositories that
|
||||
this home repository depend on. It also checks out each dependent
|
||||
repository at a "known-good" commit in order to provide stability in
|
||||
the dependent repositories.
|
||||
|
||||
Python Compatibility
|
||||
--------------------
|
||||
|
||||
This program can be used with Python 2.7 and Python 3.
|
||||
|
||||
Known-Good JSON Database
|
||||
------------------------
|
||||
|
||||
This program expects to find a file named "known-good.json" in the
|
||||
same directory as the program file. This JSON file is tailored for
|
||||
the needs of the home repository by including its dependent repositories.
|
||||
|
||||
Program Options
|
||||
---------------
|
||||
|
||||
See the help text (update_deps.py --help) for a complete list of options.
|
||||
|
||||
Program Operation
|
||||
-----------------
|
||||
|
||||
The program uses the user's current directory at the time of program
|
||||
invocation as the location for fetching and building the dependent
|
||||
repositories. The user can override this by using the "--dir" option.
|
||||
|
||||
For example, a directory named "build" in the repository's root directory
|
||||
is a good place to put the dependent repositories because that directory
|
||||
is not tracked by Git. (See the .gitignore file.) The "external" directory
|
||||
may also be a suitable location.
|
||||
A user can issue:
|
||||
|
||||
$ cd My-Repo
|
||||
$ mkdir build
|
||||
$ cd build
|
||||
$ ../scripts/update_deps.py
|
||||
|
||||
or, to do the same thing, but using the --dir option:
|
||||
|
||||
$ cd My-Repo
|
||||
$ mkdir build
|
||||
$ scripts/update_deps.py --dir=build
|
||||
|
||||
With these commands, the "build" directory is considered the "top"
|
||||
directory where the program clones the dependent repositories. The
|
||||
JSON file configures the build and install working directories to be
|
||||
within this "top" directory.
|
||||
|
||||
Note that the "dir" option can also specify an absolute path:
|
||||
|
||||
$ cd My-Repo
|
||||
$ scripts/update_deps.py --dir=/tmp/deps
|
||||
|
||||
The "top" dir is then /tmp/deps (Linux filesystem example) and is
|
||||
where this program will clone and build the dependent repositories.
|
||||
|
||||
Helper CMake Config File
|
||||
------------------------
|
||||
|
||||
When the program finishes building the dependencies, it writes a file
|
||||
named "helper.cmake" to the "top" directory that contains CMake commands
|
||||
for setting CMake variables for locating the dependent repositories.
|
||||
This helper file can be used to set up the CMake build files for this
|
||||
"home" repository.
|
||||
|
||||
A complete sequence might look like:
|
||||
|
||||
$ git clone git@github.com:My-Group/My-Repo.git
|
||||
$ cd My-Repo
|
||||
$ mkdir build
|
||||
$ cd build
|
||||
$ ../scripts/update_deps.py
|
||||
$ cmake -C helper.cmake ..
|
||||
$ cmake --build .
|
||||
|
||||
JSON File Schema
|
||||
----------------
|
||||
|
||||
There's no formal schema for the "known-good" JSON file, but here is
|
||||
a description of its elements. All elements are required except those
|
||||
marked as optional. Please see the "known_good.json" file for
|
||||
examples of all of these elements.
|
||||
|
||||
- name
|
||||
|
||||
The name of the dependent repository. This field can be referenced
|
||||
by the "deps.repo_name" structure to record a dependency.
|
||||
|
||||
- url
|
||||
|
||||
Specifies the URL of the repository.
|
||||
Example: https://github.com/KhronosGroup/Vulkan-Loader.git
|
||||
|
||||
- sub_dir
|
||||
|
||||
The directory where the program clones the repository, relative to
|
||||
the "top" directory.
|
||||
|
||||
- build_dir
|
||||
|
||||
The directory used to build the repository, relative to the "top"
|
||||
directory.
|
||||
|
||||
- install_dir
|
||||
|
||||
The directory used to store the installed build artifacts, relative
|
||||
to the "top" directory.
|
||||
|
||||
- commit
|
||||
|
||||
The commit used to checkout the repository. This can be a SHA-1
|
||||
object name or a refname used with the remote name "origin".
|
||||
For example, this field can be set to "origin/sdk-1.1.77" to
|
||||
select the end of the sdk-1.1.77 branch.
|
||||
|
||||
- deps (optional)
|
||||
|
||||
An array of pairs consisting of a CMake variable name and a
|
||||
repository name to specify a dependent repo and a "link" to
|
||||
that repo's install artifacts. For example:
|
||||
|
||||
"deps" : [
|
||||
{
|
||||
"var_name" : "VULKAN_HEADERS_INSTALL_DIR",
|
||||
"repo_name" : "Vulkan-Headers"
|
||||
}
|
||||
]
|
||||
|
||||
which represents that this repository depends on the Vulkan-Headers
|
||||
repository and uses the VULKAN_HEADERS_INSTALL_DIR CMake variable to
|
||||
specify the location where it expects to find the Vulkan-Headers install
|
||||
directory.
|
||||
Note that the "repo_name" element must match the "name" element of some
|
||||
other repository in the JSON file.
|
||||
|
||||
- prebuild (optional)
|
||||
- prebuild_linux (optional) (For Linux and MacOS)
|
||||
- prebuild_windows (optional)
|
||||
|
||||
A list of commands to execute before building a dependent repository.
|
||||
This is useful for repositories that require the execution of some
|
||||
sort of "update" script or need to clone an auxillary repository like
|
||||
googletest.
|
||||
|
||||
The commands listed in "prebuild" are executed first, and then the
|
||||
commands for the specific platform are executed.
|
||||
|
||||
- custom_build (optional)
|
||||
|
||||
A list of commands to execute as a custom build instead of using
|
||||
the built in CMake way of building. Requires "build_step" to be
|
||||
set to "custom"
|
||||
|
||||
You can insert the following keywords into the commands listed in
|
||||
"custom_build" if they require runtime information (like whether the
|
||||
build config is "Debug" or "Release").
|
||||
|
||||
Keywords:
|
||||
{0} reference to a dictionary of repos and their attributes
|
||||
{1} reference to the command line arguments set before start
|
||||
{2} reference to the CONFIG_MAP value of config.
|
||||
|
||||
Example:
|
||||
{2} returns the CONFIG_MAP value of config e.g. debug -> Debug
|
||||
{1}.config returns the config variable set when you ran update_dep.py
|
||||
{0}[Vulkan-Headers][repo_root] returns the repo_root variable from
|
||||
the Vulkan-Headers GoodRepo object.
|
||||
|
||||
- cmake_options (optional)
|
||||
|
||||
A list of options to pass to CMake during the generation phase.
|
||||
|
||||
- ci_only (optional)
|
||||
|
||||
A list of environment variables where one must be set to "true"
|
||||
(case-insensitive) in order for this repo to be fetched and built.
|
||||
This list can be used to specify repos that should be built only in CI.
|
||||
Typically, this list might contain "TRAVIS" and/or "APPVEYOR" because
|
||||
each of these CI systems sets an environment variable with its own
|
||||
name to "true". Note that this could also be (ab)used to control
|
||||
the processing of the repo with any environment variable. The default
|
||||
is an empty list, which means that the repo is always processed.
|
||||
|
||||
- build_step (optional)
|
||||
|
||||
Specifies if the dependent repository should be built or not. This can
|
||||
have a value of 'build', 'custom', or 'skip'. The dependent repositories are
|
||||
built by default.
|
||||
|
||||
- build_platforms (optional)
|
||||
|
||||
A list of platforms the repository will be built on.
|
||||
Legal options include:
|
||||
"windows"
|
||||
"linux"
|
||||
"darwin"
|
||||
|
||||
Builds on all platforms by default.
|
||||
|
||||
Note
|
||||
----
|
||||
|
||||
The "sub_dir", "build_dir", and "install_dir" elements are all relative
|
||||
to the effective "top" directory. Specifying absolute paths is not
|
||||
supported. However, the "top" directory specified with the "--dir"
|
||||
option can be a relative or absolute path.
|
||||
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import distutils.dir_util
|
||||
import os.path
|
||||
import subprocess
|
||||
import sys
|
||||
import platform
|
||||
import multiprocessing
|
||||
import shlex
|
||||
import shutil
|
||||
|
||||
KNOWN_GOOD_FILE_NAME = 'known_good.json'
|
||||
|
||||
CONFIG_MAP = {
|
||||
'debug': 'Debug',
|
||||
'release': 'Release',
|
||||
'relwithdebinfo': 'RelWithDebInfo',
|
||||
'minsizerel': 'MinSizeRel'
|
||||
}
|
||||
|
||||
VERBOSE = False
|
||||
|
||||
DEVNULL = open(os.devnull, 'wb')
|
||||
|
||||
|
||||
def command_output(cmd, directory, fail_ok=False):
|
||||
"""Runs a command in a directory and returns its standard output stream.
|
||||
|
||||
Captures the standard error stream and prints it if error.
|
||||
|
||||
Raises a RuntimeError if the command fails to launch or otherwise fails.
|
||||
"""
|
||||
if VERBOSE:
|
||||
print('In {d}: {cmd}'.format(d=directory, cmd=cmd))
|
||||
p = subprocess.Popen(
|
||||
cmd, cwd=directory, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
(stdout, stderr) = p.communicate()
|
||||
if p.returncode != 0:
|
||||
print('*** Error ***\nstderr contents:\n{}'.format(stderr))
|
||||
if not fail_ok:
|
||||
raise RuntimeError('Failed to run {} in {}'.format(cmd, directory))
|
||||
if VERBOSE:
|
||||
print(stdout)
|
||||
return stdout
|
||||
|
||||
class GoodRepo(object):
|
||||
"""Represents a repository at a known-good commit."""
|
||||
|
||||
def __init__(self, json, args):
|
||||
"""Initializes this good repo object.
|
||||
|
||||
Args:
|
||||
'json': A fully populated JSON object describing the repo.
|
||||
'args': Results from ArgumentParser
|
||||
"""
|
||||
self._json = json
|
||||
self._args = args
|
||||
# Required JSON elements
|
||||
self.name = json['name']
|
||||
self.url = json['url']
|
||||
self.sub_dir = json['sub_dir']
|
||||
self.commit = json['commit']
|
||||
# Optional JSON elements
|
||||
self.build_dir = None
|
||||
self.install_dir = None
|
||||
if json.get('build_dir'):
|
||||
self.build_dir = os.path.normpath(json['build_dir'])
|
||||
if json.get('install_dir'):
|
||||
self.install_dir = os.path.normpath(json['install_dir'])
|
||||
self.deps = json['deps'] if ('deps' in json) else []
|
||||
self.prebuild = json['prebuild'] if ('prebuild' in json) else []
|
||||
self.prebuild_linux = json['prebuild_linux'] if (
|
||||
'prebuild_linux' in json) else []
|
||||
self.prebuild_windows = json['prebuild_windows'] if (
|
||||
'prebuild_windows' in json) else []
|
||||
self.custom_build = json['custom_build'] if ('custom_build' in json) else []
|
||||
self.cmake_options = json['cmake_options'] if (
|
||||
'cmake_options' in json) else []
|
||||
self.ci_only = json['ci_only'] if ('ci_only' in json) else []
|
||||
self.build_step = json['build_step'] if ('build_step' in json) else 'build'
|
||||
self.build_platforms = json['build_platforms'] if ('build_platforms' in json) else []
|
||||
# Absolute paths for a repo's directories
|
||||
dir_top = os.path.abspath(args.dir)
|
||||
self.repo_dir = os.path.join(dir_top, self.sub_dir)
|
||||
if self.build_dir:
|
||||
self.build_dir = os.path.join(dir_top, self.build_dir)
|
||||
if self.install_dir:
|
||||
self.install_dir = os.path.join(dir_top, self.install_dir)
|
||||
# Check if platform is one to build on
|
||||
self.on_build_platform = False
|
||||
if self.build_platforms == [] or platform.system().lower() in self.build_platforms:
|
||||
self.on_build_platform = True
|
||||
|
||||
def Clone(self):
|
||||
distutils.dir_util.mkpath(self.repo_dir)
|
||||
command_output(['git', 'clone', self.url, '.'], self.repo_dir)
|
||||
|
||||
def Fetch(self):
|
||||
command_output(['git', 'fetch', 'origin'], self.repo_dir)
|
||||
|
||||
def Checkout(self):
|
||||
print('Checking out {n} in {d}'.format(n=self.name, d=self.repo_dir))
|
||||
if self._args.do_clean_repo:
|
||||
shutil.rmtree(self.repo_dir, ignore_errors=True)
|
||||
if not os.path.exists(os.path.join(self.repo_dir, '.git')):
|
||||
self.Clone()
|
||||
self.Fetch()
|
||||
if len(self._args.ref):
|
||||
command_output(['git', 'checkout', self._args.ref], self.repo_dir)
|
||||
else:
|
||||
command_output(['git', 'checkout', self.commit], self.repo_dir)
|
||||
print(command_output(['git', 'status'], self.repo_dir))
|
||||
|
||||
def CustomPreProcess(self, cmd_str, repo_dict):
|
||||
return cmd_str.format(repo_dict, self._args, CONFIG_MAP[self._args.config])
|
||||
|
||||
def PreBuild(self):
|
||||
"""Execute any prebuild steps from the repo root"""
|
||||
for p in self.prebuild:
|
||||
command_output(shlex.split(p), self.repo_dir)
|
||||
if platform.system() == 'Linux' or platform.system() == 'Darwin':
|
||||
for p in self.prebuild_linux:
|
||||
command_output(shlex.split(p), self.repo_dir)
|
||||
if platform.system() == 'Windows':
|
||||
for p in self.prebuild_windows:
|
||||
command_output(shlex.split(p), self.repo_dir)
|
||||
|
||||
def CustomBuild(self, repo_dict):
|
||||
"""Execute any custom_build steps from the repo root"""
|
||||
for p in self.custom_build:
|
||||
cmd = self.CustomPreProcess(p, repo_dict)
|
||||
command_output(shlex.split(cmd), self.repo_dir)
|
||||
|
||||
def CMakeConfig(self, repos):
|
||||
"""Build CMake command for the configuration phase and execute it"""
|
||||
if self._args.do_clean_build:
|
||||
shutil.rmtree(self.build_dir)
|
||||
if self._args.do_clean_install:
|
||||
shutil.rmtree(self.install_dir)
|
||||
|
||||
# Create and change to build directory
|
||||
distutils.dir_util.mkpath(self.build_dir)
|
||||
os.chdir(self.build_dir)
|
||||
|
||||
cmake_cmd = [
|
||||
'cmake', self.repo_dir,
|
||||
'-DCMAKE_INSTALL_PREFIX=' + self.install_dir
|
||||
]
|
||||
|
||||
# For each repo this repo depends on, generate a CMake variable
|
||||
# definitions for "...INSTALL_DIR" that points to that dependent
|
||||
# repo's install dir.
|
||||
for d in self.deps:
|
||||
dep_commit = [r for r in repos if r.name == d['repo_name']]
|
||||
if len(dep_commit):
|
||||
cmake_cmd.append('-D{var_name}={install_dir}'.format(
|
||||
var_name=d['var_name'],
|
||||
install_dir=dep_commit[0].install_dir))
|
||||
|
||||
# Add any CMake options
|
||||
for option in self.cmake_options:
|
||||
cmake_cmd.append(option)
|
||||
|
||||
# Set build config for single-configuration generators
|
||||
if platform.system() == 'Linux' or platform.system() == 'Darwin':
|
||||
cmake_cmd.append('-DCMAKE_BUILD_TYPE={config}'.format(
|
||||
config=CONFIG_MAP[self._args.config]))
|
||||
|
||||
# Use the CMake -A option to select the platform architecture
|
||||
# without needing a Visual Studio generator.
|
||||
if platform.system() == 'Windows':
|
||||
if self._args.arch == '64' or self._args.arch == 'x64' or self._args.arch == 'win64':
|
||||
cmake_cmd.append('-A')
|
||||
cmake_cmd.append('x64')
|
||||
|
||||
# Apply a generator, if one is specified. This can be used to supply
|
||||
# a specific generator for the dependent repositories to match
|
||||
# that of the main repository.
|
||||
if self._args.generator is not None:
|
||||
cmake_cmd.extend(['-G', self._args.generator])
|
||||
|
||||
if VERBOSE:
|
||||
print("CMake command: " + " ".join(cmake_cmd))
|
||||
|
||||
ret_code = subprocess.call(cmake_cmd)
|
||||
if ret_code != 0:
|
||||
sys.exit(ret_code)
|
||||
|
||||
def CMakeBuild(self):
|
||||
"""Build CMake command for the build phase and execute it"""
|
||||
cmake_cmd = ['cmake', '--build', self.build_dir, '--target', 'install']
|
||||
if self._args.do_clean:
|
||||
cmake_cmd.append('--clean-first')
|
||||
|
||||
if platform.system() == 'Windows':
|
||||
cmake_cmd.append('--config')
|
||||
cmake_cmd.append(CONFIG_MAP[self._args.config])
|
||||
|
||||
# Speed up the build.
|
||||
if platform.system() == 'Linux' or platform.system() == 'Darwin':
|
||||
cmake_cmd.append('--')
|
||||
num_make_jobs = multiprocessing.cpu_count()
|
||||
env_make_jobs = os.environ.get('MAKE_JOBS', None)
|
||||
if env_make_jobs is not None:
|
||||
try:
|
||||
num_make_jobs = min(num_make_jobs, int(env_make_jobs))
|
||||
except ValueError:
|
||||
print('warning: environment variable MAKE_JOBS has non-numeric value "{}". '
|
||||
'Using {} (CPU count) instead.'.format(env_make_jobs, num_make_jobs))
|
||||
cmake_cmd.append('-j{}'.format(num_make_jobs))
|
||||
if platform.system() == 'Windows':
|
||||
cmake_cmd.append('--')
|
||||
cmake_cmd.append('/maxcpucount')
|
||||
|
||||
if VERBOSE:
|
||||
print("CMake command: " + " ".join(cmake_cmd))
|
||||
|
||||
ret_code = subprocess.call(cmake_cmd)
|
||||
if ret_code != 0:
|
||||
sys.exit(ret_code)
|
||||
|
||||
def Build(self, repos, repo_dict):
|
||||
"""Build the dependent repo"""
|
||||
print('Building {n} in {d}'.format(n=self.name, d=self.repo_dir))
|
||||
print('Build dir = {b}'.format(b=self.build_dir))
|
||||
print('Install dir = {i}\n'.format(i=self.install_dir))
|
||||
|
||||
# Run any prebuild commands
|
||||
self.PreBuild()
|
||||
|
||||
if self.build_step == 'custom':
|
||||
self.CustomBuild(repo_dict)
|
||||
return
|
||||
|
||||
# Build and execute CMake command for creating build files
|
||||
self.CMakeConfig(repos)
|
||||
|
||||
# Build and execute CMake command for the build
|
||||
self.CMakeBuild()
|
||||
|
||||
|
||||
def GetGoodRepos(args):
|
||||
"""Returns the latest list of GoodRepo objects.
|
||||
|
||||
The known-good file is expected to be in the same
|
||||
directory as this script unless overridden by the 'known_good_dir'
|
||||
parameter.
|
||||
"""
|
||||
if args.known_good_dir:
|
||||
known_good_file = os.path.join( os.path.abspath(args.known_good_dir),
|
||||
KNOWN_GOOD_FILE_NAME)
|
||||
else:
|
||||
known_good_file = os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)), KNOWN_GOOD_FILE_NAME)
|
||||
with open(known_good_file) as known_good:
|
||||
return [
|
||||
GoodRepo(repo, args)
|
||||
for repo in json.loads(known_good.read())['repos']
|
||||
]
|
||||
|
||||
|
||||
def GetInstallNames(args):
|
||||
"""Returns the install names list.
|
||||
|
||||
The known-good file is expected to be in the same
|
||||
directory as this script unless overridden by the 'known_good_dir'
|
||||
parameter.
|
||||
"""
|
||||
if args.known_good_dir:
|
||||
known_good_file = os.path.join(os.path.abspath(args.known_good_dir),
|
||||
KNOWN_GOOD_FILE_NAME)
|
||||
else:
|
||||
known_good_file = os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)), KNOWN_GOOD_FILE_NAME)
|
||||
with open(known_good_file) as known_good:
|
||||
install_info = json.loads(known_good.read())
|
||||
if install_info.get('install_names'):
|
||||
return install_info['install_names']
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def CreateHelper(args, repos, filename):
|
||||
"""Create a CMake config helper file.
|
||||
|
||||
The helper file is intended to be used with 'cmake -C <file>'
|
||||
to build this home repo using the dependencies built by this script.
|
||||
|
||||
The install_names dictionary represents the CMake variables used by the
|
||||
home repo to locate the install dirs of the dependent repos.
|
||||
This information is baked into the CMake files of the home repo and so
|
||||
this dictionary is kept with the repo via the json file.
|
||||
"""
|
||||
def escape(path):
|
||||
return path.replace('\\', '\\\\')
|
||||
install_names = GetInstallNames(args)
|
||||
with open(filename, 'w') as helper_file:
|
||||
for repo in repos:
|
||||
if install_names and repo.name in install_names and repo.on_build_platform:
|
||||
helper_file.write('set({var} "{dir}" CACHE STRING "" FORCE)\n'
|
||||
.format(
|
||||
var=install_names[repo.name],
|
||||
dir=escape(repo.install_dir)))
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Get and build dependent repos at known-good commits')
|
||||
parser.add_argument(
|
||||
'--known_good_dir',
|
||||
dest='known_good_dir',
|
||||
help="Specify directory for known_good.json file.")
|
||||
parser.add_argument(
|
||||
'--dir',
|
||||
dest='dir',
|
||||
default='.',
|
||||
help="Set target directory for repository roots. Default is \'.\'.")
|
||||
parser.add_argument(
|
||||
'--ref',
|
||||
dest='ref',
|
||||
default='',
|
||||
help="Override 'commit' with git reference. E.g., 'origin/master'")
|
||||
parser.add_argument(
|
||||
'--no-build',
|
||||
dest='do_build',
|
||||
action='store_false',
|
||||
help=
|
||||
"Clone/update repositories and generate build files without performing compilation",
|
||||
default=True)
|
||||
parser.add_argument(
|
||||
'--clean',
|
||||
dest='do_clean',
|
||||
action='store_true',
|
||||
help="Clean files generated by compiler and linker before building",
|
||||
default=False)
|
||||
parser.add_argument(
|
||||
'--clean-repo',
|
||||
dest='do_clean_repo',
|
||||
action='store_true',
|
||||
help="Delete repository directory before building",
|
||||
default=False)
|
||||
parser.add_argument(
|
||||
'--clean-build',
|
||||
dest='do_clean_build',
|
||||
action='store_true',
|
||||
help="Delete build directory before building",
|
||||
default=False)
|
||||
parser.add_argument(
|
||||
'--clean-install',
|
||||
dest='do_clean_install',
|
||||
action='store_true',
|
||||
help="Delete install directory before building",
|
||||
default=False)
|
||||
parser.add_argument(
|
||||
'--arch',
|
||||
dest='arch',
|
||||
choices=['32', '64', 'x86', 'x64', 'win32', 'win64'],
|
||||
type=str.lower,
|
||||
help="Set build files architecture (Windows)",
|
||||
default='64')
|
||||
parser.add_argument(
|
||||
'--config',
|
||||
dest='config',
|
||||
choices=['debug', 'release', 'relwithdebinfo', 'minsizerel'],
|
||||
type=str.lower,
|
||||
help="Set build files configuration",
|
||||
default='debug')
|
||||
parser.add_argument(
|
||||
'--generator',
|
||||
dest='generator',
|
||||
help="Set the CMake generator",
|
||||
default=None)
|
||||
|
||||
args = parser.parse_args()
|
||||
save_cwd = os.getcwd()
|
||||
|
||||
# Create working "top" directory if needed
|
||||
distutils.dir_util.mkpath(args.dir)
|
||||
abs_top_dir = os.path.abspath(args.dir)
|
||||
|
||||
repos = GetGoodRepos(args)
|
||||
repo_dict = {}
|
||||
|
||||
print('Starting builds in {d}'.format(d=abs_top_dir))
|
||||
for repo in repos:
|
||||
# If the repo has a platform whitelist, skip the repo
|
||||
# unless we are building on a whitelisted platform.
|
||||
if not repo.on_build_platform:
|
||||
continue
|
||||
|
||||
field_list = ('url',
|
||||
'sub_dir',
|
||||
'commit',
|
||||
'build_dir',
|
||||
'install_dir',
|
||||
'deps',
|
||||
'prebuild',
|
||||
'prebuild_linux',
|
||||
'prebuild_windows',
|
||||
'custom_build',
|
||||
'cmake_options',
|
||||
'ci_only',
|
||||
'build_step',
|
||||
'build_platforms',
|
||||
'repo_dir',
|
||||
'on_build_platform')
|
||||
repo_dict[repo.name] = {field: getattr(repo, field) for field in field_list}
|
||||
|
||||
# If the repo has a CI whitelist, skip the repo unless
|
||||
# one of the CI's environment variable is set to true.
|
||||
if len(repo.ci_only):
|
||||
do_build = False
|
||||
for env in repo.ci_only:
|
||||
if not env in os.environ:
|
||||
continue
|
||||
if os.environ[env].lower() == 'true':
|
||||
do_build = True
|
||||
break
|
||||
if not do_build:
|
||||
continue
|
||||
|
||||
# Clone/update the repository
|
||||
repo.Checkout()
|
||||
|
||||
# Build the repository
|
||||
if args.do_build and repo.build_step != 'skip':
|
||||
repo.Build(repos, repo_dict)
|
||||
|
||||
# Need to restore original cwd in order for CreateHelper to find json file
|
||||
os.chdir(save_cwd)
|
||||
CreateHelper(args, repos, os.path.join(abs_top_dir, 'helper.cmake'))
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
24564
thirdparty/vulkan/registry/validusage.json
vendored
Normal file
24564
thirdparty/vulkan/registry/validusage.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
11140
thirdparty/vulkan/registry/vk.xml
vendored
Normal file
11140
thirdparty/vulkan/registry/vk.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
234
thirdparty/vulkan/registry/vkconventions.py
vendored
Executable file
234
thirdparty/vulkan/registry/vkconventions.py
vendored
Executable file
@ -0,0 +1,234 @@
|
||||
#!/usr/bin/python3 -i
|
||||
#
|
||||
# Copyright (c) 2013-2019 The Khronos Group Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Working-group-specific style conventions,
|
||||
# used in generation.
|
||||
|
||||
import re
|
||||
|
||||
from conventions import ConventionsBase
|
||||
|
||||
|
||||
class VulkanConventions(ConventionsBase):
|
||||
def formatExtension(self, name):
|
||||
"""Mark up a name as an extension for the spec."""
|
||||
return '`<<{}>>`'.format(name)
|
||||
|
||||
@property
|
||||
def null(self):
|
||||
"""Preferred spelling of NULL."""
|
||||
return '`NULL`'
|
||||
|
||||
@property
|
||||
def constFlagBits(self):
|
||||
"""Returns True if static const flag bits should be generated, False if an enumerated type should be generated."""
|
||||
return False
|
||||
|
||||
@property
|
||||
def struct_macro(self):
|
||||
return 'sname:'
|
||||
|
||||
@property
|
||||
def external_macro(self):
|
||||
return 'code:'
|
||||
|
||||
@property
|
||||
def structtype_member_name(self):
|
||||
"""Return name of the structure type member"""
|
||||
return 'sType'
|
||||
|
||||
@property
|
||||
def nextpointer_member_name(self):
|
||||
"""Return name of the structure pointer chain member"""
|
||||
return 'pNext'
|
||||
|
||||
@property
|
||||
def valid_pointer_prefix(self):
|
||||
"""Return prefix to pointers which must themselves be valid"""
|
||||
return 'valid'
|
||||
|
||||
def is_structure_type_member(self, paramtype, paramname):
|
||||
"""Determine if member type and name match the structure type member."""
|
||||
return paramtype == 'VkStructureType' and paramname == self.structtype_member_name
|
||||
|
||||
def is_nextpointer_member(self, paramtype, paramname):
|
||||
"""Determine if member type and name match the next pointer chain member."""
|
||||
return paramtype == 'void' and paramname == self.nextpointer_member_name
|
||||
|
||||
def generate_structure_type_from_name(self, structname):
|
||||
"""Generate a structure type name, like VK_STRUCTURE_TYPE_CREATE_INSTANCE_INFO"""
|
||||
structure_type_parts = []
|
||||
# Tokenize into "words"
|
||||
for elem in re.findall(r'(([A-Z][a-z]+)|([A-Z][A-Z]+))', structname):
|
||||
if elem[0] == 'Vk':
|
||||
structure_type_parts.append('VK_STRUCTURE_TYPE')
|
||||
else:
|
||||
structure_type_parts.append(elem[0].upper())
|
||||
return '_'.join(structure_type_parts)
|
||||
|
||||
@property
|
||||
def warning_comment(self):
|
||||
"""Return warning comment to be placed in header of generated Asciidoctor files"""
|
||||
return '// WARNING: DO NOT MODIFY! This file is automatically generated from the vk.xml registry'
|
||||
|
||||
@property
|
||||
def file_suffix(self):
|
||||
"""Return suffix of generated Asciidoctor files"""
|
||||
return '.txt'
|
||||
|
||||
def api_name(self, spectype = 'api'):
|
||||
"""Return API or specification name for citations in ref pages.ref
|
||||
pages should link to for
|
||||
|
||||
spectype is the spec this refpage is for: 'api' is the Vulkan API
|
||||
Specification. Defaults to 'api'. If an unrecognized spectype is
|
||||
given, returns None.
|
||||
"""
|
||||
if spectype == 'api' or spectype is None:
|
||||
return 'Vulkan'
|
||||
else:
|
||||
return None
|
||||
|
||||
@property
|
||||
def xml_supported_name_of_api(self):
|
||||
"""Return the supported= attribute used in API XML"""
|
||||
return 'vulkan'
|
||||
|
||||
@property
|
||||
def api_prefix(self):
|
||||
"""Return API token prefix"""
|
||||
return 'VK_'
|
||||
|
||||
@property
|
||||
def api_version_prefix(self):
|
||||
"""Return API core version token prefix"""
|
||||
return 'VK_VERSION_'
|
||||
|
||||
@property
|
||||
def KHR_prefix(self):
|
||||
"""Return extension name prefix for KHR extensions"""
|
||||
return 'VK_KHR_'
|
||||
|
||||
@property
|
||||
def EXT_prefix(self):
|
||||
"""Return extension name prefix for EXT extensions"""
|
||||
return 'VK_EXT_'
|
||||
|
||||
@property
|
||||
def write_contacts(self):
|
||||
"""Return whether contact list should be written to extension appendices"""
|
||||
return True
|
||||
|
||||
@property
|
||||
def write_refpage_include(self):
|
||||
"""Return whether refpage include should be written to extension appendices"""
|
||||
return True
|
||||
|
||||
def writeFeature(self, featureExtraProtect, filename):
|
||||
"""Returns True if OutputGenerator.endFeature should write this feature.
|
||||
Used in COutputGenerator
|
||||
"""
|
||||
return True
|
||||
|
||||
def requires_error_validation(self, return_type):
|
||||
"""Returns True if the return_type element is an API result code
|
||||
requiring error validation.
|
||||
"""
|
||||
return False
|
||||
|
||||
@property
|
||||
def required_errors(self):
|
||||
"""Return a list of required error codes for validation."""
|
||||
return []
|
||||
|
||||
def is_externsync_command(self, protoname):
|
||||
"""Returns True if the protoname element is an API command requiring
|
||||
external synchronization
|
||||
"""
|
||||
return protoname is not None and 'vkCmd' in protoname
|
||||
|
||||
def is_api_name(self, name):
|
||||
"""Returns True if name is in the reserved API namespace.
|
||||
For Vulkan, these are names with a case-insensitive 'vk' prefix, or
|
||||
a 'PFN_vk' function pointer type prefix.
|
||||
"""
|
||||
return name[0:2].lower() == 'vk' or name[0:6] == 'PFN_vk'
|
||||
|
||||
def is_voidpointer_alias(self, tag, text, tail):
|
||||
"""Return True if the declaration components (tag,text,tail) of an
|
||||
element represents a void * type
|
||||
"""
|
||||
return tag == 'type' and text == 'void' and tail.startswith('*')
|
||||
|
||||
def make_voidpointer_alias(self, tail):
|
||||
"""Reformat a void * declaration to include the API alias macro.
|
||||
Vulkan doesn't have an API alias macro, so do nothing.
|
||||
"""
|
||||
return tail
|
||||
|
||||
def specURL(self, spectype = 'api'):
|
||||
"""Return public registry URL which ref pages should link to for the
|
||||
current all-extensions HTML specification, so xrefs in the
|
||||
asciidoc source that aren't to ref pages can link into it
|
||||
instead. N.b. this may need to change on a per-refpage basis if
|
||||
there are multiple documents involved.
|
||||
"""
|
||||
return 'https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html'
|
||||
|
||||
@property
|
||||
def xml_api_name(self):
|
||||
"""Return the name used in the default API XML registry for the default API"""
|
||||
return 'vulkan'
|
||||
|
||||
@property
|
||||
def registry_path(self):
|
||||
"""Return relpath to the default API XML registry in this project."""
|
||||
return 'xml/vk.xml'
|
||||
|
||||
@property
|
||||
def specification_path(self):
|
||||
"""Return relpath to the Asciidoctor specification sources in this project."""
|
||||
return '../appendices/meta'
|
||||
|
||||
@property
|
||||
def extra_refpage_headers(self):
|
||||
"""Return any extra text to add to refpage headers."""
|
||||
return 'include::../config/attribs.txt[]'
|
||||
|
||||
@property
|
||||
def extension_index_prefixes(self):
|
||||
"""Return a list of extension prefixes used to group extension refpages."""
|
||||
return ['VK_KHR', 'VK_EXT', 'VK']
|
||||
|
||||
@property
|
||||
def unified_flag_refpages(self):
|
||||
"""Returns True if Flags/FlagBits refpages are unified, False if
|
||||
they're separate.
|
||||
"""
|
||||
return False
|
||||
|
||||
@property
|
||||
def spec_reflow_path(self):
|
||||
"""Return the relative path to the spec source folder to reflow"""
|
||||
return '.'
|
||||
|
||||
@property
|
||||
def spec_no_reflow_dirs(self):
|
||||
"""Return a set of directories not to automatically descend into
|
||||
when reflowing spec text
|
||||
"""
|
||||
return ('scripts', 'style')
|
||||
|
||||
Reference in New Issue
Block a user