mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-20 10:54:16 +01:00
Initial commit
This commit is contained in:
commit
00e63d71a9
16
build-win64.txt
Normal file
16
build-win64.txt
Normal file
@ -0,0 +1,16 @@
|
||||
[binaries]
|
||||
c = '/usr/bin/x86_64-w64-mingw32-gcc'
|
||||
cpp = '/usr/bin/x86_64-w64-mingw32-g++'
|
||||
ar = '/usr/bin/x86_64-w64-mingw32-ar'
|
||||
strip = '/usr/bin/x86_64-w64-mingw32-strip'
|
||||
exe_wrapper = 'wine'
|
||||
|
||||
[properties]
|
||||
cpp_args = ['-std=c++17']
|
||||
cpp_link_args = ['-static', '-static-libgcc', '-static-libstdc++']
|
||||
|
||||
[host_machine]
|
||||
system = 'windows'
|
||||
cpu_family = 'x86_64'
|
||||
cpu = 'x86_64'
|
||||
endian = 'little'
|
152
include/vulkan/vk_icd.h
Normal file
152
include/vulkan/vk_icd.h
Normal file
@ -0,0 +1,152 @@
|
||||
//
|
||||
// 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
|
||||
// flie 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_DISPLAY
|
||||
} 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 {
|
||||
ANativeWindow* window;
|
||||
} VkIcdSurfaceAndroid;
|
||||
#endif //VK_USE_PLATFORM_ANDROID_KHR
|
||||
|
||||
typedef struct {
|
||||
VkIcdSurfaceBase base;
|
||||
VkDisplayModeKHR displayMode;
|
||||
uint32_t planeIndex;
|
||||
uint32_t planeStackIndex;
|
||||
VkSurfaceTransformFlagBitsKHR transform;
|
||||
float globalAlpha;
|
||||
VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
|
||||
VkExtent2D imageExtent;
|
||||
} VkIcdSurfaceDisplay;
|
||||
|
||||
#endif // VKICD_H
|
143
include/vulkan/vk_layer.h
Normal file
143
include/vulkan/vk_layer.h
Normal file
@ -0,0 +1,143 @@
|
||||
//
|
||||
// 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
|
||||
|
||||
// Definition for VkLayerDispatchTable and VkLayerInstanceDispatchTable now appear in externally generated header
|
||||
#include "vk_layer_dispatch_table.h"
|
||||
|
||||
#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
|
||||
|
||||
// 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
|
||||
} 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 struct {
|
||||
VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
|
||||
const void *pNext;
|
||||
VkLayerFunction function;
|
||||
union {
|
||||
VkLayerInstanceLink *pLayerInfo;
|
||||
PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData;
|
||||
} 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);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
120
include/vulkan/vk_platform.h
Normal file
120
include/vulkan/vk_platform.h
Normal file
@ -0,0 +1,120 @@
|
||||
//
|
||||
// File: vk_platform.h
|
||||
//
|
||||
/*
|
||||
** Copyright (c) 2014-2017 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef VK_PLATFORM_H_
|
||||
#define VK_PLATFORM_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif // __cplusplus
|
||||
|
||||
/*
|
||||
***************************************************************************************************
|
||||
* Platform-specific directives and type declarations
|
||||
***************************************************************************************************
|
||||
*/
|
||||
|
||||
/* Platform-specific calling convention macros.
|
||||
*
|
||||
* Platforms should define these so that Vulkan clients call Vulkan commands
|
||||
* with the same calling conventions that the Vulkan implementation expects.
|
||||
*
|
||||
* VKAPI_ATTR - Placed before the return type in function declarations.
|
||||
* Useful for C++11 and GCC/Clang-style function attribute syntax.
|
||||
* VKAPI_CALL - Placed after the return type in function declarations.
|
||||
* Useful for MSVC-style calling convention syntax.
|
||||
* VKAPI_PTR - Placed between the '(' and '*' in function pointer types.
|
||||
*
|
||||
* Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void);
|
||||
* Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
|
||||
*/
|
||||
#if defined(_WIN32)
|
||||
// On Windows, Vulkan commands use the stdcall convention
|
||||
#define VKAPI_ATTR
|
||||
#define VKAPI_CALL __stdcall
|
||||
#define VKAPI_PTR VKAPI_CALL
|
||||
#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
|
||||
#error "Vulkan isn't supported for the 'armeabi' NDK ABI"
|
||||
#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
|
||||
// On Android 32-bit ARM targets, Vulkan functions use the "hardfloat"
|
||||
// calling convention, i.e. float parameters are passed in registers. This
|
||||
// is true even if the rest of the application passes floats on the stack,
|
||||
// as it does by default when compiling for the armeabi-v7a NDK ABI.
|
||||
#define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
|
||||
#define VKAPI_CALL
|
||||
#define VKAPI_PTR VKAPI_ATTR
|
||||
#else
|
||||
// On other platforms, use the default calling convention
|
||||
#define VKAPI_ATTR
|
||||
#define VKAPI_CALL
|
||||
#define VKAPI_PTR
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#if !defined(VK_NO_STDINT_H)
|
||||
#if defined(_MSC_VER) && (_MSC_VER < 1600)
|
||||
typedef signed __int8 int8_t;
|
||||
typedef unsigned __int8 uint8_t;
|
||||
typedef signed __int16 int16_t;
|
||||
typedef unsigned __int16 uint16_t;
|
||||
typedef signed __int32 int32_t;
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef signed __int64 int64_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#endif // !defined(VK_NO_STDINT_H)
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif // __cplusplus
|
||||
|
||||
// Platform-specific headers required by platform window system extensions.
|
||||
// These are enabled prior to #including "vulkan.h". The same enable then
|
||||
// controls inclusion of the extension interfaces in vulkan.h.
|
||||
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
#include <android/native_window.h>
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_MIR_KHR
|
||||
#include <mir_toolkit/client_types.h>
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#include <wayland-client.h>
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
#include <X11/Xlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
#include <xcb/xcb.h>
|
||||
#endif
|
||||
|
||||
#endif
|
46
include/vulkan/vk_sdk_platform.h
Normal file
46
include/vulkan/vk_sdk_platform.h
Normal file
@ -0,0 +1,46 @@
|
||||
//
|
||||
// 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
|
||||
|
||||
#endif // VK_SDK_PLATFORM_H
|
6429
include/vulkan/vulkan.h
Normal file
6429
include/vulkan/vulkan.h
Normal file
@ -0,0 +1,6429 @@
|
||||
#ifndef VULKAN_H_
|
||||
#define VULKAN_H_ 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Copyright (c) 2015-2017 The Khronos Group Inc.
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
** This header is generated from the Khronos Vulkan XML API Registry.
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
#define VK_VERSION_1_0 1
|
||||
#include "vk_platform.h"
|
||||
|
||||
#define VK_MAKE_VERSION(major, minor, patch) \
|
||||
(((major) << 22) | ((minor) << 12) | (patch))
|
||||
|
||||
// DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead.
|
||||
//#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0
|
||||
|
||||
// Vulkan 1.0 version number
|
||||
#define VK_API_VERSION_1_0 VK_MAKE_VERSION(1, 0, 0)// Patch version should always be set to 0
|
||||
|
||||
#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
|
||||
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
|
||||
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
|
||||
// Version of this file
|
||||
#define VK_HEADER_VERSION 55
|
||||
|
||||
|
||||
#define VK_NULL_HANDLE 0
|
||||
|
||||
|
||||
|
||||
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
|
||||
|
||||
|
||||
#if !defined(VK_DEFINE_NON_DISPATCHABLE_HANDLE)
|
||||
#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
|
||||
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
|
||||
#else
|
||||
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
typedef uint32_t VkFlags;
|
||||
typedef uint32_t VkBool32;
|
||||
typedef uint64_t VkDeviceSize;
|
||||
typedef uint32_t VkSampleMask;
|
||||
|
||||
VK_DEFINE_HANDLE(VkInstance)
|
||||
VK_DEFINE_HANDLE(VkPhysicalDevice)
|
||||
VK_DEFINE_HANDLE(VkDevice)
|
||||
VK_DEFINE_HANDLE(VkQueue)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore)
|
||||
VK_DEFINE_HANDLE(VkCommandBuffer)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool)
|
||||
|
||||
#define VK_LOD_CLAMP_NONE 1000.0f
|
||||
#define VK_REMAINING_MIP_LEVELS (~0U)
|
||||
#define VK_REMAINING_ARRAY_LAYERS (~0U)
|
||||
#define VK_WHOLE_SIZE (~0ULL)
|
||||
#define VK_ATTACHMENT_UNUSED (~0U)
|
||||
#define VK_TRUE 1
|
||||
#define VK_FALSE 0
|
||||
#define VK_QUEUE_FAMILY_IGNORED (~0U)
|
||||
#define VK_SUBPASS_EXTERNAL (~0U)
|
||||
#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256
|
||||
#define VK_UUID_SIZE 16
|
||||
#define VK_MAX_MEMORY_TYPES 32
|
||||
#define VK_MAX_MEMORY_HEAPS 16
|
||||
#define VK_MAX_EXTENSION_NAME_SIZE 256
|
||||
#define VK_MAX_DESCRIPTION_SIZE 256
|
||||
|
||||
|
||||
typedef enum VkPipelineCacheHeaderVersion {
|
||||
VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1,
|
||||
VK_PIPELINE_CACHE_HEADER_VERSION_BEGIN_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
|
||||
VK_PIPELINE_CACHE_HEADER_VERSION_END_RANGE = VK_PIPELINE_CACHE_HEADER_VERSION_ONE,
|
||||
VK_PIPELINE_CACHE_HEADER_VERSION_RANGE_SIZE = (VK_PIPELINE_CACHE_HEADER_VERSION_ONE - VK_PIPELINE_CACHE_HEADER_VERSION_ONE + 1),
|
||||
VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkPipelineCacheHeaderVersion;
|
||||
|
||||
typedef enum VkResult {
|
||||
VK_SUCCESS = 0,
|
||||
VK_NOT_READY = 1,
|
||||
VK_TIMEOUT = 2,
|
||||
VK_EVENT_SET = 3,
|
||||
VK_EVENT_RESET = 4,
|
||||
VK_INCOMPLETE = 5,
|
||||
VK_ERROR_OUT_OF_HOST_MEMORY = -1,
|
||||
VK_ERROR_OUT_OF_DEVICE_MEMORY = -2,
|
||||
VK_ERROR_INITIALIZATION_FAILED = -3,
|
||||
VK_ERROR_DEVICE_LOST = -4,
|
||||
VK_ERROR_MEMORY_MAP_FAILED = -5,
|
||||
VK_ERROR_LAYER_NOT_PRESENT = -6,
|
||||
VK_ERROR_EXTENSION_NOT_PRESENT = -7,
|
||||
VK_ERROR_FEATURE_NOT_PRESENT = -8,
|
||||
VK_ERROR_INCOMPATIBLE_DRIVER = -9,
|
||||
VK_ERROR_TOO_MANY_OBJECTS = -10,
|
||||
VK_ERROR_FORMAT_NOT_SUPPORTED = -11,
|
||||
VK_ERROR_FRAGMENTED_POOL = -12,
|
||||
VK_ERROR_SURFACE_LOST_KHR = -1000000000,
|
||||
VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
|
||||
VK_SUBOPTIMAL_KHR = 1000001003,
|
||||
VK_ERROR_OUT_OF_DATE_KHR = -1000001004,
|
||||
VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001,
|
||||
VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
|
||||
VK_ERROR_INVALID_SHADER_NV = -1000012000,
|
||||
VK_ERROR_OUT_OF_POOL_MEMORY_KHR = -1000069000,
|
||||
VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = -1000072003,
|
||||
VK_RESULT_BEGIN_RANGE = VK_ERROR_FRAGMENTED_POOL,
|
||||
VK_RESULT_END_RANGE = VK_INCOMPLETE,
|
||||
VK_RESULT_RANGE_SIZE = (VK_INCOMPLETE - VK_ERROR_FRAGMENTED_POOL + 1),
|
||||
VK_RESULT_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkResult;
|
||||
|
||||
typedef enum VkStructureType {
|
||||
VK_STRUCTURE_TYPE_APPLICATION_INFO = 0,
|
||||
VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1,
|
||||
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2,
|
||||
VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3,
|
||||
VK_STRUCTURE_TYPE_SUBMIT_INFO = 4,
|
||||
VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5,
|
||||
VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6,
|
||||
VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7,
|
||||
VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8,
|
||||
VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9,
|
||||
VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10,
|
||||
VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11,
|
||||
VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12,
|
||||
VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13,
|
||||
VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14,
|
||||
VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15,
|
||||
VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27,
|
||||
VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28,
|
||||
VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30,
|
||||
VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31,
|
||||
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32,
|
||||
VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33,
|
||||
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34,
|
||||
VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35,
|
||||
VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36,
|
||||
VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37,
|
||||
VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38,
|
||||
VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39,
|
||||
VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40,
|
||||
VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41,
|
||||
VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42,
|
||||
VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43,
|
||||
VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44,
|
||||
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45,
|
||||
VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46,
|
||||
VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47,
|
||||
VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48,
|
||||
VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
|
||||
VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
|
||||
VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000,
|
||||
VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001,
|
||||
VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000,
|
||||
VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000,
|
||||
VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000,
|
||||
VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000,
|
||||
VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR = 1000007000,
|
||||
VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000,
|
||||
VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000,
|
||||
VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000,
|
||||
VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000,
|
||||
VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001,
|
||||
VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002,
|
||||
VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
|
||||
VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001,
|
||||
VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002,
|
||||
VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000,
|
||||
VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHX = 1000053000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHX = 1000053001,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHX = 1000053002,
|
||||
VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000,
|
||||
VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001,
|
||||
VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000,
|
||||
VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001,
|
||||
VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = 1000059000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = 1000059001,
|
||||
VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = 1000059002,
|
||||
VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = 1000059003,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = 1000059004,
|
||||
VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = 1000059005,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = 1000059006,
|
||||
VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = 1000059007,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = 1000059008,
|
||||
VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHX = 1000060000,
|
||||
VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHX = 1000060001,
|
||||
VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHX = 1000060002,
|
||||
VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHX = 1000060003,
|
||||
VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHX = 1000060004,
|
||||
VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHX = 1000060005,
|
||||
VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHX = 1000060006,
|
||||
VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHX = 1000060007,
|
||||
VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHX = 1000060008,
|
||||
VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHX = 1000060009,
|
||||
VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHX = 1000060010,
|
||||
VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHX = 1000060011,
|
||||
VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHX = 1000060012,
|
||||
VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000,
|
||||
VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHX = 1000070000,
|
||||
VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHX = 1000070001,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = 1000071000,
|
||||
VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = 1000071001,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = 1000071002,
|
||||
VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = 1000071003,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = 1000071004,
|
||||
VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = 1000072000,
|
||||
VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = 1000072001,
|
||||
VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = 1000072002,
|
||||
VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000,
|
||||
VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001,
|
||||
VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002,
|
||||
VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003,
|
||||
VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000,
|
||||
VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001,
|
||||
VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002,
|
||||
VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = 1000076000,
|
||||
VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = 1000076001,
|
||||
VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = 1000077000,
|
||||
VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000,
|
||||
VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001,
|
||||
VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002,
|
||||
VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003,
|
||||
VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000,
|
||||
VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = 1000083000,
|
||||
VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000,
|
||||
VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = 1000085000,
|
||||
VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX = 1000086000,
|
||||
VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX = 1000086001,
|
||||
VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX = 1000086002,
|
||||
VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX = 1000086003,
|
||||
VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX = 1000086004,
|
||||
VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX = 1000086005,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000,
|
||||
VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = 1000090000,
|
||||
VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000,
|
||||
VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001,
|
||||
VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002,
|
||||
VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003,
|
||||
VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001,
|
||||
VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000,
|
||||
VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = 1000112000,
|
||||
VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = 1000112001,
|
||||
VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = 1000113000,
|
||||
VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000,
|
||||
VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001,
|
||||
VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002,
|
||||
VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000,
|
||||
VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000,
|
||||
VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001,
|
||||
VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = 1000120000,
|
||||
VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000,
|
||||
VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000,
|
||||
VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = 1000127000,
|
||||
VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = 1000127001,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = 1000130000,
|
||||
VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = 1000130001,
|
||||
VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146000,
|
||||
VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146001,
|
||||
VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = 1000146002,
|
||||
VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = 1000146003,
|
||||
VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = 1000146004,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000,
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000,
|
||||
VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000,
|
||||
VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
|
||||
VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO,
|
||||
VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1),
|
||||
VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkStructureType;
|
||||
|
||||
typedef enum VkSystemAllocationScope {
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_BEGIN_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_COMMAND,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_END_RANGE = VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE,
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_RANGE_SIZE = (VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE - VK_SYSTEM_ALLOCATION_SCOPE_COMMAND + 1),
|
||||
VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkSystemAllocationScope;
|
||||
|
||||
typedef enum VkInternalAllocationType {
|
||||
VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
|
||||
VK_INTERNAL_ALLOCATION_TYPE_BEGIN_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
|
||||
VK_INTERNAL_ALLOCATION_TYPE_END_RANGE = VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE,
|
||||
VK_INTERNAL_ALLOCATION_TYPE_RANGE_SIZE = (VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE - VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE + 1),
|
||||
VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkInternalAllocationType;
|
||||
|
||||
typedef enum VkFormat {
|
||||
VK_FORMAT_UNDEFINED = 0,
|
||||
VK_FORMAT_R4G4_UNORM_PACK8 = 1,
|
||||
VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2,
|
||||
VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3,
|
||||
VK_FORMAT_R5G6B5_UNORM_PACK16 = 4,
|
||||
VK_FORMAT_B5G6R5_UNORM_PACK16 = 5,
|
||||
VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6,
|
||||
VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7,
|
||||
VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8,
|
||||
VK_FORMAT_R8_UNORM = 9,
|
||||
VK_FORMAT_R8_SNORM = 10,
|
||||
VK_FORMAT_R8_USCALED = 11,
|
||||
VK_FORMAT_R8_SSCALED = 12,
|
||||
VK_FORMAT_R8_UINT = 13,
|
||||
VK_FORMAT_R8_SINT = 14,
|
||||
VK_FORMAT_R8_SRGB = 15,
|
||||
VK_FORMAT_R8G8_UNORM = 16,
|
||||
VK_FORMAT_R8G8_SNORM = 17,
|
||||
VK_FORMAT_R8G8_USCALED = 18,
|
||||
VK_FORMAT_R8G8_SSCALED = 19,
|
||||
VK_FORMAT_R8G8_UINT = 20,
|
||||
VK_FORMAT_R8G8_SINT = 21,
|
||||
VK_FORMAT_R8G8_SRGB = 22,
|
||||
VK_FORMAT_R8G8B8_UNORM = 23,
|
||||
VK_FORMAT_R8G8B8_SNORM = 24,
|
||||
VK_FORMAT_R8G8B8_USCALED = 25,
|
||||
VK_FORMAT_R8G8B8_SSCALED = 26,
|
||||
VK_FORMAT_R8G8B8_UINT = 27,
|
||||
VK_FORMAT_R8G8B8_SINT = 28,
|
||||
VK_FORMAT_R8G8B8_SRGB = 29,
|
||||
VK_FORMAT_B8G8R8_UNORM = 30,
|
||||
VK_FORMAT_B8G8R8_SNORM = 31,
|
||||
VK_FORMAT_B8G8R8_USCALED = 32,
|
||||
VK_FORMAT_B8G8R8_SSCALED = 33,
|
||||
VK_FORMAT_B8G8R8_UINT = 34,
|
||||
VK_FORMAT_B8G8R8_SINT = 35,
|
||||
VK_FORMAT_B8G8R8_SRGB = 36,
|
||||
VK_FORMAT_R8G8B8A8_UNORM = 37,
|
||||
VK_FORMAT_R8G8B8A8_SNORM = 38,
|
||||
VK_FORMAT_R8G8B8A8_USCALED = 39,
|
||||
VK_FORMAT_R8G8B8A8_SSCALED = 40,
|
||||
VK_FORMAT_R8G8B8A8_UINT = 41,
|
||||
VK_FORMAT_R8G8B8A8_SINT = 42,
|
||||
VK_FORMAT_R8G8B8A8_SRGB = 43,
|
||||
VK_FORMAT_B8G8R8A8_UNORM = 44,
|
||||
VK_FORMAT_B8G8R8A8_SNORM = 45,
|
||||
VK_FORMAT_B8G8R8A8_USCALED = 46,
|
||||
VK_FORMAT_B8G8R8A8_SSCALED = 47,
|
||||
VK_FORMAT_B8G8R8A8_UINT = 48,
|
||||
VK_FORMAT_B8G8R8A8_SINT = 49,
|
||||
VK_FORMAT_B8G8R8A8_SRGB = 50,
|
||||
VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51,
|
||||
VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52,
|
||||
VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53,
|
||||
VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54,
|
||||
VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55,
|
||||
VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56,
|
||||
VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57,
|
||||
VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58,
|
||||
VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59,
|
||||
VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60,
|
||||
VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61,
|
||||
VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62,
|
||||
VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63,
|
||||
VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64,
|
||||
VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65,
|
||||
VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66,
|
||||
VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67,
|
||||
VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68,
|
||||
VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69,
|
||||
VK_FORMAT_R16_UNORM = 70,
|
||||
VK_FORMAT_R16_SNORM = 71,
|
||||
VK_FORMAT_R16_USCALED = 72,
|
||||
VK_FORMAT_R16_SSCALED = 73,
|
||||
VK_FORMAT_R16_UINT = 74,
|
||||
VK_FORMAT_R16_SINT = 75,
|
||||
VK_FORMAT_R16_SFLOAT = 76,
|
||||
VK_FORMAT_R16G16_UNORM = 77,
|
||||
VK_FORMAT_R16G16_SNORM = 78,
|
||||
VK_FORMAT_R16G16_USCALED = 79,
|
||||
VK_FORMAT_R16G16_SSCALED = 80,
|
||||
VK_FORMAT_R16G16_UINT = 81,
|
||||
VK_FORMAT_R16G16_SINT = 82,
|
||||
VK_FORMAT_R16G16_SFLOAT = 83,
|
||||
VK_FORMAT_R16G16B16_UNORM = 84,
|
||||
VK_FORMAT_R16G16B16_SNORM = 85,
|
||||
VK_FORMAT_R16G16B16_USCALED = 86,
|
||||
VK_FORMAT_R16G16B16_SSCALED = 87,
|
||||
VK_FORMAT_R16G16B16_UINT = 88,
|
||||
VK_FORMAT_R16G16B16_SINT = 89,
|
||||
VK_FORMAT_R16G16B16_SFLOAT = 90,
|
||||
VK_FORMAT_R16G16B16A16_UNORM = 91,
|
||||
VK_FORMAT_R16G16B16A16_SNORM = 92,
|
||||
VK_FORMAT_R16G16B16A16_USCALED = 93,
|
||||
VK_FORMAT_R16G16B16A16_SSCALED = 94,
|
||||
VK_FORMAT_R16G16B16A16_UINT = 95,
|
||||
VK_FORMAT_R16G16B16A16_SINT = 96,
|
||||
VK_FORMAT_R16G16B16A16_SFLOAT = 97,
|
||||
VK_FORMAT_R32_UINT = 98,
|
||||
VK_FORMAT_R32_SINT = 99,
|
||||
VK_FORMAT_R32_SFLOAT = 100,
|
||||
VK_FORMAT_R32G32_UINT = 101,
|
||||
VK_FORMAT_R32G32_SINT = 102,
|
||||
VK_FORMAT_R32G32_SFLOAT = 103,
|
||||
VK_FORMAT_R32G32B32_UINT = 104,
|
||||
VK_FORMAT_R32G32B32_SINT = 105,
|
||||
VK_FORMAT_R32G32B32_SFLOAT = 106,
|
||||
VK_FORMAT_R32G32B32A32_UINT = 107,
|
||||
VK_FORMAT_R32G32B32A32_SINT = 108,
|
||||
VK_FORMAT_R32G32B32A32_SFLOAT = 109,
|
||||
VK_FORMAT_R64_UINT = 110,
|
||||
VK_FORMAT_R64_SINT = 111,
|
||||
VK_FORMAT_R64_SFLOAT = 112,
|
||||
VK_FORMAT_R64G64_UINT = 113,
|
||||
VK_FORMAT_R64G64_SINT = 114,
|
||||
VK_FORMAT_R64G64_SFLOAT = 115,
|
||||
VK_FORMAT_R64G64B64_UINT = 116,
|
||||
VK_FORMAT_R64G64B64_SINT = 117,
|
||||
VK_FORMAT_R64G64B64_SFLOAT = 118,
|
||||
VK_FORMAT_R64G64B64A64_UINT = 119,
|
||||
VK_FORMAT_R64G64B64A64_SINT = 120,
|
||||
VK_FORMAT_R64G64B64A64_SFLOAT = 121,
|
||||
VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122,
|
||||
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123,
|
||||
VK_FORMAT_D16_UNORM = 124,
|
||||
VK_FORMAT_X8_D24_UNORM_PACK32 = 125,
|
||||
VK_FORMAT_D32_SFLOAT = 126,
|
||||
VK_FORMAT_S8_UINT = 127,
|
||||
VK_FORMAT_D16_UNORM_S8_UINT = 128,
|
||||
VK_FORMAT_D24_UNORM_S8_UINT = 129,
|
||||
VK_FORMAT_D32_SFLOAT_S8_UINT = 130,
|
||||
VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131,
|
||||
VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132,
|
||||
VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133,
|
||||
VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134,
|
||||
VK_FORMAT_BC2_UNORM_BLOCK = 135,
|
||||
VK_FORMAT_BC2_SRGB_BLOCK = 136,
|
||||
VK_FORMAT_BC3_UNORM_BLOCK = 137,
|
||||
VK_FORMAT_BC3_SRGB_BLOCK = 138,
|
||||
VK_FORMAT_BC4_UNORM_BLOCK = 139,
|
||||
VK_FORMAT_BC4_SNORM_BLOCK = 140,
|
||||
VK_FORMAT_BC5_UNORM_BLOCK = 141,
|
||||
VK_FORMAT_BC5_SNORM_BLOCK = 142,
|
||||
VK_FORMAT_BC6H_UFLOAT_BLOCK = 143,
|
||||
VK_FORMAT_BC6H_SFLOAT_BLOCK = 144,
|
||||
VK_FORMAT_BC7_UNORM_BLOCK = 145,
|
||||
VK_FORMAT_BC7_SRGB_BLOCK = 146,
|
||||
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147,
|
||||
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148,
|
||||
VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149,
|
||||
VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150,
|
||||
VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151,
|
||||
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152,
|
||||
VK_FORMAT_EAC_R11_UNORM_BLOCK = 153,
|
||||
VK_FORMAT_EAC_R11_SNORM_BLOCK = 154,
|
||||
VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155,
|
||||
VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156,
|
||||
VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157,
|
||||
VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158,
|
||||
VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159,
|
||||
VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160,
|
||||
VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161,
|
||||
VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162,
|
||||
VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163,
|
||||
VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164,
|
||||
VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165,
|
||||
VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166,
|
||||
VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167,
|
||||
VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168,
|
||||
VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169,
|
||||
VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170,
|
||||
VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171,
|
||||
VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172,
|
||||
VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173,
|
||||
VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174,
|
||||
VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175,
|
||||
VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176,
|
||||
VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177,
|
||||
VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178,
|
||||
VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179,
|
||||
VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180,
|
||||
VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181,
|
||||
VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182,
|
||||
VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183,
|
||||
VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184,
|
||||
VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000,
|
||||
VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001,
|
||||
VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002,
|
||||
VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003,
|
||||
VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004,
|
||||
VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005,
|
||||
VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006,
|
||||
VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007,
|
||||
VK_FORMAT_BEGIN_RANGE = VK_FORMAT_UNDEFINED,
|
||||
VK_FORMAT_END_RANGE = VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
|
||||
VK_FORMAT_RANGE_SIZE = (VK_FORMAT_ASTC_12x12_SRGB_BLOCK - VK_FORMAT_UNDEFINED + 1),
|
||||
VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkFormat;
|
||||
|
||||
typedef enum VkImageType {
|
||||
VK_IMAGE_TYPE_1D = 0,
|
||||
VK_IMAGE_TYPE_2D = 1,
|
||||
VK_IMAGE_TYPE_3D = 2,
|
||||
VK_IMAGE_TYPE_BEGIN_RANGE = VK_IMAGE_TYPE_1D,
|
||||
VK_IMAGE_TYPE_END_RANGE = VK_IMAGE_TYPE_3D,
|
||||
VK_IMAGE_TYPE_RANGE_SIZE = (VK_IMAGE_TYPE_3D - VK_IMAGE_TYPE_1D + 1),
|
||||
VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkImageType;
|
||||
|
||||
typedef enum VkImageTiling {
|
||||
VK_IMAGE_TILING_OPTIMAL = 0,
|
||||
VK_IMAGE_TILING_LINEAR = 1,
|
||||
VK_IMAGE_TILING_BEGIN_RANGE = VK_IMAGE_TILING_OPTIMAL,
|
||||
VK_IMAGE_TILING_END_RANGE = VK_IMAGE_TILING_LINEAR,
|
||||
VK_IMAGE_TILING_RANGE_SIZE = (VK_IMAGE_TILING_LINEAR - VK_IMAGE_TILING_OPTIMAL + 1),
|
||||
VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkImageTiling;
|
||||
|
||||
typedef enum VkPhysicalDeviceType {
|
||||
VK_PHYSICAL_DEVICE_TYPE_OTHER = 0,
|
||||
VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1,
|
||||
VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2,
|
||||
VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3,
|
||||
VK_PHYSICAL_DEVICE_TYPE_CPU = 4,
|
||||
VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE = VK_PHYSICAL_DEVICE_TYPE_OTHER,
|
||||
VK_PHYSICAL_DEVICE_TYPE_END_RANGE = VK_PHYSICAL_DEVICE_TYPE_CPU,
|
||||
VK_PHYSICAL_DEVICE_TYPE_RANGE_SIZE = (VK_PHYSICAL_DEVICE_TYPE_CPU - VK_PHYSICAL_DEVICE_TYPE_OTHER + 1),
|
||||
VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkPhysicalDeviceType;
|
||||
|
||||
typedef enum VkQueryType {
|
||||
VK_QUERY_TYPE_OCCLUSION = 0,
|
||||
VK_QUERY_TYPE_PIPELINE_STATISTICS = 1,
|
||||
VK_QUERY_TYPE_TIMESTAMP = 2,
|
||||
VK_QUERY_TYPE_BEGIN_RANGE = VK_QUERY_TYPE_OCCLUSION,
|
||||
VK_QUERY_TYPE_END_RANGE = VK_QUERY_TYPE_TIMESTAMP,
|
||||
VK_QUERY_TYPE_RANGE_SIZE = (VK_QUERY_TYPE_TIMESTAMP - VK_QUERY_TYPE_OCCLUSION + 1),
|
||||
VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkQueryType;
|
||||
|
||||
typedef enum VkSharingMode {
|
||||
VK_SHARING_MODE_EXCLUSIVE = 0,
|
||||
VK_SHARING_MODE_CONCURRENT = 1,
|
||||
VK_SHARING_MODE_BEGIN_RANGE = VK_SHARING_MODE_EXCLUSIVE,
|
||||
VK_SHARING_MODE_END_RANGE = VK_SHARING_MODE_CONCURRENT,
|
||||
VK_SHARING_MODE_RANGE_SIZE = (VK_SHARING_MODE_CONCURRENT - VK_SHARING_MODE_EXCLUSIVE + 1),
|
||||
VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkSharingMode;
|
||||
|
||||
typedef enum VkImageLayout {
|
||||
VK_IMAGE_LAYOUT_UNDEFINED = 0,
|
||||
VK_IMAGE_LAYOUT_GENERAL = 1,
|
||||
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2,
|
||||
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3,
|
||||
VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
|
||||
VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
|
||||
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
|
||||
VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000,
|
||||
VK_IMAGE_LAYOUT_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_PREINITIALIZED,
|
||||
VK_IMAGE_LAYOUT_RANGE_SIZE = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1),
|
||||
VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkImageLayout;
|
||||
|
||||
typedef enum VkImageViewType {
|
||||
VK_IMAGE_VIEW_TYPE_1D = 0,
|
||||
VK_IMAGE_VIEW_TYPE_2D = 1,
|
||||
VK_IMAGE_VIEW_TYPE_3D = 2,
|
||||
VK_IMAGE_VIEW_TYPE_CUBE = 3,
|
||||
VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4,
|
||||
VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5,
|
||||
VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6,
|
||||
VK_IMAGE_VIEW_TYPE_BEGIN_RANGE = VK_IMAGE_VIEW_TYPE_1D,
|
||||
VK_IMAGE_VIEW_TYPE_END_RANGE = VK_IMAGE_VIEW_TYPE_CUBE_ARRAY,
|
||||
VK_IMAGE_VIEW_TYPE_RANGE_SIZE = (VK_IMAGE_VIEW_TYPE_CUBE_ARRAY - VK_IMAGE_VIEW_TYPE_1D + 1),
|
||||
VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkImageViewType;
|
||||
|
||||
typedef enum VkComponentSwizzle {
|
||||
VK_COMPONENT_SWIZZLE_IDENTITY = 0,
|
||||
VK_COMPONENT_SWIZZLE_ZERO = 1,
|
||||
VK_COMPONENT_SWIZZLE_ONE = 2,
|
||||
VK_COMPONENT_SWIZZLE_R = 3,
|
||||
VK_COMPONENT_SWIZZLE_G = 4,
|
||||
VK_COMPONENT_SWIZZLE_B = 5,
|
||||
VK_COMPONENT_SWIZZLE_A = 6,
|
||||
VK_COMPONENT_SWIZZLE_BEGIN_RANGE = VK_COMPONENT_SWIZZLE_IDENTITY,
|
||||
VK_COMPONENT_SWIZZLE_END_RANGE = VK_COMPONENT_SWIZZLE_A,
|
||||
VK_COMPONENT_SWIZZLE_RANGE_SIZE = (VK_COMPONENT_SWIZZLE_A - VK_COMPONENT_SWIZZLE_IDENTITY + 1),
|
||||
VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkComponentSwizzle;
|
||||
|
||||
typedef enum VkVertexInputRate {
|
||||
VK_VERTEX_INPUT_RATE_VERTEX = 0,
|
||||
VK_VERTEX_INPUT_RATE_INSTANCE = 1,
|
||||
VK_VERTEX_INPUT_RATE_BEGIN_RANGE = VK_VERTEX_INPUT_RATE_VERTEX,
|
||||
VK_VERTEX_INPUT_RATE_END_RANGE = VK_VERTEX_INPUT_RATE_INSTANCE,
|
||||
VK_VERTEX_INPUT_RATE_RANGE_SIZE = (VK_VERTEX_INPUT_RATE_INSTANCE - VK_VERTEX_INPUT_RATE_VERTEX + 1),
|
||||
VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkVertexInputRate;
|
||||
|
||||
typedef enum VkPrimitiveTopology {
|
||||
VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0,
|
||||
VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1,
|
||||
VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2,
|
||||
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3,
|
||||
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4,
|
||||
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5,
|
||||
VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6,
|
||||
VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7,
|
||||
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8,
|
||||
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9,
|
||||
VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10,
|
||||
VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE = VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
|
||||
VK_PRIMITIVE_TOPOLOGY_END_RANGE = VK_PRIMITIVE_TOPOLOGY_PATCH_LIST,
|
||||
VK_PRIMITIVE_TOPOLOGY_RANGE_SIZE = (VK_PRIMITIVE_TOPOLOGY_PATCH_LIST - VK_PRIMITIVE_TOPOLOGY_POINT_LIST + 1),
|
||||
VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkPrimitiveTopology;
|
||||
|
||||
typedef enum VkPolygonMode {
|
||||
VK_POLYGON_MODE_FILL = 0,
|
||||
VK_POLYGON_MODE_LINE = 1,
|
||||
VK_POLYGON_MODE_POINT = 2,
|
||||
VK_POLYGON_MODE_FILL_RECTANGLE_NV = 1000153000,
|
||||
VK_POLYGON_MODE_BEGIN_RANGE = VK_POLYGON_MODE_FILL,
|
||||
VK_POLYGON_MODE_END_RANGE = VK_POLYGON_MODE_POINT,
|
||||
VK_POLYGON_MODE_RANGE_SIZE = (VK_POLYGON_MODE_POINT - VK_POLYGON_MODE_FILL + 1),
|
||||
VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkPolygonMode;
|
||||
|
||||
typedef enum VkFrontFace {
|
||||
VK_FRONT_FACE_COUNTER_CLOCKWISE = 0,
|
||||
VK_FRONT_FACE_CLOCKWISE = 1,
|
||||
VK_FRONT_FACE_BEGIN_RANGE = VK_FRONT_FACE_COUNTER_CLOCKWISE,
|
||||
VK_FRONT_FACE_END_RANGE = VK_FRONT_FACE_CLOCKWISE,
|
||||
VK_FRONT_FACE_RANGE_SIZE = (VK_FRONT_FACE_CLOCKWISE - VK_FRONT_FACE_COUNTER_CLOCKWISE + 1),
|
||||
VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkFrontFace;
|
||||
|
||||
typedef enum VkCompareOp {
|
||||
VK_COMPARE_OP_NEVER = 0,
|
||||
VK_COMPARE_OP_LESS = 1,
|
||||
VK_COMPARE_OP_EQUAL = 2,
|
||||
VK_COMPARE_OP_LESS_OR_EQUAL = 3,
|
||||
VK_COMPARE_OP_GREATER = 4,
|
||||
VK_COMPARE_OP_NOT_EQUAL = 5,
|
||||
VK_COMPARE_OP_GREATER_OR_EQUAL = 6,
|
||||
VK_COMPARE_OP_ALWAYS = 7,
|
||||
VK_COMPARE_OP_BEGIN_RANGE = VK_COMPARE_OP_NEVER,
|
||||
VK_COMPARE_OP_END_RANGE = VK_COMPARE_OP_ALWAYS,
|
||||
VK_COMPARE_OP_RANGE_SIZE = (VK_COMPARE_OP_ALWAYS - VK_COMPARE_OP_NEVER + 1),
|
||||
VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkCompareOp;
|
||||
|
||||
typedef enum VkStencilOp {
|
||||
VK_STENCIL_OP_KEEP = 0,
|
||||
VK_STENCIL_OP_ZERO = 1,
|
||||
VK_STENCIL_OP_REPLACE = 2,
|
||||
VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3,
|
||||
VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4,
|
||||
VK_STENCIL_OP_INVERT = 5,
|
||||
VK_STENCIL_OP_INCREMENT_AND_WRAP = 6,
|
||||
VK_STENCIL_OP_DECREMENT_AND_WRAP = 7,
|
||||
VK_STENCIL_OP_BEGIN_RANGE = VK_STENCIL_OP_KEEP,
|
||||
VK_STENCIL_OP_END_RANGE = VK_STENCIL_OP_DECREMENT_AND_WRAP,
|
||||
VK_STENCIL_OP_RANGE_SIZE = (VK_STENCIL_OP_DECREMENT_AND_WRAP - VK_STENCIL_OP_KEEP + 1),
|
||||
VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkStencilOp;
|
||||
|
||||
typedef enum VkLogicOp {
|
||||
VK_LOGIC_OP_CLEAR = 0,
|
||||
VK_LOGIC_OP_AND = 1,
|
||||
VK_LOGIC_OP_AND_REVERSE = 2,
|
||||
VK_LOGIC_OP_COPY = 3,
|
||||
VK_LOGIC_OP_AND_INVERTED = 4,
|
||||
VK_LOGIC_OP_NO_OP = 5,
|
||||
VK_LOGIC_OP_XOR = 6,
|
||||
VK_LOGIC_OP_OR = 7,
|
||||
VK_LOGIC_OP_NOR = 8,
|
||||
VK_LOGIC_OP_EQUIVALENT = 9,
|
||||
VK_LOGIC_OP_INVERT = 10,
|
||||
VK_LOGIC_OP_OR_REVERSE = 11,
|
||||
VK_LOGIC_OP_COPY_INVERTED = 12,
|
||||
VK_LOGIC_OP_OR_INVERTED = 13,
|
||||
VK_LOGIC_OP_NAND = 14,
|
||||
VK_LOGIC_OP_SET = 15,
|
||||
VK_LOGIC_OP_BEGIN_RANGE = VK_LOGIC_OP_CLEAR,
|
||||
VK_LOGIC_OP_END_RANGE = VK_LOGIC_OP_SET,
|
||||
VK_LOGIC_OP_RANGE_SIZE = (VK_LOGIC_OP_SET - VK_LOGIC_OP_CLEAR + 1),
|
||||
VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkLogicOp;
|
||||
|
||||
typedef enum VkBlendFactor {
|
||||
VK_BLEND_FACTOR_ZERO = 0,
|
||||
VK_BLEND_FACTOR_ONE = 1,
|
||||
VK_BLEND_FACTOR_SRC_COLOR = 2,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3,
|
||||
VK_BLEND_FACTOR_DST_COLOR = 4,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5,
|
||||
VK_BLEND_FACTOR_SRC_ALPHA = 6,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7,
|
||||
VK_BLEND_FACTOR_DST_ALPHA = 8,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9,
|
||||
VK_BLEND_FACTOR_CONSTANT_COLOR = 10,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11,
|
||||
VK_BLEND_FACTOR_CONSTANT_ALPHA = 12,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13,
|
||||
VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14,
|
||||
VK_BLEND_FACTOR_SRC1_COLOR = 15,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16,
|
||||
VK_BLEND_FACTOR_SRC1_ALPHA = 17,
|
||||
VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18,
|
||||
VK_BLEND_FACTOR_BEGIN_RANGE = VK_BLEND_FACTOR_ZERO,
|
||||
VK_BLEND_FACTOR_END_RANGE = VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA,
|
||||
VK_BLEND_FACTOR_RANGE_SIZE = (VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA - VK_BLEND_FACTOR_ZERO + 1),
|
||||
VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkBlendFactor;
|
||||
|
||||
typedef enum VkBlendOp {
|
||||
VK_BLEND_OP_ADD = 0,
|
||||
VK_BLEND_OP_SUBTRACT = 1,
|
||||
VK_BLEND_OP_REVERSE_SUBTRACT = 2,
|
||||
VK_BLEND_OP_MIN = 3,
|
||||
VK_BLEND_OP_MAX = 4,
|
||||
VK_BLEND_OP_ZERO_EXT = 1000148000,
|
||||
VK_BLEND_OP_SRC_EXT = 1000148001,
|
||||
VK_BLEND_OP_DST_EXT = 1000148002,
|
||||
VK_BLEND_OP_SRC_OVER_EXT = 1000148003,
|
||||
VK_BLEND_OP_DST_OVER_EXT = 1000148004,
|
||||
VK_BLEND_OP_SRC_IN_EXT = 1000148005,
|
||||
VK_BLEND_OP_DST_IN_EXT = 1000148006,
|
||||
VK_BLEND_OP_SRC_OUT_EXT = 1000148007,
|
||||
VK_BLEND_OP_DST_OUT_EXT = 1000148008,
|
||||
VK_BLEND_OP_SRC_ATOP_EXT = 1000148009,
|
||||
VK_BLEND_OP_DST_ATOP_EXT = 1000148010,
|
||||
VK_BLEND_OP_XOR_EXT = 1000148011,
|
||||
VK_BLEND_OP_MULTIPLY_EXT = 1000148012,
|
||||
VK_BLEND_OP_SCREEN_EXT = 1000148013,
|
||||
VK_BLEND_OP_OVERLAY_EXT = 1000148014,
|
||||
VK_BLEND_OP_DARKEN_EXT = 1000148015,
|
||||
VK_BLEND_OP_LIGHTEN_EXT = 1000148016,
|
||||
VK_BLEND_OP_COLORDODGE_EXT = 1000148017,
|
||||
VK_BLEND_OP_COLORBURN_EXT = 1000148018,
|
||||
VK_BLEND_OP_HARDLIGHT_EXT = 1000148019,
|
||||
VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020,
|
||||
VK_BLEND_OP_DIFFERENCE_EXT = 1000148021,
|
||||
VK_BLEND_OP_EXCLUSION_EXT = 1000148022,
|
||||
VK_BLEND_OP_INVERT_EXT = 1000148023,
|
||||
VK_BLEND_OP_INVERT_RGB_EXT = 1000148024,
|
||||
VK_BLEND_OP_LINEARDODGE_EXT = 1000148025,
|
||||
VK_BLEND_OP_LINEARBURN_EXT = 1000148026,
|
||||
VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027,
|
||||
VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028,
|
||||
VK_BLEND_OP_PINLIGHT_EXT = 1000148029,
|
||||
VK_BLEND_OP_HARDMIX_EXT = 1000148030,
|
||||
VK_BLEND_OP_HSL_HUE_EXT = 1000148031,
|
||||
VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032,
|
||||
VK_BLEND_OP_HSL_COLOR_EXT = 1000148033,
|
||||
VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034,
|
||||
VK_BLEND_OP_PLUS_EXT = 1000148035,
|
||||
VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036,
|
||||
VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037,
|
||||
VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038,
|
||||
VK_BLEND_OP_MINUS_EXT = 1000148039,
|
||||
VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040,
|
||||
VK_BLEND_OP_CONTRAST_EXT = 1000148041,
|
||||
VK_BLEND_OP_INVERT_OVG_EXT = 1000148042,
|
||||
VK_BLEND_OP_RED_EXT = 1000148043,
|
||||
VK_BLEND_OP_GREEN_EXT = 1000148044,
|
||||
VK_BLEND_OP_BLUE_EXT = 1000148045,
|
||||
VK_BLEND_OP_BEGIN_RANGE = VK_BLEND_OP_ADD,
|
||||
VK_BLEND_OP_END_RANGE = VK_BLEND_OP_MAX,
|
||||
VK_BLEND_OP_RANGE_SIZE = (VK_BLEND_OP_MAX - VK_BLEND_OP_ADD + 1),
|
||||
VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkBlendOp;
|
||||
|
||||
typedef enum VkDynamicState {
|
||||
VK_DYNAMIC_STATE_VIEWPORT = 0,
|
||||
VK_DYNAMIC_STATE_SCISSOR = 1,
|
||||
VK_DYNAMIC_STATE_LINE_WIDTH = 2,
|
||||
VK_DYNAMIC_STATE_DEPTH_BIAS = 3,
|
||||
VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4,
|
||||
VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5,
|
||||
VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
|
||||
VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
|
||||
VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
|
||||
VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000,
|
||||
VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000,
|
||||
VK_DYNAMIC_STATE_BEGIN_RANGE = VK_DYNAMIC_STATE_VIEWPORT,
|
||||
VK_DYNAMIC_STATE_END_RANGE = VK_DYNAMIC_STATE_STENCIL_REFERENCE,
|
||||
VK_DYNAMIC_STATE_RANGE_SIZE = (VK_DYNAMIC_STATE_STENCIL_REFERENCE - VK_DYNAMIC_STATE_VIEWPORT + 1),
|
||||
VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkDynamicState;
|
||||
|
||||
typedef enum VkFilter {
|
||||
VK_FILTER_NEAREST = 0,
|
||||
VK_FILTER_LINEAR = 1,
|
||||
VK_FILTER_CUBIC_IMG = 1000015000,
|
||||
VK_FILTER_BEGIN_RANGE = VK_FILTER_NEAREST,
|
||||
VK_FILTER_END_RANGE = VK_FILTER_LINEAR,
|
||||
VK_FILTER_RANGE_SIZE = (VK_FILTER_LINEAR - VK_FILTER_NEAREST + 1),
|
||||
VK_FILTER_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkFilter;
|
||||
|
||||
typedef enum VkSamplerMipmapMode {
|
||||
VK_SAMPLER_MIPMAP_MODE_NEAREST = 0,
|
||||
VK_SAMPLER_MIPMAP_MODE_LINEAR = 1,
|
||||
VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE = VK_SAMPLER_MIPMAP_MODE_NEAREST,
|
||||
VK_SAMPLER_MIPMAP_MODE_END_RANGE = VK_SAMPLER_MIPMAP_MODE_LINEAR,
|
||||
VK_SAMPLER_MIPMAP_MODE_RANGE_SIZE = (VK_SAMPLER_MIPMAP_MODE_LINEAR - VK_SAMPLER_MIPMAP_MODE_NEAREST + 1),
|
||||
VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkSamplerMipmapMode;
|
||||
|
||||
typedef enum VkSamplerAddressMode {
|
||||
VK_SAMPLER_ADDRESS_MODE_REPEAT = 0,
|
||||
VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1,
|
||||
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2,
|
||||
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3,
|
||||
VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4,
|
||||
VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE = VK_SAMPLER_ADDRESS_MODE_REPEAT,
|
||||
VK_SAMPLER_ADDRESS_MODE_END_RANGE = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER,
|
||||
VK_SAMPLER_ADDRESS_MODE_RANGE_SIZE = (VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER - VK_SAMPLER_ADDRESS_MODE_REPEAT + 1),
|
||||
VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkSamplerAddressMode;
|
||||
|
||||
typedef enum VkBorderColor {
|
||||
VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0,
|
||||
VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1,
|
||||
VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2,
|
||||
VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3,
|
||||
VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4,
|
||||
VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5,
|
||||
VK_BORDER_COLOR_BEGIN_RANGE = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
|
||||
VK_BORDER_COLOR_END_RANGE = VK_BORDER_COLOR_INT_OPAQUE_WHITE,
|
||||
VK_BORDER_COLOR_RANGE_SIZE = (VK_BORDER_COLOR_INT_OPAQUE_WHITE - VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK + 1),
|
||||
VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkBorderColor;
|
||||
|
||||
typedef enum VkDescriptorType {
|
||||
VK_DESCRIPTOR_TYPE_SAMPLER = 0,
|
||||
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1,
|
||||
VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2,
|
||||
VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3,
|
||||
VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4,
|
||||
VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5,
|
||||
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6,
|
||||
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7,
|
||||
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
|
||||
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
|
||||
VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
|
||||
VK_DESCRIPTOR_TYPE_BEGIN_RANGE = VK_DESCRIPTOR_TYPE_SAMPLER,
|
||||
VK_DESCRIPTOR_TYPE_END_RANGE = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
|
||||
VK_DESCRIPTOR_TYPE_RANGE_SIZE = (VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT - VK_DESCRIPTOR_TYPE_SAMPLER + 1),
|
||||
VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkDescriptorType;
|
||||
|
||||
typedef enum VkAttachmentLoadOp {
|
||||
VK_ATTACHMENT_LOAD_OP_LOAD = 0,
|
||||
VK_ATTACHMENT_LOAD_OP_CLEAR = 1,
|
||||
VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2,
|
||||
VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||
VK_ATTACHMENT_LOAD_OP_END_RANGE = VK_ATTACHMENT_LOAD_OP_DONT_CARE,
|
||||
VK_ATTACHMENT_LOAD_OP_RANGE_SIZE = (VK_ATTACHMENT_LOAD_OP_DONT_CARE - VK_ATTACHMENT_LOAD_OP_LOAD + 1),
|
||||
VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkAttachmentLoadOp;
|
||||
|
||||
typedef enum VkAttachmentStoreOp {
|
||||
VK_ATTACHMENT_STORE_OP_STORE = 0,
|
||||
VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
|
||||
VK_ATTACHMENT_STORE_OP_BEGIN_RANGE = VK_ATTACHMENT_STORE_OP_STORE,
|
||||
VK_ATTACHMENT_STORE_OP_END_RANGE = VK_ATTACHMENT_STORE_OP_DONT_CARE,
|
||||
VK_ATTACHMENT_STORE_OP_RANGE_SIZE = (VK_ATTACHMENT_STORE_OP_DONT_CARE - VK_ATTACHMENT_STORE_OP_STORE + 1),
|
||||
VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkAttachmentStoreOp;
|
||||
|
||||
typedef enum VkPipelineBindPoint {
|
||||
VK_PIPELINE_BIND_POINT_GRAPHICS = 0,
|
||||
VK_PIPELINE_BIND_POINT_COMPUTE = 1,
|
||||
VK_PIPELINE_BIND_POINT_BEGIN_RANGE = VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||
VK_PIPELINE_BIND_POINT_END_RANGE = VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||
VK_PIPELINE_BIND_POINT_RANGE_SIZE = (VK_PIPELINE_BIND_POINT_COMPUTE - VK_PIPELINE_BIND_POINT_GRAPHICS + 1),
|
||||
VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkPipelineBindPoint;
|
||||
|
||||
typedef enum VkCommandBufferLevel {
|
||||
VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0,
|
||||
VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1,
|
||||
VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
|
||||
VK_COMMAND_BUFFER_LEVEL_END_RANGE = VK_COMMAND_BUFFER_LEVEL_SECONDARY,
|
||||
VK_COMMAND_BUFFER_LEVEL_RANGE_SIZE = (VK_COMMAND_BUFFER_LEVEL_SECONDARY - VK_COMMAND_BUFFER_LEVEL_PRIMARY + 1),
|
||||
VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkCommandBufferLevel;
|
||||
|
||||
typedef enum VkIndexType {
|
||||
VK_INDEX_TYPE_UINT16 = 0,
|
||||
VK_INDEX_TYPE_UINT32 = 1,
|
||||
VK_INDEX_TYPE_BEGIN_RANGE = VK_INDEX_TYPE_UINT16,
|
||||
VK_INDEX_TYPE_END_RANGE = VK_INDEX_TYPE_UINT32,
|
||||
VK_INDEX_TYPE_RANGE_SIZE = (VK_INDEX_TYPE_UINT32 - VK_INDEX_TYPE_UINT16 + 1),
|
||||
VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkIndexType;
|
||||
|
||||
typedef enum VkSubpassContents {
|
||||
VK_SUBPASS_CONTENTS_INLINE = 0,
|
||||
VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1,
|
||||
VK_SUBPASS_CONTENTS_BEGIN_RANGE = VK_SUBPASS_CONTENTS_INLINE,
|
||||
VK_SUBPASS_CONTENTS_END_RANGE = VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS,
|
||||
VK_SUBPASS_CONTENTS_RANGE_SIZE = (VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS - VK_SUBPASS_CONTENTS_INLINE + 1),
|
||||
VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkSubpassContents;
|
||||
|
||||
typedef enum VkObjectType {
|
||||
VK_OBJECT_TYPE_UNKNOWN = 0,
|
||||
VK_OBJECT_TYPE_INSTANCE = 1,
|
||||
VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2,
|
||||
VK_OBJECT_TYPE_DEVICE = 3,
|
||||
VK_OBJECT_TYPE_QUEUE = 4,
|
||||
VK_OBJECT_TYPE_SEMAPHORE = 5,
|
||||
VK_OBJECT_TYPE_COMMAND_BUFFER = 6,
|
||||
VK_OBJECT_TYPE_FENCE = 7,
|
||||
VK_OBJECT_TYPE_DEVICE_MEMORY = 8,
|
||||
VK_OBJECT_TYPE_BUFFER = 9,
|
||||
VK_OBJECT_TYPE_IMAGE = 10,
|
||||
VK_OBJECT_TYPE_EVENT = 11,
|
||||
VK_OBJECT_TYPE_QUERY_POOL = 12,
|
||||
VK_OBJECT_TYPE_BUFFER_VIEW = 13,
|
||||
VK_OBJECT_TYPE_IMAGE_VIEW = 14,
|
||||
VK_OBJECT_TYPE_SHADER_MODULE = 15,
|
||||
VK_OBJECT_TYPE_PIPELINE_CACHE = 16,
|
||||
VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17,
|
||||
VK_OBJECT_TYPE_RENDER_PASS = 18,
|
||||
VK_OBJECT_TYPE_PIPELINE = 19,
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20,
|
||||
VK_OBJECT_TYPE_SAMPLER = 21,
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22,
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_SET = 23,
|
||||
VK_OBJECT_TYPE_FRAMEBUFFER = 24,
|
||||
VK_OBJECT_TYPE_COMMAND_POOL = 25,
|
||||
VK_OBJECT_TYPE_SURFACE_KHR = 1000000000,
|
||||
VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000,
|
||||
VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
|
||||
VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001,
|
||||
VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000,
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = 1000085000,
|
||||
VK_OBJECT_TYPE_OBJECT_TABLE_NVX = 1000086000,
|
||||
VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX = 1000086001,
|
||||
VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_UNKNOWN,
|
||||
VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_COMMAND_POOL,
|
||||
VK_OBJECT_TYPE_RANGE_SIZE = (VK_OBJECT_TYPE_COMMAND_POOL - VK_OBJECT_TYPE_UNKNOWN + 1),
|
||||
VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkObjectType;
|
||||
|
||||
typedef VkFlags VkInstanceCreateFlags;
|
||||
|
||||
typedef enum VkFormatFeatureFlagBits {
|
||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001,
|
||||
VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002,
|
||||
VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004,
|
||||
VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008,
|
||||
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010,
|
||||
VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020,
|
||||
VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040,
|
||||
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080,
|
||||
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100,
|
||||
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200,
|
||||
VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400,
|
||||
VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800,
|
||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000,
|
||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000,
|
||||
VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = 0x00004000,
|
||||
VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = 0x00008000,
|
||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = 0x00010000,
|
||||
VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkFormatFeatureFlagBits;
|
||||
typedef VkFlags VkFormatFeatureFlags;
|
||||
|
||||
typedef enum VkImageUsageFlagBits {
|
||||
VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001,
|
||||
VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002,
|
||||
VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004,
|
||||
VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008,
|
||||
VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010,
|
||||
VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020,
|
||||
VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040,
|
||||
VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080,
|
||||
VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkImageUsageFlagBits;
|
||||
typedef VkFlags VkImageUsageFlags;
|
||||
|
||||
typedef enum VkImageCreateFlagBits {
|
||||
VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001,
|
||||
VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
|
||||
VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
|
||||
VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008,
|
||||
VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010,
|
||||
VK_IMAGE_CREATE_BIND_SFR_BIT_KHX = 0x00000040,
|
||||
VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = 0x00000020,
|
||||
VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkImageCreateFlagBits;
|
||||
typedef VkFlags VkImageCreateFlags;
|
||||
|
||||
typedef enum VkSampleCountFlagBits {
|
||||
VK_SAMPLE_COUNT_1_BIT = 0x00000001,
|
||||
VK_SAMPLE_COUNT_2_BIT = 0x00000002,
|
||||
VK_SAMPLE_COUNT_4_BIT = 0x00000004,
|
||||
VK_SAMPLE_COUNT_8_BIT = 0x00000008,
|
||||
VK_SAMPLE_COUNT_16_BIT = 0x00000010,
|
||||
VK_SAMPLE_COUNT_32_BIT = 0x00000020,
|
||||
VK_SAMPLE_COUNT_64_BIT = 0x00000040,
|
||||
VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkSampleCountFlagBits;
|
||||
typedef VkFlags VkSampleCountFlags;
|
||||
|
||||
typedef enum VkQueueFlagBits {
|
||||
VK_QUEUE_GRAPHICS_BIT = 0x00000001,
|
||||
VK_QUEUE_COMPUTE_BIT = 0x00000002,
|
||||
VK_QUEUE_TRANSFER_BIT = 0x00000004,
|
||||
VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
|
||||
VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkQueueFlagBits;
|
||||
typedef VkFlags VkQueueFlags;
|
||||
|
||||
typedef enum VkMemoryPropertyFlagBits {
|
||||
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001,
|
||||
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002,
|
||||
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004,
|
||||
VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008,
|
||||
VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010,
|
||||
VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkMemoryPropertyFlagBits;
|
||||
typedef VkFlags VkMemoryPropertyFlags;
|
||||
|
||||
typedef enum VkMemoryHeapFlagBits {
|
||||
VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
|
||||
VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHX = 0x00000002,
|
||||
VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkMemoryHeapFlagBits;
|
||||
typedef VkFlags VkMemoryHeapFlags;
|
||||
typedef VkFlags VkDeviceCreateFlags;
|
||||
typedef VkFlags VkDeviceQueueCreateFlags;
|
||||
|
||||
typedef enum VkPipelineStageFlagBits {
|
||||
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001,
|
||||
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002,
|
||||
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004,
|
||||
VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008,
|
||||
VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010,
|
||||
VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020,
|
||||
VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040,
|
||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080,
|
||||
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100,
|
||||
VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200,
|
||||
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400,
|
||||
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000,
|
||||
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000,
|
||||
VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
|
||||
VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
|
||||
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
|
||||
VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX = 0x00020000,
|
||||
VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkPipelineStageFlagBits;
|
||||
typedef VkFlags VkPipelineStageFlags;
|
||||
typedef VkFlags VkMemoryMapFlags;
|
||||
|
||||
typedef enum VkImageAspectFlagBits {
|
||||
VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001,
|
||||
VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002,
|
||||
VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004,
|
||||
VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008,
|
||||
VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkImageAspectFlagBits;
|
||||
typedef VkFlags VkImageAspectFlags;
|
||||
|
||||
typedef enum VkSparseImageFormatFlagBits {
|
||||
VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001,
|
||||
VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002,
|
||||
VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004,
|
||||
VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkSparseImageFormatFlagBits;
|
||||
typedef VkFlags VkSparseImageFormatFlags;
|
||||
|
||||
typedef enum VkSparseMemoryBindFlagBits {
|
||||
VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001,
|
||||
VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkSparseMemoryBindFlagBits;
|
||||
typedef VkFlags VkSparseMemoryBindFlags;
|
||||
|
||||
typedef enum VkFenceCreateFlagBits {
|
||||
VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001,
|
||||
VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkFenceCreateFlagBits;
|
||||
typedef VkFlags VkFenceCreateFlags;
|
||||
typedef VkFlags VkSemaphoreCreateFlags;
|
||||
typedef VkFlags VkEventCreateFlags;
|
||||
typedef VkFlags VkQueryPoolCreateFlags;
|
||||
|
||||
typedef enum VkQueryPipelineStatisticFlagBits {
|
||||
VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001,
|
||||
VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002,
|
||||
VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004,
|
||||
VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008,
|
||||
VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010,
|
||||
VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020,
|
||||
VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040,
|
||||
VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080,
|
||||
VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100,
|
||||
VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200,
|
||||
VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400,
|
||||
VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkQueryPipelineStatisticFlagBits;
|
||||
typedef VkFlags VkQueryPipelineStatisticFlags;
|
||||
|
||||
typedef enum VkQueryResultFlagBits {
|
||||
VK_QUERY_RESULT_64_BIT = 0x00000001,
|
||||
VK_QUERY_RESULT_WAIT_BIT = 0x00000002,
|
||||
VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004,
|
||||
VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008,
|
||||
VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkQueryResultFlagBits;
|
||||
typedef VkFlags VkQueryResultFlags;
|
||||
|
||||
typedef enum VkBufferCreateFlagBits {
|
||||
VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001,
|
||||
VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002,
|
||||
VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004,
|
||||
VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkBufferCreateFlagBits;
|
||||
typedef VkFlags VkBufferCreateFlags;
|
||||
|
||||
typedef enum VkBufferUsageFlagBits {
|
||||
VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
|
||||
VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
|
||||
VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
|
||||
VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
|
||||
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
|
||||
VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020,
|
||||
VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040,
|
||||
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080,
|
||||
VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100,
|
||||
VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkBufferUsageFlagBits;
|
||||
typedef VkFlags VkBufferUsageFlags;
|
||||
typedef VkFlags VkBufferViewCreateFlags;
|
||||
typedef VkFlags VkImageViewCreateFlags;
|
||||
typedef VkFlags VkShaderModuleCreateFlags;
|
||||
typedef VkFlags VkPipelineCacheCreateFlags;
|
||||
|
||||
typedef enum VkPipelineCreateFlagBits {
|
||||
VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
|
||||
VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
|
||||
VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
|
||||
VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHX = 0x00000008,
|
||||
VK_PIPELINE_CREATE_DISPATCH_BASE_KHX = 0x00000010,
|
||||
VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkPipelineCreateFlagBits;
|
||||
typedef VkFlags VkPipelineCreateFlags;
|
||||
typedef VkFlags VkPipelineShaderStageCreateFlags;
|
||||
|
||||
typedef enum VkShaderStageFlagBits {
|
||||
VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
|
||||
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
|
||||
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
|
||||
VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
|
||||
VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
|
||||
VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020,
|
||||
VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F,
|
||||
VK_SHADER_STAGE_ALL = 0x7FFFFFFF,
|
||||
VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkShaderStageFlagBits;
|
||||
typedef VkFlags VkPipelineVertexInputStateCreateFlags;
|
||||
typedef VkFlags VkPipelineInputAssemblyStateCreateFlags;
|
||||
typedef VkFlags VkPipelineTessellationStateCreateFlags;
|
||||
typedef VkFlags VkPipelineViewportStateCreateFlags;
|
||||
typedef VkFlags VkPipelineRasterizationStateCreateFlags;
|
||||
|
||||
typedef enum VkCullModeFlagBits {
|
||||
VK_CULL_MODE_NONE = 0,
|
||||
VK_CULL_MODE_FRONT_BIT = 0x00000001,
|
||||
VK_CULL_MODE_BACK_BIT = 0x00000002,
|
||||
VK_CULL_MODE_FRONT_AND_BACK = 0x00000003,
|
||||
VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkCullModeFlagBits;
|
||||
typedef VkFlags VkCullModeFlags;
|
||||
typedef VkFlags VkPipelineMultisampleStateCreateFlags;
|
||||
typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
|
||||
typedef VkFlags VkPipelineColorBlendStateCreateFlags;
|
||||
|
||||
typedef enum VkColorComponentFlagBits {
|
||||
VK_COLOR_COMPONENT_R_BIT = 0x00000001,
|
||||
VK_COLOR_COMPONENT_G_BIT = 0x00000002,
|
||||
VK_COLOR_COMPONENT_B_BIT = 0x00000004,
|
||||
VK_COLOR_COMPONENT_A_BIT = 0x00000008,
|
||||
VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkColorComponentFlagBits;
|
||||
typedef VkFlags VkColorComponentFlags;
|
||||
typedef VkFlags VkPipelineDynamicStateCreateFlags;
|
||||
typedef VkFlags VkPipelineLayoutCreateFlags;
|
||||
typedef VkFlags VkShaderStageFlags;
|
||||
typedef VkFlags VkSamplerCreateFlags;
|
||||
|
||||
typedef enum VkDescriptorSetLayoutCreateFlagBits {
|
||||
VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = 0x00000001,
|
||||
VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkDescriptorSetLayoutCreateFlagBits;
|
||||
typedef VkFlags VkDescriptorSetLayoutCreateFlags;
|
||||
|
||||
typedef enum VkDescriptorPoolCreateFlagBits {
|
||||
VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001,
|
||||
VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkDescriptorPoolCreateFlagBits;
|
||||
typedef VkFlags VkDescriptorPoolCreateFlags;
|
||||
typedef VkFlags VkDescriptorPoolResetFlags;
|
||||
typedef VkFlags VkFramebufferCreateFlags;
|
||||
typedef VkFlags VkRenderPassCreateFlags;
|
||||
|
||||
typedef enum VkAttachmentDescriptionFlagBits {
|
||||
VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001,
|
||||
VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkAttachmentDescriptionFlagBits;
|
||||
typedef VkFlags VkAttachmentDescriptionFlags;
|
||||
|
||||
typedef enum VkSubpassDescriptionFlagBits {
|
||||
VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x00000001,
|
||||
VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002,
|
||||
VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkSubpassDescriptionFlagBits;
|
||||
typedef VkFlags VkSubpassDescriptionFlags;
|
||||
|
||||
typedef enum VkAccessFlagBits {
|
||||
VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001,
|
||||
VK_ACCESS_INDEX_READ_BIT = 0x00000002,
|
||||
VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004,
|
||||
VK_ACCESS_UNIFORM_READ_BIT = 0x00000008,
|
||||
VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010,
|
||||
VK_ACCESS_SHADER_READ_BIT = 0x00000020,
|
||||
VK_ACCESS_SHADER_WRITE_BIT = 0x00000040,
|
||||
VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080,
|
||||
VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100,
|
||||
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200,
|
||||
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400,
|
||||
VK_ACCESS_TRANSFER_READ_BIT = 0x00000800,
|
||||
VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000,
|
||||
VK_ACCESS_HOST_READ_BIT = 0x00002000,
|
||||
VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
|
||||
VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
|
||||
VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
|
||||
VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX = 0x00020000,
|
||||
VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX = 0x00040000,
|
||||
VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000,
|
||||
VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkAccessFlagBits;
|
||||
typedef VkFlags VkAccessFlags;
|
||||
|
||||
typedef enum VkDependencyFlagBits {
|
||||
VK_DEPENDENCY_BY_REGION_BIT = 0x00000001,
|
||||
VK_DEPENDENCY_VIEW_LOCAL_BIT_KHX = 0x00000002,
|
||||
VK_DEPENDENCY_DEVICE_GROUP_BIT_KHX = 0x00000004,
|
||||
VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkDependencyFlagBits;
|
||||
typedef VkFlags VkDependencyFlags;
|
||||
|
||||
typedef enum VkCommandPoolCreateFlagBits {
|
||||
VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001,
|
||||
VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002,
|
||||
VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkCommandPoolCreateFlagBits;
|
||||
typedef VkFlags VkCommandPoolCreateFlags;
|
||||
|
||||
typedef enum VkCommandPoolResetFlagBits {
|
||||
VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
|
||||
VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkCommandPoolResetFlagBits;
|
||||
typedef VkFlags VkCommandPoolResetFlags;
|
||||
|
||||
typedef enum VkCommandBufferUsageFlagBits {
|
||||
VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001,
|
||||
VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002,
|
||||
VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004,
|
||||
VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkCommandBufferUsageFlagBits;
|
||||
typedef VkFlags VkCommandBufferUsageFlags;
|
||||
|
||||
typedef enum VkQueryControlFlagBits {
|
||||
VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001,
|
||||
VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkQueryControlFlagBits;
|
||||
typedef VkFlags VkQueryControlFlags;
|
||||
|
||||
typedef enum VkCommandBufferResetFlagBits {
|
||||
VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001,
|
||||
VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkCommandBufferResetFlagBits;
|
||||
typedef VkFlags VkCommandBufferResetFlags;
|
||||
|
||||
typedef enum VkStencilFaceFlagBits {
|
||||
VK_STENCIL_FACE_FRONT_BIT = 0x00000001,
|
||||
VK_STENCIL_FACE_BACK_BIT = 0x00000002,
|
||||
VK_STENCIL_FRONT_AND_BACK = 0x00000003,
|
||||
VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
||||
} VkStencilFaceFlagBits;
|
||||
typedef VkFlags VkStencilFaceFlags;
|
||||
|
||||
typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)(
|
||||
void* pUserData,
|
||||
size_t size,
|
||||
size_t alignment,
|
||||
VkSystemAllocationScope allocationScope);
|
||||
|
||||
typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)(
|
||||
void* pUserData,
|
||||
void* pOriginal,
|
||||
size_t size,
|
||||
size_t alignment,
|
||||
VkSystemAllocationScope allocationScope);
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkFreeFunction)(
|
||||
void* pUserData,
|
||||
void* pMemory);
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)(
|
||||
void* pUserData,
|
||||
size_t size,
|
||||
VkInternalAllocationType allocationType,
|
||||
VkSystemAllocationScope allocationScope);
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)(
|
||||
void* pUserData,
|
||||
size_t size,
|
||||
VkInternalAllocationType allocationType,
|
||||
VkSystemAllocationScope allocationScope);
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void);
|
||||
|
||||
typedef struct VkApplicationInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
const char* pApplicationName;
|
||||
uint32_t applicationVersion;
|
||||
const char* pEngineName;
|
||||
uint32_t engineVersion;
|
||||
uint32_t apiVersion;
|
||||
} VkApplicationInfo;
|
||||
|
||||
typedef struct VkInstanceCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkInstanceCreateFlags flags;
|
||||
const VkApplicationInfo* pApplicationInfo;
|
||||
uint32_t enabledLayerCount;
|
||||
const char* const* ppEnabledLayerNames;
|
||||
uint32_t enabledExtensionCount;
|
||||
const char* const* ppEnabledExtensionNames;
|
||||
} VkInstanceCreateInfo;
|
||||
|
||||
typedef struct VkAllocationCallbacks {
|
||||
void* pUserData;
|
||||
PFN_vkAllocationFunction pfnAllocation;
|
||||
PFN_vkReallocationFunction pfnReallocation;
|
||||
PFN_vkFreeFunction pfnFree;
|
||||
PFN_vkInternalAllocationNotification pfnInternalAllocation;
|
||||
PFN_vkInternalFreeNotification pfnInternalFree;
|
||||
} VkAllocationCallbacks;
|
||||
|
||||
typedef struct VkPhysicalDeviceFeatures {
|
||||
VkBool32 robustBufferAccess;
|
||||
VkBool32 fullDrawIndexUint32;
|
||||
VkBool32 imageCubeArray;
|
||||
VkBool32 independentBlend;
|
||||
VkBool32 geometryShader;
|
||||
VkBool32 tessellationShader;
|
||||
VkBool32 sampleRateShading;
|
||||
VkBool32 dualSrcBlend;
|
||||
VkBool32 logicOp;
|
||||
VkBool32 multiDrawIndirect;
|
||||
VkBool32 drawIndirectFirstInstance;
|
||||
VkBool32 depthClamp;
|
||||
VkBool32 depthBiasClamp;
|
||||
VkBool32 fillModeNonSolid;
|
||||
VkBool32 depthBounds;
|
||||
VkBool32 wideLines;
|
||||
VkBool32 largePoints;
|
||||
VkBool32 alphaToOne;
|
||||
VkBool32 multiViewport;
|
||||
VkBool32 samplerAnisotropy;
|
||||
VkBool32 textureCompressionETC2;
|
||||
VkBool32 textureCompressionASTC_LDR;
|
||||
VkBool32 textureCompressionBC;
|
||||
VkBool32 occlusionQueryPrecise;
|
||||
VkBool32 pipelineStatisticsQuery;
|
||||
VkBool32 vertexPipelineStoresAndAtomics;
|
||||
VkBool32 fragmentStoresAndAtomics;
|
||||
VkBool32 shaderTessellationAndGeometryPointSize;
|
||||
VkBool32 shaderImageGatherExtended;
|
||||
VkBool32 shaderStorageImageExtendedFormats;
|
||||
VkBool32 shaderStorageImageMultisample;
|
||||
VkBool32 shaderStorageImageReadWithoutFormat;
|
||||
VkBool32 shaderStorageImageWriteWithoutFormat;
|
||||
VkBool32 shaderUniformBufferArrayDynamicIndexing;
|
||||
VkBool32 shaderSampledImageArrayDynamicIndexing;
|
||||
VkBool32 shaderStorageBufferArrayDynamicIndexing;
|
||||
VkBool32 shaderStorageImageArrayDynamicIndexing;
|
||||
VkBool32 shaderClipDistance;
|
||||
VkBool32 shaderCullDistance;
|
||||
VkBool32 shaderFloat64;
|
||||
VkBool32 shaderInt64;
|
||||
VkBool32 shaderInt16;
|
||||
VkBool32 shaderResourceResidency;
|
||||
VkBool32 shaderResourceMinLod;
|
||||
VkBool32 sparseBinding;
|
||||
VkBool32 sparseResidencyBuffer;
|
||||
VkBool32 sparseResidencyImage2D;
|
||||
VkBool32 sparseResidencyImage3D;
|
||||
VkBool32 sparseResidency2Samples;
|
||||
VkBool32 sparseResidency4Samples;
|
||||
VkBool32 sparseResidency8Samples;
|
||||
VkBool32 sparseResidency16Samples;
|
||||
VkBool32 sparseResidencyAliased;
|
||||
VkBool32 variableMultisampleRate;
|
||||
VkBool32 inheritedQueries;
|
||||
} VkPhysicalDeviceFeatures;
|
||||
|
||||
typedef struct VkFormatProperties {
|
||||
VkFormatFeatureFlags linearTilingFeatures;
|
||||
VkFormatFeatureFlags optimalTilingFeatures;
|
||||
VkFormatFeatureFlags bufferFeatures;
|
||||
} VkFormatProperties;
|
||||
|
||||
typedef struct VkExtent3D {
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
uint32_t depth;
|
||||
} VkExtent3D;
|
||||
|
||||
typedef struct VkImageFormatProperties {
|
||||
VkExtent3D maxExtent;
|
||||
uint32_t maxMipLevels;
|
||||
uint32_t maxArrayLayers;
|
||||
VkSampleCountFlags sampleCounts;
|
||||
VkDeviceSize maxResourceSize;
|
||||
} VkImageFormatProperties;
|
||||
|
||||
typedef struct VkPhysicalDeviceLimits {
|
||||
uint32_t maxImageDimension1D;
|
||||
uint32_t maxImageDimension2D;
|
||||
uint32_t maxImageDimension3D;
|
||||
uint32_t maxImageDimensionCube;
|
||||
uint32_t maxImageArrayLayers;
|
||||
uint32_t maxTexelBufferElements;
|
||||
uint32_t maxUniformBufferRange;
|
||||
uint32_t maxStorageBufferRange;
|
||||
uint32_t maxPushConstantsSize;
|
||||
uint32_t maxMemoryAllocationCount;
|
||||
uint32_t maxSamplerAllocationCount;
|
||||
VkDeviceSize bufferImageGranularity;
|
||||
VkDeviceSize sparseAddressSpaceSize;
|
||||
uint32_t maxBoundDescriptorSets;
|
||||
uint32_t maxPerStageDescriptorSamplers;
|
||||
uint32_t maxPerStageDescriptorUniformBuffers;
|
||||
uint32_t maxPerStageDescriptorStorageBuffers;
|
||||
uint32_t maxPerStageDescriptorSampledImages;
|
||||
uint32_t maxPerStageDescriptorStorageImages;
|
||||
uint32_t maxPerStageDescriptorInputAttachments;
|
||||
uint32_t maxPerStageResources;
|
||||
uint32_t maxDescriptorSetSamplers;
|
||||
uint32_t maxDescriptorSetUniformBuffers;
|
||||
uint32_t maxDescriptorSetUniformBuffersDynamic;
|
||||
uint32_t maxDescriptorSetStorageBuffers;
|
||||
uint32_t maxDescriptorSetStorageBuffersDynamic;
|
||||
uint32_t maxDescriptorSetSampledImages;
|
||||
uint32_t maxDescriptorSetStorageImages;
|
||||
uint32_t maxDescriptorSetInputAttachments;
|
||||
uint32_t maxVertexInputAttributes;
|
||||
uint32_t maxVertexInputBindings;
|
||||
uint32_t maxVertexInputAttributeOffset;
|
||||
uint32_t maxVertexInputBindingStride;
|
||||
uint32_t maxVertexOutputComponents;
|
||||
uint32_t maxTessellationGenerationLevel;
|
||||
uint32_t maxTessellationPatchSize;
|
||||
uint32_t maxTessellationControlPerVertexInputComponents;
|
||||
uint32_t maxTessellationControlPerVertexOutputComponents;
|
||||
uint32_t maxTessellationControlPerPatchOutputComponents;
|
||||
uint32_t maxTessellationControlTotalOutputComponents;
|
||||
uint32_t maxTessellationEvaluationInputComponents;
|
||||
uint32_t maxTessellationEvaluationOutputComponents;
|
||||
uint32_t maxGeometryShaderInvocations;
|
||||
uint32_t maxGeometryInputComponents;
|
||||
uint32_t maxGeometryOutputComponents;
|
||||
uint32_t maxGeometryOutputVertices;
|
||||
uint32_t maxGeometryTotalOutputComponents;
|
||||
uint32_t maxFragmentInputComponents;
|
||||
uint32_t maxFragmentOutputAttachments;
|
||||
uint32_t maxFragmentDualSrcAttachments;
|
||||
uint32_t maxFragmentCombinedOutputResources;
|
||||
uint32_t maxComputeSharedMemorySize;
|
||||
uint32_t maxComputeWorkGroupCount[3];
|
||||
uint32_t maxComputeWorkGroupInvocations;
|
||||
uint32_t maxComputeWorkGroupSize[3];
|
||||
uint32_t subPixelPrecisionBits;
|
||||
uint32_t subTexelPrecisionBits;
|
||||
uint32_t mipmapPrecisionBits;
|
||||
uint32_t maxDrawIndexedIndexValue;
|
||||
uint32_t maxDrawIndirectCount;
|
||||
float maxSamplerLodBias;
|
||||
float maxSamplerAnisotropy;
|
||||
uint32_t maxViewports;
|
||||
uint32_t maxViewportDimensions[2];
|
||||
float viewportBoundsRange[2];
|
||||
uint32_t viewportSubPixelBits;
|
||||
size_t minMemoryMapAlignment;
|
||||
VkDeviceSize minTexelBufferOffsetAlignment;
|
||||
VkDeviceSize minUniformBufferOffsetAlignment;
|
||||
VkDeviceSize minStorageBufferOffsetAlignment;
|
||||
int32_t minTexelOffset;
|
||||
uint32_t maxTexelOffset;
|
||||
int32_t minTexelGatherOffset;
|
||||
uint32_t maxTexelGatherOffset;
|
||||
float minInterpolationOffset;
|
||||
float maxInterpolationOffset;
|
||||
uint32_t subPixelInterpolationOffsetBits;
|
||||
uint32_t maxFramebufferWidth;
|
||||
uint32_t maxFramebufferHeight;
|
||||
uint32_t maxFramebufferLayers;
|
||||
VkSampleCountFlags framebufferColorSampleCounts;
|
||||
VkSampleCountFlags framebufferDepthSampleCounts;
|
||||
VkSampleCountFlags framebufferStencilSampleCounts;
|
||||
VkSampleCountFlags framebufferNoAttachmentsSampleCounts;
|
||||
uint32_t maxColorAttachments;
|
||||
VkSampleCountFlags sampledImageColorSampleCounts;
|
||||
VkSampleCountFlags sampledImageIntegerSampleCounts;
|
||||
VkSampleCountFlags sampledImageDepthSampleCounts;
|
||||
VkSampleCountFlags sampledImageStencilSampleCounts;
|
||||
VkSampleCountFlags storageImageSampleCounts;
|
||||
uint32_t maxSampleMaskWords;
|
||||
VkBool32 timestampComputeAndGraphics;
|
||||
float timestampPeriod;
|
||||
uint32_t maxClipDistances;
|
||||
uint32_t maxCullDistances;
|
||||
uint32_t maxCombinedClipAndCullDistances;
|
||||
uint32_t discreteQueuePriorities;
|
||||
float pointSizeRange[2];
|
||||
float lineWidthRange[2];
|
||||
float pointSizeGranularity;
|
||||
float lineWidthGranularity;
|
||||
VkBool32 strictLines;
|
||||
VkBool32 standardSampleLocations;
|
||||
VkDeviceSize optimalBufferCopyOffsetAlignment;
|
||||
VkDeviceSize optimalBufferCopyRowPitchAlignment;
|
||||
VkDeviceSize nonCoherentAtomSize;
|
||||
} VkPhysicalDeviceLimits;
|
||||
|
||||
typedef struct VkPhysicalDeviceSparseProperties {
|
||||
VkBool32 residencyStandard2DBlockShape;
|
||||
VkBool32 residencyStandard2DMultisampleBlockShape;
|
||||
VkBool32 residencyStandard3DBlockShape;
|
||||
VkBool32 residencyAlignedMipSize;
|
||||
VkBool32 residencyNonResidentStrict;
|
||||
} VkPhysicalDeviceSparseProperties;
|
||||
|
||||
typedef struct VkPhysicalDeviceProperties {
|
||||
uint32_t apiVersion;
|
||||
uint32_t driverVersion;
|
||||
uint32_t vendorID;
|
||||
uint32_t deviceID;
|
||||
VkPhysicalDeviceType deviceType;
|
||||
char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
|
||||
uint8_t pipelineCacheUUID[VK_UUID_SIZE];
|
||||
VkPhysicalDeviceLimits limits;
|
||||
VkPhysicalDeviceSparseProperties sparseProperties;
|
||||
} VkPhysicalDeviceProperties;
|
||||
|
||||
typedef struct VkQueueFamilyProperties {
|
||||
VkQueueFlags queueFlags;
|
||||
uint32_t queueCount;
|
||||
uint32_t timestampValidBits;
|
||||
VkExtent3D minImageTransferGranularity;
|
||||
} VkQueueFamilyProperties;
|
||||
|
||||
typedef struct VkMemoryType {
|
||||
VkMemoryPropertyFlags propertyFlags;
|
||||
uint32_t heapIndex;
|
||||
} VkMemoryType;
|
||||
|
||||
typedef struct VkMemoryHeap {
|
||||
VkDeviceSize size;
|
||||
VkMemoryHeapFlags flags;
|
||||
} VkMemoryHeap;
|
||||
|
||||
typedef struct VkPhysicalDeviceMemoryProperties {
|
||||
uint32_t memoryTypeCount;
|
||||
VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
|
||||
uint32_t memoryHeapCount;
|
||||
VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];
|
||||
} VkPhysicalDeviceMemoryProperties;
|
||||
|
||||
typedef struct VkDeviceQueueCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDeviceQueueCreateFlags flags;
|
||||
uint32_t queueFamilyIndex;
|
||||
uint32_t queueCount;
|
||||
const float* pQueuePriorities;
|
||||
} VkDeviceQueueCreateInfo;
|
||||
|
||||
typedef struct VkDeviceCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDeviceCreateFlags flags;
|
||||
uint32_t queueCreateInfoCount;
|
||||
const VkDeviceQueueCreateInfo* pQueueCreateInfos;
|
||||
uint32_t enabledLayerCount;
|
||||
const char* const* ppEnabledLayerNames;
|
||||
uint32_t enabledExtensionCount;
|
||||
const char* const* ppEnabledExtensionNames;
|
||||
const VkPhysicalDeviceFeatures* pEnabledFeatures;
|
||||
} VkDeviceCreateInfo;
|
||||
|
||||
typedef struct VkExtensionProperties {
|
||||
char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
|
||||
uint32_t specVersion;
|
||||
} VkExtensionProperties;
|
||||
|
||||
typedef struct VkLayerProperties {
|
||||
char layerName[VK_MAX_EXTENSION_NAME_SIZE];
|
||||
uint32_t specVersion;
|
||||
uint32_t implementationVersion;
|
||||
char description[VK_MAX_DESCRIPTION_SIZE];
|
||||
} VkLayerProperties;
|
||||
|
||||
typedef struct VkSubmitInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t waitSemaphoreCount;
|
||||
const VkSemaphore* pWaitSemaphores;
|
||||
const VkPipelineStageFlags* pWaitDstStageMask;
|
||||
uint32_t commandBufferCount;
|
||||
const VkCommandBuffer* pCommandBuffers;
|
||||
uint32_t signalSemaphoreCount;
|
||||
const VkSemaphore* pSignalSemaphores;
|
||||
} VkSubmitInfo;
|
||||
|
||||
typedef struct VkMemoryAllocateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDeviceSize allocationSize;
|
||||
uint32_t memoryTypeIndex;
|
||||
} VkMemoryAllocateInfo;
|
||||
|
||||
typedef struct VkMappedMemoryRange {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDeviceMemory memory;
|
||||
VkDeviceSize offset;
|
||||
VkDeviceSize size;
|
||||
} VkMappedMemoryRange;
|
||||
|
||||
typedef struct VkMemoryRequirements {
|
||||
VkDeviceSize size;
|
||||
VkDeviceSize alignment;
|
||||
uint32_t memoryTypeBits;
|
||||
} VkMemoryRequirements;
|
||||
|
||||
typedef struct VkSparseImageFormatProperties {
|
||||
VkImageAspectFlags aspectMask;
|
||||
VkExtent3D imageGranularity;
|
||||
VkSparseImageFormatFlags flags;
|
||||
} VkSparseImageFormatProperties;
|
||||
|
||||
typedef struct VkSparseImageMemoryRequirements {
|
||||
VkSparseImageFormatProperties formatProperties;
|
||||
uint32_t imageMipTailFirstLod;
|
||||
VkDeviceSize imageMipTailSize;
|
||||
VkDeviceSize imageMipTailOffset;
|
||||
VkDeviceSize imageMipTailStride;
|
||||
} VkSparseImageMemoryRequirements;
|
||||
|
||||
typedef struct VkSparseMemoryBind {
|
||||
VkDeviceSize resourceOffset;
|
||||
VkDeviceSize size;
|
||||
VkDeviceMemory memory;
|
||||
VkDeviceSize memoryOffset;
|
||||
VkSparseMemoryBindFlags flags;
|
||||
} VkSparseMemoryBind;
|
||||
|
||||
typedef struct VkSparseBufferMemoryBindInfo {
|
||||
VkBuffer buffer;
|
||||
uint32_t bindCount;
|
||||
const VkSparseMemoryBind* pBinds;
|
||||
} VkSparseBufferMemoryBindInfo;
|
||||
|
||||
typedef struct VkSparseImageOpaqueMemoryBindInfo {
|
||||
VkImage image;
|
||||
uint32_t bindCount;
|
||||
const VkSparseMemoryBind* pBinds;
|
||||
} VkSparseImageOpaqueMemoryBindInfo;
|
||||
|
||||
typedef struct VkImageSubresource {
|
||||
VkImageAspectFlags aspectMask;
|
||||
uint32_t mipLevel;
|
||||
uint32_t arrayLayer;
|
||||
} VkImageSubresource;
|
||||
|
||||
typedef struct VkOffset3D {
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
int32_t z;
|
||||
} VkOffset3D;
|
||||
|
||||
typedef struct VkSparseImageMemoryBind {
|
||||
VkImageSubresource subresource;
|
||||
VkOffset3D offset;
|
||||
VkExtent3D extent;
|
||||
VkDeviceMemory memory;
|
||||
VkDeviceSize memoryOffset;
|
||||
VkSparseMemoryBindFlags flags;
|
||||
} VkSparseImageMemoryBind;
|
||||
|
||||
typedef struct VkSparseImageMemoryBindInfo {
|
||||
VkImage image;
|
||||
uint32_t bindCount;
|
||||
const VkSparseImageMemoryBind* pBinds;
|
||||
} VkSparseImageMemoryBindInfo;
|
||||
|
||||
typedef struct VkBindSparseInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t waitSemaphoreCount;
|
||||
const VkSemaphore* pWaitSemaphores;
|
||||
uint32_t bufferBindCount;
|
||||
const VkSparseBufferMemoryBindInfo* pBufferBinds;
|
||||
uint32_t imageOpaqueBindCount;
|
||||
const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds;
|
||||
uint32_t imageBindCount;
|
||||
const VkSparseImageMemoryBindInfo* pImageBinds;
|
||||
uint32_t signalSemaphoreCount;
|
||||
const VkSemaphore* pSignalSemaphores;
|
||||
} VkBindSparseInfo;
|
||||
|
||||
typedef struct VkFenceCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkFenceCreateFlags flags;
|
||||
} VkFenceCreateInfo;
|
||||
|
||||
typedef struct VkSemaphoreCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSemaphoreCreateFlags flags;
|
||||
} VkSemaphoreCreateInfo;
|
||||
|
||||
typedef struct VkEventCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkEventCreateFlags flags;
|
||||
} VkEventCreateInfo;
|
||||
|
||||
typedef struct VkQueryPoolCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkQueryPoolCreateFlags flags;
|
||||
VkQueryType queryType;
|
||||
uint32_t queryCount;
|
||||
VkQueryPipelineStatisticFlags pipelineStatistics;
|
||||
} VkQueryPoolCreateInfo;
|
||||
|
||||
typedef struct VkBufferCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBufferCreateFlags flags;
|
||||
VkDeviceSize size;
|
||||
VkBufferUsageFlags usage;
|
||||
VkSharingMode sharingMode;
|
||||
uint32_t queueFamilyIndexCount;
|
||||
const uint32_t* pQueueFamilyIndices;
|
||||
} VkBufferCreateInfo;
|
||||
|
||||
typedef struct VkBufferViewCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBufferViewCreateFlags flags;
|
||||
VkBuffer buffer;
|
||||
VkFormat format;
|
||||
VkDeviceSize offset;
|
||||
VkDeviceSize range;
|
||||
} VkBufferViewCreateInfo;
|
||||
|
||||
typedef struct VkImageCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkImageCreateFlags flags;
|
||||
VkImageType imageType;
|
||||
VkFormat format;
|
||||
VkExtent3D extent;
|
||||
uint32_t mipLevels;
|
||||
uint32_t arrayLayers;
|
||||
VkSampleCountFlagBits samples;
|
||||
VkImageTiling tiling;
|
||||
VkImageUsageFlags usage;
|
||||
VkSharingMode sharingMode;
|
||||
uint32_t queueFamilyIndexCount;
|
||||
const uint32_t* pQueueFamilyIndices;
|
||||
VkImageLayout initialLayout;
|
||||
} VkImageCreateInfo;
|
||||
|
||||
typedef struct VkSubresourceLayout {
|
||||
VkDeviceSize offset;
|
||||
VkDeviceSize size;
|
||||
VkDeviceSize rowPitch;
|
||||
VkDeviceSize arrayPitch;
|
||||
VkDeviceSize depthPitch;
|
||||
} VkSubresourceLayout;
|
||||
|
||||
typedef struct VkComponentMapping {
|
||||
VkComponentSwizzle r;
|
||||
VkComponentSwizzle g;
|
||||
VkComponentSwizzle b;
|
||||
VkComponentSwizzle a;
|
||||
} VkComponentMapping;
|
||||
|
||||
typedef struct VkImageSubresourceRange {
|
||||
VkImageAspectFlags aspectMask;
|
||||
uint32_t baseMipLevel;
|
||||
uint32_t levelCount;
|
||||
uint32_t baseArrayLayer;
|
||||
uint32_t layerCount;
|
||||
} VkImageSubresourceRange;
|
||||
|
||||
typedef struct VkImageViewCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkImageViewCreateFlags flags;
|
||||
VkImage image;
|
||||
VkImageViewType viewType;
|
||||
VkFormat format;
|
||||
VkComponentMapping components;
|
||||
VkImageSubresourceRange subresourceRange;
|
||||
} VkImageViewCreateInfo;
|
||||
|
||||
typedef struct VkShaderModuleCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkShaderModuleCreateFlags flags;
|
||||
size_t codeSize;
|
||||
const uint32_t* pCode;
|
||||
} VkShaderModuleCreateInfo;
|
||||
|
||||
typedef struct VkPipelineCacheCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineCacheCreateFlags flags;
|
||||
size_t initialDataSize;
|
||||
const void* pInitialData;
|
||||
} VkPipelineCacheCreateInfo;
|
||||
|
||||
typedef struct VkSpecializationMapEntry {
|
||||
uint32_t constantID;
|
||||
uint32_t offset;
|
||||
size_t size;
|
||||
} VkSpecializationMapEntry;
|
||||
|
||||
typedef struct VkSpecializationInfo {
|
||||
uint32_t mapEntryCount;
|
||||
const VkSpecializationMapEntry* pMapEntries;
|
||||
size_t dataSize;
|
||||
const void* pData;
|
||||
} VkSpecializationInfo;
|
||||
|
||||
typedef struct VkPipelineShaderStageCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineShaderStageCreateFlags flags;
|
||||
VkShaderStageFlagBits stage;
|
||||
VkShaderModule module;
|
||||
const char* pName;
|
||||
const VkSpecializationInfo* pSpecializationInfo;
|
||||
} VkPipelineShaderStageCreateInfo;
|
||||
|
||||
typedef struct VkVertexInputBindingDescription {
|
||||
uint32_t binding;
|
||||
uint32_t stride;
|
||||
VkVertexInputRate inputRate;
|
||||
} VkVertexInputBindingDescription;
|
||||
|
||||
typedef struct VkVertexInputAttributeDescription {
|
||||
uint32_t location;
|
||||
uint32_t binding;
|
||||
VkFormat format;
|
||||
uint32_t offset;
|
||||
} VkVertexInputAttributeDescription;
|
||||
|
||||
typedef struct VkPipelineVertexInputStateCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineVertexInputStateCreateFlags flags;
|
||||
uint32_t vertexBindingDescriptionCount;
|
||||
const VkVertexInputBindingDescription* pVertexBindingDescriptions;
|
||||
uint32_t vertexAttributeDescriptionCount;
|
||||
const VkVertexInputAttributeDescription* pVertexAttributeDescriptions;
|
||||
} VkPipelineVertexInputStateCreateInfo;
|
||||
|
||||
typedef struct VkPipelineInputAssemblyStateCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineInputAssemblyStateCreateFlags flags;
|
||||
VkPrimitiveTopology topology;
|
||||
VkBool32 primitiveRestartEnable;
|
||||
} VkPipelineInputAssemblyStateCreateInfo;
|
||||
|
||||
typedef struct VkPipelineTessellationStateCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineTessellationStateCreateFlags flags;
|
||||
uint32_t patchControlPoints;
|
||||
} VkPipelineTessellationStateCreateInfo;
|
||||
|
||||
typedef struct VkViewport {
|
||||
float x;
|
||||
float y;
|
||||
float width;
|
||||
float height;
|
||||
float minDepth;
|
||||
float maxDepth;
|
||||
} VkViewport;
|
||||
|
||||
typedef struct VkOffset2D {
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
} VkOffset2D;
|
||||
|
||||
typedef struct VkExtent2D {
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
} VkExtent2D;
|
||||
|
||||
typedef struct VkRect2D {
|
||||
VkOffset2D offset;
|
||||
VkExtent2D extent;
|
||||
} VkRect2D;
|
||||
|
||||
typedef struct VkPipelineViewportStateCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineViewportStateCreateFlags flags;
|
||||
uint32_t viewportCount;
|
||||
const VkViewport* pViewports;
|
||||
uint32_t scissorCount;
|
||||
const VkRect2D* pScissors;
|
||||
} VkPipelineViewportStateCreateInfo;
|
||||
|
||||
typedef struct VkPipelineRasterizationStateCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineRasterizationStateCreateFlags flags;
|
||||
VkBool32 depthClampEnable;
|
||||
VkBool32 rasterizerDiscardEnable;
|
||||
VkPolygonMode polygonMode;
|
||||
VkCullModeFlags cullMode;
|
||||
VkFrontFace frontFace;
|
||||
VkBool32 depthBiasEnable;
|
||||
float depthBiasConstantFactor;
|
||||
float depthBiasClamp;
|
||||
float depthBiasSlopeFactor;
|
||||
float lineWidth;
|
||||
} VkPipelineRasterizationStateCreateInfo;
|
||||
|
||||
typedef struct VkPipelineMultisampleStateCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineMultisampleStateCreateFlags flags;
|
||||
VkSampleCountFlagBits rasterizationSamples;
|
||||
VkBool32 sampleShadingEnable;
|
||||
float minSampleShading;
|
||||
const VkSampleMask* pSampleMask;
|
||||
VkBool32 alphaToCoverageEnable;
|
||||
VkBool32 alphaToOneEnable;
|
||||
} VkPipelineMultisampleStateCreateInfo;
|
||||
|
||||
typedef struct VkStencilOpState {
|
||||
VkStencilOp failOp;
|
||||
VkStencilOp passOp;
|
||||
VkStencilOp depthFailOp;
|
||||
VkCompareOp compareOp;
|
||||
uint32_t compareMask;
|
||||
uint32_t writeMask;
|
||||
uint32_t reference;
|
||||
} VkStencilOpState;
|
||||
|
||||
typedef struct VkPipelineDepthStencilStateCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineDepthStencilStateCreateFlags flags;
|
||||
VkBool32 depthTestEnable;
|
||||
VkBool32 depthWriteEnable;
|
||||
VkCompareOp depthCompareOp;
|
||||
VkBool32 depthBoundsTestEnable;
|
||||
VkBool32 stencilTestEnable;
|
||||
VkStencilOpState front;
|
||||
VkStencilOpState back;
|
||||
float minDepthBounds;
|
||||
float maxDepthBounds;
|
||||
} VkPipelineDepthStencilStateCreateInfo;
|
||||
|
||||
typedef struct VkPipelineColorBlendAttachmentState {
|
||||
VkBool32 blendEnable;
|
||||
VkBlendFactor srcColorBlendFactor;
|
||||
VkBlendFactor dstColorBlendFactor;
|
||||
VkBlendOp colorBlendOp;
|
||||
VkBlendFactor srcAlphaBlendFactor;
|
||||
VkBlendFactor dstAlphaBlendFactor;
|
||||
VkBlendOp alphaBlendOp;
|
||||
VkColorComponentFlags colorWriteMask;
|
||||
} VkPipelineColorBlendAttachmentState;
|
||||
|
||||
typedef struct VkPipelineColorBlendStateCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineColorBlendStateCreateFlags flags;
|
||||
VkBool32 logicOpEnable;
|
||||
VkLogicOp logicOp;
|
||||
uint32_t attachmentCount;
|
||||
const VkPipelineColorBlendAttachmentState* pAttachments;
|
||||
float blendConstants[4];
|
||||
} VkPipelineColorBlendStateCreateInfo;
|
||||
|
||||
typedef struct VkPipelineDynamicStateCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineDynamicStateCreateFlags flags;
|
||||
uint32_t dynamicStateCount;
|
||||
const VkDynamicState* pDynamicStates;
|
||||
} VkPipelineDynamicStateCreateInfo;
|
||||
|
||||
typedef struct VkGraphicsPipelineCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineCreateFlags flags;
|
||||
uint32_t stageCount;
|
||||
const VkPipelineShaderStageCreateInfo* pStages;
|
||||
const VkPipelineVertexInputStateCreateInfo* pVertexInputState;
|
||||
const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
|
||||
const VkPipelineTessellationStateCreateInfo* pTessellationState;
|
||||
const VkPipelineViewportStateCreateInfo* pViewportState;
|
||||
const VkPipelineRasterizationStateCreateInfo* pRasterizationState;
|
||||
const VkPipelineMultisampleStateCreateInfo* pMultisampleState;
|
||||
const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState;
|
||||
const VkPipelineColorBlendStateCreateInfo* pColorBlendState;
|
||||
const VkPipelineDynamicStateCreateInfo* pDynamicState;
|
||||
VkPipelineLayout layout;
|
||||
VkRenderPass renderPass;
|
||||
uint32_t subpass;
|
||||
VkPipeline basePipelineHandle;
|
||||
int32_t basePipelineIndex;
|
||||
} VkGraphicsPipelineCreateInfo;
|
||||
|
||||
typedef struct VkComputePipelineCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineCreateFlags flags;
|
||||
VkPipelineShaderStageCreateInfo stage;
|
||||
VkPipelineLayout layout;
|
||||
VkPipeline basePipelineHandle;
|
||||
int32_t basePipelineIndex;
|
||||
} VkComputePipelineCreateInfo;
|
||||
|
||||
typedef struct VkPushConstantRange {
|
||||
VkShaderStageFlags stageFlags;
|
||||
uint32_t offset;
|
||||
uint32_t size;
|
||||
} VkPushConstantRange;
|
||||
|
||||
typedef struct VkPipelineLayoutCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineLayoutCreateFlags flags;
|
||||
uint32_t setLayoutCount;
|
||||
const VkDescriptorSetLayout* pSetLayouts;
|
||||
uint32_t pushConstantRangeCount;
|
||||
const VkPushConstantRange* pPushConstantRanges;
|
||||
} VkPipelineLayoutCreateInfo;
|
||||
|
||||
typedef struct VkSamplerCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSamplerCreateFlags flags;
|
||||
VkFilter magFilter;
|
||||
VkFilter minFilter;
|
||||
VkSamplerMipmapMode mipmapMode;
|
||||
VkSamplerAddressMode addressModeU;
|
||||
VkSamplerAddressMode addressModeV;
|
||||
VkSamplerAddressMode addressModeW;
|
||||
float mipLodBias;
|
||||
VkBool32 anisotropyEnable;
|
||||
float maxAnisotropy;
|
||||
VkBool32 compareEnable;
|
||||
VkCompareOp compareOp;
|
||||
float minLod;
|
||||
float maxLod;
|
||||
VkBorderColor borderColor;
|
||||
VkBool32 unnormalizedCoordinates;
|
||||
} VkSamplerCreateInfo;
|
||||
|
||||
typedef struct VkDescriptorSetLayoutBinding {
|
||||
uint32_t binding;
|
||||
VkDescriptorType descriptorType;
|
||||
uint32_t descriptorCount;
|
||||
VkShaderStageFlags stageFlags;
|
||||
const VkSampler* pImmutableSamplers;
|
||||
} VkDescriptorSetLayoutBinding;
|
||||
|
||||
typedef struct VkDescriptorSetLayoutCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDescriptorSetLayoutCreateFlags flags;
|
||||
uint32_t bindingCount;
|
||||
const VkDescriptorSetLayoutBinding* pBindings;
|
||||
} VkDescriptorSetLayoutCreateInfo;
|
||||
|
||||
typedef struct VkDescriptorPoolSize {
|
||||
VkDescriptorType type;
|
||||
uint32_t descriptorCount;
|
||||
} VkDescriptorPoolSize;
|
||||
|
||||
typedef struct VkDescriptorPoolCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDescriptorPoolCreateFlags flags;
|
||||
uint32_t maxSets;
|
||||
uint32_t poolSizeCount;
|
||||
const VkDescriptorPoolSize* pPoolSizes;
|
||||
} VkDescriptorPoolCreateInfo;
|
||||
|
||||
typedef struct VkDescriptorSetAllocateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDescriptorPool descriptorPool;
|
||||
uint32_t descriptorSetCount;
|
||||
const VkDescriptorSetLayout* pSetLayouts;
|
||||
} VkDescriptorSetAllocateInfo;
|
||||
|
||||
typedef struct VkDescriptorImageInfo {
|
||||
VkSampler sampler;
|
||||
VkImageView imageView;
|
||||
VkImageLayout imageLayout;
|
||||
} VkDescriptorImageInfo;
|
||||
|
||||
typedef struct VkDescriptorBufferInfo {
|
||||
VkBuffer buffer;
|
||||
VkDeviceSize offset;
|
||||
VkDeviceSize range;
|
||||
} VkDescriptorBufferInfo;
|
||||
|
||||
typedef struct VkWriteDescriptorSet {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDescriptorSet dstSet;
|
||||
uint32_t dstBinding;
|
||||
uint32_t dstArrayElement;
|
||||
uint32_t descriptorCount;
|
||||
VkDescriptorType descriptorType;
|
||||
const VkDescriptorImageInfo* pImageInfo;
|
||||
const VkDescriptorBufferInfo* pBufferInfo;
|
||||
const VkBufferView* pTexelBufferView;
|
||||
} VkWriteDescriptorSet;
|
||||
|
||||
typedef struct VkCopyDescriptorSet {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDescriptorSet srcSet;
|
||||
uint32_t srcBinding;
|
||||
uint32_t srcArrayElement;
|
||||
VkDescriptorSet dstSet;
|
||||
uint32_t dstBinding;
|
||||
uint32_t dstArrayElement;
|
||||
uint32_t descriptorCount;
|
||||
} VkCopyDescriptorSet;
|
||||
|
||||
typedef struct VkFramebufferCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkFramebufferCreateFlags flags;
|
||||
VkRenderPass renderPass;
|
||||
uint32_t attachmentCount;
|
||||
const VkImageView* pAttachments;
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
uint32_t layers;
|
||||
} VkFramebufferCreateInfo;
|
||||
|
||||
typedef struct VkAttachmentDescription {
|
||||
VkAttachmentDescriptionFlags flags;
|
||||
VkFormat format;
|
||||
VkSampleCountFlagBits samples;
|
||||
VkAttachmentLoadOp loadOp;
|
||||
VkAttachmentStoreOp storeOp;
|
||||
VkAttachmentLoadOp stencilLoadOp;
|
||||
VkAttachmentStoreOp stencilStoreOp;
|
||||
VkImageLayout initialLayout;
|
||||
VkImageLayout finalLayout;
|
||||
} VkAttachmentDescription;
|
||||
|
||||
typedef struct VkAttachmentReference {
|
||||
uint32_t attachment;
|
||||
VkImageLayout layout;
|
||||
} VkAttachmentReference;
|
||||
|
||||
typedef struct VkSubpassDescription {
|
||||
VkSubpassDescriptionFlags flags;
|
||||
VkPipelineBindPoint pipelineBindPoint;
|
||||
uint32_t inputAttachmentCount;
|
||||
const VkAttachmentReference* pInputAttachments;
|
||||
uint32_t colorAttachmentCount;
|
||||
const VkAttachmentReference* pColorAttachments;
|
||||
const VkAttachmentReference* pResolveAttachments;
|
||||
const VkAttachmentReference* pDepthStencilAttachment;
|
||||
uint32_t preserveAttachmentCount;
|
||||
const uint32_t* pPreserveAttachments;
|
||||
} VkSubpassDescription;
|
||||
|
||||
typedef struct VkSubpassDependency {
|
||||
uint32_t srcSubpass;
|
||||
uint32_t dstSubpass;
|
||||
VkPipelineStageFlags srcStageMask;
|
||||
VkPipelineStageFlags dstStageMask;
|
||||
VkAccessFlags srcAccessMask;
|
||||
VkAccessFlags dstAccessMask;
|
||||
VkDependencyFlags dependencyFlags;
|
||||
} VkSubpassDependency;
|
||||
|
||||
typedef struct VkRenderPassCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkRenderPassCreateFlags flags;
|
||||
uint32_t attachmentCount;
|
||||
const VkAttachmentDescription* pAttachments;
|
||||
uint32_t subpassCount;
|
||||
const VkSubpassDescription* pSubpasses;
|
||||
uint32_t dependencyCount;
|
||||
const VkSubpassDependency* pDependencies;
|
||||
} VkRenderPassCreateInfo;
|
||||
|
||||
typedef struct VkCommandPoolCreateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkCommandPoolCreateFlags flags;
|
||||
uint32_t queueFamilyIndex;
|
||||
} VkCommandPoolCreateInfo;
|
||||
|
||||
typedef struct VkCommandBufferAllocateInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkCommandPool commandPool;
|
||||
VkCommandBufferLevel level;
|
||||
uint32_t commandBufferCount;
|
||||
} VkCommandBufferAllocateInfo;
|
||||
|
||||
typedef struct VkCommandBufferInheritanceInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkRenderPass renderPass;
|
||||
uint32_t subpass;
|
||||
VkFramebuffer framebuffer;
|
||||
VkBool32 occlusionQueryEnable;
|
||||
VkQueryControlFlags queryFlags;
|
||||
VkQueryPipelineStatisticFlags pipelineStatistics;
|
||||
} VkCommandBufferInheritanceInfo;
|
||||
|
||||
typedef struct VkCommandBufferBeginInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkCommandBufferUsageFlags flags;
|
||||
const VkCommandBufferInheritanceInfo* pInheritanceInfo;
|
||||
} VkCommandBufferBeginInfo;
|
||||
|
||||
typedef struct VkBufferCopy {
|
||||
VkDeviceSize srcOffset;
|
||||
VkDeviceSize dstOffset;
|
||||
VkDeviceSize size;
|
||||
} VkBufferCopy;
|
||||
|
||||
typedef struct VkImageSubresourceLayers {
|
||||
VkImageAspectFlags aspectMask;
|
||||
uint32_t mipLevel;
|
||||
uint32_t baseArrayLayer;
|
||||
uint32_t layerCount;
|
||||
} VkImageSubresourceLayers;
|
||||
|
||||
typedef struct VkImageCopy {
|
||||
VkImageSubresourceLayers srcSubresource;
|
||||
VkOffset3D srcOffset;
|
||||
VkImageSubresourceLayers dstSubresource;
|
||||
VkOffset3D dstOffset;
|
||||
VkExtent3D extent;
|
||||
} VkImageCopy;
|
||||
|
||||
typedef struct VkImageBlit {
|
||||
VkImageSubresourceLayers srcSubresource;
|
||||
VkOffset3D srcOffsets[2];
|
||||
VkImageSubresourceLayers dstSubresource;
|
||||
VkOffset3D dstOffsets[2];
|
||||
} VkImageBlit;
|
||||
|
||||
typedef struct VkBufferImageCopy {
|
||||
VkDeviceSize bufferOffset;
|
||||
uint32_t bufferRowLength;
|
||||
uint32_t bufferImageHeight;
|
||||
VkImageSubresourceLayers imageSubresource;
|
||||
VkOffset3D imageOffset;
|
||||
VkExtent3D imageExtent;
|
||||
} VkBufferImageCopy;
|
||||
|
||||
typedef union VkClearColorValue {
|
||||
float float32[4];
|
||||
int32_t int32[4];
|
||||
uint32_t uint32[4];
|
||||
} VkClearColorValue;
|
||||
|
||||
typedef struct VkClearDepthStencilValue {
|
||||
float depth;
|
||||
uint32_t stencil;
|
||||
} VkClearDepthStencilValue;
|
||||
|
||||
typedef union VkClearValue {
|
||||
VkClearColorValue color;
|
||||
VkClearDepthStencilValue depthStencil;
|
||||
} VkClearValue;
|
||||
|
||||
typedef struct VkClearAttachment {
|
||||
VkImageAspectFlags aspectMask;
|
||||
uint32_t colorAttachment;
|
||||
VkClearValue clearValue;
|
||||
} VkClearAttachment;
|
||||
|
||||
typedef struct VkClearRect {
|
||||
VkRect2D rect;
|
||||
uint32_t baseArrayLayer;
|
||||
uint32_t layerCount;
|
||||
} VkClearRect;
|
||||
|
||||
typedef struct VkImageResolve {
|
||||
VkImageSubresourceLayers srcSubresource;
|
||||
VkOffset3D srcOffset;
|
||||
VkImageSubresourceLayers dstSubresource;
|
||||
VkOffset3D dstOffset;
|
||||
VkExtent3D extent;
|
||||
} VkImageResolve;
|
||||
|
||||
typedef struct VkMemoryBarrier {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkAccessFlags srcAccessMask;
|
||||
VkAccessFlags dstAccessMask;
|
||||
} VkMemoryBarrier;
|
||||
|
||||
typedef struct VkBufferMemoryBarrier {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkAccessFlags srcAccessMask;
|
||||
VkAccessFlags dstAccessMask;
|
||||
uint32_t srcQueueFamilyIndex;
|
||||
uint32_t dstQueueFamilyIndex;
|
||||
VkBuffer buffer;
|
||||
VkDeviceSize offset;
|
||||
VkDeviceSize size;
|
||||
} VkBufferMemoryBarrier;
|
||||
|
||||
typedef struct VkImageMemoryBarrier {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkAccessFlags srcAccessMask;
|
||||
VkAccessFlags dstAccessMask;
|
||||
VkImageLayout oldLayout;
|
||||
VkImageLayout newLayout;
|
||||
uint32_t srcQueueFamilyIndex;
|
||||
uint32_t dstQueueFamilyIndex;
|
||||
VkImage image;
|
||||
VkImageSubresourceRange subresourceRange;
|
||||
} VkImageMemoryBarrier;
|
||||
|
||||
typedef struct VkRenderPassBeginInfo {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkRenderPass renderPass;
|
||||
VkFramebuffer framebuffer;
|
||||
VkRect2D renderArea;
|
||||
uint32_t clearValueCount;
|
||||
const VkClearValue* pClearValues;
|
||||
} VkRenderPassBeginInfo;
|
||||
|
||||
typedef struct VkDispatchIndirectCommand {
|
||||
uint32_t x;
|
||||
uint32_t y;
|
||||
uint32_t z;
|
||||
} VkDispatchIndirectCommand;
|
||||
|
||||
typedef struct VkDrawIndexedIndirectCommand {
|
||||
uint32_t indexCount;
|
||||
uint32_t instanceCount;
|
||||
uint32_t firstIndex;
|
||||
int32_t vertexOffset;
|
||||
uint32_t firstInstance;
|
||||
} VkDrawIndexedIndirectCommand;
|
||||
|
||||
typedef struct VkDrawIndirectCommand {
|
||||
uint32_t vertexCount;
|
||||
uint32_t instanceCount;
|
||||
uint32_t firstVertex;
|
||||
uint32_t firstInstance;
|
||||
} VkDrawIndirectCommand;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties);
|
||||
typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName);
|
||||
typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory);
|
||||
typedef void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData);
|
||||
typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets);
|
||||
typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers);
|
||||
typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
|
||||
const VkInstanceCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkInstance* pInstance);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
|
||||
VkInstance instance,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
|
||||
VkInstance instance,
|
||||
uint32_t* pPhysicalDeviceCount,
|
||||
VkPhysicalDevice* pPhysicalDevices);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceFeatures* pFeatures);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkFormat format,
|
||||
VkFormatProperties* pFormatProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkFormat format,
|
||||
VkImageType type,
|
||||
VkImageTiling tiling,
|
||||
VkImageUsageFlags usage,
|
||||
VkImageCreateFlags flags,
|
||||
VkImageFormatProperties* pImageFormatProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceProperties* pProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pQueueFamilyPropertyCount,
|
||||
VkQueueFamilyProperties* pQueueFamilyProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceMemoryProperties* pMemoryProperties);
|
||||
|
||||
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(
|
||||
VkInstance instance,
|
||||
const char* pName);
|
||||
|
||||
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(
|
||||
VkDevice device,
|
||||
const char* pName);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkDeviceCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkDevice* pDevice);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
|
||||
VkDevice device,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
|
||||
const char* pLayerName,
|
||||
uint32_t* pPropertyCount,
|
||||
VkExtensionProperties* pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const char* pLayerName,
|
||||
uint32_t* pPropertyCount,
|
||||
VkExtensionProperties* pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
|
||||
uint32_t* pPropertyCount,
|
||||
VkLayerProperties* pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pPropertyCount,
|
||||
VkLayerProperties* pProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
|
||||
VkDevice device,
|
||||
uint32_t queueFamilyIndex,
|
||||
uint32_t queueIndex,
|
||||
VkQueue* pQueue);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
|
||||
VkQueue queue,
|
||||
uint32_t submitCount,
|
||||
const VkSubmitInfo* pSubmits,
|
||||
VkFence fence);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
|
||||
VkQueue queue);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
|
||||
VkDevice device);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
|
||||
VkDevice device,
|
||||
const VkMemoryAllocateInfo* pAllocateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkDeviceMemory* pMemory);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkFreeMemory(
|
||||
VkDevice device,
|
||||
VkDeviceMemory memory,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
|
||||
VkDevice device,
|
||||
VkDeviceMemory memory,
|
||||
VkDeviceSize offset,
|
||||
VkDeviceSize size,
|
||||
VkMemoryMapFlags flags,
|
||||
void** ppData);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(
|
||||
VkDevice device,
|
||||
VkDeviceMemory memory);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
|
||||
VkDevice device,
|
||||
uint32_t memoryRangeCount,
|
||||
const VkMappedMemoryRange* pMemoryRanges);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
|
||||
VkDevice device,
|
||||
uint32_t memoryRangeCount,
|
||||
const VkMappedMemoryRange* pMemoryRanges);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
|
||||
VkDevice device,
|
||||
VkDeviceMemory memory,
|
||||
VkDeviceSize* pCommittedMemoryInBytes);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
|
||||
VkDevice device,
|
||||
VkBuffer buffer,
|
||||
VkDeviceMemory memory,
|
||||
VkDeviceSize memoryOffset);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
|
||||
VkDevice device,
|
||||
VkImage image,
|
||||
VkDeviceMemory memory,
|
||||
VkDeviceSize memoryOffset);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
|
||||
VkDevice device,
|
||||
VkBuffer buffer,
|
||||
VkMemoryRequirements* pMemoryRequirements);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
|
||||
VkDevice device,
|
||||
VkImage image,
|
||||
VkMemoryRequirements* pMemoryRequirements);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
|
||||
VkDevice device,
|
||||
VkImage image,
|
||||
uint32_t* pSparseMemoryRequirementCount,
|
||||
VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkFormat format,
|
||||
VkImageType type,
|
||||
VkSampleCountFlagBits samples,
|
||||
VkImageUsageFlags usage,
|
||||
VkImageTiling tiling,
|
||||
uint32_t* pPropertyCount,
|
||||
VkSparseImageFormatProperties* pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
|
||||
VkQueue queue,
|
||||
uint32_t bindInfoCount,
|
||||
const VkBindSparseInfo* pBindInfo,
|
||||
VkFence fence);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
|
||||
VkDevice device,
|
||||
const VkFenceCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkFence* pFence);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyFence(
|
||||
VkDevice device,
|
||||
VkFence fence,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
|
||||
VkDevice device,
|
||||
uint32_t fenceCount,
|
||||
const VkFence* pFences);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
|
||||
VkDevice device,
|
||||
VkFence fence);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
|
||||
VkDevice device,
|
||||
uint32_t fenceCount,
|
||||
const VkFence* pFences,
|
||||
VkBool32 waitAll,
|
||||
uint64_t timeout);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
|
||||
VkDevice device,
|
||||
const VkSemaphoreCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSemaphore* pSemaphore);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(
|
||||
VkDevice device,
|
||||
VkSemaphore semaphore,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
|
||||
VkDevice device,
|
||||
const VkEventCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkEvent* pEvent);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(
|
||||
VkDevice device,
|
||||
VkEvent event,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
|
||||
VkDevice device,
|
||||
VkEvent event);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
|
||||
VkDevice device,
|
||||
VkEvent event);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
|
||||
VkDevice device,
|
||||
VkEvent event);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
|
||||
VkDevice device,
|
||||
const VkQueryPoolCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkQueryPool* pQueryPool);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(
|
||||
VkDevice device,
|
||||
VkQueryPool queryPool,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
|
||||
VkDevice device,
|
||||
VkQueryPool queryPool,
|
||||
uint32_t firstQuery,
|
||||
uint32_t queryCount,
|
||||
size_t dataSize,
|
||||
void* pData,
|
||||
VkDeviceSize stride,
|
||||
VkQueryResultFlags flags);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
|
||||
VkDevice device,
|
||||
const VkBufferCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkBuffer* pBuffer);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(
|
||||
VkDevice device,
|
||||
VkBuffer buffer,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
|
||||
VkDevice device,
|
||||
const VkBufferViewCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkBufferView* pView);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(
|
||||
VkDevice device,
|
||||
VkBufferView bufferView,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
|
||||
VkDevice device,
|
||||
const VkImageCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkImage* pImage);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyImage(
|
||||
VkDevice device,
|
||||
VkImage image,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
|
||||
VkDevice device,
|
||||
VkImage image,
|
||||
const VkImageSubresource* pSubresource,
|
||||
VkSubresourceLayout* pLayout);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
|
||||
VkDevice device,
|
||||
const VkImageViewCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkImageView* pView);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(
|
||||
VkDevice device,
|
||||
VkImageView imageView,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
|
||||
VkDevice device,
|
||||
const VkShaderModuleCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkShaderModule* pShaderModule);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(
|
||||
VkDevice device,
|
||||
VkShaderModule shaderModule,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
|
||||
VkDevice device,
|
||||
const VkPipelineCacheCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkPipelineCache* pPipelineCache);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(
|
||||
VkDevice device,
|
||||
VkPipelineCache pipelineCache,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
|
||||
VkDevice device,
|
||||
VkPipelineCache pipelineCache,
|
||||
size_t* pDataSize,
|
||||
void* pData);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
|
||||
VkDevice device,
|
||||
VkPipelineCache dstCache,
|
||||
uint32_t srcCacheCount,
|
||||
const VkPipelineCache* pSrcCaches);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
|
||||
VkDevice device,
|
||||
VkPipelineCache pipelineCache,
|
||||
uint32_t createInfoCount,
|
||||
const VkGraphicsPipelineCreateInfo* pCreateInfos,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkPipeline* pPipelines);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
|
||||
VkDevice device,
|
||||
VkPipelineCache pipelineCache,
|
||||
uint32_t createInfoCount,
|
||||
const VkComputePipelineCreateInfo* pCreateInfos,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkPipeline* pPipelines);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(
|
||||
VkDevice device,
|
||||
VkPipeline pipeline,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
|
||||
VkDevice device,
|
||||
const VkPipelineLayoutCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkPipelineLayout* pPipelineLayout);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(
|
||||
VkDevice device,
|
||||
VkPipelineLayout pipelineLayout,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
|
||||
VkDevice device,
|
||||
const VkSamplerCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSampler* pSampler);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroySampler(
|
||||
VkDevice device,
|
||||
VkSampler sampler,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
|
||||
VkDevice device,
|
||||
const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkDescriptorSetLayout* pSetLayout);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(
|
||||
VkDevice device,
|
||||
VkDescriptorSetLayout descriptorSetLayout,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
|
||||
VkDevice device,
|
||||
const VkDescriptorPoolCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkDescriptorPool* pDescriptorPool);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(
|
||||
VkDevice device,
|
||||
VkDescriptorPool descriptorPool,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
|
||||
VkDevice device,
|
||||
VkDescriptorPool descriptorPool,
|
||||
VkDescriptorPoolResetFlags flags);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
|
||||
VkDevice device,
|
||||
const VkDescriptorSetAllocateInfo* pAllocateInfo,
|
||||
VkDescriptorSet* pDescriptorSets);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
|
||||
VkDevice device,
|
||||
VkDescriptorPool descriptorPool,
|
||||
uint32_t descriptorSetCount,
|
||||
const VkDescriptorSet* pDescriptorSets);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
|
||||
VkDevice device,
|
||||
uint32_t descriptorWriteCount,
|
||||
const VkWriteDescriptorSet* pDescriptorWrites,
|
||||
uint32_t descriptorCopyCount,
|
||||
const VkCopyDescriptorSet* pDescriptorCopies);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
|
||||
VkDevice device,
|
||||
const VkFramebufferCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkFramebuffer* pFramebuffer);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(
|
||||
VkDevice device,
|
||||
VkFramebuffer framebuffer,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
|
||||
VkDevice device,
|
||||
const VkRenderPassCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkRenderPass* pRenderPass);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(
|
||||
VkDevice device,
|
||||
VkRenderPass renderPass,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
|
||||
VkDevice device,
|
||||
VkRenderPass renderPass,
|
||||
VkExtent2D* pGranularity);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
|
||||
VkDevice device,
|
||||
const VkCommandPoolCreateInfo* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkCommandPool* pCommandPool);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(
|
||||
VkDevice device,
|
||||
VkCommandPool commandPool,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
|
||||
VkDevice device,
|
||||
VkCommandPool commandPool,
|
||||
VkCommandPoolResetFlags flags);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
|
||||
VkDevice device,
|
||||
const VkCommandBufferAllocateInfo* pAllocateInfo,
|
||||
VkCommandBuffer* pCommandBuffers);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(
|
||||
VkDevice device,
|
||||
VkCommandPool commandPool,
|
||||
uint32_t commandBufferCount,
|
||||
const VkCommandBuffer* pCommandBuffers);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkCommandBufferBeginInfo* pBeginInfo);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
|
||||
VkCommandBuffer commandBuffer);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkCommandBufferResetFlags flags);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkPipelineBindPoint pipelineBindPoint,
|
||||
VkPipeline pipeline);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t firstViewport,
|
||||
uint32_t viewportCount,
|
||||
const VkViewport* pViewports);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t firstScissor,
|
||||
uint32_t scissorCount,
|
||||
const VkRect2D* pScissors);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(
|
||||
VkCommandBuffer commandBuffer,
|
||||
float lineWidth);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(
|
||||
VkCommandBuffer commandBuffer,
|
||||
float depthBiasConstantFactor,
|
||||
float depthBiasClamp,
|
||||
float depthBiasSlopeFactor);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const float blendConstants[4]);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(
|
||||
VkCommandBuffer commandBuffer,
|
||||
float minDepthBounds,
|
||||
float maxDepthBounds);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkStencilFaceFlags faceMask,
|
||||
uint32_t compareMask);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkStencilFaceFlags faceMask,
|
||||
uint32_t writeMask);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkStencilFaceFlags faceMask,
|
||||
uint32_t reference);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkPipelineBindPoint pipelineBindPoint,
|
||||
VkPipelineLayout layout,
|
||||
uint32_t firstSet,
|
||||
uint32_t descriptorSetCount,
|
||||
const VkDescriptorSet* pDescriptorSets,
|
||||
uint32_t dynamicOffsetCount,
|
||||
const uint32_t* pDynamicOffsets);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer buffer,
|
||||
VkDeviceSize offset,
|
||||
VkIndexType indexType);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t firstBinding,
|
||||
uint32_t bindingCount,
|
||||
const VkBuffer* pBuffers,
|
||||
const VkDeviceSize* pOffsets);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t vertexCount,
|
||||
uint32_t instanceCount,
|
||||
uint32_t firstVertex,
|
||||
uint32_t firstInstance);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t indexCount,
|
||||
uint32_t instanceCount,
|
||||
uint32_t firstIndex,
|
||||
int32_t vertexOffset,
|
||||
uint32_t firstInstance);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer buffer,
|
||||
VkDeviceSize offset,
|
||||
uint32_t drawCount,
|
||||
uint32_t stride);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer buffer,
|
||||
VkDeviceSize offset,
|
||||
uint32_t drawCount,
|
||||
uint32_t stride);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t groupCountX,
|
||||
uint32_t groupCountY,
|
||||
uint32_t groupCountZ);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer buffer,
|
||||
VkDeviceSize offset);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer srcBuffer,
|
||||
VkBuffer dstBuffer,
|
||||
uint32_t regionCount,
|
||||
const VkBufferCopy* pRegions);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageCopy* pRegions);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageBlit* pRegions,
|
||||
VkFilter filter);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer srcBuffer,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkBufferImageCopy* pRegions);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkBuffer dstBuffer,
|
||||
uint32_t regionCount,
|
||||
const VkBufferImageCopy* pRegions);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer dstBuffer,
|
||||
VkDeviceSize dstOffset,
|
||||
VkDeviceSize dataSize,
|
||||
const void* pData);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer dstBuffer,
|
||||
VkDeviceSize dstOffset,
|
||||
VkDeviceSize size,
|
||||
uint32_t data);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkImage image,
|
||||
VkImageLayout imageLayout,
|
||||
const VkClearColorValue* pColor,
|
||||
uint32_t rangeCount,
|
||||
const VkImageSubresourceRange* pRanges);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkImage image,
|
||||
VkImageLayout imageLayout,
|
||||
const VkClearDepthStencilValue* pDepthStencil,
|
||||
uint32_t rangeCount,
|
||||
const VkImageSubresourceRange* pRanges);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t attachmentCount,
|
||||
const VkClearAttachment* pAttachments,
|
||||
uint32_t rectCount,
|
||||
const VkClearRect* pRects);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageResolve* pRegions);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkEvent event,
|
||||
VkPipelineStageFlags stageMask);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkEvent event,
|
||||
VkPipelineStageFlags stageMask);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t eventCount,
|
||||
const VkEvent* pEvents,
|
||||
VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
uint32_t memoryBarrierCount,
|
||||
const VkMemoryBarrier* pMemoryBarriers,
|
||||
uint32_t bufferMemoryBarrierCount,
|
||||
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
||||
uint32_t imageMemoryBarrierCount,
|
||||
const VkImageMemoryBarrier* pImageMemoryBarriers);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
VkDependencyFlags dependencyFlags,
|
||||
uint32_t memoryBarrierCount,
|
||||
const VkMemoryBarrier* pMemoryBarriers,
|
||||
uint32_t bufferMemoryBarrierCount,
|
||||
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
||||
uint32_t imageMemoryBarrierCount,
|
||||
const VkImageMemoryBarrier* pImageMemoryBarriers);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkQueryPool queryPool,
|
||||
uint32_t query,
|
||||
VkQueryControlFlags flags);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkQueryPool queryPool,
|
||||
uint32_t query);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkQueryPool queryPool,
|
||||
uint32_t firstQuery,
|
||||
uint32_t queryCount);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkPipelineStageFlagBits pipelineStage,
|
||||
VkQueryPool queryPool,
|
||||
uint32_t query);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkQueryPool queryPool,
|
||||
uint32_t firstQuery,
|
||||
uint32_t queryCount,
|
||||
VkBuffer dstBuffer,
|
||||
VkDeviceSize dstOffset,
|
||||
VkDeviceSize stride,
|
||||
VkQueryResultFlags flags);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkPipelineLayout layout,
|
||||
VkShaderStageFlags stageFlags,
|
||||
uint32_t offset,
|
||||
uint32_t size,
|
||||
const void* pValues);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkRenderPassBeginInfo* pRenderPassBegin,
|
||||
VkSubpassContents contents);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkSubpassContents contents);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
|
||||
VkCommandBuffer commandBuffer);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t commandBufferCount,
|
||||
const VkCommandBuffer* pCommandBuffers);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_surface 1
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
|
||||
|
||||
#define VK_KHR_SURFACE_SPEC_VERSION 25
|
||||
#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface"
|
||||
#define VK_COLORSPACE_SRGB_NONLINEAR_KHR VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
|
||||
|
||||
|
||||
typedef enum VkColorSpaceKHR {
|
||||
VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0,
|
||||
VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001,
|
||||
VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002,
|
||||
VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = 1000104003,
|
||||
VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004,
|
||||
VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005,
|
||||
VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006,
|
||||
VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007,
|
||||
VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008,
|
||||
VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009,
|
||||
VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010,
|
||||
VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011,
|
||||
VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012,
|
||||
VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013,
|
||||
VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014,
|
||||
VK_COLOR_SPACE_BEGIN_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
|
||||
VK_COLOR_SPACE_END_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,
|
||||
VK_COLOR_SPACE_RANGE_SIZE_KHR = (VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - VK_COLOR_SPACE_SRGB_NONLINEAR_KHR + 1),
|
||||
VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkColorSpaceKHR;
|
||||
|
||||
typedef enum VkPresentModeKHR {
|
||||
VK_PRESENT_MODE_IMMEDIATE_KHR = 0,
|
||||
VK_PRESENT_MODE_MAILBOX_KHR = 1,
|
||||
VK_PRESENT_MODE_FIFO_KHR = 2,
|
||||
VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
|
||||
VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000,
|
||||
VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001,
|
||||
VK_PRESENT_MODE_BEGIN_RANGE_KHR = VK_PRESENT_MODE_IMMEDIATE_KHR,
|
||||
VK_PRESENT_MODE_END_RANGE_KHR = VK_PRESENT_MODE_FIFO_RELAXED_KHR,
|
||||
VK_PRESENT_MODE_RANGE_SIZE_KHR = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
|
||||
VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkPresentModeKHR;
|
||||
|
||||
|
||||
typedef enum VkSurfaceTransformFlagBitsKHR {
|
||||
VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001,
|
||||
VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002,
|
||||
VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004,
|
||||
VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008,
|
||||
VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010,
|
||||
VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020,
|
||||
VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040,
|
||||
VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080,
|
||||
VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100,
|
||||
VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkSurfaceTransformFlagBitsKHR;
|
||||
typedef VkFlags VkSurfaceTransformFlagsKHR;
|
||||
|
||||
typedef enum VkCompositeAlphaFlagBitsKHR {
|
||||
VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
|
||||
VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002,
|
||||
VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004,
|
||||
VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008,
|
||||
VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkCompositeAlphaFlagBitsKHR;
|
||||
typedef VkFlags VkCompositeAlphaFlagsKHR;
|
||||
|
||||
typedef struct VkSurfaceCapabilitiesKHR {
|
||||
uint32_t minImageCount;
|
||||
uint32_t maxImageCount;
|
||||
VkExtent2D currentExtent;
|
||||
VkExtent2D minImageExtent;
|
||||
VkExtent2D maxImageExtent;
|
||||
uint32_t maxImageArrayLayers;
|
||||
VkSurfaceTransformFlagsKHR supportedTransforms;
|
||||
VkSurfaceTransformFlagBitsKHR currentTransform;
|
||||
VkCompositeAlphaFlagsKHR supportedCompositeAlpha;
|
||||
VkImageUsageFlags supportedUsageFlags;
|
||||
} VkSurfaceCapabilitiesKHR;
|
||||
|
||||
typedef struct VkSurfaceFormatKHR {
|
||||
VkFormat format;
|
||||
VkColorSpaceKHR colorSpace;
|
||||
} VkSurfaceFormatKHR;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(
|
||||
VkInstance instance,
|
||||
VkSurfaceKHR surface,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex,
|
||||
VkSurfaceKHR surface,
|
||||
VkBool32* pSupported);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkSurfaceKHR surface,
|
||||
VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkSurfaceKHR surface,
|
||||
uint32_t* pSurfaceFormatCount,
|
||||
VkSurfaceFormatKHR* pSurfaceFormats);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkSurfaceKHR surface,
|
||||
uint32_t* pPresentModeCount,
|
||||
VkPresentModeKHR* pPresentModes);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_swapchain 1
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR)
|
||||
|
||||
#define VK_KHR_SWAPCHAIN_SPEC_VERSION 68
|
||||
#define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain"
|
||||
|
||||
|
||||
typedef enum VkSwapchainCreateFlagBitsKHR {
|
||||
VK_SWAPCHAIN_CREATE_BIND_SFR_BIT_KHX = 0x00000001,
|
||||
VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkSwapchainCreateFlagBitsKHR;
|
||||
typedef VkFlags VkSwapchainCreateFlagsKHR;
|
||||
|
||||
typedef struct VkSwapchainCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSwapchainCreateFlagsKHR flags;
|
||||
VkSurfaceKHR surface;
|
||||
uint32_t minImageCount;
|
||||
VkFormat imageFormat;
|
||||
VkColorSpaceKHR imageColorSpace;
|
||||
VkExtent2D imageExtent;
|
||||
uint32_t imageArrayLayers;
|
||||
VkImageUsageFlags imageUsage;
|
||||
VkSharingMode imageSharingMode;
|
||||
uint32_t queueFamilyIndexCount;
|
||||
const uint32_t* pQueueFamilyIndices;
|
||||
VkSurfaceTransformFlagBitsKHR preTransform;
|
||||
VkCompositeAlphaFlagBitsKHR compositeAlpha;
|
||||
VkPresentModeKHR presentMode;
|
||||
VkBool32 clipped;
|
||||
VkSwapchainKHR oldSwapchain;
|
||||
} VkSwapchainCreateInfoKHR;
|
||||
|
||||
typedef struct VkPresentInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t waitSemaphoreCount;
|
||||
const VkSemaphore* pWaitSemaphores;
|
||||
uint32_t swapchainCount;
|
||||
const VkSwapchainKHR* pSwapchains;
|
||||
const uint32_t* pImageIndices;
|
||||
VkResult* pResults;
|
||||
} VkPresentInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(
|
||||
VkDevice device,
|
||||
const VkSwapchainCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSwapchainKHR* pSwapchain);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain,
|
||||
uint32_t* pSwapchainImageCount,
|
||||
VkImage* pSwapchainImages);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain,
|
||||
uint64_t timeout,
|
||||
VkSemaphore semaphore,
|
||||
VkFence fence,
|
||||
uint32_t* pImageIndex);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(
|
||||
VkQueue queue,
|
||||
const VkPresentInfoKHR* pPresentInfo);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_display 1
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR)
|
||||
|
||||
#define VK_KHR_DISPLAY_SPEC_VERSION 21
|
||||
#define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display"
|
||||
|
||||
|
||||
typedef enum VkDisplayPlaneAlphaFlagBitsKHR {
|
||||
VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001,
|
||||
VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002,
|
||||
VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004,
|
||||
VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008,
|
||||
VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkDisplayPlaneAlphaFlagBitsKHR;
|
||||
typedef VkFlags VkDisplayPlaneAlphaFlagsKHR;
|
||||
typedef VkFlags VkDisplayModeCreateFlagsKHR;
|
||||
typedef VkFlags VkDisplaySurfaceCreateFlagsKHR;
|
||||
|
||||
typedef struct VkDisplayPropertiesKHR {
|
||||
VkDisplayKHR display;
|
||||
const char* displayName;
|
||||
VkExtent2D physicalDimensions;
|
||||
VkExtent2D physicalResolution;
|
||||
VkSurfaceTransformFlagsKHR supportedTransforms;
|
||||
VkBool32 planeReorderPossible;
|
||||
VkBool32 persistentContent;
|
||||
} VkDisplayPropertiesKHR;
|
||||
|
||||
typedef struct VkDisplayModeParametersKHR {
|
||||
VkExtent2D visibleRegion;
|
||||
uint32_t refreshRate;
|
||||
} VkDisplayModeParametersKHR;
|
||||
|
||||
typedef struct VkDisplayModePropertiesKHR {
|
||||
VkDisplayModeKHR displayMode;
|
||||
VkDisplayModeParametersKHR parameters;
|
||||
} VkDisplayModePropertiesKHR;
|
||||
|
||||
typedef struct VkDisplayModeCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDisplayModeCreateFlagsKHR flags;
|
||||
VkDisplayModeParametersKHR parameters;
|
||||
} VkDisplayModeCreateInfoKHR;
|
||||
|
||||
typedef struct VkDisplayPlaneCapabilitiesKHR {
|
||||
VkDisplayPlaneAlphaFlagsKHR supportedAlpha;
|
||||
VkOffset2D minSrcPosition;
|
||||
VkOffset2D maxSrcPosition;
|
||||
VkExtent2D minSrcExtent;
|
||||
VkExtent2D maxSrcExtent;
|
||||
VkOffset2D minDstPosition;
|
||||
VkOffset2D maxDstPosition;
|
||||
VkExtent2D minDstExtent;
|
||||
VkExtent2D maxDstExtent;
|
||||
} VkDisplayPlaneCapabilitiesKHR;
|
||||
|
||||
typedef struct VkDisplayPlanePropertiesKHR {
|
||||
VkDisplayKHR currentDisplay;
|
||||
uint32_t currentStackIndex;
|
||||
} VkDisplayPlanePropertiesKHR;
|
||||
|
||||
typedef struct VkDisplaySurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDisplaySurfaceCreateFlagsKHR flags;
|
||||
VkDisplayModeKHR displayMode;
|
||||
uint32_t planeIndex;
|
||||
uint32_t planeStackIndex;
|
||||
VkSurfaceTransformFlagBitsKHR transform;
|
||||
float globalAlpha;
|
||||
VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
|
||||
VkExtent2D imageExtent;
|
||||
} VkDisplaySurfaceCreateInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pPropertyCount,
|
||||
VkDisplayPropertiesKHR* pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pPropertyCount,
|
||||
VkDisplayPlanePropertiesKHR* pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t planeIndex,
|
||||
uint32_t* pDisplayCount,
|
||||
VkDisplayKHR* pDisplays);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkDisplayKHR display,
|
||||
uint32_t* pPropertyCount,
|
||||
VkDisplayModePropertiesKHR* pProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkDisplayKHR display,
|
||||
const VkDisplayModeCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkDisplayModeKHR* pMode);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkDisplayModeKHR mode,
|
||||
uint32_t planeIndex,
|
||||
VkDisplayPlaneCapabilitiesKHR* pCapabilities);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(
|
||||
VkInstance instance,
|
||||
const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_display_swapchain 1
|
||||
#define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 9
|
||||
#define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain"
|
||||
|
||||
typedef struct VkDisplayPresentInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkRect2D srcRect;
|
||||
VkRect2D dstRect;
|
||||
VkBool32 persistent;
|
||||
} VkDisplayPresentInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
|
||||
VkDevice device,
|
||||
uint32_t swapchainCount,
|
||||
const VkSwapchainCreateInfoKHR* pCreateInfos,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSwapchainKHR* pSwapchains);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
#define VK_KHR_xlib_surface 1
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
#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
|
||||
#endif /* VK_USE_PLATFORM_XLIB_KHR */
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
#define VK_KHR_xcb_surface 1
|
||||
#include <xcb/xcb.h>
|
||||
|
||||
#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
|
||||
#endif /* VK_USE_PLATFORM_XCB_KHR */
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#define VK_KHR_wayland_surface 1
|
||||
#include <wayland-client.h>
|
||||
|
||||
#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
|
||||
#endif /* VK_USE_PLATFORM_WAYLAND_KHR */
|
||||
|
||||
#ifdef VK_USE_PLATFORM_MIR_KHR
|
||||
#define VK_KHR_mir_surface 1
|
||||
#include <mir_toolkit/client_types.h>
|
||||
|
||||
#define VK_KHR_MIR_SURFACE_SPEC_VERSION 4
|
||||
#define VK_KHR_MIR_SURFACE_EXTENSION_NAME "VK_KHR_mir_surface"
|
||||
|
||||
typedef VkFlags VkMirSurfaceCreateFlagsKHR;
|
||||
|
||||
typedef struct VkMirSurfaceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkMirSurfaceCreateFlagsKHR flags;
|
||||
MirConnection* connection;
|
||||
MirSurface* mirSurface;
|
||||
} VkMirSurfaceCreateInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateMirSurfaceKHR)(VkInstance instance, const VkMirSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceMirPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, MirConnection* connection);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateMirSurfaceKHR(
|
||||
VkInstance instance,
|
||||
const VkMirSurfaceCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkSurfaceKHR* pSurface);
|
||||
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceMirPresentationSupportKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t queueFamilyIndex,
|
||||
MirConnection* connection);
|
||||
#endif
|
||||
#endif /* VK_USE_PLATFORM_MIR_KHR */
|
||||
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
#define VK_KHR_android_surface 1
|
||||
#include <android/native_window.h>
|
||||
|
||||
#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;
|
||||
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
|
||||
#endif /* VK_USE_PLATFORM_ANDROID_KHR */
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
#define VK_KHR_win32_surface 1
|
||||
#include <windows.h>
|
||||
|
||||
#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
|
||||
#endif /* VK_USE_PLATFORM_WIN32_KHR */
|
||||
|
||||
#define VK_KHR_sampler_mirror_clamp_to_edge 1
|
||||
#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 1
|
||||
#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge"
|
||||
|
||||
|
||||
#define VK_KHR_get_physical_device_properties2 1
|
||||
#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 1
|
||||
#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2"
|
||||
|
||||
typedef struct VkPhysicalDeviceFeatures2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkPhysicalDeviceFeatures features;
|
||||
} VkPhysicalDeviceFeatures2KHR;
|
||||
|
||||
typedef struct VkPhysicalDeviceProperties2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkPhysicalDeviceProperties properties;
|
||||
} VkPhysicalDeviceProperties2KHR;
|
||||
|
||||
typedef struct VkFormatProperties2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkFormatProperties formatProperties;
|
||||
} VkFormatProperties2KHR;
|
||||
|
||||
typedef struct VkImageFormatProperties2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkImageFormatProperties imageFormatProperties;
|
||||
} VkImageFormatProperties2KHR;
|
||||
|
||||
typedef struct VkPhysicalDeviceImageFormatInfo2KHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkFormat format;
|
||||
VkImageType type;
|
||||
VkImageTiling tiling;
|
||||
VkImageUsageFlags usage;
|
||||
VkImageCreateFlags flags;
|
||||
} VkPhysicalDeviceImageFormatInfo2KHR;
|
||||
|
||||
typedef struct VkQueueFamilyProperties2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkQueueFamilyProperties queueFamilyProperties;
|
||||
} VkQueueFamilyProperties2KHR;
|
||||
|
||||
typedef struct VkPhysicalDeviceMemoryProperties2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkPhysicalDeviceMemoryProperties memoryProperties;
|
||||
} VkPhysicalDeviceMemoryProperties2KHR;
|
||||
|
||||
typedef struct VkSparseImageFormatProperties2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkSparseImageFormatProperties properties;
|
||||
} VkSparseImageFormatProperties2KHR;
|
||||
|
||||
typedef struct VkPhysicalDeviceSparseImageFormatInfo2KHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkFormat format;
|
||||
VkImageType type;
|
||||
VkSampleCountFlagBits samples;
|
||||
VkImageUsageFlags usage;
|
||||
VkImageTiling tiling;
|
||||
} VkPhysicalDeviceSparseImageFormatInfo2KHR;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2KHR* pFeatures);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2KHR* pProperties);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2KHR)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2KHR* pFormatProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo, VkImageFormatProperties2KHR* pImageFormatProperties);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2KHR* pQueueFamilyProperties);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2KHR* pProperties);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceFeatures2KHR* pFeatures);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceProperties2KHR* pProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkFormat format,
|
||||
VkFormatProperties2KHR* pFormatProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceImageFormatInfo2KHR* pImageFormatInfo,
|
||||
VkImageFormatProperties2KHR* pImageFormatProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
uint32_t* pQueueFamilyPropertyCount,
|
||||
VkQueueFamilyProperties2KHR* pQueueFamilyProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkPhysicalDeviceMemoryProperties2KHR* pMemoryProperties);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSparseImageFormatInfo2KHR* pFormatInfo,
|
||||
uint32_t* pPropertyCount,
|
||||
VkSparseImageFormatProperties2KHR* pProperties);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_shader_draw_parameters 1
|
||||
#define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1
|
||||
#define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters"
|
||||
|
||||
|
||||
#define VK_KHR_maintenance1 1
|
||||
#define VK_KHR_MAINTENANCE1_SPEC_VERSION 1
|
||||
#define VK_KHR_MAINTENANCE1_EXTENSION_NAME "VK_KHR_maintenance1"
|
||||
|
||||
typedef VkFlags VkCommandPoolTrimFlagsKHR;
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlagsKHR flags);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR(
|
||||
VkDevice device,
|
||||
VkCommandPool commandPool,
|
||||
VkCommandPoolTrimFlagsKHR flags);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_external_memory_capabilities 1
|
||||
#define VK_LUID_SIZE_KHR 8
|
||||
#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities"
|
||||
|
||||
|
||||
typedef enum VkExternalMemoryHandleTypeFlagBitsKHR {
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = 0x00000001,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = 0x00000002,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = 0x00000004,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = 0x00000008,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = 0x00000010,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = 0x00000020,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = 0x00000040,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkExternalMemoryHandleTypeFlagBitsKHR;
|
||||
typedef VkFlags VkExternalMemoryHandleTypeFlagsKHR;
|
||||
|
||||
typedef enum VkExternalMemoryFeatureFlagBitsKHR {
|
||||
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = 0x00000001,
|
||||
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = 0x00000002,
|
||||
VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = 0x00000004,
|
||||
VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkExternalMemoryFeatureFlagBitsKHR;
|
||||
typedef VkFlags VkExternalMemoryFeatureFlagsKHR;
|
||||
|
||||
typedef struct VkExternalMemoryPropertiesKHR {
|
||||
VkExternalMemoryFeatureFlagsKHR externalMemoryFeatures;
|
||||
VkExternalMemoryHandleTypeFlagsKHR exportFromImportedHandleTypes;
|
||||
VkExternalMemoryHandleTypeFlagsKHR compatibleHandleTypes;
|
||||
} VkExternalMemoryPropertiesKHR;
|
||||
|
||||
typedef struct VkPhysicalDeviceExternalImageFormatInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalMemoryHandleTypeFlagBitsKHR handleType;
|
||||
} VkPhysicalDeviceExternalImageFormatInfoKHR;
|
||||
|
||||
typedef struct VkExternalImageFormatPropertiesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkExternalMemoryPropertiesKHR externalMemoryProperties;
|
||||
} VkExternalImageFormatPropertiesKHR;
|
||||
|
||||
typedef struct VkPhysicalDeviceExternalBufferInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBufferCreateFlags flags;
|
||||
VkBufferUsageFlags usage;
|
||||
VkExternalMemoryHandleTypeFlagBitsKHR handleType;
|
||||
} VkPhysicalDeviceExternalBufferInfoKHR;
|
||||
|
||||
typedef struct VkExternalBufferPropertiesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkExternalMemoryPropertiesKHR externalMemoryProperties;
|
||||
} VkExternalBufferPropertiesKHR;
|
||||
|
||||
typedef struct VkPhysicalDeviceIDPropertiesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint8_t deviceUUID[VK_UUID_SIZE];
|
||||
uint8_t driverUUID[VK_UUID_SIZE];
|
||||
uint8_t deviceLUID[VK_LUID_SIZE_KHR];
|
||||
uint32_t deviceNodeMask;
|
||||
VkBool32 deviceLUIDValid;
|
||||
} VkPhysicalDeviceIDPropertiesKHR;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo, VkExternalBufferPropertiesKHR* pExternalBufferProperties);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceExternalBufferInfoKHR* pExternalBufferInfo,
|
||||
VkExternalBufferPropertiesKHR* pExternalBufferProperties);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_external_memory 1
|
||||
#define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory"
|
||||
#define VK_QUEUE_FAMILY_EXTERNAL_KHR (~0U-1)
|
||||
|
||||
typedef struct VkExternalMemoryImageCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalMemoryHandleTypeFlagsKHR handleTypes;
|
||||
} VkExternalMemoryImageCreateInfoKHR;
|
||||
|
||||
typedef struct VkExternalMemoryBufferCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalMemoryHandleTypeFlagsKHR handleTypes;
|
||||
} VkExternalMemoryBufferCreateInfoKHR;
|
||||
|
||||
typedef struct VkExportMemoryAllocateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalMemoryHandleTypeFlagsKHR handleTypes;
|
||||
} VkExportMemoryAllocateInfoKHR;
|
||||
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
#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;
|
||||
VkExternalMemoryHandleTypeFlagBitsKHR 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;
|
||||
VkExternalMemoryHandleTypeFlagBitsKHR handleType;
|
||||
} VkMemoryGetWin32HandleInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHR 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,
|
||||
VkExternalMemoryHandleTypeFlagBitsKHR handleType,
|
||||
HANDLE handle,
|
||||
VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
|
||||
#endif
|
||||
#endif /* VK_USE_PLATFORM_WIN32_KHR */
|
||||
|
||||
#define VK_KHR_external_memory_fd 1
|
||||
#define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd"
|
||||
|
||||
typedef struct VkImportMemoryFdInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalMemoryHandleTypeFlagBitsKHR handleType;
|
||||
int fd;
|
||||
} VkImportMemoryFdInfoKHR;
|
||||
|
||||
typedef struct VkMemoryFdPropertiesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint32_t memoryTypeBits;
|
||||
} VkMemoryFdPropertiesKHR;
|
||||
|
||||
typedef struct VkMemoryGetFdInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDeviceMemory memory;
|
||||
VkExternalMemoryHandleTypeFlagBitsKHR handleType;
|
||||
} VkMemoryGetFdInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBitsKHR handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR(
|
||||
VkDevice device,
|
||||
const VkMemoryGetFdInfoKHR* pGetFdInfo,
|
||||
int* pFd);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR(
|
||||
VkDevice device,
|
||||
VkExternalMemoryHandleTypeFlagBitsKHR handleType,
|
||||
int fd,
|
||||
VkMemoryFdPropertiesKHR* pMemoryFdProperties);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
#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;
|
||||
|
||||
|
||||
#endif /* VK_USE_PLATFORM_WIN32_KHR */
|
||||
|
||||
#define VK_KHR_external_semaphore_capabilities 1
|
||||
#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities"
|
||||
|
||||
|
||||
typedef enum VkExternalSemaphoreHandleTypeFlagBitsKHR {
|
||||
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = 0x00000001,
|
||||
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = 0x00000002,
|
||||
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = 0x00000004,
|
||||
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = 0x00000008,
|
||||
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = 0x00000010,
|
||||
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkExternalSemaphoreHandleTypeFlagBitsKHR;
|
||||
typedef VkFlags VkExternalSemaphoreHandleTypeFlagsKHR;
|
||||
|
||||
typedef enum VkExternalSemaphoreFeatureFlagBitsKHR {
|
||||
VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = 0x00000001,
|
||||
VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = 0x00000002,
|
||||
VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkExternalSemaphoreFeatureFlagBitsKHR;
|
||||
typedef VkFlags VkExternalSemaphoreFeatureFlagsKHR;
|
||||
|
||||
typedef struct VkPhysicalDeviceExternalSemaphoreInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalSemaphoreHandleTypeFlagBitsKHR handleType;
|
||||
} VkPhysicalDeviceExternalSemaphoreInfoKHR;
|
||||
|
||||
typedef struct VkExternalSemaphorePropertiesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkExternalSemaphoreHandleTypeFlagsKHR exportFromImportedHandleTypes;
|
||||
VkExternalSemaphoreHandleTypeFlagsKHR compatibleHandleTypes;
|
||||
VkExternalSemaphoreFeatureFlagsKHR externalSemaphoreFeatures;
|
||||
} VkExternalSemaphorePropertiesKHR;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo, VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceExternalSemaphoreInfoKHR* pExternalSemaphoreInfo,
|
||||
VkExternalSemaphorePropertiesKHR* pExternalSemaphoreProperties);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_external_semaphore 1
|
||||
#define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore"
|
||||
|
||||
|
||||
typedef enum VkSemaphoreImportFlagBitsKHR {
|
||||
VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = 0x00000001,
|
||||
VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkSemaphoreImportFlagBitsKHR;
|
||||
typedef VkFlags VkSemaphoreImportFlagsKHR;
|
||||
|
||||
typedef struct VkExportSemaphoreCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalSemaphoreHandleTypeFlagsKHR handleTypes;
|
||||
} VkExportSemaphoreCreateInfoKHR;
|
||||
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
#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;
|
||||
VkSemaphoreImportFlagsKHR flags;
|
||||
VkExternalSemaphoreHandleTypeFlagBitsKHR 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;
|
||||
VkExternalSemaphoreHandleTypeFlagBitsKHR 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
|
||||
#endif /* VK_USE_PLATFORM_WIN32_KHR */
|
||||
|
||||
#define VK_KHR_external_semaphore_fd 1
|
||||
#define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd"
|
||||
|
||||
typedef struct VkImportSemaphoreFdInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSemaphore semaphore;
|
||||
VkSemaphoreImportFlagsKHR flags;
|
||||
VkExternalSemaphoreHandleTypeFlagBitsKHR handleType;
|
||||
int fd;
|
||||
} VkImportSemaphoreFdInfoKHR;
|
||||
|
||||
typedef struct VkSemaphoreGetFdInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSemaphore semaphore;
|
||||
VkExternalSemaphoreHandleTypeFlagBitsKHR handleType;
|
||||
} VkSemaphoreGetFdInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR(
|
||||
VkDevice device,
|
||||
const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR(
|
||||
VkDevice device,
|
||||
const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
|
||||
int* pFd);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_push_descriptor 1
|
||||
#define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 1
|
||||
#define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor"
|
||||
|
||||
typedef struct VkPhysicalDevicePushDescriptorPropertiesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint32_t maxPushDescriptors;
|
||||
} VkPhysicalDevicePushDescriptorPropertiesKHR;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkPipelineBindPoint pipelineBindPoint,
|
||||
VkPipelineLayout layout,
|
||||
uint32_t set,
|
||||
uint32_t descriptorWriteCount,
|
||||
const VkWriteDescriptorSet* pDescriptorWrites);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_16bit_storage 1
|
||||
#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1
|
||||
#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage"
|
||||
|
||||
typedef struct VkPhysicalDevice16BitStorageFeaturesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkBool32 storageBuffer16BitAccess;
|
||||
VkBool32 uniformAndStorageBuffer16BitAccess;
|
||||
VkBool32 storagePushConstant16;
|
||||
VkBool32 storageInputOutput16;
|
||||
} VkPhysicalDevice16BitStorageFeaturesKHR;
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_incremental_present 1
|
||||
#define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 1
|
||||
#define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present"
|
||||
|
||||
typedef struct VkRectLayerKHR {
|
||||
VkOffset2D offset;
|
||||
VkExtent2D extent;
|
||||
uint32_t layer;
|
||||
} VkRectLayerKHR;
|
||||
|
||||
typedef struct VkPresentRegionKHR {
|
||||
uint32_t rectangleCount;
|
||||
const VkRectLayerKHR* pRectangles;
|
||||
} VkPresentRegionKHR;
|
||||
|
||||
typedef struct VkPresentRegionsKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t swapchainCount;
|
||||
const VkPresentRegionKHR* pRegions;
|
||||
} VkPresentRegionsKHR;
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_descriptor_update_template 1
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplateKHR)
|
||||
|
||||
#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1
|
||||
#define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template"
|
||||
|
||||
|
||||
typedef enum VkDescriptorUpdateTemplateTypeKHR {
|
||||
VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = 0,
|
||||
VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = 1,
|
||||
VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_BEGIN_RANGE_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR,
|
||||
VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_END_RANGE_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,
|
||||
VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_RANGE_SIZE_KHR = (VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR - VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR + 1),
|
||||
VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkDescriptorUpdateTemplateTypeKHR;
|
||||
|
||||
typedef VkFlags VkDescriptorUpdateTemplateCreateFlagsKHR;
|
||||
|
||||
typedef struct VkDescriptorUpdateTemplateEntryKHR {
|
||||
uint32_t dstBinding;
|
||||
uint32_t dstArrayElement;
|
||||
uint32_t descriptorCount;
|
||||
VkDescriptorType descriptorType;
|
||||
size_t offset;
|
||||
size_t stride;
|
||||
} VkDescriptorUpdateTemplateEntryKHR;
|
||||
|
||||
typedef struct VkDescriptorUpdateTemplateCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkDescriptorUpdateTemplateCreateFlagsKHR flags;
|
||||
uint32_t descriptorUpdateEntryCount;
|
||||
const VkDescriptorUpdateTemplateEntryKHR* pDescriptorUpdateEntries;
|
||||
VkDescriptorUpdateTemplateTypeKHR templateType;
|
||||
VkDescriptorSetLayout descriptorSetLayout;
|
||||
VkPipelineBindPoint pipelineBindPoint;
|
||||
VkPipelineLayout pipelineLayout;
|
||||
uint32_t set;
|
||||
} VkDescriptorUpdateTemplateCreateInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplateKHR)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplateKHR)(VkDevice device, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator);
|
||||
typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateKHR)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, const void* pData);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR(
|
||||
VkDevice device,
|
||||
const VkDescriptorUpdateTemplateCreateInfoKHR* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkDescriptorUpdateTemplateKHR* pDescriptorUpdateTemplate);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR(
|
||||
VkDevice device,
|
||||
VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateKHR(
|
||||
VkDevice device,
|
||||
VkDescriptorSet descriptorSet,
|
||||
VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
|
||||
const void* pData);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
|
||||
VkPipelineLayout layout,
|
||||
uint32_t set,
|
||||
const void* pData);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_shared_presentable_image 1
|
||||
#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1
|
||||
#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image"
|
||||
|
||||
typedef struct VkSharedPresentSurfaceCapabilitiesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkImageUsageFlags sharedPresentSupportedUsageFlags;
|
||||
} VkSharedPresentSurfaceCapabilitiesKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_external_fence_capabilities 1
|
||||
#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities"
|
||||
|
||||
|
||||
typedef enum VkExternalFenceHandleTypeFlagBitsKHR {
|
||||
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = 0x00000001,
|
||||
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = 0x00000002,
|
||||
VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = 0x00000004,
|
||||
VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = 0x00000008,
|
||||
VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkExternalFenceHandleTypeFlagBitsKHR;
|
||||
typedef VkFlags VkExternalFenceHandleTypeFlagsKHR;
|
||||
|
||||
typedef enum VkExternalFenceFeatureFlagBitsKHR {
|
||||
VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = 0x00000001,
|
||||
VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = 0x00000002,
|
||||
VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkExternalFenceFeatureFlagBitsKHR;
|
||||
typedef VkFlags VkExternalFenceFeatureFlagsKHR;
|
||||
|
||||
typedef struct VkPhysicalDeviceExternalFenceInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalFenceHandleTypeFlagBitsKHR handleType;
|
||||
} VkPhysicalDeviceExternalFenceInfoKHR;
|
||||
|
||||
typedef struct VkExternalFencePropertiesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkExternalFenceHandleTypeFlagsKHR exportFromImportedHandleTypes;
|
||||
VkExternalFenceHandleTypeFlagsKHR compatibleHandleTypes;
|
||||
VkExternalFenceFeatureFlagsKHR externalFenceFeatures;
|
||||
} VkExternalFencePropertiesKHR;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo, VkExternalFencePropertiesKHR* pExternalFenceProperties);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceExternalFenceInfoKHR* pExternalFenceInfo,
|
||||
VkExternalFencePropertiesKHR* pExternalFenceProperties);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_external_fence 1
|
||||
#define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence"
|
||||
|
||||
|
||||
typedef enum VkFenceImportFlagBitsKHR {
|
||||
VK_FENCE_IMPORT_TEMPORARY_BIT_KHR = 0x00000001,
|
||||
VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
|
||||
} VkFenceImportFlagBitsKHR;
|
||||
typedef VkFlags VkFenceImportFlagsKHR;
|
||||
|
||||
typedef struct VkExportFenceCreateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalFenceHandleTypeFlagsKHR handleTypes;
|
||||
} VkExportFenceCreateInfoKHR;
|
||||
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
#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;
|
||||
VkFenceImportFlagsKHR flags;
|
||||
VkExternalFenceHandleTypeFlagBitsKHR 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;
|
||||
VkExternalFenceHandleTypeFlagBitsKHR 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
|
||||
#endif /* VK_USE_PLATFORM_WIN32_KHR */
|
||||
|
||||
#define VK_KHR_external_fence_fd 1
|
||||
#define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1
|
||||
#define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd"
|
||||
|
||||
typedef struct VkImportFenceFdInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkFence fence;
|
||||
VkFenceImportFlagsKHR flags;
|
||||
VkExternalFenceHandleTypeFlagBitsKHR handleType;
|
||||
int fd;
|
||||
} VkImportFenceFdInfoKHR;
|
||||
|
||||
typedef struct VkFenceGetFdInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkFence fence;
|
||||
VkExternalFenceHandleTypeFlagBitsKHR handleType;
|
||||
} VkFenceGetFdInfoKHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR(
|
||||
VkDevice device,
|
||||
const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR(
|
||||
VkDevice device,
|
||||
const VkFenceGetFdInfoKHR* pGetFdInfo,
|
||||
int* pFd);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_get_surface_capabilities2 1
|
||||
#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1
|
||||
#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2"
|
||||
|
||||
typedef struct VkPhysicalDeviceSurfaceInfo2KHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSurfaceKHR surface;
|
||||
} VkPhysicalDeviceSurfaceInfo2KHR;
|
||||
|
||||
typedef struct VkSurfaceCapabilities2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkSurfaceCapabilitiesKHR surfaceCapabilities;
|
||||
} VkSurfaceCapabilities2KHR;
|
||||
|
||||
typedef struct VkSurfaceFormat2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkSurfaceFormatKHR surfaceFormat;
|
||||
} VkSurfaceFormat2KHR;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
|
||||
uint32_t* pSurfaceFormatCount,
|
||||
VkSurfaceFormat2KHR* pSurfaceFormats);
|
||||
#endif
|
||||
|
||||
#define VK_KHR_variable_pointers 1
|
||||
#define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1
|
||||
#define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers"
|
||||
|
||||
typedef struct VkPhysicalDeviceVariablePointerFeaturesKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkBool32 variablePointersStorageBuffer;
|
||||
VkBool32 variablePointers;
|
||||
} VkPhysicalDeviceVariablePointerFeaturesKHR;
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_dedicated_allocation 1
|
||||
#define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 1
|
||||
#define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation"
|
||||
|
||||
typedef struct VkMemoryDedicatedRequirementsKHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkBool32 prefersDedicatedAllocation;
|
||||
VkBool32 requiresDedicatedAllocation;
|
||||
} VkMemoryDedicatedRequirementsKHR;
|
||||
|
||||
typedef struct VkMemoryDedicatedAllocateInfoKHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkImage image;
|
||||
VkBuffer buffer;
|
||||
} VkMemoryDedicatedAllocateInfoKHR;
|
||||
|
||||
|
||||
|
||||
#define VK_KHR_storage_buffer_storage_class 1
|
||||
#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1
|
||||
#define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class"
|
||||
|
||||
|
||||
#define VK_KHR_get_memory_requirements2 1
|
||||
#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1
|
||||
#define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2"
|
||||
|
||||
typedef struct VkBufferMemoryRequirementsInfo2KHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBuffer buffer;
|
||||
} VkBufferMemoryRequirementsInfo2KHR;
|
||||
|
||||
typedef struct VkImageMemoryRequirementsInfo2KHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkImage image;
|
||||
} VkImageMemoryRequirementsInfo2KHR;
|
||||
|
||||
typedef struct VkImageSparseMemoryRequirementsInfo2KHR {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkImage image;
|
||||
} VkImageSparseMemoryRequirementsInfo2KHR;
|
||||
|
||||
typedef struct VkMemoryRequirements2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkMemoryRequirements memoryRequirements;
|
||||
} VkMemoryRequirements2KHR;
|
||||
|
||||
typedef struct VkSparseImageMemoryRequirements2KHR {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkSparseImageMemoryRequirements memoryRequirements;
|
||||
} VkSparseImageMemoryRequirements2KHR;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2KHR* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2KHR* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR(
|
||||
VkDevice device,
|
||||
const VkImageMemoryRequirementsInfo2KHR* pInfo,
|
||||
VkMemoryRequirements2KHR* pMemoryRequirements);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR(
|
||||
VkDevice device,
|
||||
const VkBufferMemoryRequirementsInfo2KHR* pInfo,
|
||||
VkMemoryRequirements2KHR* pMemoryRequirements);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR(
|
||||
VkDevice device,
|
||||
const VkImageSparseMemoryRequirementsInfo2KHR* pInfo,
|
||||
uint32_t* pSparseMemoryRequirementCount,
|
||||
VkSparseImageMemoryRequirements2KHR* pSparseMemoryRequirements);
|
||||
#endif
|
||||
|
||||
#define VK_EXT_debug_report 1
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)
|
||||
|
||||
#define VK_EXT_DEBUG_REPORT_SPEC_VERSION 8
|
||||
#define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report"
|
||||
#define VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
|
||||
#define VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT
|
||||
|
||||
|
||||
typedef enum VkDebugReportObjectTypeEXT {
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT = 31,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT = 32,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = 1000085000,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_BEGIN_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_END_RANGE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT,
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_RANGE_SIZE_EXT = (VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT - VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT + 1),
|
||||
VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkDebugReportObjectTypeEXT;
|
||||
|
||||
|
||||
typedef enum VkDebugReportFlagBitsEXT {
|
||||
VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001,
|
||||
VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002,
|
||||
VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004,
|
||||
VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008,
|
||||
VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010,
|
||||
VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkDebugReportFlagBitsEXT;
|
||||
typedef VkFlags VkDebugReportFlagsEXT;
|
||||
|
||||
typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)(
|
||||
VkDebugReportFlagsEXT flags,
|
||||
VkDebugReportObjectTypeEXT objectType,
|
||||
uint64_t object,
|
||||
size_t location,
|
||||
int32_t messageCode,
|
||||
const char* pLayerPrefix,
|
||||
const char* pMessage,
|
||||
void* pUserData);
|
||||
|
||||
|
||||
typedef struct VkDebugReportCallbackCreateInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDebugReportFlagsEXT flags;
|
||||
PFN_vkDebugReportCallbackEXT pfnCallback;
|
||||
void* pUserData;
|
||||
} VkDebugReportCallbackCreateInfoEXT;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator);
|
||||
typedef void (VKAPI_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
|
||||
VkInstance instance,
|
||||
const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkDebugReportCallbackEXT* pCallback);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
|
||||
VkInstance instance,
|
||||
VkDebugReportCallbackEXT callback,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
|
||||
VkInstance instance,
|
||||
VkDebugReportFlagsEXT flags,
|
||||
VkDebugReportObjectTypeEXT objectType,
|
||||
uint64_t object,
|
||||
size_t location,
|
||||
int32_t messageCode,
|
||||
const char* pLayerPrefix,
|
||||
const char* pMessage);
|
||||
#endif
|
||||
|
||||
#define VK_NV_glsl_shader 1
|
||||
#define VK_NV_GLSL_SHADER_SPEC_VERSION 1
|
||||
#define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader"
|
||||
|
||||
|
||||
#define VK_IMG_filter_cubic 1
|
||||
#define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1
|
||||
#define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic"
|
||||
|
||||
|
||||
#define VK_AMD_rasterization_order 1
|
||||
#define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1
|
||||
#define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order"
|
||||
|
||||
|
||||
typedef enum VkRasterizationOrderAMD {
|
||||
VK_RASTERIZATION_ORDER_STRICT_AMD = 0,
|
||||
VK_RASTERIZATION_ORDER_RELAXED_AMD = 1,
|
||||
VK_RASTERIZATION_ORDER_BEGIN_RANGE_AMD = VK_RASTERIZATION_ORDER_STRICT_AMD,
|
||||
VK_RASTERIZATION_ORDER_END_RANGE_AMD = VK_RASTERIZATION_ORDER_RELAXED_AMD,
|
||||
VK_RASTERIZATION_ORDER_RANGE_SIZE_AMD = (VK_RASTERIZATION_ORDER_RELAXED_AMD - VK_RASTERIZATION_ORDER_STRICT_AMD + 1),
|
||||
VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF
|
||||
} VkRasterizationOrderAMD;
|
||||
|
||||
typedef struct VkPipelineRasterizationStateRasterizationOrderAMD {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkRasterizationOrderAMD rasterizationOrder;
|
||||
} VkPipelineRasterizationStateRasterizationOrderAMD;
|
||||
|
||||
|
||||
|
||||
#define VK_AMD_shader_trinary_minmax 1
|
||||
#define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1
|
||||
#define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax"
|
||||
|
||||
|
||||
#define VK_AMD_shader_explicit_vertex_parameter 1
|
||||
#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1
|
||||
#define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter"
|
||||
|
||||
|
||||
#define VK_EXT_debug_marker 1
|
||||
#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 4
|
||||
#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker"
|
||||
|
||||
typedef struct VkDebugMarkerObjectNameInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDebugReportObjectTypeEXT objectType;
|
||||
uint64_t object;
|
||||
const char* pObjectName;
|
||||
} VkDebugMarkerObjectNameInfoEXT;
|
||||
|
||||
typedef struct VkDebugMarkerObjectTagInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDebugReportObjectTypeEXT objectType;
|
||||
uint64_t object;
|
||||
uint64_t tagName;
|
||||
size_t tagSize;
|
||||
const void* pTag;
|
||||
} VkDebugMarkerObjectTagInfoEXT;
|
||||
|
||||
typedef struct VkDebugMarkerMarkerInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
const char* pMarkerName;
|
||||
float color[4];
|
||||
} VkDebugMarkerMarkerInfoEXT;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT(
|
||||
VkDevice device,
|
||||
const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT(
|
||||
VkDevice device,
|
||||
const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT(
|
||||
VkCommandBuffer commandBuffer);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
|
||||
#endif
|
||||
|
||||
#define VK_AMD_gcn_shader 1
|
||||
#define VK_AMD_GCN_SHADER_SPEC_VERSION 1
|
||||
#define VK_AMD_GCN_SHADER_EXTENSION_NAME "VK_AMD_gcn_shader"
|
||||
|
||||
|
||||
#define VK_NV_dedicated_allocation 1
|
||||
#define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1
|
||||
#define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation"
|
||||
|
||||
typedef struct VkDedicatedAllocationImageCreateInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBool32 dedicatedAllocation;
|
||||
} VkDedicatedAllocationImageCreateInfoNV;
|
||||
|
||||
typedef struct VkDedicatedAllocationBufferCreateInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBool32 dedicatedAllocation;
|
||||
} VkDedicatedAllocationBufferCreateInfoNV;
|
||||
|
||||
typedef struct VkDedicatedAllocationMemoryAllocateInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkImage image;
|
||||
VkBuffer buffer;
|
||||
} VkDedicatedAllocationMemoryAllocateInfoNV;
|
||||
|
||||
|
||||
|
||||
#define VK_AMD_draw_indirect_count 1
|
||||
#define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 1
|
||||
#define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count"
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer buffer,
|
||||
VkDeviceSize offset,
|
||||
VkBuffer countBuffer,
|
||||
VkDeviceSize countBufferOffset,
|
||||
uint32_t maxDrawCount,
|
||||
uint32_t stride);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer buffer,
|
||||
VkDeviceSize offset,
|
||||
VkBuffer countBuffer,
|
||||
VkDeviceSize countBufferOffset,
|
||||
uint32_t maxDrawCount,
|
||||
uint32_t stride);
|
||||
#endif
|
||||
|
||||
#define VK_AMD_negative_viewport_height 1
|
||||
#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1
|
||||
#define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height"
|
||||
|
||||
|
||||
#define VK_AMD_gpu_shader_half_float 1
|
||||
#define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 1
|
||||
#define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float"
|
||||
|
||||
|
||||
#define VK_AMD_shader_ballot 1
|
||||
#define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1
|
||||
#define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot"
|
||||
|
||||
|
||||
#define VK_AMD_texture_gather_bias_lod 1
|
||||
#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1
|
||||
#define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod"
|
||||
|
||||
typedef struct VkTextureLODGatherFormatPropertiesAMD {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkBool32 supportsTextureGatherLODBiasAMD;
|
||||
} VkTextureLODGatherFormatPropertiesAMD;
|
||||
|
||||
|
||||
|
||||
#define VK_KHX_multiview 1
|
||||
#define VK_KHX_MULTIVIEW_SPEC_VERSION 1
|
||||
#define VK_KHX_MULTIVIEW_EXTENSION_NAME "VK_KHX_multiview"
|
||||
|
||||
typedef struct VkRenderPassMultiviewCreateInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t subpassCount;
|
||||
const uint32_t* pViewMasks;
|
||||
uint32_t dependencyCount;
|
||||
const int32_t* pViewOffsets;
|
||||
uint32_t correlationMaskCount;
|
||||
const uint32_t* pCorrelationMasks;
|
||||
} VkRenderPassMultiviewCreateInfoKHX;
|
||||
|
||||
typedef struct VkPhysicalDeviceMultiviewFeaturesKHX {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkBool32 multiview;
|
||||
VkBool32 multiviewGeometryShader;
|
||||
VkBool32 multiviewTessellationShader;
|
||||
} VkPhysicalDeviceMultiviewFeaturesKHX;
|
||||
|
||||
typedef struct VkPhysicalDeviceMultiviewPropertiesKHX {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint32_t maxMultiviewViewCount;
|
||||
uint32_t maxMultiviewInstanceIndex;
|
||||
} VkPhysicalDeviceMultiviewPropertiesKHX;
|
||||
|
||||
|
||||
|
||||
#define VK_IMG_format_pvrtc 1
|
||||
#define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1
|
||||
#define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc"
|
||||
|
||||
|
||||
#define VK_NV_external_memory_capabilities 1
|
||||
#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1
|
||||
#define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities"
|
||||
|
||||
|
||||
typedef enum VkExternalMemoryHandleTypeFlagBitsNV {
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 0x00000001,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 0x00000002,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 0x00000004,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 0x00000008,
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
|
||||
} VkExternalMemoryHandleTypeFlagBitsNV;
|
||||
typedef VkFlags VkExternalMemoryHandleTypeFlagsNV;
|
||||
|
||||
typedef enum VkExternalMemoryFeatureFlagBitsNV {
|
||||
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001,
|
||||
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002,
|
||||
VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004,
|
||||
VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF
|
||||
} VkExternalMemoryFeatureFlagBitsNV;
|
||||
typedef VkFlags VkExternalMemoryFeatureFlagsNV;
|
||||
|
||||
typedef struct VkExternalImageFormatPropertiesNV {
|
||||
VkImageFormatProperties imageFormatProperties;
|
||||
VkExternalMemoryFeatureFlagsNV externalMemoryFeatures;
|
||||
VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes;
|
||||
VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes;
|
||||
} VkExternalImageFormatPropertiesNV;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkFormat format,
|
||||
VkImageType type,
|
||||
VkImageTiling tiling,
|
||||
VkImageUsageFlags usage,
|
||||
VkImageCreateFlags flags,
|
||||
VkExternalMemoryHandleTypeFlagsNV externalHandleType,
|
||||
VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
|
||||
#endif
|
||||
|
||||
#define VK_NV_external_memory 1
|
||||
#define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1
|
||||
#define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory"
|
||||
|
||||
typedef struct VkExternalMemoryImageCreateInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalMemoryHandleTypeFlagsNV handleTypes;
|
||||
} VkExternalMemoryImageCreateInfoNV;
|
||||
|
||||
typedef struct VkExportMemoryAllocateInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkExternalMemoryHandleTypeFlagsNV handleTypes;
|
||||
} VkExportMemoryAllocateInfoNV;
|
||||
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
#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
|
||||
#endif /* VK_USE_PLATFORM_WIN32_KHR */
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
#define VK_NV_win32_keyed_mutex 1
|
||||
#define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 1
|
||||
#define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex"
|
||||
|
||||
typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t acquireCount;
|
||||
const VkDeviceMemory* pAcquireSyncs;
|
||||
const uint64_t* pAcquireKeys;
|
||||
const uint32_t* pAcquireTimeoutMilliseconds;
|
||||
uint32_t releaseCount;
|
||||
const VkDeviceMemory* pReleaseSyncs;
|
||||
const uint64_t* pReleaseKeys;
|
||||
} VkWin32KeyedMutexAcquireReleaseInfoNV;
|
||||
|
||||
|
||||
#endif /* VK_USE_PLATFORM_WIN32_KHR */
|
||||
|
||||
#define VK_KHX_device_group 1
|
||||
#define VK_MAX_DEVICE_GROUP_SIZE_KHX 32
|
||||
#define VK_KHX_DEVICE_GROUP_SPEC_VERSION 1
|
||||
#define VK_KHX_DEVICE_GROUP_EXTENSION_NAME "VK_KHX_device_group"
|
||||
|
||||
|
||||
typedef enum VkPeerMemoryFeatureFlagBitsKHX {
|
||||
VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHX = 0x00000001,
|
||||
VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHX = 0x00000002,
|
||||
VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHX = 0x00000004,
|
||||
VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHX = 0x00000008,
|
||||
VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
|
||||
} VkPeerMemoryFeatureFlagBitsKHX;
|
||||
typedef VkFlags VkPeerMemoryFeatureFlagsKHX;
|
||||
|
||||
typedef enum VkMemoryAllocateFlagBitsKHX {
|
||||
VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX = 0x00000001,
|
||||
VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
|
||||
} VkMemoryAllocateFlagBitsKHX;
|
||||
typedef VkFlags VkMemoryAllocateFlagsKHX;
|
||||
|
||||
typedef enum VkDeviceGroupPresentModeFlagBitsKHX {
|
||||
VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX = 0x00000001,
|
||||
VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHX = 0x00000002,
|
||||
VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHX = 0x00000004,
|
||||
VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHX = 0x00000008,
|
||||
VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHX = 0x7FFFFFFF
|
||||
} VkDeviceGroupPresentModeFlagBitsKHX;
|
||||
typedef VkFlags VkDeviceGroupPresentModeFlagsKHX;
|
||||
|
||||
typedef struct VkMemoryAllocateFlagsInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkMemoryAllocateFlagsKHX flags;
|
||||
uint32_t deviceMask;
|
||||
} VkMemoryAllocateFlagsInfoKHX;
|
||||
|
||||
typedef struct VkBindBufferMemoryInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBuffer buffer;
|
||||
VkDeviceMemory memory;
|
||||
VkDeviceSize memoryOffset;
|
||||
uint32_t deviceIndexCount;
|
||||
const uint32_t* pDeviceIndices;
|
||||
} VkBindBufferMemoryInfoKHX;
|
||||
|
||||
typedef struct VkBindImageMemoryInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkImage image;
|
||||
VkDeviceMemory memory;
|
||||
VkDeviceSize memoryOffset;
|
||||
uint32_t deviceIndexCount;
|
||||
const uint32_t* pDeviceIndices;
|
||||
uint32_t SFRRectCount;
|
||||
const VkRect2D* pSFRRects;
|
||||
} VkBindImageMemoryInfoKHX;
|
||||
|
||||
typedef struct VkDeviceGroupRenderPassBeginInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t deviceMask;
|
||||
uint32_t deviceRenderAreaCount;
|
||||
const VkRect2D* pDeviceRenderAreas;
|
||||
} VkDeviceGroupRenderPassBeginInfoKHX;
|
||||
|
||||
typedef struct VkDeviceGroupCommandBufferBeginInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t deviceMask;
|
||||
} VkDeviceGroupCommandBufferBeginInfoKHX;
|
||||
|
||||
typedef struct VkDeviceGroupSubmitInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t waitSemaphoreCount;
|
||||
const uint32_t* pWaitSemaphoreDeviceIndices;
|
||||
uint32_t commandBufferCount;
|
||||
const uint32_t* pCommandBufferDeviceMasks;
|
||||
uint32_t signalSemaphoreCount;
|
||||
const uint32_t* pSignalSemaphoreDeviceIndices;
|
||||
} VkDeviceGroupSubmitInfoKHX;
|
||||
|
||||
typedef struct VkDeviceGroupBindSparseInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t resourceDeviceIndex;
|
||||
uint32_t memoryDeviceIndex;
|
||||
} VkDeviceGroupBindSparseInfoKHX;
|
||||
|
||||
typedef struct VkDeviceGroupPresentCapabilitiesKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE_KHX];
|
||||
VkDeviceGroupPresentModeFlagsKHX modes;
|
||||
} VkDeviceGroupPresentCapabilitiesKHX;
|
||||
|
||||
typedef struct VkImageSwapchainCreateInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSwapchainKHR swapchain;
|
||||
} VkImageSwapchainCreateInfoKHX;
|
||||
|
||||
typedef struct VkBindImageMemorySwapchainInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSwapchainKHR swapchain;
|
||||
uint32_t imageIndex;
|
||||
} VkBindImageMemorySwapchainInfoKHX;
|
||||
|
||||
typedef struct VkAcquireNextImageInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSwapchainKHR swapchain;
|
||||
uint64_t timeout;
|
||||
VkSemaphore semaphore;
|
||||
VkFence fence;
|
||||
uint32_t deviceMask;
|
||||
} VkAcquireNextImageInfoKHX;
|
||||
|
||||
typedef struct VkDeviceGroupPresentInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t swapchainCount;
|
||||
const uint32_t* pDeviceMasks;
|
||||
VkDeviceGroupPresentModeFlagBitsKHX mode;
|
||||
} VkDeviceGroupPresentInfoKHX;
|
||||
|
||||
typedef struct VkDeviceGroupSwapchainCreateInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDeviceGroupPresentModeFlagsKHX modes;
|
||||
} VkDeviceGroupSwapchainCreateInfoKHX;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHX)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHX)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfoKHX* pBindInfos);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHX)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfoKHX* pBindInfos);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHX)(VkCommandBuffer commandBuffer, uint32_t deviceMask);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHX)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHX)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHX* pModes);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHX)(VkDevice device, const VkAcquireNextImageInfoKHX* pAcquireInfo, uint32_t* pImageIndex);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHX)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHX)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHX(
|
||||
VkDevice device,
|
||||
uint32_t heapIndex,
|
||||
uint32_t localDeviceIndex,
|
||||
uint32_t remoteDeviceIndex,
|
||||
VkPeerMemoryFeatureFlagsKHX* pPeerMemoryFeatures);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHX(
|
||||
VkDevice device,
|
||||
uint32_t bindInfoCount,
|
||||
const VkBindBufferMemoryInfoKHX* pBindInfos);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHX(
|
||||
VkDevice device,
|
||||
uint32_t bindInfoCount,
|
||||
const VkBindImageMemoryInfoKHX* pBindInfos);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHX(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t deviceMask);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHX(
|
||||
VkDevice device,
|
||||
VkDeviceGroupPresentCapabilitiesKHX* pDeviceGroupPresentCapabilities);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHX(
|
||||
VkDevice device,
|
||||
VkSurfaceKHR surface,
|
||||
VkDeviceGroupPresentModeFlagsKHX* pModes);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHX(
|
||||
VkDevice device,
|
||||
const VkAcquireNextImageInfoKHX* pAcquireInfo,
|
||||
uint32_t* pImageIndex);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHX(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t baseGroupX,
|
||||
uint32_t baseGroupY,
|
||||
uint32_t baseGroupZ,
|
||||
uint32_t groupCountX,
|
||||
uint32_t groupCountY,
|
||||
uint32_t groupCountZ);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHX(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkSurfaceKHR surface,
|
||||
uint32_t* pRectCount,
|
||||
VkRect2D* pRects);
|
||||
#endif
|
||||
|
||||
#define VK_EXT_validation_flags 1
|
||||
#define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 1
|
||||
#define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags"
|
||||
|
||||
|
||||
typedef enum VkValidationCheckEXT {
|
||||
VK_VALIDATION_CHECK_ALL_EXT = 0,
|
||||
VK_VALIDATION_CHECK_SHADERS_EXT = 1,
|
||||
VK_VALIDATION_CHECK_BEGIN_RANGE_EXT = VK_VALIDATION_CHECK_ALL_EXT,
|
||||
VK_VALIDATION_CHECK_END_RANGE_EXT = VK_VALIDATION_CHECK_SHADERS_EXT,
|
||||
VK_VALIDATION_CHECK_RANGE_SIZE_EXT = (VK_VALIDATION_CHECK_SHADERS_EXT - VK_VALIDATION_CHECK_ALL_EXT + 1),
|
||||
VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkValidationCheckEXT;
|
||||
|
||||
typedef struct VkValidationFlagsEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t disabledValidationCheckCount;
|
||||
VkValidationCheckEXT* pDisabledValidationChecks;
|
||||
} VkValidationFlagsEXT;
|
||||
|
||||
|
||||
|
||||
#ifdef VK_USE_PLATFORM_VI_NN
|
||||
#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
|
||||
#endif /* VK_USE_PLATFORM_VI_NN */
|
||||
|
||||
#define VK_EXT_shader_subgroup_ballot 1
|
||||
#define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1
|
||||
#define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot"
|
||||
|
||||
|
||||
#define VK_EXT_shader_subgroup_vote 1
|
||||
#define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1
|
||||
#define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote"
|
||||
|
||||
|
||||
#define VK_KHX_device_group_creation 1
|
||||
#define VK_KHX_DEVICE_GROUP_CREATION_SPEC_VERSION 1
|
||||
#define VK_KHX_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHX_device_group_creation"
|
||||
|
||||
typedef struct VkPhysicalDeviceGroupPropertiesKHX {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint32_t physicalDeviceCount;
|
||||
VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE_KHX];
|
||||
VkBool32 subsetAllocation;
|
||||
} VkPhysicalDeviceGroupPropertiesKHX;
|
||||
|
||||
typedef struct VkDeviceGroupDeviceCreateInfoKHX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t physicalDeviceCount;
|
||||
const VkPhysicalDevice* pPhysicalDevices;
|
||||
} VkDeviceGroupDeviceCreateInfoKHX;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHX)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHX(
|
||||
VkInstance instance,
|
||||
uint32_t* pPhysicalDeviceGroupCount,
|
||||
VkPhysicalDeviceGroupPropertiesKHX* pPhysicalDeviceGroupProperties);
|
||||
#endif
|
||||
|
||||
#define VK_NVX_device_generated_commands 1
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkObjectTableNVX)
|
||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNVX)
|
||||
|
||||
#define VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 1
|
||||
#define VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NVX_device_generated_commands"
|
||||
|
||||
|
||||
typedef enum VkIndirectCommandsTokenTypeNVX {
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX = 0,
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX = 1,
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX = 2,
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX = 3,
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX = 4,
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX = 5,
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX = 6,
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX = 7,
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_BEGIN_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX,
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_END_RANGE_NVX = VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX,
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_RANGE_SIZE_NVX = (VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX - VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX + 1),
|
||||
VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF
|
||||
} VkIndirectCommandsTokenTypeNVX;
|
||||
|
||||
typedef enum VkObjectEntryTypeNVX {
|
||||
VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX = 0,
|
||||
VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX = 1,
|
||||
VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX = 2,
|
||||
VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX = 3,
|
||||
VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX = 4,
|
||||
VK_OBJECT_ENTRY_TYPE_BEGIN_RANGE_NVX = VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX,
|
||||
VK_OBJECT_ENTRY_TYPE_END_RANGE_NVX = VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX,
|
||||
VK_OBJECT_ENTRY_TYPE_RANGE_SIZE_NVX = (VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX - VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX + 1),
|
||||
VK_OBJECT_ENTRY_TYPE_MAX_ENUM_NVX = 0x7FFFFFFF
|
||||
} VkObjectEntryTypeNVX;
|
||||
|
||||
|
||||
typedef enum VkIndirectCommandsLayoutUsageFlagBitsNVX {
|
||||
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX = 0x00000001,
|
||||
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX = 0x00000002,
|
||||
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX = 0x00000004,
|
||||
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX = 0x00000008,
|
||||
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7FFFFFFF
|
||||
} VkIndirectCommandsLayoutUsageFlagBitsNVX;
|
||||
typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNVX;
|
||||
|
||||
typedef enum VkObjectEntryUsageFlagBitsNVX {
|
||||
VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX = 0x00000001,
|
||||
VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX = 0x00000002,
|
||||
VK_OBJECT_ENTRY_USAGE_FLAG_BITS_MAX_ENUM_NVX = 0x7FFFFFFF
|
||||
} VkObjectEntryUsageFlagBitsNVX;
|
||||
typedef VkFlags VkObjectEntryUsageFlagsNVX;
|
||||
|
||||
typedef struct VkDeviceGeneratedCommandsFeaturesNVX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBool32 computeBindingPointSupport;
|
||||
} VkDeviceGeneratedCommandsFeaturesNVX;
|
||||
|
||||
typedef struct VkDeviceGeneratedCommandsLimitsNVX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t maxIndirectCommandsLayoutTokenCount;
|
||||
uint32_t maxObjectEntryCounts;
|
||||
uint32_t minSequenceCountBufferOffsetAlignment;
|
||||
uint32_t minSequenceIndexBufferOffsetAlignment;
|
||||
uint32_t minCommandsTokenBufferOffsetAlignment;
|
||||
} VkDeviceGeneratedCommandsLimitsNVX;
|
||||
|
||||
typedef struct VkIndirectCommandsTokenNVX {
|
||||
VkIndirectCommandsTokenTypeNVX tokenType;
|
||||
VkBuffer buffer;
|
||||
VkDeviceSize offset;
|
||||
} VkIndirectCommandsTokenNVX;
|
||||
|
||||
typedef struct VkIndirectCommandsLayoutTokenNVX {
|
||||
VkIndirectCommandsTokenTypeNVX tokenType;
|
||||
uint32_t bindingUnit;
|
||||
uint32_t dynamicCount;
|
||||
uint32_t divisor;
|
||||
} VkIndirectCommandsLayoutTokenNVX;
|
||||
|
||||
typedef struct VkIndirectCommandsLayoutCreateInfoNVX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineBindPoint pipelineBindPoint;
|
||||
VkIndirectCommandsLayoutUsageFlagsNVX flags;
|
||||
uint32_t tokenCount;
|
||||
const VkIndirectCommandsLayoutTokenNVX* pTokens;
|
||||
} VkIndirectCommandsLayoutCreateInfoNVX;
|
||||
|
||||
typedef struct VkCmdProcessCommandsInfoNVX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkObjectTableNVX objectTable;
|
||||
VkIndirectCommandsLayoutNVX indirectCommandsLayout;
|
||||
uint32_t indirectCommandsTokenCount;
|
||||
const VkIndirectCommandsTokenNVX* pIndirectCommandsTokens;
|
||||
uint32_t maxSequencesCount;
|
||||
VkCommandBuffer targetCommandBuffer;
|
||||
VkBuffer sequencesCountBuffer;
|
||||
VkDeviceSize sequencesCountOffset;
|
||||
VkBuffer sequencesIndexBuffer;
|
||||
VkDeviceSize sequencesIndexOffset;
|
||||
} VkCmdProcessCommandsInfoNVX;
|
||||
|
||||
typedef struct VkCmdReserveSpaceForCommandsInfoNVX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkObjectTableNVX objectTable;
|
||||
VkIndirectCommandsLayoutNVX indirectCommandsLayout;
|
||||
uint32_t maxSequencesCount;
|
||||
} VkCmdReserveSpaceForCommandsInfoNVX;
|
||||
|
||||
typedef struct VkObjectTableCreateInfoNVX {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t objectCount;
|
||||
const VkObjectEntryTypeNVX* pObjectEntryTypes;
|
||||
const uint32_t* pObjectEntryCounts;
|
||||
const VkObjectEntryUsageFlagsNVX* pObjectEntryUsageFlags;
|
||||
uint32_t maxUniformBuffersPerDescriptor;
|
||||
uint32_t maxStorageBuffersPerDescriptor;
|
||||
uint32_t maxStorageImagesPerDescriptor;
|
||||
uint32_t maxSampledImagesPerDescriptor;
|
||||
uint32_t maxPipelineLayouts;
|
||||
} VkObjectTableCreateInfoNVX;
|
||||
|
||||
typedef struct VkObjectTableEntryNVX {
|
||||
VkObjectEntryTypeNVX type;
|
||||
VkObjectEntryUsageFlagsNVX flags;
|
||||
} VkObjectTableEntryNVX;
|
||||
|
||||
typedef struct VkObjectTablePipelineEntryNVX {
|
||||
VkObjectEntryTypeNVX type;
|
||||
VkObjectEntryUsageFlagsNVX flags;
|
||||
VkPipeline pipeline;
|
||||
} VkObjectTablePipelineEntryNVX;
|
||||
|
||||
typedef struct VkObjectTableDescriptorSetEntryNVX {
|
||||
VkObjectEntryTypeNVX type;
|
||||
VkObjectEntryUsageFlagsNVX flags;
|
||||
VkPipelineLayout pipelineLayout;
|
||||
VkDescriptorSet descriptorSet;
|
||||
} VkObjectTableDescriptorSetEntryNVX;
|
||||
|
||||
typedef struct VkObjectTableVertexBufferEntryNVX {
|
||||
VkObjectEntryTypeNVX type;
|
||||
VkObjectEntryUsageFlagsNVX flags;
|
||||
VkBuffer buffer;
|
||||
} VkObjectTableVertexBufferEntryNVX;
|
||||
|
||||
typedef struct VkObjectTableIndexBufferEntryNVX {
|
||||
VkObjectEntryTypeNVX type;
|
||||
VkObjectEntryUsageFlagsNVX flags;
|
||||
VkBuffer buffer;
|
||||
VkIndexType indexType;
|
||||
} VkObjectTableIndexBufferEntryNVX;
|
||||
|
||||
typedef struct VkObjectTablePushConstantEntryNVX {
|
||||
VkObjectEntryTypeNVX type;
|
||||
VkObjectEntryUsageFlagsNVX flags;
|
||||
VkPipelineLayout pipelineLayout;
|
||||
VkShaderStageFlags stageFlags;
|
||||
} VkObjectTablePushConstantEntryNVX;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdProcessCommandsNVX)(VkCommandBuffer commandBuffer, const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdReserveSpaceForCommandsNVX)(VkCommandBuffer commandBuffer, const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutNVX)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutNVX)(VkDevice device, VkIndirectCommandsLayoutNVX indirectCommandsLayout, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkCreateObjectTableNVX)(VkDevice device, const VkObjectTableCreateInfoNVX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkObjectTableNVX* pObjectTable);
|
||||
typedef void (VKAPI_PTR *PFN_vkDestroyObjectTableNVX)(VkDevice device, VkObjectTableNVX objectTable, const VkAllocationCallbacks* pAllocator);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkRegisterObjectsNVX)(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectTableEntryNVX* const* ppObjectTableEntries, const uint32_t* pObjectIndices);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkUnregisterObjectsNVX)(VkDevice device, VkObjectTableNVX objectTable, uint32_t objectCount, const VkObjectEntryTypeNVX* pObjectEntryTypes, const uint32_t* pObjectIndices);
|
||||
typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX)(VkPhysicalDevice physicalDevice, VkDeviceGeneratedCommandsFeaturesNVX* pFeatures, VkDeviceGeneratedCommandsLimitsNVX* pLimits);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdProcessCommandsNVX(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdReserveSpaceForCommandsNVX(
|
||||
VkCommandBuffer commandBuffer,
|
||||
const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNVX(
|
||||
VkDevice device,
|
||||
const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNVX(
|
||||
VkDevice device,
|
||||
VkIndirectCommandsLayoutNVX indirectCommandsLayout,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkCreateObjectTableNVX(
|
||||
VkDevice device,
|
||||
const VkObjectTableCreateInfoNVX* pCreateInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkObjectTableNVX* pObjectTable);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkDestroyObjectTableNVX(
|
||||
VkDevice device,
|
||||
VkObjectTableNVX objectTable,
|
||||
const VkAllocationCallbacks* pAllocator);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkRegisterObjectsNVX(
|
||||
VkDevice device,
|
||||
VkObjectTableNVX objectTable,
|
||||
uint32_t objectCount,
|
||||
const VkObjectTableEntryNVX* const* ppObjectTableEntries,
|
||||
const uint32_t* pObjectIndices);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkUnregisterObjectsNVX(
|
||||
VkDevice device,
|
||||
VkObjectTableNVX objectTable,
|
||||
uint32_t objectCount,
|
||||
const VkObjectEntryTypeNVX* pObjectEntryTypes,
|
||||
const uint32_t* pObjectIndices);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkDeviceGeneratedCommandsFeaturesNVX* pFeatures,
|
||||
VkDeviceGeneratedCommandsLimitsNVX* pLimits);
|
||||
#endif
|
||||
|
||||
#define VK_NV_clip_space_w_scaling 1
|
||||
#define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1
|
||||
#define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling"
|
||||
|
||||
typedef struct VkViewportWScalingNV {
|
||||
float xcoeff;
|
||||
float ycoeff;
|
||||
} VkViewportWScalingNV;
|
||||
|
||||
typedef struct VkPipelineViewportWScalingStateCreateInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBool32 viewportWScalingEnable;
|
||||
uint32_t viewportCount;
|
||||
const VkViewportWScalingNV* pViewportWScalings;
|
||||
} VkPipelineViewportWScalingStateCreateInfoNV;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t firstViewport,
|
||||
uint32_t viewportCount,
|
||||
const VkViewportWScalingNV* pViewportWScalings);
|
||||
#endif
|
||||
|
||||
#define VK_EXT_direct_mode_display 1
|
||||
#define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1
|
||||
#define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display"
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkDisplayKHR display);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT
|
||||
#define VK_EXT_acquire_xlib_display 1
|
||||
#include <X11/extensions/Xrandr.h>
|
||||
|
||||
#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
|
||||
#endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */
|
||||
|
||||
#define VK_EXT_display_surface_counter 1
|
||||
#define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1
|
||||
#define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter"
|
||||
|
||||
|
||||
typedef enum VkSurfaceCounterFlagBitsEXT {
|
||||
VK_SURFACE_COUNTER_VBLANK_EXT = 0x00000001,
|
||||
VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkSurfaceCounterFlagBitsEXT;
|
||||
typedef VkFlags VkSurfaceCounterFlagsEXT;
|
||||
|
||||
typedef struct VkSurfaceCapabilities2EXT {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint32_t minImageCount;
|
||||
uint32_t maxImageCount;
|
||||
VkExtent2D currentExtent;
|
||||
VkExtent2D minImageExtent;
|
||||
VkExtent2D maxImageExtent;
|
||||
uint32_t maxImageArrayLayers;
|
||||
VkSurfaceTransformFlagsKHR supportedTransforms;
|
||||
VkSurfaceTransformFlagBitsKHR currentTransform;
|
||||
VkCompositeAlphaFlagsKHR supportedCompositeAlpha;
|
||||
VkImageUsageFlags supportedUsageFlags;
|
||||
VkSurfaceCounterFlagsEXT supportedSurfaceCounters;
|
||||
} VkSurfaceCapabilities2EXT;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT(
|
||||
VkPhysicalDevice physicalDevice,
|
||||
VkSurfaceKHR surface,
|
||||
VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
|
||||
#endif
|
||||
|
||||
#define VK_EXT_display_control 1
|
||||
#define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1
|
||||
#define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control"
|
||||
|
||||
|
||||
typedef enum VkDisplayPowerStateEXT {
|
||||
VK_DISPLAY_POWER_STATE_OFF_EXT = 0,
|
||||
VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1,
|
||||
VK_DISPLAY_POWER_STATE_ON_EXT = 2,
|
||||
VK_DISPLAY_POWER_STATE_BEGIN_RANGE_EXT = VK_DISPLAY_POWER_STATE_OFF_EXT,
|
||||
VK_DISPLAY_POWER_STATE_END_RANGE_EXT = VK_DISPLAY_POWER_STATE_ON_EXT,
|
||||
VK_DISPLAY_POWER_STATE_RANGE_SIZE_EXT = (VK_DISPLAY_POWER_STATE_ON_EXT - VK_DISPLAY_POWER_STATE_OFF_EXT + 1),
|
||||
VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkDisplayPowerStateEXT;
|
||||
|
||||
typedef enum VkDeviceEventTypeEXT {
|
||||
VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0,
|
||||
VK_DEVICE_EVENT_TYPE_BEGIN_RANGE_EXT = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT,
|
||||
VK_DEVICE_EVENT_TYPE_END_RANGE_EXT = VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT,
|
||||
VK_DEVICE_EVENT_TYPE_RANGE_SIZE_EXT = (VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT - VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT + 1),
|
||||
VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkDeviceEventTypeEXT;
|
||||
|
||||
typedef enum VkDisplayEventTypeEXT {
|
||||
VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0,
|
||||
VK_DISPLAY_EVENT_TYPE_BEGIN_RANGE_EXT = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT,
|
||||
VK_DISPLAY_EVENT_TYPE_END_RANGE_EXT = VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT,
|
||||
VK_DISPLAY_EVENT_TYPE_RANGE_SIZE_EXT = (VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT - VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT + 1),
|
||||
VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkDisplayEventTypeEXT;
|
||||
|
||||
typedef struct VkDisplayPowerInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDisplayPowerStateEXT powerState;
|
||||
} VkDisplayPowerInfoEXT;
|
||||
|
||||
typedef struct VkDeviceEventInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDeviceEventTypeEXT deviceEvent;
|
||||
} VkDeviceEventInfoEXT;
|
||||
|
||||
typedef struct VkDisplayEventInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkDisplayEventTypeEXT displayEvent;
|
||||
} VkDisplayEventInfoEXT;
|
||||
|
||||
typedef struct VkSwapchainCounterCreateInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSurfaceCounterFlagsEXT surfaceCounters;
|
||||
} VkSwapchainCounterCreateInfoEXT;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT(
|
||||
VkDevice device,
|
||||
VkDisplayKHR display,
|
||||
const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT(
|
||||
VkDevice device,
|
||||
const VkDeviceEventInfoEXT* pDeviceEventInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkFence* pFence);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT(
|
||||
VkDevice device,
|
||||
VkDisplayKHR display,
|
||||
const VkDisplayEventInfoEXT* pDisplayEventInfo,
|
||||
const VkAllocationCallbacks* pAllocator,
|
||||
VkFence* pFence);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain,
|
||||
VkSurfaceCounterFlagBitsEXT counter,
|
||||
uint64_t* pCounterValue);
|
||||
#endif
|
||||
|
||||
#define VK_GOOGLE_display_timing 1
|
||||
#define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1
|
||||
#define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing"
|
||||
|
||||
typedef struct VkRefreshCycleDurationGOOGLE {
|
||||
uint64_t refreshDuration;
|
||||
} VkRefreshCycleDurationGOOGLE;
|
||||
|
||||
typedef struct VkPastPresentationTimingGOOGLE {
|
||||
uint32_t presentID;
|
||||
uint64_t desiredPresentTime;
|
||||
uint64_t actualPresentTime;
|
||||
uint64_t earliestPresentTime;
|
||||
uint64_t presentMargin;
|
||||
} VkPastPresentationTimingGOOGLE;
|
||||
|
||||
typedef struct VkPresentTimeGOOGLE {
|
||||
uint32_t presentID;
|
||||
uint64_t desiredPresentTime;
|
||||
} VkPresentTimeGOOGLE;
|
||||
|
||||
typedef struct VkPresentTimesInfoGOOGLE {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
uint32_t swapchainCount;
|
||||
const VkPresentTimeGOOGLE* pTimes;
|
||||
} VkPresentTimesInfoGOOGLE;
|
||||
|
||||
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
|
||||
typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain,
|
||||
VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE(
|
||||
VkDevice device,
|
||||
VkSwapchainKHR swapchain,
|
||||
uint32_t* pPresentationTimingCount,
|
||||
VkPastPresentationTimingGOOGLE* pPresentationTimings);
|
||||
#endif
|
||||
|
||||
#define VK_NV_sample_mask_override_coverage 1
|
||||
#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1
|
||||
#define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage"
|
||||
|
||||
|
||||
#define VK_NV_geometry_shader_passthrough 1
|
||||
#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1
|
||||
#define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough"
|
||||
|
||||
|
||||
#define VK_NV_viewport_array2 1
|
||||
#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION 1
|
||||
#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME "VK_NV_viewport_array2"
|
||||
|
||||
|
||||
#define VK_NVX_multiview_per_view_attributes 1
|
||||
#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1
|
||||
#define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes"
|
||||
|
||||
typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkBool32 perViewPositionAllComponents;
|
||||
} VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX;
|
||||
|
||||
|
||||
|
||||
#define VK_NV_viewport_swizzle 1
|
||||
#define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1
|
||||
#define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle"
|
||||
|
||||
|
||||
typedef enum VkViewportCoordinateSwizzleNV {
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0,
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1,
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2,
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3,
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4,
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5,
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6,
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7,
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_BEGIN_RANGE_NV = VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV,
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_END_RANGE_NV = VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV,
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_RANGE_SIZE_NV = (VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV - VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV + 1),
|
||||
VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV = 0x7FFFFFFF
|
||||
} VkViewportCoordinateSwizzleNV;
|
||||
|
||||
typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV;
|
||||
|
||||
typedef struct VkViewportSwizzleNV {
|
||||
VkViewportCoordinateSwizzleNV x;
|
||||
VkViewportCoordinateSwizzleNV y;
|
||||
VkViewportCoordinateSwizzleNV z;
|
||||
VkViewportCoordinateSwizzleNV w;
|
||||
} VkViewportSwizzleNV;
|
||||
|
||||
typedef struct VkPipelineViewportSwizzleStateCreateInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineViewportSwizzleStateCreateFlagsNV flags;
|
||||
uint32_t viewportCount;
|
||||
const VkViewportSwizzleNV* pViewportSwizzles;
|
||||
} VkPipelineViewportSwizzleStateCreateInfoNV;
|
||||
|
||||
|
||||
|
||||
#define VK_EXT_discard_rectangles 1
|
||||
#define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1
|
||||
#define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles"
|
||||
|
||||
|
||||
typedef enum VkDiscardRectangleModeEXT {
|
||||
VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0,
|
||||
VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1,
|
||||
VK_DISCARD_RECTANGLE_MODE_BEGIN_RANGE_EXT = VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT,
|
||||
VK_DISCARD_RECTANGLE_MODE_END_RANGE_EXT = VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT,
|
||||
VK_DISCARD_RECTANGLE_MODE_RANGE_SIZE_EXT = (VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT - VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT + 1),
|
||||
VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkDiscardRectangleModeEXT;
|
||||
|
||||
typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT;
|
||||
|
||||
typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint32_t maxDiscardRectangles;
|
||||
} VkPhysicalDeviceDiscardRectanglePropertiesEXT;
|
||||
|
||||
typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineDiscardRectangleStateCreateFlagsEXT flags;
|
||||
VkDiscardRectangleModeEXT discardRectangleMode;
|
||||
uint32_t discardRectangleCount;
|
||||
const VkRect2D* pDiscardRectangles;
|
||||
} VkPipelineDiscardRectangleStateCreateInfoEXT;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT(
|
||||
VkCommandBuffer commandBuffer,
|
||||
uint32_t firstDiscardRectangle,
|
||||
uint32_t discardRectangleCount,
|
||||
const VkRect2D* pDiscardRectangles);
|
||||
#endif
|
||||
|
||||
#define VK_EXT_swapchain_colorspace 1
|
||||
#define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 3
|
||||
#define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace"
|
||||
|
||||
|
||||
#define VK_EXT_hdr_metadata 1
|
||||
#define VK_EXT_HDR_METADATA_SPEC_VERSION 1
|
||||
#define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata"
|
||||
|
||||
typedef struct VkXYColorEXT {
|
||||
float x;
|
||||
float y;
|
||||
} VkXYColorEXT;
|
||||
|
||||
typedef struct VkHdrMetadataEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkXYColorEXT displayPrimaryRed;
|
||||
VkXYColorEXT displayPrimaryGreen;
|
||||
VkXYColorEXT displayPrimaryBlue;
|
||||
VkXYColorEXT whitePoint;
|
||||
float maxLuminance;
|
||||
float minLuminance;
|
||||
float maxContentLightLevel;
|
||||
float maxFrameAverageLightLevel;
|
||||
} VkHdrMetadataEXT;
|
||||
|
||||
|
||||
typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata);
|
||||
|
||||
#ifndef VK_NO_PROTOTYPES
|
||||
VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT(
|
||||
VkDevice device,
|
||||
uint32_t swapchainCount,
|
||||
const VkSwapchainKHR* pSwapchains,
|
||||
const VkHdrMetadataEXT* pMetadata);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_IOS_MVK
|
||||
#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
|
||||
#endif /* VK_USE_PLATFORM_IOS_MVK */
|
||||
|
||||
#ifdef VK_USE_PLATFORM_MACOS_MVK
|
||||
#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
|
||||
#endif /* VK_USE_PLATFORM_MACOS_MVK */
|
||||
|
||||
#define VK_EXT_sampler_filter_minmax 1
|
||||
#define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 1
|
||||
#define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax"
|
||||
|
||||
|
||||
typedef enum VkSamplerReductionModeEXT {
|
||||
VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = 0,
|
||||
VK_SAMPLER_REDUCTION_MODE_MIN_EXT = 1,
|
||||
VK_SAMPLER_REDUCTION_MODE_MAX_EXT = 2,
|
||||
VK_SAMPLER_REDUCTION_MODE_BEGIN_RANGE_EXT = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT,
|
||||
VK_SAMPLER_REDUCTION_MODE_END_RANGE_EXT = VK_SAMPLER_REDUCTION_MODE_MAX_EXT,
|
||||
VK_SAMPLER_REDUCTION_MODE_RANGE_SIZE_EXT = (VK_SAMPLER_REDUCTION_MODE_MAX_EXT - VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT + 1),
|
||||
VK_SAMPLER_REDUCTION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkSamplerReductionModeEXT;
|
||||
|
||||
typedef struct VkSamplerReductionModeCreateInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkSamplerReductionModeEXT reductionMode;
|
||||
} VkSamplerReductionModeCreateInfoEXT;
|
||||
|
||||
typedef struct VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkBool32 filterMinmaxSingleComponentFormats;
|
||||
VkBool32 filterMinmaxImageComponentMapping;
|
||||
} VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT;
|
||||
|
||||
|
||||
|
||||
#define VK_AMD_gpu_shader_int16 1
|
||||
#define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 1
|
||||
#define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16"
|
||||
|
||||
|
||||
#define VK_EXT_blend_operation_advanced 1
|
||||
#define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2
|
||||
#define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced"
|
||||
|
||||
|
||||
typedef enum VkBlendOverlapEXT {
|
||||
VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0,
|
||||
VK_BLEND_OVERLAP_DISJOINT_EXT = 1,
|
||||
VK_BLEND_OVERLAP_CONJOINT_EXT = 2,
|
||||
VK_BLEND_OVERLAP_BEGIN_RANGE_EXT = VK_BLEND_OVERLAP_UNCORRELATED_EXT,
|
||||
VK_BLEND_OVERLAP_END_RANGE_EXT = VK_BLEND_OVERLAP_CONJOINT_EXT,
|
||||
VK_BLEND_OVERLAP_RANGE_SIZE_EXT = (VK_BLEND_OVERLAP_CONJOINT_EXT - VK_BLEND_OVERLAP_UNCORRELATED_EXT + 1),
|
||||
VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF
|
||||
} VkBlendOverlapEXT;
|
||||
|
||||
typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
VkBool32 advancedBlendCoherentOperations;
|
||||
} VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT;
|
||||
|
||||
typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT {
|
||||
VkStructureType sType;
|
||||
void* pNext;
|
||||
uint32_t advancedBlendMaxColorAttachments;
|
||||
VkBool32 advancedBlendIndependentBlend;
|
||||
VkBool32 advancedBlendNonPremultipliedSrcColor;
|
||||
VkBool32 advancedBlendNonPremultipliedDstColor;
|
||||
VkBool32 advancedBlendCorrelatedOverlap;
|
||||
VkBool32 advancedBlendAllOperations;
|
||||
} VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT;
|
||||
|
||||
typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkBool32 srcPremultiplied;
|
||||
VkBool32 dstPremultiplied;
|
||||
VkBlendOverlapEXT blendOverlap;
|
||||
} VkPipelineColorBlendAdvancedStateCreateInfoEXT;
|
||||
|
||||
|
||||
|
||||
#define VK_NV_fragment_coverage_to_color 1
|
||||
#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1
|
||||
#define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color"
|
||||
|
||||
typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV;
|
||||
|
||||
typedef struct VkPipelineCoverageToColorStateCreateInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineCoverageToColorStateCreateFlagsNV flags;
|
||||
VkBool32 coverageToColorEnable;
|
||||
uint32_t coverageToColorLocation;
|
||||
} VkPipelineCoverageToColorStateCreateInfoNV;
|
||||
|
||||
|
||||
|
||||
#define VK_NV_framebuffer_mixed_samples 1
|
||||
#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1
|
||||
#define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples"
|
||||
|
||||
|
||||
typedef enum VkCoverageModulationModeNV {
|
||||
VK_COVERAGE_MODULATION_MODE_NONE_NV = 0,
|
||||
VK_COVERAGE_MODULATION_MODE_RGB_NV = 1,
|
||||
VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2,
|
||||
VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3,
|
||||
VK_COVERAGE_MODULATION_MODE_BEGIN_RANGE_NV = VK_COVERAGE_MODULATION_MODE_NONE_NV,
|
||||
VK_COVERAGE_MODULATION_MODE_END_RANGE_NV = VK_COVERAGE_MODULATION_MODE_RGBA_NV,
|
||||
VK_COVERAGE_MODULATION_MODE_RANGE_SIZE_NV = (VK_COVERAGE_MODULATION_MODE_RGBA_NV - VK_COVERAGE_MODULATION_MODE_NONE_NV + 1),
|
||||
VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV = 0x7FFFFFFF
|
||||
} VkCoverageModulationModeNV;
|
||||
|
||||
typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV;
|
||||
|
||||
typedef struct VkPipelineCoverageModulationStateCreateInfoNV {
|
||||
VkStructureType sType;
|
||||
const void* pNext;
|
||||
VkPipelineCoverageModulationStateCreateFlagsNV flags;
|
||||
VkCoverageModulationModeNV coverageModulationMode;
|
||||
VkBool32 coverageModulationTableEnable;
|
||||
uint32_t coverageModulationTableCount;
|
||||
const float* pCoverageModulationTable;
|
||||
} VkPipelineCoverageModulationStateCreateInfoNV;
|
||||
|
||||
|
||||
|
||||
#define VK_NV_fill_rectangle 1
|
||||
#define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1
|
||||
#define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
32807
include/vulkan/vulkan.hpp
Normal file
32807
include/vulkan/vulkan.hpp
Normal file
File diff suppressed because it is too large
Load Diff
BIN
lib/SDL2.lib
Executable file
BIN
lib/SDL2.lib
Executable file
Binary file not shown.
BIN
lib/vulkan-1.lib
Executable file
BIN
lib/vulkan-1.lib
Executable file
Binary file not shown.
11
meson.build
Normal file
11
meson.build
Normal file
@ -0,0 +1,11 @@
|
||||
project('dxvk', ['cpp'])
|
||||
|
||||
dxvk_compiler = meson.get_compiler('cpp')
|
||||
dxvk_library_path = meson.source_root() + '/lib'
|
||||
dxvk_include_path = include_directories('./include')
|
||||
|
||||
lib_vulkan = dxvk_compiler.find_library('vulkan-1', dirs : dxvk_library_path)
|
||||
lib_sdl2 = dxvk_compiler.find_library('SDL2', dirs : dxvk_library_path)
|
||||
|
||||
subdir('src')
|
||||
subdir('tests')
|
177
src/dxvk/dxvk_adapter.cpp
Normal file
177
src/dxvk/dxvk_adapter.cpp
Normal file
@ -0,0 +1,177 @@
|
||||
#include <cstring>
|
||||
|
||||
#include "dxvk_adapter.h"
|
||||
#include "dxvk_device.h"
|
||||
#include "dxvk_instance.h"
|
||||
#include "dxvk_surface.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkAdapter::DxvkAdapter(
|
||||
const Rc<DxvkInstance>& instance,
|
||||
VkPhysicalDevice handle)
|
||||
: m_instance (instance),
|
||||
m_vki (instance->vki()),
|
||||
m_handle (handle) {
|
||||
uint32_t numQueueFamilies = 0;
|
||||
m_vki->vkGetPhysicalDeviceQueueFamilyProperties(
|
||||
m_handle, &numQueueFamilies, nullptr);
|
||||
|
||||
m_queueFamilies.resize(numQueueFamilies);
|
||||
m_vki->vkGetPhysicalDeviceQueueFamilyProperties(
|
||||
m_handle, &numQueueFamilies, m_queueFamilies.data());
|
||||
}
|
||||
|
||||
|
||||
DxvkAdapter::~DxvkAdapter() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
VkPhysicalDeviceProperties DxvkAdapter::deviceProperties() const {
|
||||
VkPhysicalDeviceProperties properties;
|
||||
m_vki->vkGetPhysicalDeviceProperties(m_handle, &properties);
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
||||
VkPhysicalDeviceMemoryProperties DxvkAdapter::memoryProperties() const {
|
||||
VkPhysicalDeviceMemoryProperties memoryProperties;
|
||||
m_vki->vkGetPhysicalDeviceMemoryProperties(m_handle, &memoryProperties);
|
||||
return memoryProperties;
|
||||
}
|
||||
|
||||
|
||||
VkPhysicalDeviceFeatures DxvkAdapter::features() const {
|
||||
VkPhysicalDeviceFeatures features;
|
||||
m_vki->vkGetPhysicalDeviceFeatures(m_handle, &features);
|
||||
return features;
|
||||
}
|
||||
|
||||
|
||||
VkFormatProperties DxvkAdapter::formatProperties(VkFormat format) const {
|
||||
VkFormatProperties formatProperties;
|
||||
m_vki->vkGetPhysicalDeviceFormatProperties(m_handle, format, &formatProperties);
|
||||
return formatProperties;
|
||||
}
|
||||
|
||||
|
||||
std::optional<VkImageFormatProperties> DxvkAdapter::imageFormatProperties(
|
||||
VkFormat format,
|
||||
VkImageType type,
|
||||
VkImageTiling tiling,
|
||||
VkImageUsageFlags usage,
|
||||
VkImageCreateFlags flags) const {
|
||||
VkImageFormatProperties formatProperties;
|
||||
|
||||
VkResult status = m_vki->vkGetPhysicalDeviceImageFormatProperties(
|
||||
m_handle, format, type, tiling, usage, flags, &formatProperties);
|
||||
|
||||
switch (status) {
|
||||
case VK_SUCCESS: return formatProperties;
|
||||
case VK_ERROR_FORMAT_NOT_SUPPORTED: return { };
|
||||
|
||||
default:
|
||||
throw DxvkError("DxvkAdapter::imageFormatProperties: Failed to query format properties");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
uint32_t DxvkAdapter::graphicsQueueFamily() const {
|
||||
for (uint32_t i = 0; i < m_queueFamilies.size(); i++) {
|
||||
if (m_queueFamilies[i].queueFlags & VK_QUEUE_GRAPHICS_BIT)
|
||||
return i;
|
||||
}
|
||||
|
||||
throw DxvkError("DxvkAdapter::graphicsQueueFamily: No graphics queue found");
|
||||
}
|
||||
|
||||
|
||||
uint32_t DxvkAdapter::presentQueueFamily() const {
|
||||
// TODO Implement properly
|
||||
return this->graphicsQueueFamily();
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkDevice> DxvkAdapter::createDevice() {
|
||||
auto enabledExtensions = this->enableExtensions();
|
||||
auto enabledFeatures = this->enableFeatures();
|
||||
|
||||
float queuePriority = 1.0f;
|
||||
std::vector<VkDeviceQueueCreateInfo> queueInfos;
|
||||
|
||||
const uint32_t gIndex = this->graphicsQueueFamily();
|
||||
const uint32_t pIndex = this->presentQueueFamily();
|
||||
|
||||
VkDeviceQueueCreateInfo graphicsQueue;
|
||||
graphicsQueue.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
||||
graphicsQueue.pNext = nullptr;
|
||||
graphicsQueue.flags = 0;
|
||||
graphicsQueue.queueFamilyIndex = gIndex;
|
||||
graphicsQueue.queueCount = 1;
|
||||
graphicsQueue.pQueuePriorities = &queuePriority;
|
||||
queueInfos.push_back(graphicsQueue);
|
||||
|
||||
if (pIndex != gIndex) {
|
||||
VkDeviceQueueCreateInfo presentQueue = graphicsQueue;
|
||||
presentQueue.queueFamilyIndex = pIndex;
|
||||
queueInfos.push_back(presentQueue);
|
||||
}
|
||||
|
||||
VkDeviceCreateInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.flags = 0;
|
||||
info.queueCreateInfoCount = queueInfos.size();
|
||||
info.pQueueCreateInfos = queueInfos.data();
|
||||
info.enabledLayerCount = 0;
|
||||
info.ppEnabledLayerNames = nullptr;
|
||||
info.enabledExtensionCount = enabledExtensions.count();
|
||||
info.ppEnabledExtensionNames = enabledExtensions.names();
|
||||
info.pEnabledFeatures = &enabledFeatures;
|
||||
|
||||
VkDevice device = VK_NULL_HANDLE;
|
||||
|
||||
if (m_vki->vkCreateDevice(m_handle, &info, nullptr, &device) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkDevice::createDevice: Failed to create device");
|
||||
return new DxvkDevice(this, new vk::DeviceFn(m_vki->instance(), device));
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkSurface> DxvkAdapter::createSurface(HINSTANCE instance, HWND window) {
|
||||
return new DxvkSurface(this, instance, window);
|
||||
}
|
||||
|
||||
|
||||
vk::NameList DxvkAdapter::enableExtensions() {
|
||||
std::vector<const char*> extOptional = { };
|
||||
std::vector<const char*> extRequired = {
|
||||
VK_KHR_SWAPCHAIN_EXTENSION_NAME,
|
||||
};
|
||||
|
||||
const vk::NameSet extensionsAvailable
|
||||
= vk::NameSet::enumerateDeviceExtensions(*m_vki, m_handle);
|
||||
vk::NameList extensionsEnabled;
|
||||
|
||||
for (auto e : extOptional) {
|
||||
if (extensionsAvailable.supports(e))
|
||||
extensionsEnabled.add(e);
|
||||
}
|
||||
|
||||
for (auto e : extRequired) {
|
||||
if (!extensionsAvailable.supports(e))
|
||||
throw DxvkError(str::format("DxvkDevice::getExtensions: Extension ", e, " not supported"));
|
||||
extensionsEnabled.add(e);
|
||||
}
|
||||
|
||||
return extensionsEnabled;
|
||||
}
|
||||
|
||||
|
||||
VkPhysicalDeviceFeatures DxvkAdapter::enableFeatures() {
|
||||
VkPhysicalDeviceFeatures features;
|
||||
std::memset(&features, 0, sizeof(features));
|
||||
return features;
|
||||
}
|
||||
|
||||
}
|
143
src/dxvk/dxvk_adapter.h
Normal file
143
src/dxvk/dxvk_adapter.h
Normal file
@ -0,0 +1,143 @@
|
||||
#pragma once
|
||||
|
||||
#include <optional>
|
||||
|
||||
#include "./vulkan/dxvk_vulkan_extensions.h"
|
||||
|
||||
#include "dxvk_include.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
class DxvkDevice;
|
||||
class DxvkInstance;
|
||||
class DxvkSurface;
|
||||
|
||||
/**
|
||||
* \brief DXVK adapter
|
||||
*
|
||||
* Corresponds to a physical device in Vulkan. Provides
|
||||
* all kinds of information about the device itself and
|
||||
* the supported feature set.
|
||||
*/
|
||||
class DxvkAdapter : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
DxvkAdapter(
|
||||
const Rc<DxvkInstance>& instance,
|
||||
VkPhysicalDevice handle);
|
||||
~DxvkAdapter();
|
||||
|
||||
/**
|
||||
* \brief Vulkan instance functions
|
||||
* \returns Vulkan instance functions
|
||||
*/
|
||||
Rc<vk::InstanceFn> vki() const {
|
||||
return m_vki;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Physical device handle
|
||||
* \returns The adapter handle
|
||||
*/
|
||||
VkPhysicalDevice handle() const {
|
||||
return m_handle;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Physical device properties
|
||||
*
|
||||
* Retrieves information about the device itself.
|
||||
* \returns Physical device properties
|
||||
*/
|
||||
VkPhysicalDeviceProperties deviceProperties() const;
|
||||
|
||||
/**
|
||||
* \brief Memory properties
|
||||
*
|
||||
* Queries the memory types and memory heaps of
|
||||
* the device. This is useful for memory allocators.
|
||||
* \returns Device memory properties
|
||||
*/
|
||||
VkPhysicalDeviceMemoryProperties memoryProperties() const;
|
||||
|
||||
/**
|
||||
* \brief Supportred device features
|
||||
*
|
||||
* Queries the supported device features.
|
||||
* \returns Device features
|
||||
*/
|
||||
VkPhysicalDeviceFeatures features() const;
|
||||
|
||||
/**
|
||||
* \brief Queries format support
|
||||
*
|
||||
* \param [in] format The format to query
|
||||
* \returns Format support info
|
||||
*/
|
||||
VkFormatProperties formatProperties(
|
||||
VkFormat format) const;
|
||||
|
||||
/**
|
||||
* \brief Queries image format support
|
||||
*
|
||||
* \param [in] format Format to query
|
||||
* \param [in] type Image type
|
||||
* \param [in] tiling Image tiling
|
||||
* \param [in] usage Image usage flags
|
||||
* \param [in] flags Image create flags
|
||||
* \returns Image format support info
|
||||
*/
|
||||
std::optional<VkImageFormatProperties> imageFormatProperties(
|
||||
VkFormat format,
|
||||
VkImageType type,
|
||||
VkImageTiling tiling,
|
||||
VkImageUsageFlags usage,
|
||||
VkImageCreateFlags flags) const;
|
||||
|
||||
/**
|
||||
* \brief Graphics queue family index
|
||||
* \returns Graphics queue family index
|
||||
*/
|
||||
uint32_t graphicsQueueFamily() const;
|
||||
|
||||
/**
|
||||
* \brief Presentation queue family index
|
||||
* \returns Presentation queue family index
|
||||
*/
|
||||
uint32_t presentQueueFamily() const;
|
||||
|
||||
/**
|
||||
* \brief Creates a DXVK device
|
||||
*
|
||||
* Creates a logical device for this adapter.
|
||||
* \returns Device handle
|
||||
*/
|
||||
Rc<DxvkDevice> createDevice();
|
||||
|
||||
/**
|
||||
* \brief Creates a surface
|
||||
*
|
||||
* \param [in] instance Module instance
|
||||
* \param [in] window Application window
|
||||
* \returns Surface handle
|
||||
*/
|
||||
Rc<DxvkSurface> createSurface(
|
||||
HINSTANCE instance,
|
||||
HWND window);
|
||||
|
||||
private:
|
||||
|
||||
Rc<DxvkInstance> m_instance;
|
||||
Rc<vk::InstanceFn> m_vki;
|
||||
VkPhysicalDevice m_handle;
|
||||
|
||||
std::vector<VkQueueFamilyProperties> m_queueFamilies;
|
||||
|
||||
vk::NameList enableExtensions();
|
||||
|
||||
VkPhysicalDeviceFeatures enableFeatures();
|
||||
|
||||
};
|
||||
|
||||
}
|
0
src/dxvk/dxvk_buffer.cpp
Normal file
0
src/dxvk/dxvk_buffer.cpp
Normal file
38
src/dxvk/dxvk_buffer.h
Normal file
38
src/dxvk/dxvk_buffer.h
Normal file
@ -0,0 +1,38 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_resource.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief Buffer create info
|
||||
*
|
||||
* The properties of a buffer that are
|
||||
* passed to \ref DxvkDevice::createBuffer
|
||||
*/
|
||||
struct DxvkBufferCreateInfo {
|
||||
|
||||
/// Size of the buffer, in bytes
|
||||
VkDeviceSize bufferSize;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief DXVK buffer
|
||||
*
|
||||
* A simple buffer resource that stores linear data.
|
||||
*/
|
||||
class DxvkBuffer : public DxvkResource {
|
||||
|
||||
public:
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
68
src/dxvk/dxvk_cmdlist.cpp
Normal file
68
src/dxvk/dxvk_cmdlist.cpp
Normal file
@ -0,0 +1,68 @@
|
||||
#include "dxvk_cmdlist.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkCommandList::DxvkCommandList(
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
uint32_t queueFamily)
|
||||
: m_vkd(vkd) {
|
||||
VkCommandPoolCreateInfo poolInfo;
|
||||
poolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
||||
poolInfo.pNext = nullptr;
|
||||
poolInfo.flags = 0;
|
||||
poolInfo.queueFamilyIndex = queueFamily;
|
||||
|
||||
if (m_vkd->vkCreateCommandPool(m_vkd->device(), &poolInfo, nullptr, &m_pool) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkCommandList::DxvkCommandList: Failed to create command pool");
|
||||
|
||||
VkCommandBufferAllocateInfo cmdInfo;
|
||||
cmdInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
|
||||
cmdInfo.pNext = nullptr;
|
||||
cmdInfo.commandPool = m_pool;
|
||||
cmdInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
|
||||
cmdInfo.commandBufferCount = 1;
|
||||
|
||||
if (m_vkd->vkAllocateCommandBuffers(m_vkd->device(), &cmdInfo, &m_buffer) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkCommandList::DxvkCommandList: Failed to allocate command buffer");
|
||||
}
|
||||
|
||||
|
||||
DxvkCommandList::~DxvkCommandList() {
|
||||
m_resources.reset();
|
||||
|
||||
m_vkd->vkDestroyCommandPool(
|
||||
m_vkd->device(), m_pool, nullptr);
|
||||
}
|
||||
|
||||
|
||||
void DxvkCommandList::beginRecording() {
|
||||
VkCommandBufferBeginInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
|
||||
info.pInheritanceInfo = nullptr;
|
||||
|
||||
if (m_vkd->vkResetCommandPool(m_vkd->device(), m_pool, 0) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkCommandList::beginRecording: Failed to reset command pool");
|
||||
|
||||
if (m_vkd->vkBeginCommandBuffer(m_buffer, &info) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkCommandList::beginRecording: Failed to begin command buffer recording");
|
||||
}
|
||||
|
||||
|
||||
void DxvkCommandList::endRecording() {
|
||||
if (m_vkd->vkEndCommandBuffer(m_buffer) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkCommandList::endRecording: Failed to record command buffer");
|
||||
}
|
||||
|
||||
|
||||
void DxvkCommandList::trackResource(const Rc<DxvkResource>& rc) {
|
||||
m_resources.trackResource(rc);
|
||||
}
|
||||
|
||||
|
||||
void DxvkCommandList::reset() {
|
||||
m_resources.reset();
|
||||
}
|
||||
|
||||
}
|
70
src/dxvk/dxvk_cmdlist.h
Normal file
70
src/dxvk/dxvk_cmdlist.h
Normal file
@ -0,0 +1,70 @@
|
||||
#pragma once
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
#include "dxvk_lifetime.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief DXVK command list
|
||||
*
|
||||
* Stores a command buffer that a context can use to record Vulkan
|
||||
* commands. The command list shall also reference the resources
|
||||
* used by the recorded commands for automatic lifetime tracking.
|
||||
* When the command list has completed execution, resources that
|
||||
* are no longer used may get destroyed.
|
||||
*/
|
||||
class DxvkCommandList : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
DxvkCommandList(
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
uint32_t queueFamily);
|
||||
~DxvkCommandList();
|
||||
|
||||
/**
|
||||
* \brief Command buffer handle
|
||||
* \returns Command buffer handle
|
||||
*/
|
||||
VkCommandBuffer handle() const {
|
||||
return m_buffer;
|
||||
}
|
||||
|
||||
void beginRecording();
|
||||
void endRecording();
|
||||
|
||||
/**
|
||||
* \brief Adds a resource to track
|
||||
*
|
||||
* Adds a resource to the internal resource tracker.
|
||||
* Resources will be kept alive and "in use" until
|
||||
* the device can guarantee that the submission has
|
||||
* completed.
|
||||
*/
|
||||
void trackResource(
|
||||
const Rc<DxvkResource>& rc);
|
||||
|
||||
/**
|
||||
* \brief Resets the command list
|
||||
*
|
||||
* Resets the internal command buffer of the command list and
|
||||
* marks all tracked resources as unused. When submitting the
|
||||
* command list to the device, this method will be called once
|
||||
* the command list completes execution.
|
||||
*/
|
||||
void reset();
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
|
||||
VkCommandPool m_pool;
|
||||
VkCommandBuffer m_buffer;
|
||||
|
||||
DxvkLifetimeTracker m_resources;
|
||||
|
||||
};
|
||||
|
||||
}
|
73
src/dxvk/dxvk_context.cpp
Normal file
73
src/dxvk/dxvk_context.cpp
Normal file
@ -0,0 +1,73 @@
|
||||
#include "dxvk_context.h"
|
||||
#include "dxvk_main.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkContext::DxvkContext(const Rc<vk::DeviceFn>& vkd)
|
||||
: m_vkd(vkd) { }
|
||||
|
||||
|
||||
DxvkContext::~DxvkContext() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::beginRecording(
|
||||
const Rc<DxvkCommandList>& cmdList) {
|
||||
m_commandList = cmdList;
|
||||
m_commandList->beginRecording();
|
||||
}
|
||||
|
||||
|
||||
bool DxvkContext::endRecording() {
|
||||
m_commandList->endRecording();
|
||||
m_commandList = nullptr;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void DxvkContext::setFramebuffer(
|
||||
const Rc<DxvkFramebuffer>& fb) {
|
||||
const DxvkFramebufferSize fbSize = fb->size();
|
||||
// TODO implement properly
|
||||
VkRect2D renderArea;
|
||||
renderArea.offset.x = 0;
|
||||
renderArea.offset.y = 0;
|
||||
renderArea.extent.width = fbSize.width;
|
||||
renderArea.extent.height = fbSize.height;
|
||||
|
||||
VkRenderPassBeginInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.renderPass = fb->renderPass();
|
||||
info.framebuffer = fb->handle();
|
||||
info.renderArea = renderArea;
|
||||
info.clearValueCount = 0;
|
||||
info.pClearValues = nullptr;
|
||||
|
||||
// This is for testing purposes only.
|
||||
VkClearAttachment attachment;
|
||||
attachment.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
attachment.colorAttachment = 0;
|
||||
attachment.clearValue.color.float32[0] = 1.0f;
|
||||
attachment.clearValue.color.float32[1] = 1.0f;
|
||||
attachment.clearValue.color.float32[2] = 1.0f;
|
||||
attachment.clearValue.color.float32[3] = 1.0f;
|
||||
|
||||
VkClearRect clearRect;
|
||||
clearRect.rect = renderArea;
|
||||
clearRect.baseArrayLayer = 0;
|
||||
clearRect.layerCount = fbSize.layers;
|
||||
|
||||
m_vkd->vkCmdBeginRenderPass(
|
||||
m_commandList->handle(), &info,
|
||||
VK_SUBPASS_CONTENTS_INLINE);
|
||||
m_vkd->vkCmdClearAttachments(
|
||||
m_commandList->handle(),
|
||||
1, &attachment,
|
||||
1, &clearRect);
|
||||
m_vkd->vkCmdEndRenderPass(
|
||||
m_commandList->handle());
|
||||
}
|
||||
|
||||
}
|
66
src/dxvk/dxvk_context.h
Normal file
66
src/dxvk/dxvk_context.h
Normal file
@ -0,0 +1,66 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_cmdlist.h"
|
||||
#include "dxvk_framebuffer.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief DXVk context
|
||||
*
|
||||
* Tracks pipeline state and records command lists.
|
||||
* This is where the actual rendering commands are
|
||||
* recorded.
|
||||
*/
|
||||
class DxvkContext : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
DxvkContext(const Rc<vk::DeviceFn>& vkd);
|
||||
~DxvkContext();
|
||||
|
||||
/**
|
||||
* \brief Begins command buffer recording
|
||||
*
|
||||
* Begins recording a command list. This does
|
||||
* not alter any context state other than the
|
||||
* active command list.
|
||||
* \param [in] cmdList Target command list
|
||||
*/
|
||||
void beginRecording(
|
||||
const Rc<DxvkCommandList>& cmdList);
|
||||
|
||||
/**
|
||||
* \brief Ends command buffer recording
|
||||
*
|
||||
* Finishes recording the active command list.
|
||||
* The command list can then be submitted to
|
||||
* the device.
|
||||
*
|
||||
* The return value of this method can be used to
|
||||
* determine whether the command list needs to be
|
||||
* submitted. In case the command list is empty,
|
||||
* \c false will be returned and it shall not be
|
||||
* submitted to the device.
|
||||
*
|
||||
* This will not change any context state
|
||||
* other than the active command list.
|
||||
* \returns \c true if any commands were recorded
|
||||
*/
|
||||
bool endRecording();
|
||||
|
||||
/**
|
||||
* \brief Sets framebuffer
|
||||
* \param [in] fb Framebuffer
|
||||
*/
|
||||
void setFramebuffer(
|
||||
const Rc<DxvkFramebuffer>& fb);
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
Rc<DxvkCommandList> m_commandList;
|
||||
|
||||
};
|
||||
|
||||
}
|
0
src/dxvk/dxvk_context_state.cpp
Normal file
0
src/dxvk/dxvk_context_state.cpp
Normal file
9
src/dxvk/dxvk_context_state.h
Normal file
9
src/dxvk/dxvk_context_state.h
Normal file
@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_cmdlist.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
|
||||
|
||||
}
|
119
src/dxvk/dxvk_device.cpp
Normal file
119
src/dxvk/dxvk_device.cpp
Normal file
@ -0,0 +1,119 @@
|
||||
#include "dxvk_device.h"
|
||||
#include "dxvk_instance.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkDevice::DxvkDevice(
|
||||
const Rc<DxvkAdapter>& adapter,
|
||||
const Rc<vk::DeviceFn>& vkd)
|
||||
: m_adapter (adapter),
|
||||
m_vkd (vkd),
|
||||
m_memory (adapter, vkd),
|
||||
m_renderPassPool(vkd) {
|
||||
m_vkd->vkGetDeviceQueue(m_vkd->device(),
|
||||
m_adapter->graphicsQueueFamily(), 0,
|
||||
&m_graphicsQueue);
|
||||
m_vkd->vkGetDeviceQueue(m_vkd->device(),
|
||||
m_adapter->presentQueueFamily(), 0,
|
||||
&m_presentQueue);
|
||||
}
|
||||
|
||||
|
||||
DxvkDevice::~DxvkDevice() {
|
||||
m_vkd->vkDeviceWaitIdle(m_vkd->device());
|
||||
m_vkd->vkDestroyDevice(m_vkd->device(), nullptr);
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkCommandList> DxvkDevice::createCommandList() {
|
||||
return new DxvkCommandList(m_vkd,
|
||||
m_adapter->graphicsQueueFamily());
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkContext> DxvkDevice::createContext() {
|
||||
return new DxvkContext(m_vkd);
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkFramebuffer> DxvkDevice::createFramebuffer(
|
||||
const DxvkRenderTargets& renderTargets) {
|
||||
auto format = renderTargets.renderPassFormat();
|
||||
auto renderPass = m_renderPassPool.getRenderPass(format);
|
||||
return new DxvkFramebuffer(m_vkd, renderPass, renderTargets);
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkImage> DxvkDevice::createImage(
|
||||
const DxvkImageCreateInfo& createInfo,
|
||||
VkMemoryPropertyFlags memoryType) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkImageView> DxvkDevice::createImageView(
|
||||
const Rc<DxvkImage>& image,
|
||||
const DxvkImageViewCreateInfo& createInfo) {
|
||||
return new DxvkImageView(m_vkd, image, createInfo);
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkSemaphore> DxvkDevice::createSemaphore() {
|
||||
return new DxvkSemaphore(m_vkd);
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkSwapchain> DxvkDevice::createSwapchain(
|
||||
const Rc<DxvkSurface>& surface,
|
||||
const DxvkSwapchainProperties& properties) {
|
||||
return new DxvkSwapchain(this, surface, properties, m_presentQueue);
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkFence> DxvkDevice::submitCommandList(
|
||||
const Rc<DxvkCommandList>& commandList,
|
||||
const Rc<DxvkSemaphore>& waitSync,
|
||||
const Rc<DxvkSemaphore>& wakeSync) {
|
||||
Rc<DxvkFence> fence = new DxvkFence(m_vkd);
|
||||
|
||||
VkCommandBuffer commandBuffer = commandList->handle();
|
||||
VkSemaphore waitSemaphore = VK_NULL_HANDLE;
|
||||
VkSemaphore wakeSemaphore = VK_NULL_HANDLE;
|
||||
|
||||
if (waitSync != nullptr) {
|
||||
waitSemaphore = waitSync->handle();
|
||||
commandList->trackResource(waitSync);
|
||||
}
|
||||
|
||||
if (wakeSync != nullptr) {
|
||||
wakeSemaphore = wakeSync->handle();
|
||||
commandList->trackResource(wakeSync);
|
||||
}
|
||||
|
||||
const VkPipelineStageFlags waitStageMask
|
||||
= VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
|
||||
|
||||
VkSubmitInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.waitSemaphoreCount = waitSemaphore == VK_NULL_HANDLE ? 0 : 1;
|
||||
info.pWaitSemaphores = &waitSemaphore;
|
||||
info.pWaitDstStageMask = &waitStageMask;
|
||||
info.commandBufferCount = commandBuffer == VK_NULL_HANDLE ? 0 : 1;
|
||||
info.pCommandBuffers = &commandBuffer;
|
||||
info.signalSemaphoreCount = wakeSemaphore == VK_NULL_HANDLE ? 0 : 1;
|
||||
info.pSignalSemaphores = &wakeSemaphore;
|
||||
|
||||
if (m_vkd->vkQueueSubmit(m_graphicsQueue, 1, &info, fence->handle()) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkDevice::submitCommandList: Command submission failed");
|
||||
|
||||
return fence;
|
||||
}
|
||||
|
||||
|
||||
void DxvkDevice::waitForIdle() const {
|
||||
if (m_vkd->vkDeviceWaitIdle(m_vkd->device()) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkDevice::waitForIdle: Operation failed");
|
||||
}
|
||||
|
||||
}
|
152
src/dxvk/dxvk_device.h
Normal file
152
src/dxvk/dxvk_device.h
Normal file
@ -0,0 +1,152 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_adapter.h"
|
||||
#include "dxvk_buffer.h"
|
||||
#include "dxvk_context.h"
|
||||
#include "dxvk_framebuffer.h"
|
||||
#include "dxvk_memory.h"
|
||||
#include "dxvk_renderpass.h"
|
||||
#include "dxvk_swapchain.h"
|
||||
#include "dxvk_sync.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
class DxvkInstance;
|
||||
|
||||
/**
|
||||
* \brief DXVK device
|
||||
*
|
||||
* Device object. This is responsible for resource creation,
|
||||
* memory allocation, command submission and state tracking.
|
||||
* Rendering commands are recorded into command lists using
|
||||
* contexts. Multiple contexts can be created for a device.
|
||||
*/
|
||||
class DxvkDevice : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
DxvkDevice(
|
||||
const Rc<DxvkAdapter>& adapter,
|
||||
const Rc<vk::DeviceFn>& vkd);
|
||||
~DxvkDevice();
|
||||
|
||||
/**
|
||||
* \brief Vulkan device functions
|
||||
* \returns Vulkan device functions
|
||||
*/
|
||||
Rc<vk::DeviceFn> vkd() const {
|
||||
return m_vkd;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Logical device handle
|
||||
* \returns The device handle
|
||||
*/
|
||||
VkDevice handle() const {
|
||||
return m_vkd->device();
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Creates a command list
|
||||
* \returns The command list
|
||||
*/
|
||||
Rc<DxvkCommandList> createCommandList();
|
||||
|
||||
/**
|
||||
* \brief Creates a context
|
||||
*
|
||||
* Creates a context object that can
|
||||
* be used to record command buffers.
|
||||
* \returns The context object
|
||||
*/
|
||||
Rc<DxvkContext> createContext();
|
||||
|
||||
/**
|
||||
* \brief Creates framebuffer for a set of render targets
|
||||
*
|
||||
* Automatically deduces framebuffer dimensions
|
||||
* from the supplied render target views.
|
||||
* \param [in] renderTargets Render targets
|
||||
* \returns The framebuffer object
|
||||
*/
|
||||
Rc<DxvkFramebuffer> createFramebuffer(
|
||||
const DxvkRenderTargets& renderTargets);
|
||||
|
||||
/**
|
||||
* \brief Creates an image object
|
||||
*
|
||||
* \param [in] createInfo Image create info
|
||||
* \param [in] memoryType Memory type flags
|
||||
* \returns The image object
|
||||
*/
|
||||
Rc<DxvkImage> createImage(
|
||||
const DxvkImageCreateInfo& createInfo,
|
||||
VkMemoryPropertyFlags memoryType);
|
||||
|
||||
/**
|
||||
* \brief Creates an image view
|
||||
*
|
||||
* \param [in] image The image to create a view for
|
||||
* \param [in] createInfo Image view create info
|
||||
* \returns The image view
|
||||
*/
|
||||
Rc<DxvkImageView> createImageView(
|
||||
const Rc<DxvkImage>& image,
|
||||
const DxvkImageViewCreateInfo& createInfo);
|
||||
|
||||
/**
|
||||
* \brief Creates a semaphore object
|
||||
* \returns Newly created semaphore
|
||||
*/
|
||||
Rc<DxvkSemaphore> createSemaphore();
|
||||
|
||||
/**
|
||||
* \brief Creates a swap chain
|
||||
*
|
||||
* \param [in] surface The target surface
|
||||
* \param [in] properties Swapchain properties
|
||||
* \returns The swapchain object
|
||||
*/
|
||||
Rc<DxvkSwapchain> createSwapchain(
|
||||
const Rc<DxvkSurface>& surface,
|
||||
const DxvkSwapchainProperties& properties);
|
||||
|
||||
/**
|
||||
* \brief Submits a command list
|
||||
*
|
||||
* Synchronization arguments are optional.
|
||||
* \param [in] commandList The command list to submit
|
||||
* \param [in] waitSync (Optional) Semaphore to wait on
|
||||
* \param [in] wakeSync (Optional) Semaphore to notify
|
||||
* \returns Synchronization fence
|
||||
*/
|
||||
Rc<DxvkFence> submitCommandList(
|
||||
const Rc<DxvkCommandList>& commandList,
|
||||
const Rc<DxvkSemaphore>& waitSync,
|
||||
const Rc<DxvkSemaphore>& wakeSync);
|
||||
|
||||
/**
|
||||
* \brief Waits until the device becomes idle
|
||||
*
|
||||
* Waits for the GPU to complete the execution of all
|
||||
* previously submitted command buffers. This may be
|
||||
* used to ensure that resources that were previously
|
||||
* used by the GPU can be safely destroyed.
|
||||
*/
|
||||
void waitForIdle() const;
|
||||
|
||||
private:
|
||||
|
||||
Rc<DxvkAdapter> m_adapter;
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
|
||||
DxvkMemoryAllocator m_memory;
|
||||
DxvkRenderPassPool m_renderPassPool;
|
||||
|
||||
VkQueue m_graphicsQueue;
|
||||
VkQueue m_presentQueue;
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
95
src/dxvk/dxvk_framebuffer.cpp
Normal file
95
src/dxvk/dxvk_framebuffer.cpp
Normal file
@ -0,0 +1,95 @@
|
||||
#include "dxvk_framebuffer.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkRenderTargets:: DxvkRenderTargets() { }
|
||||
DxvkRenderTargets::~DxvkRenderTargets() { }
|
||||
|
||||
|
||||
DxvkRenderPassFormat DxvkRenderTargets::renderPassFormat() const {
|
||||
DxvkRenderPassFormat result;
|
||||
|
||||
for (uint32_t i = 0; i < MaxNumColorTargets; i++) {
|
||||
if (m_colorTargets.at(i) != nullptr) {
|
||||
result.setColorFormat(i, m_colorTargets.at(i)->info().format);
|
||||
result.setSampleCount(m_colorTargets.at(i)->imageInfo().sampleCount);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_depthTarget != nullptr) {
|
||||
result.setDepthFormat(m_depthTarget->info().format);
|
||||
result.setSampleCount(m_depthTarget->imageInfo().sampleCount);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
std::vector<VkImageView> DxvkRenderTargets::getAttachments() const {
|
||||
std::vector<VkImageView> result;
|
||||
|
||||
if (m_depthTarget != nullptr)
|
||||
result.push_back(m_depthTarget->handle());
|
||||
|
||||
for (uint32_t i = 0; i < MaxNumColorTargets; i++) {
|
||||
if (m_colorTargets.at(i) != nullptr)
|
||||
result.push_back(m_colorTargets.at(i)->handle());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
DxvkFramebufferSize DxvkRenderTargets::getImageSize() const {
|
||||
if (m_depthTarget != nullptr)
|
||||
return this->renderTargetSize(m_depthTarget);
|
||||
|
||||
for (uint32_t i = 0; i < MaxNumColorTargets; i++) {
|
||||
if (m_colorTargets.at(i) != nullptr)
|
||||
return this->renderTargetSize(m_colorTargets.at(i));
|
||||
}
|
||||
|
||||
return DxvkFramebufferSize { 0, 0, 0 };
|
||||
}
|
||||
|
||||
|
||||
DxvkFramebufferSize DxvkRenderTargets::renderTargetSize(
|
||||
const Rc<DxvkImageView>& renderTarget) const {
|
||||
auto extent = renderTarget->imageInfo().extent;
|
||||
auto layers = renderTarget->info().numLayers;
|
||||
return DxvkFramebufferSize { extent.width, extent.height, layers };
|
||||
}
|
||||
|
||||
|
||||
DxvkFramebuffer::DxvkFramebuffer(
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
const Rc<DxvkRenderPass>& renderPass,
|
||||
const DxvkRenderTargets& renderTargets)
|
||||
: m_vkd (vkd),
|
||||
m_renderPass (renderPass),
|
||||
m_renderTargets (renderTargets),
|
||||
m_framebufferSize (renderTargets.getImageSize()) {
|
||||
auto views = renderTargets.getAttachments();
|
||||
|
||||
VkFramebufferCreateInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.flags = 0;
|
||||
info.renderPass = renderPass->handle();
|
||||
info.attachmentCount = views.size();
|
||||
info.pAttachments = views.data();
|
||||
info.width = m_framebufferSize.width;
|
||||
info.height = m_framebufferSize.height;
|
||||
info.layers = m_framebufferSize.layers;
|
||||
|
||||
if (m_vkd->vkCreateFramebuffer(m_vkd->device(), &info, nullptr, &m_framebuffer) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkFramebuffer::DxvkFramebuffer: Failed to create framebuffer object");
|
||||
}
|
||||
|
||||
|
||||
DxvkFramebuffer::~DxvkFramebuffer() {
|
||||
m_vkd->vkDestroyFramebuffer(
|
||||
m_vkd->device(), m_framebuffer, nullptr);
|
||||
}
|
||||
|
||||
}
|
160
src/dxvk/dxvk_framebuffer.h
Normal file
160
src/dxvk/dxvk_framebuffer.h
Normal file
@ -0,0 +1,160 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_image.h"
|
||||
#include "dxvk_renderpass.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief Framebuffer size
|
||||
*
|
||||
* Stores the width, height and number of layers
|
||||
* of a framebuffer. This can be used in case a
|
||||
* framebuffer does not have any attachments.
|
||||
*/
|
||||
struct DxvkFramebufferSize {
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
uint32_t layers;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief Render target description
|
||||
*
|
||||
* Stores render targets for a framebuffer object
|
||||
* and provides methods to query the render pass
|
||||
* format. Note that all render target views must
|
||||
* have the same size and number of array layers.
|
||||
*/
|
||||
class DxvkRenderTargets {
|
||||
|
||||
public:
|
||||
|
||||
DxvkRenderTargets();
|
||||
~DxvkRenderTargets();
|
||||
|
||||
/**
|
||||
* \brief Retrieves color target
|
||||
*
|
||||
* \param [in] id Color attachment ID
|
||||
* \returns Render target view
|
||||
*/
|
||||
Rc<DxvkImageView> getColorTarget(uint32_t id) const {
|
||||
return m_colorTargets.at(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Retrieves depth-stencil target
|
||||
* \returns Depth-stencil target view
|
||||
*/
|
||||
Rc<DxvkImageView> getDepthTarget() const {
|
||||
return m_depthTarget;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Sets color target
|
||||
*
|
||||
* \param [in] id Color attachment ID
|
||||
* \param [in] view Render target view
|
||||
*/
|
||||
void setColorTarget(uint32_t id, const Rc<DxvkImageView>& view) {
|
||||
m_colorTargets.at(id) = view;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Sets depth-stencil target
|
||||
* \param [in] view Depth-stencil target view
|
||||
*/
|
||||
void setDepthTarget(const Rc<DxvkImageView>& view) {
|
||||
m_depthTarget = view;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Render pass format
|
||||
*
|
||||
* Computes the render pass format based on
|
||||
* the color and depth-stencil attachments.
|
||||
* \returns Render pass format
|
||||
*/
|
||||
DxvkRenderPassFormat renderPassFormat() const;
|
||||
|
||||
/**
|
||||
* \brief Creates attachment list
|
||||
* \returns Framebuffer attachment list
|
||||
*/
|
||||
std::vector<VkImageView> getAttachments() const;
|
||||
|
||||
/**
|
||||
* \brief Framebuffer size
|
||||
*
|
||||
* The width, height and layers
|
||||
* of the attached render targets.
|
||||
* \returns Framebuffer size
|
||||
*/
|
||||
DxvkFramebufferSize getImageSize() const;
|
||||
|
||||
private:
|
||||
|
||||
std::array<Rc<DxvkImageView>, MaxNumColorTargets> m_colorTargets;
|
||||
Rc<DxvkImageView> m_depthTarget;
|
||||
|
||||
DxvkFramebufferSize renderTargetSize(
|
||||
const Rc<DxvkImageView>& renderTarget) const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief DXVK framebuffer
|
||||
*
|
||||
* A framebuffer either stores a set of image views
|
||||
* that will be used as render targets, or in case
|
||||
* no render targets are being used, fixed viewport
|
||||
* dimensions.
|
||||
*/
|
||||
class DxvkFramebuffer : public DxvkResource {
|
||||
|
||||
public:
|
||||
|
||||
DxvkFramebuffer(
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
const Rc<DxvkRenderPass>& renderPass,
|
||||
const DxvkRenderTargets& renderTargets);
|
||||
~DxvkFramebuffer();
|
||||
|
||||
/**
|
||||
* \brief Framebuffer handle
|
||||
* \returns Framebuffer handle
|
||||
*/
|
||||
VkFramebuffer handle() const {
|
||||
return m_framebuffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Render pass handle
|
||||
* \returns Render pass handle
|
||||
*/
|
||||
VkRenderPass renderPass() const {
|
||||
return m_renderPass->handle();
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Framebuffer size
|
||||
* \returns Framebuffer size
|
||||
*/
|
||||
DxvkFramebufferSize size() const {
|
||||
return m_framebufferSize;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
Rc<DxvkRenderPass> m_renderPass;
|
||||
DxvkRenderTargets m_renderTargets;
|
||||
DxvkFramebufferSize m_framebufferSize;
|
||||
VkFramebuffer m_framebuffer;
|
||||
|
||||
};
|
||||
|
||||
}
|
34
src/dxvk/dxvk_hash.h
Normal file
34
src/dxvk/dxvk_hash.h
Normal file
@ -0,0 +1,34 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
struct DxvkHash {
|
||||
template<typename T>
|
||||
size_t operator () (const T& object) const {
|
||||
return object.hash();
|
||||
}
|
||||
};
|
||||
|
||||
class DxvkHashState {
|
||||
|
||||
public:
|
||||
|
||||
void add(size_t hash) {
|
||||
m_value ^= hash + 0x9e3779b9
|
||||
+ (m_value << 6)
|
||||
+ (m_value >> 2);
|
||||
}
|
||||
|
||||
operator size_t () const {
|
||||
return m_value;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
size_t m_value = 0;
|
||||
|
||||
};
|
||||
|
||||
}
|
66
src/dxvk/dxvk_image.cpp
Normal file
66
src/dxvk/dxvk_image.cpp
Normal file
@ -0,0 +1,66 @@
|
||||
#include "dxvk_image.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
// DxvkImage::DxvkImage(
|
||||
// const Rc<vk::DeviceFn>& vkd,
|
||||
// const DxvkImageCreateInfo& info,
|
||||
// DxvkMemory&& memory)
|
||||
// : m_vkd(vkd), m_info(info), m_memory(std::move(memory)) {
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
DxvkImage::DxvkImage(
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
const DxvkImageCreateInfo& info,
|
||||
VkImage image)
|
||||
: m_vkd(vkd), m_info(info), m_image(image) { }
|
||||
|
||||
|
||||
DxvkImage::~DxvkImage() {
|
||||
// This is a bit of a hack to determine whether
|
||||
// the image is implementation-handled or not
|
||||
if (m_memory.memory() != VK_NULL_HANDLE)
|
||||
m_vkd->vkDestroyImage(m_vkd->device(), m_image, nullptr);
|
||||
}
|
||||
|
||||
|
||||
DxvkImageView::DxvkImageView(
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
const Rc<DxvkImage>& image,
|
||||
const DxvkImageViewCreateInfo& info)
|
||||
: m_vkd(vkd), m_image(image), m_info(info) {
|
||||
VkComponentMapping componentMapping;
|
||||
componentMapping.r = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
componentMapping.g = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
componentMapping.b = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
componentMapping.a = VK_COMPONENT_SWIZZLE_IDENTITY;
|
||||
|
||||
VkImageSubresourceRange subresourceRange;
|
||||
subresourceRange.aspectMask = info.aspect;
|
||||
subresourceRange.baseMipLevel = info.minLevel;
|
||||
subresourceRange.levelCount = info.numLevels;
|
||||
subresourceRange.baseArrayLayer = info.minLayer;
|
||||
subresourceRange.layerCount = info.numLayers;
|
||||
|
||||
VkImageViewCreateInfo viewInfo;
|
||||
viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
viewInfo.pNext = nullptr;
|
||||
viewInfo.flags = 0;
|
||||
viewInfo.image = image->handle();
|
||||
viewInfo.viewType = info.type;
|
||||
viewInfo.format = info.format;
|
||||
viewInfo.components = componentMapping;
|
||||
viewInfo.subresourceRange = subresourceRange;
|
||||
|
||||
if (m_vkd->vkCreateImageView(m_vkd->device(), &viewInfo, nullptr, &m_view) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkImageView::DxvkImageView: Failed to create image view");
|
||||
}
|
||||
|
||||
|
||||
DxvkImageView::~DxvkImageView() {
|
||||
m_vkd->vkDestroyImageView(m_vkd->device(), m_view, nullptr);
|
||||
}
|
||||
|
||||
}
|
151
src/dxvk/dxvk_image.h
Normal file
151
src/dxvk/dxvk_image.h
Normal file
@ -0,0 +1,151 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_memory.h"
|
||||
#include "dxvk_resource.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
struct DxvkImageCreateInfo {
|
||||
VkImageType type;
|
||||
VkFormat format;
|
||||
VkSampleCountFlagBits sampleCount;
|
||||
VkExtent3D extent;
|
||||
uint32_t numLayers;
|
||||
uint32_t mipLevels;
|
||||
VkImageUsageFlags usage;
|
||||
VkImageTiling tiling;
|
||||
};
|
||||
|
||||
struct DxvkImageViewCreateInfo {
|
||||
VkImageViewType type;
|
||||
VkFormat format;
|
||||
VkImageAspectFlags aspect;
|
||||
uint32_t minLevel;
|
||||
uint32_t numLevels;
|
||||
uint32_t minLayer;
|
||||
uint32_t numLayers;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief DXVK image
|
||||
*/
|
||||
class DxvkImage : public DxvkResource {
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* \brief Creates a new image
|
||||
*
|
||||
* \param [in] vkd Vulkan device functions
|
||||
* \param [in] info Image properties
|
||||
* \param [in] memory Image memory
|
||||
*/
|
||||
// DxvkImage(
|
||||
// const Rc<vk::DeviceFn>& vkd,
|
||||
// const DxvkImageCreateInfo& info,
|
||||
// DxvkMemory&& memory);
|
||||
|
||||
/**
|
||||
* \brief Creates image object from existing image
|
||||
*
|
||||
* This can be used to create an image object for
|
||||
* an implementation-managed image. Make sure to
|
||||
* provide the correct image properties, since
|
||||
* otherwise some image operations may fail.
|
||||
*/
|
||||
DxvkImage(
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
const DxvkImageCreateInfo& info,
|
||||
VkImage image);
|
||||
|
||||
/**
|
||||
* \brief Destroys image
|
||||
*
|
||||
* If this is an implementation-managed image,
|
||||
* this will not destroy the Vulkan image.
|
||||
*/
|
||||
~DxvkImage();
|
||||
|
||||
/**
|
||||
* \brief Image handle
|
||||
*
|
||||
* Internal use only.
|
||||
* \returns Image handle
|
||||
*/
|
||||
VkImage handle() const {
|
||||
return m_image;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Image properties
|
||||
*
|
||||
* The image create info structure.
|
||||
* \returns Image properties
|
||||
*/
|
||||
const DxvkImageCreateInfo& info() const {
|
||||
return m_info;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
DxvkImageCreateInfo m_info;
|
||||
DxvkMemory m_memory;
|
||||
VkImage m_image;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief DXVK image view
|
||||
*/
|
||||
class DxvkImageView : public DxvkResource {
|
||||
|
||||
public:
|
||||
|
||||
DxvkImageView(
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
const Rc<DxvkImage>& image,
|
||||
const DxvkImageViewCreateInfo& info);
|
||||
|
||||
~DxvkImageView();
|
||||
|
||||
/**
|
||||
* \brief Image view handle
|
||||
*
|
||||
* Internal use only.
|
||||
* \returns Image view handle
|
||||
*/
|
||||
VkImageView handle() const {
|
||||
return m_view;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Image view properties
|
||||
* \returns Image view properties
|
||||
*/
|
||||
const DxvkImageViewCreateInfo& info() const {
|
||||
return m_info;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Image properties
|
||||
* \returns Image properties
|
||||
*/
|
||||
const DxvkImageCreateInfo& imageInfo() const {
|
||||
return m_image->info();
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
Rc<DxvkImage> m_image;
|
||||
|
||||
DxvkImageViewCreateInfo m_info;
|
||||
VkImageView m_view;
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
10
src/dxvk/dxvk_include.h
Normal file
10
src/dxvk/dxvk_include.h
Normal file
@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#include "../util/util_error.h"
|
||||
#include "../util/util_string.h"
|
||||
|
||||
#include "../util/rc/util_rc.h"
|
||||
#include "../util/rc/util_rc_ptr.h"
|
||||
|
||||
#include "./vulkan/dxvk_vulkan_extensions.h"
|
||||
#include "./vulkan/dxvk_vulkan_loader.h"
|
108
src/dxvk/dxvk_instance.cpp
Normal file
108
src/dxvk/dxvk_instance.cpp
Normal file
@ -0,0 +1,108 @@
|
||||
#include "dxvk_instance.h"
|
||||
#include "dxvk_main.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkInstance::DxvkInstance()
|
||||
: m_vkl(new vk::LibraryFn()),
|
||||
m_vki(new vk::InstanceFn(this->createInstance())) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
DxvkInstance::~DxvkInstance() {
|
||||
m_vki->vkDestroyInstance(
|
||||
m_vki->instance(), nullptr);
|
||||
}
|
||||
|
||||
|
||||
std::vector<Rc<DxvkAdapter>> DxvkInstance::enumAdapters() {
|
||||
uint32_t numAdapters = 0;
|
||||
if (m_vki->vkEnumeratePhysicalDevices(m_vki->instance(), &numAdapters, nullptr) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkInstance::enumAdapters: Failed to enumerate adapters");
|
||||
|
||||
std::vector<VkPhysicalDevice> adapters(numAdapters);
|
||||
if (m_vki->vkEnumeratePhysicalDevices(m_vki->instance(), &numAdapters, adapters.data()) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkInstance::enumAdapters: Failed to enumerate adapters");
|
||||
|
||||
std::vector<Rc<DxvkAdapter>> result;
|
||||
for (uint32_t i = 0; i < numAdapters; i++)
|
||||
result.push_back(new DxvkAdapter(this, adapters[i]));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
VkInstance DxvkInstance::createInstance() {
|
||||
auto enabledLayers = this->getLayers();
|
||||
auto enabledExtensions = this->getExtensions(enabledLayers);
|
||||
|
||||
VkApplicationInfo appInfo;
|
||||
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
|
||||
appInfo.pNext = nullptr;
|
||||
appInfo.pApplicationName = nullptr;
|
||||
appInfo.applicationVersion = 0;
|
||||
appInfo.pEngineName = "DXVK";
|
||||
appInfo.engineVersion = VK_MAKE_VERSION(0, 0, 1);
|
||||
appInfo.apiVersion = VK_MAKE_VERSION(1, 0, 47);
|
||||
|
||||
VkInstanceCreateInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.flags = 0;
|
||||
info.pApplicationInfo = &appInfo;
|
||||
info.enabledLayerCount = enabledLayers.count();
|
||||
info.ppEnabledLayerNames = enabledLayers.names();
|
||||
info.enabledExtensionCount = enabledExtensions.count();
|
||||
info.ppEnabledExtensionNames = enabledExtensions.names();
|
||||
|
||||
VkInstance result = VK_NULL_HANDLE;
|
||||
if (m_vkl->vkCreateInstance(&info, nullptr, &result) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkInstance::createInstance: Failed to create Vulkan instance");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
vk::NameList DxvkInstance::getLayers() {
|
||||
std::vector<const char*> layers = {
|
||||
"VK_LAYER_LUNARG_standard_validation"
|
||||
};
|
||||
|
||||
const vk::NameSet layersAvailable
|
||||
= vk::NameSet::enumerateInstanceLayers(*m_vkl);
|
||||
|
||||
vk::NameList layersEnabled;
|
||||
for (auto l : layers) {
|
||||
if (layersAvailable.supports(l))
|
||||
layersEnabled.add(l);
|
||||
}
|
||||
|
||||
return layersEnabled;
|
||||
}
|
||||
|
||||
|
||||
vk::NameList DxvkInstance::getExtensions(const vk::NameList& layers) {
|
||||
std::vector<const char*> extOptional = { };
|
||||
std::vector<const char*> extRequired = {
|
||||
VK_KHR_SURFACE_EXTENSION_NAME,
|
||||
VK_KHR_WIN32_SURFACE_EXTENSION_NAME,
|
||||
};
|
||||
|
||||
const vk::NameSet extensionsAvailable
|
||||
= vk::NameSet::enumerateInstanceExtensions(*m_vkl, layers);
|
||||
vk::NameList extensionsEnabled;
|
||||
|
||||
for (auto e : extOptional) {
|
||||
if (extensionsAvailable.supports(e))
|
||||
extensionsEnabled.add(e);
|
||||
}
|
||||
|
||||
for (auto e : extRequired) {
|
||||
if (!extensionsAvailable.supports(e))
|
||||
throw DxvkError(str::format("DxvkInstance::getExtensions: Extension ", e, " not supported"));
|
||||
extensionsEnabled.add(e);
|
||||
}
|
||||
|
||||
return extensionsEnabled;
|
||||
}
|
||||
|
||||
}
|
56
src/dxvk/dxvk_instance.h
Normal file
56
src/dxvk/dxvk_instance.h
Normal file
@ -0,0 +1,56 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_adapter.h"
|
||||
#include "dxvk_device.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief DXVK instance
|
||||
*
|
||||
* Manages a Vulkan instance and stores a list
|
||||
* of adapters. This also provides methods for
|
||||
* device creation.
|
||||
*/
|
||||
class DxvkInstance : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
DxvkInstance();
|
||||
~DxvkInstance();
|
||||
|
||||
/**
|
||||
* \brief Vulkan instance functions
|
||||
* \returns Vulkan instance functions
|
||||
*/
|
||||
Rc<vk::InstanceFn> vki() const {
|
||||
return m_vki;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Vulkan instance handle
|
||||
* \returns The instance handle
|
||||
*/
|
||||
VkInstance handle() {
|
||||
return m_vki->instance();
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Retrieves a list of adapters
|
||||
* \returns List of adapter objects
|
||||
*/
|
||||
std::vector<Rc<DxvkAdapter>> enumAdapters();
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::LibraryFn> m_vkl;
|
||||
Rc<vk::InstanceFn> m_vki;
|
||||
|
||||
VkInstance createInstance();
|
||||
|
||||
vk::NameList getLayers();
|
||||
vk::NameList getExtensions(const vk::NameList& layers);
|
||||
|
||||
};
|
||||
|
||||
}
|
21
src/dxvk/dxvk_lifetime.cpp
Normal file
21
src/dxvk/dxvk_lifetime.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
#include "dxvk_lifetime.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkLifetimeTracker:: DxvkLifetimeTracker() { }
|
||||
DxvkLifetimeTracker::~DxvkLifetimeTracker() { }
|
||||
|
||||
|
||||
void DxvkLifetimeTracker::trackResource(const Rc<DxvkResource>& rc) {
|
||||
if (m_resources.insert(rc).second)
|
||||
rc->incUseCount();
|
||||
}
|
||||
|
||||
|
||||
void DxvkLifetimeTracker::reset() {
|
||||
for (auto i = m_resources.cbegin(); i != m_resources.cend(); i++)
|
||||
(*i)->decUseCount();
|
||||
m_resources.clear();
|
||||
}
|
||||
|
||||
}
|
45
src/dxvk/dxvk_lifetime.h
Normal file
45
src/dxvk/dxvk_lifetime.h
Normal file
@ -0,0 +1,45 @@
|
||||
#pragma once
|
||||
|
||||
#include <unordered_set>
|
||||
|
||||
#include "dxvk_resource.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief DXVK lifetime tracker
|
||||
*
|
||||
* Maintains references to a set of resources. This is
|
||||
* used to guarantee that resources are not destroyed
|
||||
* or otherwise accessed in an unsafe manner until the
|
||||
* device has finished using them.
|
||||
*/
|
||||
class DxvkLifetimeTracker {
|
||||
|
||||
public:
|
||||
|
||||
DxvkLifetimeTracker();
|
||||
~DxvkLifetimeTracker();
|
||||
|
||||
/**
|
||||
* \brief Adds a resource to track
|
||||
* \param [in] rc The resource to track
|
||||
*/
|
||||
void trackResource(
|
||||
const Rc<DxvkResource>& rc);
|
||||
|
||||
/**
|
||||
* \brief Resets the command list
|
||||
*
|
||||
* Called automatically by the device when
|
||||
* the command list has completed execution.
|
||||
*/
|
||||
void reset();
|
||||
|
||||
private:
|
||||
|
||||
std::unordered_set<Rc<DxvkResource>, RcHash<DxvkResource>> m_resources;
|
||||
|
||||
};
|
||||
|
||||
}
|
11
src/dxvk/dxvk_main.cpp
Normal file
11
src/dxvk/dxvk_main.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "dxvk_main.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
Log g_logger("dxvk.log");
|
||||
|
||||
void log(const std::string& message) {
|
||||
g_logger.log(message);
|
||||
}
|
||||
|
||||
}
|
14
src/dxvk/dxvk_main.h
Normal file
14
src/dxvk/dxvk_main.h
Normal file
@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include "../util/log/log.h"
|
||||
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief Adds a message to the global DXVK log
|
||||
* \param [in] message Log message
|
||||
*/
|
||||
void log(const std::string& message);
|
||||
|
||||
}
|
112
src/dxvk/dxvk_memory.cpp
Normal file
112
src/dxvk/dxvk_memory.cpp
Normal file
@ -0,0 +1,112 @@
|
||||
#include "dxvk_memory.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkMemory::DxvkMemory() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
DxvkMemory::DxvkMemory(
|
||||
DxvkMemoryAllocator* alloc,
|
||||
VkDeviceMemory memory,
|
||||
void* mapPtr)
|
||||
: m_alloc (alloc),
|
||||
m_memory(memory),
|
||||
m_mapPtr(mapPtr) { }
|
||||
|
||||
|
||||
DxvkMemory::DxvkMemory(DxvkMemory&& other)
|
||||
: m_alloc (other.m_alloc),
|
||||
m_memory(other.m_memory),
|
||||
m_mapPtr(other.m_mapPtr) {
|
||||
other.m_alloc = nullptr;
|
||||
other.m_memory = VK_NULL_HANDLE;
|
||||
other.m_mapPtr = nullptr;
|
||||
}
|
||||
|
||||
|
||||
DxvkMemory& DxvkMemory::operator = (DxvkMemory&& other) {
|
||||
this->m_alloc = other.m_alloc;
|
||||
this->m_memory = other.m_memory;
|
||||
this->m_mapPtr = other.m_mapPtr;
|
||||
other.m_alloc = nullptr;
|
||||
other.m_memory = VK_NULL_HANDLE;
|
||||
other.m_mapPtr = nullptr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
DxvkMemory::~DxvkMemory() {
|
||||
if (m_memory != VK_NULL_HANDLE)
|
||||
m_alloc->freeMemory(m_memory);
|
||||
}
|
||||
|
||||
|
||||
DxvkMemoryAllocator::DxvkMemoryAllocator(
|
||||
const Rc<DxvkAdapter>& adapter,
|
||||
const Rc<vk::DeviceFn>& vkd)
|
||||
: m_vkd(vkd), m_memProps(adapter->memoryProperties()) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
DxvkMemoryAllocator::~DxvkMemoryAllocator() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
DxvkMemory DxvkMemoryAllocator::alloc(
|
||||
const VkMemoryRequirements& req,
|
||||
const VkMemoryPropertyFlags flags) {
|
||||
|
||||
VkDeviceMemory memory = VK_NULL_HANDLE;
|
||||
void* mapPtr = nullptr;
|
||||
|
||||
for (uint32_t i = 0; i < m_memProps.memoryTypeCount; i++) {
|
||||
const bool supported = (req.memoryTypeBits & (1u << i)) != 0;
|
||||
const bool adequate = (m_memProps.memoryTypes[i].propertyFlags & flags) == flags;
|
||||
|
||||
if (supported && adequate) {
|
||||
memory = this->allocMemory(req.size, i);
|
||||
|
||||
if (memory != VK_NULL_HANDLE)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (memory == VK_NULL_HANDLE)
|
||||
throw DxvkError("DxvkMemoryAllocator::alloc: Failed to allocate memory");
|
||||
|
||||
if (flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {
|
||||
if (m_vkd->vkMapMemory(m_vkd->device(), memory,
|
||||
0, VK_WHOLE_SIZE, 0, &mapPtr) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkMemoryAllocator::alloc: Failed to map memory");
|
||||
}
|
||||
|
||||
return DxvkMemory(this, memory, mapPtr);
|
||||
}
|
||||
|
||||
|
||||
VkDeviceMemory DxvkMemoryAllocator::allocMemory(
|
||||
VkDeviceSize blockSize, uint32_t memoryType) {
|
||||
|
||||
VkMemoryAllocateInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.allocationSize = blockSize;
|
||||
info.memoryTypeIndex = memoryType;
|
||||
|
||||
VkDeviceMemory memory = VK_NULL_HANDLE;
|
||||
if (m_vkd->vkAllocateMemory(m_vkd->device(),
|
||||
&info, nullptr, &memory) != VK_SUCCESS)
|
||||
return VK_NULL_HANDLE;
|
||||
return memory;
|
||||
}
|
||||
|
||||
|
||||
void DxvkMemoryAllocator::freeMemory(VkDeviceMemory memory) {
|
||||
m_vkd->vkFreeMemory(m_vkd->device(), memory, nullptr);
|
||||
}
|
||||
|
||||
}
|
105
src/dxvk/dxvk_memory.h
Normal file
105
src/dxvk/dxvk_memory.h
Normal file
@ -0,0 +1,105 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_adapter.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
class DxvkMemoryAllocator;
|
||||
|
||||
|
||||
/**
|
||||
* \brief Memory slice
|
||||
*/
|
||||
class DxvkMemory {
|
||||
|
||||
public:
|
||||
|
||||
DxvkMemory();
|
||||
DxvkMemory(
|
||||
DxvkMemoryAllocator* alloc,
|
||||
VkDeviceMemory memory,
|
||||
void* mapPtr);
|
||||
DxvkMemory (DxvkMemory&& other);
|
||||
DxvkMemory& operator = (DxvkMemory&& other);
|
||||
~DxvkMemory();
|
||||
|
||||
/**
|
||||
* \brief Memory object
|
||||
*
|
||||
* This information is required when
|
||||
* binding memory to Vulkan objects.
|
||||
* \returns Memory object
|
||||
*/
|
||||
VkDeviceMemory memory() const {
|
||||
return m_memory;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Offset from memory object
|
||||
*
|
||||
* This information is required when
|
||||
* binding memory to Vulkan objects.
|
||||
* \returns Offset from memory object
|
||||
*/
|
||||
VkDeviceSize offset() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Pointer to mapped data
|
||||
* \returns Pointer to mapped data
|
||||
*/
|
||||
void* mapPtr() const {
|
||||
return m_mapPtr;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
DxvkMemoryAllocator* m_alloc = nullptr;
|
||||
VkDeviceMemory m_memory = VK_NULL_HANDLE;
|
||||
void* m_mapPtr = nullptr;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief Memory allocator
|
||||
*
|
||||
* Allocates device memory for Vulkan resources.
|
||||
* Memory objects will be destroyed automatically.
|
||||
*/
|
||||
class DxvkMemoryAllocator {
|
||||
friend class DxvkMemory;
|
||||
public:
|
||||
|
||||
DxvkMemoryAllocator(
|
||||
const Rc<DxvkAdapter>& adapter,
|
||||
const Rc<vk::DeviceFn>& vkd);
|
||||
~DxvkMemoryAllocator();
|
||||
|
||||
/**
|
||||
* \brief Allocates device memory
|
||||
*
|
||||
* \param [in] req Memory requirements
|
||||
* \param [in] flats Memory type flags
|
||||
* \returns Allocated memory slice
|
||||
*/
|
||||
DxvkMemory alloc(
|
||||
const VkMemoryRequirements& req,
|
||||
const VkMemoryPropertyFlags flags);
|
||||
|
||||
private:
|
||||
|
||||
const Rc<vk::DeviceFn> m_vkd;
|
||||
const VkPhysicalDeviceMemoryProperties m_memProps;
|
||||
|
||||
VkDeviceMemory allocMemory(
|
||||
VkDeviceSize blockSize,
|
||||
uint32_t memoryType);
|
||||
|
||||
void freeMemory(
|
||||
VkDeviceMemory memory);
|
||||
|
||||
};
|
||||
|
||||
}
|
166
src/dxvk/dxvk_renderpass.cpp
Normal file
166
src/dxvk/dxvk_renderpass.cpp
Normal file
@ -0,0 +1,166 @@
|
||||
#include "dxvk_renderpass.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkRenderPassFormat::DxvkRenderPassFormat() {
|
||||
for (uint32_t i = 0; i < MaxNumColorTargets; i++)
|
||||
m_color.at(i) = VK_FORMAT_UNDEFINED;
|
||||
m_depth = VK_FORMAT_UNDEFINED;
|
||||
m_samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
}
|
||||
|
||||
|
||||
size_t DxvkRenderPassFormat::hash() const {
|
||||
DxvkHashState result;
|
||||
std::hash<VkFormat> fhash;
|
||||
std::hash<VkSampleCountFlagBits> shash;
|
||||
|
||||
for (uint32_t i = 0; i < MaxNumColorTargets; i++)
|
||||
result.add(fhash(m_color.at(i)));
|
||||
|
||||
result.add(fhash(m_depth));
|
||||
result.add(shash(m_samples));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
bool DxvkRenderPassFormat::operator == (const DxvkRenderPassFormat& other) const {
|
||||
bool equal = m_depth == other.m_depth
|
||||
&& m_samples == other.m_samples;
|
||||
for (uint32_t i = 0; i < MaxNumColorTargets && !equal; i++)
|
||||
equal = m_color.at(i) == other.m_color.at(i);
|
||||
return equal;
|
||||
}
|
||||
|
||||
|
||||
bool DxvkRenderPassFormat::operator != (const DxvkRenderPassFormat& other) const {
|
||||
return !this->operator == (other);
|
||||
}
|
||||
|
||||
|
||||
DxvkRenderPass::DxvkRenderPass(
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
const DxvkRenderPassFormat& fmt,
|
||||
VkImageLayout initialLayout,
|
||||
VkImageLayout finalLayout)
|
||||
: m_vkd(vkd), m_format(fmt) {
|
||||
std::vector<VkAttachmentDescription> attachments;
|
||||
|
||||
VkAttachmentReference depthRef;
|
||||
std::array<VkAttachmentReference, MaxNumColorTargets> colorRef;
|
||||
|
||||
// Render passes may not require the previous
|
||||
// contents of the attachments to be preserved.
|
||||
VkAttachmentLoadOp loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
|
||||
VkAttachmentStoreOp storeOp = VK_ATTACHMENT_STORE_OP_STORE;
|
||||
|
||||
if (initialLayout == VK_IMAGE_LAYOUT_UNDEFINED)
|
||||
loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
||||
|
||||
if (fmt.getDepthFormat() != VK_FORMAT_UNDEFINED) {
|
||||
VkAttachmentDescription desc;
|
||||
desc.flags = 0;
|
||||
desc.format = fmt.getDepthFormat();
|
||||
desc.samples = fmt.getSampleCount();
|
||||
desc.loadOp = loadOp;
|
||||
desc.storeOp = storeOp;
|
||||
desc.stencilLoadOp = loadOp;
|
||||
desc.stencilStoreOp = storeOp;
|
||||
desc.initialLayout = initialLayout;
|
||||
desc.finalLayout = finalLayout;
|
||||
|
||||
depthRef.attachment = attachments.size();
|
||||
depthRef.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
|
||||
attachments.push_back(desc);
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < MaxNumColorTargets; i++) {
|
||||
colorRef.at(i).attachment = VK_ATTACHMENT_UNUSED;
|
||||
colorRef.at(i).layout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
|
||||
if (fmt.getColorFormat(i) != VK_FORMAT_UNDEFINED) {
|
||||
VkAttachmentDescription desc;
|
||||
desc.flags = 0;
|
||||
desc.format = fmt.getColorFormat(i);
|
||||
desc.samples = fmt.getSampleCount();
|
||||
desc.loadOp = loadOp;
|
||||
desc.storeOp = storeOp;
|
||||
desc.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
||||
desc.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
||||
desc.initialLayout = initialLayout;
|
||||
desc.finalLayout = finalLayout;
|
||||
|
||||
colorRef.at(i).attachment = attachments.size();
|
||||
colorRef.at(i).layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
|
||||
attachments.push_back(desc);
|
||||
}
|
||||
}
|
||||
|
||||
VkSubpassDescription subpass;
|
||||
subpass.flags = 0;
|
||||
subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
|
||||
subpass.inputAttachmentCount = 0;
|
||||
subpass.pInputAttachments = nullptr;
|
||||
subpass.colorAttachmentCount = colorRef.size();
|
||||
subpass.pColorAttachments = colorRef.data();
|
||||
subpass.pResolveAttachments = nullptr;
|
||||
subpass.pDepthStencilAttachment = fmt.getDepthFormat() != VK_FORMAT_UNDEFINED ? &depthRef : nullptr;
|
||||
subpass.preserveAttachmentCount = 0;
|
||||
subpass.pPreserveAttachments = nullptr;
|
||||
|
||||
VkRenderPassCreateInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.flags = 0;
|
||||
info.attachmentCount = attachments.size();
|
||||
info.pAttachments = attachments.data();
|
||||
info.subpassCount = 1;
|
||||
info.pSubpasses = &subpass;
|
||||
info.dependencyCount = 0;
|
||||
info.pDependencies = nullptr;
|
||||
|
||||
if (m_vkd->vkCreateRenderPass(m_vkd->device(), &info, nullptr, &m_renderPass) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkRenderPass::DxvkRenderPass: Failed to create render pass object");
|
||||
}
|
||||
|
||||
|
||||
DxvkRenderPass::~DxvkRenderPass() {
|
||||
m_vkd->vkDestroyRenderPass(
|
||||
m_vkd->device(), m_renderPass, nullptr);
|
||||
}
|
||||
|
||||
|
||||
DxvkRenderPassPool::DxvkRenderPassPool(const Rc<vk::DeviceFn>& vkd)
|
||||
: m_vkd(vkd) { }
|
||||
|
||||
|
||||
DxvkRenderPassPool::~DxvkRenderPassPool() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkRenderPass> DxvkRenderPassPool::getRenderPass(
|
||||
const DxvkRenderPassFormat& fmt) {
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
|
||||
auto rp = m_renderPasses.find(fmt);
|
||||
|
||||
if (rp != m_renderPasses.end())
|
||||
return rp->second;
|
||||
|
||||
auto result = this->createRenderPass(fmt);
|
||||
m_renderPasses.insert(std::make_pair(fmt, result));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkRenderPass> DxvkRenderPassPool::createRenderPass(
|
||||
const DxvkRenderPassFormat& fmt) {
|
||||
return new DxvkRenderPass(m_vkd, fmt,
|
||||
VK_IMAGE_LAYOUT_GENERAL,
|
||||
VK_IMAGE_LAYOUT_GENERAL);
|
||||
}
|
||||
|
||||
}
|
175
src/dxvk/dxvk_renderpass.h
Normal file
175
src/dxvk/dxvk_renderpass.h
Normal file
@ -0,0 +1,175 @@
|
||||
#pragma once
|
||||
|
||||
#include <mutex>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "dxvk_hash.h"
|
||||
#include "dxvk_include.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
constexpr uint32_t MaxNumColorTargets = 8;
|
||||
|
||||
/**
|
||||
* \brief Render pass format
|
||||
*
|
||||
* Stores the formats of all render targets
|
||||
* that are used by a framebuffer object.
|
||||
*/
|
||||
class DxvkRenderPassFormat {
|
||||
|
||||
public:
|
||||
|
||||
DxvkRenderPassFormat();
|
||||
|
||||
/**
|
||||
* \brief Retrieves color target format
|
||||
*
|
||||
* If the color target has not been defined,
|
||||
* this will return \c VK_FORMAT_UNDEFINED.
|
||||
* \param [in] id Color target index
|
||||
* \returns Color target format
|
||||
*/
|
||||
VkFormat getColorFormat(uint32_t id) const {
|
||||
return m_color.at(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Retrieves depth-stencil format
|
||||
*
|
||||
* If the color target has not been defined,
|
||||
* this will return \c VK_FORMAT_UNDEFINED.
|
||||
*/
|
||||
VkFormat getDepthFormat() const {
|
||||
return m_depth;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Retrieves sample count
|
||||
*
|
||||
* If no sample count has been explicitly specitied,
|
||||
* this will return \c VK_SAMPLE_COUNT_1_BIT.
|
||||
* \returns Sample count
|
||||
*/
|
||||
VkSampleCountFlagBits getSampleCount() const {
|
||||
return m_samples;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Sets color target format
|
||||
*
|
||||
* \param [in] id Color target index
|
||||
* \param [in] fmt Color target format
|
||||
*/
|
||||
void setColorFormat(uint32_t id, VkFormat fmt) {
|
||||
m_color.at(id) = fmt;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Sets depth-stencil format
|
||||
* \param [in] fmt Depth-stencil format
|
||||
*/
|
||||
void setDepthFormat(VkFormat fmt) {
|
||||
m_depth = fmt;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Sets sample count
|
||||
* \param [in] samples Sample count
|
||||
*/
|
||||
void setSampleCount(VkSampleCountFlagBits samples) {
|
||||
m_samples = samples;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Computes the hash
|
||||
* \returns Resulting hash
|
||||
*/
|
||||
size_t hash() const;
|
||||
|
||||
bool operator == (const DxvkRenderPassFormat& other) const;
|
||||
bool operator != (const DxvkRenderPassFormat& other) const;
|
||||
|
||||
private:
|
||||
|
||||
std::array<VkFormat, MaxNumColorTargets> m_color;
|
||||
VkFormat m_depth;
|
||||
VkSampleCountFlagBits m_samples;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief DXVK render pass
|
||||
*
|
||||
* Render pass objects are used internally to identify render
|
||||
* target formats and
|
||||
*/
|
||||
class DxvkRenderPass : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
DxvkRenderPass(
|
||||
const Rc<vk::DeviceFn>& vkd,
|
||||
const DxvkRenderPassFormat& fmt,
|
||||
VkImageLayout initialLayout,
|
||||
VkImageLayout finalLayout);
|
||||
~DxvkRenderPass();
|
||||
|
||||
/**
|
||||
* \brief Render pass handle
|
||||
*
|
||||
* Internal use only.
|
||||
* \returns Render pass handle
|
||||
*/
|
||||
VkRenderPass handle() const {
|
||||
return m_renderPass;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
DxvkRenderPassFormat m_format;
|
||||
VkRenderPass m_renderPass;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief Render pass pool
|
||||
*
|
||||
* Thread-safe class that manages the render pass
|
||||
* objects that are used within an application.
|
||||
*/
|
||||
class DxvkRenderPassPool {
|
||||
|
||||
public:
|
||||
|
||||
DxvkRenderPassPool(const Rc<vk::DeviceFn>& vkd);
|
||||
~DxvkRenderPassPool();
|
||||
|
||||
/**
|
||||
* \brief Retrieves a render pass object
|
||||
*
|
||||
* \param [in] fmt Render target formats
|
||||
* \returns Compatible render pass object
|
||||
*/
|
||||
Rc<DxvkRenderPass> getRenderPass(
|
||||
const DxvkRenderPassFormat& fmt);
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
|
||||
std::mutex m_mutex;
|
||||
std::unordered_map<
|
||||
DxvkRenderPassFormat,
|
||||
Rc<DxvkRenderPass>,
|
||||
DxvkHash> m_renderPasses;
|
||||
|
||||
Rc<DxvkRenderPass> createRenderPass(
|
||||
const DxvkRenderPassFormat& fmt);
|
||||
|
||||
};
|
||||
|
||||
}
|
9
src/dxvk/dxvk_resource.cpp
Normal file
9
src/dxvk/dxvk_resource.cpp
Normal file
@ -0,0 +1,9 @@
|
||||
#include "dxvk_resource.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkResource::~DxvkResource() {
|
||||
|
||||
}
|
||||
|
||||
}
|
33
src/dxvk/dxvk_resource.h
Normal file
33
src/dxvk/dxvk_resource.h
Normal file
@ -0,0 +1,33 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_include.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief DXVK resource
|
||||
*
|
||||
* Keeps track of whether the resource is currently in use
|
||||
* by the GPU. As soon as a command that uses the resource
|
||||
* is recorded, it will be marked as 'in use'.
|
||||
*/
|
||||
class DxvkResource : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
virtual ~DxvkResource();
|
||||
|
||||
bool isInUse() const {
|
||||
return m_useCount != 0;
|
||||
}
|
||||
|
||||
void incUseCount() { m_useCount += 1; }
|
||||
void decUseCount() { m_useCount -= 1; }
|
||||
|
||||
private:
|
||||
|
||||
std::atomic<uint32_t> m_useCount = { 0u };
|
||||
|
||||
};
|
||||
|
||||
}
|
150
src/dxvk/dxvk_surface.cpp
Normal file
150
src/dxvk/dxvk_surface.cpp
Normal file
@ -0,0 +1,150 @@
|
||||
#include "dxvk_surface.h"
|
||||
|
||||
#include "../util/util_math.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkSurface::DxvkSurface(
|
||||
const Rc<DxvkAdapter>& adapter,
|
||||
HINSTANCE instance,
|
||||
HWND window)
|
||||
: m_adapter (adapter),
|
||||
m_vki (adapter->vki()),
|
||||
m_handle (createSurface(instance, window)),
|
||||
m_surfaceFormats (getSurfaceFormats()),
|
||||
m_presentModes (getPresentModes()) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
DxvkSurface::~DxvkSurface() {
|
||||
m_vki->vkDestroySurfaceKHR(
|
||||
m_vki->instance(), m_handle, nullptr);
|
||||
}
|
||||
|
||||
|
||||
VkSurfaceCapabilitiesKHR DxvkSurface::getSurfaceCapabilities() const {
|
||||
VkSurfaceCapabilitiesKHR surfaceCaps;
|
||||
if (m_vki->vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
|
||||
m_adapter->handle(), m_handle, &surfaceCaps) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkSurface::getSurfaceCapabilities: Failed to query surface capabilities");
|
||||
return surfaceCaps;
|
||||
}
|
||||
|
||||
|
||||
VkSurfaceFormatKHR DxvkSurface::pickSurfaceFormat(VkSurfaceFormatKHR preferred) const {
|
||||
// If the implementation allows us to freely choose
|
||||
// the format, we'll just use the preferred format.
|
||||
if (m_surfaceFormats.size() == 1 && m_surfaceFormats.at(0).format == VK_FORMAT_UNDEFINED)
|
||||
return preferred;
|
||||
|
||||
// If the preferred format is explicitly listed in
|
||||
// the array of supported surface formats, use it
|
||||
for (auto fmt : m_surfaceFormats) {
|
||||
if (fmt.format == preferred.format
|
||||
&& fmt.colorSpace == preferred.colorSpace)
|
||||
return fmt;
|
||||
}
|
||||
|
||||
// Otherwise, fall back to the first format
|
||||
return m_surfaceFormats.at(0);
|
||||
}
|
||||
|
||||
|
||||
VkPresentModeKHR DxvkSurface::pickPresentMode(VkPresentModeKHR preferred) const {
|
||||
for (auto mode : m_presentModes) {
|
||||
if (mode == preferred)
|
||||
return mode;
|
||||
}
|
||||
|
||||
// This mode is guaranteed to be available
|
||||
return VK_PRESENT_MODE_FIFO_KHR;
|
||||
}
|
||||
|
||||
|
||||
uint32_t DxvkSurface::pickImageCount(
|
||||
const VkSurfaceCapabilitiesKHR& caps,
|
||||
VkPresentModeKHR mode) const {
|
||||
uint32_t count = caps.minImageCount;
|
||||
|
||||
if (mode == VK_PRESENT_MODE_MAILBOX_KHR
|
||||
|| mode == VK_PRESENT_MODE_FIFO_KHR)
|
||||
count += 1;
|
||||
|
||||
if (count > caps.maxImageCount && caps.maxImageCount != 0)
|
||||
count = caps.maxImageCount;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
VkExtent2D DxvkSurface::pickImageExtent(
|
||||
const VkSurfaceCapabilitiesKHR& caps,
|
||||
VkExtent2D preferred) const {
|
||||
if (caps.currentExtent.width != std::numeric_limits<uint32_t>::max())
|
||||
return caps.currentExtent;
|
||||
|
||||
VkExtent2D actual;
|
||||
actual.width = clamp(preferred.width, caps.minImageExtent.width, caps.maxImageExtent.width);
|
||||
actual.height = clamp(preferred.height, caps.minImageExtent.height, caps.maxImageExtent.height);
|
||||
return actual;
|
||||
}
|
||||
|
||||
|
||||
VkSurfaceKHR DxvkSurface::createSurface(HINSTANCE instance, HWND window) {
|
||||
VkWin32SurfaceCreateInfoKHR info;
|
||||
info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
|
||||
info.pNext = nullptr;
|
||||
info.flags = 0;
|
||||
info.hinstance = instance;
|
||||
info.hwnd = window;
|
||||
|
||||
VkSurfaceKHR surface = VK_NULL_HANDLE;
|
||||
if (m_vki->vkCreateWin32SurfaceKHR(m_vki->instance(), &info, nullptr, &surface) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkSurface::createSurface: Failed to create win32 surface");
|
||||
|
||||
VkBool32 supportStatus = VK_FALSE;
|
||||
|
||||
if (m_vki->vkGetPhysicalDeviceSurfaceSupportKHR(m_adapter->handle(),
|
||||
m_adapter->presentQueueFamily(), surface, &supportStatus) != VK_SUCCESS) {
|
||||
m_vki->vkDestroySurfaceKHR(m_vki->instance(), surface, nullptr);
|
||||
throw DxvkError("DxvkSurface::createSurface: Failed to query surface support");
|
||||
}
|
||||
|
||||
if (!supportStatus) {
|
||||
m_vki->vkDestroySurfaceKHR(m_vki->instance(), surface, nullptr);
|
||||
throw DxvkError("DxvkSurface::createSurface: Surface not supported by device");
|
||||
}
|
||||
|
||||
return surface;
|
||||
}
|
||||
|
||||
|
||||
std::vector<VkSurfaceFormatKHR> DxvkSurface::getSurfaceFormats() {
|
||||
uint32_t numFormats = 0;
|
||||
if (m_vki->vkGetPhysicalDeviceSurfaceFormatsKHR(
|
||||
m_adapter->handle(), m_handle, &numFormats, nullptr) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkSurface::getSurfaceFormats: Failed to query surface formats");
|
||||
|
||||
std::vector<VkSurfaceFormatKHR> formats(numFormats);
|
||||
if (m_vki->vkGetPhysicalDeviceSurfaceFormatsKHR(
|
||||
m_adapter->handle(), m_handle, &numFormats, formats.data()) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkSurface::getSurfaceFormats: Failed to query surface formats");
|
||||
return formats;
|
||||
}
|
||||
|
||||
|
||||
std::vector<VkPresentModeKHR> DxvkSurface::getPresentModes() {
|
||||
uint32_t numModes = 0;
|
||||
if (m_vki->vkGetPhysicalDeviceSurfacePresentModesKHR(
|
||||
m_adapter->handle(), m_handle, &numModes, nullptr) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkSurface::getPresentModes: Failed to query present modes");
|
||||
|
||||
std::vector<VkPresentModeKHR> modes(numModes);
|
||||
if (m_vki->vkGetPhysicalDeviceSurfacePresentModesKHR(
|
||||
m_adapter->handle(), m_handle, &numModes, modes.data()) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkSurface::getPresentModes: Failed to query present modes");
|
||||
return modes;
|
||||
}
|
||||
|
||||
}
|
98
src/dxvk/dxvk_surface.h
Normal file
98
src/dxvk/dxvk_surface.h
Normal file
@ -0,0 +1,98 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_adapter.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief DXVK surface
|
||||
*
|
||||
* Vulkan representation of a drawable window surface. This
|
||||
* class provides methods to query the current dimension of
|
||||
* the surface as well as format support queries.
|
||||
*/
|
||||
class DxvkSurface : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
DxvkSurface(
|
||||
const Rc<DxvkAdapter>& adapter,
|
||||
HINSTANCE instance,
|
||||
HWND window);
|
||||
~DxvkSurface();
|
||||
|
||||
/**
|
||||
* \brief Vulkan surface handle
|
||||
* \returns The surface handle
|
||||
*/
|
||||
VkSurfaceKHR handle() const {
|
||||
return m_handle;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Queries surface capabilities
|
||||
*
|
||||
* Retrieves up-to-date information about the surface,
|
||||
* such as the bounds of the swapchain images.
|
||||
* \returns Current surface properties
|
||||
*/
|
||||
VkSurfaceCapabilitiesKHR getSurfaceCapabilities() const;
|
||||
|
||||
/**
|
||||
* \brief Picks a suitable surface format
|
||||
*
|
||||
* \param [in] preferred Preferred surface format
|
||||
* \returns The actual surface format
|
||||
*/
|
||||
VkSurfaceFormatKHR pickSurfaceFormat(
|
||||
VkSurfaceFormatKHR preferred) const;
|
||||
|
||||
/**
|
||||
* \brief Picks a supported present mode
|
||||
*
|
||||
* \param [in] preferred The preferred present mode
|
||||
* \returns The actual present mode
|
||||
*/
|
||||
VkPresentModeKHR pickPresentMode(
|
||||
VkPresentModeKHR preferred) const;
|
||||
|
||||
/**
|
||||
* \brief Picks a suitable image count for a swap chain
|
||||
*
|
||||
* \param [in] caps Surface capabilities
|
||||
* \param [in] mode The present mode
|
||||
* \returns Suitable image count
|
||||
*/
|
||||
uint32_t pickImageCount(
|
||||
const VkSurfaceCapabilitiesKHR& caps,
|
||||
VkPresentModeKHR mode) const;
|
||||
|
||||
/**
|
||||
* \brief Picks a suitable image size for a swap chain
|
||||
*
|
||||
* \param [in] caps Surface capabilities
|
||||
* \param [in] preferred Preferred image size
|
||||
* \returns Selected image size
|
||||
*/
|
||||
VkExtent2D pickImageExtent(
|
||||
const VkSurfaceCapabilitiesKHR& caps,
|
||||
VkExtent2D preferred) const;
|
||||
|
||||
private:
|
||||
|
||||
Rc<DxvkAdapter> m_adapter;
|
||||
Rc<vk::InstanceFn> m_vki;
|
||||
|
||||
VkSurfaceKHR m_handle;
|
||||
|
||||
std::vector<VkSurfaceFormatKHR> m_surfaceFormats;
|
||||
std::vector<VkPresentModeKHR> m_presentModes;
|
||||
|
||||
VkSurfaceKHR createSurface(HINSTANCE instance, HWND window);
|
||||
|
||||
std::vector<VkSurfaceFormatKHR> getSurfaceFormats();
|
||||
std::vector<VkPresentModeKHR> getPresentModes();
|
||||
|
||||
};
|
||||
|
||||
}
|
185
src/dxvk/dxvk_swapchain.cpp
Normal file
185
src/dxvk/dxvk_swapchain.cpp
Normal file
@ -0,0 +1,185 @@
|
||||
#include "dxvk_main.h"
|
||||
|
||||
#include "dxvk_device.h"
|
||||
#include "dxvk_framebuffer.h"
|
||||
#include "dxvk_surface.h"
|
||||
#include "dxvk_swapchain.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkSwapchain::DxvkSwapchain(
|
||||
const Rc<DxvkDevice>& device,
|
||||
const Rc<DxvkSurface>& surface,
|
||||
const DxvkSwapchainProperties& properties,
|
||||
VkQueue queue)
|
||||
: m_device (device),
|
||||
m_vkd (device->vkd()),
|
||||
m_surface (surface),
|
||||
m_queue (queue),
|
||||
m_properties(properties) {
|
||||
this->recreateSwapchain();
|
||||
}
|
||||
|
||||
|
||||
DxvkSwapchain::~DxvkSwapchain() {
|
||||
m_device->waitForIdle();
|
||||
m_vkd->vkDestroySwapchainKHR(
|
||||
m_vkd->device(), m_handle, nullptr);
|
||||
}
|
||||
|
||||
|
||||
Rc<DxvkFramebuffer> DxvkSwapchain::getFramebuffer(
|
||||
const Rc<DxvkSemaphore>& wakeSync) {
|
||||
VkResult status = this->acquireNextImage(wakeSync);
|
||||
|
||||
if (status == VK_ERROR_OUT_OF_DATE_KHR) {
|
||||
this->recreateSwapchain();
|
||||
status = this->acquireNextImage(wakeSync);
|
||||
}
|
||||
|
||||
if (status != VK_SUCCESS
|
||||
&& status != VK_SUBOPTIMAL_KHR)
|
||||
throw DxvkError("DxvkSwapchain::getFramebuffer: Failed to acquire image");
|
||||
|
||||
return m_framebuffers.at(m_imageIndex);
|
||||
}
|
||||
|
||||
|
||||
void DxvkSwapchain::present(const Rc<DxvkSemaphore>& waitSync) {
|
||||
const VkSemaphore waitSemaphore = waitSync->handle();
|
||||
|
||||
VkPresentInfoKHR info;
|
||||
info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
||||
info.pNext = nullptr;
|
||||
info.waitSemaphoreCount = 1;
|
||||
info.pWaitSemaphores = &waitSemaphore;
|
||||
info.swapchainCount = 1;
|
||||
info.pSwapchains = &m_handle;
|
||||
info.pImageIndices = &m_imageIndex;
|
||||
info.pResults = nullptr;
|
||||
|
||||
VkResult status = m_vkd->vkQueuePresentKHR(m_queue, &info);
|
||||
|
||||
if (status != VK_SUCCESS
|
||||
&& status != VK_SUBOPTIMAL_KHR
|
||||
&& status != VK_ERROR_OUT_OF_DATE_KHR)
|
||||
throw DxvkError("DxvkSwapchain::present: Failed to present image");
|
||||
}
|
||||
|
||||
|
||||
void DxvkSwapchain::changeProperties(
|
||||
const DxvkSwapchainProperties& props) {
|
||||
m_properties = props;
|
||||
this->recreateSwapchain();
|
||||
}
|
||||
|
||||
|
||||
VkResult DxvkSwapchain::acquireNextImage(
|
||||
const Rc<DxvkSemaphore>& wakeSync) {
|
||||
return m_vkd->vkAcquireNextImageKHR(
|
||||
m_vkd->device(), m_handle,
|
||||
std::numeric_limits<uint64_t>::max(),
|
||||
wakeSync->handle(),
|
||||
VK_NULL_HANDLE,
|
||||
&m_imageIndex);
|
||||
}
|
||||
|
||||
|
||||
void DxvkSwapchain::recreateSwapchain() {
|
||||
VkSwapchainKHR oldSwapchain = m_handle;
|
||||
|
||||
// Wait until we can be certain that none of our
|
||||
// resources are still in use by the device.
|
||||
m_device->waitForIdle();
|
||||
|
||||
// Recreate the actual swapchain object
|
||||
auto caps = m_surface->getSurfaceCapabilities();
|
||||
auto fmt = m_surface->pickSurfaceFormat(m_properties.preferredSurfaceFormat);
|
||||
auto mode = m_surface->pickPresentMode (m_properties.preferredPresentMode);
|
||||
|
||||
VkSwapchainCreateInfoKHR swapInfo;
|
||||
swapInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
|
||||
swapInfo.pNext = nullptr;
|
||||
swapInfo.flags = 0;
|
||||
swapInfo.surface = m_surface->handle();
|
||||
swapInfo.minImageCount = m_surface->pickImageCount(caps, mode);
|
||||
swapInfo.imageFormat = fmt.format;
|
||||
swapInfo.imageColorSpace = fmt.colorSpace;
|
||||
swapInfo.imageExtent = m_surface->pickImageExtent(caps, m_properties.preferredBufferSize);
|
||||
swapInfo.imageArrayLayers = 1;
|
||||
swapInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
|
||||
swapInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
swapInfo.queueFamilyIndexCount = 0;
|
||||
swapInfo.pQueueFamilyIndices = nullptr;
|
||||
swapInfo.preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
swapInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
|
||||
swapInfo.presentMode = mode;
|
||||
swapInfo.clipped = VK_TRUE;
|
||||
swapInfo.oldSwapchain = oldSwapchain;
|
||||
|
||||
if (m_vkd->vkCreateSwapchainKHR(m_vkd->device(), &swapInfo, nullptr, &m_handle) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkSwapchain::recreateSwapchain: Failed to recreate swap chain");
|
||||
|
||||
// Destroy previous swapchain object
|
||||
m_vkd->vkDestroySwapchainKHR(
|
||||
m_vkd->device(), oldSwapchain, nullptr);
|
||||
|
||||
// Create the render pass object
|
||||
DxvkRenderPassFormat renderTargetFormat;
|
||||
renderTargetFormat.setColorFormat(0, fmt.format);
|
||||
|
||||
m_renderPass = new DxvkRenderPass(
|
||||
m_vkd, renderTargetFormat,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR);
|
||||
|
||||
// Retrieve swap images
|
||||
auto swapImages = this->retrieveSwapImages();
|
||||
m_framebuffers.resize(swapImages.size());
|
||||
|
||||
for (size_t i = 0; i < swapImages.size(); i++) {
|
||||
DxvkImageCreateInfo imageInfo;
|
||||
imageInfo.type = VK_IMAGE_TYPE_2D;
|
||||
imageInfo.format = fmt.format;
|
||||
imageInfo.sampleCount = VK_SAMPLE_COUNT_1_BIT;
|
||||
imageInfo.extent.width = swapInfo.imageExtent.width;
|
||||
imageInfo.extent.height = swapInfo.imageExtent.height;
|
||||
imageInfo.extent.depth = 1;
|
||||
imageInfo.numLayers = swapInfo.imageArrayLayers;
|
||||
imageInfo.mipLevels = 1;
|
||||
imageInfo.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
|
||||
imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||
|
||||
DxvkImageViewCreateInfo viewInfo;
|
||||
viewInfo.type = VK_IMAGE_VIEW_TYPE_2D;
|
||||
viewInfo.format = fmt.format;
|
||||
viewInfo.aspect = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
viewInfo.minLevel = 0;
|
||||
viewInfo.numLevels = 1;
|
||||
viewInfo.minLayer = 0;
|
||||
viewInfo.numLayers = swapInfo.imageArrayLayers;
|
||||
|
||||
Rc<DxvkImage> image = new DxvkImage(m_vkd, imageInfo, swapImages.at(i));
|
||||
Rc<DxvkImageView> iview = m_device->createImageView(image, viewInfo);
|
||||
|
||||
DxvkRenderTargets renderTargets;
|
||||
renderTargets.setColorTarget(0, iview);
|
||||
|
||||
m_framebuffers.at(i) = new DxvkFramebuffer(
|
||||
m_vkd, m_renderPass, renderTargets);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::vector<VkImage> DxvkSwapchain::retrieveSwapImages() {
|
||||
uint32_t imageCount = 0;
|
||||
if (m_vkd->vkGetSwapchainImagesKHR(m_vkd->device(), m_handle, &imageCount, nullptr) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkSwapchain::recreateSwapchain: Failed to retrieve swap chain images");
|
||||
|
||||
std::vector<VkImage> images(imageCount);
|
||||
if (m_vkd->vkGetSwapchainImagesKHR(m_vkd->device(), m_handle, &imageCount, images.data()) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkSwapchain::recreateSwapchain: Failed to retrieve swap chain images");
|
||||
return images;
|
||||
}
|
||||
|
||||
}
|
96
src/dxvk/dxvk_swapchain.h
Normal file
96
src/dxvk/dxvk_swapchain.h
Normal file
@ -0,0 +1,96 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_framebuffer.h"
|
||||
#include "dxvk_sync.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
class DxvkDevice;
|
||||
class DxvkFramebuffer;
|
||||
class DxvkSurface;
|
||||
|
||||
/**
|
||||
* \brief
|
||||
*/
|
||||
struct DxvkSwapchainProperties {
|
||||
VkSurfaceFormatKHR preferredSurfaceFormat;
|
||||
VkPresentModeKHR preferredPresentMode;
|
||||
VkExtent2D preferredBufferSize;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief DXVK swapchain
|
||||
*
|
||||
* Manages a Vulkan swapchain object.
|
||||
*/
|
||||
class DxvkSwapchain : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
DxvkSwapchain(
|
||||
const Rc<DxvkDevice>& device,
|
||||
const Rc<DxvkSurface>& surface,
|
||||
const DxvkSwapchainProperties& properties,
|
||||
VkQueue queue);
|
||||
~DxvkSwapchain();
|
||||
|
||||
/**
|
||||
* \brief Retrieves the framebuffer for the current frame
|
||||
*
|
||||
* If necessary, this will automatically recreate the
|
||||
* underlying swapchain object and framebuffer objects.
|
||||
* \param [in] wakeSync Semaphore to signal
|
||||
* \returns The framebuffer object
|
||||
*/
|
||||
Rc<DxvkFramebuffer> getFramebuffer(
|
||||
const Rc<DxvkSemaphore>& wakeSync);
|
||||
|
||||
/**
|
||||
* \brief Presents the current framebuffer
|
||||
*
|
||||
* This may actually fail to present an image. If that is the
|
||||
* case, the surface contents will be undefined for this frame
|
||||
* and the swapchain object will be recreated.
|
||||
* \param [in] waitSync Semaphore to wait on
|
||||
*/
|
||||
void present(
|
||||
const Rc<DxvkSemaphore>& waitSync);
|
||||
|
||||
/**
|
||||
* \brief Changes swapchain properties
|
||||
*
|
||||
* This must not be called between \ref getFramebuffer
|
||||
* and \ref present as this method may recreate the swap
|
||||
* chain and framebuffer objects immediately.
|
||||
* \param [in] props New swapchain properties
|
||||
*/
|
||||
void changeProperties(
|
||||
const DxvkSwapchainProperties& props);
|
||||
|
||||
private:
|
||||
|
||||
Rc<DxvkDevice> m_device;
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
Rc<DxvkSurface> m_surface;
|
||||
|
||||
VkQueue m_queue;
|
||||
|
||||
DxvkSwapchainProperties m_properties;
|
||||
VkSwapchainKHR m_handle = VK_NULL_HANDLE;
|
||||
uint32_t m_imageIndex = 0;
|
||||
uint32_t m_frameIndex = 0;
|
||||
|
||||
Rc<DxvkRenderPass> m_renderPass;
|
||||
std::vector<Rc<DxvkFramebuffer>> m_framebuffers;
|
||||
|
||||
VkResult acquireNextImage(
|
||||
const Rc<DxvkSemaphore>& wakeSync);
|
||||
|
||||
void recreateSwapchain();
|
||||
|
||||
std::vector<VkImage> retrieveSwapImages();
|
||||
|
||||
};
|
||||
|
||||
}
|
57
src/dxvk/dxvk_sync.cpp
Normal file
57
src/dxvk/dxvk_sync.cpp
Normal file
@ -0,0 +1,57 @@
|
||||
#include "dxvk_sync.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxvkSemaphore::DxvkSemaphore(
|
||||
const Rc<vk::DeviceFn>& vkd)
|
||||
: m_vkd(vkd) {
|
||||
VkSemaphoreCreateInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.flags = 0;
|
||||
|
||||
if (m_vkd->vkCreateSemaphore(m_vkd->device(), &info, nullptr, &m_semaphore) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkSemaphore::DxvkSemaphore: Failed to create semaphore");
|
||||
}
|
||||
|
||||
|
||||
DxvkSemaphore::~DxvkSemaphore() {
|
||||
m_vkd->vkDestroySemaphore(
|
||||
m_vkd->device(), m_semaphore, nullptr);
|
||||
}
|
||||
|
||||
|
||||
DxvkFence::DxvkFence(const Rc<vk::DeviceFn>& vkd)
|
||||
: m_vkd(vkd) {
|
||||
VkFenceCreateInfo info;
|
||||
info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
|
||||
info.pNext = nullptr;
|
||||
info.flags = 0;
|
||||
|
||||
if (m_vkd->vkCreateFence(m_vkd->device(), &info, nullptr, &m_fence) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkFence::DxvkFence: Failed to create fence");
|
||||
}
|
||||
|
||||
|
||||
DxvkFence::~DxvkFence() {
|
||||
m_vkd->vkDestroyFence(
|
||||
m_vkd->device(), m_fence, nullptr);
|
||||
}
|
||||
|
||||
|
||||
bool DxvkFence::wait(uint64_t timeout) const {
|
||||
VkResult status = m_vkd->vkWaitForFences(
|
||||
m_vkd->device(), 1, &m_fence, VK_FALSE, timeout);
|
||||
|
||||
if (status == VK_SUCCESS) return true;
|
||||
if (status == VK_TIMEOUT) return false;
|
||||
throw DxvkError("DxvkFence::wait: Failed to wait for fence");
|
||||
}
|
||||
|
||||
|
||||
void DxvkFence::reset() {
|
||||
if (m_vkd->vkResetFences(m_vkd->device(), 1, &m_fence) != VK_SUCCESS)
|
||||
throw DxvkError("DxvkFence::reset: Failed to reset fence");
|
||||
}
|
||||
|
||||
}
|
89
src/dxvk/dxvk_sync.h
Normal file
89
src/dxvk/dxvk_sync.h
Normal file
@ -0,0 +1,89 @@
|
||||
#pragma once
|
||||
|
||||
#include "dxvk_resource.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief Semaphore object
|
||||
*
|
||||
* This is merely an abstraction of Vulkan's semaphores.
|
||||
* They are only used internally by \ref DxvkSwapchain
|
||||
* in order to synchronize the presentation engine with
|
||||
* command buffer submissions.
|
||||
*/
|
||||
class DxvkSemaphore : public DxvkResource {
|
||||
|
||||
public:
|
||||
|
||||
DxvkSemaphore(const Rc<vk::DeviceFn>& vkd);
|
||||
~DxvkSemaphore();
|
||||
|
||||
/**
|
||||
* \brief Semaphore handle
|
||||
*
|
||||
* Internal use only.
|
||||
* \returns Semaphore handle
|
||||
*/
|
||||
VkSemaphore handle() const {
|
||||
return m_semaphore;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
VkSemaphore m_semaphore;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief Fence object
|
||||
*
|
||||
* This is merely an abstraction of Vulkan's fences. Client
|
||||
* APIs that support fence operations may use them directly.
|
||||
* Other than that, they are used internally to keep track
|
||||
* of GPU resource usage.
|
||||
*/
|
||||
class DxvkFence : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
DxvkFence(const Rc<vk::DeviceFn>& vkd);
|
||||
~DxvkFence();
|
||||
|
||||
/**
|
||||
* \brief Fence handle
|
||||
*
|
||||
* Internal use only.
|
||||
* \returns Fence handle
|
||||
*/
|
||||
VkFence handle() const {
|
||||
return m_fence;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Waits for fence to be signaled
|
||||
*
|
||||
* \param [in] timeout Amount of time to wait
|
||||
* \returns \c true if the fence has been signaled,
|
||||
* \c false if a timeout occured.
|
||||
*/
|
||||
bool wait(uint64_t timeout) const;
|
||||
|
||||
/**
|
||||
* \brief Resets the fence
|
||||
*
|
||||
* Transitions the fence into the unsignaled state,
|
||||
* which means that the fence may be submitted again.
|
||||
*/
|
||||
void reset();
|
||||
|
||||
private:
|
||||
|
||||
Rc<vk::DeviceFn> m_vkd;
|
||||
VkFence m_fence;
|
||||
|
||||
};
|
||||
|
||||
}
|
32
src/dxvk/meson.build
Normal file
32
src/dxvk/meson.build
Normal file
@ -0,0 +1,32 @@
|
||||
dxvk_src = files([
|
||||
'dxvk_adapter.cpp',
|
||||
'dxvk_cmdlist.cpp',
|
||||
'dxvk_context.cpp',
|
||||
'dxvk_context_state.cpp',
|
||||
'dxvk_device.cpp',
|
||||
'dxvk_framebuffer.cpp',
|
||||
'dxvk_image.cpp',
|
||||
'dxvk_instance.cpp',
|
||||
'dxvk_lifetime.cpp',
|
||||
'dxvk_main.cpp',
|
||||
'dxvk_memory.cpp',
|
||||
'dxvk_renderpass.cpp',
|
||||
'dxvk_resource.cpp',
|
||||
'dxvk_surface.cpp',
|
||||
'dxvk_swapchain.cpp',
|
||||
'dxvk_sync.cpp',
|
||||
|
||||
'vulkan/dxvk_vulkan_extensions.cpp',
|
||||
'vulkan/dxvk_vulkan_loader.cpp',
|
||||
])
|
||||
|
||||
thread_dep = dependency('threads')
|
||||
|
||||
dxvk_lib = static_library('dxvk', dxvk_src,
|
||||
link_with : [ util_lib ],
|
||||
dependencies : [ thread_dep, lib_vulkan, lib_sdl2 ],
|
||||
include_directories : [ dxvk_include_path ])
|
||||
|
||||
dxvk_dep = declare_dependency(
|
||||
link_with : [ dxvk_lib ],
|
||||
include_directories : [ dxvk_include_path, include_directories('.') ])
|
71
src/dxvk/vulkan/dxvk_vulkan_extensions.cpp
Normal file
71
src/dxvk/vulkan/dxvk_vulkan_extensions.cpp
Normal file
@ -0,0 +1,71 @@
|
||||
#include "dxvk_vulkan_extensions.h"
|
||||
|
||||
namespace dxvk::vk {
|
||||
|
||||
bool NameSet::supports(const char* name) const {
|
||||
return m_names.find(name) != m_names.end();
|
||||
}
|
||||
|
||||
|
||||
NameSet NameSet::enumerateInstanceLayers(const LibraryFn& vkl) {
|
||||
uint32_t layerCount = 0;
|
||||
if (vkl.vkEnumerateInstanceLayerProperties(&layerCount, nullptr) != VK_SUCCESS)
|
||||
throw DxvkError(str::format("LayerSet::enumerateInstanceLayers: Failed to query instance layers"));
|
||||
|
||||
std::vector<VkLayerProperties> layers(layerCount);
|
||||
if (vkl.vkEnumerateInstanceLayerProperties(&layerCount, layers.data()) != VK_SUCCESS)
|
||||
throw DxvkError(str::format("LayerSet::enumerateInstanceLayers: Failed to query instance layers"));
|
||||
|
||||
NameSet result;
|
||||
for (const auto& layer : layers)
|
||||
result.m_names.insert(layer.layerName);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
NameSet NameSet::enumerateInstanceExtensions(
|
||||
const LibraryFn& vkl,
|
||||
const NameList& layers) {
|
||||
NameSet result;
|
||||
result.addInstanceLayerExtensions(vkl, nullptr);
|
||||
|
||||
for (size_t i = 0; i < layers.count(); i++)
|
||||
result.addInstanceLayerExtensions(vkl, layers.name(i));
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
NameSet NameSet::enumerateDeviceExtensions(
|
||||
const InstanceFn& vki,
|
||||
VkPhysicalDevice device) {
|
||||
uint32_t extCount = 0;
|
||||
if (vki.vkEnumerateDeviceExtensionProperties(device, nullptr, &extCount, nullptr) != VK_SUCCESS)
|
||||
throw DxvkError("ExtensionSet::addDeviceExtensions: Failed to query device extensions");
|
||||
|
||||
std::vector<VkExtensionProperties> extensions(extCount);
|
||||
if (vki.vkEnumerateDeviceExtensionProperties(device, nullptr, &extCount, extensions.data()) != VK_SUCCESS)
|
||||
throw DxvkError("ExtensionSet::addDeviceExtensions: Failed to query device extensions");
|
||||
|
||||
NameSet result;
|
||||
for (const auto& ext : extensions)
|
||||
result.m_names.insert(ext.extensionName);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
void NameSet::addInstanceLayerExtensions(
|
||||
const LibraryFn& vkl,
|
||||
const char* layer) {
|
||||
uint32_t extCount = 0;
|
||||
if (vkl.vkEnumerateInstanceExtensionProperties(layer, &extCount, nullptr) != VK_SUCCESS)
|
||||
throw DxvkError("ExtensionSet::addInstanceExtensions: Failed to query instance extensions");
|
||||
|
||||
std::vector<VkExtensionProperties> extensions(extCount);
|
||||
if (vkl.vkEnumerateInstanceExtensionProperties(layer, &extCount, extensions.data()) != VK_SUCCESS)
|
||||
throw DxvkError("ExtensionSet::addInstanceExtensions: Failed to query instance extensions");
|
||||
|
||||
for (const auto& ext : extensions)
|
||||
m_names.insert(ext.extensionName);
|
||||
}
|
||||
|
||||
}
|
103
src/dxvk/vulkan/dxvk_vulkan_extensions.h
Normal file
103
src/dxvk/vulkan/dxvk_vulkan_extensions.h
Normal file
@ -0,0 +1,103 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <unordered_set>
|
||||
|
||||
#include "dxvk_vulkan_loader.h"
|
||||
|
||||
#include "../../util/util_error.h"
|
||||
#include "../../util/util_string.h"
|
||||
|
||||
namespace dxvk::vk {
|
||||
|
||||
/**
|
||||
* \brief Name list
|
||||
*
|
||||
* Stores a list of extension or layer names.
|
||||
* Note that only name constants may be added
|
||||
* to a name list. Adding dynamically allocated
|
||||
* strings will result in udefined behaviour.
|
||||
*/
|
||||
class NameList {
|
||||
|
||||
public:
|
||||
|
||||
void add(const char* name) {
|
||||
m_list.push_back(name);
|
||||
}
|
||||
|
||||
auto name(size_t i) const {
|
||||
return m_list[i];
|
||||
}
|
||||
|
||||
auto names() const { return m_list.data(); }
|
||||
auto count() const { return m_list.size(); }
|
||||
|
||||
private:
|
||||
|
||||
std::vector<const char*> m_list;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief Name set
|
||||
*
|
||||
* Stores a set of supported layers or extensions and
|
||||
* provides methods to query their support status.
|
||||
*/
|
||||
class NameSet {
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* \brief Checks whether an extension or layer is supported
|
||||
*
|
||||
* \param [in] name The layer or extension name
|
||||
* \returns \c true if the entity is supported
|
||||
*/
|
||||
bool supports(const char* name) const;
|
||||
|
||||
/**
|
||||
* \brief Enumerates instance layers
|
||||
*
|
||||
* \param [in] vkl Vulkan library functions
|
||||
* \returns Available instance layers
|
||||
*/
|
||||
static NameSet enumerateInstanceLayers(
|
||||
const LibraryFn& vkl);
|
||||
|
||||
/**
|
||||
* \brief Enumerates instance extensions
|
||||
*
|
||||
* \param [in] vkl Vulkan library functions
|
||||
* \param [in] layers Enabled instance layers
|
||||
* \returns Available instance extensions
|
||||
*/
|
||||
static NameSet enumerateInstanceExtensions(
|
||||
const LibraryFn& vkl,
|
||||
const NameList& layers);
|
||||
|
||||
/**
|
||||
* \brief Enumerates device extensions
|
||||
*
|
||||
* \param [in] vki Vulkan instance functions
|
||||
* \param [in] device The physical device
|
||||
* \returns Available device extensions
|
||||
*/
|
||||
static NameSet enumerateDeviceExtensions(
|
||||
const InstanceFn& vki,
|
||||
VkPhysicalDevice device);
|
||||
|
||||
private:
|
||||
|
||||
std::unordered_set<std::string> m_names;
|
||||
|
||||
void addInstanceLayerExtensions(
|
||||
const LibraryFn& vkl,
|
||||
const char* layer);
|
||||
|
||||
};
|
||||
|
||||
}
|
43
src/dxvk/vulkan/dxvk_vulkan_loader.cpp
Normal file
43
src/dxvk/vulkan/dxvk_vulkan_loader.cpp
Normal file
@ -0,0 +1,43 @@
|
||||
#include "dxvk_vulkan_loader.h"
|
||||
|
||||
namespace dxvk::vk {
|
||||
|
||||
PFN_vkVoidFunction LibraryLoader::sym(const char* name) const {
|
||||
return ::vkGetInstanceProcAddr(nullptr, name);
|
||||
}
|
||||
|
||||
|
||||
InstanceLoader::InstanceLoader(VkInstance instance)
|
||||
: m_instance(instance) { }
|
||||
|
||||
|
||||
PFN_vkVoidFunction InstanceLoader::sym(const char* name) const {
|
||||
return ::vkGetInstanceProcAddr(m_instance, name);
|
||||
}
|
||||
|
||||
|
||||
DeviceLoader::DeviceLoader(VkInstance instance, VkDevice device)
|
||||
: m_getDeviceProcAddr(reinterpret_cast<PFN_vkGetDeviceProcAddr>(
|
||||
::vkGetInstanceProcAddr(instance, "vkGetDeviceProcAddr"))),
|
||||
m_device(device) { }
|
||||
|
||||
|
||||
PFN_vkVoidFunction DeviceLoader::sym(const char* name) const {
|
||||
return m_getDeviceProcAddr(m_device, name);
|
||||
}
|
||||
|
||||
|
||||
LibraryFn::LibraryFn() { }
|
||||
LibraryFn::~LibraryFn() { }
|
||||
|
||||
|
||||
InstanceFn::InstanceFn(VkInstance instance)
|
||||
: InstanceLoader(instance) { }
|
||||
InstanceFn::~InstanceFn() { }
|
||||
|
||||
|
||||
DeviceFn::DeviceFn(VkInstance instance, VkDevice device)
|
||||
: DeviceLoader(instance, device) { }
|
||||
DeviceFn::~DeviceFn() { }
|
||||
|
||||
}
|
267
src/dxvk/vulkan/dxvk_vulkan_loader.h
Normal file
267
src/dxvk/vulkan/dxvk_vulkan_loader.h
Normal file
@ -0,0 +1,267 @@
|
||||
#pragma once
|
||||
|
||||
#include "../../util/rc/util_rc.h"
|
||||
#include "../../util/rc/util_rc_ptr.h"
|
||||
|
||||
#include "dxvk_vulkan_loader_fn.h"
|
||||
|
||||
namespace dxvk::vk {
|
||||
|
||||
/**
|
||||
* \brief Vulkan library loader
|
||||
*
|
||||
* Provides methods to load Vulkan functions that
|
||||
* can be called before creating a instance.
|
||||
*/
|
||||
struct LibraryLoader : public RcObject {
|
||||
PFN_vkVoidFunction sym(const char* name) const;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief Vulkan instance loader
|
||||
*
|
||||
* Loads Vulkan functions that can be
|
||||
* called for a specific instance.
|
||||
*/
|
||||
struct InstanceLoader : public RcObject {
|
||||
InstanceLoader(VkInstance instance);
|
||||
PFN_vkVoidFunction sym(const char* name) const;
|
||||
VkInstance instance() const { return m_instance; }
|
||||
private:
|
||||
const VkInstance m_instance;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief Vulkan device loader
|
||||
*
|
||||
* Loads Vulkan functions for a
|
||||
* specific device.
|
||||
*/
|
||||
struct DeviceLoader : public RcObject {
|
||||
DeviceLoader(VkInstance instance, VkDevice device);
|
||||
PFN_vkVoidFunction sym(const char* name) const;
|
||||
VkDevice device() const { return m_device; }
|
||||
private:
|
||||
const PFN_vkGetDeviceProcAddr m_getDeviceProcAddr;
|
||||
const VkDevice m_device;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief Vulkan library functions
|
||||
*
|
||||
* Vulkan functions that are called before
|
||||
* creating an actual Vulkan instance.
|
||||
*/
|
||||
struct LibraryFn : LibraryLoader {
|
||||
LibraryFn();
|
||||
~LibraryFn();
|
||||
|
||||
VULKAN_FN(vkCreateInstance);
|
||||
VULKAN_FN(vkEnumerateInstanceLayerProperties);
|
||||
VULKAN_FN(vkEnumerateInstanceExtensionProperties);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief Vulkan instance functions
|
||||
*
|
||||
* Vulkan functions for a given instance that
|
||||
* are independent of any Vulkan devices.
|
||||
*/
|
||||
struct InstanceFn : InstanceLoader {
|
||||
InstanceFn(VkInstance instance);
|
||||
~InstanceFn();
|
||||
|
||||
VULKAN_FN(vkCreateDevice);
|
||||
VULKAN_FN(vkDestroyInstance);
|
||||
VULKAN_FN(vkEnumerateDeviceExtensionProperties);
|
||||
VULKAN_FN(vkEnumeratePhysicalDevices);
|
||||
VULKAN_FN(vkGetPhysicalDeviceFeatures);
|
||||
VULKAN_FN(vkGetPhysicalDeviceFormatProperties);
|
||||
VULKAN_FN(vkGetPhysicalDeviceImageFormatProperties);
|
||||
VULKAN_FN(vkGetPhysicalDeviceMemoryProperties);
|
||||
VULKAN_FN(vkGetPhysicalDeviceProperties);
|
||||
VULKAN_FN(vkGetPhysicalDeviceQueueFamilyProperties);
|
||||
VULKAN_FN(vkGetPhysicalDeviceSparseImageFormatProperties);
|
||||
|
||||
#ifdef VK_KHR_surface
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
VULKAN_FN(vkCreateXcbSurfaceKHR);
|
||||
VULKAN_FN(vkGetPhysicalDeviceXcbPresentationSupportKHR);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
VULKAN_FN(vkCreateXlibSurfaceKHR);
|
||||
VULKAN_FN(vkGetPhysicalDeviceXlibPresentationSupportKHR);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
VULKAN_FN(vkCreateWaylandSurfaceKHR);
|
||||
VULKAN_FN(vkGetPhysicalDeviceWaylandPresentationSupportKHR);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
VULKAN_FN(vkCreateWin32SurfaceKHR);
|
||||
VULKAN_FN(vkGetPhysicalDeviceWin32PresentationSupportKHR);
|
||||
#endif
|
||||
|
||||
VULKAN_FN(vkDestroySurfaceKHR);
|
||||
|
||||
VULKAN_FN(vkGetPhysicalDeviceSurfaceSupportKHR);
|
||||
VULKAN_FN(vkGetPhysicalDeviceSurfaceCapabilitiesKHR);
|
||||
VULKAN_FN(vkGetPhysicalDeviceSurfaceFormatsKHR);
|
||||
VULKAN_FN(vkGetPhysicalDeviceSurfacePresentModesKHR);
|
||||
#endif
|
||||
|
||||
#ifdef VK_EXT_debug_report
|
||||
VULKAN_FN(vkCreateDebugReportCallbackEXT);
|
||||
VULKAN_FN(vkDestroyDebugReportCallbackEXT);
|
||||
VULKAN_FN(vkDebugReportMessageEXT);
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief Vulkan device functions
|
||||
*
|
||||
* Vulkan functions for a specific Vulkan device.
|
||||
* This ensures that no slow dispatch code is executed.
|
||||
*/
|
||||
struct DeviceFn : DeviceLoader {
|
||||
DeviceFn(VkInstance instance, VkDevice device);
|
||||
~DeviceFn();
|
||||
|
||||
VULKAN_FN(vkDestroyDevice);
|
||||
VULKAN_FN(vkGetDeviceQueue);
|
||||
VULKAN_FN(vkQueueSubmit);
|
||||
VULKAN_FN(vkQueueWaitIdle);
|
||||
VULKAN_FN(vkDeviceWaitIdle);
|
||||
VULKAN_FN(vkAllocateMemory);
|
||||
VULKAN_FN(vkFreeMemory);
|
||||
VULKAN_FN(vkMapMemory);
|
||||
VULKAN_FN(vkUnmapMemory);
|
||||
VULKAN_FN(vkFlushMappedMemoryRanges);
|
||||
VULKAN_FN(vkInvalidateMappedMemoryRanges);
|
||||
VULKAN_FN(vkGetDeviceMemoryCommitment);
|
||||
VULKAN_FN(vkBindBufferMemory);
|
||||
VULKAN_FN(vkBindImageMemory);
|
||||
VULKAN_FN(vkGetBufferMemoryRequirements);
|
||||
VULKAN_FN(vkGetImageMemoryRequirements);
|
||||
VULKAN_FN(vkGetImageSparseMemoryRequirements);
|
||||
VULKAN_FN(vkQueueBindSparse);
|
||||
VULKAN_FN(vkCreateFence);
|
||||
VULKAN_FN(vkDestroyFence);
|
||||
VULKAN_FN(vkResetFences);
|
||||
VULKAN_FN(vkGetFenceStatus);
|
||||
VULKAN_FN(vkWaitForFences);
|
||||
VULKAN_FN(vkCreateSemaphore);
|
||||
VULKAN_FN(vkDestroySemaphore);
|
||||
VULKAN_FN(vkCreateEvent);
|
||||
VULKAN_FN(vkDestroyEvent);
|
||||
VULKAN_FN(vkGetEventStatus);
|
||||
VULKAN_FN(vkSetEvent);
|
||||
VULKAN_FN(vkResetEvent);
|
||||
VULKAN_FN(vkCreateQueryPool);
|
||||
VULKAN_FN(vkDestroyQueryPool);
|
||||
VULKAN_FN(vkGetQueryPoolResults);
|
||||
VULKAN_FN(vkCreateBuffer);
|
||||
VULKAN_FN(vkDestroyBuffer);
|
||||
VULKAN_FN(vkCreateBufferView);
|
||||
VULKAN_FN(vkDestroyBufferView);
|
||||
VULKAN_FN(vkCreateImage);
|
||||
VULKAN_FN(vkDestroyImage);
|
||||
VULKAN_FN(vkGetImageSubresourceLayout);
|
||||
VULKAN_FN(vkCreateImageView);
|
||||
VULKAN_FN(vkDestroyImageView);
|
||||
VULKAN_FN(vkCreateShaderModule);
|
||||
VULKAN_FN(vkDestroyShaderModule);
|
||||
VULKAN_FN(vkCreatePipelineCache);
|
||||
VULKAN_FN(vkDestroyPipelineCache);
|
||||
VULKAN_FN(vkGetPipelineCacheData);
|
||||
VULKAN_FN(vkMergePipelineCaches);
|
||||
VULKAN_FN(vkCreateGraphicsPipelines);
|
||||
VULKAN_FN(vkCreateComputePipelines);
|
||||
VULKAN_FN(vkDestroyPipeline);
|
||||
VULKAN_FN(vkCreatePipelineLayout);
|
||||
VULKAN_FN(vkDestroyPipelineLayout);
|
||||
VULKAN_FN(vkCreateSampler);
|
||||
VULKAN_FN(vkDestroySampler);
|
||||
VULKAN_FN(vkCreateDescriptorSetLayout);
|
||||
VULKAN_FN(vkDestroyDescriptorSetLayout);
|
||||
VULKAN_FN(vkCreateDescriptorPool);
|
||||
VULKAN_FN(vkDestroyDescriptorPool);
|
||||
VULKAN_FN(vkResetDescriptorPool);
|
||||
VULKAN_FN(vkAllocateDescriptorSets);
|
||||
VULKAN_FN(vkFreeDescriptorSets);
|
||||
VULKAN_FN(vkUpdateDescriptorSets);
|
||||
VULKAN_FN(vkCreateFramebuffer);
|
||||
VULKAN_FN(vkDestroyFramebuffer);
|
||||
VULKAN_FN(vkCreateRenderPass);
|
||||
VULKAN_FN(vkDestroyRenderPass);
|
||||
VULKAN_FN(vkGetRenderAreaGranularity);
|
||||
VULKAN_FN(vkCreateCommandPool);
|
||||
VULKAN_FN(vkDestroyCommandPool);
|
||||
VULKAN_FN(vkResetCommandPool);
|
||||
VULKAN_FN(vkAllocateCommandBuffers);
|
||||
VULKAN_FN(vkFreeCommandBuffers);
|
||||
VULKAN_FN(vkBeginCommandBuffer);
|
||||
VULKAN_FN(vkEndCommandBuffer);
|
||||
VULKAN_FN(vkResetCommandBuffer);
|
||||
VULKAN_FN(vkCmdBindPipeline);
|
||||
VULKAN_FN(vkCmdSetViewport);
|
||||
VULKAN_FN(vkCmdSetScissor);
|
||||
VULKAN_FN(vkCmdSetLineWidth);
|
||||
VULKAN_FN(vkCmdSetDepthBias);
|
||||
VULKAN_FN(vkCmdSetBlendConstants);
|
||||
VULKAN_FN(vkCmdSetDepthBounds);
|
||||
VULKAN_FN(vkCmdSetStencilCompareMask);
|
||||
VULKAN_FN(vkCmdSetStencilWriteMask);
|
||||
VULKAN_FN(vkCmdSetStencilReference);
|
||||
VULKAN_FN(vkCmdBindDescriptorSets);
|
||||
VULKAN_FN(vkCmdBindIndexBuffer);
|
||||
VULKAN_FN(vkCmdBindVertexBuffers);
|
||||
VULKAN_FN(vkCmdDraw);
|
||||
VULKAN_FN(vkCmdDrawIndexed);
|
||||
VULKAN_FN(vkCmdDrawIndirect);
|
||||
VULKAN_FN(vkCmdDrawIndexedIndirect);
|
||||
VULKAN_FN(vkCmdDispatch);
|
||||
VULKAN_FN(vkCmdDispatchIndirect);
|
||||
VULKAN_FN(vkCmdCopyBuffer);
|
||||
VULKAN_FN(vkCmdCopyImage);
|
||||
VULKAN_FN(vkCmdBlitImage);
|
||||
VULKAN_FN(vkCmdCopyBufferToImage);
|
||||
VULKAN_FN(vkCmdCopyImageToBuffer);
|
||||
VULKAN_FN(vkCmdUpdateBuffer);
|
||||
VULKAN_FN(vkCmdFillBuffer);
|
||||
VULKAN_FN(vkCmdClearColorImage);
|
||||
VULKAN_FN(vkCmdClearDepthStencilImage);
|
||||
VULKAN_FN(vkCmdClearAttachments);
|
||||
VULKAN_FN(vkCmdResolveImage);
|
||||
VULKAN_FN(vkCmdSetEvent);
|
||||
VULKAN_FN(vkCmdResetEvent);
|
||||
VULKAN_FN(vkCmdWaitEvents);
|
||||
VULKAN_FN(vkCmdPipelineBarrier);
|
||||
VULKAN_FN(vkCmdBeginQuery);
|
||||
VULKAN_FN(vkCmdEndQuery);
|
||||
VULKAN_FN(vkCmdResetQueryPool);
|
||||
VULKAN_FN(vkCmdWriteTimestamp);
|
||||
VULKAN_FN(vkCmdCopyQueryPoolResults);
|
||||
VULKAN_FN(vkCmdPushConstants);
|
||||
VULKAN_FN(vkCmdBeginRenderPass);
|
||||
VULKAN_FN(vkCmdNextSubpass);
|
||||
VULKAN_FN(vkCmdEndRenderPass);
|
||||
VULKAN_FN(vkCmdExecuteCommands);
|
||||
|
||||
#ifdef VK_KHR_swapchain
|
||||
VULKAN_FN(vkCreateSwapchainKHR);
|
||||
VULKAN_FN(vkDestroySwapchainKHR);
|
||||
VULKAN_FN(vkGetSwapchainImagesKHR);
|
||||
VULKAN_FN(vkAcquireNextImageKHR);
|
||||
VULKAN_FN(vkQueuePresentKHR);
|
||||
#endif
|
||||
};
|
||||
|
||||
}
|
48
src/dxvk/vulkan/dxvk_vulkan_loader_fn.h
Normal file
48
src/dxvk/vulkan/dxvk_vulkan_loader_fn.h
Normal file
@ -0,0 +1,48 @@
|
||||
#pragma once
|
||||
|
||||
#define VK_USE_PLATFORM_WIN32_KHR 1
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#define VULKAN_FN(name) \
|
||||
VulkanFn<::PFN_ ## name> name = sym(#name)
|
||||
|
||||
namespace dxvk::vk {
|
||||
|
||||
template<typename Fn>
|
||||
class VulkanFn;
|
||||
|
||||
/**
|
||||
* \brief Vulkan function
|
||||
*
|
||||
* Wraps an Vulkan function pointer and provides
|
||||
* a call operator using the correct types.
|
||||
*/
|
||||
template<typename Ret, typename... Args>
|
||||
class VulkanFn<Ret (VKAPI_PTR*)(Args...)> {
|
||||
using Fn = Ret (VKAPI_PTR*)(Args...);
|
||||
public:
|
||||
|
||||
VulkanFn() { }
|
||||
VulkanFn(Fn ptr)
|
||||
: m_fn(ptr) { }
|
||||
|
||||
VulkanFn(PFN_vkVoidFunction ptr)
|
||||
: m_fn(reinterpret_cast<Fn>(ptr)) { }
|
||||
|
||||
/**
|
||||
* \brief Invokes Vulkan function
|
||||
*
|
||||
* \param [in] args Arguments
|
||||
* \returns Function return value
|
||||
*/
|
||||
Ret operator () (Args... args) const {
|
||||
return (*m_fn)(args...);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Fn m_fn = nullptr;
|
||||
|
||||
};
|
||||
|
||||
}
|
2
src/meson.build
Normal file
2
src/meson.build
Normal file
@ -0,0 +1,2 @@
|
||||
subdir('util')
|
||||
subdir('dxvk')
|
26
src/util/log/log.cpp
Normal file
26
src/util/log/log.cpp
Normal file
@ -0,0 +1,26 @@
|
||||
#include "log.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
Log::Log(const std::string& filename)
|
||||
: m_stream(filename, std::ios_base::out | std::ios_base::trunc) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
Log::~Log() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Log::log(const std::string& message) {
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
|
||||
std::cerr << message << std::endl;
|
||||
std::cerr.flush();
|
||||
|
||||
m_stream << message << std::endl;
|
||||
m_stream.flush();
|
||||
}
|
||||
|
||||
}
|
40
src/util/log/log.h
Normal file
40
src/util/log/log.h
Normal file
@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
|
||||
#include "../rc/util_rc.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief Logger
|
||||
*
|
||||
* Logs messages generated by DXVK and
|
||||
* the client APIs using DXVK.
|
||||
*/
|
||||
class Log : public RcObject {
|
||||
|
||||
public:
|
||||
|
||||
Log(const std::string& filename);
|
||||
~Log();
|
||||
|
||||
/**
|
||||
* \brief Adds a message to the log
|
||||
*
|
||||
* Prints the message to stderr and appends
|
||||
* it to the log file at the same time.
|
||||
*/
|
||||
void log(const std::string& message);
|
||||
|
||||
private:
|
||||
|
||||
std::mutex m_mutex;
|
||||
std::fstream m_stream;
|
||||
|
||||
};
|
||||
|
||||
}
|
6
src/util/meson.build
Normal file
6
src/util/meson.build
Normal file
@ -0,0 +1,6 @@
|
||||
util_src = files([
|
||||
'log/log.cpp',
|
||||
])
|
||||
|
||||
util_lib = static_library('util', util_src,
|
||||
include_directories : [ dxvk_include_path ])
|
36
src/util/rc/util_rc.h
Normal file
36
src/util/rc/util_rc.h
Normal file
@ -0,0 +1,36 @@
|
||||
#pragma once
|
||||
|
||||
#include <atomic>
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief Reference-counted object
|
||||
*/
|
||||
class RcObject {
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* \brief Increments reference count
|
||||
* \returns New reference count
|
||||
*/
|
||||
uint32_t incRef() {
|
||||
return ++m_refCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Decrements reference count
|
||||
* \returns New reference count
|
||||
*/
|
||||
uint32_t decRef() {
|
||||
return --m_refCount;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
std::atomic<uint32_t> m_refCount = { 0u };
|
||||
|
||||
};
|
||||
|
||||
}
|
126
src/util/rc/util_rc_ptr.h
Normal file
126
src/util/rc/util_rc_ptr.h
Normal file
@ -0,0 +1,126 @@
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief Pointer for reference-counted objects
|
||||
*
|
||||
* This only requires the given type to implement \c incRef
|
||||
* and \c decRef methods that adjust the reference count.
|
||||
* \tparam T Object type
|
||||
*/
|
||||
template<typename T>
|
||||
class Rc {
|
||||
template<typename Tx>
|
||||
friend class Rc;
|
||||
public:
|
||||
|
||||
Rc() { }
|
||||
Rc(std::nullptr_t) { }
|
||||
|
||||
Rc(T* object)
|
||||
: m_object(object) {
|
||||
this->incRef();
|
||||
}
|
||||
|
||||
Rc(const Rc& other)
|
||||
: m_object(other.m_object) {
|
||||
this->incRef();
|
||||
}
|
||||
|
||||
template<typename Tx>
|
||||
Rc(const Rc<Tx>& other)
|
||||
: m_object(other.m_object) {
|
||||
this->incRef();
|
||||
}
|
||||
|
||||
Rc(Rc&& other)
|
||||
: m_object(other.m_object) {
|
||||
other.m_object = nullptr;
|
||||
}
|
||||
|
||||
template<typename Tx>
|
||||
Rc(Rc<Tx>&& other)
|
||||
: m_object(other.m_object) {
|
||||
other.m_object = nullptr;
|
||||
}
|
||||
|
||||
Rc& operator = (std::nullptr_t) {
|
||||
this->decRef();
|
||||
m_object = nullptr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Rc& operator = (const Rc& other) {
|
||||
other.incRef();
|
||||
this->decRef();
|
||||
m_object = other.m_object;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename Tx>
|
||||
Rc& operator = (const Rc<Tx>& other) {
|
||||
other.incRef();
|
||||
this->decRef();
|
||||
m_object = other.m_object;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Rc& operator = (Rc&& other) {
|
||||
this->decRef();
|
||||
this->m_object = other.m_object;
|
||||
other.m_object = nullptr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename Tx>
|
||||
Rc& operator = (Rc<Tx>&& other) {
|
||||
this->decRef();
|
||||
this->m_object = other.m_object;
|
||||
other.m_object = nullptr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
~Rc() {
|
||||
this->decRef();
|
||||
}
|
||||
|
||||
T& operator * () const { return *m_object; }
|
||||
T* operator -> () const { return m_object; }
|
||||
T* ptr() const { return m_object; }
|
||||
|
||||
bool operator == (const Rc& other) const { return m_object == other.m_object; }
|
||||
bool operator != (const Rc& other) const { return m_object != other.m_object; }
|
||||
|
||||
bool operator == (std::nullptr_t) const { return m_object == nullptr; }
|
||||
bool operator != (std::nullptr_t) const { return m_object != nullptr; }
|
||||
|
||||
private:
|
||||
|
||||
T* m_object = nullptr;
|
||||
|
||||
void incRef() const {
|
||||
if (m_object != nullptr)
|
||||
m_object->incRef();
|
||||
}
|
||||
|
||||
void decRef() const {
|
||||
if (m_object != nullptr) {
|
||||
if (m_object->decRef() == 0)
|
||||
delete m_object;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
template<typename T>
|
||||
struct RcHash {
|
||||
size_t operator () (const Rc<T>& rc) const {
|
||||
return std::hash<T*>()(rc.ptr());
|
||||
}
|
||||
};
|
||||
|
||||
}
|
31
src/util/util_error.h
Normal file
31
src/util/util_error.h
Normal file
@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
/**
|
||||
* \brief DXVK error
|
||||
*
|
||||
* A generic exception class that stores a
|
||||
* message. Exceptions should be logged.
|
||||
*/
|
||||
class DxvkError {
|
||||
|
||||
public:
|
||||
|
||||
DxvkError() { }
|
||||
DxvkError(std::string&& message)
|
||||
: m_message(std::move(message)) { }
|
||||
|
||||
const std::string& message() const {
|
||||
return m_message;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
std::string m_message;
|
||||
|
||||
};
|
||||
|
||||
}
|
12
src/util/util_math.h
Normal file
12
src/util/util_math.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
template<typename T>
|
||||
T clamp(T n, T lo, T hi) {
|
||||
if (n < lo) return lo;
|
||||
if (n > hi) return hi;
|
||||
return n;
|
||||
}
|
||||
|
||||
}
|
23
src/util/util_string.h
Normal file
23
src/util/util_string.h
Normal file
@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
|
||||
namespace dxvk::str {
|
||||
|
||||
inline void format1(std::stringstream&) { }
|
||||
|
||||
template<typename T, typename... Tx>
|
||||
void format1(std::stringstream& str, const T& arg, const Tx&... args) {
|
||||
str << arg;
|
||||
format1(str, args...);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
std::string format(const Args&... args) {
|
||||
std::stringstream stream;
|
||||
format1(stream, args...);
|
||||
return stream.str();
|
||||
}
|
||||
|
||||
}
|
3
tests/dxvk/meson.build
Normal file
3
tests/dxvk/meson.build
Normal file
@ -0,0 +1,3 @@
|
||||
test_dxvk_deps = [ dxvk_dep ]
|
||||
|
||||
executable('dxvk-triangle', files('test_dxvk_triangle.cpp'), dependencies: test_dxvk_deps)
|
128
tests/dxvk/test_dxvk_triangle.cpp
Normal file
128
tests/dxvk/test_dxvk_triangle.cpp
Normal file
@ -0,0 +1,128 @@
|
||||
#include <dxvk_framebuffer.h>
|
||||
#include <dxvk_instance.h>
|
||||
#include <dxvk_main.h>
|
||||
#include <dxvk_surface.h>
|
||||
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
|
||||
using namespace dxvk;
|
||||
|
||||
class TriangleApp {
|
||||
|
||||
public:
|
||||
|
||||
TriangleApp(HINSTANCE instance, HWND window)
|
||||
: m_dxvkInstance (new DxvkInstance()),
|
||||
m_dxvkAdapter (m_dxvkInstance->enumAdapters().at(0)),
|
||||
m_dxvkDevice (m_dxvkAdapter->createDevice()),
|
||||
m_dxvkSurface (m_dxvkAdapter->createSurface(instance, window)),
|
||||
m_dxvkSwapchain (m_dxvkDevice->createSwapchain(m_dxvkSurface,
|
||||
DxvkSwapchainProperties {
|
||||
VkSurfaceFormatKHR { VK_FORMAT_B8G8R8A8_SRGB, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR },
|
||||
VK_PRESENT_MODE_FIFO_KHR,
|
||||
VkExtent2D { 640, 480 },
|
||||
})),
|
||||
m_dxvkContext (m_dxvkDevice->createContext()),
|
||||
m_dxvkCommandList (m_dxvkDevice->createCommandList()) {
|
||||
|
||||
}
|
||||
|
||||
~TriangleApp() {
|
||||
|
||||
}
|
||||
|
||||
void run() {
|
||||
auto sync1 = m_dxvkDevice->createSemaphore();
|
||||
auto sync2 = m_dxvkDevice->createSemaphore();
|
||||
|
||||
m_dxvkContext->beginRecording(m_dxvkCommandList);
|
||||
m_dxvkContext->setFramebuffer(
|
||||
m_dxvkSwapchain->getFramebuffer(sync1));
|
||||
m_dxvkContext->endRecording();
|
||||
|
||||
auto fence = m_dxvkDevice->submitCommandList(
|
||||
m_dxvkCommandList, sync1, sync2);
|
||||
m_dxvkSwapchain->present(sync2);
|
||||
m_dxvkDevice->waitForIdle();
|
||||
m_dxvkCommandList->reset();
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Rc<DxvkInstance> m_dxvkInstance;
|
||||
Rc<DxvkAdapter> m_dxvkAdapter;
|
||||
Rc<DxvkDevice> m_dxvkDevice;
|
||||
Rc<DxvkSurface> m_dxvkSurface;
|
||||
Rc<DxvkSwapchain> m_dxvkSwapchain;
|
||||
Rc<DxvkContext> m_dxvkContext;
|
||||
Rc<DxvkCommandList> m_dxvkCommandList;
|
||||
|
||||
Rc<DxvkBuffer> m_vertexBuffer;
|
||||
|
||||
};
|
||||
|
||||
LRESULT CALLBACK WindowProc(HWND hWnd,
|
||||
UINT message,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam);
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpCmdLine,
|
||||
int nCmdShow) {
|
||||
HWND hWnd;
|
||||
WNDCLASSEXW wc;
|
||||
ZeroMemory(&wc, sizeof(WNDCLASSEX));
|
||||
wc.cbSize = sizeof(WNDCLASSEX);
|
||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
||||
wc.lpfnWndProc = WindowProc;
|
||||
wc.hInstance = hInstance;
|
||||
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
|
||||
wc.lpszClassName = L"WindowClass1";
|
||||
RegisterClassExW(&wc);
|
||||
|
||||
hWnd = CreateWindowExW(0,
|
||||
L"WindowClass1",
|
||||
L"Our First Windowed Program",
|
||||
WS_OVERLAPPEDWINDOW,
|
||||
300, 300,
|
||||
640, 480,
|
||||
nullptr,
|
||||
nullptr,
|
||||
hInstance,
|
||||
nullptr);
|
||||
ShowWindow(hWnd, nCmdShow);
|
||||
|
||||
MSG msg;
|
||||
|
||||
TriangleApp app(hInstance, hWnd);
|
||||
|
||||
try {
|
||||
while (true) {
|
||||
if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
|
||||
if (msg.message == WM_QUIT)
|
||||
return msg.wParam;
|
||||
} else {
|
||||
app.run();
|
||||
}
|
||||
}
|
||||
} catch (const dxvk::DxvkError& e) {
|
||||
dxvk::log(e.message());
|
||||
return msg.wParam;
|
||||
}
|
||||
}
|
||||
|
||||
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
|
||||
switch (message) {
|
||||
case WM_CLOSE:
|
||||
PostQuitMessage(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
1
tests/meson.build
Normal file
1
tests/meson.build
Normal file
@ -0,0 +1 @@
|
||||
subdir('dxvk')
|
Loading…
x
Reference in New Issue
Block a user