[Vulkan] Replace vulkan-loader with volk
This commit is contained in:
parent
e971e38cdb
commit
61e47167c0
|
@ -37,3 +37,6 @@
|
|||
[submodule "third_party/spirv-headers"]
|
||||
path = third_party/spirv-headers
|
||||
url = https://github.com/KhronosGroup/SPIRV-Headers
|
||||
[submodule "third_party/volk"]
|
||||
path = third_party/volk
|
||||
url = https://github.com/zeux/volk.git
|
||||
|
|
|
@ -228,7 +228,7 @@ solution("xenia")
|
|||
include("third_party/libav.lua")
|
||||
include("third_party/snappy.lua")
|
||||
include("third_party/spirv-tools.lua")
|
||||
include("third_party/vulkan/loader")
|
||||
include("third_party/volk.lua")
|
||||
include("third_party/xxhash.lua")
|
||||
include("third_party/yaml-cpp.lua")
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ project("xenia-app")
|
|||
"libavutil",
|
||||
"snappy",
|
||||
"spirv-tools",
|
||||
"vulkan-loader",
|
||||
"volk",
|
||||
"xenia-apu",
|
||||
"xenia-apu-nop",
|
||||
"xenia-base",
|
||||
|
|
|
@ -15,8 +15,7 @@
|
|||
#include "xenia/base/profiling.h"
|
||||
#include "xenia/gpu/gpu_flags.h"
|
||||
#include "xenia/gpu/vulkan/vulkan_gpu_flags.h"
|
||||
|
||||
#include "third_party/vulkan/vk_mem_alloc.h"
|
||||
#include "xenia/ui/vulkan/vulkan_mem_alloc.h"
|
||||
|
||||
using namespace xe::gpu::xenos;
|
||||
|
||||
|
@ -120,9 +119,13 @@ VkResult BufferCache::Initialize() {
|
|||
}
|
||||
|
||||
// Create a memory allocator for textures.
|
||||
VmaVulkanFunctions vulkan_funcs = {};
|
||||
ui::vulkan::FillVMAVulkanFunctions(&vulkan_funcs);
|
||||
|
||||
VmaAllocatorCreateInfo alloc_info = {
|
||||
0, *device_, *device_, 0, 0, nullptr, nullptr,
|
||||
0, *device_, *device_, 0, 0, nullptr, nullptr, 0, nullptr, &vulkan_funcs,
|
||||
};
|
||||
|
||||
status = vmaCreateAllocator(&alloc_info, &mem_allocator_);
|
||||
if (status != VK_SUCCESS) {
|
||||
return status;
|
||||
|
|
|
@ -7,7 +7,7 @@ project("xenia-gpu-vulkan")
|
|||
kind("StaticLib")
|
||||
language("C++")
|
||||
links({
|
||||
"vulkan-loader",
|
||||
"volk",
|
||||
"xenia-base",
|
||||
"xenia-gpu",
|
||||
"xenia-ui",
|
||||
|
@ -40,7 +40,7 @@ project("xenia-gpu-vulkan-trace-viewer")
|
|||
"libavutil",
|
||||
"snappy",
|
||||
"spirv-tools",
|
||||
"vulkan-loader",
|
||||
"volk",
|
||||
"xenia-apu",
|
||||
"xenia-apu-nop",
|
||||
"xenia-base",
|
||||
|
@ -112,7 +112,7 @@ project("xenia-gpu-vulkan-trace-dump")
|
|||
"libavutil",
|
||||
"snappy",
|
||||
"spirv-tools",
|
||||
"vulkan-loader",
|
||||
"volk",
|
||||
"xenia-apu",
|
||||
"xenia-apu-nop",
|
||||
"xenia-base",
|
||||
|
|
|
@ -17,8 +17,7 @@
|
|||
#include "xenia/gpu/sampler_info.h"
|
||||
#include "xenia/gpu/texture_info.h"
|
||||
#include "xenia/gpu/vulkan/vulkan_gpu_flags.h"
|
||||
|
||||
#include "third_party/vulkan/vk_mem_alloc.h"
|
||||
#include "xenia/ui/vulkan/vulkan_mem_alloc.h"
|
||||
|
||||
namespace xe {
|
||||
namespace gpu {
|
||||
|
@ -198,8 +197,11 @@ VkResult TextureCache::Initialize() {
|
|||
}
|
||||
|
||||
// Create a memory allocator for textures.
|
||||
VmaVulkanFunctions vulkan_funcs = {};
|
||||
ui::vulkan::FillVMAVulkanFunctions(&vulkan_funcs);
|
||||
|
||||
VmaAllocatorCreateInfo alloc_info = {
|
||||
0, *device_, *device_, 0, 0, nullptr, nullptr,
|
||||
0, *device_, *device_, 0, 0, nullptr, nullptr, 0, nullptr, &vulkan_funcs,
|
||||
};
|
||||
status = vmaCreateAllocator(&alloc_info, &mem_allocator_);
|
||||
if (status != VK_SUCCESS) {
|
||||
|
|
|
@ -31,7 +31,7 @@ project("xenia-ui-window-vulkan-demo")
|
|||
links({
|
||||
"gflags",
|
||||
"imgui",
|
||||
"vulkan-loader",
|
||||
"volk",
|
||||
"xenia-base",
|
||||
"xenia-ui",
|
||||
"xenia-ui-spirv",
|
||||
|
|
|
@ -22,8 +22,8 @@
|
|||
#error Platform not yet supported.
|
||||
#endif // XE_PLATFORM_WIN32
|
||||
|
||||
// We are statically linked with the loader, so use function prototypes.
|
||||
#define VK_PROTOTYPES
|
||||
// We use a loader with its own function prototypes.
|
||||
#include "third_party/volk/volk.h"
|
||||
#include "third_party/vulkan/vulkan.h"
|
||||
|
||||
// NOTE: header order matters here, unfortunately:
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include <string>
|
||||
|
||||
#include "third_party/renderdoc/renderdoc_app.h"
|
||||
#include "third_party/volk/volk.h"
|
||||
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/logging.h"
|
||||
|
@ -72,6 +73,10 @@ VulkanInstance::~VulkanInstance() { DestroyInstance(); }
|
|||
bool VulkanInstance::Initialize() {
|
||||
auto version = Version::Parse(VK_API_VERSION);
|
||||
XELOGVK("Initializing Vulkan %s...", version.pretty_string.c_str());
|
||||
if (volkInitialize() != VK_SUCCESS) {
|
||||
XELOGE("volkInitialize() failed!");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get all of the global layers and extensions provided by the system.
|
||||
if (!QueryGlobals()) {
|
||||
|
@ -271,6 +276,9 @@ bool VulkanInstance::CreateInstance() {
|
|||
return false;
|
||||
}
|
||||
|
||||
// Load Vulkan entrypoints and extensions.
|
||||
volkLoadInstance(handle);
|
||||
|
||||
// Enable debug validation, if needed.
|
||||
EnableDebugValidation();
|
||||
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2018 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_UI_VULKAN_VULKAN_MEM_ALLOC_H_
|
||||
#define XENIA_UI_VULKAN_VULKAN_MEM_ALLOC_H_
|
||||
|
||||
#include "third_party/volk/volk.h"
|
||||
|
||||
#define VMA_STATIC_VULKAN_FUNCTIONS 0
|
||||
#include "third_party/vulkan/vk_mem_alloc.h"
|
||||
|
||||
namespace xe {
|
||||
namespace ui {
|
||||
namespace vulkan {
|
||||
|
||||
inline void FillVMAVulkanFunctions(VmaVulkanFunctions* vma_funcs) {
|
||||
vma_funcs->vkGetPhysicalDeviceProperties = vkGetPhysicalDeviceProperties;
|
||||
vma_funcs->vkGetPhysicalDeviceMemoryProperties =
|
||||
vkGetPhysicalDeviceMemoryProperties;
|
||||
vma_funcs->vkAllocateMemory = vkAllocateMemory;
|
||||
vma_funcs->vkFreeMemory = vkFreeMemory;
|
||||
vma_funcs->vkMapMemory = vkMapMemory;
|
||||
vma_funcs->vkUnmapMemory = vkUnmapMemory;
|
||||
vma_funcs->vkBindBufferMemory = vkBindBufferMemory;
|
||||
vma_funcs->vkBindImageMemory = vkBindImageMemory;
|
||||
vma_funcs->vkGetBufferMemoryRequirements = vkGetBufferMemoryRequirements;
|
||||
vma_funcs->vkGetImageMemoryRequirements = vkGetImageMemoryRequirements;
|
||||
vma_funcs->vkCreateBuffer = vkCreateBuffer;
|
||||
vma_funcs->vkDestroyBuffer = vkDestroyBuffer;
|
||||
vma_funcs->vkCreateImage = vkCreateImage;
|
||||
vma_funcs->vkDestroyImage = vkDestroyImage;
|
||||
}
|
||||
|
||||
} // namespace vulkan
|
||||
} // namespace ui
|
||||
} // namespace xe
|
||||
|
||||
#endif // XENIA_UI_VULKAN_VULKAN_MEM_ALLOC_H_
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
// Implement AMD's VMA here.
|
||||
#define VMA_IMPLEMENTATION
|
||||
#include "third_party/vulkan/vk_mem_alloc.h"
|
||||
#include "xenia/ui/vulkan/vulkan_mem_alloc.h"
|
||||
|
||||
namespace xe {
|
||||
namespace ui {
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 30a851b67e129a3d91f191b2e9dcdad65ba98438
|
|
@ -0,0 +1,30 @@
|
|||
group("third_party")
|
||||
project("volk")
|
||||
uuid("C9781C93-2DF5-47A2-94EE-2C5EBED61239")
|
||||
kind("StaticLib")
|
||||
language("C")
|
||||
|
||||
defines({
|
||||
"_LIB",
|
||||
"API_NAME=\"vulkan\"",
|
||||
})
|
||||
removedefines({
|
||||
"_UNICODE",
|
||||
"UNICODE",
|
||||
})
|
||||
includedirs({
|
||||
"volk",
|
||||
})
|
||||
files({
|
||||
"volk/volk.c",
|
||||
"volk/volk.h",
|
||||
})
|
||||
|
||||
filter("platforms:Windows")
|
||||
defines({
|
||||
"VK_USE_PLATFORM_WIN32_KHR",
|
||||
})
|
||||
filter("platforms:Linux")
|
||||
defines({
|
||||
"VK_USE_PLATFORM_XCB_KHR",
|
||||
})
|
File diff suppressed because it is too large
Load Diff
|
@ -1,174 +0,0 @@
|
|||
/*
|
||||
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
|
|
@ -1,466 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2016 Valve Corporation
|
||||
* Copyright (c) 2015-2016 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>
|
||||
*
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#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_report.h"
|
||||
#include "vulkan/vk_layer.h"
|
||||
|
||||
typedef void(VKAPI_PTR *PFN_stringCallback)(char *message);
|
||||
|
||||
static const VkExtensionProperties debug_report_extension_info = {
|
||||
.extensionName = VK_EXT_DEBUG_REPORT_EXTENSION_NAME, .specVersion = VK_EXT_DEBUG_REPORT_SPEC_VERSION,
|
||||
};
|
||||
|
||||
void debug_report_add_instance_extensions(const struct loader_instance *inst, struct loader_extension_list *ext_list) {
|
||||
loader_add_to_ext_list(inst, ext_list, 1, &debug_report_extension_info);
|
||||
}
|
||||
|
||||
void debug_report_create_instance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo) {
|
||||
ptr_instance->enabled_known_extensions.ext_debug_report = 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;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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->msgCallback = callback;
|
||||
pNewDbgFuncNode->pfnMsgCallback = pCreateInfo->pfnCallback;
|
||||
pNewDbgFuncNode->msgFlags = pCreateInfo->flags;
|
||||
pNewDbgFuncNode->pUserData = pCreateInfo->pUserData;
|
||||
pNewDbgFuncNode->pNext = inst->DbgFunctionHead;
|
||||
inst->DbgFunctionHead = pNewDbgFuncNode;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
static VKAPI_ATTR VkResult VKAPI_CALL
|
||||
debug_report_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;
|
||||
while (pTrav) {
|
||||
if (pTrav->msgFlags & msgFlags) {
|
||||
if (pTrav->pfnMsgCallback(msgFlags, objectType, srcObject, location, msgCode, pLayerPrefix, pMsg, 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->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;
|
||||
|
||||
// NOTE: The loader is not using pAllocator, and so this function doesn't
|
||||
// either.
|
||||
|
||||
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_report_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);
|
||||
|
||||
util_DestroyDebugReportCallback(inst, callback, pAllocator);
|
||||
|
||||
loader_platform_thread_unlock_mutex(&loader_lock);
|
||||
}
|
||||
|
||||
static VKAPI_ATTR void VKAPI_CALL debug_report_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->pfnMsgCallback = pCreateInfo->pfnCallback;
|
||||
pNewDbgFuncNode->msgFlags = pCreateInfo->flags;
|
||||
pNewDbgFuncNode->pUserData = pCreateInfo->pUserData;
|
||||
pNewDbgFuncNode->pNext = inst->DbgFunctionHead;
|
||||
inst->DbgFunctionHead = pNewDbgFuncNode;
|
||||
|
||||
*(VkDebugReportCallbackEXT **)pCallback = icd_info;
|
||||
pNewDbgFuncNode->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++;
|
||||
}
|
||||
|
||||
#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);
|
||||
}
|
||||
|
||||
bool debug_report_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr) {
|
||||
// debug_report is currently advertised to be supported by the loader,
|
||||
// so always return the entry points if name matches and it's enabled
|
||||
*addr = NULL;
|
||||
|
||||
if (!strcmp("vkCreateDebugReportCallbackEXT", name)) {
|
||||
*addr = (ptr_instance->enabled_known_extensions.ext_debug_report == 1) ? (void *)debug_report_CreateDebugReportCallbackEXT
|
||||
: NULL;
|
||||
return true;
|
||||
}
|
||||
if (!strcmp("vkDestroyDebugReportCallbackEXT", name)) {
|
||||
*addr = (ptr_instance->enabled_known_extensions.ext_debug_report == 1) ? (void *)debug_report_DestroyDebugReportCallbackEXT
|
||||
: NULL;
|
||||
return true;
|
||||
}
|
||||
if (!strcmp("vkDebugReportMessageEXT", name)) {
|
||||
*addr = (ptr_instance->enabled_known_extensions.ext_debug_report == 1) ? (void *)debug_report_DebugReportMessageEXT : NULL;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
|
@ -1,138 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||
* Copyright (c) 2015-2016 Valve Corporation
|
||||
* Copyright (c) 2015-2016 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>
|
||||
*
|
||||
*/
|
||||
|
||||
#include "vk_loader_platform.h"
|
||||
#include "loader.h"
|
||||
|
||||
// CreateMsgCallback is global and needs to be
|
||||
// applied to all layers and ICDs.
|
||||
// What happens if a layer is enabled on both the instance chain
|
||||
// as well as the device chain and a call to CreateMsgCallback is made?
|
||||
// Do we need to make sure that each layer / driver only gets called once?
|
||||
// Should a layer implementing support for CreateMsgCallback only be allowed (?)
|
||||
// to live on one chain? Or maybe make it the application's responsibility.
|
||||
// If the app enables DRAW_STATE on at both CreateInstance time and CreateDevice
|
||||
// time, CreateMsgCallback will call the DRAW_STATE layer twice. Once via
|
||||
// the instance chain and once via the device chain.
|
||||
// The loader should only return the DEBUG_REPORT extension as supported
|
||||
// for the GetGlobalExtensionSupport call. That should help eliminate one
|
||||
// duplication.
|
||||
// Since the instance chain requires us iterating over the available ICDs
|
||||
// and each ICD will have it's own unique MsgCallback object we need to
|
||||
// track those objects to give back the right one.
|
||||
// This also implies that the loader has to intercept vkDestroyObject and
|
||||
// if the extension is enabled and the object type is a MsgCallback then
|
||||
// we must translate the object into the proper ICD specific ones.
|
||||
// DestroyObject works on a device chain. Should not be what's destroying
|
||||
// the MsgCallback object. That needs to be an instance thing. So, since
|
||||
// we used an instance to create it, we need a custom Destroy that also
|
||||
// takes an instance. That way we can iterate over the ICDs properly.
|
||||
// Example use:
|
||||
// CreateInstance: DEBUG_REPORT
|
||||
// Loader will create instance chain with enabled extensions.
|
||||
// TODO: Should validation layers be enabled here? If not, they will not be in
|
||||
// the instance chain.
|
||||
// fn = GetProcAddr(INSTANCE, "vkCreateMsgCallback") -> point to loader's
|
||||
// vkCreateMsgCallback
|
||||
// App creates a callback object: fn(..., &MsgCallbackObject1)
|
||||
// Have only established the instance chain so far. Loader will call the
|
||||
// instance chain.
|
||||
// Each layer in the instance chain will call down to the next layer,
|
||||
// terminating with
|
||||
// the CreateMsgCallback loader terminator function that creates the actual
|
||||
// MsgCallbackObject1 object.
|
||||
// The loader CreateMsgCallback terminator will iterate over the ICDs.
|
||||
// Calling each ICD that supports vkCreateMsgCallback and collect answers in
|
||||
// icd_msg_callback_map here.
|
||||
// As result is sent back up the chain each layer has opportunity to record the
|
||||
// callback operation and
|
||||
// appropriate MsgCallback object.
|
||||
// ...
|
||||
// Any reports matching the flags set in MsgCallbackObject1 will generate the
|
||||
// defined callback behavior
|
||||
// in the layer / ICD that initiated that report.
|
||||
// ...
|
||||
// CreateDevice: MemTracker:...
|
||||
// App does not include DEBUG_REPORT as that is a global extension.
|
||||
// TODO: GetExtensionSupport must not report DEBUG_REPORT when using instance.
|
||||
// App MUST include any desired validation layers or they will not participate
|
||||
// in the device call chain.
|
||||
// App creates a callback object: fn(..., &MsgCallbackObject2)
|
||||
// Loader's vkCreateMsgCallback is called.
|
||||
// Loader sends call down instance chain - this is a global extension - any
|
||||
// validation layer that was
|
||||
// enabled at CreateInstance will be able to register the callback. Loader will
|
||||
// iterate over the ICDs and
|
||||
// will record the ICD's version of the MsgCallback2 object here.
|
||||
// ...
|
||||
// Any report will go to the layer's report function and it will check the flags
|
||||
// for MsgCallbackObject1
|
||||
// and MsgCallbackObject2 and take the appropriate action as indicated by the
|
||||
// app.
|
||||
// ...
|
||||
// App calls vkDestroyMsgCallback( MsgCallbackObject1 )
|
||||
// Loader's DestroyMsgCallback is where call starts. DestroyMsgCallback will be
|
||||
// sent down instance chain
|
||||
// ending in the loader's DestroyMsgCallback terminator which will iterate over
|
||||
// the ICD's destroying each
|
||||
// ICD version of that MsgCallback object and then destroy the loader's version
|
||||
// of the object.
|
||||
// Any reports generated after this will only have MsgCallbackObject2 available.
|
||||
|
||||
void debug_report_add_instance_extensions(const struct loader_instance *inst, struct loader_extension_list *ext_list);
|
||||
|
||||
void debug_report_create_instance(struct loader_instance *ptr_instance, const VkInstanceCreateInfo *pCreateInfo);
|
||||
|
||||
bool debug_report_instance_gpa(struct loader_instance *ptr_instance, const char *name, void **addr);
|
||||
|
||||
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);
|
||||
|
||||
void util_DestroyDebugReportCallback(struct loader_instance *inst, VkDebugReportCallbackEXT callback,
|
||||
const VkAllocationCallbacks *pAllocator);
|
||||
|
||||
VkResult util_CopyDebugReportCreateInfos(const void *pChain, const VkAllocationCallbacks *pAllocator, uint32_t *num_callbacks,
|
||||
VkDebugReportCallbackCreateInfoEXT **infos, VkDebugReportCallbackEXT **callbacks);
|
||||
void util_FreeDebugReportCreateInfos(const VkAllocationCallbacks *pAllocator, VkDebugReportCallbackCreateInfoEXT *infos,
|
||||
VkDebugReportCallbackEXT *callbacks);
|
||||
VkResult util_CreateDebugReportCallbacks(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator,
|
||||
uint32_t num_callbacks, VkDebugReportCallbackCreateInfoEXT *infos,
|
||||
VkDebugReportCallbackEXT *callbacks);
|
||||
|
||||
void util_DestroyDebugReportCallbacks(struct loader_instance *inst, const VkAllocationCallbacks *pAllocator, uint32_t num_callbacks,
|
||||
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);
|
|
@ -1,538 +0,0 @@
|
|||
/*
|
||||
* 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;
|
||||
}
|
|
@ -1,128 +0,0 @@
|
|||
/*
|
||||
|
||||
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.
|
||||
|
||||
*/
|
|
@ -1,51 +0,0 @@
|
|||
#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
|
File diff suppressed because it is too large
Load Diff
|
@ -1,160 +0,0 @@
|
|||
/*
|
||||
* 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 EnumeratePhysicalDeviceGroupsKHX(
|
||||
VkInstance instance, uint32_t *pPhysicalDeviceGroupCount,
|
||||
VkPhysicalDeviceGroupPropertiesKHX *pPhysicalDeviceGroupProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_EnumeratePhysicalDeviceGroupsKHX(
|
||||
VkInstance instance, uint32_t *pPhysicalDeviceGroupCount,
|
||||
VkPhysicalDeviceGroupPropertiesKHX *pPhysicalDeviceGroupProperties);
|
||||
|
||||
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 void VKAPI_CALL GetPhysicalDeviceFeatures2KHR(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2KHR* pFeatures);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFeatures2KHR(VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceFeatures2KHR* pFeatures);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties2KHR(VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceProperties2KHR* pProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceProperties2KHR(VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceProperties2KHR* pProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties2KHR(VkPhysicalDevice physicalDevice, VkFormat format,
|
||||
VkFormatProperties2KHR* pFormatProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceFormatProperties2KHR(VkPhysicalDevice physicalDevice, VkFormat format,
|
||||
VkFormatProperties2KHR* pFormatProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo,
|
||||
VkImageFormatProperties2KHR* pImageFormatProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceImageFormatProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo,
|
||||
VkImageFormatProperties2KHR* pImageFormatProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties2KHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pQueueFamilyPropertyCount,
|
||||
VkQueueFamilyProperties2KHR* pQueueFamilyProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceQueueFamilyProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2KHR* pQueueFamilyProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties2KHR(VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceMemoryProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo, uint32_t* pPropertyCount,
|
||||
VkSparseImageFormatProperties2KHR* pProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceSparseImageFormatProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo, uint32_t* pPropertyCount,
|
||||
VkSparseImageFormatProperties2KHR* pProperties);
|
||||
|
||||
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
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalBufferPropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo,
|
||||
VkExternalBufferPropertiesKHR* pExternalBufferProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalBufferPropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo,
|
||||
VkExternalBufferPropertiesKHR* pExternalBufferProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalSemaphorePropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo,
|
||||
VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalSemaphorePropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo,
|
||||
VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceExternalFencePropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo,
|
||||
VkExternalFencePropertiesKHR* pExternalFenceProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL terminator_GetPhysicalDeviceExternalFencePropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo,
|
||||
VkExternalFencePropertiesKHR* pExternalFenceProperties);
|
|
@ -1,204 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* 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_report.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 (PFN_vkVoidFunction)vkGetInstanceProcAddr;
|
||||
if (!strcmp(funcName, "vkDestroyInstance")) return (PFN_vkVoidFunction)vkDestroyInstance;
|
||||
if (!strcmp(funcName, "vkEnumeratePhysicalDevices")) return (PFN_vkVoidFunction)vkEnumeratePhysicalDevices;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures")) return (PFN_vkVoidFunction)vkGetPhysicalDeviceFeatures;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties")) return (PFN_vkVoidFunction)vkGetPhysicalDeviceFormatProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceImageFormatProperties"))
|
||||
return (PFN_vkVoidFunction)vkGetPhysicalDeviceImageFormatProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceSparseImageFormatProperties"))
|
||||
return (PFN_vkVoidFunction)vkGetPhysicalDeviceSparseImageFormatProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceProperties")) return (PFN_vkVoidFunction)vkGetPhysicalDeviceProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceQueueFamilyProperties"))
|
||||
return (PFN_vkVoidFunction)vkGetPhysicalDeviceQueueFamilyProperties;
|
||||
if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties")) return (PFN_vkVoidFunction)vkGetPhysicalDeviceMemoryProperties;
|
||||
if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties")) return (PFN_vkVoidFunction)vkEnumerateDeviceLayerProperties;
|
||||
if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties")) return (PFN_vkVoidFunction)vkEnumerateDeviceExtensionProperties;
|
||||
if (!strcmp(funcName, "vkCreateDevice")) return (PFN_vkVoidFunction)vkCreateDevice;
|
||||
if (!strcmp(funcName, "vkGetDeviceProcAddr")) return (PFN_vkVoidFunction)vkGetDeviceProcAddr;
|
||||
if (!strcmp(funcName, "vkDestroyDevice")) return (PFN_vkVoidFunction)vkDestroyDevice;
|
||||
if (!strcmp(funcName, "vkGetDeviceQueue")) return (PFN_vkVoidFunction)vkGetDeviceQueue;
|
||||
if (!strcmp(funcName, "vkQueueSubmit")) return (PFN_vkVoidFunction)vkQueueSubmit;
|
||||
if (!strcmp(funcName, "vkQueueWaitIdle")) return (PFN_vkVoidFunction)vkQueueWaitIdle;
|
||||
if (!strcmp(funcName, "vkDeviceWaitIdle")) return (PFN_vkVoidFunction)vkDeviceWaitIdle;
|
||||
if (!strcmp(funcName, "vkAllocateMemory")) return (PFN_vkVoidFunction)vkAllocateMemory;
|
||||
if (!strcmp(funcName, "vkFreeMemory")) return (PFN_vkVoidFunction)vkFreeMemory;
|
||||
if (!strcmp(funcName, "vkMapMemory")) return (PFN_vkVoidFunction)vkMapMemory;
|
||||
if (!strcmp(funcName, "vkUnmapMemory")) return (PFN_vkVoidFunction)vkUnmapMemory;
|
||||
if (!strcmp(funcName, "vkFlushMappedMemoryRanges")) return (PFN_vkVoidFunction)vkFlushMappedMemoryRanges;
|
||||
if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges")) return (PFN_vkVoidFunction)vkInvalidateMappedMemoryRanges;
|
||||
if (!strcmp(funcName, "vkGetDeviceMemoryCommitment")) return (PFN_vkVoidFunction)vkGetDeviceMemoryCommitment;
|
||||
if (!strcmp(funcName, "vkGetImageSparseMemoryRequirements")) return (PFN_vkVoidFunction)vkGetImageSparseMemoryRequirements;
|
||||
if (!strcmp(funcName, "vkGetImageMemoryRequirements")) return (PFN_vkVoidFunction)vkGetImageMemoryRequirements;
|
||||
if (!strcmp(funcName, "vkGetBufferMemoryRequirements")) return (PFN_vkVoidFunction)vkGetBufferMemoryRequirements;
|
||||
if (!strcmp(funcName, "vkBindImageMemory")) return (PFN_vkVoidFunction)vkBindImageMemory;
|
||||
if (!strcmp(funcName, "vkBindBufferMemory")) return (PFN_vkVoidFunction)vkBindBufferMemory;
|
||||
if (!strcmp(funcName, "vkQueueBindSparse")) return (PFN_vkVoidFunction)vkQueueBindSparse;
|
||||
if (!strcmp(funcName, "vkCreateFence")) return (PFN_vkVoidFunction)vkCreateFence;
|
||||
if (!strcmp(funcName, "vkDestroyFence")) return (PFN_vkVoidFunction)vkDestroyFence;
|
||||
if (!strcmp(funcName, "vkGetFenceStatus")) return (PFN_vkVoidFunction)vkGetFenceStatus;
|
||||
if (!strcmp(funcName, "vkResetFences")) return (PFN_vkVoidFunction)vkResetFences;
|
||||
if (!strcmp(funcName, "vkWaitForFences")) return (PFN_vkVoidFunction)vkWaitForFences;
|
||||
if (!strcmp(funcName, "vkCreateSemaphore")) return (PFN_vkVoidFunction)vkCreateSemaphore;
|
||||
if (!strcmp(funcName, "vkDestroySemaphore")) return (PFN_vkVoidFunction)vkDestroySemaphore;
|
||||
if (!strcmp(funcName, "vkCreateEvent")) return (PFN_vkVoidFunction)vkCreateEvent;
|
||||
if (!strcmp(funcName, "vkDestroyEvent")) return (PFN_vkVoidFunction)vkDestroyEvent;
|
||||
if (!strcmp(funcName, "vkGetEventStatus")) return (PFN_vkVoidFunction)vkGetEventStatus;
|
||||
if (!strcmp(funcName, "vkSetEvent")) return (PFN_vkVoidFunction)vkSetEvent;
|
||||
if (!strcmp(funcName, "vkResetEvent")) return (PFN_vkVoidFunction)vkResetEvent;
|
||||
if (!strcmp(funcName, "vkCreateQueryPool")) return (PFN_vkVoidFunction)vkCreateQueryPool;
|
||||
if (!strcmp(funcName, "vkDestroyQueryPool")) return (PFN_vkVoidFunction)vkDestroyQueryPool;
|
||||
if (!strcmp(funcName, "vkGetQueryPoolResults")) return (PFN_vkVoidFunction)vkGetQueryPoolResults;
|
||||
if (!strcmp(funcName, "vkCreateBuffer")) return (PFN_vkVoidFunction)vkCreateBuffer;
|
||||
if (!strcmp(funcName, "vkDestroyBuffer")) return (PFN_vkVoidFunction)vkDestroyBuffer;
|
||||
if (!strcmp(funcName, "vkCreateBufferView")) return (PFN_vkVoidFunction)vkCreateBufferView;
|
||||
if (!strcmp(funcName, "vkDestroyBufferView")) return (PFN_vkVoidFunction)vkDestroyBufferView;
|
||||
if (!strcmp(funcName, "vkCreateImage")) return (PFN_vkVoidFunction)vkCreateImage;
|
||||
if (!strcmp(funcName, "vkDestroyImage")) return (PFN_vkVoidFunction)vkDestroyImage;
|
||||
if (!strcmp(funcName, "vkGetImageSubresourceLayout")) return (PFN_vkVoidFunction)vkGetImageSubresourceLayout;
|
||||
if (!strcmp(funcName, "vkCreateImageView")) return (PFN_vkVoidFunction)vkCreateImageView;
|
||||
if (!strcmp(funcName, "vkDestroyImageView")) return (PFN_vkVoidFunction)vkDestroyImageView;
|
||||
if (!strcmp(funcName, "vkCreateShaderModule")) return (PFN_vkVoidFunction)vkCreateShaderModule;
|
||||
if (!strcmp(funcName, "vkDestroyShaderModule")) return (PFN_vkVoidFunction)vkDestroyShaderModule;
|
||||
if (!strcmp(funcName, "vkCreatePipelineCache")) return (PFN_vkVoidFunction)vkCreatePipelineCache;
|
||||
if (!strcmp(funcName, "vkDestroyPipelineCache")) return (PFN_vkVoidFunction)vkDestroyPipelineCache;
|
||||
if (!strcmp(funcName, "vkGetPipelineCacheData")) return (PFN_vkVoidFunction)vkGetPipelineCacheData;
|
||||
if (!strcmp(funcName, "vkMergePipelineCaches")) return (PFN_vkVoidFunction)vkMergePipelineCaches;
|
||||
if (!strcmp(funcName, "vkCreateGraphicsPipelines")) return (PFN_vkVoidFunction)vkCreateGraphicsPipelines;
|
||||
if (!strcmp(funcName, "vkCreateComputePipelines")) return (PFN_vkVoidFunction)vkCreateComputePipelines;
|
||||
if (!strcmp(funcName, "vkDestroyPipeline")) return (PFN_vkVoidFunction)vkDestroyPipeline;
|
||||
if (!strcmp(funcName, "vkCreatePipelineLayout")) return (PFN_vkVoidFunction)vkCreatePipelineLayout;
|
||||
if (!strcmp(funcName, "vkDestroyPipelineLayout")) return (PFN_vkVoidFunction)vkDestroyPipelineLayout;
|
||||
if (!strcmp(funcName, "vkCreateSampler")) return (PFN_vkVoidFunction)vkCreateSampler;
|
||||
if (!strcmp(funcName, "vkDestroySampler")) return (PFN_vkVoidFunction)vkDestroySampler;
|
||||
if (!strcmp(funcName, "vkCreateDescriptorSetLayout")) return (PFN_vkVoidFunction)vkCreateDescriptorSetLayout;
|
||||
if (!strcmp(funcName, "vkDestroyDescriptorSetLayout")) return (PFN_vkVoidFunction)vkDestroyDescriptorSetLayout;
|
||||
if (!strcmp(funcName, "vkCreateDescriptorPool")) return (PFN_vkVoidFunction)vkCreateDescriptorPool;
|
||||
if (!strcmp(funcName, "vkDestroyDescriptorPool")) return (PFN_vkVoidFunction)vkDestroyDescriptorPool;
|
||||
if (!strcmp(funcName, "vkResetDescriptorPool")) return (PFN_vkVoidFunction)vkResetDescriptorPool;
|
||||
if (!strcmp(funcName, "vkAllocateDescriptorSets")) return (PFN_vkVoidFunction)vkAllocateDescriptorSets;
|
||||
if (!strcmp(funcName, "vkFreeDescriptorSets")) return (PFN_vkVoidFunction)vkFreeDescriptorSets;
|
||||
if (!strcmp(funcName, "vkUpdateDescriptorSets")) return (PFN_vkVoidFunction)vkUpdateDescriptorSets;
|
||||
if (!strcmp(funcName, "vkCreateFramebuffer")) return (PFN_vkVoidFunction)vkCreateFramebuffer;
|
||||
if (!strcmp(funcName, "vkDestroyFramebuffer")) return (PFN_vkVoidFunction)vkDestroyFramebuffer;
|
||||
if (!strcmp(funcName, "vkCreateRenderPass")) return (PFN_vkVoidFunction)vkCreateRenderPass;
|
||||
if (!strcmp(funcName, "vkDestroyRenderPass")) return (PFN_vkVoidFunction)vkDestroyRenderPass;
|
||||
if (!strcmp(funcName, "vkGetRenderAreaGranularity")) return (PFN_vkVoidFunction)vkGetRenderAreaGranularity;
|
||||
if (!strcmp(funcName, "vkCreateCommandPool")) return (PFN_vkVoidFunction)vkCreateCommandPool;
|
||||
if (!strcmp(funcName, "vkDestroyCommandPool")) return (PFN_vkVoidFunction)vkDestroyCommandPool;
|
||||
if (!strcmp(funcName, "vkResetCommandPool")) return (PFN_vkVoidFunction)vkResetCommandPool;
|
||||
if (!strcmp(funcName, "vkAllocateCommandBuffers")) return (PFN_vkVoidFunction)vkAllocateCommandBuffers;
|
||||
if (!strcmp(funcName, "vkFreeCommandBuffers")) return (PFN_vkVoidFunction)vkFreeCommandBuffers;
|
||||
if (!strcmp(funcName, "vkBeginCommandBuffer")) return (PFN_vkVoidFunction)vkBeginCommandBuffer;
|
||||
if (!strcmp(funcName, "vkEndCommandBuffer")) return (PFN_vkVoidFunction)vkEndCommandBuffer;
|
||||
if (!strcmp(funcName, "vkResetCommandBuffer")) return (PFN_vkVoidFunction)vkResetCommandBuffer;
|
||||
if (!strcmp(funcName, "vkCmdBindPipeline")) return (PFN_vkVoidFunction)vkCmdBindPipeline;
|
||||
if (!strcmp(funcName, "vkCmdBindDescriptorSets")) return (PFN_vkVoidFunction)vkCmdBindDescriptorSets;
|
||||
if (!strcmp(funcName, "vkCmdBindVertexBuffers")) return (PFN_vkVoidFunction)vkCmdBindVertexBuffers;
|
||||
if (!strcmp(funcName, "vkCmdBindIndexBuffer")) return (PFN_vkVoidFunction)vkCmdBindIndexBuffer;
|
||||
if (!strcmp(funcName, "vkCmdSetViewport")) return (PFN_vkVoidFunction)vkCmdSetViewport;
|
||||
if (!strcmp(funcName, "vkCmdSetScissor")) return (PFN_vkVoidFunction)vkCmdSetScissor;
|
||||
if (!strcmp(funcName, "vkCmdSetLineWidth")) return (PFN_vkVoidFunction)vkCmdSetLineWidth;
|
||||
if (!strcmp(funcName, "vkCmdSetDepthBias")) return (PFN_vkVoidFunction)vkCmdSetDepthBias;
|
||||
if (!strcmp(funcName, "vkCmdSetBlendConstants")) return (PFN_vkVoidFunction)vkCmdSetBlendConstants;
|
||||
if (!strcmp(funcName, "vkCmdSetDepthBounds")) return (PFN_vkVoidFunction)vkCmdSetDepthBounds;
|
||||
if (!strcmp(funcName, "vkCmdSetStencilCompareMask")) return (PFN_vkVoidFunction)vkCmdSetStencilCompareMask;
|
||||
if (!strcmp(funcName, "vkCmdSetStencilWriteMask")) return (PFN_vkVoidFunction)vkCmdSetStencilWriteMask;
|
||||
if (!strcmp(funcName, "vkCmdSetStencilReference")) return (PFN_vkVoidFunction)vkCmdSetStencilReference;
|
||||
if (!strcmp(funcName, "vkCmdDraw")) return (PFN_vkVoidFunction)vkCmdDraw;
|
||||
if (!strcmp(funcName, "vkCmdDrawIndexed")) return (PFN_vkVoidFunction)vkCmdDrawIndexed;
|
||||
if (!strcmp(funcName, "vkCmdDrawIndirect")) return (PFN_vkVoidFunction)vkCmdDrawIndirect;
|
||||
if (!strcmp(funcName, "vkCmdDrawIndexedIndirect")) return (PFN_vkVoidFunction)vkCmdDrawIndexedIndirect;
|
||||
if (!strcmp(funcName, "vkCmdDispatch")) return (PFN_vkVoidFunction)vkCmdDispatch;
|
||||
if (!strcmp(funcName, "vkCmdDispatchIndirect")) return (PFN_vkVoidFunction)vkCmdDispatchIndirect;
|
||||
if (!strcmp(funcName, "vkCmdCopyBuffer")) return (PFN_vkVoidFunction)vkCmdCopyBuffer;
|
||||
if (!strcmp(funcName, "vkCmdCopyImage")) return (PFN_vkVoidFunction)vkCmdCopyImage;
|
||||
if (!strcmp(funcName, "vkCmdBlitImage")) return (PFN_vkVoidFunction)vkCmdBlitImage;
|
||||
if (!strcmp(funcName, "vkCmdCopyBufferToImage")) return (PFN_vkVoidFunction)vkCmdCopyBufferToImage;
|
||||
if (!strcmp(funcName, "vkCmdCopyImageToBuffer")) return (PFN_vkVoidFunction)vkCmdCopyImageToBuffer;
|
||||
if (!strcmp(funcName, "vkCmdUpdateBuffer")) return (PFN_vkVoidFunction)vkCmdUpdateBuffer;
|
||||
if (!strcmp(funcName, "vkCmdFillBuffer")) return (PFN_vkVoidFunction)vkCmdFillBuffer;
|
||||
if (!strcmp(funcName, "vkCmdClearColorImage")) return (PFN_vkVoidFunction)vkCmdClearColorImage;
|
||||
if (!strcmp(funcName, "vkCmdClearDepthStencilImage")) return (PFN_vkVoidFunction)vkCmdClearDepthStencilImage;
|
||||
if (!strcmp(funcName, "vkCmdClearAttachments")) return (PFN_vkVoidFunction)vkCmdClearAttachments;
|
||||
if (!strcmp(funcName, "vkCmdResolveImage")) return (PFN_vkVoidFunction)vkCmdResolveImage;
|
||||
if (!strcmp(funcName, "vkCmdSetEvent")) return (PFN_vkVoidFunction)vkCmdSetEvent;
|
||||
if (!strcmp(funcName, "vkCmdResetEvent")) return (PFN_vkVoidFunction)vkCmdResetEvent;
|
||||
if (!strcmp(funcName, "vkCmdWaitEvents")) return (PFN_vkVoidFunction)vkCmdWaitEvents;
|
||||
if (!strcmp(funcName, "vkCmdPipelineBarrier")) return (PFN_vkVoidFunction)vkCmdPipelineBarrier;
|
||||
if (!strcmp(funcName, "vkCmdBeginQuery")) return (PFN_vkVoidFunction)vkCmdBeginQuery;
|
||||
if (!strcmp(funcName, "vkCmdEndQuery")) return (PFN_vkVoidFunction)vkCmdEndQuery;
|
||||
if (!strcmp(funcName, "vkCmdResetQueryPool")) return (PFN_vkVoidFunction)vkCmdResetQueryPool;
|
||||
if (!strcmp(funcName, "vkCmdWriteTimestamp")) return (PFN_vkVoidFunction)vkCmdWriteTimestamp;
|
||||
if (!strcmp(funcName, "vkCmdCopyQueryPoolResults")) return (PFN_vkVoidFunction)vkCmdCopyQueryPoolResults;
|
||||
if (!strcmp(funcName, "vkCmdPushConstants")) return (PFN_vkVoidFunction)vkCmdPushConstants;
|
||||
if (!strcmp(funcName, "vkCmdBeginRenderPass")) return (PFN_vkVoidFunction)vkCmdBeginRenderPass;
|
||||
if (!strcmp(funcName, "vkCmdNextSubpass")) return (PFN_vkVoidFunction)vkCmdNextSubpass;
|
||||
if (!strcmp(funcName, "vkCmdEndRenderPass")) return (PFN_vkVoidFunction)vkCmdEndRenderPass;
|
||||
if (!strcmp(funcName, "vkCmdExecuteCommands")) return (PFN_vkVoidFunction)vkCmdExecuteCommands;
|
||||
|
||||
// Instance extensions
|
||||
void *addr;
|
||||
if (debug_report_instance_gpa(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 (void *)vkCreateInstance;
|
||||
if (!strcmp(name, "EnumerateInstanceExtensionProperties")) return (void *)vkEnumerateInstanceExtensionProperties;
|
||||
if (!strcmp(name, "EnumerateInstanceLayerProperties")) return (void *)vkEnumerateInstanceLayerProperties;
|
||||
|
||||
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 (void *)vkGetDeviceProcAddr;
|
||||
if (!strcmp(name, "DestroyDevice")) return (void *)vkDestroyDevice;
|
||||
if (!strcmp(name, "GetDeviceQueue")) return (void *)vkGetDeviceQueue;
|
||||
if (!strcmp(name, "AllocateCommandBuffers")) return (void *)vkAllocateCommandBuffers;
|
||||
|
||||
return NULL;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,490 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* Copyright (c) 2014-2017 The Khronos Group Inc.
|
||||
* Copyright (c) 2014-2017 Valve Corporation
|
||||
* Copyright (c) 2014-2017 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>
|
||||
*
|
||||
*/
|
||||
|
||||
#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_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;
|
||||
|
||||
struct VkStructureHeader {
|
||||
VkStructureType sType;
|
||||
const void *pNext;
|
||||
};
|
||||
|
||||
// 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_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];
|
||||
} pre_instance_functions;
|
||||
};
|
||||
|
||||
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 void(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;
|
||||
|
||||
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
|
||||
|
||||
// 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 VkPhysicalDeviceGroupPropertiesKHX **phys_dev_groups_term;
|
||||
uint32_t phys_dev_group_count_tramp;
|
||||
struct VkPhysicalDeviceGroupPropertiesKHX **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;
|
||||
|
||||
// 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_callbacks;
|
||||
VkDebugReportCallbackCreateInfoEXT *tmp_dbg_create_infos;
|
||||
VkDebugReportCallbackEXT *tmp_callbacks;
|
||||
|
||||
VkAllocationCallbacks alloc_callbacks;
|
||||
|
||||
bool wsi_surface_enabled;
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
bool wsi_win32_surface_enabled;
|
||||
#endif
|
||||
#ifdef VK_USE_PLATFORM_MIR_KHR
|
||||
bool wsi_mir_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
|
||||
bool wsi_display_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 loader_validate_layers(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(const 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);
|
||||
VkResult loader_copy_layer_properties(const struct loader_instance *inst, struct loader_layer_properties *dst,
|
||||
struct loader_layer_properties *src);
|
||||
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 loader_destroy_layer_list(const struct loader_instance *inst, struct loader_device *device,
|
||||
struct loader_layer_list *layer_list);
|
||||
void loader_delete_layer_properties(const struct loader_instance *inst, struct loader_layer_list *layer_list);
|
||||
bool loader_find_layer_name_array(const char *name, uint32_t layer_count, const char layer_list[][VK_MAX_EXTENSION_NAME_SIZE]);
|
||||
VkResult loader_add_to_layer_list(const struct loader_instance *inst, struct loader_layer_list *list, uint32_t prop_list_count,
|
||||
const struct loader_layer_properties *props);
|
||||
void loader_find_layer_name_add_list(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 loader_layer_scan(const struct loader_instance *inst, struct loader_layer_list *instance_layers);
|
||||
void loader_implicit_layer_scan(const struct loader_instance *inst, struct loader_layer_list *instance_layers);
|
||||
bool loader_is_implicit_layer_enabled(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 loader_deactivate_layers(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 loader_enable_instance_layers(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 loader_activate_instance_layer_extensions(struct loader_instance *inst, VkInstance created_inst);
|
||||
|
||||
VkResult loader_create_device_chain(const struct loader_physical_device_tramp *pd, const VkDeviceCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, const struct loader_instance *inst,
|
||||
struct loader_device *dev);
|
||||
|
||||
VkResult loader_validate_device_extensions(struct loader_physical_device_tramp *phys_dev,
|
||||
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
|
|
@ -1,2 +0,0 @@
|
|||
/* #undef HAVE_SECURE_GETENV */
|
||||
/* #undef HAVE___SECURE_GETENV */
|
|
@ -1,97 +0,0 @@
|
|||
|
||||
/**
|
||||
* `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);
|
||||
case 2:
|
||||
k ^= (tail[1] << 8);
|
||||
|
||||
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;
|
||||
}
|
|
@ -1,52 +0,0 @@
|
|||
|
||||
/**
|
||||
* `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
|
File diff suppressed because it is too large
Load Diff
|
@ -1,41 +0,0 @@
|
|||
group("third_party")
|
||||
project("vulkan-loader")
|
||||
uuid("07d77359-1618-43e6-8a4a-0ee9ddc5fa6a")
|
||||
kind("StaticLib")
|
||||
language("C")
|
||||
|
||||
defines({
|
||||
"_LIB",
|
||||
"API_NAME=\"vulkan\"",
|
||||
})
|
||||
removedefines({
|
||||
"_UNICODE",
|
||||
"UNICODE",
|
||||
})
|
||||
includedirs({
|
||||
".",
|
||||
})
|
||||
recursive_platform_files()
|
||||
|
||||
-- Included elsewhere
|
||||
removefiles("vk_loader_extensions.c")
|
||||
|
||||
filter("platforms:Windows")
|
||||
warnings("Off") -- Too many warnings.
|
||||
characterset("MBCS")
|
||||
defines({
|
||||
"VK_USE_PLATFORM_WIN32_KHR",
|
||||
})
|
||||
links({
|
||||
"Cfgmgr32"
|
||||
})
|
||||
filter("platforms:not Windows")
|
||||
removefiles("dirent_on_windows.c")
|
||||
filter("platforms:Linux")
|
||||
defines({
|
||||
"VK_USE_PLATFORM_XCB_KHR",
|
||||
[[SYSCONFDIR="\"/etc\""]],
|
||||
[[FALLBACK_CONFIG_DIRS="\"/etc/xdg\""]],
|
||||
[[DATADIR="\"/usr/share\""]],
|
||||
[[FALLBACK_DATA_DIRS="\"/usr/share:/usr/local/share\""]],
|
||||
})
|
File diff suppressed because it is too large
Load Diff
|
@ -1,819 +0,0 @@
|
|||
/*
|
||||
* 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)
|
|
@ -1,873 +0,0 @@
|
|||
#
|
||||
# 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
|
|
@ -1,883 +0,0 @@
|
|||
;
|
||||
; 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
|
File diff suppressed because it is too large
Load Diff
|
@ -1,342 +0,0 @@
|
|||
// *** 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_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(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_vkGetDeviceProcAddr gpa, 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);
|
||||
|
||||
// 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;
|
||||
|
||||
// ---- 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;
|
||||
|
||||
// ---- 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_mir_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_MIR_KHR
|
||||
PFN_vkCreateMirSurfaceKHR CreateMirSurfaceKHR;
|
||||
#endif // VK_USE_PLATFORM_MIR_KHR
|
||||
#ifdef VK_USE_PLATFORM_MIR_KHR
|
||||
PFN_vkGetPhysicalDeviceMirPresentationSupportKHR GetPhysicalDeviceMirPresentationSupportKHR;
|
||||
#endif // VK_USE_PLATFORM_MIR_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_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_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_NV_external_memory_capabilities extension commands
|
||||
PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV GetPhysicalDeviceExternalImageFormatPropertiesNV;
|
||||
|
||||
// ---- VK_KHX_device_group extension commands
|
||||
PFN_vkGetDeviceGroupSurfacePresentModesKHX GetDeviceGroupSurfacePresentModesKHX;
|
||||
PFN_vkGetPhysicalDevicePresentRectanglesKHX GetPhysicalDevicePresentRectanglesKHX;
|
||||
|
||||
// ---- VK_NN_vi_surface extension commands
|
||||
#ifdef VK_USE_PLATFORM_VI_NN
|
||||
PFN_vkCreateViSurfaceNN CreateViSurfaceNN;
|
||||
#endif // VK_USE_PLATFORM_VI_NN
|
||||
|
||||
// ---- VK_KHX_device_group_creation extension commands
|
||||
PFN_vkEnumeratePhysicalDeviceGroupsKHX EnumeratePhysicalDeviceGroupsKHX;
|
||||
|
||||
// ---- 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_sample_locations extension commands
|
||||
PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT GetPhysicalDeviceMultisamplePropertiesEXT;
|
||||
};
|
||||
|
||||
union loader_instance_extension_enables {
|
||||
struct {
|
||||
uint8_t khr_get_physical_device_properties2 : 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 nv_external_memory_capabilities : 1;
|
||||
uint8_t nn_vi_surface : 1;
|
||||
uint8_t khx_device_group_creation : 1;
|
||||
uint8_t ext_direct_mode_display : 1;
|
||||
uint8_t ext_acquire_xlib_display : 1;
|
||||
uint8_t ext_display_surface_counter : 1;
|
||||
uint8_t mvk_ios_surface : 1;
|
||||
uint8_t mvk_macos_surface : 1;
|
||||
};
|
||||
uint64_t padding[4];
|
||||
};
|
||||
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* 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 callback functions
|
||||
typedef struct VkLayerDbgFunctionNode_ {
|
||||
VkDebugReportCallbackEXT msgCallback;
|
||||
PFN_vkDebugReportCallbackEXT pfnMsgCallback;
|
||||
VkFlags msgFlags;
|
||||
void *pUserData;
|
||||
struct VkLayerDbgFunctionNode_ *pNext;
|
||||
} VkLayerDbgFunctionNode;
|
|
@ -1,359 +0,0 @@
|
|||
/*
|
||||
*
|
||||
* 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__)
|
||||
/* Linux-specific common code: */
|
||||
|
||||
// Headers:
|
||||
//#define _GNU_SOURCE 1
|
||||
// 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_ELAYERCONF_DIR "explicit_layer.d"
|
||||
#define VULKAN_ILAYERCONF_DIR "implicit_layer.d"
|
||||
#define VULKAN_LAYER_DIR "layer"
|
||||
|
||||
#define DEFAULT_VK_DRIVERS_INFO ""
|
||||
#define DEFAULT_VK_ELAYERS_INFO ""
|
||||
#define DEFAULT_VK_ILAYERS_INFO ""
|
||||
|
||||
#define DEFAULT_VK_DRIVERS_PATH ""
|
||||
#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 RELATIVE_VK_DRIVERS_INFO VULKAN_DIR VULKAN_ICDCONF_DIR
|
||||
#define RELATIVE_VK_ELAYERS_INFO VULKAN_DIR VULKAN_ELAYERCONF_DIR
|
||||
#define RELATIVE_VK_ILAYERS_INFO VULKAN_DIR VULKAN_ILAYERCONF_DIR
|
||||
|
||||
// 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 DEFAULT_VK_DRIVERS_INFO "SOFTWARE\\Khronos\\" API_NAME "\\Drivers"
|
||||
#define DEFAULT_VK_DRIVERS_PATH ""
|
||||
#define DEFAULT_VK_ELAYERS_INFO "SOFTWARE\\Khronos\\" API_NAME "\\ExplicitLayers"
|
||||
#define DEFAULT_VK_ILAYERS_INFO "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 RELATIVE_VK_DRIVERS_INFO ""
|
||||
#define RELATIVE_VK_ELAYERS_INFO ""
|
||||
#define RELATIVE_VK_ILAYERS_INFO ""
|
||||
#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) { return !PathIsRelative(path); }
|
||||
|
||||
// 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 && PathFileExists(lib_path)) {
|
||||
// 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 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, 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; }
|
File diff suppressed because it is too large
Load Diff
|
@ -1,145 +0,0 @@
|
|||
/*
|
||||
* 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_MIR_KHR
|
||||
VkIcdSurfaceMir mir_surf;
|
||||
#endif // VK_USE_PLATFORM_MIR_KHR
|
||||
#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
|
||||
VkIcdSurfaceDisplay display_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_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);
|
||||
|
||||
#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_MIR_KHR
|
||||
VKAPI_ATTR VkResult VKAPI_CALL terminator_CreateMirSurfaceKHR(VkInstance instance, const VkMirSurfaceCreateInfoKHR *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface);
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL terminator_GetPhysicalDeviceMirPresentationSupportKHR(VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex,
|
||||
MirConnection *connection);
|
||||
#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
|
||||
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);
|
||||
|
||||
#endif // WSI_H
|
Loading…
Reference in New Issue