11#ifndef VULKANANDROID_H
12#define VULKANANDROID_H
18#ifndef VULKANANDROID_HPP
19#define VULKANANDROID_HPP
21#include "vulkan/vulkan.h"
23#if defined(__ANDROID__)
25#include <android/log.h>
26#include <android_native_app_glue.h>
27#include <android/configuration.h>
34 template<
typename T,
typename... Args>
37 return std::unique_ptr<T>(
new T(std::forward<Args>(args)...));
42extern android_app* androidApp;
44#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "vulkanExample", __VA_ARGS__))
45#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "vulkanExample", __VA_ARGS__))
46#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, "vulkanExample", __VA_ARGS__))
47#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "vulkanExample", __VA_ARGS__))
51extern PFN_vkCreateInstance vkCreateInstance;
52extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
53extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
54extern PFN_vkCreateDevice vkCreateDevice;
55extern PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
56extern PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;
57extern PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2;
58extern PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
59extern PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties;
60extern PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties;
61extern PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures;
62extern PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2;
64extern PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;
65extern PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
66extern PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties;
67extern PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
68extern PFN_vkCreateShaderModule vkCreateShaderModule;
69extern PFN_vkCreateBuffer vkCreateBuffer;
70extern PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
71extern PFN_vkMapMemory vkMapMemory;
72extern PFN_vkUnmapMemory vkUnmapMemory;
73extern PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
74extern PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
75extern PFN_vkBindBufferMemory vkBindBufferMemory;
76extern PFN_vkDestroyBuffer vkDestroyBuffer;
77extern PFN_vkAllocateMemory vkAllocateMemory;
78extern PFN_vkBindImageMemory vkBindImageMemory;
79extern PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
80extern PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
81extern PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
82extern PFN_vkCmdCopyImage vkCmdCopyImage;
83extern PFN_vkCmdBlitImage vkCmdBlitImage;
84extern PFN_vkCmdClearAttachments vkCmdClearAttachments;
85extern PFN_vkCreateSampler vkCreateSampler;
86extern PFN_vkDestroySampler vkDestroySampler;
87extern PFN_vkDestroyImage vkDestroyImage;
88extern PFN_vkFreeMemory vkFreeMemory;
89extern PFN_vkCreateRenderPass vkCreateRenderPass;
90extern PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
91extern PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
92extern PFN_vkCmdNextSubpass vkCmdNextSubpass;
93extern PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
94extern PFN_vkCmdClearColorImage vkCmdClearColorImage;
95extern PFN_vkCreateImage vkCreateImage;
96extern PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
97extern PFN_vkCreateImageView vkCreateImageView;
98extern PFN_vkDestroyImageView vkDestroyImageView;
99extern PFN_vkCreateSemaphore vkCreateSemaphore;
100extern PFN_vkDestroySemaphore vkDestroySemaphore;
101extern PFN_vkCreateFence vkCreateFence;
102extern PFN_vkDestroyFence vkDestroyFence;
103extern PFN_vkWaitForFences vkWaitForFences;
104extern PFN_vkResetFences vkResetFences;
105extern PFN_vkResetDescriptorPool vkResetDescriptorPool;
106extern PFN_vkCreateCommandPool vkCreateCommandPool;
107extern PFN_vkDestroyCommandPool vkDestroyCommandPool;
108extern PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
109extern PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
110extern PFN_vkEndCommandBuffer vkEndCommandBuffer;
111extern PFN_vkGetDeviceQueue vkGetDeviceQueue;
112extern PFN_vkQueueSubmit vkQueueSubmit;
113extern PFN_vkQueueWaitIdle vkQueueWaitIdle;
114extern PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
115extern PFN_vkCreateFramebuffer vkCreateFramebuffer;
116extern PFN_vkCreatePipelineCache vkCreatePipelineCache;
117extern PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
118extern PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
119extern PFN_vkCreateComputePipelines vkCreateComputePipelines;
120extern PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
121extern PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
122extern PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
123extern PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
124extern PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
125extern PFN_vkCmdBindPipeline vkCmdBindPipeline;
126extern PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
127extern PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
128extern PFN_vkCmdSetViewport vkCmdSetViewport;
129extern PFN_vkCmdSetScissor vkCmdSetScissor;
130extern PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
131extern PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
132extern PFN_vkCmdPushConstants vkCmdPushConstants;
133extern PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
134extern PFN_vkCmdDraw vkCmdDraw;
135extern PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
136extern PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
137extern PFN_vkCmdDispatch vkCmdDispatch;
138extern PFN_vkDestroyPipeline vkDestroyPipeline;
139extern PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
140extern PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
141extern PFN_vkDestroyDevice vkDestroyDevice;
142extern PFN_vkDestroyInstance vkDestroyInstance;
143extern PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
144extern PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
145extern PFN_vkDestroyRenderPass vkDestroyRenderPass;
146extern PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
147extern PFN_vkDestroyShaderModule vkDestroyShaderModule;
148extern PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
149extern PFN_vkCreateQueryPool vkCreateQueryPool;
150extern PFN_vkDestroyQueryPool vkDestroyQueryPool;
151extern PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
152extern PFN_vkCmdBeginQuery vkCmdBeginQuery;
153extern PFN_vkCmdEndQuery vkCmdEndQuery;
154extern PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
155extern PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
157extern PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
158extern PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
165 const int32_t DOUBLE_TAP_TIMEOUT = 300 * 1000000;
166 const int32_t TAP_TIMEOUT = 180 * 1000000;
167 const int32_t DOUBLE_TAP_SLOP = 100;
168 const int32_t TAP_SLOP = 8;
171 extern int32_t screenDensity;
173 bool loadVulkanLibrary();
174 void loadVulkanFunctions(VkInstance instance);
175 void freeVulkanLibrary();
176 void getDeviceConfig();
177 void showAlert(
const char* message);
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueCount, NULL)
std::unique_ptr< T > make_unique(Args &&... args)