// Copyright (c) 2016- PPSSPP Project. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, version 2.0 or later versions. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License 2.0 for more details. // A copy of the GPL 2.0 should have been included with the program. // If not, see http://www.gnu.org/licenses/ // Official git repository and contact information can be found at // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/. #pragma once #ifdef __ANDROID__ #define VK_USE_PLATFORM_ANDROID_KHR #elif defined(_WIN32) #define VK_USE_PLATFORM_WIN32_KHR #define WIN32_LEAN_AND_MEAN #ifndef NOMINMAX #define NOMINMAX #endif #endif #define VK_NO_PROTOTYPES #include "ext/vulkan/vulkan.h" extern PFN_vkCreateInstance vkCreateInstance; extern PFN_vkDestroyInstance vkDestroyInstance; extern PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; extern PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; extern PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; extern PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; extern PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; extern PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; extern PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; extern PFN_vkCreateDevice vkCreateDevice; extern PFN_vkDestroyDevice vkDestroyDevice; extern PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; extern PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; extern PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; extern PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; extern PFN_vkGetDeviceQueue vkGetDeviceQueue; extern PFN_vkQueueSubmit vkQueueSubmit; extern PFN_vkQueueWaitIdle vkQueueWaitIdle; extern PFN_vkDeviceWaitIdle vkDeviceWaitIdle; extern PFN_vkAllocateMemory vkAllocateMemory; extern PFN_vkFreeMemory vkFreeMemory; extern PFN_vkMapMemory vkMapMemory; extern PFN_vkUnmapMemory vkUnmapMemory; extern PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; extern PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; extern PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; extern PFN_vkBindBufferMemory vkBindBufferMemory; extern PFN_vkBindImageMemory vkBindImageMemory; extern PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; extern PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; extern PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties; extern PFN_vkQueueBindSparse vkQueueBindSparse; extern PFN_vkCreateFence vkCreateFence; extern PFN_vkDestroyFence vkDestroyFence; extern PFN_vkResetFences vkResetFences; extern PFN_vkGetFenceStatus vkGetFenceStatus; extern PFN_vkWaitForFences vkWaitForFences; extern PFN_vkCreateSemaphore vkCreateSemaphore; extern PFN_vkDestroySemaphore vkDestroySemaphore; extern PFN_vkCreateEvent vkCreateEvent; extern PFN_vkDestroyEvent vkDestroyEvent; extern PFN_vkGetEventStatus vkGetEventStatus; extern PFN_vkSetEvent vkSetEvent; extern PFN_vkResetEvent vkResetEvent; extern PFN_vkCreateQueryPool vkCreateQueryPool; extern PFN_vkDestroyQueryPool vkDestroyQueryPool; extern PFN_vkGetQueryPoolResults vkGetQueryPoolResults; extern PFN_vkCreateBuffer vkCreateBuffer; extern PFN_vkDestroyBuffer vkDestroyBuffer; extern PFN_vkCreateBufferView vkCreateBufferView; extern PFN_vkDestroyBufferView vkDestroyBufferView; extern PFN_vkCreateImage vkCreateImage; extern PFN_vkDestroyImage vkDestroyImage; extern PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; extern PFN_vkCreateImageView vkCreateImageView; extern PFN_vkDestroyImageView vkDestroyImageView; extern PFN_vkCreateShaderModule vkCreateShaderModule; extern PFN_vkDestroyShaderModule vkDestroyShaderModule; extern PFN_vkCreatePipelineCache vkCreatePipelineCache; extern PFN_vkDestroyPipelineCache vkDestroyPipelineCache; extern PFN_vkGetPipelineCacheData vkGetPipelineCacheData; extern PFN_vkMergePipelineCaches vkMergePipelineCaches; extern PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; extern PFN_vkCreateComputePipelines vkCreateComputePipelines; extern PFN_vkDestroyPipeline vkDestroyPipeline; extern PFN_vkCreatePipelineLayout vkCreatePipelineLayout; extern PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; extern PFN_vkCreateSampler vkCreateSampler; extern PFN_vkDestroySampler vkDestroySampler; extern PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; extern PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; extern PFN_vkCreateDescriptorPool vkCreateDescriptorPool; extern PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; extern PFN_vkResetDescriptorPool vkResetDescriptorPool; extern PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; extern PFN_vkFreeDescriptorSets vkFreeDescriptorSets; extern PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; extern PFN_vkCreateFramebuffer vkCreateFramebuffer; extern PFN_vkDestroyFramebuffer vkDestroyFramebuffer; extern PFN_vkCreateRenderPass vkCreateRenderPass; extern PFN_vkDestroyRenderPass vkDestroyRenderPass; extern PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; extern PFN_vkCreateCommandPool vkCreateCommandPool; extern PFN_vkDestroyCommandPool vkDestroyCommandPool; extern PFN_vkResetCommandPool vkResetCommandPool; extern PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; extern PFN_vkFreeCommandBuffers vkFreeCommandBuffers; extern PFN_vkBeginCommandBuffer vkBeginCommandBuffer; extern PFN_vkEndCommandBuffer vkEndCommandBuffer; extern PFN_vkResetCommandBuffer vkResetCommandBuffer; extern PFN_vkCmdBindPipeline vkCmdBindPipeline; extern PFN_vkCmdSetViewport vkCmdSetViewport; extern PFN_vkCmdSetScissor vkCmdSetScissor; extern PFN_vkCmdSetLineWidth vkCmdSetLineWidth; extern PFN_vkCmdSetDepthBias vkCmdSetDepthBias; extern PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; extern PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; extern PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; extern PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; extern PFN_vkCmdSetStencilReference vkCmdSetStencilReference; extern PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; extern PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; extern PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; extern PFN_vkCmdDraw vkCmdDraw; extern PFN_vkCmdDrawIndexed vkCmdDrawIndexed; extern PFN_vkCmdDrawIndirect vkCmdDrawIndirect; extern PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; extern PFN_vkCmdDispatch vkCmdDispatch; extern PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; extern PFN_vkCmdCopyBuffer vkCmdCopyBuffer; extern PFN_vkCmdCopyImage vkCmdCopyImage; extern PFN_vkCmdBlitImage vkCmdBlitImage; extern PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; extern PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; extern PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; extern PFN_vkCmdFillBuffer vkCmdFillBuffer; extern PFN_vkCmdClearColorImage vkCmdClearColorImage; extern PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; extern PFN_vkCmdClearAttachments vkCmdClearAttachments; extern PFN_vkCmdResolveImage vkCmdResolveImage; extern PFN_vkCmdSetEvent vkCmdSetEvent; extern PFN_vkCmdResetEvent vkCmdResetEvent; extern PFN_vkCmdWaitEvents vkCmdWaitEvents; extern PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; extern PFN_vkCmdBeginQuery vkCmdBeginQuery; extern PFN_vkCmdEndQuery vkCmdEndQuery; extern PFN_vkCmdResetQueryPool vkCmdResetQueryPool; extern PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; extern PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; extern PFN_vkCmdPushConstants vkCmdPushConstants; extern PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; extern PFN_vkCmdNextSubpass vkCmdNextSubpass; extern PFN_vkCmdEndRenderPass vkCmdEndRenderPass; extern PFN_vkCmdExecuteCommands vkCmdExecuteCommands; #ifdef __ANDROID__ extern PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; #elif defined(_WIN32) extern PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR; #endif #if defined(VK_USE_PLATFORM_XLIB_KHR) extern PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; #endif #if defined(VK_USE_PLATFORM_WAYLAND_KHR) extern PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; #endif extern PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; // Simple loader for the WSI extension. extern PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; extern PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; extern PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; extern PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR; extern PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; extern PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; extern PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; extern PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; extern PFN_vkQueuePresentKHR vkQueuePresentKHR; // And the DEBUG_REPORT extension. Since we load this dynamically even in static // linked mode, we have to rename it :( extern PFN_vkCreateDebugReportCallbackEXT dyn_vkCreateDebugReportCallbackEXT; extern PFN_vkDestroyDebugReportCallbackEXT dyn_vkDestroyDebugReportCallbackEXT; // Way to do a quick check before even attempting to load. bool VulkanMayBeAvailable(); void VulkanSetAvailable(bool available); bool VulkanLoad(); void VulkanLoadInstanceFunctions(VkInstance instance); void VulkanLoadDeviceFunctions(VkDevice device); void VulkanFree();