/* * Android Vulkan function pointer prototypes * * Copyright (C) 2016 by Sascha Willems - www.saschawillems.de * * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT) */ #pragma once #ifndef VULKANANDROID_H #define VULKANANDROID_H // Vulkan needs to be loaded dynamically on android #pragma once #ifndef VULKANANDROID_HPP #define VULKANANDROID_HPP #include "vulkan/vulkan.h" #if defined(__ANDROID__) #include #include #include #include #include // Missing from the NDK namespace std { template std::unique_ptr make_unique(Args&&... args) { return std::unique_ptr(new T(std::forward(args)...)); } } // Global reference to android application object extern android_app* androidApp; #define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "vulkanExample", __VA_ARGS__)) #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "vulkanExample", __VA_ARGS__)) #define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, "vulkanExample", __VA_ARGS__)) #define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "vulkanExample", __VA_ARGS__)) // Function pointer prototypes // Not complete, just the functions used in the caps viewer! extern PFN_vkCreateInstance vkCreateInstance; extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; extern PFN_vkCreateDevice vkCreateDevice; extern PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; extern PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; extern PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2; extern PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; extern PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; extern PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; extern PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; extern PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2; extern PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; extern PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; extern PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; extern PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; extern PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; extern PFN_vkCreateShaderModule vkCreateShaderModule; extern PFN_vkCreateBuffer vkCreateBuffer; extern PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; extern PFN_vkMapMemory vkMapMemory; extern PFN_vkUnmapMemory vkUnmapMemory; extern PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; extern PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; extern PFN_vkBindBufferMemory vkBindBufferMemory; extern PFN_vkDestroyBuffer vkDestroyBuffer; extern PFN_vkAllocateMemory vkAllocateMemory; extern PFN_vkBindImageMemory vkBindImageMemory; extern PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; extern PFN_vkCmdCopyBuffer vkCmdCopyBuffer; extern PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; extern PFN_vkCmdCopyImage vkCmdCopyImage; extern PFN_vkCmdBlitImage vkCmdBlitImage; extern PFN_vkCmdClearAttachments vkCmdClearAttachments; extern PFN_vkCreateSampler vkCreateSampler; extern PFN_vkDestroySampler vkDestroySampler; extern PFN_vkDestroyImage vkDestroyImage; extern PFN_vkFreeMemory vkFreeMemory; extern PFN_vkCreateRenderPass vkCreateRenderPass; extern PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; extern PFN_vkCmdEndRenderPass vkCmdEndRenderPass; extern PFN_vkCmdNextSubpass vkCmdNextSubpass; extern PFN_vkCmdExecuteCommands vkCmdExecuteCommands; extern PFN_vkCmdClearColorImage vkCmdClearColorImage; extern PFN_vkCreateImage vkCreateImage; extern PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; extern PFN_vkCreateImageView vkCreateImageView; extern PFN_vkDestroyImageView vkDestroyImageView; extern PFN_vkCreateSemaphore vkCreateSemaphore; extern PFN_vkDestroySemaphore vkDestroySemaphore; extern PFN_vkCreateFence vkCreateFence; extern PFN_vkDestroyFence vkDestroyFence; extern PFN_vkWaitForFences vkWaitForFences; extern PFN_vkResetFences vkResetFences; extern PFN_vkResetDescriptorPool vkResetDescriptorPool; extern PFN_vkCreateCommandPool vkCreateCommandPool; extern PFN_vkDestroyCommandPool vkDestroyCommandPool; extern PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; extern PFN_vkBeginCommandBuffer vkBeginCommandBuffer; extern PFN_vkEndCommandBuffer vkEndCommandBuffer; extern PFN_vkGetDeviceQueue vkGetDeviceQueue; extern PFN_vkQueueSubmit vkQueueSubmit; extern PFN_vkQueueWaitIdle vkQueueWaitIdle; extern PFN_vkDeviceWaitIdle vkDeviceWaitIdle; extern PFN_vkCreateFramebuffer vkCreateFramebuffer; extern PFN_vkCreatePipelineCache vkCreatePipelineCache; extern PFN_vkCreatePipelineLayout vkCreatePipelineLayout; extern PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; extern PFN_vkCreateComputePipelines vkCreateComputePipelines; extern PFN_vkCreateDescriptorPool vkCreateDescriptorPool; extern PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; extern PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; extern PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; extern PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; extern PFN_vkCmdBindPipeline vkCmdBindPipeline; extern PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; extern PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; extern PFN_vkCmdSetViewport vkCmdSetViewport; extern PFN_vkCmdSetScissor vkCmdSetScissor; extern PFN_vkCmdSetLineWidth vkCmdSetLineWidth; extern PFN_vkCmdSetDepthBias vkCmdSetDepthBias; extern PFN_vkCmdPushConstants vkCmdPushConstants; extern PFN_vkCmdDrawIndexed vkCmdDrawIndexed; extern PFN_vkCmdDraw vkCmdDraw; extern PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; extern PFN_vkCmdDrawIndirect vkCmdDrawIndirect; extern PFN_vkCmdDispatch vkCmdDispatch; extern PFN_vkDestroyPipeline vkDestroyPipeline; extern PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; extern PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; extern PFN_vkDestroyDevice vkDestroyDevice; extern PFN_vkDestroyInstance vkDestroyInstance; extern PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; extern PFN_vkFreeCommandBuffers vkFreeCommandBuffers; extern PFN_vkDestroyRenderPass vkDestroyRenderPass; extern PFN_vkDestroyFramebuffer vkDestroyFramebuffer; extern PFN_vkDestroyShaderModule vkDestroyShaderModule; extern PFN_vkDestroyPipelineCache vkDestroyPipelineCache; extern PFN_vkCreateQueryPool vkCreateQueryPool; extern PFN_vkDestroyQueryPool vkDestroyQueryPool; extern PFN_vkGetQueryPoolResults vkGetQueryPoolResults; extern PFN_vkCmdBeginQuery vkCmdBeginQuery; extern PFN_vkCmdEndQuery vkCmdEndQuery; extern PFN_vkCmdResetQueryPool vkCmdResetQueryPool; extern PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; extern PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; extern PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; extern PFN_vkCmdFillBuffer vkCmdFillBuffer; namespace vks { namespace android { /* @brief Touch control thresholds from Android NDK samples */ const int32_t DOUBLE_TAP_TIMEOUT = 300 * 1000000; const int32_t TAP_TIMEOUT = 180 * 1000000; const int32_t DOUBLE_TAP_SLOP = 100; const int32_t TAP_SLOP = 8; /** @brief Density of the device screen (in DPI) */ extern int32_t screenDensity; bool loadVulkanLibrary(); void loadVulkanFunctions(VkInstance instance); void freeVulkanLibrary(); void getDeviceConfig(); void showAlert(const char* message); } } #endif #endif // VULKANANDROID_HPP #endif // VULKANANDROID_H