Updated to add logistic regression godot example
This commit is contained in:
parent
63426281fe
commit
9308b83af4
50 changed files with 101078 additions and 0 deletions
2
examples/godot_logistic_regression/.gitignore
vendored
Normal file
2
examples/godot_logistic_regression/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
.import
|
||||||
|
godot_engine/godot
|
||||||
3
examples/godot_logistic_regression/custom_module/.gitignore
vendored
Normal file
3
examples/godot_logistic_regression/custom_module/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
vulkan-kompute
|
||||||
|
lib
|
||||||
|
godot
|
||||||
66
examples/godot_logistic_regression/custom_module/README.md
Normal file
66
examples/godot_logistic_regression/custom_module/README.md
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
# Vulkan Kompute Godot Example
|
||||||
|
|
||||||
|
## Set Up Dependencies
|
||||||
|
|
||||||
|
### Vulkan
|
||||||
|
|
||||||
|
You will need the Vulkan SDK, in this case we use version `1.2.148.1`, which you can get at the official site https://vulkan.lunarg.com/sdk/home#windows
|
||||||
|
|
||||||
|
This will have the following contents that will be required later on:
|
||||||
|
|
||||||
|
* The VulkanSDK static library `vulkan-1`
|
||||||
|
|
||||||
|
### Kompute
|
||||||
|
|
||||||
|
We will be using v0.3.1 of Kompute, and similar to above we will need the built static library, but in this case we will build it.
|
||||||
|
|
||||||
|
We can start by cloning the repository on the v0.3.1 branch:
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone --branch v0.3.1 https://github.com/EthicalML/vulkan-kompute/
|
||||||
|
```
|
||||||
|
|
||||||
|
You will be able to use cmake to generate the build files for your platform.
|
||||||
|
|
||||||
|
```
|
||||||
|
cmake vulkan-kompute/. -Bvulkan-kompute/build
|
||||||
|
```
|
||||||
|
|
||||||
|
You need to make sure that the build is configured with the same flags required for godot, for example, in windows you will need:
|
||||||
|
|
||||||
|
* Release build
|
||||||
|
* Configuration type: static library
|
||||||
|
* Runtime lib: Multi-threaded / multi-threaded debug
|
||||||
|
|
||||||
|
Now you should see the library built under `build/src/Release`
|
||||||
|
|
||||||
|
## Building Godot
|
||||||
|
|
||||||
|
Now to build godot you will need to set up a couple of things for the Scons file to work - namely setting up the following:
|
||||||
|
|
||||||
|
* Copy the `vulkan-1` library from your vulkan sdk folder to `lib/vulkan-1.lib`
|
||||||
|
* Copy the `kompute.lib` library from the Kompute build to `lib/kompute.lib`
|
||||||
|
* Make sure the versions above match as we provide the headers in the `include` folder - if you used different versions make sure these match as well
|
||||||
|
|
||||||
|
### Clone godot repository
|
||||||
|
|
||||||
|
Now we can clone the godot repository - it must be on a separate repository, so you can use the parent directory if you are on the Kompute repo.
|
||||||
|
|
||||||
|
```
|
||||||
|
cd ../../godot_engine
|
||||||
|
|
||||||
|
git clone --branch 3.2.3-stable https://github.com/godotengine/godot
|
||||||
|
|
||||||
|
cd godot/
|
||||||
|
```
|
||||||
|
|
||||||
|
And now we can build against our module
|
||||||
|
|
||||||
|
```
|
||||||
|
wscons -j16 custom_modules=../../custom_module/ platform=windows target=release_debug
|
||||||
|
```
|
||||||
|
|
||||||
|
Once we have built it we can now run the generated godot engine in the `bin/` folder, and we will be able to access the custom module from anywhere in the project, as well as creating new nodes from the user interface.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
/* summator.cpp */
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "KomputeSummatorNode.h"
|
||||||
|
|
||||||
|
KomputeSummatorNode::KomputeSummatorNode() {
|
||||||
|
this->_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KomputeSummatorNode::add(float value) {
|
||||||
|
// Set the new data in the local device
|
||||||
|
this->mSecondaryTensor->setData({value});
|
||||||
|
// Execute recorded sequence
|
||||||
|
if (std::shared_ptr<kp::Sequence> sq = this->mSequence.lock()) {
|
||||||
|
sq->eval();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw std::runtime_error("Sequence pointer no longer available");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KomputeSummatorNode::reset() {
|
||||||
|
}
|
||||||
|
|
||||||
|
float KomputeSummatorNode::get_total() const {
|
||||||
|
return this->mPrimaryTensor->data()[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
void KomputeSummatorNode::_init() {
|
||||||
|
std::cout << "CALLING INIT" << std::endl;
|
||||||
|
this->mPrimaryTensor = this->mManager.buildTensor({ 0.0 });
|
||||||
|
this->mSecondaryTensor = this->mManager.buildTensor({ 0.0 });
|
||||||
|
this->mSequence = this->mManager.getOrCreateManagedSequence("AdditionSeq");
|
||||||
|
|
||||||
|
// We now record the steps in the sequence
|
||||||
|
if (std::shared_ptr<kp::Sequence> sq = this->mSequence.lock())
|
||||||
|
{
|
||||||
|
|
||||||
|
std::string shader(R"(
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
layout (local_size_x = 1) in;
|
||||||
|
|
||||||
|
layout(set = 0, binding = 0) buffer a { float pa[]; };
|
||||||
|
layout(set = 0, binding = 1) buffer b { float pb[]; };
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
uint index = gl_GlobalInvocationID.x;
|
||||||
|
pa[index] = pb[index] + pa[index];
|
||||||
|
}
|
||||||
|
)");
|
||||||
|
|
||||||
|
sq->begin();
|
||||||
|
|
||||||
|
// First we ensure secondary tensor loads to GPU
|
||||||
|
// No need to sync the primary tensor as it should not be changed
|
||||||
|
sq->record<kp::OpTensorSyncDevice>(
|
||||||
|
{ this->mSecondaryTensor });
|
||||||
|
|
||||||
|
// Then we run the operation with both tensors
|
||||||
|
sq->record<kp::OpAlgoBase<>>(
|
||||||
|
{ this->mPrimaryTensor, this->mSecondaryTensor },
|
||||||
|
std::vector<char>(shader.begin(), shader.end()));
|
||||||
|
|
||||||
|
// We map the result back to local
|
||||||
|
sq->record<kp::OpTensorSyncLocal>(
|
||||||
|
{ this->mPrimaryTensor });
|
||||||
|
|
||||||
|
sq->end();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw std::runtime_error("Sequence pointer no longer available");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KomputeSummatorNode::_process(float delta) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void KomputeSummatorNode::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("_process", "delta"), &KomputeSummatorNode::_process);
|
||||||
|
ClassDB::bind_method(D_METHOD("_init"), &KomputeSummatorNode::_init);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("add", "value"), &KomputeSummatorNode::add);
|
||||||
|
ClassDB::bind_method(D_METHOD("reset"), &KomputeSummatorNode::reset);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_total"), &KomputeSummatorNode::get_total);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include "kompute/Kompute.hpp"
|
||||||
|
|
||||||
|
#include "scene/main/node.h"
|
||||||
|
|
||||||
|
class KomputeSummatorNode : public Node {
|
||||||
|
GDCLASS(KomputeSummatorNode, Node);
|
||||||
|
|
||||||
|
public:
|
||||||
|
KomputeSummatorNode();
|
||||||
|
|
||||||
|
void add(float value);
|
||||||
|
void reset();
|
||||||
|
float get_total() const;
|
||||||
|
|
||||||
|
void _process(float delta);
|
||||||
|
void _init();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
private:
|
||||||
|
kp::Manager mManager;
|
||||||
|
std::weak_ptr<kp::Sequence> mSequence;
|
||||||
|
std::shared_ptr<kp::Tensor> mPrimaryTensor;
|
||||||
|
std::shared_ptr<kp::Tensor> mSecondaryTensor;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
import os
|
||||||
|
|
||||||
|
Import('env')
|
||||||
|
|
||||||
|
dir_path = os.getcwd()
|
||||||
|
|
||||||
|
# Kompute & Vulkan header files
|
||||||
|
env.Append(CPPPATH = ['include/'])
|
||||||
|
|
||||||
|
env.add_source_files(env.modules_sources, "*.cpp")
|
||||||
|
|
||||||
|
# Kompute & Vulkan libraries
|
||||||
|
env.Append(LIBS=[
|
||||||
|
File(dir_path +'/lib/kompute.lib'),
|
||||||
|
File(dir_path +'/lib/vulkan-1.lib'),
|
||||||
|
])
|
||||||
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
def can_build(env, platform):
|
||||||
|
return True
|
||||||
|
|
||||||
|
def configure(env):
|
||||||
|
pass
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,183 @@
|
||||||
|
//
|
||||||
|
// File: vk_icd.h
|
||||||
|
//
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||||
|
* Copyright (c) 2015-2016 Valve Corporation
|
||||||
|
* Copyright (c) 2015-2016 LunarG, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef VKICD_H
|
||||||
|
#define VKICD_H
|
||||||
|
|
||||||
|
#include "vulkan.h"
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
// Loader-ICD version negotiation API. Versions add the following features:
|
||||||
|
// Version 0 - Initial. Doesn't support vk_icdGetInstanceProcAddr
|
||||||
|
// or vk_icdNegotiateLoaderICDInterfaceVersion.
|
||||||
|
// Version 1 - Add support for vk_icdGetInstanceProcAddr.
|
||||||
|
// Version 2 - Add Loader/ICD Interface version negotiation
|
||||||
|
// via vk_icdNegotiateLoaderICDInterfaceVersion.
|
||||||
|
// Version 3 - Add ICD creation/destruction of KHR_surface objects.
|
||||||
|
// Version 4 - Add unknown physical device extension qyering via
|
||||||
|
// vk_icdGetPhysicalDeviceProcAddr.
|
||||||
|
// Version 5 - Tells ICDs that the loader is now paying attention to the
|
||||||
|
// application version of Vulkan passed into the ApplicationInfo
|
||||||
|
// structure during vkCreateInstance. This will tell the ICD
|
||||||
|
// that if the loader is older, it should automatically fail a
|
||||||
|
// call for any API version > 1.0. Otherwise, the loader will
|
||||||
|
// manually determine if it can support the expected version.
|
||||||
|
#define CURRENT_LOADER_ICD_INTERFACE_VERSION 5
|
||||||
|
#define MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION 0
|
||||||
|
#define MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION 4
|
||||||
|
typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion);
|
||||||
|
|
||||||
|
// This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this
|
||||||
|
// file directly, it won't be found.
|
||||||
|
#ifndef PFN_GetPhysicalDeviceProcAddr
|
||||||
|
typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ICD must reserve space for a pointer for the loader's dispatch
|
||||||
|
* table, at the start of <each object>.
|
||||||
|
* The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define ICD_LOADER_MAGIC 0x01CDC0DE
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
uintptr_t loaderMagic;
|
||||||
|
void *loaderData;
|
||||||
|
} VK_LOADER_DATA;
|
||||||
|
|
||||||
|
static inline void set_loader_magic_value(void *pNewObject) {
|
||||||
|
VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
|
||||||
|
loader_info->loaderMagic = ICD_LOADER_MAGIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool valid_loader_magic_value(void *pNewObject) {
|
||||||
|
const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject;
|
||||||
|
return (loader_info->loaderMagic & 0xffffffff) == ICD_LOADER_MAGIC;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that
|
||||||
|
* contains the platform-specific connection and surface information.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
VK_ICD_WSI_PLATFORM_MIR,
|
||||||
|
VK_ICD_WSI_PLATFORM_WAYLAND,
|
||||||
|
VK_ICD_WSI_PLATFORM_WIN32,
|
||||||
|
VK_ICD_WSI_PLATFORM_XCB,
|
||||||
|
VK_ICD_WSI_PLATFORM_XLIB,
|
||||||
|
VK_ICD_WSI_PLATFORM_ANDROID,
|
||||||
|
VK_ICD_WSI_PLATFORM_MACOS,
|
||||||
|
VK_ICD_WSI_PLATFORM_IOS,
|
||||||
|
VK_ICD_WSI_PLATFORM_DISPLAY,
|
||||||
|
VK_ICD_WSI_PLATFORM_HEADLESS,
|
||||||
|
VK_ICD_WSI_PLATFORM_METAL,
|
||||||
|
} VkIcdWsiPlatform;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
VkIcdWsiPlatform platform;
|
||||||
|
} VkIcdSurfaceBase;
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_MIR_KHR
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
MirConnection *connection;
|
||||||
|
MirSurface *mirSurface;
|
||||||
|
} VkIcdSurfaceMir;
|
||||||
|
#endif // VK_USE_PLATFORM_MIR_KHR
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
struct wl_display *display;
|
||||||
|
struct wl_surface *surface;
|
||||||
|
} VkIcdSurfaceWayland;
|
||||||
|
#endif // VK_USE_PLATFORM_WAYLAND_KHR
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
HINSTANCE hinstance;
|
||||||
|
HWND hwnd;
|
||||||
|
} VkIcdSurfaceWin32;
|
||||||
|
#endif // VK_USE_PLATFORM_WIN32_KHR
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
xcb_connection_t *connection;
|
||||||
|
xcb_window_t window;
|
||||||
|
} VkIcdSurfaceXcb;
|
||||||
|
#endif // VK_USE_PLATFORM_XCB_KHR
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
Display *dpy;
|
||||||
|
Window window;
|
||||||
|
} VkIcdSurfaceXlib;
|
||||||
|
#endif // VK_USE_PLATFORM_XLIB_KHR
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
struct ANativeWindow *window;
|
||||||
|
} VkIcdSurfaceAndroid;
|
||||||
|
#endif // VK_USE_PLATFORM_ANDROID_KHR
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
const void *pView;
|
||||||
|
} VkIcdSurfaceMacOS;
|
||||||
|
#endif // VK_USE_PLATFORM_MACOS_MVK
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
const void *pView;
|
||||||
|
} VkIcdSurfaceIOS;
|
||||||
|
#endif // VK_USE_PLATFORM_IOS_MVK
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
VkDisplayModeKHR displayMode;
|
||||||
|
uint32_t planeIndex;
|
||||||
|
uint32_t planeStackIndex;
|
||||||
|
VkSurfaceTransformFlagBitsKHR transform;
|
||||||
|
float globalAlpha;
|
||||||
|
VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
|
||||||
|
VkExtent2D imageExtent;
|
||||||
|
} VkIcdSurfaceDisplay;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
} VkIcdSurfaceHeadless;
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_METAL_EXT
|
||||||
|
typedef struct {
|
||||||
|
VkIcdSurfaceBase base;
|
||||||
|
const CAMetalLayer *pLayer;
|
||||||
|
} VkIcdSurfaceMetal;
|
||||||
|
#endif // VK_USE_PLATFORM_METAL_EXT
|
||||||
|
|
||||||
|
#endif // VKICD_H
|
||||||
|
|
@ -0,0 +1,202 @@
|
||||||
|
//
|
||||||
|
// File: vk_layer.h
|
||||||
|
//
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||||
|
* Copyright (c) 2015-2017 Valve Corporation
|
||||||
|
* Copyright (c) 2015-2017 LunarG, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Need to define dispatch table
|
||||||
|
* Core struct can then have ptr to dispatch table at the top
|
||||||
|
* Along with object ptrs for current and next OBJ
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "vulkan.h"
|
||||||
|
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||||
|
#define VK_LAYER_EXPORT __attribute__((visibility("default")))
|
||||||
|
#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
|
||||||
|
#define VK_LAYER_EXPORT __attribute__((visibility("default")))
|
||||||
|
#else
|
||||||
|
#define VK_LAYER_EXPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MAX_NUM_UNKNOWN_EXTS 250
|
||||||
|
|
||||||
|
// Loader-Layer version negotiation API. Versions add the following features:
|
||||||
|
// Versions 0/1 - Initial. Doesn't support vk_layerGetPhysicalDeviceProcAddr
|
||||||
|
// or vk_icdNegotiateLoaderLayerInterfaceVersion.
|
||||||
|
// Version 2 - Add support for vk_layerGetPhysicalDeviceProcAddr and
|
||||||
|
// vk_icdNegotiateLoaderLayerInterfaceVersion.
|
||||||
|
#define CURRENT_LOADER_LAYER_INTERFACE_VERSION 2
|
||||||
|
#define MIN_SUPPORTED_LOADER_LAYER_INTERFACE_VERSION 1
|
||||||
|
|
||||||
|
#define VK_CURRENT_CHAIN_VERSION 1
|
||||||
|
|
||||||
|
// Typedef for use in the interfaces below
|
||||||
|
typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName);
|
||||||
|
|
||||||
|
// Version negotiation values
|
||||||
|
typedef enum VkNegotiateLayerStructType {
|
||||||
|
LAYER_NEGOTIATE_UNINTIALIZED = 0,
|
||||||
|
LAYER_NEGOTIATE_INTERFACE_STRUCT = 1,
|
||||||
|
} VkNegotiateLayerStructType;
|
||||||
|
|
||||||
|
// Version negotiation structures
|
||||||
|
typedef struct VkNegotiateLayerInterface {
|
||||||
|
VkNegotiateLayerStructType sType;
|
||||||
|
void *pNext;
|
||||||
|
uint32_t loaderLayerInterfaceVersion;
|
||||||
|
PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr;
|
||||||
|
PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr;
|
||||||
|
PFN_GetPhysicalDeviceProcAddr pfnGetPhysicalDeviceProcAddr;
|
||||||
|
} VkNegotiateLayerInterface;
|
||||||
|
|
||||||
|
// Version negotiation functions
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkNegotiateLoaderLayerInterfaceVersion)(VkNegotiateLayerInterface *pVersionStruct);
|
||||||
|
|
||||||
|
// Function prototype for unknown physical device extension command
|
||||||
|
typedef VkResult(VKAPI_PTR *PFN_PhysDevExt)(VkPhysicalDevice phys_device);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// CreateInstance and CreateDevice support structures
|
||||||
|
|
||||||
|
/* Sub type of structure for instance and device loader ext of CreateInfo.
|
||||||
|
* When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
|
||||||
|
* or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
|
||||||
|
* then VkLayerFunction indicates struct type pointed to by pNext
|
||||||
|
*/
|
||||||
|
typedef enum VkLayerFunction_ {
|
||||||
|
VK_LAYER_LINK_INFO = 0,
|
||||||
|
VK_LOADER_DATA_CALLBACK = 1,
|
||||||
|
VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2
|
||||||
|
} VkLayerFunction;
|
||||||
|
|
||||||
|
typedef struct VkLayerInstanceLink_ {
|
||||||
|
struct VkLayerInstanceLink_ *pNext;
|
||||||
|
PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
|
||||||
|
PFN_GetPhysicalDeviceProcAddr pfnNextGetPhysicalDeviceProcAddr;
|
||||||
|
} VkLayerInstanceLink;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When creating the device chain the loader needs to pass
|
||||||
|
* down information about it's device structure needed at
|
||||||
|
* the end of the chain. Passing the data via the
|
||||||
|
* VkLayerDeviceInfo avoids issues with finding the
|
||||||
|
* exact instance being used.
|
||||||
|
*/
|
||||||
|
typedef struct VkLayerDeviceInfo_ {
|
||||||
|
void *device_info;
|
||||||
|
PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
|
||||||
|
} VkLayerDeviceInfo;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance,
|
||||||
|
void *object);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device,
|
||||||
|
void *object);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkLayerCreateDevice)(VkInstance instance, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo,
|
||||||
|
const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA);
|
||||||
|
typedef void (VKAPI_PTR *PFN_vkLayerDestroyDevice)(VkDevice physicalDevice, const VkAllocationCallbacks *pAllocator, PFN_vkDestroyDevice destroyFunction);
|
||||||
|
typedef struct {
|
||||||
|
VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
|
||||||
|
const void *pNext;
|
||||||
|
VkLayerFunction function;
|
||||||
|
union {
|
||||||
|
VkLayerInstanceLink *pLayerInfo;
|
||||||
|
PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData;
|
||||||
|
struct {
|
||||||
|
PFN_vkLayerCreateDevice pfnLayerCreateDevice;
|
||||||
|
PFN_vkLayerDestroyDevice pfnLayerDestroyDevice;
|
||||||
|
} layerDevice;
|
||||||
|
} u;
|
||||||
|
} VkLayerInstanceCreateInfo;
|
||||||
|
|
||||||
|
typedef struct VkLayerDeviceLink_ {
|
||||||
|
struct VkLayerDeviceLink_ *pNext;
|
||||||
|
PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr;
|
||||||
|
PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr;
|
||||||
|
} VkLayerDeviceLink;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
|
||||||
|
const void *pNext;
|
||||||
|
VkLayerFunction function;
|
||||||
|
union {
|
||||||
|
VkLayerDeviceLink *pLayerInfo;
|
||||||
|
PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData;
|
||||||
|
} u;
|
||||||
|
} VkLayerDeviceCreateInfo;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct);
|
||||||
|
|
||||||
|
typedef enum VkChainType {
|
||||||
|
VK_CHAIN_TYPE_UNKNOWN = 0,
|
||||||
|
VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES = 1,
|
||||||
|
VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES = 2,
|
||||||
|
VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION = 3,
|
||||||
|
} VkChainType;
|
||||||
|
|
||||||
|
typedef struct VkChainHeader {
|
||||||
|
VkChainType type;
|
||||||
|
uint32_t version;
|
||||||
|
uint32_t size;
|
||||||
|
} VkChainHeader;
|
||||||
|
|
||||||
|
typedef struct VkEnumerateInstanceExtensionPropertiesChain {
|
||||||
|
VkChainHeader header;
|
||||||
|
VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceExtensionPropertiesChain *, const char *, uint32_t *,
|
||||||
|
VkExtensionProperties *);
|
||||||
|
const struct VkEnumerateInstanceExtensionPropertiesChain *pNextLink;
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
inline VkResult CallDown(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) const {
|
||||||
|
return pfnNextLayer(pNextLink, pLayerName, pPropertyCount, pProperties);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
} VkEnumerateInstanceExtensionPropertiesChain;
|
||||||
|
|
||||||
|
typedef struct VkEnumerateInstanceLayerPropertiesChain {
|
||||||
|
VkChainHeader header;
|
||||||
|
VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceLayerPropertiesChain *, uint32_t *, VkLayerProperties *);
|
||||||
|
const struct VkEnumerateInstanceLayerPropertiesChain *pNextLink;
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
inline VkResult CallDown(uint32_t *pPropertyCount, VkLayerProperties *pProperties) const {
|
||||||
|
return pfnNextLayer(pNextLink, pPropertyCount, pProperties);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
} VkEnumerateInstanceLayerPropertiesChain;
|
||||||
|
|
||||||
|
typedef struct VkEnumerateInstanceVersionChain {
|
||||||
|
VkChainHeader header;
|
||||||
|
VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceVersionChain *, uint32_t *);
|
||||||
|
const struct VkEnumerateInstanceVersionChain *pNextLink;
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
inline VkResult CallDown(uint32_t *pApiVersion) const {
|
||||||
|
return pfnNextLayer(pNextLink, pApiVersion);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
} VkEnumerateInstanceVersionChain;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,92 @@
|
||||||
|
//
|
||||||
|
// File: vk_platform.h
|
||||||
|
//
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2014-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef VK_PLATFORM_H_
|
||||||
|
#define VK_PLATFORM_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
/*
|
||||||
|
***************************************************************************************************
|
||||||
|
* Platform-specific directives and type declarations
|
||||||
|
***************************************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Platform-specific calling convention macros.
|
||||||
|
*
|
||||||
|
* Platforms should define these so that Vulkan clients call Vulkan commands
|
||||||
|
* with the same calling conventions that the Vulkan implementation expects.
|
||||||
|
*
|
||||||
|
* VKAPI_ATTR - Placed before the return type in function declarations.
|
||||||
|
* Useful for C++11 and GCC/Clang-style function attribute syntax.
|
||||||
|
* VKAPI_CALL - Placed after the return type in function declarations.
|
||||||
|
* Useful for MSVC-style calling convention syntax.
|
||||||
|
* VKAPI_PTR - Placed between the '(' and '*' in function pointer types.
|
||||||
|
*
|
||||||
|
* Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void);
|
||||||
|
* Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
|
||||||
|
*/
|
||||||
|
#if defined(_WIN32)
|
||||||
|
// On Windows, Vulkan commands use the stdcall convention
|
||||||
|
#define VKAPI_ATTR
|
||||||
|
#define VKAPI_CALL __stdcall
|
||||||
|
#define VKAPI_PTR VKAPI_CALL
|
||||||
|
#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
|
||||||
|
#error "Vulkan isn't supported for the 'armeabi' NDK ABI"
|
||||||
|
#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
|
||||||
|
// On Android 32-bit ARM targets, Vulkan functions use the "hardfloat"
|
||||||
|
// calling convention, i.e. float parameters are passed in registers. This
|
||||||
|
// is true even if the rest of the application passes floats on the stack,
|
||||||
|
// as it does by default when compiling for the armeabi-v7a NDK ABI.
|
||||||
|
#define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
|
||||||
|
#define VKAPI_CALL
|
||||||
|
#define VKAPI_PTR VKAPI_ATTR
|
||||||
|
#else
|
||||||
|
// On other platforms, use the default calling convention
|
||||||
|
#define VKAPI_ATTR
|
||||||
|
#define VKAPI_CALL
|
||||||
|
#define VKAPI_PTR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#if !defined(VK_NO_STDINT_H)
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER < 1600)
|
||||||
|
typedef signed __int8 int8_t;
|
||||||
|
typedef unsigned __int8 uint8_t;
|
||||||
|
typedef signed __int16 int16_t;
|
||||||
|
typedef unsigned __int16 uint16_t;
|
||||||
|
typedef signed __int32 int32_t;
|
||||||
|
typedef unsigned __int32 uint32_t;
|
||||||
|
typedef signed __int64 int64_t;
|
||||||
|
typedef unsigned __int64 uint64_t;
|
||||||
|
#else
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
#endif // !defined(VK_NO_STDINT_H)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // extern "C"
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
//
|
||||||
|
// File: vk_sdk_platform.h
|
||||||
|
//
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2015-2016 The Khronos Group Inc.
|
||||||
|
* Copyright (c) 2015-2016 Valve Corporation
|
||||||
|
* Copyright (c) 2015-2016 LunarG, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef VK_SDK_PLATFORM_H
|
||||||
|
#define VK_SDK_PLATFORM_H
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define NOMINMAX
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#undef inline
|
||||||
|
#define inline __inline
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/)
|
||||||
|
// C99:
|
||||||
|
// Microsoft didn't implement C99 in Visual Studio; but started adding it with
|
||||||
|
// VS2013. However, VS2013 still didn't have snprintf(). The following is a
|
||||||
|
// work-around (Note: The _CRT_SECURE_NO_WARNINGS macro must be set in the
|
||||||
|
// "CMakeLists.txt" file).
|
||||||
|
// NOTE: This is fixed in Visual Studio 2015.
|
||||||
|
#define snprintf _snprintf
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define strdup _strdup
|
||||||
|
|
||||||
|
#endif // _WIN32
|
||||||
|
|
||||||
|
// Check for noexcept support using clang, with fallback to Windows or GCC version numbers
|
||||||
|
#ifndef NOEXCEPT
|
||||||
|
#if defined(__clang__)
|
||||||
|
#if __has_feature(cxx_noexcept)
|
||||||
|
#define HAS_NOEXCEPT
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46
|
||||||
|
#define HAS_NOEXCEPT
|
||||||
|
#else
|
||||||
|
#if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026 && defined(_HAS_EXCEPTIONS) && _HAS_EXCEPTIONS
|
||||||
|
#define HAS_NOEXCEPT
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAS_NOEXCEPT
|
||||||
|
#define NOEXCEPT noexcept
|
||||||
|
#else
|
||||||
|
#define NOEXCEPT
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // VK_SDK_PLATFORM_H
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
#ifndef VULKAN_H_
|
||||||
|
#define VULKAN_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "vk_platform.h"
|
||||||
|
#include "vulkan_core.h"
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||||
|
#include "vulkan_android.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_FUCHSIA
|
||||||
|
#include <zircon/types.h>
|
||||||
|
#include "vulkan_fuchsia.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||||
|
#include "vulkan_ios.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||||
|
#include "vulkan_macos.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_METAL_EXT
|
||||||
|
#include "vulkan_metal.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_VI_NN
|
||||||
|
#include "vulkan_vi.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||||
|
#include <wayland-client.h>
|
||||||
|
#include "vulkan_wayland.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||||
|
#include <windows.h>
|
||||||
|
#include "vulkan_win32.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||||
|
#include <xcb/xcb.h>
|
||||||
|
#include "vulkan_xcb.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include "vulkan_xlib.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/extensions/Xrandr.h>
|
||||||
|
#include "vulkan_xlib_xrandr.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef VK_USE_PLATFORM_GGP
|
||||||
|
#include <ggp_c/vulkan_types.h>
|
||||||
|
#include "vulkan_ggp.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef VK_ENABLE_BETA_EXTENSIONS
|
||||||
|
#include "vulkan_beta.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // VULKAN_H_
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,122 @@
|
||||||
|
#ifndef VULKAN_ANDROID_H_
|
||||||
|
#define VULKAN_ANDROID_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_android_surface 1
|
||||||
|
struct ANativeWindow;
|
||||||
|
#define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6
|
||||||
|
#define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface"
|
||||||
|
typedef VkFlags VkAndroidSurfaceCreateFlagsKHR;
|
||||||
|
typedef struct VkAndroidSurfaceCreateInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkAndroidSurfaceCreateFlagsKHR flags;
|
||||||
|
struct ANativeWindow* window;
|
||||||
|
} VkAndroidSurfaceCreateInfoKHR;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_ANDROID_external_memory_android_hardware_buffer 1
|
||||||
|
struct AHardwareBuffer;
|
||||||
|
#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 3
|
||||||
|
#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer"
|
||||||
|
typedef struct VkAndroidHardwareBufferUsageANDROID {
|
||||||
|
VkStructureType sType;
|
||||||
|
void* pNext;
|
||||||
|
uint64_t androidHardwareBufferUsage;
|
||||||
|
} VkAndroidHardwareBufferUsageANDROID;
|
||||||
|
|
||||||
|
typedef struct VkAndroidHardwareBufferPropertiesANDROID {
|
||||||
|
VkStructureType sType;
|
||||||
|
void* pNext;
|
||||||
|
VkDeviceSize allocationSize;
|
||||||
|
uint32_t memoryTypeBits;
|
||||||
|
} VkAndroidHardwareBufferPropertiesANDROID;
|
||||||
|
|
||||||
|
typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID {
|
||||||
|
VkStructureType sType;
|
||||||
|
void* pNext;
|
||||||
|
VkFormat format;
|
||||||
|
uint64_t externalFormat;
|
||||||
|
VkFormatFeatureFlags formatFeatures;
|
||||||
|
VkComponentMapping samplerYcbcrConversionComponents;
|
||||||
|
VkSamplerYcbcrModelConversion suggestedYcbcrModel;
|
||||||
|
VkSamplerYcbcrRange suggestedYcbcrRange;
|
||||||
|
VkChromaLocation suggestedXChromaOffset;
|
||||||
|
VkChromaLocation suggestedYChromaOffset;
|
||||||
|
} VkAndroidHardwareBufferFormatPropertiesANDROID;
|
||||||
|
|
||||||
|
typedef struct VkImportAndroidHardwareBufferInfoANDROID {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
struct AHardwareBuffer* buffer;
|
||||||
|
} VkImportAndroidHardwareBufferInfoANDROID;
|
||||||
|
|
||||||
|
typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkDeviceMemory memory;
|
||||||
|
} VkMemoryGetAndroidHardwareBufferInfoANDROID;
|
||||||
|
|
||||||
|
typedef struct VkExternalFormatANDROID {
|
||||||
|
VkStructureType sType;
|
||||||
|
void* pNext;
|
||||||
|
uint64_t externalFormat;
|
||||||
|
} VkExternalFormatANDROID;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID(
|
||||||
|
VkDevice device,
|
||||||
|
const struct AHardwareBuffer* buffer,
|
||||||
|
VkAndroidHardwareBufferPropertiesANDROID* pProperties);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(
|
||||||
|
VkDevice device,
|
||||||
|
const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
|
||||||
|
struct AHardwareBuffer** pBuffer);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,438 @@
|
||||||
|
#ifndef VULKAN_BETA_H_
|
||||||
|
#define VULKAN_BETA_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_deferred_host_operations 1
|
||||||
|
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeferredOperationKHR)
|
||||||
|
#define VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION 2
|
||||||
|
#define VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME "VK_KHR_deferred_host_operations"
|
||||||
|
typedef struct VkDeferredOperationInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkDeferredOperationKHR operationHandle;
|
||||||
|
} VkDeferredOperationInfoKHR;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateDeferredOperationKHR)(VkDevice device, const VkAllocationCallbacks* pAllocator, VkDeferredOperationKHR* pDeferredOperation);
|
||||||
|
typedef void (VKAPI_PTR *PFN_vkDestroyDeferredOperationKHR)(VkDevice device, VkDeferredOperationKHR operation, const VkAllocationCallbacks* pAllocator);
|
||||||
|
typedef uint32_t (VKAPI_PTR *PFN_vkGetDeferredOperationMaxConcurrencyKHR)(VkDevice device, VkDeferredOperationKHR operation);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetDeferredOperationResultKHR)(VkDevice device, VkDeferredOperationKHR operation);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkDeferredOperationJoinKHR)(VkDevice device, VkDeferredOperationKHR operation);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDeferredOperationKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkDeferredOperationKHR* pDeferredOperation);
|
||||||
|
|
||||||
|
VKAPI_ATTR void VKAPI_CALL vkDestroyDeferredOperationKHR(
|
||||||
|
VkDevice device,
|
||||||
|
VkDeferredOperationKHR operation,
|
||||||
|
const VkAllocationCallbacks* pAllocator);
|
||||||
|
|
||||||
|
VKAPI_ATTR uint32_t VKAPI_CALL vkGetDeferredOperationMaxConcurrencyKHR(
|
||||||
|
VkDevice device,
|
||||||
|
VkDeferredOperationKHR operation);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetDeferredOperationResultKHR(
|
||||||
|
VkDevice device,
|
||||||
|
VkDeferredOperationKHR operation);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkDeferredOperationJoinKHR(
|
||||||
|
VkDevice device,
|
||||||
|
VkDeferredOperationKHR operation);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_pipeline_library 1
|
||||||
|
#define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1
|
||||||
|
#define VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME "VK_KHR_pipeline_library"
|
||||||
|
typedef struct VkPipelineLibraryCreateInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
uint32_t libraryCount;
|
||||||
|
const VkPipeline* pLibraries;
|
||||||
|
} VkPipelineLibraryCreateInfoKHR;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_ray_tracing 1
|
||||||
|
#define VK_KHR_RAY_TRACING_SPEC_VERSION 8
|
||||||
|
#define VK_KHR_RAY_TRACING_EXTENSION_NAME "VK_KHR_ray_tracing"
|
||||||
|
|
||||||
|
typedef enum VkAccelerationStructureBuildTypeKHR {
|
||||||
|
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0,
|
||||||
|
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1,
|
||||||
|
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2,
|
||||||
|
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||||
|
} VkAccelerationStructureBuildTypeKHR;
|
||||||
|
typedef union VkDeviceOrHostAddressKHR {
|
||||||
|
VkDeviceAddress deviceAddress;
|
||||||
|
void* hostAddress;
|
||||||
|
} VkDeviceOrHostAddressKHR;
|
||||||
|
|
||||||
|
typedef union VkDeviceOrHostAddressConstKHR {
|
||||||
|
VkDeviceAddress deviceAddress;
|
||||||
|
const void* hostAddress;
|
||||||
|
} VkDeviceOrHostAddressConstKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureBuildOffsetInfoKHR {
|
||||||
|
uint32_t primitiveCount;
|
||||||
|
uint32_t primitiveOffset;
|
||||||
|
uint32_t firstVertex;
|
||||||
|
uint32_t transformOffset;
|
||||||
|
} VkAccelerationStructureBuildOffsetInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkRayTracingShaderGroupCreateInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkRayTracingShaderGroupTypeKHR type;
|
||||||
|
uint32_t generalShader;
|
||||||
|
uint32_t closestHitShader;
|
||||||
|
uint32_t anyHitShader;
|
||||||
|
uint32_t intersectionShader;
|
||||||
|
const void* pShaderGroupCaptureReplayHandle;
|
||||||
|
} VkRayTracingShaderGroupCreateInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkRayTracingPipelineInterfaceCreateInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
uint32_t maxPayloadSize;
|
||||||
|
uint32_t maxAttributeSize;
|
||||||
|
uint32_t maxCallableSize;
|
||||||
|
} VkRayTracingPipelineInterfaceCreateInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkRayTracingPipelineCreateInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkPipelineCreateFlags flags;
|
||||||
|
uint32_t stageCount;
|
||||||
|
const VkPipelineShaderStageCreateInfo* pStages;
|
||||||
|
uint32_t groupCount;
|
||||||
|
const VkRayTracingShaderGroupCreateInfoKHR* pGroups;
|
||||||
|
uint32_t maxRecursionDepth;
|
||||||
|
VkPipelineLibraryCreateInfoKHR libraries;
|
||||||
|
const VkRayTracingPipelineInterfaceCreateInfoKHR* pLibraryInterface;
|
||||||
|
VkPipelineLayout layout;
|
||||||
|
VkPipeline basePipelineHandle;
|
||||||
|
int32_t basePipelineIndex;
|
||||||
|
} VkRayTracingPipelineCreateInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureGeometryTrianglesDataKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkFormat vertexFormat;
|
||||||
|
VkDeviceOrHostAddressConstKHR vertexData;
|
||||||
|
VkDeviceSize vertexStride;
|
||||||
|
VkIndexType indexType;
|
||||||
|
VkDeviceOrHostAddressConstKHR indexData;
|
||||||
|
VkDeviceOrHostAddressConstKHR transformData;
|
||||||
|
} VkAccelerationStructureGeometryTrianglesDataKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureGeometryAabbsDataKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkDeviceOrHostAddressConstKHR data;
|
||||||
|
VkDeviceSize stride;
|
||||||
|
} VkAccelerationStructureGeometryAabbsDataKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureGeometryInstancesDataKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkBool32 arrayOfPointers;
|
||||||
|
VkDeviceOrHostAddressConstKHR data;
|
||||||
|
} VkAccelerationStructureGeometryInstancesDataKHR;
|
||||||
|
|
||||||
|
typedef union VkAccelerationStructureGeometryDataKHR {
|
||||||
|
VkAccelerationStructureGeometryTrianglesDataKHR triangles;
|
||||||
|
VkAccelerationStructureGeometryAabbsDataKHR aabbs;
|
||||||
|
VkAccelerationStructureGeometryInstancesDataKHR instances;
|
||||||
|
} VkAccelerationStructureGeometryDataKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureGeometryKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkGeometryTypeKHR geometryType;
|
||||||
|
VkAccelerationStructureGeometryDataKHR geometry;
|
||||||
|
VkGeometryFlagsKHR flags;
|
||||||
|
} VkAccelerationStructureGeometryKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureBuildGeometryInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkAccelerationStructureTypeKHR type;
|
||||||
|
VkBuildAccelerationStructureFlagsKHR flags;
|
||||||
|
VkBool32 update;
|
||||||
|
VkAccelerationStructureKHR srcAccelerationStructure;
|
||||||
|
VkAccelerationStructureKHR dstAccelerationStructure;
|
||||||
|
VkBool32 geometryArrayOfPointers;
|
||||||
|
uint32_t geometryCount;
|
||||||
|
const VkAccelerationStructureGeometryKHR* const* ppGeometries;
|
||||||
|
VkDeviceOrHostAddressKHR scratchData;
|
||||||
|
} VkAccelerationStructureBuildGeometryInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureCreateGeometryTypeInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkGeometryTypeKHR geometryType;
|
||||||
|
uint32_t maxPrimitiveCount;
|
||||||
|
VkIndexType indexType;
|
||||||
|
uint32_t maxVertexCount;
|
||||||
|
VkFormat vertexFormat;
|
||||||
|
VkBool32 allowsTransforms;
|
||||||
|
} VkAccelerationStructureCreateGeometryTypeInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureCreateInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkDeviceSize compactedSize;
|
||||||
|
VkAccelerationStructureTypeKHR type;
|
||||||
|
VkBuildAccelerationStructureFlagsKHR flags;
|
||||||
|
uint32_t maxGeometryCount;
|
||||||
|
const VkAccelerationStructureCreateGeometryTypeInfoKHR* pGeometryInfos;
|
||||||
|
VkDeviceAddress deviceAddress;
|
||||||
|
} VkAccelerationStructureCreateInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureMemoryRequirementsInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkAccelerationStructureMemoryRequirementsTypeKHR type;
|
||||||
|
VkAccelerationStructureBuildTypeKHR buildType;
|
||||||
|
VkAccelerationStructureKHR accelerationStructure;
|
||||||
|
} VkAccelerationStructureMemoryRequirementsInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkPhysicalDeviceRayTracingFeaturesKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
void* pNext;
|
||||||
|
VkBool32 rayTracing;
|
||||||
|
VkBool32 rayTracingShaderGroupHandleCaptureReplay;
|
||||||
|
VkBool32 rayTracingShaderGroupHandleCaptureReplayMixed;
|
||||||
|
VkBool32 rayTracingAccelerationStructureCaptureReplay;
|
||||||
|
VkBool32 rayTracingIndirectTraceRays;
|
||||||
|
VkBool32 rayTracingIndirectAccelerationStructureBuild;
|
||||||
|
VkBool32 rayTracingHostAccelerationStructureCommands;
|
||||||
|
VkBool32 rayQuery;
|
||||||
|
VkBool32 rayTracingPrimitiveCulling;
|
||||||
|
} VkPhysicalDeviceRayTracingFeaturesKHR;
|
||||||
|
|
||||||
|
typedef struct VkPhysicalDeviceRayTracingPropertiesKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
void* pNext;
|
||||||
|
uint32_t shaderGroupHandleSize;
|
||||||
|
uint32_t maxRecursionDepth;
|
||||||
|
uint32_t maxShaderGroupStride;
|
||||||
|
uint32_t shaderGroupBaseAlignment;
|
||||||
|
uint64_t maxGeometryCount;
|
||||||
|
uint64_t maxInstanceCount;
|
||||||
|
uint64_t maxPrimitiveCount;
|
||||||
|
uint32_t maxDescriptorSetAccelerationStructures;
|
||||||
|
uint32_t shaderGroupHandleCaptureReplaySize;
|
||||||
|
} VkPhysicalDeviceRayTracingPropertiesKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureDeviceAddressInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkAccelerationStructureKHR accelerationStructure;
|
||||||
|
} VkAccelerationStructureDeviceAddressInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkAccelerationStructureVersionKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
const uint8_t* versionData;
|
||||||
|
} VkAccelerationStructureVersionKHR;
|
||||||
|
|
||||||
|
typedef struct VkStridedBufferRegionKHR {
|
||||||
|
VkBuffer buffer;
|
||||||
|
VkDeviceSize offset;
|
||||||
|
VkDeviceSize stride;
|
||||||
|
VkDeviceSize size;
|
||||||
|
} VkStridedBufferRegionKHR;
|
||||||
|
|
||||||
|
typedef struct VkTraceRaysIndirectCommandKHR {
|
||||||
|
uint32_t width;
|
||||||
|
uint32_t height;
|
||||||
|
uint32_t depth;
|
||||||
|
} VkTraceRaysIndirectCommandKHR;
|
||||||
|
|
||||||
|
typedef struct VkCopyAccelerationStructureToMemoryInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkAccelerationStructureKHR src;
|
||||||
|
VkDeviceOrHostAddressKHR dst;
|
||||||
|
VkCopyAccelerationStructureModeKHR mode;
|
||||||
|
} VkCopyAccelerationStructureToMemoryInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkCopyMemoryToAccelerationStructureInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkDeviceOrHostAddressConstKHR src;
|
||||||
|
VkAccelerationStructureKHR dst;
|
||||||
|
VkCopyAccelerationStructureModeKHR mode;
|
||||||
|
} VkCopyMemoryToAccelerationStructureInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkCopyAccelerationStructureInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkAccelerationStructureKHR src;
|
||||||
|
VkAccelerationStructureKHR dst;
|
||||||
|
VkCopyAccelerationStructureModeKHR mode;
|
||||||
|
} VkCopyAccelerationStructureInfoKHR;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureKHR)(VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure);
|
||||||
|
typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureMemoryRequirementsKHR)(VkDevice device, const VkAccelerationStructureMemoryRequirementsInfoKHR* pInfo, VkMemoryRequirements2* pMemoryRequirements);
|
||||||
|
typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructureKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildOffsetInfoKHR* const* ppOffsetInfos);
|
||||||
|
typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructureIndirectKHR)(VkCommandBuffer commandBuffer, const VkAccelerationStructureBuildGeometryInfoKHR* pInfo, VkBuffer indirectBuffer, VkDeviceSize indirectOffset, uint32_t indirectStride);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkBuildAccelerationStructureKHR)(VkDevice device, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildOffsetInfoKHR* const* ppOffsetInfos);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureKHR)(VkDevice device, const VkCopyAccelerationStructureInfoKHR* pInfo);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureToMemoryKHR)(VkDevice device, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToAccelerationStructureKHR)(VkDevice device, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkWriteAccelerationStructuresPropertiesKHR)(VkDevice device, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, size_t dataSize, void* pData, size_t stride);
|
||||||
|
typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR* pInfo);
|
||||||
|
typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureToMemoryKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo);
|
||||||
|
typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo);
|
||||||
|
typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysKHR)(VkCommandBuffer commandBuffer, const VkStridedBufferRegionKHR* pRaygenShaderBindingTable, const VkStridedBufferRegionKHR* pMissShaderBindingTable, const VkStridedBufferRegionKHR* pHitShaderBindingTable, const VkStridedBufferRegionKHR* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesKHR)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
|
||||||
|
typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetAccelerationStructureDeviceAddressKHR)(VkDevice device, const VkAccelerationStructureDeviceAddressInfoKHR* pInfo);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData);
|
||||||
|
typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirectKHR)(VkCommandBuffer commandBuffer, const VkStridedBufferRegionKHR* pRaygenShaderBindingTable, const VkStridedBufferRegionKHR* pMissShaderBindingTable, const VkStridedBufferRegionKHR* pHitShaderBindingTable, const VkStridedBufferRegionKHR* pCallableShaderBindingTable, VkBuffer buffer, VkDeviceSize offset);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)(VkDevice device, const VkAccelerationStructureVersionKHR* version);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkAccelerationStructureCreateInfoKHR* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkAccelerationStructureKHR* pAccelerationStructure);
|
||||||
|
|
||||||
|
VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureMemoryRequirementsKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkAccelerationStructureMemoryRequirementsInfoKHR* pInfo,
|
||||||
|
VkMemoryRequirements2* pMemoryRequirements);
|
||||||
|
|
||||||
|
VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureKHR(
|
||||||
|
VkCommandBuffer commandBuffer,
|
||||||
|
uint32_t infoCount,
|
||||||
|
const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
|
||||||
|
const VkAccelerationStructureBuildOffsetInfoKHR* const* ppOffsetInfos);
|
||||||
|
|
||||||
|
VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureIndirectKHR(
|
||||||
|
VkCommandBuffer commandBuffer,
|
||||||
|
const VkAccelerationStructureBuildGeometryInfoKHR* pInfo,
|
||||||
|
VkBuffer indirectBuffer,
|
||||||
|
VkDeviceSize indirectOffset,
|
||||||
|
uint32_t indirectStride);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkBuildAccelerationStructureKHR(
|
||||||
|
VkDevice device,
|
||||||
|
uint32_t infoCount,
|
||||||
|
const VkAccelerationStructureBuildGeometryInfoKHR* pInfos,
|
||||||
|
const VkAccelerationStructureBuildOffsetInfoKHR* const* ppOffsetInfos);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkCopyAccelerationStructureInfoKHR* pInfo);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureToMemoryKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToAccelerationStructureKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkWriteAccelerationStructuresPropertiesKHR(
|
||||||
|
VkDevice device,
|
||||||
|
uint32_t accelerationStructureCount,
|
||||||
|
const VkAccelerationStructureKHR* pAccelerationStructures,
|
||||||
|
VkQueryType queryType,
|
||||||
|
size_t dataSize,
|
||||||
|
void* pData,
|
||||||
|
size_t stride);
|
||||||
|
|
||||||
|
VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureKHR(
|
||||||
|
VkCommandBuffer commandBuffer,
|
||||||
|
const VkCopyAccelerationStructureInfoKHR* pInfo);
|
||||||
|
|
||||||
|
VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureToMemoryKHR(
|
||||||
|
VkCommandBuffer commandBuffer,
|
||||||
|
const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo);
|
||||||
|
|
||||||
|
VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToAccelerationStructureKHR(
|
||||||
|
VkCommandBuffer commandBuffer,
|
||||||
|
const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo);
|
||||||
|
|
||||||
|
VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysKHR(
|
||||||
|
VkCommandBuffer commandBuffer,
|
||||||
|
const VkStridedBufferRegionKHR* pRaygenShaderBindingTable,
|
||||||
|
const VkStridedBufferRegionKHR* pMissShaderBindingTable,
|
||||||
|
const VkStridedBufferRegionKHR* pHitShaderBindingTable,
|
||||||
|
const VkStridedBufferRegionKHR* pCallableShaderBindingTable,
|
||||||
|
uint32_t width,
|
||||||
|
uint32_t height,
|
||||||
|
uint32_t depth);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesKHR(
|
||||||
|
VkDevice device,
|
||||||
|
VkPipelineCache pipelineCache,
|
||||||
|
uint32_t createInfoCount,
|
||||||
|
const VkRayTracingPipelineCreateInfoKHR* pCreateInfos,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkPipeline* pPipelines);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetAccelerationStructureDeviceAddressKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkAccelerationStructureDeviceAddressInfoKHR* pInfo);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingCaptureReplayShaderGroupHandlesKHR(
|
||||||
|
VkDevice device,
|
||||||
|
VkPipeline pipeline,
|
||||||
|
uint32_t firstGroup,
|
||||||
|
uint32_t groupCount,
|
||||||
|
size_t dataSize,
|
||||||
|
void* pData);
|
||||||
|
|
||||||
|
VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirectKHR(
|
||||||
|
VkCommandBuffer commandBuffer,
|
||||||
|
const VkStridedBufferRegionKHR* pRaygenShaderBindingTable,
|
||||||
|
const VkStridedBufferRegionKHR* pMissShaderBindingTable,
|
||||||
|
const VkStridedBufferRegionKHR* pHitShaderBindingTable,
|
||||||
|
const VkStridedBufferRegionKHR* pCallableShaderBindingTable,
|
||||||
|
VkBuffer buffer,
|
||||||
|
VkDeviceSize offset);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceAccelerationStructureCompatibilityKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkAccelerationStructureVersionKHR* version);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,57 @@
|
||||||
|
#ifndef VULKAN_FUCHSIA_H_
|
||||||
|
#define VULKAN_FUCHSIA_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_FUCHSIA_imagepipe_surface 1
|
||||||
|
#define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1
|
||||||
|
#define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface"
|
||||||
|
typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA;
|
||||||
|
typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkImagePipeSurfaceCreateFlagsFUCHSIA flags;
|
||||||
|
zx_handle_t imagePipeHandle;
|
||||||
|
} VkImagePipeSurfaceCreateInfoFUCHSIA;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
#ifndef VULKAN_GGP_H_
|
||||||
|
#define VULKAN_GGP_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_GGP_stream_descriptor_surface 1
|
||||||
|
#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1
|
||||||
|
#define VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME "VK_GGP_stream_descriptor_surface"
|
||||||
|
typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP;
|
||||||
|
typedef struct VkStreamDescriptorSurfaceCreateInfoGGP {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkStreamDescriptorSurfaceCreateFlagsGGP flags;
|
||||||
|
GgpStreamDescriptor streamDescriptor;
|
||||||
|
} VkStreamDescriptorSurfaceCreateInfoGGP;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_GGP_frame_token 1
|
||||||
|
#define VK_GGP_FRAME_TOKEN_SPEC_VERSION 1
|
||||||
|
#define VK_GGP_FRAME_TOKEN_EXTENSION_NAME "VK_GGP_frame_token"
|
||||||
|
typedef struct VkPresentFrameTokenGGP {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
GgpFrameToken frameToken;
|
||||||
|
} VkPresentFrameTokenGGP;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
#ifndef VULKAN_IOS_H_
|
||||||
|
#define VULKAN_IOS_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_MVK_ios_surface 1
|
||||||
|
#define VK_MVK_IOS_SURFACE_SPEC_VERSION 2
|
||||||
|
#define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface"
|
||||||
|
typedef VkFlags VkIOSSurfaceCreateFlagsMVK;
|
||||||
|
typedef struct VkIOSSurfaceCreateInfoMVK {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkIOSSurfaceCreateFlagsMVK flags;
|
||||||
|
const void* pView;
|
||||||
|
} VkIOSSurfaceCreateInfoMVK;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
#ifndef VULKAN_MACOS_H_
|
||||||
|
#define VULKAN_MACOS_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_MVK_macos_surface 1
|
||||||
|
#define VK_MVK_MACOS_SURFACE_SPEC_VERSION 2
|
||||||
|
#define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface"
|
||||||
|
typedef VkFlags VkMacOSSurfaceCreateFlagsMVK;
|
||||||
|
typedef struct VkMacOSSurfaceCreateInfoMVK {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkMacOSSurfaceCreateFlagsMVK flags;
|
||||||
|
const void* pView;
|
||||||
|
} VkMacOSSurfaceCreateInfoMVK;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
#ifndef VULKAN_METAL_H_
|
||||||
|
#define VULKAN_METAL_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_EXT_metal_surface 1
|
||||||
|
|
||||||
|
#ifdef __OBJC__
|
||||||
|
@class CAMetalLayer;
|
||||||
|
#else
|
||||||
|
typedef void CAMetalLayer;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define VK_EXT_METAL_SURFACE_SPEC_VERSION 1
|
||||||
|
#define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface"
|
||||||
|
typedef VkFlags VkMetalSurfaceCreateFlagsEXT;
|
||||||
|
typedef struct VkMetalSurfaceCreateInfoEXT {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkMetalSurfaceCreateFlagsEXT flags;
|
||||||
|
const CAMetalLayer* pLayer;
|
||||||
|
} VkMetalSurfaceCreateInfoEXT;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkMetalSurfaceCreateInfoEXT* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
#ifndef VULKAN_VI_H_
|
||||||
|
#define VULKAN_VI_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_NN_vi_surface 1
|
||||||
|
#define VK_NN_VI_SURFACE_SPEC_VERSION 1
|
||||||
|
#define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface"
|
||||||
|
typedef VkFlags VkViSurfaceCreateFlagsNN;
|
||||||
|
typedef struct VkViSurfaceCreateInfoNN {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkViSurfaceCreateFlagsNN flags;
|
||||||
|
void* window;
|
||||||
|
} VkViSurfaceCreateInfoNN;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkViSurfaceCreateInfoNN* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
#ifndef VULKAN_WAYLAND_H_
|
||||||
|
#define VULKAN_WAYLAND_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_wayland_surface 1
|
||||||
|
#define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6
|
||||||
|
#define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface"
|
||||||
|
typedef VkFlags VkWaylandSurfaceCreateFlagsKHR;
|
||||||
|
typedef struct VkWaylandSurfaceCreateInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkWaylandSurfaceCreateFlagsKHR flags;
|
||||||
|
struct wl_display* display;
|
||||||
|
struct wl_surface* surface;
|
||||||
|
} VkWaylandSurfaceCreateInfoKHR;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(
|
||||||
|
VkPhysicalDevice physicalDevice,
|
||||||
|
uint32_t queueFamilyIndex,
|
||||||
|
struct wl_display* display);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,325 @@
|
||||||
|
#ifndef VULKAN_WIN32_H_
|
||||||
|
#define VULKAN_WIN32_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_win32_surface 1
|
||||||
|
#define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6
|
||||||
|
#define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface"
|
||||||
|
typedef VkFlags VkWin32SurfaceCreateFlagsKHR;
|
||||||
|
typedef struct VkWin32SurfaceCreateInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkWin32SurfaceCreateFlagsKHR flags;
|
||||||
|
HINSTANCE hinstance;
|
||||||
|
HWND hwnd;
|
||||||
|
} VkWin32SurfaceCreateInfoKHR;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(
|
||||||
|
VkPhysicalDevice physicalDevice,
|
||||||
|
uint32_t queueFamilyIndex);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_external_memory_win32 1
|
||||||
|
#define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
|
||||||
|
#define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32"
|
||||||
|
typedef struct VkImportMemoryWin32HandleInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkExternalMemoryHandleTypeFlagBits handleType;
|
||||||
|
HANDLE handle;
|
||||||
|
LPCWSTR name;
|
||||||
|
} VkImportMemoryWin32HandleInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkExportMemoryWin32HandleInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
const SECURITY_ATTRIBUTES* pAttributes;
|
||||||
|
DWORD dwAccess;
|
||||||
|
LPCWSTR name;
|
||||||
|
} VkExportMemoryWin32HandleInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkMemoryWin32HandlePropertiesKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
void* pNext;
|
||||||
|
uint32_t memoryTypeBits;
|
||||||
|
} VkMemoryWin32HandlePropertiesKHR;
|
||||||
|
|
||||||
|
typedef struct VkMemoryGetWin32HandleInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkDeviceMemory memory;
|
||||||
|
VkExternalMemoryHandleTypeFlagBits handleType;
|
||||||
|
} VkMemoryGetWin32HandleInfoKHR;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
|
||||||
|
HANDLE* pHandle);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR(
|
||||||
|
VkDevice device,
|
||||||
|
VkExternalMemoryHandleTypeFlagBits handleType,
|
||||||
|
HANDLE handle,
|
||||||
|
VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_win32_keyed_mutex 1
|
||||||
|
#define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1
|
||||||
|
#define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex"
|
||||||
|
typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
uint32_t acquireCount;
|
||||||
|
const VkDeviceMemory* pAcquireSyncs;
|
||||||
|
const uint64_t* pAcquireKeys;
|
||||||
|
const uint32_t* pAcquireTimeouts;
|
||||||
|
uint32_t releaseCount;
|
||||||
|
const VkDeviceMemory* pReleaseSyncs;
|
||||||
|
const uint64_t* pReleaseKeys;
|
||||||
|
} VkWin32KeyedMutexAcquireReleaseInfoKHR;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_external_semaphore_win32 1
|
||||||
|
#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1
|
||||||
|
#define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32"
|
||||||
|
typedef struct VkImportSemaphoreWin32HandleInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkSemaphore semaphore;
|
||||||
|
VkSemaphoreImportFlags flags;
|
||||||
|
VkExternalSemaphoreHandleTypeFlagBits handleType;
|
||||||
|
HANDLE handle;
|
||||||
|
LPCWSTR name;
|
||||||
|
} VkImportSemaphoreWin32HandleInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkExportSemaphoreWin32HandleInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
const SECURITY_ATTRIBUTES* pAttributes;
|
||||||
|
DWORD dwAccess;
|
||||||
|
LPCWSTR name;
|
||||||
|
} VkExportSemaphoreWin32HandleInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkD3D12FenceSubmitInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
uint32_t waitSemaphoreValuesCount;
|
||||||
|
const uint64_t* pWaitSemaphoreValues;
|
||||||
|
uint32_t signalSemaphoreValuesCount;
|
||||||
|
const uint64_t* pSignalSemaphoreValues;
|
||||||
|
} VkD3D12FenceSubmitInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkSemaphoreGetWin32HandleInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkSemaphore semaphore;
|
||||||
|
VkExternalSemaphoreHandleTypeFlagBits handleType;
|
||||||
|
} VkSemaphoreGetWin32HandleInfoKHR;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
|
||||||
|
HANDLE* pHandle);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_external_fence_win32 1
|
||||||
|
#define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1
|
||||||
|
#define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32"
|
||||||
|
typedef struct VkImportFenceWin32HandleInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkFence fence;
|
||||||
|
VkFenceImportFlags flags;
|
||||||
|
VkExternalFenceHandleTypeFlagBits handleType;
|
||||||
|
HANDLE handle;
|
||||||
|
LPCWSTR name;
|
||||||
|
} VkImportFenceWin32HandleInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkExportFenceWin32HandleInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
const SECURITY_ATTRIBUTES* pAttributes;
|
||||||
|
DWORD dwAccess;
|
||||||
|
LPCWSTR name;
|
||||||
|
} VkExportFenceWin32HandleInfoKHR;
|
||||||
|
|
||||||
|
typedef struct VkFenceGetWin32HandleInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkFence fence;
|
||||||
|
VkExternalFenceHandleTypeFlagBits handleType;
|
||||||
|
} VkFenceGetWin32HandleInfoKHR;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR(
|
||||||
|
VkDevice device,
|
||||||
|
const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
|
||||||
|
HANDLE* pHandle);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_NV_external_memory_win32 1
|
||||||
|
#define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1
|
||||||
|
#define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32"
|
||||||
|
typedef struct VkImportMemoryWin32HandleInfoNV {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkExternalMemoryHandleTypeFlagsNV handleType;
|
||||||
|
HANDLE handle;
|
||||||
|
} VkImportMemoryWin32HandleInfoNV;
|
||||||
|
|
||||||
|
typedef struct VkExportMemoryWin32HandleInfoNV {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
const SECURITY_ATTRIBUTES* pAttributes;
|
||||||
|
DWORD dwAccess;
|
||||||
|
} VkExportMemoryWin32HandleInfoNV;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV(
|
||||||
|
VkDevice device,
|
||||||
|
VkDeviceMemory memory,
|
||||||
|
VkExternalMemoryHandleTypeFlagsNV handleType,
|
||||||
|
HANDLE* pHandle);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_NV_win32_keyed_mutex 1
|
||||||
|
#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 2
|
||||||
|
#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex"
|
||||||
|
typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
uint32_t acquireCount;
|
||||||
|
const VkDeviceMemory* pAcquireSyncs;
|
||||||
|
const uint64_t* pAcquireKeys;
|
||||||
|
const uint32_t* pAcquireTimeoutMilliseconds;
|
||||||
|
uint32_t releaseCount;
|
||||||
|
const VkDeviceMemory* pReleaseSyncs;
|
||||||
|
const uint64_t* pReleaseKeys;
|
||||||
|
} VkWin32KeyedMutexAcquireReleaseInfoNV;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_EXT_full_screen_exclusive 1
|
||||||
|
#define VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION 4
|
||||||
|
#define VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME "VK_EXT_full_screen_exclusive"
|
||||||
|
|
||||||
|
typedef enum VkFullScreenExclusiveEXT {
|
||||||
|
VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0,
|
||||||
|
VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1,
|
||||||
|
VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2,
|
||||||
|
VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3,
|
||||||
|
VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||||
|
} VkFullScreenExclusiveEXT;
|
||||||
|
typedef struct VkSurfaceFullScreenExclusiveInfoEXT {
|
||||||
|
VkStructureType sType;
|
||||||
|
void* pNext;
|
||||||
|
VkFullScreenExclusiveEXT fullScreenExclusive;
|
||||||
|
} VkSurfaceFullScreenExclusiveInfoEXT;
|
||||||
|
|
||||||
|
typedef struct VkSurfaceCapabilitiesFullScreenExclusiveEXT {
|
||||||
|
VkStructureType sType;
|
||||||
|
void* pNext;
|
||||||
|
VkBool32 fullScreenExclusiveSupported;
|
||||||
|
} VkSurfaceCapabilitiesFullScreenExclusiveEXT;
|
||||||
|
|
||||||
|
typedef struct VkSurfaceFullScreenExclusiveWin32InfoEXT {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
HMONITOR hmonitor;
|
||||||
|
} VkSurfaceFullScreenExclusiveWin32InfoEXT;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkAcquireFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkReleaseFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModes2EXT)(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT(
|
||||||
|
VkPhysicalDevice physicalDevice,
|
||||||
|
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||||
|
uint32_t* pPresentModeCount,
|
||||||
|
VkPresentModeKHR* pPresentModes);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT(
|
||||||
|
VkDevice device,
|
||||||
|
VkSwapchainKHR swapchain);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT(
|
||||||
|
VkDevice device,
|
||||||
|
VkSwapchainKHR swapchain);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT(
|
||||||
|
VkDevice device,
|
||||||
|
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||||
|
VkDeviceGroupPresentModeFlagsKHR* pModes);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
#ifndef VULKAN_XCB_H_
|
||||||
|
#define VULKAN_XCB_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_xcb_surface 1
|
||||||
|
#define VK_KHR_XCB_SURFACE_SPEC_VERSION 6
|
||||||
|
#define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface"
|
||||||
|
typedef VkFlags VkXcbSurfaceCreateFlagsKHR;
|
||||||
|
typedef struct VkXcbSurfaceCreateInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkXcbSurfaceCreateFlagsKHR flags;
|
||||||
|
xcb_connection_t* connection;
|
||||||
|
xcb_window_t window;
|
||||||
|
} VkXcbSurfaceCreateInfoKHR;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(
|
||||||
|
VkPhysicalDevice physicalDevice,
|
||||||
|
uint32_t queueFamilyIndex,
|
||||||
|
xcb_connection_t* connection,
|
||||||
|
xcb_visualid_t visual_id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
#ifndef VULKAN_XLIB_H_
|
||||||
|
#define VULKAN_XLIB_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_KHR_xlib_surface 1
|
||||||
|
#define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6
|
||||||
|
#define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface"
|
||||||
|
typedef VkFlags VkXlibSurfaceCreateFlagsKHR;
|
||||||
|
typedef struct VkXlibSurfaceCreateInfoKHR {
|
||||||
|
VkStructureType sType;
|
||||||
|
const void* pNext;
|
||||||
|
VkXlibSurfaceCreateFlagsKHR flags;
|
||||||
|
Display* dpy;
|
||||||
|
Window window;
|
||||||
|
} VkXlibSurfaceCreateInfoKHR;
|
||||||
|
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||||
|
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR(
|
||||||
|
VkInstance instance,
|
||||||
|
const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
|
||||||
|
const VkAllocationCallbacks* pAllocator,
|
||||||
|
VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR(
|
||||||
|
VkPhysicalDevice physicalDevice,
|
||||||
|
uint32_t queueFamilyIndex,
|
||||||
|
Display* dpy,
|
||||||
|
VisualID visualID);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
#ifndef VULKAN_XLIB_XRANDR_H_
|
||||||
|
#define VULKAN_XLIB_XRANDR_H_ 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2015-2020 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
** you may not use this file except in compliance with the License.
|
||||||
|
** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
** Unless required by applicable law or agreed to in writing, software
|
||||||
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define VK_EXT_acquire_xlib_display 1
|
||||||
|
#define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1
|
||||||
|
#define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display"
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display);
|
||||||
|
typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay);
|
||||||
|
|
||||||
|
#ifndef VK_NO_PROTOTYPES
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT(
|
||||||
|
VkPhysicalDevice physicalDevice,
|
||||||
|
Display* dpy,
|
||||||
|
VkDisplayKHR display);
|
||||||
|
|
||||||
|
VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT(
|
||||||
|
VkPhysicalDevice physicalDevice,
|
||||||
|
Display* dpy,
|
||||||
|
RROutput rrOutput,
|
||||||
|
VkDisplayKHR* pDisplay);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
/* register_types.cpp */
|
||||||
|
|
||||||
|
#include "register_types.h"
|
||||||
|
|
||||||
|
#include "core/class_db.h"
|
||||||
|
#include "KomputeSummatorNode.h"
|
||||||
|
|
||||||
|
void register_kompute_summator_types() {
|
||||||
|
ClassDB::register_class<KomputeSummatorNode>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void unregister_kompute_summator_types() {
|
||||||
|
// Nothing to do here in this example.
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
/* register_types.h */
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
void register_kompute_summator_types();
|
||||||
|
void unregister_kompute_summator_types();
|
||||||
|
/* yes, the word in the middle must be the same as the module folder name */
|
||||||
4
examples/godot_logistic_regression/gdnative_shared/.gitignore
vendored
Normal file
4
examples/godot_logistic_regression/gdnative_shared/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
vulkan-kompute
|
||||||
|
lib
|
||||||
|
godot-cpp
|
||||||
|
.import
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
cmake_minimum_required(VERSION 3.17.0)
|
||||||
|
project(kompute_godot VERSION 0.1.0)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
|
||||||
|
set(KOMPUTE_EXTRA_CXX_FLAGS "" CACHE STRING "Extra compile flags for Kompute, see docs for full list")
|
||||||
|
|
||||||
|
# It is necessary to pass the DEBUG or RELEASE flag accordingly to Kompute
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG=1 ${KOMPUTE_EXTRA_CXX_FLAGS}")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DRELEASE=1 ${KOMPUTE_EXTRA_CXX_FLAGS}")
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CC_FLAGS} /W3 /MDd /Zi /EHsc /Ox /DNDEBUG /FS")
|
||||||
|
|
||||||
|
find_package(kompute REQUIRED)
|
||||||
|
find_package(Vulkan REQUIRED)
|
||||||
|
|
||||||
|
add_library(kompute_godot
|
||||||
|
SHARED
|
||||||
|
src/KomputeSummator.cpp
|
||||||
|
src/KomputeGdNative.cpp)
|
||||||
|
|
||||||
|
target_include_directories(
|
||||||
|
kompute_godot PUBLIC
|
||||||
|
src/
|
||||||
|
godot-cpp/include
|
||||||
|
godot-cpp/include/core
|
||||||
|
godot-cpp/include/gen
|
||||||
|
godot-cpp/godot_headers
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(kompute_godot
|
||||||
|
kompute::kompute
|
||||||
|
Vulkan::Vulkan
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(kompute_godot
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/godot-cpp/bin/libgodot-cpp.windows.release.default.lib
|
||||||
|
)
|
||||||
|
|
||||||
25
examples/godot_logistic_regression/gdnative_shared/README.md
Normal file
25
examples/godot_logistic_regression/gdnative_shared/README.md
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Vulkan Kompute Godot Example
|
||||||
|
|
||||||
|
## Set Up Dependencies
|
||||||
|
|
||||||
|
We can get all the required dependencies from godot by running
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone --branch 3.2 https://github.com/godotengine/godot-cpp
|
||||||
|
|
||||||
|
cd godot-cpp
|
||||||
|
```
|
||||||
|
|
||||||
|
Then we can get all the subomdules
|
||||||
|
|
||||||
|
```
|
||||||
|
git submodule sync
|
||||||
|
```
|
||||||
|
|
||||||
|
and we build the bindings
|
||||||
|
|
||||||
|
```
|
||||||
|
scons -j16 platform=linuxbsd target=debug
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
#include "KomputeSummator.hpp"
|
||||||
|
|
||||||
|
extern "C" void GDN_EXPORT godot_gdnative_init(godot_gdnative_init_options *o) {
|
||||||
|
godot::Godot::gdnative_init(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void GDN_EXPORT godot_gdnative_terminate(godot_gdnative_terminate_options *o) {
|
||||||
|
godot::Godot::gdnative_terminate(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void GDN_EXPORT godot_nativescript_init(void *handle) {
|
||||||
|
godot::Godot::nativescript_init(handle);
|
||||||
|
|
||||||
|
godot::register_class<godot::KomputeSummator>();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,142 @@
|
||||||
|
/* summator.cpp */
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "KomputeSummator.hpp"
|
||||||
|
|
||||||
|
namespace godot {
|
||||||
|
|
||||||
|
KomputeSummator::KomputeSummator() {
|
||||||
|
std::cout << "CALLING CONSTRUCTOR" << std::endl;
|
||||||
|
this->_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KomputeSummator::train(Array yArr, Array xIArr, Array xJArr) {
|
||||||
|
|
||||||
|
assert(y.size() == xI.size());
|
||||||
|
assert(xI.size() == xJ.size());
|
||||||
|
|
||||||
|
std::vector<float> yData;
|
||||||
|
std::vector<float> xIData;
|
||||||
|
std::vector<float> xJData;
|
||||||
|
std::vector<float> zerosData;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < yArr.size(); i++) {
|
||||||
|
yData.push_back(yArr[i]);
|
||||||
|
xIData.push_back(xIArr[i]);
|
||||||
|
xJData.push_back(xJArr[i]);
|
||||||
|
zerosData.push_back(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t ITERATIONS = 100;
|
||||||
|
float learningRate = 0.1;
|
||||||
|
|
||||||
|
std::shared_ptr<kp::Tensor> xI{ new kp::Tensor(xIData) };
|
||||||
|
std::shared_ptr<kp::Tensor> xJ{ new kp::Tensor(xJData) };
|
||||||
|
|
||||||
|
std::shared_ptr<kp::Tensor> y{ new kp::Tensor(yData) };
|
||||||
|
|
||||||
|
std::shared_ptr<kp::Tensor> wIn{ new kp::Tensor({ 0.001, 0.001 }) };
|
||||||
|
std::shared_ptr<kp::Tensor> wOutI{ new kp::Tensor(zerosData) };
|
||||||
|
std::shared_ptr<kp::Tensor> wOutJ{ new kp::Tensor(zerosData) };
|
||||||
|
|
||||||
|
std::shared_ptr<kp::Tensor> bIn{ new kp::Tensor({ 0 }) };
|
||||||
|
std::shared_ptr<kp::Tensor> bOut{ new kp::Tensor(zerosData) };
|
||||||
|
|
||||||
|
std::shared_ptr<kp::Tensor> lOut{ new kp::Tensor(zerosData) };
|
||||||
|
|
||||||
|
std::vector<std::shared_ptr<kp::Tensor>> params = { xI, xJ, y,
|
||||||
|
wIn, wOutI, wOutJ,
|
||||||
|
bIn, bOut, lOut };
|
||||||
|
|
||||||
|
{
|
||||||
|
kp::Manager mgr;
|
||||||
|
|
||||||
|
if (std::shared_ptr<kp::Sequence> sq =
|
||||||
|
mgr.getOrCreateManagedSequence("createTensors").lock()) {
|
||||||
|
|
||||||
|
sq->begin();
|
||||||
|
|
||||||
|
sq->record<kp::OpTensorCreate>(params);
|
||||||
|
|
||||||
|
sq->end();
|
||||||
|
sq->eval();
|
||||||
|
|
||||||
|
// Record op algo base
|
||||||
|
sq->begin();
|
||||||
|
|
||||||
|
sq->record<kp::OpTensorSyncDevice>({ wIn, bIn });
|
||||||
|
|
||||||
|
sq->record<kp::OpAlgoBase<>>(
|
||||||
|
params, std::vector<char>(LR_SHADER.begin(), LR_SHADER.end()));
|
||||||
|
|
||||||
|
sq->record<kp::OpTensorSyncLocal>({ wOutI, wOutJ, bOut, lOut });
|
||||||
|
|
||||||
|
sq->end();
|
||||||
|
|
||||||
|
// Iterate across all expected iterations
|
||||||
|
for (size_t i = 0; i < ITERATIONS; i++) {
|
||||||
|
|
||||||
|
sq->eval();
|
||||||
|
|
||||||
|
for (size_t j = 0; j < bOut->size(); j++) {
|
||||||
|
wIn->data()[0] -= learningRate * wOutI->data()[j];
|
||||||
|
wIn->data()[1] -= learningRate * wOutJ->data()[j];
|
||||||
|
bIn->data()[0] -= learningRate * bOut->data()[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SPDLOG_INFO("RESULT: <<<<<<<<<<<<<<<<<<<");
|
||||||
|
SPDLOG_INFO(wIn->data()[0]);
|
||||||
|
SPDLOG_INFO(wIn->data()[1]);
|
||||||
|
SPDLOG_INFO(bIn->data()[0]);
|
||||||
|
|
||||||
|
this->mWeights = kp::Tensor(wIn->data());
|
||||||
|
this->mBias = kp::Tensor(bIn->data());
|
||||||
|
}
|
||||||
|
|
||||||
|
Array KomputeSummator::predict(Array xI, Array xJ) {
|
||||||
|
assert(xI.size() == xJ.size());
|
||||||
|
|
||||||
|
Array retArray;
|
||||||
|
|
||||||
|
// We run the inference in the CPU for simplicity
|
||||||
|
// BUt you can also implement the inference on GPU
|
||||||
|
// GPU implementation would speed up minibatching
|
||||||
|
for (size_t i = 0; i < xI.size(); i++) {
|
||||||
|
float xIVal = xI[i];
|
||||||
|
float xJVal = xJ[i];
|
||||||
|
float result = (xIVal * this->mWeights.data()[0]
|
||||||
|
+ xJVal * this->mWeights.data()[1]
|
||||||
|
+ this->mBias.data()[0]);
|
||||||
|
|
||||||
|
// Instead of using sigmoid we'll just return full numbers
|
||||||
|
Variant var = result > 0 ? 1 : 0;
|
||||||
|
retArray.push_back(var);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KomputeSummator::_init() {
|
||||||
|
std::cout << "CALLING INIT" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KomputeSummator::_process(float delta) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void KomputeSummator::_register_methods() {
|
||||||
|
register_method((char *)"_process", &KomputeSummator::_process);
|
||||||
|
register_method((char *)"_init", &KomputeSummator::_init);
|
||||||
|
|
||||||
|
register_method((char *)"train", &KomputeSummator::train);
|
||||||
|
register_method((char *)"predict", &KomputeSummator::predict);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Godot.hpp>
|
||||||
|
#include <Node2D.hpp>
|
||||||
|
#include <Array.hpp>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include "kompute/Kompute.hpp"
|
||||||
|
|
||||||
|
namespace godot {
|
||||||
|
class KomputeSummator : public Node2D {
|
||||||
|
private:
|
||||||
|
GODOT_CLASS(KomputeSummator, Node2D);
|
||||||
|
|
||||||
|
public:
|
||||||
|
KomputeSummator();
|
||||||
|
|
||||||
|
void train(Array y, Array xI, Array xJ);
|
||||||
|
Array predict(Array xI, Array xJ);
|
||||||
|
|
||||||
|
void _process(float delta);
|
||||||
|
void _init();
|
||||||
|
|
||||||
|
static void _register_methods();
|
||||||
|
|
||||||
|
private:
|
||||||
|
kp::Tensor mWeights;
|
||||||
|
kp::Tensor mBias;
|
||||||
|
};
|
||||||
|
|
||||||
|
static std::string LR_SHADER = R"(
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
layout (constant_id = 0) const uint M = 0;
|
||||||
|
|
||||||
|
layout (local_size_x = 1) in;
|
||||||
|
|
||||||
|
layout(set = 0, binding = 0) buffer bxi { float xi[]; };
|
||||||
|
layout(set = 0, binding = 1) buffer bxj { float xj[]; };
|
||||||
|
layout(set = 0, binding = 2) buffer by { float y[]; };
|
||||||
|
layout(set = 0, binding = 3) buffer bwin { float win[]; };
|
||||||
|
layout(set = 0, binding = 4) buffer bwouti { float wouti[]; };
|
||||||
|
layout(set = 0, binding = 5) buffer bwoutj { float woutj[]; };
|
||||||
|
layout(set = 0, binding = 6) buffer bbin { float bin[]; };
|
||||||
|
layout(set = 0, binding = 7) buffer bbout { float bout[]; };
|
||||||
|
layout(set = 0, binding = 8) buffer blout { float lout[]; };
|
||||||
|
|
||||||
|
float m = float(M);
|
||||||
|
|
||||||
|
float sigmoid(float z) {
|
||||||
|
return 1.0 / (1.0 + exp(-z));
|
||||||
|
}
|
||||||
|
|
||||||
|
float inference(vec2 x, vec2 w, float b) {
|
||||||
|
// Compute the linear mapping function
|
||||||
|
float z = dot(w, x) + b;
|
||||||
|
// Calculate the y-hat with sigmoid
|
||||||
|
float yHat = sigmoid(z);
|
||||||
|
return yHat;
|
||||||
|
}
|
||||||
|
|
||||||
|
float calculateLoss(float yHat, float y) {
|
||||||
|
return -(y * log(yHat) + (1.0 - y) * log(1.0 - yHat));
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
uint idx = gl_GlobalInvocationID.x;
|
||||||
|
|
||||||
|
vec2 wCurr = vec2(win[0], win[1]);
|
||||||
|
float bCurr = bin[0];
|
||||||
|
|
||||||
|
vec2 xCurr = vec2(xi[idx], xj[idx]);
|
||||||
|
float yCurr = y[idx];
|
||||||
|
|
||||||
|
float yHat = inference(xCurr, wCurr, bCurr);
|
||||||
|
|
||||||
|
float dZ = yHat - yCurr;
|
||||||
|
vec2 dW = (1. / m) * xCurr * dZ;
|
||||||
|
float dB = (1. / m) * dZ;
|
||||||
|
wouti[idx] = dW.x;
|
||||||
|
woutj[idx] = dW.y;
|
||||||
|
bout[idx] = dB;
|
||||||
|
|
||||||
|
lout[idx] = calculateLoss(yHat, yCurr);
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
[gd_scene load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://godot_resources/scripts/CustomModuleExampleScene.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
[node name="Parent" type="Node2D"]
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="CustomKomputeNode" type="KomputeSummatorNode" parent="."]
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://godot_resources/scripts/DynamicExampleScript.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://godot_resources/scripts/KomputeNativeClass.gdns" type="Script" id=2]
|
||||||
|
|
||||||
|
[node name="Parent" type="Node2D"]
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="KomputeNode" type="Node2D" parent="."]
|
||||||
|
script = ExtResource( 2 )
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
[gd_resource type="Environment" load_steps=2 format=2]
|
||||||
|
|
||||||
|
[sub_resource type="ProceduralSky" id=1]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
background_mode = 2
|
||||||
|
background_sky = SubResource( 1 )
|
||||||
BIN
examples/godot_logistic_regression/godot_resources/assets/icon.png
Executable file
BIN
examples/godot_logistic_regression/godot_resources/assets/icon.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 5.4 KiB |
34
examples/godot_logistic_regression/godot_resources/assets/icon.png.import
Executable file
34
examples/godot_logistic_regression/godot_resources/assets/icon.png.import
Executable file
|
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path="res://.import/icon.png-dceb2295401b72087458cab0725ade4f.stex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://godot_resources/assets/icon.png"
|
||||||
|
dest_files=[ "res://.import/icon.png-dceb2295401b72087458cab0725ade4f.stex" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_mode=0
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
flags/repeat=0
|
||||||
|
flags/filter=true
|
||||||
|
flags/mipmaps=false
|
||||||
|
flags/anisotropic=false
|
||||||
|
flags/srgb=2
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/HDR_as_SRGB=false
|
||||||
|
process/invert_color=false
|
||||||
|
stream=false
|
||||||
|
size_limit=0
|
||||||
|
detect_3d=true
|
||||||
|
svg/scale=1.0
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
extends Node2D
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
print("hello")
|
||||||
|
|
||||||
|
# Use existing node
|
||||||
|
print($CustomKomputeNode.get_total())
|
||||||
|
|
||||||
|
$CustomKomputeNode.add(10)
|
||||||
|
print($CustomKomputeNode.get_total())
|
||||||
|
|
||||||
|
$CustomKomputeNode.add(10)
|
||||||
|
print($CustomKomputeNode.get_total())
|
||||||
|
|
||||||
|
# Create new instance
|
||||||
|
var s = KomputeSummatorNode.new()
|
||||||
|
|
||||||
|
# This will print 0 as it's a new instance
|
||||||
|
print(s.get_total())
|
||||||
|
|
||||||
|
# Now we can again send further commands
|
||||||
|
s.add(10)
|
||||||
|
print(s.get_total())
|
||||||
|
|
||||||
|
s.add(10)
|
||||||
|
print(s.get_total())
|
||||||
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
extends Node2D
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
|
||||||
|
var xi = [0, 1, 1, 1, 1, 1]
|
||||||
|
var xj = [0, 0, 0, 1, 1, 1]
|
||||||
|
|
||||||
|
var y_train_1 = [0, 0, 0, 1, 1, 1]
|
||||||
|
|
||||||
|
print("Training with " + str(y_train_1))
|
||||||
|
$KomputeNode.train(y_train_1, xi, xj)
|
||||||
|
|
||||||
|
print("Now running prediction with " + str(xi) + " and " + str(xj))
|
||||||
|
print($KomputeNode.predict(xi, xj))
|
||||||
|
|
||||||
|
# We can also reference the class as named in editor
|
||||||
|
# and create a new instance
|
||||||
|
var s = KomputeSummator.new()
|
||||||
|
|
||||||
|
# We can use a new prediciton value to see how weights change
|
||||||
|
var y_train_2 = [0, 0, 1, 1, 1, 1]
|
||||||
|
|
||||||
|
print("\nTraining with " + str(y_train_2))
|
||||||
|
s.train(y_train_2, xi, xj)
|
||||||
|
|
||||||
|
print("Now running prediction with " + str(xi) + " and " + str(xj))
|
||||||
|
print(s.predict(xi, xj))
|
||||||
|
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
[gd_resource type="NativeScript" load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://godot_resources/scripts/KomputeNativeLibrary.gdnlib" type="GDNativeLibrary" id=1]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
class_name = "KomputeSummator"
|
||||||
|
library = ExtResource( 1 )
|
||||||
|
script_class_name = "KomputeSummator"
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
[general]
|
||||||
|
|
||||||
|
singleton=false
|
||||||
|
load_once=true
|
||||||
|
symbol_prefix="godot_"
|
||||||
|
reloadable=false
|
||||||
|
|
||||||
|
[entry]
|
||||||
|
|
||||||
|
Windows.64="res://gdnative_shared/build/Release/kompute_godot.dll"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
|
||||||
|
Windows.64=[ ]
|
||||||
29
examples/godot_logistic_regression/project.godot
Executable file
29
examples/godot_logistic_regression/project.godot
Executable file
|
|
@ -0,0 +1,29 @@
|
||||||
|
; Engine configuration file.
|
||||||
|
; It's best edited using the editor UI and not directly,
|
||||||
|
; since the parameters that go here are not all obvious.
|
||||||
|
;
|
||||||
|
; Format:
|
||||||
|
; [section] ; section goes between []
|
||||||
|
; param=value ; assign values to parameters
|
||||||
|
|
||||||
|
config_version=4
|
||||||
|
|
||||||
|
_global_script_classes=[ {
|
||||||
|
"base": "",
|
||||||
|
"class": "KomputeSummator",
|
||||||
|
"language": "NativeScript",
|
||||||
|
"path": "res://godot_resources/scripts/KomputeNativeClass.gdns"
|
||||||
|
} ]
|
||||||
|
_global_script_class_icons={
|
||||||
|
"KomputeSummator": ""
|
||||||
|
}
|
||||||
|
|
||||||
|
[application]
|
||||||
|
|
||||||
|
config/name="KomputeGame"
|
||||||
|
run/main_scene="res://godot_resources/assets/DynamicExampleScene.tscn"
|
||||||
|
config/icon="res://godot_resources/assets/icon.png"
|
||||||
|
|
||||||
|
[rendering]
|
||||||
|
|
||||||
|
environment/default_environment="res://godot_resources/assets/default_env.tres"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue