11#if defined(__ANDROID__)
12 #include <android/log.h>
14 #include <android/native_window_jni.h>
16android_app* androidApp;
18PFN_vkCreateInstance vkCreateInstance;
19PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
20PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
21PFN_vkCreateDevice vkCreateDevice;
22PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
23PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;
24PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2;
25PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
26PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties;
27PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties;
28PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures;
29PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2;
31PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;
32PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
33PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties;
34PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
35PFN_vkCreateShaderModule vkCreateShaderModule;
36PFN_vkCreateBuffer vkCreateBuffer;
37PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
38PFN_vkMapMemory vkMapMemory;
39PFN_vkUnmapMemory vkUnmapMemory;
40PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
41PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
42PFN_vkBindBufferMemory vkBindBufferMemory;
43PFN_vkDestroyBuffer vkDestroyBuffer;
44PFN_vkAllocateMemory vkAllocateMemory;
45PFN_vkBindImageMemory vkBindImageMemory;
46PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
47PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
48PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
49PFN_vkCmdCopyImage vkCmdCopyImage;
50PFN_vkCmdBlitImage vkCmdBlitImage;
51PFN_vkCmdClearAttachments vkCmdClearAttachments;
52PFN_vkCreateSampler vkCreateSampler;
53PFN_vkDestroySampler vkDestroySampler;
54PFN_vkDestroyImage vkDestroyImage;
55PFN_vkFreeMemory vkFreeMemory;
56PFN_vkCreateRenderPass vkCreateRenderPass;
57PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
58PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
59PFN_vkCmdNextSubpass vkCmdNextSubpass;
60PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
61PFN_vkCmdClearColorImage vkCmdClearColorImage;
62PFN_vkCreateImage vkCreateImage;
63PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
64PFN_vkCreateImageView vkCreateImageView;
65PFN_vkDestroyImageView vkDestroyImageView;
66PFN_vkCreateSemaphore vkCreateSemaphore;
67PFN_vkDestroySemaphore vkDestroySemaphore;
68PFN_vkCreateFence vkCreateFence;
69PFN_vkDestroyFence vkDestroyFence;
70PFN_vkWaitForFences vkWaitForFences;
71PFN_vkResetFences vkResetFences;
72PFN_vkResetDescriptorPool vkResetDescriptorPool;
73PFN_vkCreateCommandPool vkCreateCommandPool;
74PFN_vkDestroyCommandPool vkDestroyCommandPool;
75PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
76PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
77PFN_vkEndCommandBuffer vkEndCommandBuffer;
78PFN_vkGetDeviceQueue vkGetDeviceQueue;
79PFN_vkQueueSubmit vkQueueSubmit;
80PFN_vkQueueWaitIdle vkQueueWaitIdle;
81PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
82PFN_vkCreateFramebuffer vkCreateFramebuffer;
83PFN_vkCreatePipelineCache vkCreatePipelineCache;
84PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
85PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
86PFN_vkCreateComputePipelines vkCreateComputePipelines;
87PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
88PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
89PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
90PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
91PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
92PFN_vkCmdBindPipeline vkCmdBindPipeline;
93PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
94PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
95PFN_vkCmdSetViewport vkCmdSetViewport;
96PFN_vkCmdSetScissor vkCmdSetScissor;
97PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
98PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
99PFN_vkCmdPushConstants vkCmdPushConstants;
100PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
101PFN_vkCmdDraw vkCmdDraw;
102PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
103PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
104PFN_vkCmdDispatch vkCmdDispatch;
105PFN_vkDestroyPipeline vkDestroyPipeline;
106PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
107PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
108PFN_vkDestroyDevice vkDestroyDevice;
109PFN_vkDestroyInstance vkDestroyInstance;
110PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
111PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
112PFN_vkDestroyRenderPass vkDestroyRenderPass;
113PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
114PFN_vkDestroyShaderModule vkDestroyShaderModule;
115PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
116PFN_vkCreateQueryPool vkCreateQueryPool;
117PFN_vkDestroyQueryPool vkDestroyQueryPool;
118PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
119PFN_vkCmdBeginQuery vkCmdBeginQuery;
120PFN_vkCmdEndQuery vkCmdEndQuery;
121PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
122PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
124PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
125PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
127int32_t vks::android::screenDensity;
136 bool loadVulkanLibrary()
138 __android_log_print(ANDROID_LOG_INFO,
"vulkanandroid",
"Loading libvulkan.so...\n");
141 libVulkan = dlopen(
"libvulkan.so", RTLD_NOW | RTLD_LOCAL);
144 __android_log_print(ANDROID_LOG_INFO,
"vulkanandroid",
"Could not load vulkan library : %s!\n", dlerror());
149 vkEnumerateInstanceExtensionProperties =
reinterpret_cast<PFN_vkEnumerateInstanceExtensionProperties
>(dlsym(libVulkan,
"vkEnumerateInstanceExtensionProperties"));
150 vkEnumerateInstanceLayerProperties =
reinterpret_cast<PFN_vkEnumerateInstanceLayerProperties
>(dlsym(libVulkan,
"vkEnumerateInstanceLayerProperties"));
151 vkCreateInstance =
reinterpret_cast<PFN_vkCreateInstance
>(dlsym(libVulkan,
"vkCreateInstance"));
152 vkGetInstanceProcAddr =
reinterpret_cast<PFN_vkGetInstanceProcAddr
>(dlsym(libVulkan,
"vkGetInstanceProcAddr"));
153 vkGetDeviceProcAddr =
reinterpret_cast<PFN_vkGetDeviceProcAddr
>(dlsym(libVulkan,
"vkGetDeviceProcAddr"));
159 void loadVulkanFunctions(VkInstance instance)
161 __android_log_print(ANDROID_LOG_INFO,
"vulkanandroid",
"Loading instance based function pointers...\n");
163 vkEnumeratePhysicalDevices =
reinterpret_cast<PFN_vkEnumeratePhysicalDevices
>(vkGetInstanceProcAddr(instance,
"vkEnumeratePhysicalDevices"));
164 vkGetPhysicalDeviceProperties =
reinterpret_cast<PFN_vkGetPhysicalDeviceProperties
>(vkGetInstanceProcAddr(instance,
"vkGetPhysicalDeviceProperties"));
165 vkGetPhysicalDeviceProperties2 =
reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2
>(vkGetInstanceProcAddr(instance,
"vkGetPhysicalDeviceProperties2"));
166 vkEnumerateDeviceLayerProperties =
reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties
>(vkGetInstanceProcAddr(instance,
"vkEnumerateDeviceLayerProperties"));
167 vkEnumerateDeviceExtensionProperties =
reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties
>(vkGetInstanceProcAddr(instance,
"vkEnumerateDeviceExtensionProperties"));
169 vkGetPhysicalDeviceFeatures =
reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures
>(vkGetInstanceProcAddr(instance,
"vkGetPhysicalDeviceFeatures"));
170 vkGetPhysicalDeviceFeatures2 =
reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures2
>(vkGetInstanceProcAddr(instance,
"vkGetPhysicalDeviceFeatures2"));
171 vkCreateDevice =
reinterpret_cast<PFN_vkCreateDevice
>(vkGetInstanceProcAddr(instance,
"vkCreateDevice"));
172 vkGetPhysicalDeviceFormatProperties =
reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties
>(vkGetInstanceProcAddr(instance,
"vkGetPhysicalDeviceFormatProperties"));
173 vkGetPhysicalDeviceMemoryProperties =
reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties
>(vkGetInstanceProcAddr(instance,
"vkGetPhysicalDeviceMemoryProperties"));
175 vkCmdPipelineBarrier =
reinterpret_cast<PFN_vkCmdPipelineBarrier
>(vkGetInstanceProcAddr(instance,
"vkCmdPipelineBarrier"));
176 vkCreateShaderModule =
reinterpret_cast<PFN_vkCreateShaderModule
>(vkGetInstanceProcAddr(instance,
"vkCreateShaderModule"));
178 vkCreateBuffer =
reinterpret_cast<PFN_vkCreateBuffer
>(vkGetInstanceProcAddr(instance,
"vkCreateBuffer"));
179 vkGetBufferMemoryRequirements =
reinterpret_cast<PFN_vkGetBufferMemoryRequirements
>(vkGetInstanceProcAddr(instance,
"vkGetBufferMemoryRequirements"));
180 vkMapMemory =
reinterpret_cast<PFN_vkMapMemory
>(vkGetInstanceProcAddr(instance,
"vkMapMemory"));
181 vkUnmapMemory =
reinterpret_cast<PFN_vkUnmapMemory
>(vkGetInstanceProcAddr(instance,
"vkUnmapMemory"));
182 vkFlushMappedMemoryRanges =
reinterpret_cast<PFN_vkFlushMappedMemoryRanges
>(vkGetInstanceProcAddr(instance,
"vkFlushMappedMemoryRanges"));
183 vkInvalidateMappedMemoryRanges =
reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges
>(vkGetInstanceProcAddr(instance,
"vkInvalidateMappedMemoryRanges"));
184 vkBindBufferMemory =
reinterpret_cast<PFN_vkBindBufferMemory
>(vkGetInstanceProcAddr(instance,
"vkBindBufferMemory"));
185 vkDestroyBuffer =
reinterpret_cast<PFN_vkDestroyBuffer
>(vkGetInstanceProcAddr(instance,
"vkDestroyBuffer"));
187 vkAllocateMemory =
reinterpret_cast<PFN_vkAllocateMemory
>(vkGetInstanceProcAddr(instance,
"vkAllocateMemory"));
188 vkFreeMemory =
reinterpret_cast<PFN_vkFreeMemory
>(vkGetInstanceProcAddr(instance,
"vkFreeMemory"));
189 vkCreateRenderPass =
reinterpret_cast<PFN_vkCreateRenderPass
>(vkGetInstanceProcAddr(instance,
"vkCreateRenderPass"));
190 vkCmdBeginRenderPass =
reinterpret_cast<PFN_vkCmdBeginRenderPass
>(vkGetInstanceProcAddr(instance,
"vkCmdBeginRenderPass"));
191 vkCmdEndRenderPass =
reinterpret_cast<PFN_vkCmdEndRenderPass
>(vkGetInstanceProcAddr(instance,
"vkCmdEndRenderPass"));
192 vkCmdNextSubpass =
reinterpret_cast<PFN_vkCmdNextSubpass
>(vkGetInstanceProcAddr(instance,
"vkCmdNextSubpass"));
193 vkCmdExecuteCommands =
reinterpret_cast<PFN_vkCmdExecuteCommands
>(vkGetInstanceProcAddr(instance,
"vkCmdExecuteCommands"));
194 vkCmdClearColorImage =
reinterpret_cast<PFN_vkCmdClearColorImage
>(vkGetInstanceProcAddr(instance,
"vkCmdClearColorImage"));
196 vkCreateImage =
reinterpret_cast<PFN_vkCreateImage
>(vkGetInstanceProcAddr(instance,
"vkCreateImage"));
197 vkGetImageMemoryRequirements =
reinterpret_cast<PFN_vkGetImageMemoryRequirements
>(vkGetInstanceProcAddr(instance,
"vkGetImageMemoryRequirements"));
198 vkCreateImageView =
reinterpret_cast<PFN_vkCreateImageView
>(vkGetInstanceProcAddr(instance,
"vkCreateImageView"));
199 vkDestroyImageView =
reinterpret_cast<PFN_vkDestroyImageView
>(vkGetInstanceProcAddr(instance,
"vkDestroyImageView"));
200 vkBindImageMemory =
reinterpret_cast<PFN_vkBindImageMemory
>(vkGetInstanceProcAddr(instance,
"vkBindImageMemory"));
201 vkGetImageSubresourceLayout =
reinterpret_cast<PFN_vkGetImageSubresourceLayout
>(vkGetInstanceProcAddr(instance,
"vkGetImageSubresourceLayout"));
202 vkCmdCopyImage =
reinterpret_cast<PFN_vkCmdCopyImage
>(vkGetInstanceProcAddr(instance,
"vkCmdCopyImage"));
203 vkCmdBlitImage =
reinterpret_cast<PFN_vkCmdBlitImage
>(vkGetInstanceProcAddr(instance,
"vkCmdBlitImage"));
204 vkDestroyImage =
reinterpret_cast<PFN_vkDestroyImage
>(vkGetInstanceProcAddr(instance,
"vkDestroyImage"));
206 vkCmdClearAttachments =
reinterpret_cast<PFN_vkCmdClearAttachments
>(vkGetInstanceProcAddr(instance,
"vkCmdClearAttachments"));
208 vkCmdCopyBuffer =
reinterpret_cast<PFN_vkCmdCopyBuffer
>(vkGetInstanceProcAddr(instance,
"vkCmdCopyBuffer"));
209 vkCmdCopyBufferToImage =
reinterpret_cast<PFN_vkCmdCopyBufferToImage
>(vkGetInstanceProcAddr(instance,
"vkCmdCopyBufferToImage"));
211 vkCreateSampler =
reinterpret_cast<PFN_vkCreateSampler
>(vkGetInstanceProcAddr(instance,
"vkCreateSampler"));
212 vkDestroySampler =
reinterpret_cast<PFN_vkDestroySampler
>(vkGetInstanceProcAddr(instance,
"vkDestroySampler"));;
214 vkCreateSemaphore =
reinterpret_cast<PFN_vkCreateSemaphore
>(vkGetInstanceProcAddr(instance,
"vkCreateSemaphore"));
215 vkDestroySemaphore =
reinterpret_cast<PFN_vkDestroySemaphore
>(vkGetInstanceProcAddr(instance,
"vkDestroySemaphore"));
217 vkCreateFence =
reinterpret_cast<PFN_vkCreateFence
>(vkGetInstanceProcAddr(instance,
"vkCreateFence"));
218 vkDestroyFence =
reinterpret_cast<PFN_vkDestroyFence
>(vkGetInstanceProcAddr(instance,
"vkDestroyFence"));
219 vkWaitForFences =
reinterpret_cast<PFN_vkWaitForFences
>(vkGetInstanceProcAddr(instance,
"vkWaitForFences"));
220 vkResetFences =
reinterpret_cast<PFN_vkResetFences
>(vkGetInstanceProcAddr(instance,
"vkResetFences"));;
221 vkResetDescriptorPool =
reinterpret_cast<PFN_vkResetDescriptorPool
>(vkGetInstanceProcAddr(instance,
"vkResetDescriptorPool"));
223 vkCreateCommandPool =
reinterpret_cast<PFN_vkCreateCommandPool
>(vkGetInstanceProcAddr(instance,
"vkCreateCommandPool"));
224 vkDestroyCommandPool =
reinterpret_cast<PFN_vkDestroyCommandPool
>(vkGetInstanceProcAddr(instance,
"vkDestroyCommandPool"));;
226 vkAllocateCommandBuffers =
reinterpret_cast<PFN_vkAllocateCommandBuffers
>(vkGetInstanceProcAddr(instance,
"vkAllocateCommandBuffers"));
227 vkBeginCommandBuffer =
reinterpret_cast<PFN_vkBeginCommandBuffer
>(vkGetInstanceProcAddr(instance,
"vkBeginCommandBuffer"));
228 vkEndCommandBuffer =
reinterpret_cast<PFN_vkEndCommandBuffer
>(vkGetInstanceProcAddr(instance,
"vkEndCommandBuffer"));
230 vkGetDeviceQueue =
reinterpret_cast<PFN_vkGetDeviceQueue
>(vkGetInstanceProcAddr(instance,
"vkGetDeviceQueue"));
231 vkQueueSubmit =
reinterpret_cast<PFN_vkQueueSubmit
>(vkGetInstanceProcAddr(instance,
"vkQueueSubmit"));
232 vkQueueWaitIdle =
reinterpret_cast<PFN_vkQueueWaitIdle
>(vkGetInstanceProcAddr(instance,
"vkQueueWaitIdle"));
234 vkDeviceWaitIdle =
reinterpret_cast<PFN_vkDeviceWaitIdle
>(vkGetInstanceProcAddr(instance,
"vkDeviceWaitIdle"));
236 vkCreateFramebuffer =
reinterpret_cast<PFN_vkCreateFramebuffer
>(vkGetInstanceProcAddr(instance,
"vkCreateFramebuffer"));
238 vkCreatePipelineCache =
reinterpret_cast<PFN_vkCreatePipelineCache
>(vkGetInstanceProcAddr(instance,
"vkCreatePipelineCache"));
239 vkCreatePipelineLayout =
reinterpret_cast<PFN_vkCreatePipelineLayout
>(vkGetInstanceProcAddr(instance,
"vkCreatePipelineLayout"));
240 vkCreateGraphicsPipelines =
reinterpret_cast<PFN_vkCreateGraphicsPipelines
>(vkGetInstanceProcAddr(instance,
"vkCreateGraphicsPipelines"));
241 vkCreateComputePipelines =
reinterpret_cast<PFN_vkCreateComputePipelines
>(vkGetInstanceProcAddr(instance,
"vkCreateComputePipelines"));
243 vkCreateDescriptorPool =
reinterpret_cast<PFN_vkCreateDescriptorPool
>(vkGetInstanceProcAddr(instance,
"vkCreateDescriptorPool"));
244 vkCreateDescriptorSetLayout =
reinterpret_cast<PFN_vkCreateDescriptorSetLayout
>(vkGetInstanceProcAddr(instance,
"vkCreateDescriptorSetLayout"));
246 vkAllocateDescriptorSets =
reinterpret_cast<PFN_vkAllocateDescriptorSets
>(vkGetInstanceProcAddr(instance,
"vkAllocateDescriptorSets"));
247 vkUpdateDescriptorSets =
reinterpret_cast<PFN_vkUpdateDescriptorSets
>(vkGetInstanceProcAddr(instance,
"vkUpdateDescriptorSets"));
249 vkCmdBindDescriptorSets =
reinterpret_cast<PFN_vkCmdBindDescriptorSets
>(vkGetInstanceProcAddr(instance,
"vkCmdBindDescriptorSets"));
250 vkCmdBindPipeline =
reinterpret_cast<PFN_vkCmdBindPipeline
>(vkGetInstanceProcAddr(instance,
"vkCmdBindPipeline"));
251 vkCmdBindVertexBuffers =
reinterpret_cast<PFN_vkCmdBindVertexBuffers
>(vkGetInstanceProcAddr(instance,
"vkCmdBindVertexBuffers"));
252 vkCmdBindIndexBuffer =
reinterpret_cast<PFN_vkCmdBindIndexBuffer
>(vkGetInstanceProcAddr(instance,
"vkCmdBindIndexBuffer"));
254 vkCmdSetViewport =
reinterpret_cast<PFN_vkCmdSetViewport
>(vkGetInstanceProcAddr(instance,
"vkCmdSetViewport"));
255 vkCmdSetScissor =
reinterpret_cast<PFN_vkCmdSetScissor
>(vkGetInstanceProcAddr(instance,
"vkCmdSetScissor"));
256 vkCmdSetLineWidth =
reinterpret_cast<PFN_vkCmdSetLineWidth
>(vkGetInstanceProcAddr(instance,
"vkCmdSetLineWidth"));
257 vkCmdSetDepthBias =
reinterpret_cast<PFN_vkCmdSetDepthBias
>(vkGetInstanceProcAddr(instance,
"vkCmdSetDepthBias"));
258 vkCmdPushConstants =
reinterpret_cast<PFN_vkCmdPushConstants
>(vkGetInstanceProcAddr(instance,
"vkCmdPushConstants"));;
260 vkCmdDrawIndexed =
reinterpret_cast<PFN_vkCmdDrawIndexed
>(vkGetInstanceProcAddr(instance,
"vkCmdDrawIndexed"));
261 vkCmdDraw =
reinterpret_cast<PFN_vkCmdDraw
>(vkGetInstanceProcAddr(instance,
"vkCmdDraw"));
262 vkCmdDrawIndexedIndirect =
reinterpret_cast<PFN_vkCmdDrawIndexedIndirect
>(vkGetInstanceProcAddr(instance,
"vkCmdDrawIndexedIndirect"));
263 vkCmdDrawIndirect =
reinterpret_cast<PFN_vkCmdDrawIndirect
>(vkGetInstanceProcAddr(instance,
"vkCmdDrawIndirect"));
264 vkCmdDispatch =
reinterpret_cast<PFN_vkCmdDispatch
>(vkGetInstanceProcAddr(instance,
"vkCmdDispatch"));
266 vkDestroyPipeline =
reinterpret_cast<PFN_vkDestroyPipeline
>(vkGetInstanceProcAddr(instance,
"vkDestroyPipeline"));
267 vkDestroyPipelineLayout =
reinterpret_cast<PFN_vkDestroyPipelineLayout
>(vkGetInstanceProcAddr(instance,
"vkDestroyPipelineLayout"));;
268 vkDestroyDescriptorSetLayout =
reinterpret_cast<PFN_vkDestroyDescriptorSetLayout
>(vkGetInstanceProcAddr(instance,
"vkDestroyDescriptorSetLayout"));
269 vkDestroyDevice =
reinterpret_cast<PFN_vkDestroyDevice
>(vkGetInstanceProcAddr(instance,
"vkDestroyDevice"));
270 vkDestroyInstance =
reinterpret_cast<PFN_vkDestroyInstance
>(vkGetInstanceProcAddr(instance,
"vkDestroyInstance"));
271 vkDestroyDescriptorPool =
reinterpret_cast<PFN_vkDestroyDescriptorPool
>(vkGetInstanceProcAddr(instance,
"vkDestroyDescriptorPool"));
272 vkFreeCommandBuffers =
reinterpret_cast<PFN_vkFreeCommandBuffers
>(vkGetInstanceProcAddr(instance,
"vkFreeCommandBuffers"));
273 vkDestroyRenderPass =
reinterpret_cast<PFN_vkDestroyRenderPass
>(vkGetInstanceProcAddr(instance,
"vkDestroyRenderPass"));
274 vkDestroyFramebuffer =
reinterpret_cast<PFN_vkDestroyFramebuffer
>(vkGetInstanceProcAddr(instance,
"vkDestroyFramebuffer"));
275 vkDestroyShaderModule =
reinterpret_cast<PFN_vkDestroyShaderModule
>(vkGetInstanceProcAddr(instance,
"vkDestroyShaderModule"));
276 vkDestroyPipelineCache =
reinterpret_cast<PFN_vkDestroyPipelineCache
>(vkGetInstanceProcAddr(instance,
"vkDestroyPipelineCache"));
278 vkCreateQueryPool =
reinterpret_cast<PFN_vkCreateQueryPool
>(vkGetInstanceProcAddr(instance,
"vkCreateQueryPool"));
279 vkDestroyQueryPool =
reinterpret_cast<PFN_vkDestroyQueryPool
>(vkGetInstanceProcAddr(instance,
"vkDestroyQueryPool"));
280 vkGetQueryPoolResults =
reinterpret_cast<PFN_vkGetQueryPoolResults
>(vkGetInstanceProcAddr(instance,
"vkGetQueryPoolResults"));
282 vkCmdBeginQuery =
reinterpret_cast<PFN_vkCmdBeginQuery
>(vkGetInstanceProcAddr(instance,
"vkCmdBeginQuery"));
283 vkCmdEndQuery =
reinterpret_cast<PFN_vkCmdEndQuery
>(vkGetInstanceProcAddr(instance,
"vkCmdEndQuery"));
284 vkCmdResetQueryPool =
reinterpret_cast<PFN_vkCmdResetQueryPool
>(vkGetInstanceProcAddr(instance,
"vkCmdResetQueryPool"));
285 vkCmdCopyQueryPoolResults =
reinterpret_cast<PFN_vkCmdCopyQueryPoolResults
>(vkGetInstanceProcAddr(instance,
"vkCmdCopyQueryPoolResults"));
287 vkCreateAndroidSurfaceKHR =
reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR
>(vkGetInstanceProcAddr(instance,
"vkCreateAndroidSurfaceKHR"));
288 vkDestroySurfaceKHR =
reinterpret_cast<PFN_vkDestroySurfaceKHR
>(vkGetInstanceProcAddr(instance,
"vkDestroySurfaceKHR"));
291 void freeVulkanLibrary()
296 void getDeviceConfig()
299 AConfiguration* config = AConfiguration_new();
300 AConfiguration_fromAssetManager(config, androidApp->activity->assetManager);
301 vks::android::screenDensity = AConfiguration_getDensity(config);
302 AConfiguration_delete(config);
306 void showAlert(
const char* message) {
308 androidApp->activity->vm->AttachCurrentThread(&jni, NULL);
310 jstring jmessage = jni->NewStringUTF(message);
312 jclass clazz = jni->GetObjectClass(androidApp->activity->clazz);
314 jmethodID methodID = jni->GetMethodID(clazz,
"showAlert",
"(Ljava/lang/String;)V");
315 jni->CallVoidMethod(androidApp->activity->clazz, methodID, jmessage);
316 jni->DeleteLocalRef(jmessage);
318 androidApp->activity->vm->DetachCurrentThread();
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueCount, NULL)