| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- #pragma once
- #include "Defines.h"
- #include "Logging.h"
- #include "vulkan/vulkan.h"
- #if GP_PLATFORM_WINDOWS
- # define VK_USE_PLATFORM_WIN32_KHR
- #elif GP_PLATFORM_LINUX
- # define VK_USE_PLATFORM_XLIB_KHR
- #elif GP_PLATFORM_MACOS
- # define VK_USE_PLATFORM_MACOS_MVK
- #elif GP_PLATFORM_IOS
- # define VK_USE_PLATFORM_IOS_MVK
- #elif GP_PLATFORM_ANDROID
- # define VK_USE_PLATFORM_ANDROID_KHR
- #else
- # error Unsupported renderer platform
- #endif
- namespace gameplay
- {
- const std::vector<const char*> vulkan_validation_layers = { "VK_LAYER_LUNARG_standard_validation" };
- std::string to_vulkan_error_string(VkResult result);
- static void check_vulkan_result(VkResult res)
- {
- if (res != VK_SUCCESS)
- {
- GP_LOG_ERROR("Fatal: VkResult is: %s, file: %s, line: %s", to_vulkan_error_string(res), __FILE__, __LINE__);
- GP_ASSERT(res == VK_SUCCESS);
- if (res < 0)
- abort();
- }
- }
- #define VK_CHECK_RESULT(f) \
- { \
- VkResult res = (f); \
- if (res != VK_SUCCESS) \
- { \
- GP_LOG_ERROR("Fatal: VkResult is: %s, file: %s, line: %s", to_vulkan_error_string(res), __FILE__, __LINE__); \
- GP_ASSERT(res == VK_SUCCESS); \
- if (res < 0) \
- abort(); \
- } \
- }
- VkBool32 log_vulkan_validation_debug_report(VkDebugReportFlagsEXT flags,
- VkDebugReportObjectTypeEXT objType,
- uint64_t srcObject,
- size_t location,
- int32_t msgCode,
- const char* layerPrefix,
- const char* msg,
- void* userPtr)
- {
- std::string prefix("");
- if (flags & VK_DEBUG_REPORT_ERROR_BIT_EXT)
- prefix += "ERROR:";
- if (flags & VK_DEBUG_REPORT_WARNING_BIT_EXT)
- prefix += "WARNING:";
- if (flags & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT)
- prefix += "PERFORMANCE:";
- if (flags & VK_DEBUG_REPORT_INFORMATION_BIT_EXT)
- prefix += "INFO:";
- if (flags & VK_DEBUG_REPORT_DEBUG_BIT_EXT)
- prefix += "DEBUG:";
- GP_LOG_DEBUG("%s [%s] Code: %d:%s", prefix.c_str(), layerPrefix, msgCode, msg);
- return VK_FALSE;
- }
- #if GP_PLATFORM_ANDROID
- #include <android/log.h>
- #include <dlfcn.h>
- PFN_vkCreateInstance vkCreateInstance;
- PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
- PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
- PFN_vkCreateDevice vkCreateDevice;
- PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
- PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;
- PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
- PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties;
- PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties;
- PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures;
- PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;
- PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;
- PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
- PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties;
- PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
- PFN_vkCreateShaderModule vkCreateShaderModule;
- PFN_vkCreateBuffer vkCreateBuffer;
- PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
- PFN_vkMapMemory vkMapMemory;
- PFN_vkUnmapMemory vkUnmapMemory;
- PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
- PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
- PFN_vkBindBufferMemory vkBindBufferMemory;
- PFN_vkDestroyBuffer vkDestroyBuffer;
- PFN_vkAllocateMemory vkAllocateMemory;
- PFN_vkBindImageMemory vkBindImageMemory;
- PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
- PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
- PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
- PFN_vkCmdCopyImage vkCmdCopyImage;
- PFN_vkCmdBlitImage vkCmdBlitImage;
- PFN_vkCmdClearAttachments vkCmdClearAttachments;
- PFN_vkCreateSampler vkCreateSampler;
- PFN_vkDestroySampler vkDestroySampler;
- PFN_vkDestroyImage vkDestroyImage;
- PFN_vkFreeMemory vkFreeMemory;
- PFN_vkCreateRenderPass vkCreateRenderPass;
- PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
- PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
- PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
- PFN_vkCreateImage vkCreateImage;
- PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
- PFN_vkCreateImageView vkCreateImageView;
- PFN_vkDestroyImageView vkDestroyImageView;
- PFN_vkCreateSemaphore vkCreateSemaphore;
- PFN_vkDestroySemaphore vkDestroySemaphore;
- PFN_vkCreateFence vkCreateFence;
- PFN_vkDestroyFence vkDestroyFence;
- PFN_vkWaitForFences vkWaitForFences;
- PFN_vkResetFences vkResetFences;
- PFN_vkCreateCommandPool vkCreateCommandPool;
- PFN_vkDestroyCommandPool vkDestroyCommandPool;
- PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
- PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
- PFN_vkEndCommandBuffer vkEndCommandBuffer;
- PFN_vkGetDeviceQueue vkGetDeviceQueue;
- PFN_vkQueueSubmit vkQueueSubmit;
- PFN_vkQueueWaitIdle vkQueueWaitIdle;
- PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
- PFN_vkCreateFramebuffer vkCreateFramebuffer;
- PFN_vkCreatePipelineCache vkCreatePipelineCache;
- PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
- PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
- PFN_vkCreateComputePipelines vkCreateComputePipelines;
- PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
- PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
- PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
- PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
- PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
- PFN_vkCmdBindPipeline vkCmdBindPipeline;
- PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
- PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
- PFN_vkCmdSetViewport vkCmdSetViewport;
- PFN_vkCmdSetScissor vkCmdSetScissor;
- PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
- PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
- PFN_vkCmdPushConstants vkCmdPushConstants;
- PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
- PFN_vkCmdDraw vkCmdDraw;
- PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
- PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
- PFN_vkCmdDispatch vkCmdDispatch;
- PFN_vkDestroyPipeline vkDestroyPipeline;
- PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
- PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
- PFN_vkDestroyDevice vkDestroyDevice;
- PFN_vkDestroyInstance vkDestroyInstance;
- PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
- PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
- PFN_vkDestroyRenderPass vkDestroyRenderPass;
- PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
- PFN_vkDestroyShaderModule vkDestroyShaderModule;
- PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
- PFN_vkCreateQueryPool vkCreateQueryPool;
- PFN_vkDestroyQueryPool vkDestroyQueryPool;
- PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
- PFN_vkCmdBeginQuery vkCmdBeginQuery;
- PFN_vkCmdEndQuery vkCmdEndQuery;
- PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
- PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
- PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
- PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
- void* libVulkan;
- #endif
- static void load_vulkan_library()
- {
- #if GP_PLATFORM_ANDROID
- __android_log_print(ANDROID_LOG_INFO, "vulkanandroid", "Loading libvulkan.so...\n");
- // Load the vulkan library
- libVulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
- if (!libVulkan)
- {
- __android_log_print(ANDROID_LOG_INFO, "vulkanandroid", "Could not load vulkan library : %s!\n", dlerror());
- return false;
- }
- // Load base function pointers
- vkEnumerateInstanceExtensionProperties = reinterpret_cast<PFN_vkEnumerateInstanceExtensionProperties>(dlsym(libVulkan, "vkEnumerateInstanceExtensionProperties"));
- vkEnumerateInstanceLayerProperties = reinterpret_cast<PFN_vkEnumerateInstanceLayerProperties>(dlsym(libVulkan, "vkEnumerateInstanceLayerProperties"));
- vkCreateInstance = reinterpret_cast<PFN_vkCreateInstance>(dlsym(libVulkan, "vkCreateInstance"));
- vkGetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(dlsym(libVulkan, "vkGetInstanceProcAddr"));
- vkGetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(dlsym(libVulkan, "vkGetDeviceProcAddr"));
- #elif GP_PLATFORM_LINUX
- //initxcbConnection();
- #endif
- }
- static void unload_vulkan_library()
- {
- #if GP_PLATFORM_ANDROID
- dlclose(libVulkan);
- #endif
- }
- static void load_vulkan_functions()
- {
- #if GP_PLATFORM_ANDROID
- __android_log_print(ANDROID_LOG_INFO, "vulkanandroid", "Loading instance based function pointers...\n");
- vkEnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(vkGetInstanceProcAddr(instance, "vkEnumeratePhysicalDevices"));
- vkGetPhysicalDeviceProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties"));
- vkEnumerateDeviceLayerProperties = reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(vkGetInstanceProcAddr(instance, "vkEnumerateDeviceLayerProperties"));
- vkEnumerateDeviceExtensionProperties = reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(vkGetInstanceProcAddr(instance, "vkEnumerateDeviceExtensionProperties"));
- vkGetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceQueueFamilyProperties"));
- vkGetPhysicalDeviceFeatures = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures"));
- vkCreateDevice = reinterpret_cast<PFN_vkCreateDevice>(vkGetInstanceProcAddr(instance, "vkCreateDevice"));
- vkGetPhysicalDeviceFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFormatProperties"));
- vkGetPhysicalDeviceMemoryProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceMemoryProperties"));
- vkCmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(vkGetInstanceProcAddr(instance, "vkCmdPipelineBarrier"));
- vkCreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(vkGetInstanceProcAddr(instance, "vkCreateShaderModule"));
- vkCreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(vkGetInstanceProcAddr(instance, "vkCreateBuffer"));
- vkGetBufferMemoryRequirements = reinterpret_cast<PFN_vkGetBufferMemoryRequirements>(vkGetInstanceProcAddr(instance, "vkGetBufferMemoryRequirements"));
- vkMapMemory = reinterpret_cast<PFN_vkMapMemory>(vkGetInstanceProcAddr(instance, "vkMapMemory"));
- vkUnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(vkGetInstanceProcAddr(instance, "vkUnmapMemory"));
- vkFlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(vkGetInstanceProcAddr(instance, "vkFlushMappedMemoryRanges"));
- vkInvalidateMappedMemoryRanges = reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>(vkGetInstanceProcAddr(instance, "vkInvalidateMappedMemoryRanges"));
- vkBindBufferMemory = reinterpret_cast<PFN_vkBindBufferMemory>(vkGetInstanceProcAddr(instance, "vkBindBufferMemory"));
- vkDestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(vkGetInstanceProcAddr(instance, "vkDestroyBuffer"));
- vkAllocateMemory = reinterpret_cast<PFN_vkAllocateMemory>(vkGetInstanceProcAddr(instance, "vkAllocateMemory"));
- vkFreeMemory = reinterpret_cast<PFN_vkFreeMemory>(vkGetInstanceProcAddr(instance, "vkFreeMemory"));
- vkCreateRenderPass = reinterpret_cast<PFN_vkCreateRenderPass>(vkGetInstanceProcAddr(instance, "vkCreateRenderPass"));
- vkCmdBeginRenderPass = reinterpret_cast<PFN_vkCmdBeginRenderPass>(vkGetInstanceProcAddr(instance, "vkCmdBeginRenderPass"));
- vkCmdEndRenderPass = reinterpret_cast<PFN_vkCmdEndRenderPass>(vkGetInstanceProcAddr(instance, "vkCmdEndRenderPass"));
- vkCmdExecuteCommands = reinterpret_cast<PFN_vkCmdExecuteCommands>(vkGetInstanceProcAddr(instance, "vkCmdExecuteCommands"));
- vkCreateImage = reinterpret_cast<PFN_vkCreateImage>(vkGetInstanceProcAddr(instance, "vkCreateImage"));
- vkGetImageMemoryRequirements = reinterpret_cast<PFN_vkGetImageMemoryRequirements>(vkGetInstanceProcAddr(instance, "vkGetImageMemoryRequirements"));
- vkCreateImageView = reinterpret_cast<PFN_vkCreateImageView>(vkGetInstanceProcAddr(instance, "vkCreateImageView"));
- vkDestroyImageView = reinterpret_cast<PFN_vkDestroyImageView>(vkGetInstanceProcAddr(instance, "vkDestroyImageView"));
- vkBindImageMemory = reinterpret_cast<PFN_vkBindImageMemory>(vkGetInstanceProcAddr(instance, "vkBindImageMemory"));
- vkGetImageSubresourceLayout = reinterpret_cast<PFN_vkGetImageSubresourceLayout>(vkGetInstanceProcAddr(instance, "vkGetImageSubresourceLayout"));
- vkCmdCopyImage = reinterpret_cast<PFN_vkCmdCopyImage>(vkGetInstanceProcAddr(instance, "vkCmdCopyImage"));
- vkCmdBlitImage = reinterpret_cast<PFN_vkCmdBlitImage>(vkGetInstanceProcAddr(instance, "vkCmdBlitImage"));
- vkDestroyImage = reinterpret_cast<PFN_vkDestroyImage>(vkGetInstanceProcAddr(instance, "vkDestroyImage"));
- vkCmdClearAttachments = reinterpret_cast<PFN_vkCmdClearAttachments>(vkGetInstanceProcAddr(instance, "vkCmdClearAttachments"));
- vkCmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(vkGetInstanceProcAddr(instance, "vkCmdCopyBuffer"));
- vkCmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(vkGetInstanceProcAddr(instance, "vkCmdCopyBufferToImage"));
- vkCreateSampler = reinterpret_cast<PFN_vkCreateSampler>(vkGetInstanceProcAddr(instance, "vkCreateSampler"));
- vkDestroySampler = reinterpret_cast<PFN_vkDestroySampler>(vkGetInstanceProcAddr(instance, "vkDestroySampler"));;
- vkCreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(vkGetInstanceProcAddr(instance, "vkCreateSemaphore"));
- vkDestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(vkGetInstanceProcAddr(instance, "vkDestroySemaphore"));
- vkCreateFence = reinterpret_cast<PFN_vkCreateFence>(vkGetInstanceProcAddr(instance, "vkCreateFence"));
- vkDestroyFence = reinterpret_cast<PFN_vkDestroyFence>(vkGetInstanceProcAddr(instance, "vkDestroyFence"));
- vkWaitForFences = reinterpret_cast<PFN_vkWaitForFences>(vkGetInstanceProcAddr(instance, "vkWaitForFences"));
- vkResetFences = reinterpret_cast<PFN_vkResetFences>(vkGetInstanceProcAddr(instance, "vkResetFences"));;
- vkCreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(vkGetInstanceProcAddr(instance, "vkCreateCommandPool"));
- vkDestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(vkGetInstanceProcAddr(instance, "vkDestroyCommandPool"));;
- vkAllocateCommandBuffers = reinterpret_cast<PFN_vkAllocateCommandBuffers>(vkGetInstanceProcAddr(instance, "vkAllocateCommandBuffers"));
- vkBeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(vkGetInstanceProcAddr(instance, "vkBeginCommandBuffer"));
- vkEndCommandBuffer = reinterpret_cast<PFN_vkEndCommandBuffer>(vkGetInstanceProcAddr(instance, "vkEndCommandBuffer"));
- vkGetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(vkGetInstanceProcAddr(instance, "vkGetDeviceQueue"));
- vkQueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(vkGetInstanceProcAddr(instance, "vkQueueSubmit"));
- vkQueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(vkGetInstanceProcAddr(instance, "vkQueueWaitIdle"));
- vkDeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(vkGetInstanceProcAddr(instance, "vkDeviceWaitIdle"));
- vkCreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(vkGetInstanceProcAddr(instance, "vkCreateFramebuffer"));
- vkCreatePipelineCache = reinterpret_cast<PFN_vkCreatePipelineCache>(vkGetInstanceProcAddr(instance, "vkCreatePipelineCache"));
- vkCreatePipelineLayout = reinterpret_cast<PFN_vkCreatePipelineLayout>(vkGetInstanceProcAddr(instance, "vkCreatePipelineLayout"));
- vkCreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(vkGetInstanceProcAddr(instance, "vkCreateGraphicsPipelines"));
- vkCreateComputePipelines = reinterpret_cast<PFN_vkCreateComputePipelines>(vkGetInstanceProcAddr(instance, "vkCreateComputePipelines"));
- vkCreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(vkGetInstanceProcAddr(instance, "vkCreateDescriptorPool"));
- vkCreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(vkGetInstanceProcAddr(instance, "vkCreateDescriptorSetLayout"));
- vkAllocateDescriptorSets = reinterpret_cast<PFN_vkAllocateDescriptorSets>(vkGetInstanceProcAddr(instance, "vkAllocateDescriptorSets"));
- vkUpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(vkGetInstanceProcAddr(instance, "vkUpdateDescriptorSets"));
- vkCmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>(vkGetInstanceProcAddr(instance, "vkCmdBindDescriptorSets"));
- vkCmdBindPipeline = reinterpret_cast<PFN_vkCmdBindPipeline>(vkGetInstanceProcAddr(instance, "vkCmdBindPipeline"));
- vkCmdBindVertexBuffers = reinterpret_cast<PFN_vkCmdBindVertexBuffers>(vkGetInstanceProcAddr(instance, "vkCmdBindVertexBuffers"));
- vkCmdBindIndexBuffer = reinterpret_cast<PFN_vkCmdBindIndexBuffer>(vkGetInstanceProcAddr(instance, "vkCmdBindIndexBuffer"));
- vkCmdSetViewport = reinterpret_cast<PFN_vkCmdSetViewport>(vkGetInstanceProcAddr(instance, "vkCmdSetViewport"));
- vkCmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(vkGetInstanceProcAddr(instance, "vkCmdSetScissor"));
- vkCmdSetLineWidth = reinterpret_cast<PFN_vkCmdSetLineWidth>(vkGetInstanceProcAddr(instance, "vkCmdSetLineWidth"));
- vkCmdSetDepthBias = reinterpret_cast<PFN_vkCmdSetDepthBias>(vkGetInstanceProcAddr(instance, "vkCmdSetDepthBias"));
- vkCmdPushConstants = reinterpret_cast<PFN_vkCmdPushConstants>(vkGetInstanceProcAddr(instance, "vkCmdPushConstants"));;
- vkCmdDrawIndexed = reinterpret_cast<PFN_vkCmdDrawIndexed>(vkGetInstanceProcAddr(instance, "vkCmdDrawIndexed"));
- vkCmdDraw = reinterpret_cast<PFN_vkCmdDraw>(vkGetInstanceProcAddr(instance, "vkCmdDraw"));
- vkCmdDrawIndexedIndirect = reinterpret_cast<PFN_vkCmdDrawIndexedIndirect>(vkGetInstanceProcAddr(instance, "vkCmdDrawIndexedIndirect"));
- vkCmdDrawIndirect = reinterpret_cast<PFN_vkCmdDrawIndirect>(vkGetInstanceProcAddr(instance, "vkCmdDrawIndirect"));
- vkCmdDispatch = reinterpret_cast<PFN_vkCmdDispatch>(vkGetInstanceProcAddr(instance, "vkCmdDispatch"));
- vkDestroyPipeline = reinterpret_cast<PFN_vkDestroyPipeline>(vkGetInstanceProcAddr(instance, "vkDestroyPipeline"));
- vkDestroyPipelineLayout = reinterpret_cast<PFN_vkDestroyPipelineLayout>(vkGetInstanceProcAddr(instance, "vkDestroyPipelineLayout"));;
- vkDestroyDescriptorSetLayout = reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>(vkGetInstanceProcAddr(instance, "vkDestroyDescriptorSetLayout"));
- vkDestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(vkGetInstanceProcAddr(instance, "vkDestroyDevice"));
- vkDestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(vkGetInstanceProcAddr(instance, "vkDestroyInstance"));
- vkDestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>(vkGetInstanceProcAddr(instance, "vkDestroyDescriptorPool"));
- vkFreeCommandBuffers = reinterpret_cast<PFN_vkFreeCommandBuffers>(vkGetInstanceProcAddr(instance, "vkFreeCommandBuffers"));
- vkDestroyRenderPass = reinterpret_cast<PFN_vkDestroyRenderPass>(vkGetInstanceProcAddr(instance, "vkDestroyRenderPass"));
- vkDestroyFramebuffer = reinterpret_cast<PFN_vkDestroyFramebuffer>(vkGetInstanceProcAddr(instance, "vkDestroyFramebuffer"));
- vkDestroyShaderModule = reinterpret_cast<PFN_vkDestroyShaderModule>(vkGetInstanceProcAddr(instance, "vkDestroyShaderModule"));
- vkDestroyPipelineCache = reinterpret_cast<PFN_vkDestroyPipelineCache>(vkGetInstanceProcAddr(instance, "vkDestroyPipelineCache"));
- vkCreateQueryPool = reinterpret_cast<PFN_vkCreateQueryPool>(vkGetInstanceProcAddr(instance, "vkCreateQueryPool"));
- vkDestroyQueryPool = reinterpret_cast<PFN_vkDestroyQueryPool>(vkGetInstanceProcAddr(instance, "vkDestroyQueryPool"));
- vkGetQueryPoolResults = reinterpret_cast<PFN_vkGetQueryPoolResults>(vkGetInstanceProcAddr(instance, "vkGetQueryPoolResults"));
- vkCmdBeginQuery = reinterpret_cast<PFN_vkCmdBeginQuery>(vkGetInstanceProcAddr(instance, "vkCmdBeginQuery"));
- vkCmdEndQuery = reinterpret_cast<PFN_vkCmdEndQuery>(vkGetInstanceProcAddr(instance, "vkCmdEndQuery"));
- vkCmdResetQueryPool = reinterpret_cast<PFN_vkCmdResetQueryPool>(vkGetInstanceProcAddr(instance, "vkCmdResetQueryPool"));
- vkCmdCopyQueryPoolResults = reinterpret_cast<PFN_vkCmdCopyQueryPoolResults>(vkGetInstanceProcAddr(instance, "vkCmdCopyQueryPoolResults"));
- vkCreateAndroidSurfaceKHR = reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR>(vkGetInstanceProcAddr(instance, "vkCreateAndroidSurfaceKHR"));
- vkDestroySurfaceKHR = reinterpret_cast<PFN_vkDestroySurfaceKHR>(vkGetInstanceProcAddr(instance, "vkDestroySurfaceKHR"));
- #endif
- }
- PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT;
- PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT;
- PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT;
- PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR;
- PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
- PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR;
- PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR;
- PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR;
- PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;
- PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;
- PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;
- PFN_vkQueuePresentKHR vkQueuePresentKHR;
- std::string to_vulkan_error_string(VkResult result)
- {
- switch (result)
- {
- #define STR(r) case VK_ ##r: return #r
- STR(NOT_READY);
- STR(TIMEOUT);
- STR(EVENT_SET);
- STR(EVENT_RESET);
- STR(INCOMPLETE);
- STR(ERROR_OUT_OF_HOST_MEMORY);
- STR(ERROR_OUT_OF_DEVICE_MEMORY);
- STR(ERROR_INITIALIZATION_FAILED);
- STR(ERROR_DEVICE_LOST);
- STR(ERROR_MEMORY_MAP_FAILED);
- STR(ERROR_LAYER_NOT_PRESENT);
- STR(ERROR_EXTENSION_NOT_PRESENT);
- STR(ERROR_FEATURE_NOT_PRESENT);
- STR(ERROR_INCOMPATIBLE_DRIVER);
- STR(ERROR_TOO_MANY_OBJECTS);
- STR(ERROR_FORMAT_NOT_SUPPORTED);
- STR(ERROR_SURFACE_LOST_KHR);
- STR(ERROR_NATIVE_WINDOW_IN_USE_KHR);
- STR(SUBOPTIMAL_KHR);
- STR(ERROR_OUT_OF_DATE_KHR);
- STR(ERROR_INCOMPATIBLE_DISPLAY_KHR);
- STR(ERROR_VALIDATION_FAILED_EXT);
- STR(ERROR_INVALID_SHADER_NV);
- #undef STR
- default:
- return "UNKNOWN_ERROR";
- }
- }
- }
|