480 lines
20 KiB
C
480 lines
20 KiB
C
#ifndef __APPLE__
|
|
#ifndef __GPU_INFO_VULKAN_H__
|
|
#define __GPU_INFO_VULKAN_H__
|
|
|
|
#include "gpu_info.h"
|
|
|
|
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
|
|
VK_DEFINE_HANDLE(VkInstance)
|
|
VK_DEFINE_HANDLE(VkPhysicalDevice)
|
|
|
|
#define VK_MAX_EXTENSION_NAME_SIZE 256U
|
|
#define VK_MAX_DESCRIPTION_SIZE 256U
|
|
#define VK_LUID_SIZE 8U
|
|
#define VK_UUID_SIZE 16U
|
|
#define VK_MAX_MEMORY_TYPES 32U
|
|
#define VK_MAX_MEMORY_HEAPS 16U
|
|
#define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256U
|
|
|
|
#define VK_MAKE_VERSION(major, minor, patch) \
|
|
((((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch)))
|
|
|
|
#define VK_MAKE_API_VERSION(variant, major, minor, patch) \
|
|
((((uint32_t)(variant)) << 29U) | (((uint32_t)(major)) << 22U) | (((uint32_t)(minor)) << 12U) | ((uint32_t)(patch)))
|
|
|
|
#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0
|
|
#define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)// Patch version should always be set to 0
|
|
#define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)// Patch version should always be set to 0
|
|
#define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0)// Patch version should always be set to 0
|
|
#define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22U) & 0x7FU)
|
|
#define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12U) & 0x3FFU)
|
|
#define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU)
|
|
|
|
#define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2"
|
|
#define VK_NV_COOPERATIVE_MATRIX_2_EXTENSION_NAME "VK_NV_cooperative_matrix2"
|
|
#define VK_EXT_MEMORY_BUDGET_EXTENSION_NAME "VK_EXT_memory_budget"
|
|
|
|
typedef uint32_t VkFlags;
|
|
typedef uint32_t VkBool32;
|
|
typedef uint64_t VkDeviceSize;
|
|
typedef uint32_t VkSampleMask;
|
|
typedef VkFlags VkSampleCountFlags;
|
|
typedef VkFlags VkMemoryPropertyFlags;
|
|
typedef VkFlags VkMemoryHeapFlags;
|
|
typedef VkFlags VkInstanceCreateFlags;
|
|
|
|
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_UNKNOWN = -13,
|
|
VK_ERROR_OUT_OF_POOL_MEMORY = -1000069000,
|
|
VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003,
|
|
VK_ERROR_FRAGMENTATION = -1000168000,
|
|
VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000,
|
|
VK_PIPELINE_COMPILE_REQUIRED = 1000297000,
|
|
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_IMAGE_USAGE_NOT_SUPPORTED_KHR = -1000158000,
|
|
VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR = -1000158001,
|
|
VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR = -1000158002,
|
|
VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR = -1000158003,
|
|
VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR = -1000158004,
|
|
VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR = -1000158005,
|
|
VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158006,
|
|
VK_ERROR_NOT_PERMITTED_KHR = -1000174001,
|
|
VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000,
|
|
VK_THREAD_IDLE_KHR = 1000268000,
|
|
VK_THREAD_DONE_KHR = 1000268001,
|
|
VK_OPERATION_DEFERRED_KHR = 1000268002,
|
|
VK_OPERATION_NOT_DEFERRED_KHR = 1000268003,
|
|
VK_ERROR_COMPRESSION_EXHAUSTED_EXT = -1000338000,
|
|
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_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES = 49,
|
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = 1000059000,
|
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = 1000059001,
|
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = 1000059006,
|
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = 1000071004,
|
|
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000,
|
|
VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
|
|
} VkStructureType;
|
|
|
|
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_MAX_ENUM = 0x7FFFFFFF
|
|
} VkPhysicalDeviceType;
|
|
|
|
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_MAX_ENUM = 0x7FFFFFFF
|
|
} VkSystemAllocationScope;
|
|
|
|
typedef enum VkInternalAllocationType {
|
|
VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0,
|
|
VK_INTERNAL_ALLOCATION_TYPE_NON_EXECUTABLE = 1,
|
|
VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
|
|
} VkInternalAllocationType;
|
|
|
|
typedef enum VkMemoryHeapFlagBits {
|
|
VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
|
|
VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002,
|
|
VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM = 0x00000008,
|
|
VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT,
|
|
VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
|
|
} VkMemoryHeapFlagBits;
|
|
|
|
typedef struct VkExtensionProperties {
|
|
char extensionName[VK_MAX_EXTENSION_NAME_SIZE];
|
|
uint32_t specVersion;
|
|
} VkExtensionProperties;
|
|
|
|
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;
|
|
uint32_t deviceType;
|
|
char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
|
|
uint8_t pipelineCacheUUID[VK_UUID_SIZE];
|
|
VkPhysicalDeviceLimits limits;
|
|
VkPhysicalDeviceSparseProperties sparseProperties;
|
|
} VkPhysicalDeviceProperties;
|
|
|
|
typedef struct VkPhysicalDeviceProperties2 {
|
|
VkStructureType sType;
|
|
void* pNext;
|
|
VkPhysicalDeviceProperties properties;
|
|
} VkPhysicalDeviceProperties2;
|
|
|
|
typedef struct VkPhysicalDeviceIDProperties {
|
|
VkStructureType sType;
|
|
void* pNext;
|
|
uint8_t deviceUUID[VK_UUID_SIZE];
|
|
uint8_t driverUUID[VK_UUID_SIZE];
|
|
uint8_t deviceLUID[VK_LUID_SIZE];
|
|
uint32_t deviceNodeMask;
|
|
VkBool32 deviceLUIDValid;
|
|
} VkPhysicalDeviceIDProperties;
|
|
|
|
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 VkPhysicalDeviceFeatures2 {
|
|
VkStructureType sType;
|
|
void* pNext;
|
|
VkPhysicalDeviceFeatures features;
|
|
} VkPhysicalDeviceFeatures2;
|
|
|
|
typedef struct VkPhysicalDeviceVulkan11Features {
|
|
VkStructureType sType;
|
|
void* pNext;
|
|
VkBool32 storageBuffer16BitAccess;
|
|
VkBool32 uniformAndStorageBuffer16BitAccess;
|
|
VkBool32 storagePushConstant16;
|
|
VkBool32 storageInputOutput16;
|
|
VkBool32 multiview;
|
|
VkBool32 multiviewGeometryShader;
|
|
VkBool32 multiviewTessellationShader;
|
|
VkBool32 variablePointersStorageBuffer;
|
|
VkBool32 variablePointers;
|
|
VkBool32 protectedMemory;
|
|
VkBool32 samplerYcbcrConversion;
|
|
VkBool32 shaderDrawParameters;
|
|
} VkPhysicalDeviceVulkan11Features;
|
|
|
|
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 VkPhysicalDeviceMemoryProperties2 {
|
|
VkStructureType sType;
|
|
void* pNext;
|
|
VkPhysicalDeviceMemoryProperties memoryProperties;
|
|
} VkPhysicalDeviceMemoryProperties2;
|
|
|
|
typedef struct VkPhysicalDeviceMemoryBudgetPropertiesEXT {
|
|
VkStructureType sType;
|
|
void* pNext;
|
|
VkDeviceSize heapBudget[VK_MAX_MEMORY_HEAPS];
|
|
VkDeviceSize heapUsage[VK_MAX_MEMORY_HEAPS];
|
|
} VkPhysicalDeviceMemoryBudgetPropertiesEXT;
|
|
|
|
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;
|
|
void* (*pfnAllocation)(void* pUserData, size_t size, size_t alignment, VkSystemAllocationScope allocationScope);
|
|
void* (*pfnReallocation)(void* pUserData, void* pOriginal, size_t size, size_t alignment, VkSystemAllocationScope allocationScope);
|
|
void (*pfnFree)(void* pUserData, void* pMemory);
|
|
void (*pfnInternalAllocation)(void* pUserData, size_t size, VkInternalAllocationType allocationType, VkSystemAllocationScope allocationScope);
|
|
void (*pfnInternalFree)(void* pUserData, size_t size, VkInternalAllocationType allocationType, VkSystemAllocationScope allocationScope);
|
|
} VkAllocationCallbacks;
|
|
|
|
typedef struct {
|
|
void* vk_handle;
|
|
uint16_t verbose;
|
|
|
|
VkInstance vk;
|
|
int num_devices;
|
|
|
|
void (*vkGetPhysicalDeviceProperties)(
|
|
VkPhysicalDevice physicalDevice,
|
|
VkPhysicalDeviceProperties* pProperties);
|
|
void (*vkGetPhysicalDeviceProperties2)(
|
|
VkPhysicalDevice physicalDevice,
|
|
VkPhysicalDeviceProperties2* pProperties);
|
|
VkResult (*vkEnumerateDeviceExtensionProperties)(
|
|
VkPhysicalDevice physicalDevice,
|
|
const char* pLayerName,
|
|
uint32_t* pPropertyCount,
|
|
VkExtensionProperties* pProperties);
|
|
VkResult (*vkCreateInstance)(
|
|
const VkInstanceCreateInfo* pCreateInfo,
|
|
const VkAllocationCallbacks* pAllocator,
|
|
VkInstance* pInstance);
|
|
VkResult (*vkEnumeratePhysicalDevices)(
|
|
VkInstance instance,
|
|
uint32_t* pPhysicalDeviceCount,
|
|
VkPhysicalDevice* pPhysicalDevices);
|
|
void (*vkGetPhysicalDeviceMemoryProperties2)(
|
|
VkPhysicalDevice physicalDevice,
|
|
VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
|
|
void (*vkDestroyInstance)(
|
|
VkInstance instance,
|
|
const VkAllocationCallbacks* pAllocator);
|
|
void (*vkGetPhysicalDeviceFeatures2)(
|
|
VkPhysicalDevice physicalDevice,
|
|
VkPhysicalDeviceFeatures2* pFeatures);
|
|
} vk_handle_t;
|
|
|
|
typedef struct vk_init_resp
|
|
{
|
|
char *err; // If err is non-null handle is invalid
|
|
int num_devices;
|
|
vk_handle_t ch;
|
|
} vk_init_resp_t;
|
|
|
|
void vk_init(char* vk_lib_path, vk_init_resp_t *resp);
|
|
void vk_check_vram(vk_handle_t rh, int i, mem_info_t *resp);
|
|
int vk_device_is_supported(vk_handle_t rh, int i);
|
|
void vk_release(vk_handle_t rh);
|
|
|
|
#endif
|
|
#endif |