blob: 4e08015f20f243337d10dc4b1d84a5220bb8fb0d [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)},
Jesse Hallb00daad2015-11-29 19:46:20 -080067 {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSurfaceCapabilitiesKHR)},
68 {"vkGetPhysicalDeviceSurfaceFormatsKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSurfaceFormatsKHR)},
69 {"vkGetPhysicalDeviceSurfacePresentModesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSurfacePresentModesKHR)},
Michael Lentine88594d72015-11-12 12:49:45 -080070 {"vkGetPhysicalDeviceSurfaceSupportKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetPhysicalDeviceSurfaceSupportKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -070071 // clang-format on
72};
73
74const NameProcEntry kDeviceProcTbl[] = {
75 // clang-format off
Michael Lentine88594d72015-11-12 12:49:45 -080076 {"vkAcquireNextImageKHR", reinterpret_cast<PFN_vkVoidFunction>(vkAcquireNextImageKHR)},
Jesse Hallfbf97b02015-11-20 14:17:03 -080077 {"vkAllocCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkAllocCommandBuffers)},
Jesse Hall04f4f472015-08-16 19:51:04 -070078 {"vkAllocDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkAllocDescriptorSets)},
79 {"vkAllocMemory", reinterpret_cast<PFN_vkVoidFunction>(vkAllocMemory)},
80 {"vkBeginCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkBeginCommandBuffer)},
81 {"vkBindBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkBindBufferMemory)},
82 {"vkBindImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkBindImageMemory)},
83 {"vkCmdBeginQuery", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBeginQuery)},
84 {"vkCmdBeginRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBeginRenderPass)},
85 {"vkCmdBindDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindDescriptorSets)},
Jesse Hall04f4f472015-08-16 19:51:04 -070086 {"vkCmdBindIndexBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindIndexBuffer)},
87 {"vkCmdBindPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindPipeline)},
88 {"vkCmdBindVertexBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindVertexBuffers)},
89 {"vkCmdBlitImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBlitImage)},
Jesse Hallae38f732015-11-19 21:32:50 -080090 {"vkCmdClearAttachments", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearAttachments)},
Jesse Hall04f4f472015-08-16 19:51:04 -070091 {"vkCmdClearColorImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearColorImage)},
Jesse Hall04f4f472015-08-16 19:51:04 -070092 {"vkCmdClearDepthStencilImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearDepthStencilImage)},
93 {"vkCmdCopyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBuffer)},
94 {"vkCmdCopyBufferToImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBufferToImage)},
95 {"vkCmdCopyImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyImage)},
96 {"vkCmdCopyImageToBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyImageToBuffer)},
97 {"vkCmdCopyQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyQueryPoolResults)},
98 {"vkCmdDispatch", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDispatch)},
99 {"vkCmdDispatchIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDispatchIndirect)},
100 {"vkCmdDraw", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDraw)},
101 {"vkCmdDrawIndexed", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndexed)},
102 {"vkCmdDrawIndexedIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndexedIndirect)},
103 {"vkCmdDrawIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndirect)},
104 {"vkCmdEndQuery", reinterpret_cast<PFN_vkVoidFunction>(vkCmdEndQuery)},
105 {"vkCmdEndRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdEndRenderPass)},
106 {"vkCmdExecuteCommands", reinterpret_cast<PFN_vkVoidFunction>(vkCmdExecuteCommands)},
107 {"vkCmdFillBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdFillBuffer)},
108 {"vkCmdNextSubpass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdNextSubpass)},
109 {"vkCmdPipelineBarrier", reinterpret_cast<PFN_vkVoidFunction>(vkCmdPipelineBarrier)},
110 {"vkCmdPushConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdPushConstants)},
111 {"vkCmdResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetEvent)},
112 {"vkCmdResetQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetQueryPool)},
113 {"vkCmdResolveImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResolveImage)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700114 {"vkCmdSetBlendConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetBlendConstants)},
115 {"vkCmdSetDepthBias", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBias)},
116 {"vkCmdSetDepthBounds", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBounds)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700117 {"vkCmdSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetEvent)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700118 {"vkCmdSetLineWidth", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetLineWidth)},
119 {"vkCmdSetScissor", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetScissor)},
120 {"vkCmdSetStencilCompareMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilCompareMask)},
121 {"vkCmdSetStencilReference", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilReference)},
122 {"vkCmdSetStencilWriteMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilWriteMask)},
123 {"vkCmdSetViewport", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetViewport)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700124 {"vkCmdUpdateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdUpdateBuffer)},
125 {"vkCmdWaitEvents", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWaitEvents)},
126 {"vkCmdWriteTimestamp", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWriteTimestamp)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700127 {"vkCreateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBuffer)},
128 {"vkCreateBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBufferView)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700129 {"vkCreateCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandPool)},
130 {"vkCreateComputePipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateComputePipelines)},
131 {"vkCreateDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorPool)},
132 {"vkCreateDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorSetLayout)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700133 {"vkCreateEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCreateEvent)},
134 {"vkCreateFence", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFence)},
135 {"vkCreateFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFramebuffer)},
136 {"vkCreateGraphicsPipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateGraphicsPipelines)},
137 {"vkCreateImage", reinterpret_cast<PFN_vkVoidFunction>(vkCreateImage)},
138 {"vkCreateImageView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateImageView)},
139 {"vkCreatePipelineCache", reinterpret_cast<PFN_vkVoidFunction>(vkCreatePipelineCache)},
140 {"vkCreatePipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreatePipelineLayout)},
141 {"vkCreateQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateQueryPool)},
142 {"vkCreateRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCreateRenderPass)},
143 {"vkCreateSampler", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSampler)},
144 {"vkCreateSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSemaphore)},
145 {"vkCreateShader", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShader)},
146 {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800147 {"vkCreateSwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700148 {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBuffer)},
149 {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBufferView)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700150 {"vkDestroyCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandPool)},
151 {"vkDestroyDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorPool)},
152 {"vkDestroyDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorSetLayout)},
153 {"vkDestroyDevice", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDevice)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700154 {"vkDestroyEvent", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyEvent)},
155 {"vkDestroyFence", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFence)},
156 {"vkDestroyFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFramebuffer)},
157 {"vkDestroyImage", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyImage)},
158 {"vkDestroyImageView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyImageView)},
159 {"vkDestroyPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipeline)},
160 {"vkDestroyPipelineCache", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipelineCache)},
161 {"vkDestroyPipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipelineLayout)},
162 {"vkDestroyQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyQueryPool)},
163 {"vkDestroyRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyRenderPass)},
164 {"vkDestroySampler", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySampler)},
165 {"vkDestroySemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySemaphore)},
166 {"vkDestroyShader", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShader)},
167 {"vkDestroyShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800168 {"vkDestroySwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700169 {"vkDeviceWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkDeviceWaitIdle)},
170 {"vkEndCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkEndCommandBuffer)},
171 {"vkFlushMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkFlushMappedMemoryRanges)},
Jesse Hallfbf97b02015-11-20 14:17:03 -0800172 {"vkFreeCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkFreeCommandBuffers)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700173 {"vkFreeDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkFreeDescriptorSets)},
174 {"vkFreeMemory", reinterpret_cast<PFN_vkVoidFunction>(vkFreeMemory)},
175 {"vkGetBufferMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetBufferMemoryRequirements)},
176 {"vkGetDeviceMemoryCommitment", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceMemoryCommitment)},
177 {"vkGetDeviceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceProcAddr)},
178 {"vkGetDeviceQueue", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceQueue)},
179 {"vkGetEventStatus", reinterpret_cast<PFN_vkVoidFunction>(vkGetEventStatus)},
180 {"vkGetFenceStatus", reinterpret_cast<PFN_vkVoidFunction>(vkGetFenceStatus)},
181 {"vkGetImageMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageMemoryRequirements)},
182 {"vkGetImageSparseMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSparseMemoryRequirements)},
183 {"vkGetImageSubresourceLayout", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSubresourceLayout)},
184 {"vkGetPipelineCacheData", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheData)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700185 {"vkGetQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkGetQueryPoolResults)},
186 {"vkGetRenderAreaGranularity", reinterpret_cast<PFN_vkVoidFunction>(vkGetRenderAreaGranularity)},
Michael Lentine88594d72015-11-12 12:49:45 -0800187 {"vkGetSwapchainImagesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSwapchainImagesKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700188 {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkInvalidateMappedMemoryRanges)},
189 {"vkMapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkMapMemory)},
190 {"vkMergePipelineCaches", reinterpret_cast<PFN_vkVoidFunction>(vkMergePipelineCaches)},
Jesse Halla6429252015-11-29 18:59:42 -0800191 {"vkQueueBindSparse", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparse)},
Michael Lentine88594d72015-11-12 12:49:45 -0800192 {"vkQueuePresentKHR", reinterpret_cast<PFN_vkVoidFunction>(vkQueuePresentKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700193 {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSubmit)},
194 {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitIdle)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700195 {"vkResetCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandBuffer)},
196 {"vkResetCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandPool)},
197 {"vkResetDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetDescriptorPool)},
198 {"vkResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkResetEvent)},
199 {"vkResetFences", reinterpret_cast<PFN_vkVoidFunction>(vkResetFences)},
200 {"vkSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkSetEvent)},
201 {"vkUnmapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkUnmapMemory)},
202 {"vkUpdateDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkUpdateDescriptorSets)},
203 {"vkWaitForFences", reinterpret_cast<PFN_vkVoidFunction>(vkWaitForFences)},
204 // clang-format on
205};
206
207const NameOffsetEntry kInstanceOffsetTbl[] = {
208 // clang-format off
Jesse Hall1356b0d2015-11-23 17:24:58 -0800209 {"vkCreateAndroidSurfaceKHR", offsetof(InstanceVtbl, CreateAndroidSurfaceKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700210 {"vkCreateDevice", offsetof(InstanceVtbl, CreateDevice)},
211 {"vkDestroyInstance", offsetof(InstanceVtbl, DestroyInstance)},
Jesse Hall1356b0d2015-11-23 17:24:58 -0800212 {"vkDestroySurfaceKHR", offsetof(InstanceVtbl, DestroySurfaceKHR)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700213 {"vkEnumerateDeviceExtensionProperties", offsetof(InstanceVtbl, EnumerateDeviceExtensionProperties)},
214 {"vkEnumerateDeviceLayerProperties", offsetof(InstanceVtbl, EnumerateDeviceLayerProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700215 {"vkEnumeratePhysicalDevices", offsetof(InstanceVtbl, EnumeratePhysicalDevices)},
216 {"vkGetInstanceProcAddr", offsetof(InstanceVtbl, GetInstanceProcAddr)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700217 {"vkGetPhysicalDeviceFeatures", offsetof(InstanceVtbl, GetPhysicalDeviceFeatures)},
218 {"vkGetPhysicalDeviceFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceFormatProperties)},
219 {"vkGetPhysicalDeviceImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceImageFormatProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700220 {"vkGetPhysicalDeviceMemoryProperties", offsetof(InstanceVtbl, GetPhysicalDeviceMemoryProperties)},
221 {"vkGetPhysicalDeviceProperties", offsetof(InstanceVtbl, GetPhysicalDeviceProperties)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700222 {"vkGetPhysicalDeviceQueueFamilyProperties", offsetof(InstanceVtbl, GetPhysicalDeviceQueueFamilyProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700223 {"vkGetPhysicalDeviceSparseImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceSparseImageFormatProperties)},
Jesse Hallb00daad2015-11-29 19:46:20 -0800224 {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfaceCapabilitiesKHR)},
225 {"vkGetPhysicalDeviceSurfaceFormatsKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfaceFormatsKHR)},
226 {"vkGetPhysicalDeviceSurfacePresentModesKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfacePresentModesKHR)},
Michael Lentine88594d72015-11-12 12:49:45 -0800227 {"vkGetPhysicalDeviceSurfaceSupportKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfaceSupportKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700228 // clang-format on
229};
230
231const NameOffsetEntry kDeviceOffsetTbl[] = {
232 // clang-format off
Michael Lentine88594d72015-11-12 12:49:45 -0800233 {"vkAcquireNextImageKHR", offsetof(DeviceVtbl, AcquireNextImageKHR)},
Jesse Hallfbf97b02015-11-20 14:17:03 -0800234 {"vkAllocCommandBuffers", offsetof(DeviceVtbl, AllocCommandBuffers)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700235 {"vkAllocDescriptorSets", offsetof(DeviceVtbl, AllocDescriptorSets)},
236 {"vkAllocMemory", offsetof(DeviceVtbl, AllocMemory)},
237 {"vkBeginCommandBuffer", offsetof(DeviceVtbl, BeginCommandBuffer)},
238 {"vkBindBufferMemory", offsetof(DeviceVtbl, BindBufferMemory)},
239 {"vkBindImageMemory", offsetof(DeviceVtbl, BindImageMemory)},
240 {"vkCmdBeginQuery", offsetof(DeviceVtbl, CmdBeginQuery)},
241 {"vkCmdBeginRenderPass", offsetof(DeviceVtbl, CmdBeginRenderPass)},
242 {"vkCmdBindDescriptorSets", offsetof(DeviceVtbl, CmdBindDescriptorSets)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700243 {"vkCmdBindIndexBuffer", offsetof(DeviceVtbl, CmdBindIndexBuffer)},
244 {"vkCmdBindPipeline", offsetof(DeviceVtbl, CmdBindPipeline)},
245 {"vkCmdBindVertexBuffers", offsetof(DeviceVtbl, CmdBindVertexBuffers)},
246 {"vkCmdBlitImage", offsetof(DeviceVtbl, CmdBlitImage)},
Jesse Hallae38f732015-11-19 21:32:50 -0800247 {"vkCmdClearAttachments", offsetof(DeviceVtbl, CmdClearAttachments)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700248 {"vkCmdClearColorImage", offsetof(DeviceVtbl, CmdClearColorImage)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700249 {"vkCmdClearDepthStencilImage", offsetof(DeviceVtbl, CmdClearDepthStencilImage)},
250 {"vkCmdCopyBuffer", offsetof(DeviceVtbl, CmdCopyBuffer)},
251 {"vkCmdCopyBufferToImage", offsetof(DeviceVtbl, CmdCopyBufferToImage)},
252 {"vkCmdCopyImage", offsetof(DeviceVtbl, CmdCopyImage)},
253 {"vkCmdCopyImageToBuffer", offsetof(DeviceVtbl, CmdCopyImageToBuffer)},
254 {"vkCmdCopyQueryPoolResults", offsetof(DeviceVtbl, CmdCopyQueryPoolResults)},
255 {"vkCmdDispatch", offsetof(DeviceVtbl, CmdDispatch)},
256 {"vkCmdDispatchIndirect", offsetof(DeviceVtbl, CmdDispatchIndirect)},
257 {"vkCmdDraw", offsetof(DeviceVtbl, CmdDraw)},
258 {"vkCmdDrawIndexed", offsetof(DeviceVtbl, CmdDrawIndexed)},
259 {"vkCmdDrawIndexedIndirect", offsetof(DeviceVtbl, CmdDrawIndexedIndirect)},
260 {"vkCmdDrawIndirect", offsetof(DeviceVtbl, CmdDrawIndirect)},
261 {"vkCmdEndQuery", offsetof(DeviceVtbl, CmdEndQuery)},
262 {"vkCmdEndRenderPass", offsetof(DeviceVtbl, CmdEndRenderPass)},
263 {"vkCmdExecuteCommands", offsetof(DeviceVtbl, CmdExecuteCommands)},
264 {"vkCmdFillBuffer", offsetof(DeviceVtbl, CmdFillBuffer)},
265 {"vkCmdNextSubpass", offsetof(DeviceVtbl, CmdNextSubpass)},
266 {"vkCmdPipelineBarrier", offsetof(DeviceVtbl, CmdPipelineBarrier)},
267 {"vkCmdPushConstants", offsetof(DeviceVtbl, CmdPushConstants)},
268 {"vkCmdResetEvent", offsetof(DeviceVtbl, CmdResetEvent)},
269 {"vkCmdResetQueryPool", offsetof(DeviceVtbl, CmdResetQueryPool)},
270 {"vkCmdResolveImage", offsetof(DeviceVtbl, CmdResolveImage)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700271 {"vkCmdSetBlendConstants", offsetof(DeviceVtbl, CmdSetBlendConstants)},
272 {"vkCmdSetDepthBias", offsetof(DeviceVtbl, CmdSetDepthBias)},
273 {"vkCmdSetDepthBounds", offsetof(DeviceVtbl, CmdSetDepthBounds)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700274 {"vkCmdSetEvent", offsetof(DeviceVtbl, CmdSetEvent)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700275 {"vkCmdSetLineWidth", offsetof(DeviceVtbl, CmdSetLineWidth)},
276 {"vkCmdSetScissor", offsetof(DeviceVtbl, CmdSetScissor)},
277 {"vkCmdSetStencilCompareMask", offsetof(DeviceVtbl, CmdSetStencilCompareMask)},
278 {"vkCmdSetStencilReference", offsetof(DeviceVtbl, CmdSetStencilReference)},
279 {"vkCmdSetStencilWriteMask", offsetof(DeviceVtbl, CmdSetStencilWriteMask)},
280 {"vkCmdSetViewport", offsetof(DeviceVtbl, CmdSetViewport)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700281 {"vkCmdUpdateBuffer", offsetof(DeviceVtbl, CmdUpdateBuffer)},
282 {"vkCmdWaitEvents", offsetof(DeviceVtbl, CmdWaitEvents)},
283 {"vkCmdWriteTimestamp", offsetof(DeviceVtbl, CmdWriteTimestamp)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700284 {"vkCreateBuffer", offsetof(DeviceVtbl, CreateBuffer)},
285 {"vkCreateBufferView", offsetof(DeviceVtbl, CreateBufferView)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700286 {"vkCreateCommandPool", offsetof(DeviceVtbl, CreateCommandPool)},
287 {"vkCreateComputePipelines", offsetof(DeviceVtbl, CreateComputePipelines)},
288 {"vkCreateDescriptorPool", offsetof(DeviceVtbl, CreateDescriptorPool)},
289 {"vkCreateDescriptorSetLayout", offsetof(DeviceVtbl, CreateDescriptorSetLayout)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700290 {"vkCreateEvent", offsetof(DeviceVtbl, CreateEvent)},
291 {"vkCreateFence", offsetof(DeviceVtbl, CreateFence)},
292 {"vkCreateFramebuffer", offsetof(DeviceVtbl, CreateFramebuffer)},
293 {"vkCreateGraphicsPipelines", offsetof(DeviceVtbl, CreateGraphicsPipelines)},
294 {"vkCreateImage", offsetof(DeviceVtbl, CreateImage)},
295 {"vkCreateImageView", offsetof(DeviceVtbl, CreateImageView)},
296 {"vkCreatePipelineCache", offsetof(DeviceVtbl, CreatePipelineCache)},
297 {"vkCreatePipelineLayout", offsetof(DeviceVtbl, CreatePipelineLayout)},
298 {"vkCreateQueryPool", offsetof(DeviceVtbl, CreateQueryPool)},
299 {"vkCreateRenderPass", offsetof(DeviceVtbl, CreateRenderPass)},
300 {"vkCreateSampler", offsetof(DeviceVtbl, CreateSampler)},
301 {"vkCreateSemaphore", offsetof(DeviceVtbl, CreateSemaphore)},
302 {"vkCreateShader", offsetof(DeviceVtbl, CreateShader)},
303 {"vkCreateShaderModule", offsetof(DeviceVtbl, CreateShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800304 {"vkCreateSwapchainKHR", offsetof(DeviceVtbl, CreateSwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700305 {"vkDestroyBuffer", offsetof(DeviceVtbl, DestroyBuffer)},
306 {"vkDestroyBufferView", offsetof(DeviceVtbl, DestroyBufferView)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700307 {"vkDestroyCommandPool", offsetof(DeviceVtbl, DestroyCommandPool)},
308 {"vkDestroyDescriptorPool", offsetof(DeviceVtbl, DestroyDescriptorPool)},
309 {"vkDestroyDescriptorSetLayout", offsetof(DeviceVtbl, DestroyDescriptorSetLayout)},
310 {"vkDestroyDevice", offsetof(DeviceVtbl, DestroyDevice)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700311 {"vkDestroyEvent", offsetof(DeviceVtbl, DestroyEvent)},
312 {"vkDestroyFence", offsetof(DeviceVtbl, DestroyFence)},
313 {"vkDestroyFramebuffer", offsetof(DeviceVtbl, DestroyFramebuffer)},
314 {"vkDestroyImage", offsetof(DeviceVtbl, DestroyImage)},
315 {"vkDestroyImageView", offsetof(DeviceVtbl, DestroyImageView)},
316 {"vkDestroyPipeline", offsetof(DeviceVtbl, DestroyPipeline)},
317 {"vkDestroyPipelineCache", offsetof(DeviceVtbl, DestroyPipelineCache)},
318 {"vkDestroyPipelineLayout", offsetof(DeviceVtbl, DestroyPipelineLayout)},
319 {"vkDestroyQueryPool", offsetof(DeviceVtbl, DestroyQueryPool)},
320 {"vkDestroyRenderPass", offsetof(DeviceVtbl, DestroyRenderPass)},
321 {"vkDestroySampler", offsetof(DeviceVtbl, DestroySampler)},
322 {"vkDestroySemaphore", offsetof(DeviceVtbl, DestroySemaphore)},
323 {"vkDestroyShader", offsetof(DeviceVtbl, DestroyShader)},
324 {"vkDestroyShaderModule", offsetof(DeviceVtbl, DestroyShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800325 {"vkDestroySwapchainKHR", offsetof(DeviceVtbl, DestroySwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700326 {"vkDeviceWaitIdle", offsetof(DeviceVtbl, DeviceWaitIdle)},
327 {"vkEndCommandBuffer", offsetof(DeviceVtbl, EndCommandBuffer)},
328 {"vkFlushMappedMemoryRanges", offsetof(DeviceVtbl, FlushMappedMemoryRanges)},
Jesse Hallfbf97b02015-11-20 14:17:03 -0800329 {"vkFreeCommandBuffers", offsetof(DeviceVtbl, FreeCommandBuffers)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700330 {"vkFreeDescriptorSets", offsetof(DeviceVtbl, FreeDescriptorSets)},
331 {"vkFreeMemory", offsetof(DeviceVtbl, FreeMemory)},
332 {"vkGetBufferMemoryRequirements", offsetof(DeviceVtbl, GetBufferMemoryRequirements)},
333 {"vkGetDeviceMemoryCommitment", offsetof(DeviceVtbl, GetDeviceMemoryCommitment)},
334 {"vkGetDeviceProcAddr", offsetof(DeviceVtbl, GetDeviceProcAddr)},
335 {"vkGetDeviceQueue", offsetof(DeviceVtbl, GetDeviceQueue)},
336 {"vkGetEventStatus", offsetof(DeviceVtbl, GetEventStatus)},
337 {"vkGetFenceStatus", offsetof(DeviceVtbl, GetFenceStatus)},
338 {"vkGetImageMemoryRequirements", offsetof(DeviceVtbl, GetImageMemoryRequirements)},
339 {"vkGetImageSparseMemoryRequirements", offsetof(DeviceVtbl, GetImageSparseMemoryRequirements)},
340 {"vkGetImageSubresourceLayout", offsetof(DeviceVtbl, GetImageSubresourceLayout)},
341 {"vkGetPipelineCacheData", offsetof(DeviceVtbl, GetPipelineCacheData)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700342 {"vkGetQueryPoolResults", offsetof(DeviceVtbl, GetQueryPoolResults)},
343 {"vkGetRenderAreaGranularity", offsetof(DeviceVtbl, GetRenderAreaGranularity)},
Michael Lentine88594d72015-11-12 12:49:45 -0800344 {"vkGetSwapchainImagesKHR", offsetof(DeviceVtbl, GetSwapchainImagesKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700345 {"vkInvalidateMappedMemoryRanges", offsetof(DeviceVtbl, InvalidateMappedMemoryRanges)},
346 {"vkMapMemory", offsetof(DeviceVtbl, MapMemory)},
347 {"vkMergePipelineCaches", offsetof(DeviceVtbl, MergePipelineCaches)},
Jesse Halla6429252015-11-29 18:59:42 -0800348 {"vkQueueBindSparse", offsetof(DeviceVtbl, QueueBindSparse)},
Michael Lentine88594d72015-11-12 12:49:45 -0800349 {"vkQueuePresentKHR", offsetof(DeviceVtbl, QueuePresentKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700350 {"vkQueueSubmit", offsetof(DeviceVtbl, QueueSubmit)},
351 {"vkQueueWaitIdle", offsetof(DeviceVtbl, QueueWaitIdle)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700352 {"vkResetCommandBuffer", offsetof(DeviceVtbl, ResetCommandBuffer)},
353 {"vkResetCommandPool", offsetof(DeviceVtbl, ResetCommandPool)},
354 {"vkResetDescriptorPool", offsetof(DeviceVtbl, ResetDescriptorPool)},
355 {"vkResetEvent", offsetof(DeviceVtbl, ResetEvent)},
356 {"vkResetFences", offsetof(DeviceVtbl, ResetFences)},
357 {"vkSetEvent", offsetof(DeviceVtbl, SetEvent)},
358 {"vkUnmapMemory", offsetof(DeviceVtbl, UnmapMemory)},
359 {"vkUpdateDescriptorSets", offsetof(DeviceVtbl, UpdateDescriptorSets)},
360 {"vkWaitForFences", offsetof(DeviceVtbl, WaitForFences)},
361 // clang-format on
362};
363
364} // namespace
365
366namespace vulkan {
367
368PFN_vkVoidFunction GetGlobalInstanceProcAddr(const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700369 const NameProcEntry* entry = FindProcEntry(kInstanceProcTbl, name);
370 if (entry)
371 return entry->proc;
372 // vkGetDeviceProcAddr must be available at the global/instance level for
373 // bootstrapping
Jesse Hall04f4f472015-08-16 19:51:04 -0700374 if (strcmp(name, "vkGetDeviceProcAddr") == 0)
375 return reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceProcAddr);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700376 return nullptr;
Jesse Hall04f4f472015-08-16 19:51:04 -0700377}
378
379PFN_vkVoidFunction GetGlobalDeviceProcAddr(const char* name) {
380 const NameProcEntry* entry = FindProcEntry(kDeviceProcTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700381 if (entry)
382 return entry->proc;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700383 return nullptr;
Jesse Hall04f4f472015-08-16 19:51:04 -0700384}
385
386PFN_vkVoidFunction GetSpecificInstanceProcAddr(const InstanceVtbl* vtbl,
387 const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700388 size_t offset;
Jesse Hall04f4f472015-08-16 19:51:04 -0700389 const NameOffsetEntry* entry = FindProcEntry(kInstanceOffsetTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700390 if (entry)
391 offset = entry->offset;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700392 else
Jesse Hall04f4f472015-08-16 19:51:04 -0700393 return nullptr;
394 const unsigned char* base = reinterpret_cast<const unsigned char*>(vtbl);
Michael Lentine62270162015-09-15 13:25:36 -0500395 return *reinterpret_cast<PFN_vkVoidFunction*>(
Michael Lentine88594d72015-11-12 12:49:45 -0800396 const_cast<unsigned char*>(base) + offset);
Jesse Hall04f4f472015-08-16 19:51:04 -0700397}
398
399PFN_vkVoidFunction GetSpecificDeviceProcAddr(const DeviceVtbl* vtbl,
400 const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700401 size_t offset;
Jesse Hall04f4f472015-08-16 19:51:04 -0700402 const NameOffsetEntry* entry = FindProcEntry(kDeviceOffsetTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700403 if (entry)
404 offset = entry->offset;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700405 else
Jesse Hall04f4f472015-08-16 19:51:04 -0700406 return nullptr;
407 const unsigned char* base = reinterpret_cast<const unsigned char*>(vtbl);
Michael Lentine62270162015-09-15 13:25:36 -0500408 return *reinterpret_cast<PFN_vkVoidFunction*>(
Michael Lentine88594d72015-11-12 12:49:45 -0800409 const_cast<unsigned char*>(base) + offset);
Jesse Hall04f4f472015-08-16 19:51:04 -0700410}
411
412bool LoadInstanceVtbl(VkInstance instance,
Michael Lentine03c64b02015-08-26 18:27:26 -0500413 VkInstance instance_next,
Jesse Hall04f4f472015-08-16 19:51:04 -0700414 PFN_vkGetInstanceProcAddr get_proc_addr,
415 InstanceVtbl& vtbl) {
416 bool success = true;
417 // clang-format off
Michael Lentine03c64b02015-08-26 18:27:26 -0500418 vtbl.GetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(get_proc_addr(instance_next, "vkGetInstanceProcAddr"));
419 if (UNLIKELY(!vtbl.GetInstanceProcAddr)) {
420 ALOGE("missing instance proc: %s", "vkGetInstanceProcAddr");
421 success = false;
422 }
423 vtbl.CreateInstance = reinterpret_cast<PFN_vkCreateInstance>(get_proc_addr(instance, "vkCreateInstance"));
424 if (UNLIKELY(!vtbl.CreateInstance)) {
425 // This is allowed to fail as the driver doesn't have to return vkCreateInstance when given an instance
426 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700427 vtbl.DestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(get_proc_addr(instance, "vkDestroyInstance"));
428 if (UNLIKELY(!vtbl.DestroyInstance)) {
429 ALOGE("missing instance proc: %s", "vkDestroyInstance");
430 success = false;
431 }
432 vtbl.EnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(get_proc_addr(instance, "vkEnumeratePhysicalDevices"));
433 if (UNLIKELY(!vtbl.EnumeratePhysicalDevices)) {
434 ALOGE("missing instance proc: %s", "vkEnumeratePhysicalDevices");
435 success = false;
436 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700437 vtbl.GetPhysicalDeviceProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceProperties"));
438 if (UNLIKELY(!vtbl.GetPhysicalDeviceProperties)) {
439 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceProperties");
440 success = false;
441 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700442 vtbl.GetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceQueueFamilyProperties"));
443 if (UNLIKELY(!vtbl.GetPhysicalDeviceQueueFamilyProperties)) {
444 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceQueueFamilyProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700445 success = false;
446 }
447 vtbl.GetPhysicalDeviceMemoryProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceMemoryProperties"));
448 if (UNLIKELY(!vtbl.GetPhysicalDeviceMemoryProperties)) {
449 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceMemoryProperties");
450 success = false;
451 }
452 vtbl.GetPhysicalDeviceFeatures = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures>(get_proc_addr(instance, "vkGetPhysicalDeviceFeatures"));
453 if (UNLIKELY(!vtbl.GetPhysicalDeviceFeatures)) {
454 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceFeatures");
455 success = false;
456 }
457 vtbl.GetPhysicalDeviceFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceFormatProperties"));
458 if (UNLIKELY(!vtbl.GetPhysicalDeviceFormatProperties)) {
459 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceFormatProperties");
460 success = false;
461 }
462 vtbl.GetPhysicalDeviceImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceImageFormatProperties"));
463 if (UNLIKELY(!vtbl.GetPhysicalDeviceImageFormatProperties)) {
464 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceImageFormatProperties");
465 success = false;
466 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700467 vtbl.CreateDevice = reinterpret_cast<PFN_vkCreateDevice>(get_proc_addr(instance, "vkCreateDevice"));
468 if (UNLIKELY(!vtbl.CreateDevice)) {
469 ALOGE("missing instance proc: %s", "vkCreateDevice");
470 success = false;
471 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700472 vtbl.EnumerateDeviceLayerProperties = reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(get_proc_addr(instance, "vkEnumerateDeviceLayerProperties"));
473 if (UNLIKELY(!vtbl.EnumerateDeviceLayerProperties)) {
474 ALOGE("missing instance proc: %s", "vkEnumerateDeviceLayerProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700475 success = false;
476 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700477 vtbl.EnumerateDeviceExtensionProperties = reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(get_proc_addr(instance, "vkEnumerateDeviceExtensionProperties"));
478 if (UNLIKELY(!vtbl.EnumerateDeviceExtensionProperties)) {
479 ALOGE("missing instance proc: %s", "vkEnumerateDeviceExtensionProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700480 success = false;
481 }
482 vtbl.GetPhysicalDeviceSparseImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceSparseImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceSparseImageFormatProperties"));
483 if (UNLIKELY(!vtbl.GetPhysicalDeviceSparseImageFormatProperties)) {
484 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceSparseImageFormatProperties");
485 success = false;
486 }
Jesse Hall1356b0d2015-11-23 17:24:58 -0800487 vtbl.DestroySurfaceKHR = reinterpret_cast<PFN_vkDestroySurfaceKHR>(get_proc_addr(instance, "vkDestroySurfaceKHR"));
Michael Lentine88594d72015-11-12 12:49:45 -0800488 vtbl.GetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"));
Jesse Hallb00daad2015-11-29 19:46:20 -0800489 vtbl.GetPhysicalDeviceSurfaceCapabilitiesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"));
490 vtbl.GetPhysicalDeviceSurfaceFormatsKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceFormatsKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"));
491 vtbl.GetPhysicalDeviceSurfacePresentModesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfacePresentModesKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"));
Jesse Hall1356b0d2015-11-23 17:24:58 -0800492 vtbl.CreateAndroidSurfaceKHR = reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR>(get_proc_addr(instance, "vkCreateAndroidSurfaceKHR"));
Jesse Hall04f4f472015-08-16 19:51:04 -0700493 // clang-format on
494 return success;
495}
496
497bool LoadDeviceVtbl(VkDevice device,
Michael Lentine03c64b02015-08-26 18:27:26 -0500498 VkDevice device_next,
Jesse Hall04f4f472015-08-16 19:51:04 -0700499 PFN_vkGetDeviceProcAddr get_proc_addr,
500 DeviceVtbl& vtbl) {
501 bool success = true;
502 // clang-format off
Michael Lentine03c64b02015-08-26 18:27:26 -0500503 vtbl.GetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(get_proc_addr(device_next, "vkGetDeviceProcAddr"));
Jesse Hall04f4f472015-08-16 19:51:04 -0700504 if (UNLIKELY(!vtbl.GetDeviceProcAddr)) {
505 ALOGE("missing device proc: %s", "vkGetDeviceProcAddr");
506 success = false;
507 }
508 vtbl.DestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(get_proc_addr(device, "vkDestroyDevice"));
509 if (UNLIKELY(!vtbl.DestroyDevice)) {
510 ALOGE("missing device proc: %s", "vkDestroyDevice");
511 success = false;
512 }
513 vtbl.GetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(get_proc_addr(device, "vkGetDeviceQueue"));
514 if (UNLIKELY(!vtbl.GetDeviceQueue)) {
515 ALOGE("missing device proc: %s", "vkGetDeviceQueue");
516 success = false;
517 }
518 vtbl.QueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(get_proc_addr(device, "vkQueueSubmit"));
519 if (UNLIKELY(!vtbl.QueueSubmit)) {
520 ALOGE("missing device proc: %s", "vkQueueSubmit");
521 success = false;
522 }
523 vtbl.QueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(get_proc_addr(device, "vkQueueWaitIdle"));
524 if (UNLIKELY(!vtbl.QueueWaitIdle)) {
525 ALOGE("missing device proc: %s", "vkQueueWaitIdle");
526 success = false;
527 }
528 vtbl.DeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(get_proc_addr(device, "vkDeviceWaitIdle"));
529 if (UNLIKELY(!vtbl.DeviceWaitIdle)) {
530 ALOGE("missing device proc: %s", "vkDeviceWaitIdle");
531 success = false;
532 }
533 vtbl.AllocMemory = reinterpret_cast<PFN_vkAllocMemory>(get_proc_addr(device, "vkAllocMemory"));
534 if (UNLIKELY(!vtbl.AllocMemory)) {
535 ALOGE("missing device proc: %s", "vkAllocMemory");
536 success = false;
537 }
538 vtbl.FreeMemory = reinterpret_cast<PFN_vkFreeMemory>(get_proc_addr(device, "vkFreeMemory"));
539 if (UNLIKELY(!vtbl.FreeMemory)) {
540 ALOGE("missing device proc: %s", "vkFreeMemory");
541 success = false;
542 }
543 vtbl.MapMemory = reinterpret_cast<PFN_vkMapMemory>(get_proc_addr(device, "vkMapMemory"));
544 if (UNLIKELY(!vtbl.MapMemory)) {
545 ALOGE("missing device proc: %s", "vkMapMemory");
546 success = false;
547 }
548 vtbl.UnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(get_proc_addr(device, "vkUnmapMemory"));
549 if (UNLIKELY(!vtbl.UnmapMemory)) {
550 ALOGE("missing device proc: %s", "vkUnmapMemory");
551 success = false;
552 }
553 vtbl.FlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(get_proc_addr(device, "vkFlushMappedMemoryRanges"));
554 if (UNLIKELY(!vtbl.FlushMappedMemoryRanges)) {
555 ALOGE("missing device proc: %s", "vkFlushMappedMemoryRanges");
556 success = false;
557 }
558 vtbl.InvalidateMappedMemoryRanges = reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>(get_proc_addr(device, "vkInvalidateMappedMemoryRanges"));
559 if (UNLIKELY(!vtbl.InvalidateMappedMemoryRanges)) {
560 ALOGE("missing device proc: %s", "vkInvalidateMappedMemoryRanges");
561 success = false;
562 }
563 vtbl.GetDeviceMemoryCommitment = reinterpret_cast<PFN_vkGetDeviceMemoryCommitment>(get_proc_addr(device, "vkGetDeviceMemoryCommitment"));
564 if (UNLIKELY(!vtbl.GetDeviceMemoryCommitment)) {
565 ALOGE("missing device proc: %s", "vkGetDeviceMemoryCommitment");
566 success = false;
567 }
568 vtbl.GetBufferMemoryRequirements = reinterpret_cast<PFN_vkGetBufferMemoryRequirements>(get_proc_addr(device, "vkGetBufferMemoryRequirements"));
569 if (UNLIKELY(!vtbl.GetBufferMemoryRequirements)) {
570 ALOGE("missing device proc: %s", "vkGetBufferMemoryRequirements");
571 success = false;
572 }
573 vtbl.BindBufferMemory = reinterpret_cast<PFN_vkBindBufferMemory>(get_proc_addr(device, "vkBindBufferMemory"));
574 if (UNLIKELY(!vtbl.BindBufferMemory)) {
575 ALOGE("missing device proc: %s", "vkBindBufferMemory");
576 success = false;
577 }
578 vtbl.GetImageMemoryRequirements = reinterpret_cast<PFN_vkGetImageMemoryRequirements>(get_proc_addr(device, "vkGetImageMemoryRequirements"));
579 if (UNLIKELY(!vtbl.GetImageMemoryRequirements)) {
580 ALOGE("missing device proc: %s", "vkGetImageMemoryRequirements");
581 success = false;
582 }
583 vtbl.BindImageMemory = reinterpret_cast<PFN_vkBindImageMemory>(get_proc_addr(device, "vkBindImageMemory"));
584 if (UNLIKELY(!vtbl.BindImageMemory)) {
585 ALOGE("missing device proc: %s", "vkBindImageMemory");
586 success = false;
587 }
588 vtbl.GetImageSparseMemoryRequirements = reinterpret_cast<PFN_vkGetImageSparseMemoryRequirements>(get_proc_addr(device, "vkGetImageSparseMemoryRequirements"));
589 if (UNLIKELY(!vtbl.GetImageSparseMemoryRequirements)) {
590 ALOGE("missing device proc: %s", "vkGetImageSparseMemoryRequirements");
591 success = false;
592 }
Jesse Halla6429252015-11-29 18:59:42 -0800593 vtbl.QueueBindSparse = reinterpret_cast<PFN_vkQueueBindSparse>(get_proc_addr(device, "vkQueueBindSparse"));
594 if (UNLIKELY(!vtbl.QueueBindSparse)) {
595 ALOGE("missing device proc: %s", "vkQueueBindSparse");
Jesse Hall04f4f472015-08-16 19:51:04 -0700596 success = false;
597 }
598 vtbl.CreateFence = reinterpret_cast<PFN_vkCreateFence>(get_proc_addr(device, "vkCreateFence"));
599 if (UNLIKELY(!vtbl.CreateFence)) {
600 ALOGE("missing device proc: %s", "vkCreateFence");
601 success = false;
602 }
603 vtbl.DestroyFence = reinterpret_cast<PFN_vkDestroyFence>(get_proc_addr(device, "vkDestroyFence"));
604 if (UNLIKELY(!vtbl.DestroyFence)) {
605 ALOGE("missing device proc: %s", "vkDestroyFence");
606 success = false;
607 }
608 vtbl.ResetFences = reinterpret_cast<PFN_vkResetFences>(get_proc_addr(device, "vkResetFences"));
609 if (UNLIKELY(!vtbl.ResetFences)) {
610 ALOGE("missing device proc: %s", "vkResetFences");
611 success = false;
612 }
613 vtbl.GetFenceStatus = reinterpret_cast<PFN_vkGetFenceStatus>(get_proc_addr(device, "vkGetFenceStatus"));
614 if (UNLIKELY(!vtbl.GetFenceStatus)) {
615 ALOGE("missing device proc: %s", "vkGetFenceStatus");
616 success = false;
617 }
618 vtbl.WaitForFences = reinterpret_cast<PFN_vkWaitForFences>(get_proc_addr(device, "vkWaitForFences"));
619 if (UNLIKELY(!vtbl.WaitForFences)) {
620 ALOGE("missing device proc: %s", "vkWaitForFences");
621 success = false;
622 }
623 vtbl.CreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(get_proc_addr(device, "vkCreateSemaphore"));
624 if (UNLIKELY(!vtbl.CreateSemaphore)) {
625 ALOGE("missing device proc: %s", "vkCreateSemaphore");
626 success = false;
627 }
628 vtbl.DestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(get_proc_addr(device, "vkDestroySemaphore"));
629 if (UNLIKELY(!vtbl.DestroySemaphore)) {
630 ALOGE("missing device proc: %s", "vkDestroySemaphore");
631 success = false;
632 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700633 vtbl.CreateEvent = reinterpret_cast<PFN_vkCreateEvent>(get_proc_addr(device, "vkCreateEvent"));
634 if (UNLIKELY(!vtbl.CreateEvent)) {
635 ALOGE("missing device proc: %s", "vkCreateEvent");
636 success = false;
637 }
638 vtbl.DestroyEvent = reinterpret_cast<PFN_vkDestroyEvent>(get_proc_addr(device, "vkDestroyEvent"));
639 if (UNLIKELY(!vtbl.DestroyEvent)) {
640 ALOGE("missing device proc: %s", "vkDestroyEvent");
641 success = false;
642 }
643 vtbl.GetEventStatus = reinterpret_cast<PFN_vkGetEventStatus>(get_proc_addr(device, "vkGetEventStatus"));
644 if (UNLIKELY(!vtbl.GetEventStatus)) {
645 ALOGE("missing device proc: %s", "vkGetEventStatus");
646 success = false;
647 }
648 vtbl.SetEvent = reinterpret_cast<PFN_vkSetEvent>(get_proc_addr(device, "vkSetEvent"));
649 if (UNLIKELY(!vtbl.SetEvent)) {
650 ALOGE("missing device proc: %s", "vkSetEvent");
651 success = false;
652 }
653 vtbl.ResetEvent = reinterpret_cast<PFN_vkResetEvent>(get_proc_addr(device, "vkResetEvent"));
654 if (UNLIKELY(!vtbl.ResetEvent)) {
655 ALOGE("missing device proc: %s", "vkResetEvent");
656 success = false;
657 }
658 vtbl.CreateQueryPool = reinterpret_cast<PFN_vkCreateQueryPool>(get_proc_addr(device, "vkCreateQueryPool"));
659 if (UNLIKELY(!vtbl.CreateQueryPool)) {
660 ALOGE("missing device proc: %s", "vkCreateQueryPool");
661 success = false;
662 }
663 vtbl.DestroyQueryPool = reinterpret_cast<PFN_vkDestroyQueryPool>(get_proc_addr(device, "vkDestroyQueryPool"));
664 if (UNLIKELY(!vtbl.DestroyQueryPool)) {
665 ALOGE("missing device proc: %s", "vkDestroyQueryPool");
666 success = false;
667 }
668 vtbl.GetQueryPoolResults = reinterpret_cast<PFN_vkGetQueryPoolResults>(get_proc_addr(device, "vkGetQueryPoolResults"));
669 if (UNLIKELY(!vtbl.GetQueryPoolResults)) {
670 ALOGE("missing device proc: %s", "vkGetQueryPoolResults");
671 success = false;
672 }
673 vtbl.CreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(get_proc_addr(device, "vkCreateBuffer"));
674 if (UNLIKELY(!vtbl.CreateBuffer)) {
675 ALOGE("missing device proc: %s", "vkCreateBuffer");
676 success = false;
677 }
678 vtbl.DestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(get_proc_addr(device, "vkDestroyBuffer"));
679 if (UNLIKELY(!vtbl.DestroyBuffer)) {
680 ALOGE("missing device proc: %s", "vkDestroyBuffer");
681 success = false;
682 }
683 vtbl.CreateBufferView = reinterpret_cast<PFN_vkCreateBufferView>(get_proc_addr(device, "vkCreateBufferView"));
684 if (UNLIKELY(!vtbl.CreateBufferView)) {
685 ALOGE("missing device proc: %s", "vkCreateBufferView");
686 success = false;
687 }
688 vtbl.DestroyBufferView = reinterpret_cast<PFN_vkDestroyBufferView>(get_proc_addr(device, "vkDestroyBufferView"));
689 if (UNLIKELY(!vtbl.DestroyBufferView)) {
690 ALOGE("missing device proc: %s", "vkDestroyBufferView");
691 success = false;
692 }
693 vtbl.CreateImage = reinterpret_cast<PFN_vkCreateImage>(get_proc_addr(device, "vkCreateImage"));
694 if (UNLIKELY(!vtbl.CreateImage)) {
695 ALOGE("missing device proc: %s", "vkCreateImage");
696 success = false;
697 }
698 vtbl.DestroyImage = reinterpret_cast<PFN_vkDestroyImage>(get_proc_addr(device, "vkDestroyImage"));
699 if (UNLIKELY(!vtbl.DestroyImage)) {
700 ALOGE("missing device proc: %s", "vkDestroyImage");
701 success = false;
702 }
703 vtbl.GetImageSubresourceLayout = reinterpret_cast<PFN_vkGetImageSubresourceLayout>(get_proc_addr(device, "vkGetImageSubresourceLayout"));
704 if (UNLIKELY(!vtbl.GetImageSubresourceLayout)) {
705 ALOGE("missing device proc: %s", "vkGetImageSubresourceLayout");
706 success = false;
707 }
708 vtbl.CreateImageView = reinterpret_cast<PFN_vkCreateImageView>(get_proc_addr(device, "vkCreateImageView"));
709 if (UNLIKELY(!vtbl.CreateImageView)) {
710 ALOGE("missing device proc: %s", "vkCreateImageView");
711 success = false;
712 }
713 vtbl.DestroyImageView = reinterpret_cast<PFN_vkDestroyImageView>(get_proc_addr(device, "vkDestroyImageView"));
714 if (UNLIKELY(!vtbl.DestroyImageView)) {
715 ALOGE("missing device proc: %s", "vkDestroyImageView");
716 success = false;
717 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700718 vtbl.CreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(get_proc_addr(device, "vkCreateShaderModule"));
719 if (UNLIKELY(!vtbl.CreateShaderModule)) {
720 ALOGE("missing device proc: %s", "vkCreateShaderModule");
721 success = false;
722 }
723 vtbl.DestroyShaderModule = reinterpret_cast<PFN_vkDestroyShaderModule>(get_proc_addr(device, "vkDestroyShaderModule"));
724 if (UNLIKELY(!vtbl.DestroyShaderModule)) {
725 ALOGE("missing device proc: %s", "vkDestroyShaderModule");
726 success = false;
727 }
728 vtbl.CreateShader = reinterpret_cast<PFN_vkCreateShader>(get_proc_addr(device, "vkCreateShader"));
729 if (UNLIKELY(!vtbl.CreateShader)) {
730 ALOGE("missing device proc: %s", "vkCreateShader");
731 success = false;
732 }
733 vtbl.DestroyShader = reinterpret_cast<PFN_vkDestroyShader>(get_proc_addr(device, "vkDestroyShader"));
734 if (UNLIKELY(!vtbl.DestroyShader)) {
735 ALOGE("missing device proc: %s", "vkDestroyShader");
736 success = false;
737 }
738 vtbl.CreatePipelineCache = reinterpret_cast<PFN_vkCreatePipelineCache>(get_proc_addr(device, "vkCreatePipelineCache"));
739 if (UNLIKELY(!vtbl.CreatePipelineCache)) {
740 ALOGE("missing device proc: %s", "vkCreatePipelineCache");
741 success = false;
742 }
743 vtbl.DestroyPipelineCache = reinterpret_cast<PFN_vkDestroyPipelineCache>(get_proc_addr(device, "vkDestroyPipelineCache"));
744 if (UNLIKELY(!vtbl.DestroyPipelineCache)) {
745 ALOGE("missing device proc: %s", "vkDestroyPipelineCache");
746 success = false;
747 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700748 vtbl.GetPipelineCacheData = reinterpret_cast<PFN_vkGetPipelineCacheData>(get_proc_addr(device, "vkGetPipelineCacheData"));
749 if (UNLIKELY(!vtbl.GetPipelineCacheData)) {
750 ALOGE("missing device proc: %s", "vkGetPipelineCacheData");
751 success = false;
752 }
753 vtbl.MergePipelineCaches = reinterpret_cast<PFN_vkMergePipelineCaches>(get_proc_addr(device, "vkMergePipelineCaches"));
754 if (UNLIKELY(!vtbl.MergePipelineCaches)) {
755 ALOGE("missing device proc: %s", "vkMergePipelineCaches");
756 success = false;
757 }
758 vtbl.CreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(get_proc_addr(device, "vkCreateGraphicsPipelines"));
759 if (UNLIKELY(!vtbl.CreateGraphicsPipelines)) {
760 ALOGE("missing device proc: %s", "vkCreateGraphicsPipelines");
761 success = false;
762 }
763 vtbl.CreateComputePipelines = reinterpret_cast<PFN_vkCreateComputePipelines>(get_proc_addr(device, "vkCreateComputePipelines"));
764 if (UNLIKELY(!vtbl.CreateComputePipelines)) {
765 ALOGE("missing device proc: %s", "vkCreateComputePipelines");
766 success = false;
767 }
768 vtbl.DestroyPipeline = reinterpret_cast<PFN_vkDestroyPipeline>(get_proc_addr(device, "vkDestroyPipeline"));
769 if (UNLIKELY(!vtbl.DestroyPipeline)) {
770 ALOGE("missing device proc: %s", "vkDestroyPipeline");
771 success = false;
772 }
773 vtbl.CreatePipelineLayout = reinterpret_cast<PFN_vkCreatePipelineLayout>(get_proc_addr(device, "vkCreatePipelineLayout"));
774 if (UNLIKELY(!vtbl.CreatePipelineLayout)) {
775 ALOGE("missing device proc: %s", "vkCreatePipelineLayout");
776 success = false;
777 }
778 vtbl.DestroyPipelineLayout = reinterpret_cast<PFN_vkDestroyPipelineLayout>(get_proc_addr(device, "vkDestroyPipelineLayout"));
779 if (UNLIKELY(!vtbl.DestroyPipelineLayout)) {
780 ALOGE("missing device proc: %s", "vkDestroyPipelineLayout");
781 success = false;
782 }
783 vtbl.CreateSampler = reinterpret_cast<PFN_vkCreateSampler>(get_proc_addr(device, "vkCreateSampler"));
784 if (UNLIKELY(!vtbl.CreateSampler)) {
785 ALOGE("missing device proc: %s", "vkCreateSampler");
786 success = false;
787 }
788 vtbl.DestroySampler = reinterpret_cast<PFN_vkDestroySampler>(get_proc_addr(device, "vkDestroySampler"));
789 if (UNLIKELY(!vtbl.DestroySampler)) {
790 ALOGE("missing device proc: %s", "vkDestroySampler");
791 success = false;
792 }
793 vtbl.CreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(get_proc_addr(device, "vkCreateDescriptorSetLayout"));
794 if (UNLIKELY(!vtbl.CreateDescriptorSetLayout)) {
795 ALOGE("missing device proc: %s", "vkCreateDescriptorSetLayout");
796 success = false;
797 }
798 vtbl.DestroyDescriptorSetLayout = reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>(get_proc_addr(device, "vkDestroyDescriptorSetLayout"));
799 if (UNLIKELY(!vtbl.DestroyDescriptorSetLayout)) {
800 ALOGE("missing device proc: %s", "vkDestroyDescriptorSetLayout");
801 success = false;
802 }
803 vtbl.CreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(get_proc_addr(device, "vkCreateDescriptorPool"));
804 if (UNLIKELY(!vtbl.CreateDescriptorPool)) {
805 ALOGE("missing device proc: %s", "vkCreateDescriptorPool");
806 success = false;
807 }
808 vtbl.DestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>(get_proc_addr(device, "vkDestroyDescriptorPool"));
809 if (UNLIKELY(!vtbl.DestroyDescriptorPool)) {
810 ALOGE("missing device proc: %s", "vkDestroyDescriptorPool");
811 success = false;
812 }
813 vtbl.ResetDescriptorPool = reinterpret_cast<PFN_vkResetDescriptorPool>(get_proc_addr(device, "vkResetDescriptorPool"));
814 if (UNLIKELY(!vtbl.ResetDescriptorPool)) {
815 ALOGE("missing device proc: %s", "vkResetDescriptorPool");
816 success = false;
817 }
818 vtbl.AllocDescriptorSets = reinterpret_cast<PFN_vkAllocDescriptorSets>(get_proc_addr(device, "vkAllocDescriptorSets"));
819 if (UNLIKELY(!vtbl.AllocDescriptorSets)) {
820 ALOGE("missing device proc: %s", "vkAllocDescriptorSets");
821 success = false;
822 }
823 vtbl.FreeDescriptorSets = reinterpret_cast<PFN_vkFreeDescriptorSets>(get_proc_addr(device, "vkFreeDescriptorSets"));
824 if (UNLIKELY(!vtbl.FreeDescriptorSets)) {
825 ALOGE("missing device proc: %s", "vkFreeDescriptorSets");
826 success = false;
827 }
828 vtbl.UpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(get_proc_addr(device, "vkUpdateDescriptorSets"));
829 if (UNLIKELY(!vtbl.UpdateDescriptorSets)) {
830 ALOGE("missing device proc: %s", "vkUpdateDescriptorSets");
831 success = false;
832 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700833 vtbl.CreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(get_proc_addr(device, "vkCreateFramebuffer"));
834 if (UNLIKELY(!vtbl.CreateFramebuffer)) {
835 ALOGE("missing device proc: %s", "vkCreateFramebuffer");
836 success = false;
837 }
838 vtbl.DestroyFramebuffer = reinterpret_cast<PFN_vkDestroyFramebuffer>(get_proc_addr(device, "vkDestroyFramebuffer"));
839 if (UNLIKELY(!vtbl.DestroyFramebuffer)) {
840 ALOGE("missing device proc: %s", "vkDestroyFramebuffer");
841 success = false;
842 }
843 vtbl.CreateRenderPass = reinterpret_cast<PFN_vkCreateRenderPass>(get_proc_addr(device, "vkCreateRenderPass"));
844 if (UNLIKELY(!vtbl.CreateRenderPass)) {
845 ALOGE("missing device proc: %s", "vkCreateRenderPass");
846 success = false;
847 }
848 vtbl.DestroyRenderPass = reinterpret_cast<PFN_vkDestroyRenderPass>(get_proc_addr(device, "vkDestroyRenderPass"));
849 if (UNLIKELY(!vtbl.DestroyRenderPass)) {
850 ALOGE("missing device proc: %s", "vkDestroyRenderPass");
851 success = false;
852 }
853 vtbl.GetRenderAreaGranularity = reinterpret_cast<PFN_vkGetRenderAreaGranularity>(get_proc_addr(device, "vkGetRenderAreaGranularity"));
854 if (UNLIKELY(!vtbl.GetRenderAreaGranularity)) {
855 ALOGE("missing device proc: %s", "vkGetRenderAreaGranularity");
856 success = false;
857 }
858 vtbl.CreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(get_proc_addr(device, "vkCreateCommandPool"));
859 if (UNLIKELY(!vtbl.CreateCommandPool)) {
860 ALOGE("missing device proc: %s", "vkCreateCommandPool");
861 success = false;
862 }
863 vtbl.DestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(get_proc_addr(device, "vkDestroyCommandPool"));
864 if (UNLIKELY(!vtbl.DestroyCommandPool)) {
865 ALOGE("missing device proc: %s", "vkDestroyCommandPool");
866 success = false;
867 }
868 vtbl.ResetCommandPool = reinterpret_cast<PFN_vkResetCommandPool>(get_proc_addr(device, "vkResetCommandPool"));
869 if (UNLIKELY(!vtbl.ResetCommandPool)) {
870 ALOGE("missing device proc: %s", "vkResetCommandPool");
871 success = false;
872 }
Jesse Hallfbf97b02015-11-20 14:17:03 -0800873 vtbl.AllocCommandBuffers = reinterpret_cast<PFN_vkAllocCommandBuffers>(get_proc_addr(device, "vkAllocCommandBuffers"));
874 if (UNLIKELY(!vtbl.AllocCommandBuffers)) {
875 ALOGE("missing device proc: %s", "vkAllocCommandBuffers");
Jesse Hall04f4f472015-08-16 19:51:04 -0700876 success = false;
877 }
Jesse Hallfbf97b02015-11-20 14:17:03 -0800878 vtbl.FreeCommandBuffers = reinterpret_cast<PFN_vkFreeCommandBuffers>(get_proc_addr(device, "vkFreeCommandBuffers"));
879 if (UNLIKELY(!vtbl.FreeCommandBuffers)) {
880 ALOGE("missing device proc: %s", "vkFreeCommandBuffers");
Jesse Hall04f4f472015-08-16 19:51:04 -0700881 success = false;
882 }
883 vtbl.BeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(get_proc_addr(device, "vkBeginCommandBuffer"));
884 if (UNLIKELY(!vtbl.BeginCommandBuffer)) {
885 ALOGE("missing device proc: %s", "vkBeginCommandBuffer");
886 success = false;
887 }
888 vtbl.EndCommandBuffer = reinterpret_cast<PFN_vkEndCommandBuffer>(get_proc_addr(device, "vkEndCommandBuffer"));
889 if (UNLIKELY(!vtbl.EndCommandBuffer)) {
890 ALOGE("missing device proc: %s", "vkEndCommandBuffer");
891 success = false;
892 }
893 vtbl.ResetCommandBuffer = reinterpret_cast<PFN_vkResetCommandBuffer>(get_proc_addr(device, "vkResetCommandBuffer"));
894 if (UNLIKELY(!vtbl.ResetCommandBuffer)) {
895 ALOGE("missing device proc: %s", "vkResetCommandBuffer");
896 success = false;
897 }
898 vtbl.CmdBindPipeline = reinterpret_cast<PFN_vkCmdBindPipeline>(get_proc_addr(device, "vkCmdBindPipeline"));
899 if (UNLIKELY(!vtbl.CmdBindPipeline)) {
900 ALOGE("missing device proc: %s", "vkCmdBindPipeline");
901 success = false;
902 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700903 vtbl.CmdSetViewport = reinterpret_cast<PFN_vkCmdSetViewport>(get_proc_addr(device, "vkCmdSetViewport"));
904 if (UNLIKELY(!vtbl.CmdSetViewport)) {
905 ALOGE("missing device proc: %s", "vkCmdSetViewport");
Jesse Hall04f4f472015-08-16 19:51:04 -0700906 success = false;
907 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700908 vtbl.CmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(get_proc_addr(device, "vkCmdSetScissor"));
909 if (UNLIKELY(!vtbl.CmdSetScissor)) {
910 ALOGE("missing device proc: %s", "vkCmdSetScissor");
Jesse Hall04f4f472015-08-16 19:51:04 -0700911 success = false;
912 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700913 vtbl.CmdSetLineWidth = reinterpret_cast<PFN_vkCmdSetLineWidth>(get_proc_addr(device, "vkCmdSetLineWidth"));
914 if (UNLIKELY(!vtbl.CmdSetLineWidth)) {
915 ALOGE("missing device proc: %s", "vkCmdSetLineWidth");
Jesse Hall04f4f472015-08-16 19:51:04 -0700916 success = false;
917 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700918 vtbl.CmdSetDepthBias = reinterpret_cast<PFN_vkCmdSetDepthBias>(get_proc_addr(device, "vkCmdSetDepthBias"));
919 if (UNLIKELY(!vtbl.CmdSetDepthBias)) {
920 ALOGE("missing device proc: %s", "vkCmdSetDepthBias");
921 success = false;
922 }
923 vtbl.CmdSetBlendConstants = reinterpret_cast<PFN_vkCmdSetBlendConstants>(get_proc_addr(device, "vkCmdSetBlendConstants"));
924 if (UNLIKELY(!vtbl.CmdSetBlendConstants)) {
925 ALOGE("missing device proc: %s", "vkCmdSetBlendConstants");
926 success = false;
927 }
928 vtbl.CmdSetDepthBounds = reinterpret_cast<PFN_vkCmdSetDepthBounds>(get_proc_addr(device, "vkCmdSetDepthBounds"));
929 if (UNLIKELY(!vtbl.CmdSetDepthBounds)) {
930 ALOGE("missing device proc: %s", "vkCmdSetDepthBounds");
931 success = false;
932 }
933 vtbl.CmdSetStencilCompareMask = reinterpret_cast<PFN_vkCmdSetStencilCompareMask>(get_proc_addr(device, "vkCmdSetStencilCompareMask"));
934 if (UNLIKELY(!vtbl.CmdSetStencilCompareMask)) {
935 ALOGE("missing device proc: %s", "vkCmdSetStencilCompareMask");
936 success = false;
937 }
938 vtbl.CmdSetStencilWriteMask = reinterpret_cast<PFN_vkCmdSetStencilWriteMask>(get_proc_addr(device, "vkCmdSetStencilWriteMask"));
939 if (UNLIKELY(!vtbl.CmdSetStencilWriteMask)) {
940 ALOGE("missing device proc: %s", "vkCmdSetStencilWriteMask");
941 success = false;
942 }
943 vtbl.CmdSetStencilReference = reinterpret_cast<PFN_vkCmdSetStencilReference>(get_proc_addr(device, "vkCmdSetStencilReference"));
944 if (UNLIKELY(!vtbl.CmdSetStencilReference)) {
945 ALOGE("missing device proc: %s", "vkCmdSetStencilReference");
Jesse Hall04f4f472015-08-16 19:51:04 -0700946 success = false;
947 }
948 vtbl.CmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>(get_proc_addr(device, "vkCmdBindDescriptorSets"));
949 if (UNLIKELY(!vtbl.CmdBindDescriptorSets)) {
950 ALOGE("missing device proc: %s", "vkCmdBindDescriptorSets");
951 success = false;
952 }
953 vtbl.CmdBindIndexBuffer = reinterpret_cast<PFN_vkCmdBindIndexBuffer>(get_proc_addr(device, "vkCmdBindIndexBuffer"));
954 if (UNLIKELY(!vtbl.CmdBindIndexBuffer)) {
955 ALOGE("missing device proc: %s", "vkCmdBindIndexBuffer");
956 success = false;
957 }
958 vtbl.CmdBindVertexBuffers = reinterpret_cast<PFN_vkCmdBindVertexBuffers>(get_proc_addr(device, "vkCmdBindVertexBuffers"));
959 if (UNLIKELY(!vtbl.CmdBindVertexBuffers)) {
960 ALOGE("missing device proc: %s", "vkCmdBindVertexBuffers");
961 success = false;
962 }
963 vtbl.CmdDraw = reinterpret_cast<PFN_vkCmdDraw>(get_proc_addr(device, "vkCmdDraw"));
964 if (UNLIKELY(!vtbl.CmdDraw)) {
965 ALOGE("missing device proc: %s", "vkCmdDraw");
966 success = false;
967 }
968 vtbl.CmdDrawIndexed = reinterpret_cast<PFN_vkCmdDrawIndexed>(get_proc_addr(device, "vkCmdDrawIndexed"));
969 if (UNLIKELY(!vtbl.CmdDrawIndexed)) {
970 ALOGE("missing device proc: %s", "vkCmdDrawIndexed");
971 success = false;
972 }
973 vtbl.CmdDrawIndirect = reinterpret_cast<PFN_vkCmdDrawIndirect>(get_proc_addr(device, "vkCmdDrawIndirect"));
974 if (UNLIKELY(!vtbl.CmdDrawIndirect)) {
975 ALOGE("missing device proc: %s", "vkCmdDrawIndirect");
976 success = false;
977 }
978 vtbl.CmdDrawIndexedIndirect = reinterpret_cast<PFN_vkCmdDrawIndexedIndirect>(get_proc_addr(device, "vkCmdDrawIndexedIndirect"));
979 if (UNLIKELY(!vtbl.CmdDrawIndexedIndirect)) {
980 ALOGE("missing device proc: %s", "vkCmdDrawIndexedIndirect");
981 success = false;
982 }
983 vtbl.CmdDispatch = reinterpret_cast<PFN_vkCmdDispatch>(get_proc_addr(device, "vkCmdDispatch"));
984 if (UNLIKELY(!vtbl.CmdDispatch)) {
985 ALOGE("missing device proc: %s", "vkCmdDispatch");
986 success = false;
987 }
988 vtbl.CmdDispatchIndirect = reinterpret_cast<PFN_vkCmdDispatchIndirect>(get_proc_addr(device, "vkCmdDispatchIndirect"));
989 if (UNLIKELY(!vtbl.CmdDispatchIndirect)) {
990 ALOGE("missing device proc: %s", "vkCmdDispatchIndirect");
991 success = false;
992 }
993 vtbl.CmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(get_proc_addr(device, "vkCmdCopyBuffer"));
994 if (UNLIKELY(!vtbl.CmdCopyBuffer)) {
995 ALOGE("missing device proc: %s", "vkCmdCopyBuffer");
996 success = false;
997 }
998 vtbl.CmdCopyImage = reinterpret_cast<PFN_vkCmdCopyImage>(get_proc_addr(device, "vkCmdCopyImage"));
999 if (UNLIKELY(!vtbl.CmdCopyImage)) {
1000 ALOGE("missing device proc: %s", "vkCmdCopyImage");
1001 success = false;
1002 }
1003 vtbl.CmdBlitImage = reinterpret_cast<PFN_vkCmdBlitImage>(get_proc_addr(device, "vkCmdBlitImage"));
1004 if (UNLIKELY(!vtbl.CmdBlitImage)) {
1005 ALOGE("missing device proc: %s", "vkCmdBlitImage");
1006 success = false;
1007 }
1008 vtbl.CmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(get_proc_addr(device, "vkCmdCopyBufferToImage"));
1009 if (UNLIKELY(!vtbl.CmdCopyBufferToImage)) {
1010 ALOGE("missing device proc: %s", "vkCmdCopyBufferToImage");
1011 success = false;
1012 }
1013 vtbl.CmdCopyImageToBuffer = reinterpret_cast<PFN_vkCmdCopyImageToBuffer>(get_proc_addr(device, "vkCmdCopyImageToBuffer"));
1014 if (UNLIKELY(!vtbl.CmdCopyImageToBuffer)) {
1015 ALOGE("missing device proc: %s", "vkCmdCopyImageToBuffer");
1016 success = false;
1017 }
1018 vtbl.CmdUpdateBuffer = reinterpret_cast<PFN_vkCmdUpdateBuffer>(get_proc_addr(device, "vkCmdUpdateBuffer"));
1019 if (UNLIKELY(!vtbl.CmdUpdateBuffer)) {
1020 ALOGE("missing device proc: %s", "vkCmdUpdateBuffer");
1021 success = false;
1022 }
1023 vtbl.CmdFillBuffer = reinterpret_cast<PFN_vkCmdFillBuffer>(get_proc_addr(device, "vkCmdFillBuffer"));
1024 if (UNLIKELY(!vtbl.CmdFillBuffer)) {
1025 ALOGE("missing device proc: %s", "vkCmdFillBuffer");
1026 success = false;
1027 }
1028 vtbl.CmdClearColorImage = reinterpret_cast<PFN_vkCmdClearColorImage>(get_proc_addr(device, "vkCmdClearColorImage"));
1029 if (UNLIKELY(!vtbl.CmdClearColorImage)) {
1030 ALOGE("missing device proc: %s", "vkCmdClearColorImage");
1031 success = false;
1032 }
1033 vtbl.CmdClearDepthStencilImage = reinterpret_cast<PFN_vkCmdClearDepthStencilImage>(get_proc_addr(device, "vkCmdClearDepthStencilImage"));
1034 if (UNLIKELY(!vtbl.CmdClearDepthStencilImage)) {
1035 ALOGE("missing device proc: %s", "vkCmdClearDepthStencilImage");
1036 success = false;
1037 }
Jesse Hallae38f732015-11-19 21:32:50 -08001038 vtbl.CmdClearAttachments = reinterpret_cast<PFN_vkCmdClearAttachments>(get_proc_addr(device, "vkCmdClearAttachments"));
1039 if (UNLIKELY(!vtbl.CmdClearAttachments)) {
1040 ALOGE("missing device proc: %s", "vkCmdClearAttachments");
Jesse Hall04f4f472015-08-16 19:51:04 -07001041 success = false;
1042 }
1043 vtbl.CmdResolveImage = reinterpret_cast<PFN_vkCmdResolveImage>(get_proc_addr(device, "vkCmdResolveImage"));
1044 if (UNLIKELY(!vtbl.CmdResolveImage)) {
1045 ALOGE("missing device proc: %s", "vkCmdResolveImage");
1046 success = false;
1047 }
1048 vtbl.CmdSetEvent = reinterpret_cast<PFN_vkCmdSetEvent>(get_proc_addr(device, "vkCmdSetEvent"));
1049 if (UNLIKELY(!vtbl.CmdSetEvent)) {
1050 ALOGE("missing device proc: %s", "vkCmdSetEvent");
1051 success = false;
1052 }
1053 vtbl.CmdResetEvent = reinterpret_cast<PFN_vkCmdResetEvent>(get_proc_addr(device, "vkCmdResetEvent"));
1054 if (UNLIKELY(!vtbl.CmdResetEvent)) {
1055 ALOGE("missing device proc: %s", "vkCmdResetEvent");
1056 success = false;
1057 }
1058 vtbl.CmdWaitEvents = reinterpret_cast<PFN_vkCmdWaitEvents>(get_proc_addr(device, "vkCmdWaitEvents"));
1059 if (UNLIKELY(!vtbl.CmdWaitEvents)) {
1060 ALOGE("missing device proc: %s", "vkCmdWaitEvents");
1061 success = false;
1062 }
1063 vtbl.CmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(get_proc_addr(device, "vkCmdPipelineBarrier"));
1064 if (UNLIKELY(!vtbl.CmdPipelineBarrier)) {
1065 ALOGE("missing device proc: %s", "vkCmdPipelineBarrier");
1066 success = false;
1067 }
1068 vtbl.CmdBeginQuery = reinterpret_cast<PFN_vkCmdBeginQuery>(get_proc_addr(device, "vkCmdBeginQuery"));
1069 if (UNLIKELY(!vtbl.CmdBeginQuery)) {
1070 ALOGE("missing device proc: %s", "vkCmdBeginQuery");
1071 success = false;
1072 }
1073 vtbl.CmdEndQuery = reinterpret_cast<PFN_vkCmdEndQuery>(get_proc_addr(device, "vkCmdEndQuery"));
1074 if (UNLIKELY(!vtbl.CmdEndQuery)) {
1075 ALOGE("missing device proc: %s", "vkCmdEndQuery");
1076 success = false;
1077 }
1078 vtbl.CmdResetQueryPool = reinterpret_cast<PFN_vkCmdResetQueryPool>(get_proc_addr(device, "vkCmdResetQueryPool"));
1079 if (UNLIKELY(!vtbl.CmdResetQueryPool)) {
1080 ALOGE("missing device proc: %s", "vkCmdResetQueryPool");
1081 success = false;
1082 }
1083 vtbl.CmdWriteTimestamp = reinterpret_cast<PFN_vkCmdWriteTimestamp>(get_proc_addr(device, "vkCmdWriteTimestamp"));
1084 if (UNLIKELY(!vtbl.CmdWriteTimestamp)) {
1085 ALOGE("missing device proc: %s", "vkCmdWriteTimestamp");
1086 success = false;
1087 }
1088 vtbl.CmdCopyQueryPoolResults = reinterpret_cast<PFN_vkCmdCopyQueryPoolResults>(get_proc_addr(device, "vkCmdCopyQueryPoolResults"));
1089 if (UNLIKELY(!vtbl.CmdCopyQueryPoolResults)) {
1090 ALOGE("missing device proc: %s", "vkCmdCopyQueryPoolResults");
1091 success = false;
1092 }
1093 vtbl.CmdPushConstants = reinterpret_cast<PFN_vkCmdPushConstants>(get_proc_addr(device, "vkCmdPushConstants"));
1094 if (UNLIKELY(!vtbl.CmdPushConstants)) {
1095 ALOGE("missing device proc: %s", "vkCmdPushConstants");
1096 success = false;
1097 }
1098 vtbl.CmdBeginRenderPass = reinterpret_cast<PFN_vkCmdBeginRenderPass>(get_proc_addr(device, "vkCmdBeginRenderPass"));
1099 if (UNLIKELY(!vtbl.CmdBeginRenderPass)) {
1100 ALOGE("missing device proc: %s", "vkCmdBeginRenderPass");
1101 success = false;
1102 }
1103 vtbl.CmdNextSubpass = reinterpret_cast<PFN_vkCmdNextSubpass>(get_proc_addr(device, "vkCmdNextSubpass"));
1104 if (UNLIKELY(!vtbl.CmdNextSubpass)) {
1105 ALOGE("missing device proc: %s", "vkCmdNextSubpass");
1106 success = false;
1107 }
1108 vtbl.CmdEndRenderPass = reinterpret_cast<PFN_vkCmdEndRenderPass>(get_proc_addr(device, "vkCmdEndRenderPass"));
1109 if (UNLIKELY(!vtbl.CmdEndRenderPass)) {
1110 ALOGE("missing device proc: %s", "vkCmdEndRenderPass");
1111 success = false;
1112 }
1113 vtbl.CmdExecuteCommands = reinterpret_cast<PFN_vkCmdExecuteCommands>(get_proc_addr(device, "vkCmdExecuteCommands"));
1114 if (UNLIKELY(!vtbl.CmdExecuteCommands)) {
1115 ALOGE("missing device proc: %s", "vkCmdExecuteCommands");
1116 success = false;
1117 }
Michael Lentine88594d72015-11-12 12:49:45 -08001118 vtbl.CreateSwapchainKHR = reinterpret_cast<PFN_vkCreateSwapchainKHR>(get_proc_addr(device, "vkCreateSwapchainKHR"));
1119 if (UNLIKELY(!vtbl.CreateSwapchainKHR)) {
1120 ALOGE("missing device proc: %s", "vkCreateSwapchainKHR");
1121 success = false;
1122 }
1123 vtbl.DestroySwapchainKHR = reinterpret_cast<PFN_vkDestroySwapchainKHR>(get_proc_addr(device, "vkDestroySwapchainKHR"));
1124 if (UNLIKELY(!vtbl.DestroySwapchainKHR)) {
1125 ALOGE("missing device proc: %s", "vkDestroySwapchainKHR");
1126 success = false;
1127 }
1128 vtbl.GetSwapchainImagesKHR = reinterpret_cast<PFN_vkGetSwapchainImagesKHR>(get_proc_addr(device, "vkGetSwapchainImagesKHR"));
1129 if (UNLIKELY(!vtbl.GetSwapchainImagesKHR)) {
1130 ALOGE("missing device proc: %s", "vkGetSwapchainImagesKHR");
1131 success = false;
1132 }
1133 vtbl.AcquireNextImageKHR = reinterpret_cast<PFN_vkAcquireNextImageKHR>(get_proc_addr(device, "vkAcquireNextImageKHR"));
1134 if (UNLIKELY(!vtbl.AcquireNextImageKHR)) {
1135 ALOGE("missing device proc: %s", "vkAcquireNextImageKHR");
1136 success = false;
1137 }
1138 vtbl.QueuePresentKHR = reinterpret_cast<PFN_vkQueuePresentKHR>(get_proc_addr(device, "vkQueuePresentKHR"));
1139 if (UNLIKELY(!vtbl.QueuePresentKHR)) {
1140 ALOGE("missing device proc: %s", "vkQueuePresentKHR");
1141 success = false;
1142 }
Jesse Hall70f93352015-11-04 09:41:31 -08001143 vtbl.GetSwapchainGrallocUsageANDROID = reinterpret_cast<PFN_vkGetSwapchainGrallocUsageANDROID>(get_proc_addr(device, "vkGetSwapchainGrallocUsageANDROID"));
1144 if (UNLIKELY(!vtbl.GetSwapchainGrallocUsageANDROID)) {
1145 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1146 // ALOGE("missing device proc: %s", "vkGetSwapchainGrallocUsageANDROID");
1147 ALOGW("missing device proc: %s", "vkGetSwapchainGrallocUsageANDROID");
1148 // success = false;
1149 }
Jesse Hallab9aeef2015-11-04 10:56:20 -08001150 vtbl.AcquireImageANDROID = reinterpret_cast<PFN_vkAcquireImageANDROID>(get_proc_addr(device, "vkAcquireImageANDROID"));
1151 if (UNLIKELY(!vtbl.AcquireImageANDROID)) {
1152 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1153 // ALOGE("missing device proc: %s", "vkImportNativeFenceANDROID");
1154 ALOGW("missing device proc: %s", "vkAcquireImageANDROID");
1155 // success = false;
Jesse Hallb1352bc2015-09-04 16:12:33 -07001156 }
Jesse Hallab9aeef2015-11-04 10:56:20 -08001157 vtbl.QueueSignalReleaseImageANDROID = reinterpret_cast<PFN_vkQueueSignalReleaseImageANDROID>(get_proc_addr(device, "vkQueueSignalReleaseImageANDROID"));
1158 if (UNLIKELY(!vtbl.QueueSignalReleaseImageANDROID)) {
1159 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1160 // ALOGE("missing device proc: %s", "vkQueueSignalReleaseImageANDROID");
1161 ALOGW("missing device proc: %s", "vkQueueSignalReleaseImageANDROID");
1162 // success = false;
1163 }
1164 // TODO(jessehall): these are deprecated; remove when drivers have been updated
1165 vtbl.ImportNativeFenceANDROID = reinterpret_cast<PFN_vkImportNativeFenceANDROID>(get_proc_addr(device, "vkImportNativeFenceANDROID"));
Jesse Hallb1352bc2015-09-04 16:12:33 -07001166 vtbl.QueueSignalNativeFenceANDROID = reinterpret_cast<PFN_vkQueueSignalNativeFenceANDROID>(get_proc_addr(device, "vkQueueSignalNativeFenceANDROID"));
Jesse Hallab9aeef2015-11-04 10:56:20 -08001167 if (!((!vtbl.AcquireImageANDROID && !vtbl.QueueSignalReleaseImageANDROID && vtbl.ImportNativeFenceANDROID && vtbl.QueueSignalNativeFenceANDROID) ||
1168 (vtbl.AcquireImageANDROID && vtbl.QueueSignalReleaseImageANDROID && !vtbl.ImportNativeFenceANDROID && !vtbl.QueueSignalNativeFenceANDROID))) {
1169 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 -07001170 success = false;
1171 }
Jesse Hall04f4f472015-08-16 19:51:04 -07001172 // clang-format on
1173 return success;
1174}
1175
1176} // namespace vulkan