PeriDyno 1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
VulkanAndroid.cpp
Go to the documentation of this file.
1/*
2* Android Vulkan function pointer loader
3*
4* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
5*
6* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
7*/
8
9#include "VulkanAndroid.h"
10
11#if defined(__ANDROID__)
12 #include <android/log.h>
13 #include <dlfcn.h>
14 #include <android/native_window_jni.h>
15
16android_app* androidApp;
17
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;
30PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;
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;
123
124PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
125PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
126
127int32_t vks::android::screenDensity;
128
129void *libVulkan;
130
131namespace vks
132{
133 namespace android
134 {
135 // Dynamically load Vulkan library and base function pointers
136 bool loadVulkanLibrary()
137 {
138 __android_log_print(ANDROID_LOG_INFO, "vulkanandroid", "Loading libvulkan.so...\n");
139
140 // Load vulkan library
141 libVulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
142 if (!libVulkan)
143 {
144 __android_log_print(ANDROID_LOG_INFO, "vulkanandroid", "Could not load vulkan library : %s!\n", dlerror());
145 return false;
146 }
147
148 // Load base function pointers
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"));
154
155 return true;
156 }
157
158 // Load instance based Vulkan function pointers
159 void loadVulkanFunctions(VkInstance instance)
160 {
161 __android_log_print(ANDROID_LOG_INFO, "vulkanandroid", "Loading instance based function pointers...\n");
162
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"));
168 vkGetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceQueueFamilyProperties"));
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"));
174
175 vkCmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(vkGetInstanceProcAddr(instance, "vkCmdPipelineBarrier"));
176 vkCreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(vkGetInstanceProcAddr(instance, "vkCreateShaderModule"));
177
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"));
186
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"));
195
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"));
205
206 vkCmdClearAttachments = reinterpret_cast<PFN_vkCmdClearAttachments>(vkGetInstanceProcAddr(instance, "vkCmdClearAttachments"));
207
208 vkCmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(vkGetInstanceProcAddr(instance, "vkCmdCopyBuffer"));
209 vkCmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(vkGetInstanceProcAddr(instance, "vkCmdCopyBufferToImage"));
210
211 vkCreateSampler = reinterpret_cast<PFN_vkCreateSampler>(vkGetInstanceProcAddr(instance, "vkCreateSampler"));
212 vkDestroySampler = reinterpret_cast<PFN_vkDestroySampler>(vkGetInstanceProcAddr(instance, "vkDestroySampler"));;
213
214 vkCreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(vkGetInstanceProcAddr(instance, "vkCreateSemaphore"));
215 vkDestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(vkGetInstanceProcAddr(instance, "vkDestroySemaphore"));
216
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"));
222
223 vkCreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(vkGetInstanceProcAddr(instance, "vkCreateCommandPool"));
224 vkDestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(vkGetInstanceProcAddr(instance, "vkDestroyCommandPool"));;
225
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"));
229
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"));
233
234 vkDeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(vkGetInstanceProcAddr(instance, "vkDeviceWaitIdle"));
235
236 vkCreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(vkGetInstanceProcAddr(instance, "vkCreateFramebuffer"));
237
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"));
242
243 vkCreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(vkGetInstanceProcAddr(instance, "vkCreateDescriptorPool"));
244 vkCreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(vkGetInstanceProcAddr(instance, "vkCreateDescriptorSetLayout"));
245
246 vkAllocateDescriptorSets = reinterpret_cast<PFN_vkAllocateDescriptorSets>(vkGetInstanceProcAddr(instance, "vkAllocateDescriptorSets"));
247 vkUpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(vkGetInstanceProcAddr(instance, "vkUpdateDescriptorSets"));
248
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"));
253
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"));;
259
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"));
265
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"));
277
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"));
281
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"));
286
287 vkCreateAndroidSurfaceKHR = reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR>(vkGetInstanceProcAddr(instance, "vkCreateAndroidSurfaceKHR"));
288 vkDestroySurfaceKHR = reinterpret_cast<PFN_vkDestroySurfaceKHR>(vkGetInstanceProcAddr(instance, "vkDestroySurfaceKHR"));
289 }
290
291 void freeVulkanLibrary()
292 {
293 dlclose(libVulkan);
294 }
295
296 void getDeviceConfig()
297 {
298 // Screen density
299 AConfiguration* config = AConfiguration_new();
300 AConfiguration_fromAssetManager(config, androidApp->activity->assetManager);
301 vks::android::screenDensity = AConfiguration_getDensity(config);
302 AConfiguration_delete(config);
303 }
304
305 // Displays a native alert dialog using JNI
306 void showAlert(const char* message) {
307 JNIEnv* jni;
308 androidApp->activity->vm->AttachCurrentThread(&jni, NULL);
309
310 jstring jmessage = jni->NewStringUTF(message);
311
312 jclass clazz = jni->GetObjectClass(androidApp->activity->clazz);
313 // Signature has to match java implementation (arguments)
314 jmethodID methodID = jni->GetMethodID(clazz, "showAlert", "(Ljava/lang/String;)V");
315 jni->CallVoidMethod(androidApp->activity->clazz, methodID, jmessage);
316 jni->DeleteLocalRef(jmessage);
317
318 androidApp->activity->vm->DetachCurrentThread();
319 return;
320 }
321 }
322}
323
324#endif
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueCount, NULL)