blob: bd16ac504620694c2fae0f757a9c06335a3407aa [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
52 {"vkCreateDevice", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDevice)},
53 {"vkDestroyInstance", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyInstance)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -070054 {"vkEnumerateDeviceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceExtensionProperties)},
55 {"vkEnumerateDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceLayerProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -070056 {"vkEnumeratePhysicalDevices", reinterpret_cast<PFN_vkVoidFunction>(vkEnumeratePhysicalDevices)},
57 {"vkGetInstanceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(vkGetInstanceProcAddr)},
Jesse Hall04f4f472015-08-16 19:51:04 -070058 {"vkGetPhysicalDeviceFeatures", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceFeatures)},
59 {"vkGetPhysicalDeviceFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceFormatProperties)},
60 {"vkGetPhysicalDeviceImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceImageFormatProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -070061 {"vkGetPhysicalDeviceMemoryProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceMemoryProperties)},
62 {"vkGetPhysicalDeviceProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceProperties)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -070063 {"vkGetPhysicalDeviceQueueFamilyProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceQueueFamilyProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -070064 {"vkGetPhysicalDeviceSparseImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSparseImageFormatProperties)},
Michael Lentine88594d72015-11-12 12:49:45 -080065 {"vkGetPhysicalDeviceSurfaceSupportKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSurfaceSupportKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -070066 // clang-format on
67};
68
69const NameProcEntry kDeviceProcTbl[] = {
70 // clang-format off
Michael Lentine88594d72015-11-12 12:49:45 -080071 {"vkAcquireNextImageKHR", reinterpret_cast<PFN_vkVoidFunction>(vkAcquireNextImageKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -070072 {"vkAllocDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkAllocDescriptorSets)},
73 {"vkAllocMemory", reinterpret_cast<PFN_vkVoidFunction>(vkAllocMemory)},
74 {"vkBeginCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkBeginCommandBuffer)},
75 {"vkBindBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkBindBufferMemory)},
76 {"vkBindImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkBindImageMemory)},
77 {"vkCmdBeginQuery", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBeginQuery)},
78 {"vkCmdBeginRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBeginRenderPass)},
79 {"vkCmdBindDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindDescriptorSets)},
Jesse Hall04f4f472015-08-16 19:51:04 -070080 {"vkCmdBindIndexBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindIndexBuffer)},
81 {"vkCmdBindPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindPipeline)},
82 {"vkCmdBindVertexBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindVertexBuffers)},
83 {"vkCmdBlitImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBlitImage)},
Jesse Hallae38f732015-11-19 21:32:50 -080084 {"vkCmdClearAttachments", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearAttachments)},
Jesse Hall04f4f472015-08-16 19:51:04 -070085 {"vkCmdClearColorImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearColorImage)},
Jesse Hall04f4f472015-08-16 19:51:04 -070086 {"vkCmdClearDepthStencilImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearDepthStencilImage)},
87 {"vkCmdCopyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBuffer)},
88 {"vkCmdCopyBufferToImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBufferToImage)},
89 {"vkCmdCopyImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyImage)},
90 {"vkCmdCopyImageToBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyImageToBuffer)},
91 {"vkCmdCopyQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyQueryPoolResults)},
92 {"vkCmdDispatch", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDispatch)},
93 {"vkCmdDispatchIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDispatchIndirect)},
94 {"vkCmdDraw", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDraw)},
95 {"vkCmdDrawIndexed", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndexed)},
96 {"vkCmdDrawIndexedIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndexedIndirect)},
97 {"vkCmdDrawIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndirect)},
98 {"vkCmdEndQuery", reinterpret_cast<PFN_vkVoidFunction>(vkCmdEndQuery)},
99 {"vkCmdEndRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdEndRenderPass)},
100 {"vkCmdExecuteCommands", reinterpret_cast<PFN_vkVoidFunction>(vkCmdExecuteCommands)},
101 {"vkCmdFillBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdFillBuffer)},
102 {"vkCmdNextSubpass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdNextSubpass)},
103 {"vkCmdPipelineBarrier", reinterpret_cast<PFN_vkVoidFunction>(vkCmdPipelineBarrier)},
104 {"vkCmdPushConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdPushConstants)},
105 {"vkCmdResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetEvent)},
106 {"vkCmdResetQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetQueryPool)},
107 {"vkCmdResolveImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResolveImage)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700108 {"vkCmdSetBlendConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetBlendConstants)},
109 {"vkCmdSetDepthBias", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBias)},
110 {"vkCmdSetDepthBounds", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBounds)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700111 {"vkCmdSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetEvent)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700112 {"vkCmdSetLineWidth", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetLineWidth)},
113 {"vkCmdSetScissor", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetScissor)},
114 {"vkCmdSetStencilCompareMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilCompareMask)},
115 {"vkCmdSetStencilReference", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilReference)},
116 {"vkCmdSetStencilWriteMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilWriteMask)},
117 {"vkCmdSetViewport", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetViewport)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700118 {"vkCmdUpdateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdUpdateBuffer)},
119 {"vkCmdWaitEvents", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWaitEvents)},
120 {"vkCmdWriteTimestamp", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWriteTimestamp)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700121 {"vkCreateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBuffer)},
122 {"vkCreateBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBufferView)},
123 {"vkCreateCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandBuffer)},
124 {"vkCreateCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandPool)},
125 {"vkCreateComputePipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateComputePipelines)},
126 {"vkCreateDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorPool)},
127 {"vkCreateDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorSetLayout)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700128 {"vkCreateEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCreateEvent)},
129 {"vkCreateFence", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFence)},
130 {"vkCreateFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFramebuffer)},
131 {"vkCreateGraphicsPipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateGraphicsPipelines)},
132 {"vkCreateImage", reinterpret_cast<PFN_vkVoidFunction>(vkCreateImage)},
133 {"vkCreateImageView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateImageView)},
134 {"vkCreatePipelineCache", reinterpret_cast<PFN_vkVoidFunction>(vkCreatePipelineCache)},
135 {"vkCreatePipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreatePipelineLayout)},
136 {"vkCreateQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateQueryPool)},
137 {"vkCreateRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCreateRenderPass)},
138 {"vkCreateSampler", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSampler)},
139 {"vkCreateSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSemaphore)},
140 {"vkCreateShader", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShader)},
141 {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800142 {"vkCreateSwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700143 {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBuffer)},
144 {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBufferView)},
145 {"vkDestroyCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandBuffer)},
146 {"vkDestroyCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandPool)},
147 {"vkDestroyDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorPool)},
148 {"vkDestroyDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorSetLayout)},
149 {"vkDestroyDevice", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDevice)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700150 {"vkDestroyEvent", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyEvent)},
151 {"vkDestroyFence", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFence)},
152 {"vkDestroyFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFramebuffer)},
153 {"vkDestroyImage", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyImage)},
154 {"vkDestroyImageView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyImageView)},
155 {"vkDestroyPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipeline)},
156 {"vkDestroyPipelineCache", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipelineCache)},
157 {"vkDestroyPipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipelineLayout)},
158 {"vkDestroyQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyQueryPool)},
159 {"vkDestroyRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyRenderPass)},
160 {"vkDestroySampler", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySampler)},
161 {"vkDestroySemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySemaphore)},
162 {"vkDestroyShader", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShader)},
163 {"vkDestroyShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800164 {"vkDestroySwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700165 {"vkDeviceWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkDeviceWaitIdle)},
166 {"vkEndCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkEndCommandBuffer)},
167 {"vkFlushMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkFlushMappedMemoryRanges)},
168 {"vkFreeDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkFreeDescriptorSets)},
169 {"vkFreeMemory", reinterpret_cast<PFN_vkVoidFunction>(vkFreeMemory)},
170 {"vkGetBufferMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetBufferMemoryRequirements)},
171 {"vkGetDeviceMemoryCommitment", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceMemoryCommitment)},
172 {"vkGetDeviceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceProcAddr)},
173 {"vkGetDeviceQueue", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceQueue)},
174 {"vkGetEventStatus", reinterpret_cast<PFN_vkVoidFunction>(vkGetEventStatus)},
175 {"vkGetFenceStatus", reinterpret_cast<PFN_vkVoidFunction>(vkGetFenceStatus)},
176 {"vkGetImageMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageMemoryRequirements)},
177 {"vkGetImageSparseMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSparseMemoryRequirements)},
178 {"vkGetImageSubresourceLayout", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSubresourceLayout)},
179 {"vkGetPipelineCacheData", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheData)},
180 {"vkGetPipelineCacheSize", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheSize)},
181 {"vkGetQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkGetQueryPoolResults)},
182 {"vkGetRenderAreaGranularity", reinterpret_cast<PFN_vkVoidFunction>(vkGetRenderAreaGranularity)},
Michael Lentine88594d72015-11-12 12:49:45 -0800183 {"vkGetSurfaceFormatsKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfaceFormatsKHR)},
184 {"vkGetSurfacePresentModesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfacePresentModesKHR)},
185 {"vkGetSurfacePropertiesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfacePropertiesKHR)},
186 {"vkGetSwapchainImagesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSwapchainImagesKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700187 {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkInvalidateMappedMemoryRanges)},
188 {"vkMapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkMapMemory)},
189 {"vkMergePipelineCaches", reinterpret_cast<PFN_vkVoidFunction>(vkMergePipelineCaches)},
190 {"vkQueueBindSparseBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseBufferMemory)},
191 {"vkQueueBindSparseImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageMemory)},
192 {"vkQueueBindSparseImageOpaqueMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageOpaqueMemory)},
Michael Lentine88594d72015-11-12 12:49:45 -0800193 {"vkQueuePresentKHR", reinterpret_cast<PFN_vkVoidFunction>(vkQueuePresentKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700194 {"vkQueueSignalSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSignalSemaphore)},
195 {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSubmit)},
196 {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitIdle)},
197 {"vkQueueWaitSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitSemaphore)},
198 {"vkResetCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandBuffer)},
199 {"vkResetCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandPool)},
200 {"vkResetDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetDescriptorPool)},
201 {"vkResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkResetEvent)},
202 {"vkResetFences", reinterpret_cast<PFN_vkVoidFunction>(vkResetFences)},
203 {"vkSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkSetEvent)},
204 {"vkUnmapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkUnmapMemory)},
205 {"vkUpdateDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkUpdateDescriptorSets)},
206 {"vkWaitForFences", reinterpret_cast<PFN_vkVoidFunction>(vkWaitForFences)},
207 // clang-format on
208};
209
210const NameOffsetEntry kInstanceOffsetTbl[] = {
211 // clang-format off
212 {"vkCreateDevice", offsetof(InstanceVtbl, CreateDevice)},
213 {"vkDestroyInstance", offsetof(InstanceVtbl, DestroyInstance)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700214 {"vkEnumerateDeviceExtensionProperties", offsetof(InstanceVtbl, EnumerateDeviceExtensionProperties)},
215 {"vkEnumerateDeviceLayerProperties", offsetof(InstanceVtbl, EnumerateDeviceLayerProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700216 {"vkEnumeratePhysicalDevices", offsetof(InstanceVtbl, EnumeratePhysicalDevices)},
217 {"vkGetInstanceProcAddr", offsetof(InstanceVtbl, GetInstanceProcAddr)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700218 {"vkGetPhysicalDeviceFeatures", offsetof(InstanceVtbl, GetPhysicalDeviceFeatures)},
219 {"vkGetPhysicalDeviceFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceFormatProperties)},
220 {"vkGetPhysicalDeviceImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceImageFormatProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700221 {"vkGetPhysicalDeviceMemoryProperties", offsetof(InstanceVtbl, GetPhysicalDeviceMemoryProperties)},
222 {"vkGetPhysicalDeviceProperties", offsetof(InstanceVtbl, GetPhysicalDeviceProperties)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700223 {"vkGetPhysicalDeviceQueueFamilyProperties", offsetof(InstanceVtbl, GetPhysicalDeviceQueueFamilyProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700224 {"vkGetPhysicalDeviceSparseImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceSparseImageFormatProperties)},
Michael Lentine88594d72015-11-12 12:49:45 -0800225 {"vkGetPhysicalDeviceSurfaceSupportKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfaceSupportKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700226 // clang-format on
227};
228
229const NameOffsetEntry kDeviceOffsetTbl[] = {
230 // clang-format off
Michael Lentine88594d72015-11-12 12:49:45 -0800231 {"vkAcquireNextImageKHR", offsetof(DeviceVtbl, AcquireNextImageKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700232 {"vkAllocDescriptorSets", offsetof(DeviceVtbl, AllocDescriptorSets)},
233 {"vkAllocMemory", offsetof(DeviceVtbl, AllocMemory)},
234 {"vkBeginCommandBuffer", offsetof(DeviceVtbl, BeginCommandBuffer)},
235 {"vkBindBufferMemory", offsetof(DeviceVtbl, BindBufferMemory)},
236 {"vkBindImageMemory", offsetof(DeviceVtbl, BindImageMemory)},
237 {"vkCmdBeginQuery", offsetof(DeviceVtbl, CmdBeginQuery)},
238 {"vkCmdBeginRenderPass", offsetof(DeviceVtbl, CmdBeginRenderPass)},
239 {"vkCmdBindDescriptorSets", offsetof(DeviceVtbl, CmdBindDescriptorSets)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700240 {"vkCmdBindIndexBuffer", offsetof(DeviceVtbl, CmdBindIndexBuffer)},
241 {"vkCmdBindPipeline", offsetof(DeviceVtbl, CmdBindPipeline)},
242 {"vkCmdBindVertexBuffers", offsetof(DeviceVtbl, CmdBindVertexBuffers)},
243 {"vkCmdBlitImage", offsetof(DeviceVtbl, CmdBlitImage)},
Jesse Hallae38f732015-11-19 21:32:50 -0800244 {"vkCmdClearAttachments", offsetof(DeviceVtbl, CmdClearAttachments)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700245 {"vkCmdClearColorImage", offsetof(DeviceVtbl, CmdClearColorImage)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700246 {"vkCmdClearDepthStencilImage", offsetof(DeviceVtbl, CmdClearDepthStencilImage)},
247 {"vkCmdCopyBuffer", offsetof(DeviceVtbl, CmdCopyBuffer)},
248 {"vkCmdCopyBufferToImage", offsetof(DeviceVtbl, CmdCopyBufferToImage)},
249 {"vkCmdCopyImage", offsetof(DeviceVtbl, CmdCopyImage)},
250 {"vkCmdCopyImageToBuffer", offsetof(DeviceVtbl, CmdCopyImageToBuffer)},
251 {"vkCmdCopyQueryPoolResults", offsetof(DeviceVtbl, CmdCopyQueryPoolResults)},
252 {"vkCmdDispatch", offsetof(DeviceVtbl, CmdDispatch)},
253 {"vkCmdDispatchIndirect", offsetof(DeviceVtbl, CmdDispatchIndirect)},
254 {"vkCmdDraw", offsetof(DeviceVtbl, CmdDraw)},
255 {"vkCmdDrawIndexed", offsetof(DeviceVtbl, CmdDrawIndexed)},
256 {"vkCmdDrawIndexedIndirect", offsetof(DeviceVtbl, CmdDrawIndexedIndirect)},
257 {"vkCmdDrawIndirect", offsetof(DeviceVtbl, CmdDrawIndirect)},
258 {"vkCmdEndQuery", offsetof(DeviceVtbl, CmdEndQuery)},
259 {"vkCmdEndRenderPass", offsetof(DeviceVtbl, CmdEndRenderPass)},
260 {"vkCmdExecuteCommands", offsetof(DeviceVtbl, CmdExecuteCommands)},
261 {"vkCmdFillBuffer", offsetof(DeviceVtbl, CmdFillBuffer)},
262 {"vkCmdNextSubpass", offsetof(DeviceVtbl, CmdNextSubpass)},
263 {"vkCmdPipelineBarrier", offsetof(DeviceVtbl, CmdPipelineBarrier)},
264 {"vkCmdPushConstants", offsetof(DeviceVtbl, CmdPushConstants)},
265 {"vkCmdResetEvent", offsetof(DeviceVtbl, CmdResetEvent)},
266 {"vkCmdResetQueryPool", offsetof(DeviceVtbl, CmdResetQueryPool)},
267 {"vkCmdResolveImage", offsetof(DeviceVtbl, CmdResolveImage)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700268 {"vkCmdSetBlendConstants", offsetof(DeviceVtbl, CmdSetBlendConstants)},
269 {"vkCmdSetDepthBias", offsetof(DeviceVtbl, CmdSetDepthBias)},
270 {"vkCmdSetDepthBounds", offsetof(DeviceVtbl, CmdSetDepthBounds)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700271 {"vkCmdSetEvent", offsetof(DeviceVtbl, CmdSetEvent)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700272 {"vkCmdSetLineWidth", offsetof(DeviceVtbl, CmdSetLineWidth)},
273 {"vkCmdSetScissor", offsetof(DeviceVtbl, CmdSetScissor)},
274 {"vkCmdSetStencilCompareMask", offsetof(DeviceVtbl, CmdSetStencilCompareMask)},
275 {"vkCmdSetStencilReference", offsetof(DeviceVtbl, CmdSetStencilReference)},
276 {"vkCmdSetStencilWriteMask", offsetof(DeviceVtbl, CmdSetStencilWriteMask)},
277 {"vkCmdSetViewport", offsetof(DeviceVtbl, CmdSetViewport)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700278 {"vkCmdUpdateBuffer", offsetof(DeviceVtbl, CmdUpdateBuffer)},
279 {"vkCmdWaitEvents", offsetof(DeviceVtbl, CmdWaitEvents)},
280 {"vkCmdWriteTimestamp", offsetof(DeviceVtbl, CmdWriteTimestamp)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700281 {"vkCreateBuffer", offsetof(DeviceVtbl, CreateBuffer)},
282 {"vkCreateBufferView", offsetof(DeviceVtbl, CreateBufferView)},
283 {"vkCreateCommandBuffer", offsetof(DeviceVtbl, CreateCommandBuffer)},
284 {"vkCreateCommandPool", offsetof(DeviceVtbl, CreateCommandPool)},
285 {"vkCreateComputePipelines", offsetof(DeviceVtbl, CreateComputePipelines)},
286 {"vkCreateDescriptorPool", offsetof(DeviceVtbl, CreateDescriptorPool)},
287 {"vkCreateDescriptorSetLayout", offsetof(DeviceVtbl, CreateDescriptorSetLayout)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700288 {"vkCreateEvent", offsetof(DeviceVtbl, CreateEvent)},
289 {"vkCreateFence", offsetof(DeviceVtbl, CreateFence)},
290 {"vkCreateFramebuffer", offsetof(DeviceVtbl, CreateFramebuffer)},
291 {"vkCreateGraphicsPipelines", offsetof(DeviceVtbl, CreateGraphicsPipelines)},
292 {"vkCreateImage", offsetof(DeviceVtbl, CreateImage)},
293 {"vkCreateImageView", offsetof(DeviceVtbl, CreateImageView)},
294 {"vkCreatePipelineCache", offsetof(DeviceVtbl, CreatePipelineCache)},
295 {"vkCreatePipelineLayout", offsetof(DeviceVtbl, CreatePipelineLayout)},
296 {"vkCreateQueryPool", offsetof(DeviceVtbl, CreateQueryPool)},
297 {"vkCreateRenderPass", offsetof(DeviceVtbl, CreateRenderPass)},
298 {"vkCreateSampler", offsetof(DeviceVtbl, CreateSampler)},
299 {"vkCreateSemaphore", offsetof(DeviceVtbl, CreateSemaphore)},
300 {"vkCreateShader", offsetof(DeviceVtbl, CreateShader)},
301 {"vkCreateShaderModule", offsetof(DeviceVtbl, CreateShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800302 {"vkCreateSwapchainKHR", offsetof(DeviceVtbl, CreateSwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700303 {"vkDestroyBuffer", offsetof(DeviceVtbl, DestroyBuffer)},
304 {"vkDestroyBufferView", offsetof(DeviceVtbl, DestroyBufferView)},
305 {"vkDestroyCommandBuffer", offsetof(DeviceVtbl, DestroyCommandBuffer)},
306 {"vkDestroyCommandPool", offsetof(DeviceVtbl, DestroyCommandPool)},
307 {"vkDestroyDescriptorPool", offsetof(DeviceVtbl, DestroyDescriptorPool)},
308 {"vkDestroyDescriptorSetLayout", offsetof(DeviceVtbl, DestroyDescriptorSetLayout)},
309 {"vkDestroyDevice", offsetof(DeviceVtbl, DestroyDevice)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700310 {"vkDestroyEvent", offsetof(DeviceVtbl, DestroyEvent)},
311 {"vkDestroyFence", offsetof(DeviceVtbl, DestroyFence)},
312 {"vkDestroyFramebuffer", offsetof(DeviceVtbl, DestroyFramebuffer)},
313 {"vkDestroyImage", offsetof(DeviceVtbl, DestroyImage)},
314 {"vkDestroyImageView", offsetof(DeviceVtbl, DestroyImageView)},
315 {"vkDestroyPipeline", offsetof(DeviceVtbl, DestroyPipeline)},
316 {"vkDestroyPipelineCache", offsetof(DeviceVtbl, DestroyPipelineCache)},
317 {"vkDestroyPipelineLayout", offsetof(DeviceVtbl, DestroyPipelineLayout)},
318 {"vkDestroyQueryPool", offsetof(DeviceVtbl, DestroyQueryPool)},
319 {"vkDestroyRenderPass", offsetof(DeviceVtbl, DestroyRenderPass)},
320 {"vkDestroySampler", offsetof(DeviceVtbl, DestroySampler)},
321 {"vkDestroySemaphore", offsetof(DeviceVtbl, DestroySemaphore)},
322 {"vkDestroyShader", offsetof(DeviceVtbl, DestroyShader)},
323 {"vkDestroyShaderModule", offsetof(DeviceVtbl, DestroyShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800324 {"vkDestroySwapchainKHR", offsetof(DeviceVtbl, DestroySwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700325 {"vkDeviceWaitIdle", offsetof(DeviceVtbl, DeviceWaitIdle)},
326 {"vkEndCommandBuffer", offsetof(DeviceVtbl, EndCommandBuffer)},
327 {"vkFlushMappedMemoryRanges", offsetof(DeviceVtbl, FlushMappedMemoryRanges)},
328 {"vkFreeDescriptorSets", offsetof(DeviceVtbl, FreeDescriptorSets)},
329 {"vkFreeMemory", offsetof(DeviceVtbl, FreeMemory)},
330 {"vkGetBufferMemoryRequirements", offsetof(DeviceVtbl, GetBufferMemoryRequirements)},
331 {"vkGetDeviceMemoryCommitment", offsetof(DeviceVtbl, GetDeviceMemoryCommitment)},
332 {"vkGetDeviceProcAddr", offsetof(DeviceVtbl, GetDeviceProcAddr)},
333 {"vkGetDeviceQueue", offsetof(DeviceVtbl, GetDeviceQueue)},
334 {"vkGetEventStatus", offsetof(DeviceVtbl, GetEventStatus)},
335 {"vkGetFenceStatus", offsetof(DeviceVtbl, GetFenceStatus)},
336 {"vkGetImageMemoryRequirements", offsetof(DeviceVtbl, GetImageMemoryRequirements)},
337 {"vkGetImageSparseMemoryRequirements", offsetof(DeviceVtbl, GetImageSparseMemoryRequirements)},
338 {"vkGetImageSubresourceLayout", offsetof(DeviceVtbl, GetImageSubresourceLayout)},
339 {"vkGetPipelineCacheData", offsetof(DeviceVtbl, GetPipelineCacheData)},
340 {"vkGetPipelineCacheSize", offsetof(DeviceVtbl, GetPipelineCacheSize)},
341 {"vkGetQueryPoolResults", offsetof(DeviceVtbl, GetQueryPoolResults)},
342 {"vkGetRenderAreaGranularity", offsetof(DeviceVtbl, GetRenderAreaGranularity)},
Michael Lentine88594d72015-11-12 12:49:45 -0800343 {"vkGetSurfaceFormatsKHR", offsetof(DeviceVtbl, GetSurfaceFormatsKHR)},
344 {"vkGetSurfacePresentModesKHR", offsetof(DeviceVtbl, GetSurfacePresentModesKHR)},
345 {"vkGetSurfacePropertiesKHR", offsetof(DeviceVtbl, GetSurfacePropertiesKHR)},
346 {"vkGetSwapchainImagesKHR", offsetof(DeviceVtbl, GetSwapchainImagesKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700347 {"vkInvalidateMappedMemoryRanges", offsetof(DeviceVtbl, InvalidateMappedMemoryRanges)},
348 {"vkMapMemory", offsetof(DeviceVtbl, MapMemory)},
349 {"vkMergePipelineCaches", offsetof(DeviceVtbl, MergePipelineCaches)},
350 {"vkQueueBindSparseBufferMemory", offsetof(DeviceVtbl, QueueBindSparseBufferMemory)},
351 {"vkQueueBindSparseImageMemory", offsetof(DeviceVtbl, QueueBindSparseImageMemory)},
352 {"vkQueueBindSparseImageOpaqueMemory", offsetof(DeviceVtbl, QueueBindSparseImageOpaqueMemory)},
Michael Lentine88594d72015-11-12 12:49:45 -0800353 {"vkQueuePresentKHR", offsetof(DeviceVtbl, QueuePresentKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700354 {"vkQueueSignalSemaphore", offsetof(DeviceVtbl, QueueSignalSemaphore)},
355 {"vkQueueSubmit", offsetof(DeviceVtbl, QueueSubmit)},
356 {"vkQueueWaitIdle", offsetof(DeviceVtbl, QueueWaitIdle)},
357 {"vkQueueWaitSemaphore", offsetof(DeviceVtbl, QueueWaitSemaphore)},
358 {"vkResetCommandBuffer", offsetof(DeviceVtbl, ResetCommandBuffer)},
359 {"vkResetCommandPool", offsetof(DeviceVtbl, ResetCommandPool)},
360 {"vkResetDescriptorPool", offsetof(DeviceVtbl, ResetDescriptorPool)},
361 {"vkResetEvent", offsetof(DeviceVtbl, ResetEvent)},
362 {"vkResetFences", offsetof(DeviceVtbl, ResetFences)},
363 {"vkSetEvent", offsetof(DeviceVtbl, SetEvent)},
364 {"vkUnmapMemory", offsetof(DeviceVtbl, UnmapMemory)},
365 {"vkUpdateDescriptorSets", offsetof(DeviceVtbl, UpdateDescriptorSets)},
366 {"vkWaitForFences", offsetof(DeviceVtbl, WaitForFences)},
367 // clang-format on
368};
369
370} // namespace
371
372namespace vulkan {
373
374PFN_vkVoidFunction GetGlobalInstanceProcAddr(const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700375 const NameProcEntry* entry = FindProcEntry(kInstanceProcTbl, name);
376 if (entry)
377 return entry->proc;
378 // vkGetDeviceProcAddr must be available at the global/instance level for
379 // bootstrapping
Jesse Hall04f4f472015-08-16 19:51:04 -0700380 if (strcmp(name, "vkGetDeviceProcAddr") == 0)
381 return reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceProcAddr);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700382 return nullptr;
Jesse Hall04f4f472015-08-16 19:51:04 -0700383}
384
385PFN_vkVoidFunction GetGlobalDeviceProcAddr(const char* name) {
386 const NameProcEntry* entry = FindProcEntry(kDeviceProcTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700387 if (entry)
388 return entry->proc;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700389 return nullptr;
Jesse Hall04f4f472015-08-16 19:51:04 -0700390}
391
392PFN_vkVoidFunction GetSpecificInstanceProcAddr(const InstanceVtbl* vtbl,
393 const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700394 size_t offset;
Jesse Hall04f4f472015-08-16 19:51:04 -0700395 const NameOffsetEntry* entry = FindProcEntry(kInstanceOffsetTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700396 if (entry)
397 offset = entry->offset;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700398 else
Jesse Hall04f4f472015-08-16 19:51:04 -0700399 return nullptr;
400 const unsigned char* base = reinterpret_cast<const unsigned char*>(vtbl);
Michael Lentine62270162015-09-15 13:25:36 -0500401 return *reinterpret_cast<PFN_vkVoidFunction*>(
Michael Lentine88594d72015-11-12 12:49:45 -0800402 const_cast<unsigned char*>(base) + offset);
Jesse Hall04f4f472015-08-16 19:51:04 -0700403}
404
405PFN_vkVoidFunction GetSpecificDeviceProcAddr(const DeviceVtbl* vtbl,
406 const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700407 size_t offset;
Jesse Hall04f4f472015-08-16 19:51:04 -0700408 const NameOffsetEntry* entry = FindProcEntry(kDeviceOffsetTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700409 if (entry)
410 offset = entry->offset;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700411 else
Jesse Hall04f4f472015-08-16 19:51:04 -0700412 return nullptr;
413 const unsigned char* base = reinterpret_cast<const unsigned char*>(vtbl);
Michael Lentine62270162015-09-15 13:25:36 -0500414 return *reinterpret_cast<PFN_vkVoidFunction*>(
Michael Lentine88594d72015-11-12 12:49:45 -0800415 const_cast<unsigned char*>(base) + offset);
Jesse Hall04f4f472015-08-16 19:51:04 -0700416}
417
418bool LoadInstanceVtbl(VkInstance instance,
Michael Lentine03c64b02015-08-26 18:27:26 -0500419 VkInstance instance_next,
Jesse Hall04f4f472015-08-16 19:51:04 -0700420 PFN_vkGetInstanceProcAddr get_proc_addr,
421 InstanceVtbl& vtbl) {
422 bool success = true;
423 // clang-format off
Michael Lentine03c64b02015-08-26 18:27:26 -0500424 vtbl.GetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(get_proc_addr(instance_next, "vkGetInstanceProcAddr"));
425 if (UNLIKELY(!vtbl.GetInstanceProcAddr)) {
426 ALOGE("missing instance proc: %s", "vkGetInstanceProcAddr");
427 success = false;
428 }
429 vtbl.CreateInstance = reinterpret_cast<PFN_vkCreateInstance>(get_proc_addr(instance, "vkCreateInstance"));
430 if (UNLIKELY(!vtbl.CreateInstance)) {
431 // This is allowed to fail as the driver doesn't have to return vkCreateInstance when given an instance
432 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700433 vtbl.DestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(get_proc_addr(instance, "vkDestroyInstance"));
434 if (UNLIKELY(!vtbl.DestroyInstance)) {
435 ALOGE("missing instance proc: %s", "vkDestroyInstance");
436 success = false;
437 }
438 vtbl.EnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(get_proc_addr(instance, "vkEnumeratePhysicalDevices"));
439 if (UNLIKELY(!vtbl.EnumeratePhysicalDevices)) {
440 ALOGE("missing instance proc: %s", "vkEnumeratePhysicalDevices");
441 success = false;
442 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700443 vtbl.GetPhysicalDeviceProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceProperties"));
444 if (UNLIKELY(!vtbl.GetPhysicalDeviceProperties)) {
445 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceProperties");
446 success = false;
447 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700448 vtbl.GetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceQueueFamilyProperties"));
449 if (UNLIKELY(!vtbl.GetPhysicalDeviceQueueFamilyProperties)) {
450 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceQueueFamilyProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700451 success = false;
452 }
453 vtbl.GetPhysicalDeviceMemoryProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceMemoryProperties"));
454 if (UNLIKELY(!vtbl.GetPhysicalDeviceMemoryProperties)) {
455 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceMemoryProperties");
456 success = false;
457 }
458 vtbl.GetPhysicalDeviceFeatures = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures>(get_proc_addr(instance, "vkGetPhysicalDeviceFeatures"));
459 if (UNLIKELY(!vtbl.GetPhysicalDeviceFeatures)) {
460 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceFeatures");
461 success = false;
462 }
463 vtbl.GetPhysicalDeviceFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceFormatProperties"));
464 if (UNLIKELY(!vtbl.GetPhysicalDeviceFormatProperties)) {
465 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceFormatProperties");
466 success = false;
467 }
468 vtbl.GetPhysicalDeviceImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceImageFormatProperties"));
469 if (UNLIKELY(!vtbl.GetPhysicalDeviceImageFormatProperties)) {
470 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceImageFormatProperties");
471 success = false;
472 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700473 vtbl.CreateDevice = reinterpret_cast<PFN_vkCreateDevice>(get_proc_addr(instance, "vkCreateDevice"));
474 if (UNLIKELY(!vtbl.CreateDevice)) {
475 ALOGE("missing instance proc: %s", "vkCreateDevice");
476 success = false;
477 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700478 vtbl.EnumerateDeviceLayerProperties = reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(get_proc_addr(instance, "vkEnumerateDeviceLayerProperties"));
479 if (UNLIKELY(!vtbl.EnumerateDeviceLayerProperties)) {
480 ALOGE("missing instance proc: %s", "vkEnumerateDeviceLayerProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700481 success = false;
482 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700483 vtbl.EnumerateDeviceExtensionProperties = reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(get_proc_addr(instance, "vkEnumerateDeviceExtensionProperties"));
484 if (UNLIKELY(!vtbl.EnumerateDeviceExtensionProperties)) {
485 ALOGE("missing instance proc: %s", "vkEnumerateDeviceExtensionProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700486 success = false;
487 }
488 vtbl.GetPhysicalDeviceSparseImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceSparseImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceSparseImageFormatProperties"));
489 if (UNLIKELY(!vtbl.GetPhysicalDeviceSparseImageFormatProperties)) {
490 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceSparseImageFormatProperties");
491 success = false;
492 }
Michael Lentine88594d72015-11-12 12:49:45 -0800493 vtbl.GetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"));
Jesse Hall04f4f472015-08-16 19:51:04 -0700494 // clang-format on
495 return success;
496}
497
498bool LoadDeviceVtbl(VkDevice device,
Michael Lentine03c64b02015-08-26 18:27:26 -0500499 VkDevice device_next,
Jesse Hall04f4f472015-08-16 19:51:04 -0700500 PFN_vkGetDeviceProcAddr get_proc_addr,
501 DeviceVtbl& vtbl) {
502 bool success = true;
503 // clang-format off
Michael Lentine03c64b02015-08-26 18:27:26 -0500504 vtbl.GetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(get_proc_addr(device_next, "vkGetDeviceProcAddr"));
Jesse Hall04f4f472015-08-16 19:51:04 -0700505 if (UNLIKELY(!vtbl.GetDeviceProcAddr)) {
506 ALOGE("missing device proc: %s", "vkGetDeviceProcAddr");
507 success = false;
508 }
509 vtbl.DestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(get_proc_addr(device, "vkDestroyDevice"));
510 if (UNLIKELY(!vtbl.DestroyDevice)) {
511 ALOGE("missing device proc: %s", "vkDestroyDevice");
512 success = false;
513 }
514 vtbl.GetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(get_proc_addr(device, "vkGetDeviceQueue"));
515 if (UNLIKELY(!vtbl.GetDeviceQueue)) {
516 ALOGE("missing device proc: %s", "vkGetDeviceQueue");
517 success = false;
518 }
519 vtbl.QueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(get_proc_addr(device, "vkQueueSubmit"));
520 if (UNLIKELY(!vtbl.QueueSubmit)) {
521 ALOGE("missing device proc: %s", "vkQueueSubmit");
522 success = false;
523 }
524 vtbl.QueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(get_proc_addr(device, "vkQueueWaitIdle"));
525 if (UNLIKELY(!vtbl.QueueWaitIdle)) {
526 ALOGE("missing device proc: %s", "vkQueueWaitIdle");
527 success = false;
528 }
529 vtbl.DeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(get_proc_addr(device, "vkDeviceWaitIdle"));
530 if (UNLIKELY(!vtbl.DeviceWaitIdle)) {
531 ALOGE("missing device proc: %s", "vkDeviceWaitIdle");
532 success = false;
533 }
534 vtbl.AllocMemory = reinterpret_cast<PFN_vkAllocMemory>(get_proc_addr(device, "vkAllocMemory"));
535 if (UNLIKELY(!vtbl.AllocMemory)) {
536 ALOGE("missing device proc: %s", "vkAllocMemory");
537 success = false;
538 }
539 vtbl.FreeMemory = reinterpret_cast<PFN_vkFreeMemory>(get_proc_addr(device, "vkFreeMemory"));
540 if (UNLIKELY(!vtbl.FreeMemory)) {
541 ALOGE("missing device proc: %s", "vkFreeMemory");
542 success = false;
543 }
544 vtbl.MapMemory = reinterpret_cast<PFN_vkMapMemory>(get_proc_addr(device, "vkMapMemory"));
545 if (UNLIKELY(!vtbl.MapMemory)) {
546 ALOGE("missing device proc: %s", "vkMapMemory");
547 success = false;
548 }
549 vtbl.UnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(get_proc_addr(device, "vkUnmapMemory"));
550 if (UNLIKELY(!vtbl.UnmapMemory)) {
551 ALOGE("missing device proc: %s", "vkUnmapMemory");
552 success = false;
553 }
554 vtbl.FlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(get_proc_addr(device, "vkFlushMappedMemoryRanges"));
555 if (UNLIKELY(!vtbl.FlushMappedMemoryRanges)) {
556 ALOGE("missing device proc: %s", "vkFlushMappedMemoryRanges");
557 success = false;
558 }
559 vtbl.InvalidateMappedMemoryRanges = reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>(get_proc_addr(device, "vkInvalidateMappedMemoryRanges"));
560 if (UNLIKELY(!vtbl.InvalidateMappedMemoryRanges)) {
561 ALOGE("missing device proc: %s", "vkInvalidateMappedMemoryRanges");
562 success = false;
563 }
564 vtbl.GetDeviceMemoryCommitment = reinterpret_cast<PFN_vkGetDeviceMemoryCommitment>(get_proc_addr(device, "vkGetDeviceMemoryCommitment"));
565 if (UNLIKELY(!vtbl.GetDeviceMemoryCommitment)) {
566 ALOGE("missing device proc: %s", "vkGetDeviceMemoryCommitment");
567 success = false;
568 }
569 vtbl.GetBufferMemoryRequirements = reinterpret_cast<PFN_vkGetBufferMemoryRequirements>(get_proc_addr(device, "vkGetBufferMemoryRequirements"));
570 if (UNLIKELY(!vtbl.GetBufferMemoryRequirements)) {
571 ALOGE("missing device proc: %s", "vkGetBufferMemoryRequirements");
572 success = false;
573 }
574 vtbl.BindBufferMemory = reinterpret_cast<PFN_vkBindBufferMemory>(get_proc_addr(device, "vkBindBufferMemory"));
575 if (UNLIKELY(!vtbl.BindBufferMemory)) {
576 ALOGE("missing device proc: %s", "vkBindBufferMemory");
577 success = false;
578 }
579 vtbl.GetImageMemoryRequirements = reinterpret_cast<PFN_vkGetImageMemoryRequirements>(get_proc_addr(device, "vkGetImageMemoryRequirements"));
580 if (UNLIKELY(!vtbl.GetImageMemoryRequirements)) {
581 ALOGE("missing device proc: %s", "vkGetImageMemoryRequirements");
582 success = false;
583 }
584 vtbl.BindImageMemory = reinterpret_cast<PFN_vkBindImageMemory>(get_proc_addr(device, "vkBindImageMemory"));
585 if (UNLIKELY(!vtbl.BindImageMemory)) {
586 ALOGE("missing device proc: %s", "vkBindImageMemory");
587 success = false;
588 }
589 vtbl.GetImageSparseMemoryRequirements = reinterpret_cast<PFN_vkGetImageSparseMemoryRequirements>(get_proc_addr(device, "vkGetImageSparseMemoryRequirements"));
590 if (UNLIKELY(!vtbl.GetImageSparseMemoryRequirements)) {
591 ALOGE("missing device proc: %s", "vkGetImageSparseMemoryRequirements");
592 success = false;
593 }
594 vtbl.QueueBindSparseBufferMemory = reinterpret_cast<PFN_vkQueueBindSparseBufferMemory>(get_proc_addr(device, "vkQueueBindSparseBufferMemory"));
595 if (UNLIKELY(!vtbl.QueueBindSparseBufferMemory)) {
596 ALOGE("missing device proc: %s", "vkQueueBindSparseBufferMemory");
597 success = false;
598 }
599 vtbl.QueueBindSparseImageOpaqueMemory = reinterpret_cast<PFN_vkQueueBindSparseImageOpaqueMemory>(get_proc_addr(device, "vkQueueBindSparseImageOpaqueMemory"));
600 if (UNLIKELY(!vtbl.QueueBindSparseImageOpaqueMemory)) {
601 ALOGE("missing device proc: %s", "vkQueueBindSparseImageOpaqueMemory");
602 success = false;
603 }
604 vtbl.QueueBindSparseImageMemory = reinterpret_cast<PFN_vkQueueBindSparseImageMemory>(get_proc_addr(device, "vkQueueBindSparseImageMemory"));
605 if (UNLIKELY(!vtbl.QueueBindSparseImageMemory)) {
606 ALOGE("missing device proc: %s", "vkQueueBindSparseImageMemory");
607 success = false;
608 }
609 vtbl.CreateFence = reinterpret_cast<PFN_vkCreateFence>(get_proc_addr(device, "vkCreateFence"));
610 if (UNLIKELY(!vtbl.CreateFence)) {
611 ALOGE("missing device proc: %s", "vkCreateFence");
612 success = false;
613 }
614 vtbl.DestroyFence = reinterpret_cast<PFN_vkDestroyFence>(get_proc_addr(device, "vkDestroyFence"));
615 if (UNLIKELY(!vtbl.DestroyFence)) {
616 ALOGE("missing device proc: %s", "vkDestroyFence");
617 success = false;
618 }
619 vtbl.ResetFences = reinterpret_cast<PFN_vkResetFences>(get_proc_addr(device, "vkResetFences"));
620 if (UNLIKELY(!vtbl.ResetFences)) {
621 ALOGE("missing device proc: %s", "vkResetFences");
622 success = false;
623 }
624 vtbl.GetFenceStatus = reinterpret_cast<PFN_vkGetFenceStatus>(get_proc_addr(device, "vkGetFenceStatus"));
625 if (UNLIKELY(!vtbl.GetFenceStatus)) {
626 ALOGE("missing device proc: %s", "vkGetFenceStatus");
627 success = false;
628 }
629 vtbl.WaitForFences = reinterpret_cast<PFN_vkWaitForFences>(get_proc_addr(device, "vkWaitForFences"));
630 if (UNLIKELY(!vtbl.WaitForFences)) {
631 ALOGE("missing device proc: %s", "vkWaitForFences");
632 success = false;
633 }
634 vtbl.CreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(get_proc_addr(device, "vkCreateSemaphore"));
635 if (UNLIKELY(!vtbl.CreateSemaphore)) {
636 ALOGE("missing device proc: %s", "vkCreateSemaphore");
637 success = false;
638 }
639 vtbl.DestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(get_proc_addr(device, "vkDestroySemaphore"));
640 if (UNLIKELY(!vtbl.DestroySemaphore)) {
641 ALOGE("missing device proc: %s", "vkDestroySemaphore");
642 success = false;
643 }
644 vtbl.QueueSignalSemaphore = reinterpret_cast<PFN_vkQueueSignalSemaphore>(get_proc_addr(device, "vkQueueSignalSemaphore"));
645 if (UNLIKELY(!vtbl.QueueSignalSemaphore)) {
646 ALOGE("missing device proc: %s", "vkQueueSignalSemaphore");
647 success = false;
648 }
649 vtbl.QueueWaitSemaphore = reinterpret_cast<PFN_vkQueueWaitSemaphore>(get_proc_addr(device, "vkQueueWaitSemaphore"));
650 if (UNLIKELY(!vtbl.QueueWaitSemaphore)) {
651 ALOGE("missing device proc: %s", "vkQueueWaitSemaphore");
652 success = false;
653 }
654 vtbl.CreateEvent = reinterpret_cast<PFN_vkCreateEvent>(get_proc_addr(device, "vkCreateEvent"));
655 if (UNLIKELY(!vtbl.CreateEvent)) {
656 ALOGE("missing device proc: %s", "vkCreateEvent");
657 success = false;
658 }
659 vtbl.DestroyEvent = reinterpret_cast<PFN_vkDestroyEvent>(get_proc_addr(device, "vkDestroyEvent"));
660 if (UNLIKELY(!vtbl.DestroyEvent)) {
661 ALOGE("missing device proc: %s", "vkDestroyEvent");
662 success = false;
663 }
664 vtbl.GetEventStatus = reinterpret_cast<PFN_vkGetEventStatus>(get_proc_addr(device, "vkGetEventStatus"));
665 if (UNLIKELY(!vtbl.GetEventStatus)) {
666 ALOGE("missing device proc: %s", "vkGetEventStatus");
667 success = false;
668 }
669 vtbl.SetEvent = reinterpret_cast<PFN_vkSetEvent>(get_proc_addr(device, "vkSetEvent"));
670 if (UNLIKELY(!vtbl.SetEvent)) {
671 ALOGE("missing device proc: %s", "vkSetEvent");
672 success = false;
673 }
674 vtbl.ResetEvent = reinterpret_cast<PFN_vkResetEvent>(get_proc_addr(device, "vkResetEvent"));
675 if (UNLIKELY(!vtbl.ResetEvent)) {
676 ALOGE("missing device proc: %s", "vkResetEvent");
677 success = false;
678 }
679 vtbl.CreateQueryPool = reinterpret_cast<PFN_vkCreateQueryPool>(get_proc_addr(device, "vkCreateQueryPool"));
680 if (UNLIKELY(!vtbl.CreateQueryPool)) {
681 ALOGE("missing device proc: %s", "vkCreateQueryPool");
682 success = false;
683 }
684 vtbl.DestroyQueryPool = reinterpret_cast<PFN_vkDestroyQueryPool>(get_proc_addr(device, "vkDestroyQueryPool"));
685 if (UNLIKELY(!vtbl.DestroyQueryPool)) {
686 ALOGE("missing device proc: %s", "vkDestroyQueryPool");
687 success = false;
688 }
689 vtbl.GetQueryPoolResults = reinterpret_cast<PFN_vkGetQueryPoolResults>(get_proc_addr(device, "vkGetQueryPoolResults"));
690 if (UNLIKELY(!vtbl.GetQueryPoolResults)) {
691 ALOGE("missing device proc: %s", "vkGetQueryPoolResults");
692 success = false;
693 }
694 vtbl.CreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(get_proc_addr(device, "vkCreateBuffer"));
695 if (UNLIKELY(!vtbl.CreateBuffer)) {
696 ALOGE("missing device proc: %s", "vkCreateBuffer");
697 success = false;
698 }
699 vtbl.DestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(get_proc_addr(device, "vkDestroyBuffer"));
700 if (UNLIKELY(!vtbl.DestroyBuffer)) {
701 ALOGE("missing device proc: %s", "vkDestroyBuffer");
702 success = false;
703 }
704 vtbl.CreateBufferView = reinterpret_cast<PFN_vkCreateBufferView>(get_proc_addr(device, "vkCreateBufferView"));
705 if (UNLIKELY(!vtbl.CreateBufferView)) {
706 ALOGE("missing device proc: %s", "vkCreateBufferView");
707 success = false;
708 }
709 vtbl.DestroyBufferView = reinterpret_cast<PFN_vkDestroyBufferView>(get_proc_addr(device, "vkDestroyBufferView"));
710 if (UNLIKELY(!vtbl.DestroyBufferView)) {
711 ALOGE("missing device proc: %s", "vkDestroyBufferView");
712 success = false;
713 }
714 vtbl.CreateImage = reinterpret_cast<PFN_vkCreateImage>(get_proc_addr(device, "vkCreateImage"));
715 if (UNLIKELY(!vtbl.CreateImage)) {
716 ALOGE("missing device proc: %s", "vkCreateImage");
717 success = false;
718 }
719 vtbl.DestroyImage = reinterpret_cast<PFN_vkDestroyImage>(get_proc_addr(device, "vkDestroyImage"));
720 if (UNLIKELY(!vtbl.DestroyImage)) {
721 ALOGE("missing device proc: %s", "vkDestroyImage");
722 success = false;
723 }
724 vtbl.GetImageSubresourceLayout = reinterpret_cast<PFN_vkGetImageSubresourceLayout>(get_proc_addr(device, "vkGetImageSubresourceLayout"));
725 if (UNLIKELY(!vtbl.GetImageSubresourceLayout)) {
726 ALOGE("missing device proc: %s", "vkGetImageSubresourceLayout");
727 success = false;
728 }
729 vtbl.CreateImageView = reinterpret_cast<PFN_vkCreateImageView>(get_proc_addr(device, "vkCreateImageView"));
730 if (UNLIKELY(!vtbl.CreateImageView)) {
731 ALOGE("missing device proc: %s", "vkCreateImageView");
732 success = false;
733 }
734 vtbl.DestroyImageView = reinterpret_cast<PFN_vkDestroyImageView>(get_proc_addr(device, "vkDestroyImageView"));
735 if (UNLIKELY(!vtbl.DestroyImageView)) {
736 ALOGE("missing device proc: %s", "vkDestroyImageView");
737 success = false;
738 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700739 vtbl.CreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(get_proc_addr(device, "vkCreateShaderModule"));
740 if (UNLIKELY(!vtbl.CreateShaderModule)) {
741 ALOGE("missing device proc: %s", "vkCreateShaderModule");
742 success = false;
743 }
744 vtbl.DestroyShaderModule = reinterpret_cast<PFN_vkDestroyShaderModule>(get_proc_addr(device, "vkDestroyShaderModule"));
745 if (UNLIKELY(!vtbl.DestroyShaderModule)) {
746 ALOGE("missing device proc: %s", "vkDestroyShaderModule");
747 success = false;
748 }
749 vtbl.CreateShader = reinterpret_cast<PFN_vkCreateShader>(get_proc_addr(device, "vkCreateShader"));
750 if (UNLIKELY(!vtbl.CreateShader)) {
751 ALOGE("missing device proc: %s", "vkCreateShader");
752 success = false;
753 }
754 vtbl.DestroyShader = reinterpret_cast<PFN_vkDestroyShader>(get_proc_addr(device, "vkDestroyShader"));
755 if (UNLIKELY(!vtbl.DestroyShader)) {
756 ALOGE("missing device proc: %s", "vkDestroyShader");
757 success = false;
758 }
759 vtbl.CreatePipelineCache = reinterpret_cast<PFN_vkCreatePipelineCache>(get_proc_addr(device, "vkCreatePipelineCache"));
760 if (UNLIKELY(!vtbl.CreatePipelineCache)) {
761 ALOGE("missing device proc: %s", "vkCreatePipelineCache");
762 success = false;
763 }
764 vtbl.DestroyPipelineCache = reinterpret_cast<PFN_vkDestroyPipelineCache>(get_proc_addr(device, "vkDestroyPipelineCache"));
765 if (UNLIKELY(!vtbl.DestroyPipelineCache)) {
766 ALOGE("missing device proc: %s", "vkDestroyPipelineCache");
767 success = false;
768 }
769 vtbl.GetPipelineCacheSize = reinterpret_cast<PFN_vkGetPipelineCacheSize>(get_proc_addr(device, "vkGetPipelineCacheSize"));
770 if (UNLIKELY(!vtbl.GetPipelineCacheSize)) {
771 ALOGE("missing device proc: %s", "vkGetPipelineCacheSize");
772 success = false;
773 }
774 vtbl.GetPipelineCacheData = reinterpret_cast<PFN_vkGetPipelineCacheData>(get_proc_addr(device, "vkGetPipelineCacheData"));
775 if (UNLIKELY(!vtbl.GetPipelineCacheData)) {
776 ALOGE("missing device proc: %s", "vkGetPipelineCacheData");
777 success = false;
778 }
779 vtbl.MergePipelineCaches = reinterpret_cast<PFN_vkMergePipelineCaches>(get_proc_addr(device, "vkMergePipelineCaches"));
780 if (UNLIKELY(!vtbl.MergePipelineCaches)) {
781 ALOGE("missing device proc: %s", "vkMergePipelineCaches");
782 success = false;
783 }
784 vtbl.CreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(get_proc_addr(device, "vkCreateGraphicsPipelines"));
785 if (UNLIKELY(!vtbl.CreateGraphicsPipelines)) {
786 ALOGE("missing device proc: %s", "vkCreateGraphicsPipelines");
787 success = false;
788 }
789 vtbl.CreateComputePipelines = reinterpret_cast<PFN_vkCreateComputePipelines>(get_proc_addr(device, "vkCreateComputePipelines"));
790 if (UNLIKELY(!vtbl.CreateComputePipelines)) {
791 ALOGE("missing device proc: %s", "vkCreateComputePipelines");
792 success = false;
793 }
794 vtbl.DestroyPipeline = reinterpret_cast<PFN_vkDestroyPipeline>(get_proc_addr(device, "vkDestroyPipeline"));
795 if (UNLIKELY(!vtbl.DestroyPipeline)) {
796 ALOGE("missing device proc: %s", "vkDestroyPipeline");
797 success = false;
798 }
799 vtbl.CreatePipelineLayout = reinterpret_cast<PFN_vkCreatePipelineLayout>(get_proc_addr(device, "vkCreatePipelineLayout"));
800 if (UNLIKELY(!vtbl.CreatePipelineLayout)) {
801 ALOGE("missing device proc: %s", "vkCreatePipelineLayout");
802 success = false;
803 }
804 vtbl.DestroyPipelineLayout = reinterpret_cast<PFN_vkDestroyPipelineLayout>(get_proc_addr(device, "vkDestroyPipelineLayout"));
805 if (UNLIKELY(!vtbl.DestroyPipelineLayout)) {
806 ALOGE("missing device proc: %s", "vkDestroyPipelineLayout");
807 success = false;
808 }
809 vtbl.CreateSampler = reinterpret_cast<PFN_vkCreateSampler>(get_proc_addr(device, "vkCreateSampler"));
810 if (UNLIKELY(!vtbl.CreateSampler)) {
811 ALOGE("missing device proc: %s", "vkCreateSampler");
812 success = false;
813 }
814 vtbl.DestroySampler = reinterpret_cast<PFN_vkDestroySampler>(get_proc_addr(device, "vkDestroySampler"));
815 if (UNLIKELY(!vtbl.DestroySampler)) {
816 ALOGE("missing device proc: %s", "vkDestroySampler");
817 success = false;
818 }
819 vtbl.CreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(get_proc_addr(device, "vkCreateDescriptorSetLayout"));
820 if (UNLIKELY(!vtbl.CreateDescriptorSetLayout)) {
821 ALOGE("missing device proc: %s", "vkCreateDescriptorSetLayout");
822 success = false;
823 }
824 vtbl.DestroyDescriptorSetLayout = reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>(get_proc_addr(device, "vkDestroyDescriptorSetLayout"));
825 if (UNLIKELY(!vtbl.DestroyDescriptorSetLayout)) {
826 ALOGE("missing device proc: %s", "vkDestroyDescriptorSetLayout");
827 success = false;
828 }
829 vtbl.CreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(get_proc_addr(device, "vkCreateDescriptorPool"));
830 if (UNLIKELY(!vtbl.CreateDescriptorPool)) {
831 ALOGE("missing device proc: %s", "vkCreateDescriptorPool");
832 success = false;
833 }
834 vtbl.DestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>(get_proc_addr(device, "vkDestroyDescriptorPool"));
835 if (UNLIKELY(!vtbl.DestroyDescriptorPool)) {
836 ALOGE("missing device proc: %s", "vkDestroyDescriptorPool");
837 success = false;
838 }
839 vtbl.ResetDescriptorPool = reinterpret_cast<PFN_vkResetDescriptorPool>(get_proc_addr(device, "vkResetDescriptorPool"));
840 if (UNLIKELY(!vtbl.ResetDescriptorPool)) {
841 ALOGE("missing device proc: %s", "vkResetDescriptorPool");
842 success = false;
843 }
844 vtbl.AllocDescriptorSets = reinterpret_cast<PFN_vkAllocDescriptorSets>(get_proc_addr(device, "vkAllocDescriptorSets"));
845 if (UNLIKELY(!vtbl.AllocDescriptorSets)) {
846 ALOGE("missing device proc: %s", "vkAllocDescriptorSets");
847 success = false;
848 }
849 vtbl.FreeDescriptorSets = reinterpret_cast<PFN_vkFreeDescriptorSets>(get_proc_addr(device, "vkFreeDescriptorSets"));
850 if (UNLIKELY(!vtbl.FreeDescriptorSets)) {
851 ALOGE("missing device proc: %s", "vkFreeDescriptorSets");
852 success = false;
853 }
854 vtbl.UpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(get_proc_addr(device, "vkUpdateDescriptorSets"));
855 if (UNLIKELY(!vtbl.UpdateDescriptorSets)) {
856 ALOGE("missing device proc: %s", "vkUpdateDescriptorSets");
857 success = false;
858 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700859 vtbl.CreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(get_proc_addr(device, "vkCreateFramebuffer"));
860 if (UNLIKELY(!vtbl.CreateFramebuffer)) {
861 ALOGE("missing device proc: %s", "vkCreateFramebuffer");
862 success = false;
863 }
864 vtbl.DestroyFramebuffer = reinterpret_cast<PFN_vkDestroyFramebuffer>(get_proc_addr(device, "vkDestroyFramebuffer"));
865 if (UNLIKELY(!vtbl.DestroyFramebuffer)) {
866 ALOGE("missing device proc: %s", "vkDestroyFramebuffer");
867 success = false;
868 }
869 vtbl.CreateRenderPass = reinterpret_cast<PFN_vkCreateRenderPass>(get_proc_addr(device, "vkCreateRenderPass"));
870 if (UNLIKELY(!vtbl.CreateRenderPass)) {
871 ALOGE("missing device proc: %s", "vkCreateRenderPass");
872 success = false;
873 }
874 vtbl.DestroyRenderPass = reinterpret_cast<PFN_vkDestroyRenderPass>(get_proc_addr(device, "vkDestroyRenderPass"));
875 if (UNLIKELY(!vtbl.DestroyRenderPass)) {
876 ALOGE("missing device proc: %s", "vkDestroyRenderPass");
877 success = false;
878 }
879 vtbl.GetRenderAreaGranularity = reinterpret_cast<PFN_vkGetRenderAreaGranularity>(get_proc_addr(device, "vkGetRenderAreaGranularity"));
880 if (UNLIKELY(!vtbl.GetRenderAreaGranularity)) {
881 ALOGE("missing device proc: %s", "vkGetRenderAreaGranularity");
882 success = false;
883 }
884 vtbl.CreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(get_proc_addr(device, "vkCreateCommandPool"));
885 if (UNLIKELY(!vtbl.CreateCommandPool)) {
886 ALOGE("missing device proc: %s", "vkCreateCommandPool");
887 success = false;
888 }
889 vtbl.DestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(get_proc_addr(device, "vkDestroyCommandPool"));
890 if (UNLIKELY(!vtbl.DestroyCommandPool)) {
891 ALOGE("missing device proc: %s", "vkDestroyCommandPool");
892 success = false;
893 }
894 vtbl.ResetCommandPool = reinterpret_cast<PFN_vkResetCommandPool>(get_proc_addr(device, "vkResetCommandPool"));
895 if (UNLIKELY(!vtbl.ResetCommandPool)) {
896 ALOGE("missing device proc: %s", "vkResetCommandPool");
897 success = false;
898 }
899 vtbl.CreateCommandBuffer = reinterpret_cast<PFN_vkCreateCommandBuffer>(get_proc_addr(device, "vkCreateCommandBuffer"));
900 if (UNLIKELY(!vtbl.CreateCommandBuffer)) {
901 ALOGE("missing device proc: %s", "vkCreateCommandBuffer");
902 success = false;
903 }
904 vtbl.DestroyCommandBuffer = reinterpret_cast<PFN_vkDestroyCommandBuffer>(get_proc_addr(device, "vkDestroyCommandBuffer"));
905 if (UNLIKELY(!vtbl.DestroyCommandBuffer)) {
906 ALOGE("missing device proc: %s", "vkDestroyCommandBuffer");
907 success = false;
908 }
909 vtbl.BeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(get_proc_addr(device, "vkBeginCommandBuffer"));
910 if (UNLIKELY(!vtbl.BeginCommandBuffer)) {
911 ALOGE("missing device proc: %s", "vkBeginCommandBuffer");
912 success = false;
913 }
914 vtbl.EndCommandBuffer = reinterpret_cast<PFN_vkEndCommandBuffer>(get_proc_addr(device, "vkEndCommandBuffer"));
915 if (UNLIKELY(!vtbl.EndCommandBuffer)) {
916 ALOGE("missing device proc: %s", "vkEndCommandBuffer");
917 success = false;
918 }
919 vtbl.ResetCommandBuffer = reinterpret_cast<PFN_vkResetCommandBuffer>(get_proc_addr(device, "vkResetCommandBuffer"));
920 if (UNLIKELY(!vtbl.ResetCommandBuffer)) {
921 ALOGE("missing device proc: %s", "vkResetCommandBuffer");
922 success = false;
923 }
924 vtbl.CmdBindPipeline = reinterpret_cast<PFN_vkCmdBindPipeline>(get_proc_addr(device, "vkCmdBindPipeline"));
925 if (UNLIKELY(!vtbl.CmdBindPipeline)) {
926 ALOGE("missing device proc: %s", "vkCmdBindPipeline");
927 success = false;
928 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700929 vtbl.CmdSetViewport = reinterpret_cast<PFN_vkCmdSetViewport>(get_proc_addr(device, "vkCmdSetViewport"));
930 if (UNLIKELY(!vtbl.CmdSetViewport)) {
931 ALOGE("missing device proc: %s", "vkCmdSetViewport");
Jesse Hall04f4f472015-08-16 19:51:04 -0700932 success = false;
933 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700934 vtbl.CmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(get_proc_addr(device, "vkCmdSetScissor"));
935 if (UNLIKELY(!vtbl.CmdSetScissor)) {
936 ALOGE("missing device proc: %s", "vkCmdSetScissor");
Jesse Hall04f4f472015-08-16 19:51:04 -0700937 success = false;
938 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700939 vtbl.CmdSetLineWidth = reinterpret_cast<PFN_vkCmdSetLineWidth>(get_proc_addr(device, "vkCmdSetLineWidth"));
940 if (UNLIKELY(!vtbl.CmdSetLineWidth)) {
941 ALOGE("missing device proc: %s", "vkCmdSetLineWidth");
Jesse Hall04f4f472015-08-16 19:51:04 -0700942 success = false;
943 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700944 vtbl.CmdSetDepthBias = reinterpret_cast<PFN_vkCmdSetDepthBias>(get_proc_addr(device, "vkCmdSetDepthBias"));
945 if (UNLIKELY(!vtbl.CmdSetDepthBias)) {
946 ALOGE("missing device proc: %s", "vkCmdSetDepthBias");
947 success = false;
948 }
949 vtbl.CmdSetBlendConstants = reinterpret_cast<PFN_vkCmdSetBlendConstants>(get_proc_addr(device, "vkCmdSetBlendConstants"));
950 if (UNLIKELY(!vtbl.CmdSetBlendConstants)) {
951 ALOGE("missing device proc: %s", "vkCmdSetBlendConstants");
952 success = false;
953 }
954 vtbl.CmdSetDepthBounds = reinterpret_cast<PFN_vkCmdSetDepthBounds>(get_proc_addr(device, "vkCmdSetDepthBounds"));
955 if (UNLIKELY(!vtbl.CmdSetDepthBounds)) {
956 ALOGE("missing device proc: %s", "vkCmdSetDepthBounds");
957 success = false;
958 }
959 vtbl.CmdSetStencilCompareMask = reinterpret_cast<PFN_vkCmdSetStencilCompareMask>(get_proc_addr(device, "vkCmdSetStencilCompareMask"));
960 if (UNLIKELY(!vtbl.CmdSetStencilCompareMask)) {
961 ALOGE("missing device proc: %s", "vkCmdSetStencilCompareMask");
962 success = false;
963 }
964 vtbl.CmdSetStencilWriteMask = reinterpret_cast<PFN_vkCmdSetStencilWriteMask>(get_proc_addr(device, "vkCmdSetStencilWriteMask"));
965 if (UNLIKELY(!vtbl.CmdSetStencilWriteMask)) {
966 ALOGE("missing device proc: %s", "vkCmdSetStencilWriteMask");
967 success = false;
968 }
969 vtbl.CmdSetStencilReference = reinterpret_cast<PFN_vkCmdSetStencilReference>(get_proc_addr(device, "vkCmdSetStencilReference"));
970 if (UNLIKELY(!vtbl.CmdSetStencilReference)) {
971 ALOGE("missing device proc: %s", "vkCmdSetStencilReference");
Jesse Hall04f4f472015-08-16 19:51:04 -0700972 success = false;
973 }
974 vtbl.CmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>(get_proc_addr(device, "vkCmdBindDescriptorSets"));
975 if (UNLIKELY(!vtbl.CmdBindDescriptorSets)) {
976 ALOGE("missing device proc: %s", "vkCmdBindDescriptorSets");
977 success = false;
978 }
979 vtbl.CmdBindIndexBuffer = reinterpret_cast<PFN_vkCmdBindIndexBuffer>(get_proc_addr(device, "vkCmdBindIndexBuffer"));
980 if (UNLIKELY(!vtbl.CmdBindIndexBuffer)) {
981 ALOGE("missing device proc: %s", "vkCmdBindIndexBuffer");
982 success = false;
983 }
984 vtbl.CmdBindVertexBuffers = reinterpret_cast<PFN_vkCmdBindVertexBuffers>(get_proc_addr(device, "vkCmdBindVertexBuffers"));
985 if (UNLIKELY(!vtbl.CmdBindVertexBuffers)) {
986 ALOGE("missing device proc: %s", "vkCmdBindVertexBuffers");
987 success = false;
988 }
989 vtbl.CmdDraw = reinterpret_cast<PFN_vkCmdDraw>(get_proc_addr(device, "vkCmdDraw"));
990 if (UNLIKELY(!vtbl.CmdDraw)) {
991 ALOGE("missing device proc: %s", "vkCmdDraw");
992 success = false;
993 }
994 vtbl.CmdDrawIndexed = reinterpret_cast<PFN_vkCmdDrawIndexed>(get_proc_addr(device, "vkCmdDrawIndexed"));
995 if (UNLIKELY(!vtbl.CmdDrawIndexed)) {
996 ALOGE("missing device proc: %s", "vkCmdDrawIndexed");
997 success = false;
998 }
999 vtbl.CmdDrawIndirect = reinterpret_cast<PFN_vkCmdDrawIndirect>(get_proc_addr(device, "vkCmdDrawIndirect"));
1000 if (UNLIKELY(!vtbl.CmdDrawIndirect)) {
1001 ALOGE("missing device proc: %s", "vkCmdDrawIndirect");
1002 success = false;
1003 }
1004 vtbl.CmdDrawIndexedIndirect = reinterpret_cast<PFN_vkCmdDrawIndexedIndirect>(get_proc_addr(device, "vkCmdDrawIndexedIndirect"));
1005 if (UNLIKELY(!vtbl.CmdDrawIndexedIndirect)) {
1006 ALOGE("missing device proc: %s", "vkCmdDrawIndexedIndirect");
1007 success = false;
1008 }
1009 vtbl.CmdDispatch = reinterpret_cast<PFN_vkCmdDispatch>(get_proc_addr(device, "vkCmdDispatch"));
1010 if (UNLIKELY(!vtbl.CmdDispatch)) {
1011 ALOGE("missing device proc: %s", "vkCmdDispatch");
1012 success = false;
1013 }
1014 vtbl.CmdDispatchIndirect = reinterpret_cast<PFN_vkCmdDispatchIndirect>(get_proc_addr(device, "vkCmdDispatchIndirect"));
1015 if (UNLIKELY(!vtbl.CmdDispatchIndirect)) {
1016 ALOGE("missing device proc: %s", "vkCmdDispatchIndirect");
1017 success = false;
1018 }
1019 vtbl.CmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(get_proc_addr(device, "vkCmdCopyBuffer"));
1020 if (UNLIKELY(!vtbl.CmdCopyBuffer)) {
1021 ALOGE("missing device proc: %s", "vkCmdCopyBuffer");
1022 success = false;
1023 }
1024 vtbl.CmdCopyImage = reinterpret_cast<PFN_vkCmdCopyImage>(get_proc_addr(device, "vkCmdCopyImage"));
1025 if (UNLIKELY(!vtbl.CmdCopyImage)) {
1026 ALOGE("missing device proc: %s", "vkCmdCopyImage");
1027 success = false;
1028 }
1029 vtbl.CmdBlitImage = reinterpret_cast<PFN_vkCmdBlitImage>(get_proc_addr(device, "vkCmdBlitImage"));
1030 if (UNLIKELY(!vtbl.CmdBlitImage)) {
1031 ALOGE("missing device proc: %s", "vkCmdBlitImage");
1032 success = false;
1033 }
1034 vtbl.CmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(get_proc_addr(device, "vkCmdCopyBufferToImage"));
1035 if (UNLIKELY(!vtbl.CmdCopyBufferToImage)) {
1036 ALOGE("missing device proc: %s", "vkCmdCopyBufferToImage");
1037 success = false;
1038 }
1039 vtbl.CmdCopyImageToBuffer = reinterpret_cast<PFN_vkCmdCopyImageToBuffer>(get_proc_addr(device, "vkCmdCopyImageToBuffer"));
1040 if (UNLIKELY(!vtbl.CmdCopyImageToBuffer)) {
1041 ALOGE("missing device proc: %s", "vkCmdCopyImageToBuffer");
1042 success = false;
1043 }
1044 vtbl.CmdUpdateBuffer = reinterpret_cast<PFN_vkCmdUpdateBuffer>(get_proc_addr(device, "vkCmdUpdateBuffer"));
1045 if (UNLIKELY(!vtbl.CmdUpdateBuffer)) {
1046 ALOGE("missing device proc: %s", "vkCmdUpdateBuffer");
1047 success = false;
1048 }
1049 vtbl.CmdFillBuffer = reinterpret_cast<PFN_vkCmdFillBuffer>(get_proc_addr(device, "vkCmdFillBuffer"));
1050 if (UNLIKELY(!vtbl.CmdFillBuffer)) {
1051 ALOGE("missing device proc: %s", "vkCmdFillBuffer");
1052 success = false;
1053 }
1054 vtbl.CmdClearColorImage = reinterpret_cast<PFN_vkCmdClearColorImage>(get_proc_addr(device, "vkCmdClearColorImage"));
1055 if (UNLIKELY(!vtbl.CmdClearColorImage)) {
1056 ALOGE("missing device proc: %s", "vkCmdClearColorImage");
1057 success = false;
1058 }
1059 vtbl.CmdClearDepthStencilImage = reinterpret_cast<PFN_vkCmdClearDepthStencilImage>(get_proc_addr(device, "vkCmdClearDepthStencilImage"));
1060 if (UNLIKELY(!vtbl.CmdClearDepthStencilImage)) {
1061 ALOGE("missing device proc: %s", "vkCmdClearDepthStencilImage");
1062 success = false;
1063 }
Jesse Hallae38f732015-11-19 21:32:50 -08001064 vtbl.CmdClearAttachments = reinterpret_cast<PFN_vkCmdClearAttachments>(get_proc_addr(device, "vkCmdClearAttachments"));
1065 if (UNLIKELY(!vtbl.CmdClearAttachments)) {
1066 ALOGE("missing device proc: %s", "vkCmdClearAttachments");
Jesse Hall04f4f472015-08-16 19:51:04 -07001067 success = false;
1068 }
1069 vtbl.CmdResolveImage = reinterpret_cast<PFN_vkCmdResolveImage>(get_proc_addr(device, "vkCmdResolveImage"));
1070 if (UNLIKELY(!vtbl.CmdResolveImage)) {
1071 ALOGE("missing device proc: %s", "vkCmdResolveImage");
1072 success = false;
1073 }
1074 vtbl.CmdSetEvent = reinterpret_cast<PFN_vkCmdSetEvent>(get_proc_addr(device, "vkCmdSetEvent"));
1075 if (UNLIKELY(!vtbl.CmdSetEvent)) {
1076 ALOGE("missing device proc: %s", "vkCmdSetEvent");
1077 success = false;
1078 }
1079 vtbl.CmdResetEvent = reinterpret_cast<PFN_vkCmdResetEvent>(get_proc_addr(device, "vkCmdResetEvent"));
1080 if (UNLIKELY(!vtbl.CmdResetEvent)) {
1081 ALOGE("missing device proc: %s", "vkCmdResetEvent");
1082 success = false;
1083 }
1084 vtbl.CmdWaitEvents = reinterpret_cast<PFN_vkCmdWaitEvents>(get_proc_addr(device, "vkCmdWaitEvents"));
1085 if (UNLIKELY(!vtbl.CmdWaitEvents)) {
1086 ALOGE("missing device proc: %s", "vkCmdWaitEvents");
1087 success = false;
1088 }
1089 vtbl.CmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(get_proc_addr(device, "vkCmdPipelineBarrier"));
1090 if (UNLIKELY(!vtbl.CmdPipelineBarrier)) {
1091 ALOGE("missing device proc: %s", "vkCmdPipelineBarrier");
1092 success = false;
1093 }
1094 vtbl.CmdBeginQuery = reinterpret_cast<PFN_vkCmdBeginQuery>(get_proc_addr(device, "vkCmdBeginQuery"));
1095 if (UNLIKELY(!vtbl.CmdBeginQuery)) {
1096 ALOGE("missing device proc: %s", "vkCmdBeginQuery");
1097 success = false;
1098 }
1099 vtbl.CmdEndQuery = reinterpret_cast<PFN_vkCmdEndQuery>(get_proc_addr(device, "vkCmdEndQuery"));
1100 if (UNLIKELY(!vtbl.CmdEndQuery)) {
1101 ALOGE("missing device proc: %s", "vkCmdEndQuery");
1102 success = false;
1103 }
1104 vtbl.CmdResetQueryPool = reinterpret_cast<PFN_vkCmdResetQueryPool>(get_proc_addr(device, "vkCmdResetQueryPool"));
1105 if (UNLIKELY(!vtbl.CmdResetQueryPool)) {
1106 ALOGE("missing device proc: %s", "vkCmdResetQueryPool");
1107 success = false;
1108 }
1109 vtbl.CmdWriteTimestamp = reinterpret_cast<PFN_vkCmdWriteTimestamp>(get_proc_addr(device, "vkCmdWriteTimestamp"));
1110 if (UNLIKELY(!vtbl.CmdWriteTimestamp)) {
1111 ALOGE("missing device proc: %s", "vkCmdWriteTimestamp");
1112 success = false;
1113 }
1114 vtbl.CmdCopyQueryPoolResults = reinterpret_cast<PFN_vkCmdCopyQueryPoolResults>(get_proc_addr(device, "vkCmdCopyQueryPoolResults"));
1115 if (UNLIKELY(!vtbl.CmdCopyQueryPoolResults)) {
1116 ALOGE("missing device proc: %s", "vkCmdCopyQueryPoolResults");
1117 success = false;
1118 }
1119 vtbl.CmdPushConstants = reinterpret_cast<PFN_vkCmdPushConstants>(get_proc_addr(device, "vkCmdPushConstants"));
1120 if (UNLIKELY(!vtbl.CmdPushConstants)) {
1121 ALOGE("missing device proc: %s", "vkCmdPushConstants");
1122 success = false;
1123 }
1124 vtbl.CmdBeginRenderPass = reinterpret_cast<PFN_vkCmdBeginRenderPass>(get_proc_addr(device, "vkCmdBeginRenderPass"));
1125 if (UNLIKELY(!vtbl.CmdBeginRenderPass)) {
1126 ALOGE("missing device proc: %s", "vkCmdBeginRenderPass");
1127 success = false;
1128 }
1129 vtbl.CmdNextSubpass = reinterpret_cast<PFN_vkCmdNextSubpass>(get_proc_addr(device, "vkCmdNextSubpass"));
1130 if (UNLIKELY(!vtbl.CmdNextSubpass)) {
1131 ALOGE("missing device proc: %s", "vkCmdNextSubpass");
1132 success = false;
1133 }
1134 vtbl.CmdEndRenderPass = reinterpret_cast<PFN_vkCmdEndRenderPass>(get_proc_addr(device, "vkCmdEndRenderPass"));
1135 if (UNLIKELY(!vtbl.CmdEndRenderPass)) {
1136 ALOGE("missing device proc: %s", "vkCmdEndRenderPass");
1137 success = false;
1138 }
1139 vtbl.CmdExecuteCommands = reinterpret_cast<PFN_vkCmdExecuteCommands>(get_proc_addr(device, "vkCmdExecuteCommands"));
1140 if (UNLIKELY(!vtbl.CmdExecuteCommands)) {
1141 ALOGE("missing device proc: %s", "vkCmdExecuteCommands");
1142 success = false;
1143 }
Michael Lentine88594d72015-11-12 12:49:45 -08001144 vtbl.GetSurfacePropertiesKHR = reinterpret_cast<PFN_vkGetSurfacePropertiesKHR>(get_proc_addr(device, "vkGetSurfacePropertiesKHR"));
1145 if (UNLIKELY(!vtbl.GetSurfacePropertiesKHR)) {
1146 ALOGE("missing device proc: %s", "vkGetSurfacePropertiesKHR");
1147 success = false;
1148 }
1149 vtbl.GetSurfaceFormatsKHR = reinterpret_cast<PFN_vkGetSurfaceFormatsKHR>(get_proc_addr(device, "vkGetSurfaceFormatsKHR"));
1150 if (UNLIKELY(!vtbl.GetSurfaceFormatsKHR)) {
1151 ALOGE("missing device proc: %s", "vkGetSurfaceFormatsKHR");
1152 success = false;
1153 }
1154 vtbl.GetSurfacePresentModesKHR = reinterpret_cast<PFN_vkGetSurfacePresentModesKHR>(get_proc_addr(device, "vkGetSurfacePresentModesKHR"));
1155 if (UNLIKELY(!vtbl.GetSurfacePresentModesKHR)) {
1156 ALOGE("missing device proc: %s", "vkGetSurfacePresentModesKHR");
1157 success = false;
1158 }
1159 vtbl.CreateSwapchainKHR = reinterpret_cast<PFN_vkCreateSwapchainKHR>(get_proc_addr(device, "vkCreateSwapchainKHR"));
1160 if (UNLIKELY(!vtbl.CreateSwapchainKHR)) {
1161 ALOGE("missing device proc: %s", "vkCreateSwapchainKHR");
1162 success = false;
1163 }
1164 vtbl.DestroySwapchainKHR = reinterpret_cast<PFN_vkDestroySwapchainKHR>(get_proc_addr(device, "vkDestroySwapchainKHR"));
1165 if (UNLIKELY(!vtbl.DestroySwapchainKHR)) {
1166 ALOGE("missing device proc: %s", "vkDestroySwapchainKHR");
1167 success = false;
1168 }
1169 vtbl.GetSwapchainImagesKHR = reinterpret_cast<PFN_vkGetSwapchainImagesKHR>(get_proc_addr(device, "vkGetSwapchainImagesKHR"));
1170 if (UNLIKELY(!vtbl.GetSwapchainImagesKHR)) {
1171 ALOGE("missing device proc: %s", "vkGetSwapchainImagesKHR");
1172 success = false;
1173 }
1174 vtbl.AcquireNextImageKHR = reinterpret_cast<PFN_vkAcquireNextImageKHR>(get_proc_addr(device, "vkAcquireNextImageKHR"));
1175 if (UNLIKELY(!vtbl.AcquireNextImageKHR)) {
1176 ALOGE("missing device proc: %s", "vkAcquireNextImageKHR");
1177 success = false;
1178 }
1179 vtbl.QueuePresentKHR = reinterpret_cast<PFN_vkQueuePresentKHR>(get_proc_addr(device, "vkQueuePresentKHR"));
1180 if (UNLIKELY(!vtbl.QueuePresentKHR)) {
1181 ALOGE("missing device proc: %s", "vkQueuePresentKHR");
1182 success = false;
1183 }
Jesse Hall70f93352015-11-04 09:41:31 -08001184 vtbl.GetSwapchainGrallocUsageANDROID = reinterpret_cast<PFN_vkGetSwapchainGrallocUsageANDROID>(get_proc_addr(device, "vkGetSwapchainGrallocUsageANDROID"));
1185 if (UNLIKELY(!vtbl.GetSwapchainGrallocUsageANDROID)) {
1186 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1187 // ALOGE("missing device proc: %s", "vkGetSwapchainGrallocUsageANDROID");
1188 ALOGW("missing device proc: %s", "vkGetSwapchainGrallocUsageANDROID");
1189 // success = false;
1190 }
Jesse Hallab9aeef2015-11-04 10:56:20 -08001191 vtbl.AcquireImageANDROID = reinterpret_cast<PFN_vkAcquireImageANDROID>(get_proc_addr(device, "vkAcquireImageANDROID"));
1192 if (UNLIKELY(!vtbl.AcquireImageANDROID)) {
1193 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1194 // ALOGE("missing device proc: %s", "vkImportNativeFenceANDROID");
1195 ALOGW("missing device proc: %s", "vkAcquireImageANDROID");
1196 // success = false;
Jesse Hallb1352bc2015-09-04 16:12:33 -07001197 }
Jesse Hallab9aeef2015-11-04 10:56:20 -08001198 vtbl.QueueSignalReleaseImageANDROID = reinterpret_cast<PFN_vkQueueSignalReleaseImageANDROID>(get_proc_addr(device, "vkQueueSignalReleaseImageANDROID"));
1199 if (UNLIKELY(!vtbl.QueueSignalReleaseImageANDROID)) {
1200 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1201 // ALOGE("missing device proc: %s", "vkQueueSignalReleaseImageANDROID");
1202 ALOGW("missing device proc: %s", "vkQueueSignalReleaseImageANDROID");
1203 // success = false;
1204 }
1205 // TODO(jessehall): these are deprecated; remove when drivers have been updated
1206 vtbl.ImportNativeFenceANDROID = reinterpret_cast<PFN_vkImportNativeFenceANDROID>(get_proc_addr(device, "vkImportNativeFenceANDROID"));
Jesse Hallb1352bc2015-09-04 16:12:33 -07001207 vtbl.QueueSignalNativeFenceANDROID = reinterpret_cast<PFN_vkQueueSignalNativeFenceANDROID>(get_proc_addr(device, "vkQueueSignalNativeFenceANDROID"));
Jesse Hallab9aeef2015-11-04 10:56:20 -08001208 if (!((!vtbl.AcquireImageANDROID && !vtbl.QueueSignalReleaseImageANDROID && vtbl.ImportNativeFenceANDROID && vtbl.QueueSignalNativeFenceANDROID) ||
1209 (vtbl.AcquireImageANDROID && vtbl.QueueSignalReleaseImageANDROID && !vtbl.ImportNativeFenceANDROID && !vtbl.QueueSignalNativeFenceANDROID))) {
1210 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 -07001211 success = false;
1212 }
Jesse Hall04f4f472015-08-16 19:51:04 -07001213 // clang-format on
1214 return success;
1215}
1216
1217} // namespace vulkan