blob: f1ad5f340709ecf2b5e98338fd2f9702c88184e7 [file] [log] [blame]
Jesse Hall04f4f472015-08-16 19:51:04 -07001/*
2* Copyright 2015 The Android Open Source Project
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16
17// This file is generated. Do not edit manually!
18// To regenerate: $ apic template ../api/vulkan.api get_proc_addr.cpp.tmpl
19// Requires apic from https://android.googlesource.com/platform/tools/gpu/.
20
21#include <algorithm>
22#include <log/log.h>
23#include "loader.h"
24using namespace vulkan;
25
26#define UNLIKELY(expr) __builtin_expect((expr), 0)
27
28namespace {
29
30struct NameProcEntry {
31 const char* name;
32 PFN_vkVoidFunction proc;
33};
34
35struct NameOffsetEntry {
36 const char* name;
37 size_t offset;
38};
39
40template <typename TEntry, size_t N>
Michael Lentine88594d72015-11-12 12:49:45 -080041const TEntry* FindProcEntry(const TEntry (&table)[N], const char* name) {
Jesse Hall04f4f472015-08-16 19:51:04 -070042 auto entry = std::lower_bound(
43 table, table + N, name,
44 [](const TEntry& e, const char* n) { return strcmp(e.name, n) < 0; });
45 if (entry != (table + N) && strcmp(entry->name, name) == 0)
46 return entry;
47 return nullptr;
48}
49
50const NameProcEntry kInstanceProcTbl[] = {
51 // clang-format off
Jesse Hall1356b0d2015-11-23 17:24:58 -080052 {"vkCreateAndroidSurfaceKHR", reinterpret_cast<PFN_vkVoidFunction>(vkCreateAndroidSurfaceKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -070053 {"vkCreateDevice", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDevice)},
54 {"vkDestroyInstance", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyInstance)},
Jesse Hall1356b0d2015-11-23 17:24:58 -080055 {"vkDestroySurfaceKHR", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySurfaceKHR)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -070056 {"vkEnumerateDeviceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceExtensionProperties)},
57 {"vkEnumerateDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceLayerProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -070058 {"vkEnumeratePhysicalDevices", reinterpret_cast<PFN_vkVoidFunction>(vkEnumeratePhysicalDevices)},
59 {"vkGetInstanceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(vkGetInstanceProcAddr)},
Jesse Hall04f4f472015-08-16 19:51:04 -070060 {"vkGetPhysicalDeviceFeatures", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceFeatures)},
61 {"vkGetPhysicalDeviceFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceFormatProperties)},
62 {"vkGetPhysicalDeviceImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceImageFormatProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -070063 {"vkGetPhysicalDeviceMemoryProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceMemoryProperties)},
64 {"vkGetPhysicalDeviceProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceProperties)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -070065 {"vkGetPhysicalDeviceQueueFamilyProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceQueueFamilyProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -070066 {"vkGetPhysicalDeviceSparseImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSparseImageFormatProperties)},
Michael Lentine88594d72015-11-12 12:49:45 -080067 {"vkGetPhysicalDeviceSurfaceSupportKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSurfaceSupportKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -070068 // clang-format on
69};
70
71const NameProcEntry kDeviceProcTbl[] = {
72 // clang-format off
Michael Lentine88594d72015-11-12 12:49:45 -080073 {"vkAcquireNextImageKHR", reinterpret_cast<PFN_vkVoidFunction>(vkAcquireNextImageKHR)},
Jesse Hallfbf97b02015-11-20 14:17:03 -080074 {"vkAllocCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkAllocCommandBuffers)},
Jesse Hall04f4f472015-08-16 19:51:04 -070075 {"vkAllocDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkAllocDescriptorSets)},
76 {"vkAllocMemory", reinterpret_cast<PFN_vkVoidFunction>(vkAllocMemory)},
77 {"vkBeginCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkBeginCommandBuffer)},
78 {"vkBindBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkBindBufferMemory)},
79 {"vkBindImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkBindImageMemory)},
80 {"vkCmdBeginQuery", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBeginQuery)},
81 {"vkCmdBeginRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBeginRenderPass)},
82 {"vkCmdBindDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindDescriptorSets)},
Jesse Hall04f4f472015-08-16 19:51:04 -070083 {"vkCmdBindIndexBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindIndexBuffer)},
84 {"vkCmdBindPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindPipeline)},
85 {"vkCmdBindVertexBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindVertexBuffers)},
86 {"vkCmdBlitImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBlitImage)},
Jesse Hallae38f732015-11-19 21:32:50 -080087 {"vkCmdClearAttachments", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearAttachments)},
Jesse Hall04f4f472015-08-16 19:51:04 -070088 {"vkCmdClearColorImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearColorImage)},
Jesse Hall04f4f472015-08-16 19:51:04 -070089 {"vkCmdClearDepthStencilImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearDepthStencilImage)},
90 {"vkCmdCopyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBuffer)},
91 {"vkCmdCopyBufferToImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBufferToImage)},
92 {"vkCmdCopyImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyImage)},
93 {"vkCmdCopyImageToBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyImageToBuffer)},
94 {"vkCmdCopyQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyQueryPoolResults)},
95 {"vkCmdDispatch", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDispatch)},
96 {"vkCmdDispatchIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDispatchIndirect)},
97 {"vkCmdDraw", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDraw)},
98 {"vkCmdDrawIndexed", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndexed)},
99 {"vkCmdDrawIndexedIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndexedIndirect)},
100 {"vkCmdDrawIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndirect)},
101 {"vkCmdEndQuery", reinterpret_cast<PFN_vkVoidFunction>(vkCmdEndQuery)},
102 {"vkCmdEndRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdEndRenderPass)},
103 {"vkCmdExecuteCommands", reinterpret_cast<PFN_vkVoidFunction>(vkCmdExecuteCommands)},
104 {"vkCmdFillBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdFillBuffer)},
105 {"vkCmdNextSubpass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdNextSubpass)},
106 {"vkCmdPipelineBarrier", reinterpret_cast<PFN_vkVoidFunction>(vkCmdPipelineBarrier)},
107 {"vkCmdPushConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdPushConstants)},
108 {"vkCmdResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetEvent)},
109 {"vkCmdResetQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetQueryPool)},
110 {"vkCmdResolveImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResolveImage)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700111 {"vkCmdSetBlendConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetBlendConstants)},
112 {"vkCmdSetDepthBias", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBias)},
113 {"vkCmdSetDepthBounds", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBounds)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700114 {"vkCmdSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetEvent)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700115 {"vkCmdSetLineWidth", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetLineWidth)},
116 {"vkCmdSetScissor", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetScissor)},
117 {"vkCmdSetStencilCompareMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilCompareMask)},
118 {"vkCmdSetStencilReference", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilReference)},
119 {"vkCmdSetStencilWriteMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilWriteMask)},
120 {"vkCmdSetViewport", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetViewport)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700121 {"vkCmdUpdateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdUpdateBuffer)},
122 {"vkCmdWaitEvents", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWaitEvents)},
123 {"vkCmdWriteTimestamp", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWriteTimestamp)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700124 {"vkCreateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBuffer)},
125 {"vkCreateBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBufferView)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700126 {"vkCreateCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandPool)},
127 {"vkCreateComputePipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateComputePipelines)},
128 {"vkCreateDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorPool)},
129 {"vkCreateDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorSetLayout)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700130 {"vkCreateEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCreateEvent)},
131 {"vkCreateFence", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFence)},
132 {"vkCreateFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFramebuffer)},
133 {"vkCreateGraphicsPipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateGraphicsPipelines)},
134 {"vkCreateImage", reinterpret_cast<PFN_vkVoidFunction>(vkCreateImage)},
135 {"vkCreateImageView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateImageView)},
136 {"vkCreatePipelineCache", reinterpret_cast<PFN_vkVoidFunction>(vkCreatePipelineCache)},
137 {"vkCreatePipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreatePipelineLayout)},
138 {"vkCreateQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateQueryPool)},
139 {"vkCreateRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCreateRenderPass)},
140 {"vkCreateSampler", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSampler)},
141 {"vkCreateSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSemaphore)},
142 {"vkCreateShader", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShader)},
143 {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800144 {"vkCreateSwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700145 {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBuffer)},
146 {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBufferView)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700147 {"vkDestroyCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandPool)},
148 {"vkDestroyDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorPool)},
149 {"vkDestroyDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorSetLayout)},
150 {"vkDestroyDevice", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDevice)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700151 {"vkDestroyEvent", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyEvent)},
152 {"vkDestroyFence", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFence)},
153 {"vkDestroyFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFramebuffer)},
154 {"vkDestroyImage", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyImage)},
155 {"vkDestroyImageView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyImageView)},
156 {"vkDestroyPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipeline)},
157 {"vkDestroyPipelineCache", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipelineCache)},
158 {"vkDestroyPipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipelineLayout)},
159 {"vkDestroyQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyQueryPool)},
160 {"vkDestroyRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyRenderPass)},
161 {"vkDestroySampler", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySampler)},
162 {"vkDestroySemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySemaphore)},
163 {"vkDestroyShader", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShader)},
164 {"vkDestroyShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800165 {"vkDestroySwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700166 {"vkDeviceWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkDeviceWaitIdle)},
167 {"vkEndCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkEndCommandBuffer)},
168 {"vkFlushMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkFlushMappedMemoryRanges)},
Jesse Hallfbf97b02015-11-20 14:17:03 -0800169 {"vkFreeCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkFreeCommandBuffers)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700170 {"vkFreeDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkFreeDescriptorSets)},
171 {"vkFreeMemory", reinterpret_cast<PFN_vkVoidFunction>(vkFreeMemory)},
172 {"vkGetBufferMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetBufferMemoryRequirements)},
173 {"vkGetDeviceMemoryCommitment", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceMemoryCommitment)},
174 {"vkGetDeviceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceProcAddr)},
175 {"vkGetDeviceQueue", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceQueue)},
176 {"vkGetEventStatus", reinterpret_cast<PFN_vkVoidFunction>(vkGetEventStatus)},
177 {"vkGetFenceStatus", reinterpret_cast<PFN_vkVoidFunction>(vkGetFenceStatus)},
178 {"vkGetImageMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageMemoryRequirements)},
179 {"vkGetImageSparseMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSparseMemoryRequirements)},
180 {"vkGetImageSubresourceLayout", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSubresourceLayout)},
181 {"vkGetPipelineCacheData", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheData)},
182 {"vkGetPipelineCacheSize", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheSize)},
183 {"vkGetQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkGetQueryPoolResults)},
184 {"vkGetRenderAreaGranularity", reinterpret_cast<PFN_vkVoidFunction>(vkGetRenderAreaGranularity)},
Michael Lentine88594d72015-11-12 12:49:45 -0800185 {"vkGetSurfaceFormatsKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfaceFormatsKHR)},
186 {"vkGetSurfacePresentModesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfacePresentModesKHR)},
187 {"vkGetSurfacePropertiesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfacePropertiesKHR)},
188 {"vkGetSwapchainImagesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSwapchainImagesKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700189 {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkInvalidateMappedMemoryRanges)},
190 {"vkMapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkMapMemory)},
191 {"vkMergePipelineCaches", reinterpret_cast<PFN_vkVoidFunction>(vkMergePipelineCaches)},
192 {"vkQueueBindSparseBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseBufferMemory)},
193 {"vkQueueBindSparseImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageMemory)},
194 {"vkQueueBindSparseImageOpaqueMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageOpaqueMemory)},
Michael Lentine88594d72015-11-12 12:49:45 -0800195 {"vkQueuePresentKHR", reinterpret_cast<PFN_vkVoidFunction>(vkQueuePresentKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700196 {"vkQueueSignalSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSignalSemaphore)},
197 {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSubmit)},
198 {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitIdle)},
199 {"vkQueueWaitSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitSemaphore)},
200 {"vkResetCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandBuffer)},
201 {"vkResetCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandPool)},
202 {"vkResetDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetDescriptorPool)},
203 {"vkResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkResetEvent)},
204 {"vkResetFences", reinterpret_cast<PFN_vkVoidFunction>(vkResetFences)},
205 {"vkSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkSetEvent)},
206 {"vkUnmapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkUnmapMemory)},
207 {"vkUpdateDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkUpdateDescriptorSets)},
208 {"vkWaitForFences", reinterpret_cast<PFN_vkVoidFunction>(vkWaitForFences)},
209 // clang-format on
210};
211
212const NameOffsetEntry kInstanceOffsetTbl[] = {
213 // clang-format off
Jesse Hall1356b0d2015-11-23 17:24:58 -0800214 {"vkCreateAndroidSurfaceKHR", offsetof(InstanceVtbl, CreateAndroidSurfaceKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700215 {"vkCreateDevice", offsetof(InstanceVtbl, CreateDevice)},
216 {"vkDestroyInstance", offsetof(InstanceVtbl, DestroyInstance)},
Jesse Hall1356b0d2015-11-23 17:24:58 -0800217 {"vkDestroySurfaceKHR", offsetof(InstanceVtbl, DestroySurfaceKHR)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700218 {"vkEnumerateDeviceExtensionProperties", offsetof(InstanceVtbl, EnumerateDeviceExtensionProperties)},
219 {"vkEnumerateDeviceLayerProperties", offsetof(InstanceVtbl, EnumerateDeviceLayerProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700220 {"vkEnumeratePhysicalDevices", offsetof(InstanceVtbl, EnumeratePhysicalDevices)},
221 {"vkGetInstanceProcAddr", offsetof(InstanceVtbl, GetInstanceProcAddr)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700222 {"vkGetPhysicalDeviceFeatures", offsetof(InstanceVtbl, GetPhysicalDeviceFeatures)},
223 {"vkGetPhysicalDeviceFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceFormatProperties)},
224 {"vkGetPhysicalDeviceImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceImageFormatProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700225 {"vkGetPhysicalDeviceMemoryProperties", offsetof(InstanceVtbl, GetPhysicalDeviceMemoryProperties)},
226 {"vkGetPhysicalDeviceProperties", offsetof(InstanceVtbl, GetPhysicalDeviceProperties)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700227 {"vkGetPhysicalDeviceQueueFamilyProperties", offsetof(InstanceVtbl, GetPhysicalDeviceQueueFamilyProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700228 {"vkGetPhysicalDeviceSparseImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceSparseImageFormatProperties)},
Michael Lentine88594d72015-11-12 12:49:45 -0800229 {"vkGetPhysicalDeviceSurfaceSupportKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfaceSupportKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700230 // clang-format on
231};
232
233const NameOffsetEntry kDeviceOffsetTbl[] = {
234 // clang-format off
Michael Lentine88594d72015-11-12 12:49:45 -0800235 {"vkAcquireNextImageKHR", offsetof(DeviceVtbl, AcquireNextImageKHR)},
Jesse Hallfbf97b02015-11-20 14:17:03 -0800236 {"vkAllocCommandBuffers", offsetof(DeviceVtbl, AllocCommandBuffers)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700237 {"vkAllocDescriptorSets", offsetof(DeviceVtbl, AllocDescriptorSets)},
238 {"vkAllocMemory", offsetof(DeviceVtbl, AllocMemory)},
239 {"vkBeginCommandBuffer", offsetof(DeviceVtbl, BeginCommandBuffer)},
240 {"vkBindBufferMemory", offsetof(DeviceVtbl, BindBufferMemory)},
241 {"vkBindImageMemory", offsetof(DeviceVtbl, BindImageMemory)},
242 {"vkCmdBeginQuery", offsetof(DeviceVtbl, CmdBeginQuery)},
243 {"vkCmdBeginRenderPass", offsetof(DeviceVtbl, CmdBeginRenderPass)},
244 {"vkCmdBindDescriptorSets", offsetof(DeviceVtbl, CmdBindDescriptorSets)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700245 {"vkCmdBindIndexBuffer", offsetof(DeviceVtbl, CmdBindIndexBuffer)},
246 {"vkCmdBindPipeline", offsetof(DeviceVtbl, CmdBindPipeline)},
247 {"vkCmdBindVertexBuffers", offsetof(DeviceVtbl, CmdBindVertexBuffers)},
248 {"vkCmdBlitImage", offsetof(DeviceVtbl, CmdBlitImage)},
Jesse Hallae38f732015-11-19 21:32:50 -0800249 {"vkCmdClearAttachments", offsetof(DeviceVtbl, CmdClearAttachments)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700250 {"vkCmdClearColorImage", offsetof(DeviceVtbl, CmdClearColorImage)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700251 {"vkCmdClearDepthStencilImage", offsetof(DeviceVtbl, CmdClearDepthStencilImage)},
252 {"vkCmdCopyBuffer", offsetof(DeviceVtbl, CmdCopyBuffer)},
253 {"vkCmdCopyBufferToImage", offsetof(DeviceVtbl, CmdCopyBufferToImage)},
254 {"vkCmdCopyImage", offsetof(DeviceVtbl, CmdCopyImage)},
255 {"vkCmdCopyImageToBuffer", offsetof(DeviceVtbl, CmdCopyImageToBuffer)},
256 {"vkCmdCopyQueryPoolResults", offsetof(DeviceVtbl, CmdCopyQueryPoolResults)},
257 {"vkCmdDispatch", offsetof(DeviceVtbl, CmdDispatch)},
258 {"vkCmdDispatchIndirect", offsetof(DeviceVtbl, CmdDispatchIndirect)},
259 {"vkCmdDraw", offsetof(DeviceVtbl, CmdDraw)},
260 {"vkCmdDrawIndexed", offsetof(DeviceVtbl, CmdDrawIndexed)},
261 {"vkCmdDrawIndexedIndirect", offsetof(DeviceVtbl, CmdDrawIndexedIndirect)},
262 {"vkCmdDrawIndirect", offsetof(DeviceVtbl, CmdDrawIndirect)},
263 {"vkCmdEndQuery", offsetof(DeviceVtbl, CmdEndQuery)},
264 {"vkCmdEndRenderPass", offsetof(DeviceVtbl, CmdEndRenderPass)},
265 {"vkCmdExecuteCommands", offsetof(DeviceVtbl, CmdExecuteCommands)},
266 {"vkCmdFillBuffer", offsetof(DeviceVtbl, CmdFillBuffer)},
267 {"vkCmdNextSubpass", offsetof(DeviceVtbl, CmdNextSubpass)},
268 {"vkCmdPipelineBarrier", offsetof(DeviceVtbl, CmdPipelineBarrier)},
269 {"vkCmdPushConstants", offsetof(DeviceVtbl, CmdPushConstants)},
270 {"vkCmdResetEvent", offsetof(DeviceVtbl, CmdResetEvent)},
271 {"vkCmdResetQueryPool", offsetof(DeviceVtbl, CmdResetQueryPool)},
272 {"vkCmdResolveImage", offsetof(DeviceVtbl, CmdResolveImage)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700273 {"vkCmdSetBlendConstants", offsetof(DeviceVtbl, CmdSetBlendConstants)},
274 {"vkCmdSetDepthBias", offsetof(DeviceVtbl, CmdSetDepthBias)},
275 {"vkCmdSetDepthBounds", offsetof(DeviceVtbl, CmdSetDepthBounds)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700276 {"vkCmdSetEvent", offsetof(DeviceVtbl, CmdSetEvent)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700277 {"vkCmdSetLineWidth", offsetof(DeviceVtbl, CmdSetLineWidth)},
278 {"vkCmdSetScissor", offsetof(DeviceVtbl, CmdSetScissor)},
279 {"vkCmdSetStencilCompareMask", offsetof(DeviceVtbl, CmdSetStencilCompareMask)},
280 {"vkCmdSetStencilReference", offsetof(DeviceVtbl, CmdSetStencilReference)},
281 {"vkCmdSetStencilWriteMask", offsetof(DeviceVtbl, CmdSetStencilWriteMask)},
282 {"vkCmdSetViewport", offsetof(DeviceVtbl, CmdSetViewport)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700283 {"vkCmdUpdateBuffer", offsetof(DeviceVtbl, CmdUpdateBuffer)},
284 {"vkCmdWaitEvents", offsetof(DeviceVtbl, CmdWaitEvents)},
285 {"vkCmdWriteTimestamp", offsetof(DeviceVtbl, CmdWriteTimestamp)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700286 {"vkCreateBuffer", offsetof(DeviceVtbl, CreateBuffer)},
287 {"vkCreateBufferView", offsetof(DeviceVtbl, CreateBufferView)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700288 {"vkCreateCommandPool", offsetof(DeviceVtbl, CreateCommandPool)},
289 {"vkCreateComputePipelines", offsetof(DeviceVtbl, CreateComputePipelines)},
290 {"vkCreateDescriptorPool", offsetof(DeviceVtbl, CreateDescriptorPool)},
291 {"vkCreateDescriptorSetLayout", offsetof(DeviceVtbl, CreateDescriptorSetLayout)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700292 {"vkCreateEvent", offsetof(DeviceVtbl, CreateEvent)},
293 {"vkCreateFence", offsetof(DeviceVtbl, CreateFence)},
294 {"vkCreateFramebuffer", offsetof(DeviceVtbl, CreateFramebuffer)},
295 {"vkCreateGraphicsPipelines", offsetof(DeviceVtbl, CreateGraphicsPipelines)},
296 {"vkCreateImage", offsetof(DeviceVtbl, CreateImage)},
297 {"vkCreateImageView", offsetof(DeviceVtbl, CreateImageView)},
298 {"vkCreatePipelineCache", offsetof(DeviceVtbl, CreatePipelineCache)},
299 {"vkCreatePipelineLayout", offsetof(DeviceVtbl, CreatePipelineLayout)},
300 {"vkCreateQueryPool", offsetof(DeviceVtbl, CreateQueryPool)},
301 {"vkCreateRenderPass", offsetof(DeviceVtbl, CreateRenderPass)},
302 {"vkCreateSampler", offsetof(DeviceVtbl, CreateSampler)},
303 {"vkCreateSemaphore", offsetof(DeviceVtbl, CreateSemaphore)},
304 {"vkCreateShader", offsetof(DeviceVtbl, CreateShader)},
305 {"vkCreateShaderModule", offsetof(DeviceVtbl, CreateShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800306 {"vkCreateSwapchainKHR", offsetof(DeviceVtbl, CreateSwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700307 {"vkDestroyBuffer", offsetof(DeviceVtbl, DestroyBuffer)},
308 {"vkDestroyBufferView", offsetof(DeviceVtbl, DestroyBufferView)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700309 {"vkDestroyCommandPool", offsetof(DeviceVtbl, DestroyCommandPool)},
310 {"vkDestroyDescriptorPool", offsetof(DeviceVtbl, DestroyDescriptorPool)},
311 {"vkDestroyDescriptorSetLayout", offsetof(DeviceVtbl, DestroyDescriptorSetLayout)},
312 {"vkDestroyDevice", offsetof(DeviceVtbl, DestroyDevice)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700313 {"vkDestroyEvent", offsetof(DeviceVtbl, DestroyEvent)},
314 {"vkDestroyFence", offsetof(DeviceVtbl, DestroyFence)},
315 {"vkDestroyFramebuffer", offsetof(DeviceVtbl, DestroyFramebuffer)},
316 {"vkDestroyImage", offsetof(DeviceVtbl, DestroyImage)},
317 {"vkDestroyImageView", offsetof(DeviceVtbl, DestroyImageView)},
318 {"vkDestroyPipeline", offsetof(DeviceVtbl, DestroyPipeline)},
319 {"vkDestroyPipelineCache", offsetof(DeviceVtbl, DestroyPipelineCache)},
320 {"vkDestroyPipelineLayout", offsetof(DeviceVtbl, DestroyPipelineLayout)},
321 {"vkDestroyQueryPool", offsetof(DeviceVtbl, DestroyQueryPool)},
322 {"vkDestroyRenderPass", offsetof(DeviceVtbl, DestroyRenderPass)},
323 {"vkDestroySampler", offsetof(DeviceVtbl, DestroySampler)},
324 {"vkDestroySemaphore", offsetof(DeviceVtbl, DestroySemaphore)},
325 {"vkDestroyShader", offsetof(DeviceVtbl, DestroyShader)},
326 {"vkDestroyShaderModule", offsetof(DeviceVtbl, DestroyShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800327 {"vkDestroySwapchainKHR", offsetof(DeviceVtbl, DestroySwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700328 {"vkDeviceWaitIdle", offsetof(DeviceVtbl, DeviceWaitIdle)},
329 {"vkEndCommandBuffer", offsetof(DeviceVtbl, EndCommandBuffer)},
330 {"vkFlushMappedMemoryRanges", offsetof(DeviceVtbl, FlushMappedMemoryRanges)},
Jesse Hallfbf97b02015-11-20 14:17:03 -0800331 {"vkFreeCommandBuffers", offsetof(DeviceVtbl, FreeCommandBuffers)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700332 {"vkFreeDescriptorSets", offsetof(DeviceVtbl, FreeDescriptorSets)},
333 {"vkFreeMemory", offsetof(DeviceVtbl, FreeMemory)},
334 {"vkGetBufferMemoryRequirements", offsetof(DeviceVtbl, GetBufferMemoryRequirements)},
335 {"vkGetDeviceMemoryCommitment", offsetof(DeviceVtbl, GetDeviceMemoryCommitment)},
336 {"vkGetDeviceProcAddr", offsetof(DeviceVtbl, GetDeviceProcAddr)},
337 {"vkGetDeviceQueue", offsetof(DeviceVtbl, GetDeviceQueue)},
338 {"vkGetEventStatus", offsetof(DeviceVtbl, GetEventStatus)},
339 {"vkGetFenceStatus", offsetof(DeviceVtbl, GetFenceStatus)},
340 {"vkGetImageMemoryRequirements", offsetof(DeviceVtbl, GetImageMemoryRequirements)},
341 {"vkGetImageSparseMemoryRequirements", offsetof(DeviceVtbl, GetImageSparseMemoryRequirements)},
342 {"vkGetImageSubresourceLayout", offsetof(DeviceVtbl, GetImageSubresourceLayout)},
343 {"vkGetPipelineCacheData", offsetof(DeviceVtbl, GetPipelineCacheData)},
344 {"vkGetPipelineCacheSize", offsetof(DeviceVtbl, GetPipelineCacheSize)},
345 {"vkGetQueryPoolResults", offsetof(DeviceVtbl, GetQueryPoolResults)},
346 {"vkGetRenderAreaGranularity", offsetof(DeviceVtbl, GetRenderAreaGranularity)},
Michael Lentine88594d72015-11-12 12:49:45 -0800347 {"vkGetSurfaceFormatsKHR", offsetof(DeviceVtbl, GetSurfaceFormatsKHR)},
348 {"vkGetSurfacePresentModesKHR", offsetof(DeviceVtbl, GetSurfacePresentModesKHR)},
349 {"vkGetSurfacePropertiesKHR", offsetof(DeviceVtbl, GetSurfacePropertiesKHR)},
350 {"vkGetSwapchainImagesKHR", offsetof(DeviceVtbl, GetSwapchainImagesKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700351 {"vkInvalidateMappedMemoryRanges", offsetof(DeviceVtbl, InvalidateMappedMemoryRanges)},
352 {"vkMapMemory", offsetof(DeviceVtbl, MapMemory)},
353 {"vkMergePipelineCaches", offsetof(DeviceVtbl, MergePipelineCaches)},
354 {"vkQueueBindSparseBufferMemory", offsetof(DeviceVtbl, QueueBindSparseBufferMemory)},
355 {"vkQueueBindSparseImageMemory", offsetof(DeviceVtbl, QueueBindSparseImageMemory)},
356 {"vkQueueBindSparseImageOpaqueMemory", offsetof(DeviceVtbl, QueueBindSparseImageOpaqueMemory)},
Michael Lentine88594d72015-11-12 12:49:45 -0800357 {"vkQueuePresentKHR", offsetof(DeviceVtbl, QueuePresentKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700358 {"vkQueueSignalSemaphore", offsetof(DeviceVtbl, QueueSignalSemaphore)},
359 {"vkQueueSubmit", offsetof(DeviceVtbl, QueueSubmit)},
360 {"vkQueueWaitIdle", offsetof(DeviceVtbl, QueueWaitIdle)},
361 {"vkQueueWaitSemaphore", offsetof(DeviceVtbl, QueueWaitSemaphore)},
362 {"vkResetCommandBuffer", offsetof(DeviceVtbl, ResetCommandBuffer)},
363 {"vkResetCommandPool", offsetof(DeviceVtbl, ResetCommandPool)},
364 {"vkResetDescriptorPool", offsetof(DeviceVtbl, ResetDescriptorPool)},
365 {"vkResetEvent", offsetof(DeviceVtbl, ResetEvent)},
366 {"vkResetFences", offsetof(DeviceVtbl, ResetFences)},
367 {"vkSetEvent", offsetof(DeviceVtbl, SetEvent)},
368 {"vkUnmapMemory", offsetof(DeviceVtbl, UnmapMemory)},
369 {"vkUpdateDescriptorSets", offsetof(DeviceVtbl, UpdateDescriptorSets)},
370 {"vkWaitForFences", offsetof(DeviceVtbl, WaitForFences)},
371 // clang-format on
372};
373
374} // namespace
375
376namespace vulkan {
377
378PFN_vkVoidFunction GetGlobalInstanceProcAddr(const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700379 const NameProcEntry* entry = FindProcEntry(kInstanceProcTbl, name);
380 if (entry)
381 return entry->proc;
382 // vkGetDeviceProcAddr must be available at the global/instance level for
383 // bootstrapping
Jesse Hall04f4f472015-08-16 19:51:04 -0700384 if (strcmp(name, "vkGetDeviceProcAddr") == 0)
385 return reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceProcAddr);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700386 return nullptr;
Jesse Hall04f4f472015-08-16 19:51:04 -0700387}
388
389PFN_vkVoidFunction GetGlobalDeviceProcAddr(const char* name) {
390 const NameProcEntry* entry = FindProcEntry(kDeviceProcTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700391 if (entry)
392 return entry->proc;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700393 return nullptr;
Jesse Hall04f4f472015-08-16 19:51:04 -0700394}
395
396PFN_vkVoidFunction GetSpecificInstanceProcAddr(const InstanceVtbl* vtbl,
397 const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700398 size_t offset;
Jesse Hall04f4f472015-08-16 19:51:04 -0700399 const NameOffsetEntry* entry = FindProcEntry(kInstanceOffsetTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700400 if (entry)
401 offset = entry->offset;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700402 else
Jesse Hall04f4f472015-08-16 19:51:04 -0700403 return nullptr;
404 const unsigned char* base = reinterpret_cast<const unsigned char*>(vtbl);
Michael Lentine62270162015-09-15 13:25:36 -0500405 return *reinterpret_cast<PFN_vkVoidFunction*>(
Michael Lentine88594d72015-11-12 12:49:45 -0800406 const_cast<unsigned char*>(base) + offset);
Jesse Hall04f4f472015-08-16 19:51:04 -0700407}
408
409PFN_vkVoidFunction GetSpecificDeviceProcAddr(const DeviceVtbl* vtbl,
410 const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700411 size_t offset;
Jesse Hall04f4f472015-08-16 19:51:04 -0700412 const NameOffsetEntry* entry = FindProcEntry(kDeviceOffsetTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700413 if (entry)
414 offset = entry->offset;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700415 else
Jesse Hall04f4f472015-08-16 19:51:04 -0700416 return nullptr;
417 const unsigned char* base = reinterpret_cast<const unsigned char*>(vtbl);
Michael Lentine62270162015-09-15 13:25:36 -0500418 return *reinterpret_cast<PFN_vkVoidFunction*>(
Michael Lentine88594d72015-11-12 12:49:45 -0800419 const_cast<unsigned char*>(base) + offset);
Jesse Hall04f4f472015-08-16 19:51:04 -0700420}
421
422bool LoadInstanceVtbl(VkInstance instance,
Michael Lentine03c64b02015-08-26 18:27:26 -0500423 VkInstance instance_next,
Jesse Hall04f4f472015-08-16 19:51:04 -0700424 PFN_vkGetInstanceProcAddr get_proc_addr,
425 InstanceVtbl& vtbl) {
426 bool success = true;
427 // clang-format off
Michael Lentine03c64b02015-08-26 18:27:26 -0500428 vtbl.GetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(get_proc_addr(instance_next, "vkGetInstanceProcAddr"));
429 if (UNLIKELY(!vtbl.GetInstanceProcAddr)) {
430 ALOGE("missing instance proc: %s", "vkGetInstanceProcAddr");
431 success = false;
432 }
433 vtbl.CreateInstance = reinterpret_cast<PFN_vkCreateInstance>(get_proc_addr(instance, "vkCreateInstance"));
434 if (UNLIKELY(!vtbl.CreateInstance)) {
435 // This is allowed to fail as the driver doesn't have to return vkCreateInstance when given an instance
436 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700437 vtbl.DestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(get_proc_addr(instance, "vkDestroyInstance"));
438 if (UNLIKELY(!vtbl.DestroyInstance)) {
439 ALOGE("missing instance proc: %s", "vkDestroyInstance");
440 success = false;
441 }
442 vtbl.EnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(get_proc_addr(instance, "vkEnumeratePhysicalDevices"));
443 if (UNLIKELY(!vtbl.EnumeratePhysicalDevices)) {
444 ALOGE("missing instance proc: %s", "vkEnumeratePhysicalDevices");
445 success = false;
446 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700447 vtbl.GetPhysicalDeviceProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceProperties"));
448 if (UNLIKELY(!vtbl.GetPhysicalDeviceProperties)) {
449 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceProperties");
450 success = false;
451 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700452 vtbl.GetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceQueueFamilyProperties"));
453 if (UNLIKELY(!vtbl.GetPhysicalDeviceQueueFamilyProperties)) {
454 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceQueueFamilyProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700455 success = false;
456 }
457 vtbl.GetPhysicalDeviceMemoryProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceMemoryProperties"));
458 if (UNLIKELY(!vtbl.GetPhysicalDeviceMemoryProperties)) {
459 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceMemoryProperties");
460 success = false;
461 }
462 vtbl.GetPhysicalDeviceFeatures = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures>(get_proc_addr(instance, "vkGetPhysicalDeviceFeatures"));
463 if (UNLIKELY(!vtbl.GetPhysicalDeviceFeatures)) {
464 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceFeatures");
465 success = false;
466 }
467 vtbl.GetPhysicalDeviceFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceFormatProperties"));
468 if (UNLIKELY(!vtbl.GetPhysicalDeviceFormatProperties)) {
469 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceFormatProperties");
470 success = false;
471 }
472 vtbl.GetPhysicalDeviceImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceImageFormatProperties"));
473 if (UNLIKELY(!vtbl.GetPhysicalDeviceImageFormatProperties)) {
474 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceImageFormatProperties");
475 success = false;
476 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700477 vtbl.CreateDevice = reinterpret_cast<PFN_vkCreateDevice>(get_proc_addr(instance, "vkCreateDevice"));
478 if (UNLIKELY(!vtbl.CreateDevice)) {
479 ALOGE("missing instance proc: %s", "vkCreateDevice");
480 success = false;
481 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700482 vtbl.EnumerateDeviceLayerProperties = reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(get_proc_addr(instance, "vkEnumerateDeviceLayerProperties"));
483 if (UNLIKELY(!vtbl.EnumerateDeviceLayerProperties)) {
484 ALOGE("missing instance proc: %s", "vkEnumerateDeviceLayerProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700485 success = false;
486 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700487 vtbl.EnumerateDeviceExtensionProperties = reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(get_proc_addr(instance, "vkEnumerateDeviceExtensionProperties"));
488 if (UNLIKELY(!vtbl.EnumerateDeviceExtensionProperties)) {
489 ALOGE("missing instance proc: %s", "vkEnumerateDeviceExtensionProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700490 success = false;
491 }
492 vtbl.GetPhysicalDeviceSparseImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceSparseImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceSparseImageFormatProperties"));
493 if (UNLIKELY(!vtbl.GetPhysicalDeviceSparseImageFormatProperties)) {
494 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceSparseImageFormatProperties");
495 success = false;
496 }
Jesse Hall1356b0d2015-11-23 17:24:58 -0800497 vtbl.DestroySurfaceKHR = reinterpret_cast<PFN_vkDestroySurfaceKHR>(get_proc_addr(instance, "vkDestroySurfaceKHR"));
Michael Lentine88594d72015-11-12 12:49:45 -0800498 vtbl.GetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"));
Jesse Hall1356b0d2015-11-23 17:24:58 -0800499 vtbl.CreateAndroidSurfaceKHR = reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR>(get_proc_addr(instance, "vkCreateAndroidSurfaceKHR"));
Jesse Hall04f4f472015-08-16 19:51:04 -0700500 // clang-format on
501 return success;
502}
503
504bool LoadDeviceVtbl(VkDevice device,
Michael Lentine03c64b02015-08-26 18:27:26 -0500505 VkDevice device_next,
Jesse Hall04f4f472015-08-16 19:51:04 -0700506 PFN_vkGetDeviceProcAddr get_proc_addr,
507 DeviceVtbl& vtbl) {
508 bool success = true;
509 // clang-format off
Michael Lentine03c64b02015-08-26 18:27:26 -0500510 vtbl.GetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(get_proc_addr(device_next, "vkGetDeviceProcAddr"));
Jesse Hall04f4f472015-08-16 19:51:04 -0700511 if (UNLIKELY(!vtbl.GetDeviceProcAddr)) {
512 ALOGE("missing device proc: %s", "vkGetDeviceProcAddr");
513 success = false;
514 }
515 vtbl.DestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(get_proc_addr(device, "vkDestroyDevice"));
516 if (UNLIKELY(!vtbl.DestroyDevice)) {
517 ALOGE("missing device proc: %s", "vkDestroyDevice");
518 success = false;
519 }
520 vtbl.GetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(get_proc_addr(device, "vkGetDeviceQueue"));
521 if (UNLIKELY(!vtbl.GetDeviceQueue)) {
522 ALOGE("missing device proc: %s", "vkGetDeviceQueue");
523 success = false;
524 }
525 vtbl.QueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(get_proc_addr(device, "vkQueueSubmit"));
526 if (UNLIKELY(!vtbl.QueueSubmit)) {
527 ALOGE("missing device proc: %s", "vkQueueSubmit");
528 success = false;
529 }
530 vtbl.QueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(get_proc_addr(device, "vkQueueWaitIdle"));
531 if (UNLIKELY(!vtbl.QueueWaitIdle)) {
532 ALOGE("missing device proc: %s", "vkQueueWaitIdle");
533 success = false;
534 }
535 vtbl.DeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(get_proc_addr(device, "vkDeviceWaitIdle"));
536 if (UNLIKELY(!vtbl.DeviceWaitIdle)) {
537 ALOGE("missing device proc: %s", "vkDeviceWaitIdle");
538 success = false;
539 }
540 vtbl.AllocMemory = reinterpret_cast<PFN_vkAllocMemory>(get_proc_addr(device, "vkAllocMemory"));
541 if (UNLIKELY(!vtbl.AllocMemory)) {
542 ALOGE("missing device proc: %s", "vkAllocMemory");
543 success = false;
544 }
545 vtbl.FreeMemory = reinterpret_cast<PFN_vkFreeMemory>(get_proc_addr(device, "vkFreeMemory"));
546 if (UNLIKELY(!vtbl.FreeMemory)) {
547 ALOGE("missing device proc: %s", "vkFreeMemory");
548 success = false;
549 }
550 vtbl.MapMemory = reinterpret_cast<PFN_vkMapMemory>(get_proc_addr(device, "vkMapMemory"));
551 if (UNLIKELY(!vtbl.MapMemory)) {
552 ALOGE("missing device proc: %s", "vkMapMemory");
553 success = false;
554 }
555 vtbl.UnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(get_proc_addr(device, "vkUnmapMemory"));
556 if (UNLIKELY(!vtbl.UnmapMemory)) {
557 ALOGE("missing device proc: %s", "vkUnmapMemory");
558 success = false;
559 }
560 vtbl.FlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(get_proc_addr(device, "vkFlushMappedMemoryRanges"));
561 if (UNLIKELY(!vtbl.FlushMappedMemoryRanges)) {
562 ALOGE("missing device proc: %s", "vkFlushMappedMemoryRanges");
563 success = false;
564 }
565 vtbl.InvalidateMappedMemoryRanges = reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>(get_proc_addr(device, "vkInvalidateMappedMemoryRanges"));
566 if (UNLIKELY(!vtbl.InvalidateMappedMemoryRanges)) {
567 ALOGE("missing device proc: %s", "vkInvalidateMappedMemoryRanges");
568 success = false;
569 }
570 vtbl.GetDeviceMemoryCommitment = reinterpret_cast<PFN_vkGetDeviceMemoryCommitment>(get_proc_addr(device, "vkGetDeviceMemoryCommitment"));
571 if (UNLIKELY(!vtbl.GetDeviceMemoryCommitment)) {
572 ALOGE("missing device proc: %s", "vkGetDeviceMemoryCommitment");
573 success = false;
574 }
575 vtbl.GetBufferMemoryRequirements = reinterpret_cast<PFN_vkGetBufferMemoryRequirements>(get_proc_addr(device, "vkGetBufferMemoryRequirements"));
576 if (UNLIKELY(!vtbl.GetBufferMemoryRequirements)) {
577 ALOGE("missing device proc: %s", "vkGetBufferMemoryRequirements");
578 success = false;
579 }
580 vtbl.BindBufferMemory = reinterpret_cast<PFN_vkBindBufferMemory>(get_proc_addr(device, "vkBindBufferMemory"));
581 if (UNLIKELY(!vtbl.BindBufferMemory)) {
582 ALOGE("missing device proc: %s", "vkBindBufferMemory");
583 success = false;
584 }
585 vtbl.GetImageMemoryRequirements = reinterpret_cast<PFN_vkGetImageMemoryRequirements>(get_proc_addr(device, "vkGetImageMemoryRequirements"));
586 if (UNLIKELY(!vtbl.GetImageMemoryRequirements)) {
587 ALOGE("missing device proc: %s", "vkGetImageMemoryRequirements");
588 success = false;
589 }
590 vtbl.BindImageMemory = reinterpret_cast<PFN_vkBindImageMemory>(get_proc_addr(device, "vkBindImageMemory"));
591 if (UNLIKELY(!vtbl.BindImageMemory)) {
592 ALOGE("missing device proc: %s", "vkBindImageMemory");
593 success = false;
594 }
595 vtbl.GetImageSparseMemoryRequirements = reinterpret_cast<PFN_vkGetImageSparseMemoryRequirements>(get_proc_addr(device, "vkGetImageSparseMemoryRequirements"));
596 if (UNLIKELY(!vtbl.GetImageSparseMemoryRequirements)) {
597 ALOGE("missing device proc: %s", "vkGetImageSparseMemoryRequirements");
598 success = false;
599 }
600 vtbl.QueueBindSparseBufferMemory = reinterpret_cast<PFN_vkQueueBindSparseBufferMemory>(get_proc_addr(device, "vkQueueBindSparseBufferMemory"));
601 if (UNLIKELY(!vtbl.QueueBindSparseBufferMemory)) {
602 ALOGE("missing device proc: %s", "vkQueueBindSparseBufferMemory");
603 success = false;
604 }
605 vtbl.QueueBindSparseImageOpaqueMemory = reinterpret_cast<PFN_vkQueueBindSparseImageOpaqueMemory>(get_proc_addr(device, "vkQueueBindSparseImageOpaqueMemory"));
606 if (UNLIKELY(!vtbl.QueueBindSparseImageOpaqueMemory)) {
607 ALOGE("missing device proc: %s", "vkQueueBindSparseImageOpaqueMemory");
608 success = false;
609 }
610 vtbl.QueueBindSparseImageMemory = reinterpret_cast<PFN_vkQueueBindSparseImageMemory>(get_proc_addr(device, "vkQueueBindSparseImageMemory"));
611 if (UNLIKELY(!vtbl.QueueBindSparseImageMemory)) {
612 ALOGE("missing device proc: %s", "vkQueueBindSparseImageMemory");
613 success = false;
614 }
615 vtbl.CreateFence = reinterpret_cast<PFN_vkCreateFence>(get_proc_addr(device, "vkCreateFence"));
616 if (UNLIKELY(!vtbl.CreateFence)) {
617 ALOGE("missing device proc: %s", "vkCreateFence");
618 success = false;
619 }
620 vtbl.DestroyFence = reinterpret_cast<PFN_vkDestroyFence>(get_proc_addr(device, "vkDestroyFence"));
621 if (UNLIKELY(!vtbl.DestroyFence)) {
622 ALOGE("missing device proc: %s", "vkDestroyFence");
623 success = false;
624 }
625 vtbl.ResetFences = reinterpret_cast<PFN_vkResetFences>(get_proc_addr(device, "vkResetFences"));
626 if (UNLIKELY(!vtbl.ResetFences)) {
627 ALOGE("missing device proc: %s", "vkResetFences");
628 success = false;
629 }
630 vtbl.GetFenceStatus = reinterpret_cast<PFN_vkGetFenceStatus>(get_proc_addr(device, "vkGetFenceStatus"));
631 if (UNLIKELY(!vtbl.GetFenceStatus)) {
632 ALOGE("missing device proc: %s", "vkGetFenceStatus");
633 success = false;
634 }
635 vtbl.WaitForFences = reinterpret_cast<PFN_vkWaitForFences>(get_proc_addr(device, "vkWaitForFences"));
636 if (UNLIKELY(!vtbl.WaitForFences)) {
637 ALOGE("missing device proc: %s", "vkWaitForFences");
638 success = false;
639 }
640 vtbl.CreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(get_proc_addr(device, "vkCreateSemaphore"));
641 if (UNLIKELY(!vtbl.CreateSemaphore)) {
642 ALOGE("missing device proc: %s", "vkCreateSemaphore");
643 success = false;
644 }
645 vtbl.DestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(get_proc_addr(device, "vkDestroySemaphore"));
646 if (UNLIKELY(!vtbl.DestroySemaphore)) {
647 ALOGE("missing device proc: %s", "vkDestroySemaphore");
648 success = false;
649 }
650 vtbl.QueueSignalSemaphore = reinterpret_cast<PFN_vkQueueSignalSemaphore>(get_proc_addr(device, "vkQueueSignalSemaphore"));
651 if (UNLIKELY(!vtbl.QueueSignalSemaphore)) {
652 ALOGE("missing device proc: %s", "vkQueueSignalSemaphore");
653 success = false;
654 }
655 vtbl.QueueWaitSemaphore = reinterpret_cast<PFN_vkQueueWaitSemaphore>(get_proc_addr(device, "vkQueueWaitSemaphore"));
656 if (UNLIKELY(!vtbl.QueueWaitSemaphore)) {
657 ALOGE("missing device proc: %s", "vkQueueWaitSemaphore");
658 success = false;
659 }
660 vtbl.CreateEvent = reinterpret_cast<PFN_vkCreateEvent>(get_proc_addr(device, "vkCreateEvent"));
661 if (UNLIKELY(!vtbl.CreateEvent)) {
662 ALOGE("missing device proc: %s", "vkCreateEvent");
663 success = false;
664 }
665 vtbl.DestroyEvent = reinterpret_cast<PFN_vkDestroyEvent>(get_proc_addr(device, "vkDestroyEvent"));
666 if (UNLIKELY(!vtbl.DestroyEvent)) {
667 ALOGE("missing device proc: %s", "vkDestroyEvent");
668 success = false;
669 }
670 vtbl.GetEventStatus = reinterpret_cast<PFN_vkGetEventStatus>(get_proc_addr(device, "vkGetEventStatus"));
671 if (UNLIKELY(!vtbl.GetEventStatus)) {
672 ALOGE("missing device proc: %s", "vkGetEventStatus");
673 success = false;
674 }
675 vtbl.SetEvent = reinterpret_cast<PFN_vkSetEvent>(get_proc_addr(device, "vkSetEvent"));
676 if (UNLIKELY(!vtbl.SetEvent)) {
677 ALOGE("missing device proc: %s", "vkSetEvent");
678 success = false;
679 }
680 vtbl.ResetEvent = reinterpret_cast<PFN_vkResetEvent>(get_proc_addr(device, "vkResetEvent"));
681 if (UNLIKELY(!vtbl.ResetEvent)) {
682 ALOGE("missing device proc: %s", "vkResetEvent");
683 success = false;
684 }
685 vtbl.CreateQueryPool = reinterpret_cast<PFN_vkCreateQueryPool>(get_proc_addr(device, "vkCreateQueryPool"));
686 if (UNLIKELY(!vtbl.CreateQueryPool)) {
687 ALOGE("missing device proc: %s", "vkCreateQueryPool");
688 success = false;
689 }
690 vtbl.DestroyQueryPool = reinterpret_cast<PFN_vkDestroyQueryPool>(get_proc_addr(device, "vkDestroyQueryPool"));
691 if (UNLIKELY(!vtbl.DestroyQueryPool)) {
692 ALOGE("missing device proc: %s", "vkDestroyQueryPool");
693 success = false;
694 }
695 vtbl.GetQueryPoolResults = reinterpret_cast<PFN_vkGetQueryPoolResults>(get_proc_addr(device, "vkGetQueryPoolResults"));
696 if (UNLIKELY(!vtbl.GetQueryPoolResults)) {
697 ALOGE("missing device proc: %s", "vkGetQueryPoolResults");
698 success = false;
699 }
700 vtbl.CreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(get_proc_addr(device, "vkCreateBuffer"));
701 if (UNLIKELY(!vtbl.CreateBuffer)) {
702 ALOGE("missing device proc: %s", "vkCreateBuffer");
703 success = false;
704 }
705 vtbl.DestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(get_proc_addr(device, "vkDestroyBuffer"));
706 if (UNLIKELY(!vtbl.DestroyBuffer)) {
707 ALOGE("missing device proc: %s", "vkDestroyBuffer");
708 success = false;
709 }
710 vtbl.CreateBufferView = reinterpret_cast<PFN_vkCreateBufferView>(get_proc_addr(device, "vkCreateBufferView"));
711 if (UNLIKELY(!vtbl.CreateBufferView)) {
712 ALOGE("missing device proc: %s", "vkCreateBufferView");
713 success = false;
714 }
715 vtbl.DestroyBufferView = reinterpret_cast<PFN_vkDestroyBufferView>(get_proc_addr(device, "vkDestroyBufferView"));
716 if (UNLIKELY(!vtbl.DestroyBufferView)) {
717 ALOGE("missing device proc: %s", "vkDestroyBufferView");
718 success = false;
719 }
720 vtbl.CreateImage = reinterpret_cast<PFN_vkCreateImage>(get_proc_addr(device, "vkCreateImage"));
721 if (UNLIKELY(!vtbl.CreateImage)) {
722 ALOGE("missing device proc: %s", "vkCreateImage");
723 success = false;
724 }
725 vtbl.DestroyImage = reinterpret_cast<PFN_vkDestroyImage>(get_proc_addr(device, "vkDestroyImage"));
726 if (UNLIKELY(!vtbl.DestroyImage)) {
727 ALOGE("missing device proc: %s", "vkDestroyImage");
728 success = false;
729 }
730 vtbl.GetImageSubresourceLayout = reinterpret_cast<PFN_vkGetImageSubresourceLayout>(get_proc_addr(device, "vkGetImageSubresourceLayout"));
731 if (UNLIKELY(!vtbl.GetImageSubresourceLayout)) {
732 ALOGE("missing device proc: %s", "vkGetImageSubresourceLayout");
733 success = false;
734 }
735 vtbl.CreateImageView = reinterpret_cast<PFN_vkCreateImageView>(get_proc_addr(device, "vkCreateImageView"));
736 if (UNLIKELY(!vtbl.CreateImageView)) {
737 ALOGE("missing device proc: %s", "vkCreateImageView");
738 success = false;
739 }
740 vtbl.DestroyImageView = reinterpret_cast<PFN_vkDestroyImageView>(get_proc_addr(device, "vkDestroyImageView"));
741 if (UNLIKELY(!vtbl.DestroyImageView)) {
742 ALOGE("missing device proc: %s", "vkDestroyImageView");
743 success = false;
744 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700745 vtbl.CreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(get_proc_addr(device, "vkCreateShaderModule"));
746 if (UNLIKELY(!vtbl.CreateShaderModule)) {
747 ALOGE("missing device proc: %s", "vkCreateShaderModule");
748 success = false;
749 }
750 vtbl.DestroyShaderModule = reinterpret_cast<PFN_vkDestroyShaderModule>(get_proc_addr(device, "vkDestroyShaderModule"));
751 if (UNLIKELY(!vtbl.DestroyShaderModule)) {
752 ALOGE("missing device proc: %s", "vkDestroyShaderModule");
753 success = false;
754 }
755 vtbl.CreateShader = reinterpret_cast<PFN_vkCreateShader>(get_proc_addr(device, "vkCreateShader"));
756 if (UNLIKELY(!vtbl.CreateShader)) {
757 ALOGE("missing device proc: %s", "vkCreateShader");
758 success = false;
759 }
760 vtbl.DestroyShader = reinterpret_cast<PFN_vkDestroyShader>(get_proc_addr(device, "vkDestroyShader"));
761 if (UNLIKELY(!vtbl.DestroyShader)) {
762 ALOGE("missing device proc: %s", "vkDestroyShader");
763 success = false;
764 }
765 vtbl.CreatePipelineCache = reinterpret_cast<PFN_vkCreatePipelineCache>(get_proc_addr(device, "vkCreatePipelineCache"));
766 if (UNLIKELY(!vtbl.CreatePipelineCache)) {
767 ALOGE("missing device proc: %s", "vkCreatePipelineCache");
768 success = false;
769 }
770 vtbl.DestroyPipelineCache = reinterpret_cast<PFN_vkDestroyPipelineCache>(get_proc_addr(device, "vkDestroyPipelineCache"));
771 if (UNLIKELY(!vtbl.DestroyPipelineCache)) {
772 ALOGE("missing device proc: %s", "vkDestroyPipelineCache");
773 success = false;
774 }
775 vtbl.GetPipelineCacheSize = reinterpret_cast<PFN_vkGetPipelineCacheSize>(get_proc_addr(device, "vkGetPipelineCacheSize"));
776 if (UNLIKELY(!vtbl.GetPipelineCacheSize)) {
777 ALOGE("missing device proc: %s", "vkGetPipelineCacheSize");
778 success = false;
779 }
780 vtbl.GetPipelineCacheData = reinterpret_cast<PFN_vkGetPipelineCacheData>(get_proc_addr(device, "vkGetPipelineCacheData"));
781 if (UNLIKELY(!vtbl.GetPipelineCacheData)) {
782 ALOGE("missing device proc: %s", "vkGetPipelineCacheData");
783 success = false;
784 }
785 vtbl.MergePipelineCaches = reinterpret_cast<PFN_vkMergePipelineCaches>(get_proc_addr(device, "vkMergePipelineCaches"));
786 if (UNLIKELY(!vtbl.MergePipelineCaches)) {
787 ALOGE("missing device proc: %s", "vkMergePipelineCaches");
788 success = false;
789 }
790 vtbl.CreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(get_proc_addr(device, "vkCreateGraphicsPipelines"));
791 if (UNLIKELY(!vtbl.CreateGraphicsPipelines)) {
792 ALOGE("missing device proc: %s", "vkCreateGraphicsPipelines");
793 success = false;
794 }
795 vtbl.CreateComputePipelines = reinterpret_cast<PFN_vkCreateComputePipelines>(get_proc_addr(device, "vkCreateComputePipelines"));
796 if (UNLIKELY(!vtbl.CreateComputePipelines)) {
797 ALOGE("missing device proc: %s", "vkCreateComputePipelines");
798 success = false;
799 }
800 vtbl.DestroyPipeline = reinterpret_cast<PFN_vkDestroyPipeline>(get_proc_addr(device, "vkDestroyPipeline"));
801 if (UNLIKELY(!vtbl.DestroyPipeline)) {
802 ALOGE("missing device proc: %s", "vkDestroyPipeline");
803 success = false;
804 }
805 vtbl.CreatePipelineLayout = reinterpret_cast<PFN_vkCreatePipelineLayout>(get_proc_addr(device, "vkCreatePipelineLayout"));
806 if (UNLIKELY(!vtbl.CreatePipelineLayout)) {
807 ALOGE("missing device proc: %s", "vkCreatePipelineLayout");
808 success = false;
809 }
810 vtbl.DestroyPipelineLayout = reinterpret_cast<PFN_vkDestroyPipelineLayout>(get_proc_addr(device, "vkDestroyPipelineLayout"));
811 if (UNLIKELY(!vtbl.DestroyPipelineLayout)) {
812 ALOGE("missing device proc: %s", "vkDestroyPipelineLayout");
813 success = false;
814 }
815 vtbl.CreateSampler = reinterpret_cast<PFN_vkCreateSampler>(get_proc_addr(device, "vkCreateSampler"));
816 if (UNLIKELY(!vtbl.CreateSampler)) {
817 ALOGE("missing device proc: %s", "vkCreateSampler");
818 success = false;
819 }
820 vtbl.DestroySampler = reinterpret_cast<PFN_vkDestroySampler>(get_proc_addr(device, "vkDestroySampler"));
821 if (UNLIKELY(!vtbl.DestroySampler)) {
822 ALOGE("missing device proc: %s", "vkDestroySampler");
823 success = false;
824 }
825 vtbl.CreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(get_proc_addr(device, "vkCreateDescriptorSetLayout"));
826 if (UNLIKELY(!vtbl.CreateDescriptorSetLayout)) {
827 ALOGE("missing device proc: %s", "vkCreateDescriptorSetLayout");
828 success = false;
829 }
830 vtbl.DestroyDescriptorSetLayout = reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>(get_proc_addr(device, "vkDestroyDescriptorSetLayout"));
831 if (UNLIKELY(!vtbl.DestroyDescriptorSetLayout)) {
832 ALOGE("missing device proc: %s", "vkDestroyDescriptorSetLayout");
833 success = false;
834 }
835 vtbl.CreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(get_proc_addr(device, "vkCreateDescriptorPool"));
836 if (UNLIKELY(!vtbl.CreateDescriptorPool)) {
837 ALOGE("missing device proc: %s", "vkCreateDescriptorPool");
838 success = false;
839 }
840 vtbl.DestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>(get_proc_addr(device, "vkDestroyDescriptorPool"));
841 if (UNLIKELY(!vtbl.DestroyDescriptorPool)) {
842 ALOGE("missing device proc: %s", "vkDestroyDescriptorPool");
843 success = false;
844 }
845 vtbl.ResetDescriptorPool = reinterpret_cast<PFN_vkResetDescriptorPool>(get_proc_addr(device, "vkResetDescriptorPool"));
846 if (UNLIKELY(!vtbl.ResetDescriptorPool)) {
847 ALOGE("missing device proc: %s", "vkResetDescriptorPool");
848 success = false;
849 }
850 vtbl.AllocDescriptorSets = reinterpret_cast<PFN_vkAllocDescriptorSets>(get_proc_addr(device, "vkAllocDescriptorSets"));
851 if (UNLIKELY(!vtbl.AllocDescriptorSets)) {
852 ALOGE("missing device proc: %s", "vkAllocDescriptorSets");
853 success = false;
854 }
855 vtbl.FreeDescriptorSets = reinterpret_cast<PFN_vkFreeDescriptorSets>(get_proc_addr(device, "vkFreeDescriptorSets"));
856 if (UNLIKELY(!vtbl.FreeDescriptorSets)) {
857 ALOGE("missing device proc: %s", "vkFreeDescriptorSets");
858 success = false;
859 }
860 vtbl.UpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(get_proc_addr(device, "vkUpdateDescriptorSets"));
861 if (UNLIKELY(!vtbl.UpdateDescriptorSets)) {
862 ALOGE("missing device proc: %s", "vkUpdateDescriptorSets");
863 success = false;
864 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700865 vtbl.CreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(get_proc_addr(device, "vkCreateFramebuffer"));
866 if (UNLIKELY(!vtbl.CreateFramebuffer)) {
867 ALOGE("missing device proc: %s", "vkCreateFramebuffer");
868 success = false;
869 }
870 vtbl.DestroyFramebuffer = reinterpret_cast<PFN_vkDestroyFramebuffer>(get_proc_addr(device, "vkDestroyFramebuffer"));
871 if (UNLIKELY(!vtbl.DestroyFramebuffer)) {
872 ALOGE("missing device proc: %s", "vkDestroyFramebuffer");
873 success = false;
874 }
875 vtbl.CreateRenderPass = reinterpret_cast<PFN_vkCreateRenderPass>(get_proc_addr(device, "vkCreateRenderPass"));
876 if (UNLIKELY(!vtbl.CreateRenderPass)) {
877 ALOGE("missing device proc: %s", "vkCreateRenderPass");
878 success = false;
879 }
880 vtbl.DestroyRenderPass = reinterpret_cast<PFN_vkDestroyRenderPass>(get_proc_addr(device, "vkDestroyRenderPass"));
881 if (UNLIKELY(!vtbl.DestroyRenderPass)) {
882 ALOGE("missing device proc: %s", "vkDestroyRenderPass");
883 success = false;
884 }
885 vtbl.GetRenderAreaGranularity = reinterpret_cast<PFN_vkGetRenderAreaGranularity>(get_proc_addr(device, "vkGetRenderAreaGranularity"));
886 if (UNLIKELY(!vtbl.GetRenderAreaGranularity)) {
887 ALOGE("missing device proc: %s", "vkGetRenderAreaGranularity");
888 success = false;
889 }
890 vtbl.CreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(get_proc_addr(device, "vkCreateCommandPool"));
891 if (UNLIKELY(!vtbl.CreateCommandPool)) {
892 ALOGE("missing device proc: %s", "vkCreateCommandPool");
893 success = false;
894 }
895 vtbl.DestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(get_proc_addr(device, "vkDestroyCommandPool"));
896 if (UNLIKELY(!vtbl.DestroyCommandPool)) {
897 ALOGE("missing device proc: %s", "vkDestroyCommandPool");
898 success = false;
899 }
900 vtbl.ResetCommandPool = reinterpret_cast<PFN_vkResetCommandPool>(get_proc_addr(device, "vkResetCommandPool"));
901 if (UNLIKELY(!vtbl.ResetCommandPool)) {
902 ALOGE("missing device proc: %s", "vkResetCommandPool");
903 success = false;
904 }
Jesse Hallfbf97b02015-11-20 14:17:03 -0800905 vtbl.AllocCommandBuffers = reinterpret_cast<PFN_vkAllocCommandBuffers>(get_proc_addr(device, "vkAllocCommandBuffers"));
906 if (UNLIKELY(!vtbl.AllocCommandBuffers)) {
907 ALOGE("missing device proc: %s", "vkAllocCommandBuffers");
Jesse Hall04f4f472015-08-16 19:51:04 -0700908 success = false;
909 }
Jesse Hallfbf97b02015-11-20 14:17:03 -0800910 vtbl.FreeCommandBuffers = reinterpret_cast<PFN_vkFreeCommandBuffers>(get_proc_addr(device, "vkFreeCommandBuffers"));
911 if (UNLIKELY(!vtbl.FreeCommandBuffers)) {
912 ALOGE("missing device proc: %s", "vkFreeCommandBuffers");
Jesse Hall04f4f472015-08-16 19:51:04 -0700913 success = false;
914 }
915 vtbl.BeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(get_proc_addr(device, "vkBeginCommandBuffer"));
916 if (UNLIKELY(!vtbl.BeginCommandBuffer)) {
917 ALOGE("missing device proc: %s", "vkBeginCommandBuffer");
918 success = false;
919 }
920 vtbl.EndCommandBuffer = reinterpret_cast<PFN_vkEndCommandBuffer>(get_proc_addr(device, "vkEndCommandBuffer"));
921 if (UNLIKELY(!vtbl.EndCommandBuffer)) {
922 ALOGE("missing device proc: %s", "vkEndCommandBuffer");
923 success = false;
924 }
925 vtbl.ResetCommandBuffer = reinterpret_cast<PFN_vkResetCommandBuffer>(get_proc_addr(device, "vkResetCommandBuffer"));
926 if (UNLIKELY(!vtbl.ResetCommandBuffer)) {
927 ALOGE("missing device proc: %s", "vkResetCommandBuffer");
928 success = false;
929 }
930 vtbl.CmdBindPipeline = reinterpret_cast<PFN_vkCmdBindPipeline>(get_proc_addr(device, "vkCmdBindPipeline"));
931 if (UNLIKELY(!vtbl.CmdBindPipeline)) {
932 ALOGE("missing device proc: %s", "vkCmdBindPipeline");
933 success = false;
934 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700935 vtbl.CmdSetViewport = reinterpret_cast<PFN_vkCmdSetViewport>(get_proc_addr(device, "vkCmdSetViewport"));
936 if (UNLIKELY(!vtbl.CmdSetViewport)) {
937 ALOGE("missing device proc: %s", "vkCmdSetViewport");
Jesse Hall04f4f472015-08-16 19:51:04 -0700938 success = false;
939 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700940 vtbl.CmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(get_proc_addr(device, "vkCmdSetScissor"));
941 if (UNLIKELY(!vtbl.CmdSetScissor)) {
942 ALOGE("missing device proc: %s", "vkCmdSetScissor");
Jesse Hall04f4f472015-08-16 19:51:04 -0700943 success = false;
944 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700945 vtbl.CmdSetLineWidth = reinterpret_cast<PFN_vkCmdSetLineWidth>(get_proc_addr(device, "vkCmdSetLineWidth"));
946 if (UNLIKELY(!vtbl.CmdSetLineWidth)) {
947 ALOGE("missing device proc: %s", "vkCmdSetLineWidth");
Jesse Hall04f4f472015-08-16 19:51:04 -0700948 success = false;
949 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700950 vtbl.CmdSetDepthBias = reinterpret_cast<PFN_vkCmdSetDepthBias>(get_proc_addr(device, "vkCmdSetDepthBias"));
951 if (UNLIKELY(!vtbl.CmdSetDepthBias)) {
952 ALOGE("missing device proc: %s", "vkCmdSetDepthBias");
953 success = false;
954 }
955 vtbl.CmdSetBlendConstants = reinterpret_cast<PFN_vkCmdSetBlendConstants>(get_proc_addr(device, "vkCmdSetBlendConstants"));
956 if (UNLIKELY(!vtbl.CmdSetBlendConstants)) {
957 ALOGE("missing device proc: %s", "vkCmdSetBlendConstants");
958 success = false;
959 }
960 vtbl.CmdSetDepthBounds = reinterpret_cast<PFN_vkCmdSetDepthBounds>(get_proc_addr(device, "vkCmdSetDepthBounds"));
961 if (UNLIKELY(!vtbl.CmdSetDepthBounds)) {
962 ALOGE("missing device proc: %s", "vkCmdSetDepthBounds");
963 success = false;
964 }
965 vtbl.CmdSetStencilCompareMask = reinterpret_cast<PFN_vkCmdSetStencilCompareMask>(get_proc_addr(device, "vkCmdSetStencilCompareMask"));
966 if (UNLIKELY(!vtbl.CmdSetStencilCompareMask)) {
967 ALOGE("missing device proc: %s", "vkCmdSetStencilCompareMask");
968 success = false;
969 }
970 vtbl.CmdSetStencilWriteMask = reinterpret_cast<PFN_vkCmdSetStencilWriteMask>(get_proc_addr(device, "vkCmdSetStencilWriteMask"));
971 if (UNLIKELY(!vtbl.CmdSetStencilWriteMask)) {
972 ALOGE("missing device proc: %s", "vkCmdSetStencilWriteMask");
973 success = false;
974 }
975 vtbl.CmdSetStencilReference = reinterpret_cast<PFN_vkCmdSetStencilReference>(get_proc_addr(device, "vkCmdSetStencilReference"));
976 if (UNLIKELY(!vtbl.CmdSetStencilReference)) {
977 ALOGE("missing device proc: %s", "vkCmdSetStencilReference");
Jesse Hall04f4f472015-08-16 19:51:04 -0700978 success = false;
979 }
980 vtbl.CmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>(get_proc_addr(device, "vkCmdBindDescriptorSets"));
981 if (UNLIKELY(!vtbl.CmdBindDescriptorSets)) {
982 ALOGE("missing device proc: %s", "vkCmdBindDescriptorSets");
983 success = false;
984 }
985 vtbl.CmdBindIndexBuffer = reinterpret_cast<PFN_vkCmdBindIndexBuffer>(get_proc_addr(device, "vkCmdBindIndexBuffer"));
986 if (UNLIKELY(!vtbl.CmdBindIndexBuffer)) {
987 ALOGE("missing device proc: %s", "vkCmdBindIndexBuffer");
988 success = false;
989 }
990 vtbl.CmdBindVertexBuffers = reinterpret_cast<PFN_vkCmdBindVertexBuffers>(get_proc_addr(device, "vkCmdBindVertexBuffers"));
991 if (UNLIKELY(!vtbl.CmdBindVertexBuffers)) {
992 ALOGE("missing device proc: %s", "vkCmdBindVertexBuffers");
993 success = false;
994 }
995 vtbl.CmdDraw = reinterpret_cast<PFN_vkCmdDraw>(get_proc_addr(device, "vkCmdDraw"));
996 if (UNLIKELY(!vtbl.CmdDraw)) {
997 ALOGE("missing device proc: %s", "vkCmdDraw");
998 success = false;
999 }
1000 vtbl.CmdDrawIndexed = reinterpret_cast<PFN_vkCmdDrawIndexed>(get_proc_addr(device, "vkCmdDrawIndexed"));
1001 if (UNLIKELY(!vtbl.CmdDrawIndexed)) {
1002 ALOGE("missing device proc: %s", "vkCmdDrawIndexed");
1003 success = false;
1004 }
1005 vtbl.CmdDrawIndirect = reinterpret_cast<PFN_vkCmdDrawIndirect>(get_proc_addr(device, "vkCmdDrawIndirect"));
1006 if (UNLIKELY(!vtbl.CmdDrawIndirect)) {
1007 ALOGE("missing device proc: %s", "vkCmdDrawIndirect");
1008 success = false;
1009 }
1010 vtbl.CmdDrawIndexedIndirect = reinterpret_cast<PFN_vkCmdDrawIndexedIndirect>(get_proc_addr(device, "vkCmdDrawIndexedIndirect"));
1011 if (UNLIKELY(!vtbl.CmdDrawIndexedIndirect)) {
1012 ALOGE("missing device proc: %s", "vkCmdDrawIndexedIndirect");
1013 success = false;
1014 }
1015 vtbl.CmdDispatch = reinterpret_cast<PFN_vkCmdDispatch>(get_proc_addr(device, "vkCmdDispatch"));
1016 if (UNLIKELY(!vtbl.CmdDispatch)) {
1017 ALOGE("missing device proc: %s", "vkCmdDispatch");
1018 success = false;
1019 }
1020 vtbl.CmdDispatchIndirect = reinterpret_cast<PFN_vkCmdDispatchIndirect>(get_proc_addr(device, "vkCmdDispatchIndirect"));
1021 if (UNLIKELY(!vtbl.CmdDispatchIndirect)) {
1022 ALOGE("missing device proc: %s", "vkCmdDispatchIndirect");
1023 success = false;
1024 }
1025 vtbl.CmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(get_proc_addr(device, "vkCmdCopyBuffer"));
1026 if (UNLIKELY(!vtbl.CmdCopyBuffer)) {
1027 ALOGE("missing device proc: %s", "vkCmdCopyBuffer");
1028 success = false;
1029 }
1030 vtbl.CmdCopyImage = reinterpret_cast<PFN_vkCmdCopyImage>(get_proc_addr(device, "vkCmdCopyImage"));
1031 if (UNLIKELY(!vtbl.CmdCopyImage)) {
1032 ALOGE("missing device proc: %s", "vkCmdCopyImage");
1033 success = false;
1034 }
1035 vtbl.CmdBlitImage = reinterpret_cast<PFN_vkCmdBlitImage>(get_proc_addr(device, "vkCmdBlitImage"));
1036 if (UNLIKELY(!vtbl.CmdBlitImage)) {
1037 ALOGE("missing device proc: %s", "vkCmdBlitImage");
1038 success = false;
1039 }
1040 vtbl.CmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(get_proc_addr(device, "vkCmdCopyBufferToImage"));
1041 if (UNLIKELY(!vtbl.CmdCopyBufferToImage)) {
1042 ALOGE("missing device proc: %s", "vkCmdCopyBufferToImage");
1043 success = false;
1044 }
1045 vtbl.CmdCopyImageToBuffer = reinterpret_cast<PFN_vkCmdCopyImageToBuffer>(get_proc_addr(device, "vkCmdCopyImageToBuffer"));
1046 if (UNLIKELY(!vtbl.CmdCopyImageToBuffer)) {
1047 ALOGE("missing device proc: %s", "vkCmdCopyImageToBuffer");
1048 success = false;
1049 }
1050 vtbl.CmdUpdateBuffer = reinterpret_cast<PFN_vkCmdUpdateBuffer>(get_proc_addr(device, "vkCmdUpdateBuffer"));
1051 if (UNLIKELY(!vtbl.CmdUpdateBuffer)) {
1052 ALOGE("missing device proc: %s", "vkCmdUpdateBuffer");
1053 success = false;
1054 }
1055 vtbl.CmdFillBuffer = reinterpret_cast<PFN_vkCmdFillBuffer>(get_proc_addr(device, "vkCmdFillBuffer"));
1056 if (UNLIKELY(!vtbl.CmdFillBuffer)) {
1057 ALOGE("missing device proc: %s", "vkCmdFillBuffer");
1058 success = false;
1059 }
1060 vtbl.CmdClearColorImage = reinterpret_cast<PFN_vkCmdClearColorImage>(get_proc_addr(device, "vkCmdClearColorImage"));
1061 if (UNLIKELY(!vtbl.CmdClearColorImage)) {
1062 ALOGE("missing device proc: %s", "vkCmdClearColorImage");
1063 success = false;
1064 }
1065 vtbl.CmdClearDepthStencilImage = reinterpret_cast<PFN_vkCmdClearDepthStencilImage>(get_proc_addr(device, "vkCmdClearDepthStencilImage"));
1066 if (UNLIKELY(!vtbl.CmdClearDepthStencilImage)) {
1067 ALOGE("missing device proc: %s", "vkCmdClearDepthStencilImage");
1068 success = false;
1069 }
Jesse Hallae38f732015-11-19 21:32:50 -08001070 vtbl.CmdClearAttachments = reinterpret_cast<PFN_vkCmdClearAttachments>(get_proc_addr(device, "vkCmdClearAttachments"));
1071 if (UNLIKELY(!vtbl.CmdClearAttachments)) {
1072 ALOGE("missing device proc: %s", "vkCmdClearAttachments");
Jesse Hall04f4f472015-08-16 19:51:04 -07001073 success = false;
1074 }
1075 vtbl.CmdResolveImage = reinterpret_cast<PFN_vkCmdResolveImage>(get_proc_addr(device, "vkCmdResolveImage"));
1076 if (UNLIKELY(!vtbl.CmdResolveImage)) {
1077 ALOGE("missing device proc: %s", "vkCmdResolveImage");
1078 success = false;
1079 }
1080 vtbl.CmdSetEvent = reinterpret_cast<PFN_vkCmdSetEvent>(get_proc_addr(device, "vkCmdSetEvent"));
1081 if (UNLIKELY(!vtbl.CmdSetEvent)) {
1082 ALOGE("missing device proc: %s", "vkCmdSetEvent");
1083 success = false;
1084 }
1085 vtbl.CmdResetEvent = reinterpret_cast<PFN_vkCmdResetEvent>(get_proc_addr(device, "vkCmdResetEvent"));
1086 if (UNLIKELY(!vtbl.CmdResetEvent)) {
1087 ALOGE("missing device proc: %s", "vkCmdResetEvent");
1088 success = false;
1089 }
1090 vtbl.CmdWaitEvents = reinterpret_cast<PFN_vkCmdWaitEvents>(get_proc_addr(device, "vkCmdWaitEvents"));
1091 if (UNLIKELY(!vtbl.CmdWaitEvents)) {
1092 ALOGE("missing device proc: %s", "vkCmdWaitEvents");
1093 success = false;
1094 }
1095 vtbl.CmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(get_proc_addr(device, "vkCmdPipelineBarrier"));
1096 if (UNLIKELY(!vtbl.CmdPipelineBarrier)) {
1097 ALOGE("missing device proc: %s", "vkCmdPipelineBarrier");
1098 success = false;
1099 }
1100 vtbl.CmdBeginQuery = reinterpret_cast<PFN_vkCmdBeginQuery>(get_proc_addr(device, "vkCmdBeginQuery"));
1101 if (UNLIKELY(!vtbl.CmdBeginQuery)) {
1102 ALOGE("missing device proc: %s", "vkCmdBeginQuery");
1103 success = false;
1104 }
1105 vtbl.CmdEndQuery = reinterpret_cast<PFN_vkCmdEndQuery>(get_proc_addr(device, "vkCmdEndQuery"));
1106 if (UNLIKELY(!vtbl.CmdEndQuery)) {
1107 ALOGE("missing device proc: %s", "vkCmdEndQuery");
1108 success = false;
1109 }
1110 vtbl.CmdResetQueryPool = reinterpret_cast<PFN_vkCmdResetQueryPool>(get_proc_addr(device, "vkCmdResetQueryPool"));
1111 if (UNLIKELY(!vtbl.CmdResetQueryPool)) {
1112 ALOGE("missing device proc: %s", "vkCmdResetQueryPool");
1113 success = false;
1114 }
1115 vtbl.CmdWriteTimestamp = reinterpret_cast<PFN_vkCmdWriteTimestamp>(get_proc_addr(device, "vkCmdWriteTimestamp"));
1116 if (UNLIKELY(!vtbl.CmdWriteTimestamp)) {
1117 ALOGE("missing device proc: %s", "vkCmdWriteTimestamp");
1118 success = false;
1119 }
1120 vtbl.CmdCopyQueryPoolResults = reinterpret_cast<PFN_vkCmdCopyQueryPoolResults>(get_proc_addr(device, "vkCmdCopyQueryPoolResults"));
1121 if (UNLIKELY(!vtbl.CmdCopyQueryPoolResults)) {
1122 ALOGE("missing device proc: %s", "vkCmdCopyQueryPoolResults");
1123 success = false;
1124 }
1125 vtbl.CmdPushConstants = reinterpret_cast<PFN_vkCmdPushConstants>(get_proc_addr(device, "vkCmdPushConstants"));
1126 if (UNLIKELY(!vtbl.CmdPushConstants)) {
1127 ALOGE("missing device proc: %s", "vkCmdPushConstants");
1128 success = false;
1129 }
1130 vtbl.CmdBeginRenderPass = reinterpret_cast<PFN_vkCmdBeginRenderPass>(get_proc_addr(device, "vkCmdBeginRenderPass"));
1131 if (UNLIKELY(!vtbl.CmdBeginRenderPass)) {
1132 ALOGE("missing device proc: %s", "vkCmdBeginRenderPass");
1133 success = false;
1134 }
1135 vtbl.CmdNextSubpass = reinterpret_cast<PFN_vkCmdNextSubpass>(get_proc_addr(device, "vkCmdNextSubpass"));
1136 if (UNLIKELY(!vtbl.CmdNextSubpass)) {
1137 ALOGE("missing device proc: %s", "vkCmdNextSubpass");
1138 success = false;
1139 }
1140 vtbl.CmdEndRenderPass = reinterpret_cast<PFN_vkCmdEndRenderPass>(get_proc_addr(device, "vkCmdEndRenderPass"));
1141 if (UNLIKELY(!vtbl.CmdEndRenderPass)) {
1142 ALOGE("missing device proc: %s", "vkCmdEndRenderPass");
1143 success = false;
1144 }
1145 vtbl.CmdExecuteCommands = reinterpret_cast<PFN_vkCmdExecuteCommands>(get_proc_addr(device, "vkCmdExecuteCommands"));
1146 if (UNLIKELY(!vtbl.CmdExecuteCommands)) {
1147 ALOGE("missing device proc: %s", "vkCmdExecuteCommands");
1148 success = false;
1149 }
Michael Lentine88594d72015-11-12 12:49:45 -08001150 vtbl.GetSurfacePropertiesKHR = reinterpret_cast<PFN_vkGetSurfacePropertiesKHR>(get_proc_addr(device, "vkGetSurfacePropertiesKHR"));
1151 if (UNLIKELY(!vtbl.GetSurfacePropertiesKHR)) {
1152 ALOGE("missing device proc: %s", "vkGetSurfacePropertiesKHR");
1153 success = false;
1154 }
1155 vtbl.GetSurfaceFormatsKHR = reinterpret_cast<PFN_vkGetSurfaceFormatsKHR>(get_proc_addr(device, "vkGetSurfaceFormatsKHR"));
1156 if (UNLIKELY(!vtbl.GetSurfaceFormatsKHR)) {
1157 ALOGE("missing device proc: %s", "vkGetSurfaceFormatsKHR");
1158 success = false;
1159 }
1160 vtbl.GetSurfacePresentModesKHR = reinterpret_cast<PFN_vkGetSurfacePresentModesKHR>(get_proc_addr(device, "vkGetSurfacePresentModesKHR"));
1161 if (UNLIKELY(!vtbl.GetSurfacePresentModesKHR)) {
1162 ALOGE("missing device proc: %s", "vkGetSurfacePresentModesKHR");
1163 success = false;
1164 }
1165 vtbl.CreateSwapchainKHR = reinterpret_cast<PFN_vkCreateSwapchainKHR>(get_proc_addr(device, "vkCreateSwapchainKHR"));
1166 if (UNLIKELY(!vtbl.CreateSwapchainKHR)) {
1167 ALOGE("missing device proc: %s", "vkCreateSwapchainKHR");
1168 success = false;
1169 }
1170 vtbl.DestroySwapchainKHR = reinterpret_cast<PFN_vkDestroySwapchainKHR>(get_proc_addr(device, "vkDestroySwapchainKHR"));
1171 if (UNLIKELY(!vtbl.DestroySwapchainKHR)) {
1172 ALOGE("missing device proc: %s", "vkDestroySwapchainKHR");
1173 success = false;
1174 }
1175 vtbl.GetSwapchainImagesKHR = reinterpret_cast<PFN_vkGetSwapchainImagesKHR>(get_proc_addr(device, "vkGetSwapchainImagesKHR"));
1176 if (UNLIKELY(!vtbl.GetSwapchainImagesKHR)) {
1177 ALOGE("missing device proc: %s", "vkGetSwapchainImagesKHR");
1178 success = false;
1179 }
1180 vtbl.AcquireNextImageKHR = reinterpret_cast<PFN_vkAcquireNextImageKHR>(get_proc_addr(device, "vkAcquireNextImageKHR"));
1181 if (UNLIKELY(!vtbl.AcquireNextImageKHR)) {
1182 ALOGE("missing device proc: %s", "vkAcquireNextImageKHR");
1183 success = false;
1184 }
1185 vtbl.QueuePresentKHR = reinterpret_cast<PFN_vkQueuePresentKHR>(get_proc_addr(device, "vkQueuePresentKHR"));
1186 if (UNLIKELY(!vtbl.QueuePresentKHR)) {
1187 ALOGE("missing device proc: %s", "vkQueuePresentKHR");
1188 success = false;
1189 }
Jesse Hall70f93352015-11-04 09:41:31 -08001190 vtbl.GetSwapchainGrallocUsageANDROID = reinterpret_cast<PFN_vkGetSwapchainGrallocUsageANDROID>(get_proc_addr(device, "vkGetSwapchainGrallocUsageANDROID"));
1191 if (UNLIKELY(!vtbl.GetSwapchainGrallocUsageANDROID)) {
1192 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1193 // ALOGE("missing device proc: %s", "vkGetSwapchainGrallocUsageANDROID");
1194 ALOGW("missing device proc: %s", "vkGetSwapchainGrallocUsageANDROID");
1195 // success = false;
1196 }
Jesse Hallab9aeef2015-11-04 10:56:20 -08001197 vtbl.AcquireImageANDROID = reinterpret_cast<PFN_vkAcquireImageANDROID>(get_proc_addr(device, "vkAcquireImageANDROID"));
1198 if (UNLIKELY(!vtbl.AcquireImageANDROID)) {
1199 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1200 // ALOGE("missing device proc: %s", "vkImportNativeFenceANDROID");
1201 ALOGW("missing device proc: %s", "vkAcquireImageANDROID");
1202 // success = false;
Jesse Hallb1352bc2015-09-04 16:12:33 -07001203 }
Jesse Hallab9aeef2015-11-04 10:56:20 -08001204 vtbl.QueueSignalReleaseImageANDROID = reinterpret_cast<PFN_vkQueueSignalReleaseImageANDROID>(get_proc_addr(device, "vkQueueSignalReleaseImageANDROID"));
1205 if (UNLIKELY(!vtbl.QueueSignalReleaseImageANDROID)) {
1206 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1207 // ALOGE("missing device proc: %s", "vkQueueSignalReleaseImageANDROID");
1208 ALOGW("missing device proc: %s", "vkQueueSignalReleaseImageANDROID");
1209 // success = false;
1210 }
1211 // TODO(jessehall): these are deprecated; remove when drivers have been updated
1212 vtbl.ImportNativeFenceANDROID = reinterpret_cast<PFN_vkImportNativeFenceANDROID>(get_proc_addr(device, "vkImportNativeFenceANDROID"));
Jesse Hallb1352bc2015-09-04 16:12:33 -07001213 vtbl.QueueSignalNativeFenceANDROID = reinterpret_cast<PFN_vkQueueSignalNativeFenceANDROID>(get_proc_addr(device, "vkQueueSignalNativeFenceANDROID"));
Jesse Hallab9aeef2015-11-04 10:56:20 -08001214 if (!((!vtbl.AcquireImageANDROID && !vtbl.QueueSignalReleaseImageANDROID && vtbl.ImportNativeFenceANDROID && vtbl.QueueSignalNativeFenceANDROID) ||
1215 (vtbl.AcquireImageANDROID && vtbl.QueueSignalReleaseImageANDROID && !vtbl.ImportNativeFenceANDROID && !vtbl.QueueSignalNativeFenceANDROID))) {
1216 ALOGE("driver doesn't support exactly one of old- or new-style VK_EXT_ANDROID_native_buffer commands");
Jesse Hallb1352bc2015-09-04 16:12:33 -07001217 success = false;
1218 }
Jesse Hall04f4f472015-08-16 19:51:04 -07001219 // clang-format on
1220 return success;
1221}
1222
1223} // namespace vulkan