blob: 4f37c9c6bef6bba79f0d21fdb3f490675ec75f2d [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)},
84 {"vkCmdClearColorAttachment", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearColorAttachment)},
85 {"vkCmdClearColorImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearColorImage)},
86 {"vkCmdClearDepthStencilAttachment", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearDepthStencilAttachment)},
87 {"vkCmdClearDepthStencilImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearDepthStencilImage)},
88 {"vkCmdCopyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBuffer)},
89 {"vkCmdCopyBufferToImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBufferToImage)},
90 {"vkCmdCopyImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyImage)},
91 {"vkCmdCopyImageToBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyImageToBuffer)},
92 {"vkCmdCopyQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyQueryPoolResults)},
93 {"vkCmdDispatch", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDispatch)},
94 {"vkCmdDispatchIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDispatchIndirect)},
95 {"vkCmdDraw", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDraw)},
96 {"vkCmdDrawIndexed", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndexed)},
97 {"vkCmdDrawIndexedIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndexedIndirect)},
98 {"vkCmdDrawIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndirect)},
99 {"vkCmdEndQuery", reinterpret_cast<PFN_vkVoidFunction>(vkCmdEndQuery)},
100 {"vkCmdEndRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdEndRenderPass)},
101 {"vkCmdExecuteCommands", reinterpret_cast<PFN_vkVoidFunction>(vkCmdExecuteCommands)},
102 {"vkCmdFillBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdFillBuffer)},
103 {"vkCmdNextSubpass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdNextSubpass)},
104 {"vkCmdPipelineBarrier", reinterpret_cast<PFN_vkVoidFunction>(vkCmdPipelineBarrier)},
105 {"vkCmdPushConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdPushConstants)},
106 {"vkCmdResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetEvent)},
107 {"vkCmdResetQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetQueryPool)},
108 {"vkCmdResolveImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResolveImage)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700109 {"vkCmdSetBlendConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetBlendConstants)},
110 {"vkCmdSetDepthBias", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBias)},
111 {"vkCmdSetDepthBounds", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBounds)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700112 {"vkCmdSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetEvent)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700113 {"vkCmdSetLineWidth", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetLineWidth)},
114 {"vkCmdSetScissor", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetScissor)},
115 {"vkCmdSetStencilCompareMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilCompareMask)},
116 {"vkCmdSetStencilReference", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilReference)},
117 {"vkCmdSetStencilWriteMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilWriteMask)},
118 {"vkCmdSetViewport", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetViewport)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700119 {"vkCmdUpdateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdUpdateBuffer)},
120 {"vkCmdWaitEvents", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWaitEvents)},
121 {"vkCmdWriteTimestamp", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWriteTimestamp)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700122 {"vkCreateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBuffer)},
123 {"vkCreateBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBufferView)},
124 {"vkCreateCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandBuffer)},
125 {"vkCreateCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandPool)},
126 {"vkCreateComputePipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateComputePipelines)},
127 {"vkCreateDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorPool)},
128 {"vkCreateDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorSetLayout)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700129 {"vkCreateEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCreateEvent)},
130 {"vkCreateFence", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFence)},
131 {"vkCreateFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFramebuffer)},
132 {"vkCreateGraphicsPipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateGraphicsPipelines)},
133 {"vkCreateImage", reinterpret_cast<PFN_vkVoidFunction>(vkCreateImage)},
134 {"vkCreateImageView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateImageView)},
135 {"vkCreatePipelineCache", reinterpret_cast<PFN_vkVoidFunction>(vkCreatePipelineCache)},
136 {"vkCreatePipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreatePipelineLayout)},
137 {"vkCreateQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateQueryPool)},
138 {"vkCreateRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCreateRenderPass)},
139 {"vkCreateSampler", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSampler)},
140 {"vkCreateSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSemaphore)},
141 {"vkCreateShader", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShader)},
142 {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800143 {"vkCreateSwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700144 {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBuffer)},
145 {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBufferView)},
146 {"vkDestroyCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandBuffer)},
147 {"vkDestroyCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandPool)},
148 {"vkDestroyDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorPool)},
149 {"vkDestroyDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorSetLayout)},
150 {"vkDestroyDevice", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDevice)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700151 {"vkDestroyEvent", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyEvent)},
152 {"vkDestroyFence", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFence)},
153 {"vkDestroyFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFramebuffer)},
154 {"vkDestroyImage", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyImage)},
155 {"vkDestroyImageView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyImageView)},
156 {"vkDestroyPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipeline)},
157 {"vkDestroyPipelineCache", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipelineCache)},
158 {"vkDestroyPipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipelineLayout)},
159 {"vkDestroyQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyQueryPool)},
160 {"vkDestroyRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyRenderPass)},
161 {"vkDestroySampler", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySampler)},
162 {"vkDestroySemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySemaphore)},
163 {"vkDestroyShader", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShader)},
164 {"vkDestroyShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800165 {"vkDestroySwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700166 {"vkDeviceWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkDeviceWaitIdle)},
167 {"vkEndCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkEndCommandBuffer)},
168 {"vkFlushMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkFlushMappedMemoryRanges)},
169 {"vkFreeDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkFreeDescriptorSets)},
170 {"vkFreeMemory", reinterpret_cast<PFN_vkVoidFunction>(vkFreeMemory)},
171 {"vkGetBufferMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetBufferMemoryRequirements)},
172 {"vkGetDeviceMemoryCommitment", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceMemoryCommitment)},
173 {"vkGetDeviceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceProcAddr)},
174 {"vkGetDeviceQueue", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceQueue)},
175 {"vkGetEventStatus", reinterpret_cast<PFN_vkVoidFunction>(vkGetEventStatus)},
176 {"vkGetFenceStatus", reinterpret_cast<PFN_vkVoidFunction>(vkGetFenceStatus)},
177 {"vkGetImageMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageMemoryRequirements)},
178 {"vkGetImageSparseMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSparseMemoryRequirements)},
179 {"vkGetImageSubresourceLayout", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSubresourceLayout)},
180 {"vkGetPipelineCacheData", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheData)},
181 {"vkGetPipelineCacheSize", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheSize)},
182 {"vkGetQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkGetQueryPoolResults)},
183 {"vkGetRenderAreaGranularity", reinterpret_cast<PFN_vkVoidFunction>(vkGetRenderAreaGranularity)},
Michael Lentine88594d72015-11-12 12:49:45 -0800184 {"vkGetSurfaceFormatsKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfaceFormatsKHR)},
185 {"vkGetSurfacePresentModesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfacePresentModesKHR)},
186 {"vkGetSurfacePropertiesKHR", reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfacePropertiesKHR)},
187 {"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)},
191 {"vkQueueBindSparseBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseBufferMemory)},
192 {"vkQueueBindSparseImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageMemory)},
193 {"vkQueueBindSparseImageOpaqueMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageOpaqueMemory)},
Michael Lentine88594d72015-11-12 12:49:45 -0800194 {"vkQueuePresentKHR", reinterpret_cast<PFN_vkVoidFunction>(vkQueuePresentKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700195 {"vkQueueSignalSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSignalSemaphore)},
196 {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSubmit)},
197 {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitIdle)},
198 {"vkQueueWaitSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitSemaphore)},
199 {"vkResetCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandBuffer)},
200 {"vkResetCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandPool)},
201 {"vkResetDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetDescriptorPool)},
202 {"vkResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkResetEvent)},
203 {"vkResetFences", reinterpret_cast<PFN_vkVoidFunction>(vkResetFences)},
204 {"vkSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkSetEvent)},
205 {"vkUnmapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkUnmapMemory)},
206 {"vkUpdateDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkUpdateDescriptorSets)},
207 {"vkWaitForFences", reinterpret_cast<PFN_vkVoidFunction>(vkWaitForFences)},
208 // clang-format on
209};
210
211const NameOffsetEntry kInstanceOffsetTbl[] = {
212 // clang-format off
213 {"vkCreateDevice", offsetof(InstanceVtbl, CreateDevice)},
214 {"vkDestroyInstance", offsetof(InstanceVtbl, DestroyInstance)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700215 {"vkEnumerateDeviceExtensionProperties", offsetof(InstanceVtbl, EnumerateDeviceExtensionProperties)},
216 {"vkEnumerateDeviceLayerProperties", offsetof(InstanceVtbl, EnumerateDeviceLayerProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700217 {"vkEnumeratePhysicalDevices", offsetof(InstanceVtbl, EnumeratePhysicalDevices)},
218 {"vkGetInstanceProcAddr", offsetof(InstanceVtbl, GetInstanceProcAddr)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700219 {"vkGetPhysicalDeviceFeatures", offsetof(InstanceVtbl, GetPhysicalDeviceFeatures)},
220 {"vkGetPhysicalDeviceFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceFormatProperties)},
221 {"vkGetPhysicalDeviceImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceImageFormatProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700222 {"vkGetPhysicalDeviceMemoryProperties", offsetof(InstanceVtbl, GetPhysicalDeviceMemoryProperties)},
223 {"vkGetPhysicalDeviceProperties", offsetof(InstanceVtbl, GetPhysicalDeviceProperties)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700224 {"vkGetPhysicalDeviceQueueFamilyProperties", offsetof(InstanceVtbl, GetPhysicalDeviceQueueFamilyProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700225 {"vkGetPhysicalDeviceSparseImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceSparseImageFormatProperties)},
Michael Lentine88594d72015-11-12 12:49:45 -0800226 {"vkGetPhysicalDeviceSurfaceSupportKHR", offsetof(InstanceVtbl, GetPhysicalDeviceSurfaceSupportKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700227 // clang-format on
228};
229
230const NameOffsetEntry kDeviceOffsetTbl[] = {
231 // clang-format off
Michael Lentine88594d72015-11-12 12:49:45 -0800232 {"vkAcquireNextImageKHR", offsetof(DeviceVtbl, AcquireNextImageKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700233 {"vkAllocDescriptorSets", offsetof(DeviceVtbl, AllocDescriptorSets)},
234 {"vkAllocMemory", offsetof(DeviceVtbl, AllocMemory)},
235 {"vkBeginCommandBuffer", offsetof(DeviceVtbl, BeginCommandBuffer)},
236 {"vkBindBufferMemory", offsetof(DeviceVtbl, BindBufferMemory)},
237 {"vkBindImageMemory", offsetof(DeviceVtbl, BindImageMemory)},
238 {"vkCmdBeginQuery", offsetof(DeviceVtbl, CmdBeginQuery)},
239 {"vkCmdBeginRenderPass", offsetof(DeviceVtbl, CmdBeginRenderPass)},
240 {"vkCmdBindDescriptorSets", offsetof(DeviceVtbl, CmdBindDescriptorSets)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700241 {"vkCmdBindIndexBuffer", offsetof(DeviceVtbl, CmdBindIndexBuffer)},
242 {"vkCmdBindPipeline", offsetof(DeviceVtbl, CmdBindPipeline)},
243 {"vkCmdBindVertexBuffers", offsetof(DeviceVtbl, CmdBindVertexBuffers)},
244 {"vkCmdBlitImage", offsetof(DeviceVtbl, CmdBlitImage)},
245 {"vkCmdClearColorAttachment", offsetof(DeviceVtbl, CmdClearColorAttachment)},
246 {"vkCmdClearColorImage", offsetof(DeviceVtbl, CmdClearColorImage)},
247 {"vkCmdClearDepthStencilAttachment", offsetof(DeviceVtbl, CmdClearDepthStencilAttachment)},
248 {"vkCmdClearDepthStencilImage", offsetof(DeviceVtbl, CmdClearDepthStencilImage)},
249 {"vkCmdCopyBuffer", offsetof(DeviceVtbl, CmdCopyBuffer)},
250 {"vkCmdCopyBufferToImage", offsetof(DeviceVtbl, CmdCopyBufferToImage)},
251 {"vkCmdCopyImage", offsetof(DeviceVtbl, CmdCopyImage)},
252 {"vkCmdCopyImageToBuffer", offsetof(DeviceVtbl, CmdCopyImageToBuffer)},
253 {"vkCmdCopyQueryPoolResults", offsetof(DeviceVtbl, CmdCopyQueryPoolResults)},
254 {"vkCmdDispatch", offsetof(DeviceVtbl, CmdDispatch)},
255 {"vkCmdDispatchIndirect", offsetof(DeviceVtbl, CmdDispatchIndirect)},
256 {"vkCmdDraw", offsetof(DeviceVtbl, CmdDraw)},
257 {"vkCmdDrawIndexed", offsetof(DeviceVtbl, CmdDrawIndexed)},
258 {"vkCmdDrawIndexedIndirect", offsetof(DeviceVtbl, CmdDrawIndexedIndirect)},
259 {"vkCmdDrawIndirect", offsetof(DeviceVtbl, CmdDrawIndirect)},
260 {"vkCmdEndQuery", offsetof(DeviceVtbl, CmdEndQuery)},
261 {"vkCmdEndRenderPass", offsetof(DeviceVtbl, CmdEndRenderPass)},
262 {"vkCmdExecuteCommands", offsetof(DeviceVtbl, CmdExecuteCommands)},
263 {"vkCmdFillBuffer", offsetof(DeviceVtbl, CmdFillBuffer)},
264 {"vkCmdNextSubpass", offsetof(DeviceVtbl, CmdNextSubpass)},
265 {"vkCmdPipelineBarrier", offsetof(DeviceVtbl, CmdPipelineBarrier)},
266 {"vkCmdPushConstants", offsetof(DeviceVtbl, CmdPushConstants)},
267 {"vkCmdResetEvent", offsetof(DeviceVtbl, CmdResetEvent)},
268 {"vkCmdResetQueryPool", offsetof(DeviceVtbl, CmdResetQueryPool)},
269 {"vkCmdResolveImage", offsetof(DeviceVtbl, CmdResolveImage)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700270 {"vkCmdSetBlendConstants", offsetof(DeviceVtbl, CmdSetBlendConstants)},
271 {"vkCmdSetDepthBias", offsetof(DeviceVtbl, CmdSetDepthBias)},
272 {"vkCmdSetDepthBounds", offsetof(DeviceVtbl, CmdSetDepthBounds)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700273 {"vkCmdSetEvent", offsetof(DeviceVtbl, CmdSetEvent)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700274 {"vkCmdSetLineWidth", offsetof(DeviceVtbl, CmdSetLineWidth)},
275 {"vkCmdSetScissor", offsetof(DeviceVtbl, CmdSetScissor)},
276 {"vkCmdSetStencilCompareMask", offsetof(DeviceVtbl, CmdSetStencilCompareMask)},
277 {"vkCmdSetStencilReference", offsetof(DeviceVtbl, CmdSetStencilReference)},
278 {"vkCmdSetStencilWriteMask", offsetof(DeviceVtbl, CmdSetStencilWriteMask)},
279 {"vkCmdSetViewport", offsetof(DeviceVtbl, CmdSetViewport)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700280 {"vkCmdUpdateBuffer", offsetof(DeviceVtbl, CmdUpdateBuffer)},
281 {"vkCmdWaitEvents", offsetof(DeviceVtbl, CmdWaitEvents)},
282 {"vkCmdWriteTimestamp", offsetof(DeviceVtbl, CmdWriteTimestamp)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700283 {"vkCreateBuffer", offsetof(DeviceVtbl, CreateBuffer)},
284 {"vkCreateBufferView", offsetof(DeviceVtbl, CreateBufferView)},
285 {"vkCreateCommandBuffer", offsetof(DeviceVtbl, CreateCommandBuffer)},
286 {"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)},
307 {"vkDestroyCommandBuffer", offsetof(DeviceVtbl, DestroyCommandBuffer)},
308 {"vkDestroyCommandPool", offsetof(DeviceVtbl, DestroyCommandPool)},
309 {"vkDestroyDescriptorPool", offsetof(DeviceVtbl, DestroyDescriptorPool)},
310 {"vkDestroyDescriptorSetLayout", offsetof(DeviceVtbl, DestroyDescriptorSetLayout)},
311 {"vkDestroyDevice", offsetof(DeviceVtbl, DestroyDevice)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700312 {"vkDestroyEvent", offsetof(DeviceVtbl, DestroyEvent)},
313 {"vkDestroyFence", offsetof(DeviceVtbl, DestroyFence)},
314 {"vkDestroyFramebuffer", offsetof(DeviceVtbl, DestroyFramebuffer)},
315 {"vkDestroyImage", offsetof(DeviceVtbl, DestroyImage)},
316 {"vkDestroyImageView", offsetof(DeviceVtbl, DestroyImageView)},
317 {"vkDestroyPipeline", offsetof(DeviceVtbl, DestroyPipeline)},
318 {"vkDestroyPipelineCache", offsetof(DeviceVtbl, DestroyPipelineCache)},
319 {"vkDestroyPipelineLayout", offsetof(DeviceVtbl, DestroyPipelineLayout)},
320 {"vkDestroyQueryPool", offsetof(DeviceVtbl, DestroyQueryPool)},
321 {"vkDestroyRenderPass", offsetof(DeviceVtbl, DestroyRenderPass)},
322 {"vkDestroySampler", offsetof(DeviceVtbl, DestroySampler)},
323 {"vkDestroySemaphore", offsetof(DeviceVtbl, DestroySemaphore)},
324 {"vkDestroyShader", offsetof(DeviceVtbl, DestroyShader)},
325 {"vkDestroyShaderModule", offsetof(DeviceVtbl, DestroyShaderModule)},
Michael Lentine88594d72015-11-12 12:49:45 -0800326 {"vkDestroySwapchainKHR", offsetof(DeviceVtbl, DestroySwapchainKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700327 {"vkDeviceWaitIdle", offsetof(DeviceVtbl, DeviceWaitIdle)},
328 {"vkEndCommandBuffer", offsetof(DeviceVtbl, EndCommandBuffer)},
329 {"vkFlushMappedMemoryRanges", offsetof(DeviceVtbl, FlushMappedMemoryRanges)},
330 {"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)},
342 {"vkGetPipelineCacheSize", offsetof(DeviceVtbl, GetPipelineCacheSize)},
343 {"vkGetQueryPoolResults", offsetof(DeviceVtbl, GetQueryPoolResults)},
344 {"vkGetRenderAreaGranularity", offsetof(DeviceVtbl, GetRenderAreaGranularity)},
Michael Lentine88594d72015-11-12 12:49:45 -0800345 {"vkGetSurfaceFormatsKHR", offsetof(DeviceVtbl, GetSurfaceFormatsKHR)},
346 {"vkGetSurfacePresentModesKHR", offsetof(DeviceVtbl, GetSurfacePresentModesKHR)},
347 {"vkGetSurfacePropertiesKHR", offsetof(DeviceVtbl, GetSurfacePropertiesKHR)},
348 {"vkGetSwapchainImagesKHR", offsetof(DeviceVtbl, GetSwapchainImagesKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700349 {"vkInvalidateMappedMemoryRanges", offsetof(DeviceVtbl, InvalidateMappedMemoryRanges)},
350 {"vkMapMemory", offsetof(DeviceVtbl, MapMemory)},
351 {"vkMergePipelineCaches", offsetof(DeviceVtbl, MergePipelineCaches)},
352 {"vkQueueBindSparseBufferMemory", offsetof(DeviceVtbl, QueueBindSparseBufferMemory)},
353 {"vkQueueBindSparseImageMemory", offsetof(DeviceVtbl, QueueBindSparseImageMemory)},
354 {"vkQueueBindSparseImageOpaqueMemory", offsetof(DeviceVtbl, QueueBindSparseImageOpaqueMemory)},
Michael Lentine88594d72015-11-12 12:49:45 -0800355 {"vkQueuePresentKHR", offsetof(DeviceVtbl, QueuePresentKHR)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700356 {"vkQueueSignalSemaphore", offsetof(DeviceVtbl, QueueSignalSemaphore)},
357 {"vkQueueSubmit", offsetof(DeviceVtbl, QueueSubmit)},
358 {"vkQueueWaitIdle", offsetof(DeviceVtbl, QueueWaitIdle)},
359 {"vkQueueWaitSemaphore", offsetof(DeviceVtbl, QueueWaitSemaphore)},
360 {"vkResetCommandBuffer", offsetof(DeviceVtbl, ResetCommandBuffer)},
361 {"vkResetCommandPool", offsetof(DeviceVtbl, ResetCommandPool)},
362 {"vkResetDescriptorPool", offsetof(DeviceVtbl, ResetDescriptorPool)},
363 {"vkResetEvent", offsetof(DeviceVtbl, ResetEvent)},
364 {"vkResetFences", offsetof(DeviceVtbl, ResetFences)},
365 {"vkSetEvent", offsetof(DeviceVtbl, SetEvent)},
366 {"vkUnmapMemory", offsetof(DeviceVtbl, UnmapMemory)},
367 {"vkUpdateDescriptorSets", offsetof(DeviceVtbl, UpdateDescriptorSets)},
368 {"vkWaitForFences", offsetof(DeviceVtbl, WaitForFences)},
369 // clang-format on
370};
371
372} // namespace
373
374namespace vulkan {
375
376PFN_vkVoidFunction GetGlobalInstanceProcAddr(const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700377 const NameProcEntry* entry = FindProcEntry(kInstanceProcTbl, name);
378 if (entry)
379 return entry->proc;
380 // vkGetDeviceProcAddr must be available at the global/instance level for
381 // bootstrapping
Jesse Hall04f4f472015-08-16 19:51:04 -0700382 if (strcmp(name, "vkGetDeviceProcAddr") == 0)
383 return reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceProcAddr);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700384 return nullptr;
Jesse Hall04f4f472015-08-16 19:51:04 -0700385}
386
387PFN_vkVoidFunction GetGlobalDeviceProcAddr(const char* name) {
388 const NameProcEntry* entry = FindProcEntry(kDeviceProcTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700389 if (entry)
390 return entry->proc;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700391 return nullptr;
Jesse Hall04f4f472015-08-16 19:51:04 -0700392}
393
394PFN_vkVoidFunction GetSpecificInstanceProcAddr(const InstanceVtbl* vtbl,
395 const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700396 size_t offset;
Jesse Hall04f4f472015-08-16 19:51:04 -0700397 const NameOffsetEntry* entry = FindProcEntry(kInstanceOffsetTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700398 if (entry)
399 offset = entry->offset;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700400 else
Jesse Hall04f4f472015-08-16 19:51:04 -0700401 return nullptr;
402 const unsigned char* base = reinterpret_cast<const unsigned char*>(vtbl);
Michael Lentine62270162015-09-15 13:25:36 -0500403 return *reinterpret_cast<PFN_vkVoidFunction*>(
Michael Lentine88594d72015-11-12 12:49:45 -0800404 const_cast<unsigned char*>(base) + offset);
Jesse Hall04f4f472015-08-16 19:51:04 -0700405}
406
407PFN_vkVoidFunction GetSpecificDeviceProcAddr(const DeviceVtbl* vtbl,
408 const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700409 size_t offset;
Jesse Hall04f4f472015-08-16 19:51:04 -0700410 const NameOffsetEntry* entry = FindProcEntry(kDeviceOffsetTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700411 if (entry)
412 offset = entry->offset;
Jesse Hallb1352bc2015-09-04 16:12:33 -0700413 else
Jesse Hall04f4f472015-08-16 19:51:04 -0700414 return nullptr;
415 const unsigned char* base = reinterpret_cast<const unsigned char*>(vtbl);
Michael Lentine62270162015-09-15 13:25:36 -0500416 return *reinterpret_cast<PFN_vkVoidFunction*>(
Michael Lentine88594d72015-11-12 12:49:45 -0800417 const_cast<unsigned char*>(base) + offset);
Jesse Hall04f4f472015-08-16 19:51:04 -0700418}
419
420bool LoadInstanceVtbl(VkInstance instance,
Michael Lentine03c64b02015-08-26 18:27:26 -0500421 VkInstance instance_next,
Jesse Hall04f4f472015-08-16 19:51:04 -0700422 PFN_vkGetInstanceProcAddr get_proc_addr,
423 InstanceVtbl& vtbl) {
424 bool success = true;
425 // clang-format off
Michael Lentine03c64b02015-08-26 18:27:26 -0500426 vtbl.GetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(get_proc_addr(instance_next, "vkGetInstanceProcAddr"));
427 if (UNLIKELY(!vtbl.GetInstanceProcAddr)) {
428 ALOGE("missing instance proc: %s", "vkGetInstanceProcAddr");
429 success = false;
430 }
431 vtbl.CreateInstance = reinterpret_cast<PFN_vkCreateInstance>(get_proc_addr(instance, "vkCreateInstance"));
432 if (UNLIKELY(!vtbl.CreateInstance)) {
433 // This is allowed to fail as the driver doesn't have to return vkCreateInstance when given an instance
434 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700435 vtbl.DestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(get_proc_addr(instance, "vkDestroyInstance"));
436 if (UNLIKELY(!vtbl.DestroyInstance)) {
437 ALOGE("missing instance proc: %s", "vkDestroyInstance");
438 success = false;
439 }
440 vtbl.EnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(get_proc_addr(instance, "vkEnumeratePhysicalDevices"));
441 if (UNLIKELY(!vtbl.EnumeratePhysicalDevices)) {
442 ALOGE("missing instance proc: %s", "vkEnumeratePhysicalDevices");
443 success = false;
444 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700445 vtbl.GetPhysicalDeviceProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceProperties"));
446 if (UNLIKELY(!vtbl.GetPhysicalDeviceProperties)) {
447 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceProperties");
448 success = false;
449 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700450 vtbl.GetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceQueueFamilyProperties"));
451 if (UNLIKELY(!vtbl.GetPhysicalDeviceQueueFamilyProperties)) {
452 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceQueueFamilyProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700453 success = false;
454 }
455 vtbl.GetPhysicalDeviceMemoryProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceMemoryProperties"));
456 if (UNLIKELY(!vtbl.GetPhysicalDeviceMemoryProperties)) {
457 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceMemoryProperties");
458 success = false;
459 }
460 vtbl.GetPhysicalDeviceFeatures = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures>(get_proc_addr(instance, "vkGetPhysicalDeviceFeatures"));
461 if (UNLIKELY(!vtbl.GetPhysicalDeviceFeatures)) {
462 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceFeatures");
463 success = false;
464 }
465 vtbl.GetPhysicalDeviceFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceFormatProperties"));
466 if (UNLIKELY(!vtbl.GetPhysicalDeviceFormatProperties)) {
467 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceFormatProperties");
468 success = false;
469 }
470 vtbl.GetPhysicalDeviceImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceImageFormatProperties"));
471 if (UNLIKELY(!vtbl.GetPhysicalDeviceImageFormatProperties)) {
472 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceImageFormatProperties");
473 success = false;
474 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700475 vtbl.CreateDevice = reinterpret_cast<PFN_vkCreateDevice>(get_proc_addr(instance, "vkCreateDevice"));
476 if (UNLIKELY(!vtbl.CreateDevice)) {
477 ALOGE("missing instance proc: %s", "vkCreateDevice");
478 success = false;
479 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700480 vtbl.EnumerateDeviceLayerProperties = reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(get_proc_addr(instance, "vkEnumerateDeviceLayerProperties"));
481 if (UNLIKELY(!vtbl.EnumerateDeviceLayerProperties)) {
482 ALOGE("missing instance proc: %s", "vkEnumerateDeviceLayerProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700483 success = false;
484 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700485 vtbl.EnumerateDeviceExtensionProperties = reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(get_proc_addr(instance, "vkEnumerateDeviceExtensionProperties"));
486 if (UNLIKELY(!vtbl.EnumerateDeviceExtensionProperties)) {
487 ALOGE("missing instance proc: %s", "vkEnumerateDeviceExtensionProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700488 success = false;
489 }
490 vtbl.GetPhysicalDeviceSparseImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceSparseImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceSparseImageFormatProperties"));
491 if (UNLIKELY(!vtbl.GetPhysicalDeviceSparseImageFormatProperties)) {
492 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceSparseImageFormatProperties");
493 success = false;
494 }
Michael Lentine88594d72015-11-12 12:49:45 -0800495 vtbl.GetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>(get_proc_addr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"));
Jesse Hall04f4f472015-08-16 19:51:04 -0700496 // clang-format on
497 return success;
498}
499
500bool LoadDeviceVtbl(VkDevice device,
Michael Lentine03c64b02015-08-26 18:27:26 -0500501 VkDevice device_next,
Jesse Hall04f4f472015-08-16 19:51:04 -0700502 PFN_vkGetDeviceProcAddr get_proc_addr,
503 DeviceVtbl& vtbl) {
504 bool success = true;
505 // clang-format off
Michael Lentine03c64b02015-08-26 18:27:26 -0500506 vtbl.GetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(get_proc_addr(device_next, "vkGetDeviceProcAddr"));
Jesse Hall04f4f472015-08-16 19:51:04 -0700507 if (UNLIKELY(!vtbl.GetDeviceProcAddr)) {
508 ALOGE("missing device proc: %s", "vkGetDeviceProcAddr");
509 success = false;
510 }
511 vtbl.DestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(get_proc_addr(device, "vkDestroyDevice"));
512 if (UNLIKELY(!vtbl.DestroyDevice)) {
513 ALOGE("missing device proc: %s", "vkDestroyDevice");
514 success = false;
515 }
516 vtbl.GetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(get_proc_addr(device, "vkGetDeviceQueue"));
517 if (UNLIKELY(!vtbl.GetDeviceQueue)) {
518 ALOGE("missing device proc: %s", "vkGetDeviceQueue");
519 success = false;
520 }
521 vtbl.QueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(get_proc_addr(device, "vkQueueSubmit"));
522 if (UNLIKELY(!vtbl.QueueSubmit)) {
523 ALOGE("missing device proc: %s", "vkQueueSubmit");
524 success = false;
525 }
526 vtbl.QueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(get_proc_addr(device, "vkQueueWaitIdle"));
527 if (UNLIKELY(!vtbl.QueueWaitIdle)) {
528 ALOGE("missing device proc: %s", "vkQueueWaitIdle");
529 success = false;
530 }
531 vtbl.DeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(get_proc_addr(device, "vkDeviceWaitIdle"));
532 if (UNLIKELY(!vtbl.DeviceWaitIdle)) {
533 ALOGE("missing device proc: %s", "vkDeviceWaitIdle");
534 success = false;
535 }
536 vtbl.AllocMemory = reinterpret_cast<PFN_vkAllocMemory>(get_proc_addr(device, "vkAllocMemory"));
537 if (UNLIKELY(!vtbl.AllocMemory)) {
538 ALOGE("missing device proc: %s", "vkAllocMemory");
539 success = false;
540 }
541 vtbl.FreeMemory = reinterpret_cast<PFN_vkFreeMemory>(get_proc_addr(device, "vkFreeMemory"));
542 if (UNLIKELY(!vtbl.FreeMemory)) {
543 ALOGE("missing device proc: %s", "vkFreeMemory");
544 success = false;
545 }
546 vtbl.MapMemory = reinterpret_cast<PFN_vkMapMemory>(get_proc_addr(device, "vkMapMemory"));
547 if (UNLIKELY(!vtbl.MapMemory)) {
548 ALOGE("missing device proc: %s", "vkMapMemory");
549 success = false;
550 }
551 vtbl.UnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(get_proc_addr(device, "vkUnmapMemory"));
552 if (UNLIKELY(!vtbl.UnmapMemory)) {
553 ALOGE("missing device proc: %s", "vkUnmapMemory");
554 success = false;
555 }
556 vtbl.FlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(get_proc_addr(device, "vkFlushMappedMemoryRanges"));
557 if (UNLIKELY(!vtbl.FlushMappedMemoryRanges)) {
558 ALOGE("missing device proc: %s", "vkFlushMappedMemoryRanges");
559 success = false;
560 }
561 vtbl.InvalidateMappedMemoryRanges = reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>(get_proc_addr(device, "vkInvalidateMappedMemoryRanges"));
562 if (UNLIKELY(!vtbl.InvalidateMappedMemoryRanges)) {
563 ALOGE("missing device proc: %s", "vkInvalidateMappedMemoryRanges");
564 success = false;
565 }
566 vtbl.GetDeviceMemoryCommitment = reinterpret_cast<PFN_vkGetDeviceMemoryCommitment>(get_proc_addr(device, "vkGetDeviceMemoryCommitment"));
567 if (UNLIKELY(!vtbl.GetDeviceMemoryCommitment)) {
568 ALOGE("missing device proc: %s", "vkGetDeviceMemoryCommitment");
569 success = false;
570 }
571 vtbl.GetBufferMemoryRequirements = reinterpret_cast<PFN_vkGetBufferMemoryRequirements>(get_proc_addr(device, "vkGetBufferMemoryRequirements"));
572 if (UNLIKELY(!vtbl.GetBufferMemoryRequirements)) {
573 ALOGE("missing device proc: %s", "vkGetBufferMemoryRequirements");
574 success = false;
575 }
576 vtbl.BindBufferMemory = reinterpret_cast<PFN_vkBindBufferMemory>(get_proc_addr(device, "vkBindBufferMemory"));
577 if (UNLIKELY(!vtbl.BindBufferMemory)) {
578 ALOGE("missing device proc: %s", "vkBindBufferMemory");
579 success = false;
580 }
581 vtbl.GetImageMemoryRequirements = reinterpret_cast<PFN_vkGetImageMemoryRequirements>(get_proc_addr(device, "vkGetImageMemoryRequirements"));
582 if (UNLIKELY(!vtbl.GetImageMemoryRequirements)) {
583 ALOGE("missing device proc: %s", "vkGetImageMemoryRequirements");
584 success = false;
585 }
586 vtbl.BindImageMemory = reinterpret_cast<PFN_vkBindImageMemory>(get_proc_addr(device, "vkBindImageMemory"));
587 if (UNLIKELY(!vtbl.BindImageMemory)) {
588 ALOGE("missing device proc: %s", "vkBindImageMemory");
589 success = false;
590 }
591 vtbl.GetImageSparseMemoryRequirements = reinterpret_cast<PFN_vkGetImageSparseMemoryRequirements>(get_proc_addr(device, "vkGetImageSparseMemoryRequirements"));
592 if (UNLIKELY(!vtbl.GetImageSparseMemoryRequirements)) {
593 ALOGE("missing device proc: %s", "vkGetImageSparseMemoryRequirements");
594 success = false;
595 }
596 vtbl.QueueBindSparseBufferMemory = reinterpret_cast<PFN_vkQueueBindSparseBufferMemory>(get_proc_addr(device, "vkQueueBindSparseBufferMemory"));
597 if (UNLIKELY(!vtbl.QueueBindSparseBufferMemory)) {
598 ALOGE("missing device proc: %s", "vkQueueBindSparseBufferMemory");
599 success = false;
600 }
601 vtbl.QueueBindSparseImageOpaqueMemory = reinterpret_cast<PFN_vkQueueBindSparseImageOpaqueMemory>(get_proc_addr(device, "vkQueueBindSparseImageOpaqueMemory"));
602 if (UNLIKELY(!vtbl.QueueBindSparseImageOpaqueMemory)) {
603 ALOGE("missing device proc: %s", "vkQueueBindSparseImageOpaqueMemory");
604 success = false;
605 }
606 vtbl.QueueBindSparseImageMemory = reinterpret_cast<PFN_vkQueueBindSparseImageMemory>(get_proc_addr(device, "vkQueueBindSparseImageMemory"));
607 if (UNLIKELY(!vtbl.QueueBindSparseImageMemory)) {
608 ALOGE("missing device proc: %s", "vkQueueBindSparseImageMemory");
609 success = false;
610 }
611 vtbl.CreateFence = reinterpret_cast<PFN_vkCreateFence>(get_proc_addr(device, "vkCreateFence"));
612 if (UNLIKELY(!vtbl.CreateFence)) {
613 ALOGE("missing device proc: %s", "vkCreateFence");
614 success = false;
615 }
616 vtbl.DestroyFence = reinterpret_cast<PFN_vkDestroyFence>(get_proc_addr(device, "vkDestroyFence"));
617 if (UNLIKELY(!vtbl.DestroyFence)) {
618 ALOGE("missing device proc: %s", "vkDestroyFence");
619 success = false;
620 }
621 vtbl.ResetFences = reinterpret_cast<PFN_vkResetFences>(get_proc_addr(device, "vkResetFences"));
622 if (UNLIKELY(!vtbl.ResetFences)) {
623 ALOGE("missing device proc: %s", "vkResetFences");
624 success = false;
625 }
626 vtbl.GetFenceStatus = reinterpret_cast<PFN_vkGetFenceStatus>(get_proc_addr(device, "vkGetFenceStatus"));
627 if (UNLIKELY(!vtbl.GetFenceStatus)) {
628 ALOGE("missing device proc: %s", "vkGetFenceStatus");
629 success = false;
630 }
631 vtbl.WaitForFences = reinterpret_cast<PFN_vkWaitForFences>(get_proc_addr(device, "vkWaitForFences"));
632 if (UNLIKELY(!vtbl.WaitForFences)) {
633 ALOGE("missing device proc: %s", "vkWaitForFences");
634 success = false;
635 }
636 vtbl.CreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(get_proc_addr(device, "vkCreateSemaphore"));
637 if (UNLIKELY(!vtbl.CreateSemaphore)) {
638 ALOGE("missing device proc: %s", "vkCreateSemaphore");
639 success = false;
640 }
641 vtbl.DestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(get_proc_addr(device, "vkDestroySemaphore"));
642 if (UNLIKELY(!vtbl.DestroySemaphore)) {
643 ALOGE("missing device proc: %s", "vkDestroySemaphore");
644 success = false;
645 }
646 vtbl.QueueSignalSemaphore = reinterpret_cast<PFN_vkQueueSignalSemaphore>(get_proc_addr(device, "vkQueueSignalSemaphore"));
647 if (UNLIKELY(!vtbl.QueueSignalSemaphore)) {
648 ALOGE("missing device proc: %s", "vkQueueSignalSemaphore");
649 success = false;
650 }
651 vtbl.QueueWaitSemaphore = reinterpret_cast<PFN_vkQueueWaitSemaphore>(get_proc_addr(device, "vkQueueWaitSemaphore"));
652 if (UNLIKELY(!vtbl.QueueWaitSemaphore)) {
653 ALOGE("missing device proc: %s", "vkQueueWaitSemaphore");
654 success = false;
655 }
656 vtbl.CreateEvent = reinterpret_cast<PFN_vkCreateEvent>(get_proc_addr(device, "vkCreateEvent"));
657 if (UNLIKELY(!vtbl.CreateEvent)) {
658 ALOGE("missing device proc: %s", "vkCreateEvent");
659 success = false;
660 }
661 vtbl.DestroyEvent = reinterpret_cast<PFN_vkDestroyEvent>(get_proc_addr(device, "vkDestroyEvent"));
662 if (UNLIKELY(!vtbl.DestroyEvent)) {
663 ALOGE("missing device proc: %s", "vkDestroyEvent");
664 success = false;
665 }
666 vtbl.GetEventStatus = reinterpret_cast<PFN_vkGetEventStatus>(get_proc_addr(device, "vkGetEventStatus"));
667 if (UNLIKELY(!vtbl.GetEventStatus)) {
668 ALOGE("missing device proc: %s", "vkGetEventStatus");
669 success = false;
670 }
671 vtbl.SetEvent = reinterpret_cast<PFN_vkSetEvent>(get_proc_addr(device, "vkSetEvent"));
672 if (UNLIKELY(!vtbl.SetEvent)) {
673 ALOGE("missing device proc: %s", "vkSetEvent");
674 success = false;
675 }
676 vtbl.ResetEvent = reinterpret_cast<PFN_vkResetEvent>(get_proc_addr(device, "vkResetEvent"));
677 if (UNLIKELY(!vtbl.ResetEvent)) {
678 ALOGE("missing device proc: %s", "vkResetEvent");
679 success = false;
680 }
681 vtbl.CreateQueryPool = reinterpret_cast<PFN_vkCreateQueryPool>(get_proc_addr(device, "vkCreateQueryPool"));
682 if (UNLIKELY(!vtbl.CreateQueryPool)) {
683 ALOGE("missing device proc: %s", "vkCreateQueryPool");
684 success = false;
685 }
686 vtbl.DestroyQueryPool = reinterpret_cast<PFN_vkDestroyQueryPool>(get_proc_addr(device, "vkDestroyQueryPool"));
687 if (UNLIKELY(!vtbl.DestroyQueryPool)) {
688 ALOGE("missing device proc: %s", "vkDestroyQueryPool");
689 success = false;
690 }
691 vtbl.GetQueryPoolResults = reinterpret_cast<PFN_vkGetQueryPoolResults>(get_proc_addr(device, "vkGetQueryPoolResults"));
692 if (UNLIKELY(!vtbl.GetQueryPoolResults)) {
693 ALOGE("missing device proc: %s", "vkGetQueryPoolResults");
694 success = false;
695 }
696 vtbl.CreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(get_proc_addr(device, "vkCreateBuffer"));
697 if (UNLIKELY(!vtbl.CreateBuffer)) {
698 ALOGE("missing device proc: %s", "vkCreateBuffer");
699 success = false;
700 }
701 vtbl.DestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(get_proc_addr(device, "vkDestroyBuffer"));
702 if (UNLIKELY(!vtbl.DestroyBuffer)) {
703 ALOGE("missing device proc: %s", "vkDestroyBuffer");
704 success = false;
705 }
706 vtbl.CreateBufferView = reinterpret_cast<PFN_vkCreateBufferView>(get_proc_addr(device, "vkCreateBufferView"));
707 if (UNLIKELY(!vtbl.CreateBufferView)) {
708 ALOGE("missing device proc: %s", "vkCreateBufferView");
709 success = false;
710 }
711 vtbl.DestroyBufferView = reinterpret_cast<PFN_vkDestroyBufferView>(get_proc_addr(device, "vkDestroyBufferView"));
712 if (UNLIKELY(!vtbl.DestroyBufferView)) {
713 ALOGE("missing device proc: %s", "vkDestroyBufferView");
714 success = false;
715 }
716 vtbl.CreateImage = reinterpret_cast<PFN_vkCreateImage>(get_proc_addr(device, "vkCreateImage"));
717 if (UNLIKELY(!vtbl.CreateImage)) {
718 ALOGE("missing device proc: %s", "vkCreateImage");
719 success = false;
720 }
721 vtbl.DestroyImage = reinterpret_cast<PFN_vkDestroyImage>(get_proc_addr(device, "vkDestroyImage"));
722 if (UNLIKELY(!vtbl.DestroyImage)) {
723 ALOGE("missing device proc: %s", "vkDestroyImage");
724 success = false;
725 }
726 vtbl.GetImageSubresourceLayout = reinterpret_cast<PFN_vkGetImageSubresourceLayout>(get_proc_addr(device, "vkGetImageSubresourceLayout"));
727 if (UNLIKELY(!vtbl.GetImageSubresourceLayout)) {
728 ALOGE("missing device proc: %s", "vkGetImageSubresourceLayout");
729 success = false;
730 }
731 vtbl.CreateImageView = reinterpret_cast<PFN_vkCreateImageView>(get_proc_addr(device, "vkCreateImageView"));
732 if (UNLIKELY(!vtbl.CreateImageView)) {
733 ALOGE("missing device proc: %s", "vkCreateImageView");
734 success = false;
735 }
736 vtbl.DestroyImageView = reinterpret_cast<PFN_vkDestroyImageView>(get_proc_addr(device, "vkDestroyImageView"));
737 if (UNLIKELY(!vtbl.DestroyImageView)) {
738 ALOGE("missing device proc: %s", "vkDestroyImageView");
739 success = false;
740 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700741 vtbl.CreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(get_proc_addr(device, "vkCreateShaderModule"));
742 if (UNLIKELY(!vtbl.CreateShaderModule)) {
743 ALOGE("missing device proc: %s", "vkCreateShaderModule");
744 success = false;
745 }
746 vtbl.DestroyShaderModule = reinterpret_cast<PFN_vkDestroyShaderModule>(get_proc_addr(device, "vkDestroyShaderModule"));
747 if (UNLIKELY(!vtbl.DestroyShaderModule)) {
748 ALOGE("missing device proc: %s", "vkDestroyShaderModule");
749 success = false;
750 }
751 vtbl.CreateShader = reinterpret_cast<PFN_vkCreateShader>(get_proc_addr(device, "vkCreateShader"));
752 if (UNLIKELY(!vtbl.CreateShader)) {
753 ALOGE("missing device proc: %s", "vkCreateShader");
754 success = false;
755 }
756 vtbl.DestroyShader = reinterpret_cast<PFN_vkDestroyShader>(get_proc_addr(device, "vkDestroyShader"));
757 if (UNLIKELY(!vtbl.DestroyShader)) {
758 ALOGE("missing device proc: %s", "vkDestroyShader");
759 success = false;
760 }
761 vtbl.CreatePipelineCache = reinterpret_cast<PFN_vkCreatePipelineCache>(get_proc_addr(device, "vkCreatePipelineCache"));
762 if (UNLIKELY(!vtbl.CreatePipelineCache)) {
763 ALOGE("missing device proc: %s", "vkCreatePipelineCache");
764 success = false;
765 }
766 vtbl.DestroyPipelineCache = reinterpret_cast<PFN_vkDestroyPipelineCache>(get_proc_addr(device, "vkDestroyPipelineCache"));
767 if (UNLIKELY(!vtbl.DestroyPipelineCache)) {
768 ALOGE("missing device proc: %s", "vkDestroyPipelineCache");
769 success = false;
770 }
771 vtbl.GetPipelineCacheSize = reinterpret_cast<PFN_vkGetPipelineCacheSize>(get_proc_addr(device, "vkGetPipelineCacheSize"));
772 if (UNLIKELY(!vtbl.GetPipelineCacheSize)) {
773 ALOGE("missing device proc: %s", "vkGetPipelineCacheSize");
774 success = false;
775 }
776 vtbl.GetPipelineCacheData = reinterpret_cast<PFN_vkGetPipelineCacheData>(get_proc_addr(device, "vkGetPipelineCacheData"));
777 if (UNLIKELY(!vtbl.GetPipelineCacheData)) {
778 ALOGE("missing device proc: %s", "vkGetPipelineCacheData");
779 success = false;
780 }
781 vtbl.MergePipelineCaches = reinterpret_cast<PFN_vkMergePipelineCaches>(get_proc_addr(device, "vkMergePipelineCaches"));
782 if (UNLIKELY(!vtbl.MergePipelineCaches)) {
783 ALOGE("missing device proc: %s", "vkMergePipelineCaches");
784 success = false;
785 }
786 vtbl.CreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(get_proc_addr(device, "vkCreateGraphicsPipelines"));
787 if (UNLIKELY(!vtbl.CreateGraphicsPipelines)) {
788 ALOGE("missing device proc: %s", "vkCreateGraphicsPipelines");
789 success = false;
790 }
791 vtbl.CreateComputePipelines = reinterpret_cast<PFN_vkCreateComputePipelines>(get_proc_addr(device, "vkCreateComputePipelines"));
792 if (UNLIKELY(!vtbl.CreateComputePipelines)) {
793 ALOGE("missing device proc: %s", "vkCreateComputePipelines");
794 success = false;
795 }
796 vtbl.DestroyPipeline = reinterpret_cast<PFN_vkDestroyPipeline>(get_proc_addr(device, "vkDestroyPipeline"));
797 if (UNLIKELY(!vtbl.DestroyPipeline)) {
798 ALOGE("missing device proc: %s", "vkDestroyPipeline");
799 success = false;
800 }
801 vtbl.CreatePipelineLayout = reinterpret_cast<PFN_vkCreatePipelineLayout>(get_proc_addr(device, "vkCreatePipelineLayout"));
802 if (UNLIKELY(!vtbl.CreatePipelineLayout)) {
803 ALOGE("missing device proc: %s", "vkCreatePipelineLayout");
804 success = false;
805 }
806 vtbl.DestroyPipelineLayout = reinterpret_cast<PFN_vkDestroyPipelineLayout>(get_proc_addr(device, "vkDestroyPipelineLayout"));
807 if (UNLIKELY(!vtbl.DestroyPipelineLayout)) {
808 ALOGE("missing device proc: %s", "vkDestroyPipelineLayout");
809 success = false;
810 }
811 vtbl.CreateSampler = reinterpret_cast<PFN_vkCreateSampler>(get_proc_addr(device, "vkCreateSampler"));
812 if (UNLIKELY(!vtbl.CreateSampler)) {
813 ALOGE("missing device proc: %s", "vkCreateSampler");
814 success = false;
815 }
816 vtbl.DestroySampler = reinterpret_cast<PFN_vkDestroySampler>(get_proc_addr(device, "vkDestroySampler"));
817 if (UNLIKELY(!vtbl.DestroySampler)) {
818 ALOGE("missing device proc: %s", "vkDestroySampler");
819 success = false;
820 }
821 vtbl.CreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(get_proc_addr(device, "vkCreateDescriptorSetLayout"));
822 if (UNLIKELY(!vtbl.CreateDescriptorSetLayout)) {
823 ALOGE("missing device proc: %s", "vkCreateDescriptorSetLayout");
824 success = false;
825 }
826 vtbl.DestroyDescriptorSetLayout = reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>(get_proc_addr(device, "vkDestroyDescriptorSetLayout"));
827 if (UNLIKELY(!vtbl.DestroyDescriptorSetLayout)) {
828 ALOGE("missing device proc: %s", "vkDestroyDescriptorSetLayout");
829 success = false;
830 }
831 vtbl.CreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(get_proc_addr(device, "vkCreateDescriptorPool"));
832 if (UNLIKELY(!vtbl.CreateDescriptorPool)) {
833 ALOGE("missing device proc: %s", "vkCreateDescriptorPool");
834 success = false;
835 }
836 vtbl.DestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>(get_proc_addr(device, "vkDestroyDescriptorPool"));
837 if (UNLIKELY(!vtbl.DestroyDescriptorPool)) {
838 ALOGE("missing device proc: %s", "vkDestroyDescriptorPool");
839 success = false;
840 }
841 vtbl.ResetDescriptorPool = reinterpret_cast<PFN_vkResetDescriptorPool>(get_proc_addr(device, "vkResetDescriptorPool"));
842 if (UNLIKELY(!vtbl.ResetDescriptorPool)) {
843 ALOGE("missing device proc: %s", "vkResetDescriptorPool");
844 success = false;
845 }
846 vtbl.AllocDescriptorSets = reinterpret_cast<PFN_vkAllocDescriptorSets>(get_proc_addr(device, "vkAllocDescriptorSets"));
847 if (UNLIKELY(!vtbl.AllocDescriptorSets)) {
848 ALOGE("missing device proc: %s", "vkAllocDescriptorSets");
849 success = false;
850 }
851 vtbl.FreeDescriptorSets = reinterpret_cast<PFN_vkFreeDescriptorSets>(get_proc_addr(device, "vkFreeDescriptorSets"));
852 if (UNLIKELY(!vtbl.FreeDescriptorSets)) {
853 ALOGE("missing device proc: %s", "vkFreeDescriptorSets");
854 success = false;
855 }
856 vtbl.UpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(get_proc_addr(device, "vkUpdateDescriptorSets"));
857 if (UNLIKELY(!vtbl.UpdateDescriptorSets)) {
858 ALOGE("missing device proc: %s", "vkUpdateDescriptorSets");
859 success = false;
860 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700861 vtbl.CreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(get_proc_addr(device, "vkCreateFramebuffer"));
862 if (UNLIKELY(!vtbl.CreateFramebuffer)) {
863 ALOGE("missing device proc: %s", "vkCreateFramebuffer");
864 success = false;
865 }
866 vtbl.DestroyFramebuffer = reinterpret_cast<PFN_vkDestroyFramebuffer>(get_proc_addr(device, "vkDestroyFramebuffer"));
867 if (UNLIKELY(!vtbl.DestroyFramebuffer)) {
868 ALOGE("missing device proc: %s", "vkDestroyFramebuffer");
869 success = false;
870 }
871 vtbl.CreateRenderPass = reinterpret_cast<PFN_vkCreateRenderPass>(get_proc_addr(device, "vkCreateRenderPass"));
872 if (UNLIKELY(!vtbl.CreateRenderPass)) {
873 ALOGE("missing device proc: %s", "vkCreateRenderPass");
874 success = false;
875 }
876 vtbl.DestroyRenderPass = reinterpret_cast<PFN_vkDestroyRenderPass>(get_proc_addr(device, "vkDestroyRenderPass"));
877 if (UNLIKELY(!vtbl.DestroyRenderPass)) {
878 ALOGE("missing device proc: %s", "vkDestroyRenderPass");
879 success = false;
880 }
881 vtbl.GetRenderAreaGranularity = reinterpret_cast<PFN_vkGetRenderAreaGranularity>(get_proc_addr(device, "vkGetRenderAreaGranularity"));
882 if (UNLIKELY(!vtbl.GetRenderAreaGranularity)) {
883 ALOGE("missing device proc: %s", "vkGetRenderAreaGranularity");
884 success = false;
885 }
886 vtbl.CreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(get_proc_addr(device, "vkCreateCommandPool"));
887 if (UNLIKELY(!vtbl.CreateCommandPool)) {
888 ALOGE("missing device proc: %s", "vkCreateCommandPool");
889 success = false;
890 }
891 vtbl.DestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(get_proc_addr(device, "vkDestroyCommandPool"));
892 if (UNLIKELY(!vtbl.DestroyCommandPool)) {
893 ALOGE("missing device proc: %s", "vkDestroyCommandPool");
894 success = false;
895 }
896 vtbl.ResetCommandPool = reinterpret_cast<PFN_vkResetCommandPool>(get_proc_addr(device, "vkResetCommandPool"));
897 if (UNLIKELY(!vtbl.ResetCommandPool)) {
898 ALOGE("missing device proc: %s", "vkResetCommandPool");
899 success = false;
900 }
901 vtbl.CreateCommandBuffer = reinterpret_cast<PFN_vkCreateCommandBuffer>(get_proc_addr(device, "vkCreateCommandBuffer"));
902 if (UNLIKELY(!vtbl.CreateCommandBuffer)) {
903 ALOGE("missing device proc: %s", "vkCreateCommandBuffer");
904 success = false;
905 }
906 vtbl.DestroyCommandBuffer = reinterpret_cast<PFN_vkDestroyCommandBuffer>(get_proc_addr(device, "vkDestroyCommandBuffer"));
907 if (UNLIKELY(!vtbl.DestroyCommandBuffer)) {
908 ALOGE("missing device proc: %s", "vkDestroyCommandBuffer");
909 success = false;
910 }
911 vtbl.BeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(get_proc_addr(device, "vkBeginCommandBuffer"));
912 if (UNLIKELY(!vtbl.BeginCommandBuffer)) {
913 ALOGE("missing device proc: %s", "vkBeginCommandBuffer");
914 success = false;
915 }
916 vtbl.EndCommandBuffer = reinterpret_cast<PFN_vkEndCommandBuffer>(get_proc_addr(device, "vkEndCommandBuffer"));
917 if (UNLIKELY(!vtbl.EndCommandBuffer)) {
918 ALOGE("missing device proc: %s", "vkEndCommandBuffer");
919 success = false;
920 }
921 vtbl.ResetCommandBuffer = reinterpret_cast<PFN_vkResetCommandBuffer>(get_proc_addr(device, "vkResetCommandBuffer"));
922 if (UNLIKELY(!vtbl.ResetCommandBuffer)) {
923 ALOGE("missing device proc: %s", "vkResetCommandBuffer");
924 success = false;
925 }
926 vtbl.CmdBindPipeline = reinterpret_cast<PFN_vkCmdBindPipeline>(get_proc_addr(device, "vkCmdBindPipeline"));
927 if (UNLIKELY(!vtbl.CmdBindPipeline)) {
928 ALOGE("missing device proc: %s", "vkCmdBindPipeline");
929 success = false;
930 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700931 vtbl.CmdSetViewport = reinterpret_cast<PFN_vkCmdSetViewport>(get_proc_addr(device, "vkCmdSetViewport"));
932 if (UNLIKELY(!vtbl.CmdSetViewport)) {
933 ALOGE("missing device proc: %s", "vkCmdSetViewport");
Jesse Hall04f4f472015-08-16 19:51:04 -0700934 success = false;
935 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700936 vtbl.CmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(get_proc_addr(device, "vkCmdSetScissor"));
937 if (UNLIKELY(!vtbl.CmdSetScissor)) {
938 ALOGE("missing device proc: %s", "vkCmdSetScissor");
Jesse Hall04f4f472015-08-16 19:51:04 -0700939 success = false;
940 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700941 vtbl.CmdSetLineWidth = reinterpret_cast<PFN_vkCmdSetLineWidth>(get_proc_addr(device, "vkCmdSetLineWidth"));
942 if (UNLIKELY(!vtbl.CmdSetLineWidth)) {
943 ALOGE("missing device proc: %s", "vkCmdSetLineWidth");
Jesse Hall04f4f472015-08-16 19:51:04 -0700944 success = false;
945 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700946 vtbl.CmdSetDepthBias = reinterpret_cast<PFN_vkCmdSetDepthBias>(get_proc_addr(device, "vkCmdSetDepthBias"));
947 if (UNLIKELY(!vtbl.CmdSetDepthBias)) {
948 ALOGE("missing device proc: %s", "vkCmdSetDepthBias");
949 success = false;
950 }
951 vtbl.CmdSetBlendConstants = reinterpret_cast<PFN_vkCmdSetBlendConstants>(get_proc_addr(device, "vkCmdSetBlendConstants"));
952 if (UNLIKELY(!vtbl.CmdSetBlendConstants)) {
953 ALOGE("missing device proc: %s", "vkCmdSetBlendConstants");
954 success = false;
955 }
956 vtbl.CmdSetDepthBounds = reinterpret_cast<PFN_vkCmdSetDepthBounds>(get_proc_addr(device, "vkCmdSetDepthBounds"));
957 if (UNLIKELY(!vtbl.CmdSetDepthBounds)) {
958 ALOGE("missing device proc: %s", "vkCmdSetDepthBounds");
959 success = false;
960 }
961 vtbl.CmdSetStencilCompareMask = reinterpret_cast<PFN_vkCmdSetStencilCompareMask>(get_proc_addr(device, "vkCmdSetStencilCompareMask"));
962 if (UNLIKELY(!vtbl.CmdSetStencilCompareMask)) {
963 ALOGE("missing device proc: %s", "vkCmdSetStencilCompareMask");
964 success = false;
965 }
966 vtbl.CmdSetStencilWriteMask = reinterpret_cast<PFN_vkCmdSetStencilWriteMask>(get_proc_addr(device, "vkCmdSetStencilWriteMask"));
967 if (UNLIKELY(!vtbl.CmdSetStencilWriteMask)) {
968 ALOGE("missing device proc: %s", "vkCmdSetStencilWriteMask");
969 success = false;
970 }
971 vtbl.CmdSetStencilReference = reinterpret_cast<PFN_vkCmdSetStencilReference>(get_proc_addr(device, "vkCmdSetStencilReference"));
972 if (UNLIKELY(!vtbl.CmdSetStencilReference)) {
973 ALOGE("missing device proc: %s", "vkCmdSetStencilReference");
Jesse Hall04f4f472015-08-16 19:51:04 -0700974 success = false;
975 }
976 vtbl.CmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>(get_proc_addr(device, "vkCmdBindDescriptorSets"));
977 if (UNLIKELY(!vtbl.CmdBindDescriptorSets)) {
978 ALOGE("missing device proc: %s", "vkCmdBindDescriptorSets");
979 success = false;
980 }
981 vtbl.CmdBindIndexBuffer = reinterpret_cast<PFN_vkCmdBindIndexBuffer>(get_proc_addr(device, "vkCmdBindIndexBuffer"));
982 if (UNLIKELY(!vtbl.CmdBindIndexBuffer)) {
983 ALOGE("missing device proc: %s", "vkCmdBindIndexBuffer");
984 success = false;
985 }
986 vtbl.CmdBindVertexBuffers = reinterpret_cast<PFN_vkCmdBindVertexBuffers>(get_proc_addr(device, "vkCmdBindVertexBuffers"));
987 if (UNLIKELY(!vtbl.CmdBindVertexBuffers)) {
988 ALOGE("missing device proc: %s", "vkCmdBindVertexBuffers");
989 success = false;
990 }
991 vtbl.CmdDraw = reinterpret_cast<PFN_vkCmdDraw>(get_proc_addr(device, "vkCmdDraw"));
992 if (UNLIKELY(!vtbl.CmdDraw)) {
993 ALOGE("missing device proc: %s", "vkCmdDraw");
994 success = false;
995 }
996 vtbl.CmdDrawIndexed = reinterpret_cast<PFN_vkCmdDrawIndexed>(get_proc_addr(device, "vkCmdDrawIndexed"));
997 if (UNLIKELY(!vtbl.CmdDrawIndexed)) {
998 ALOGE("missing device proc: %s", "vkCmdDrawIndexed");
999 success = false;
1000 }
1001 vtbl.CmdDrawIndirect = reinterpret_cast<PFN_vkCmdDrawIndirect>(get_proc_addr(device, "vkCmdDrawIndirect"));
1002 if (UNLIKELY(!vtbl.CmdDrawIndirect)) {
1003 ALOGE("missing device proc: %s", "vkCmdDrawIndirect");
1004 success = false;
1005 }
1006 vtbl.CmdDrawIndexedIndirect = reinterpret_cast<PFN_vkCmdDrawIndexedIndirect>(get_proc_addr(device, "vkCmdDrawIndexedIndirect"));
1007 if (UNLIKELY(!vtbl.CmdDrawIndexedIndirect)) {
1008 ALOGE("missing device proc: %s", "vkCmdDrawIndexedIndirect");
1009 success = false;
1010 }
1011 vtbl.CmdDispatch = reinterpret_cast<PFN_vkCmdDispatch>(get_proc_addr(device, "vkCmdDispatch"));
1012 if (UNLIKELY(!vtbl.CmdDispatch)) {
1013 ALOGE("missing device proc: %s", "vkCmdDispatch");
1014 success = false;
1015 }
1016 vtbl.CmdDispatchIndirect = reinterpret_cast<PFN_vkCmdDispatchIndirect>(get_proc_addr(device, "vkCmdDispatchIndirect"));
1017 if (UNLIKELY(!vtbl.CmdDispatchIndirect)) {
1018 ALOGE("missing device proc: %s", "vkCmdDispatchIndirect");
1019 success = false;
1020 }
1021 vtbl.CmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(get_proc_addr(device, "vkCmdCopyBuffer"));
1022 if (UNLIKELY(!vtbl.CmdCopyBuffer)) {
1023 ALOGE("missing device proc: %s", "vkCmdCopyBuffer");
1024 success = false;
1025 }
1026 vtbl.CmdCopyImage = reinterpret_cast<PFN_vkCmdCopyImage>(get_proc_addr(device, "vkCmdCopyImage"));
1027 if (UNLIKELY(!vtbl.CmdCopyImage)) {
1028 ALOGE("missing device proc: %s", "vkCmdCopyImage");
1029 success = false;
1030 }
1031 vtbl.CmdBlitImage = reinterpret_cast<PFN_vkCmdBlitImage>(get_proc_addr(device, "vkCmdBlitImage"));
1032 if (UNLIKELY(!vtbl.CmdBlitImage)) {
1033 ALOGE("missing device proc: %s", "vkCmdBlitImage");
1034 success = false;
1035 }
1036 vtbl.CmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(get_proc_addr(device, "vkCmdCopyBufferToImage"));
1037 if (UNLIKELY(!vtbl.CmdCopyBufferToImage)) {
1038 ALOGE("missing device proc: %s", "vkCmdCopyBufferToImage");
1039 success = false;
1040 }
1041 vtbl.CmdCopyImageToBuffer = reinterpret_cast<PFN_vkCmdCopyImageToBuffer>(get_proc_addr(device, "vkCmdCopyImageToBuffer"));
1042 if (UNLIKELY(!vtbl.CmdCopyImageToBuffer)) {
1043 ALOGE("missing device proc: %s", "vkCmdCopyImageToBuffer");
1044 success = false;
1045 }
1046 vtbl.CmdUpdateBuffer = reinterpret_cast<PFN_vkCmdUpdateBuffer>(get_proc_addr(device, "vkCmdUpdateBuffer"));
1047 if (UNLIKELY(!vtbl.CmdUpdateBuffer)) {
1048 ALOGE("missing device proc: %s", "vkCmdUpdateBuffer");
1049 success = false;
1050 }
1051 vtbl.CmdFillBuffer = reinterpret_cast<PFN_vkCmdFillBuffer>(get_proc_addr(device, "vkCmdFillBuffer"));
1052 if (UNLIKELY(!vtbl.CmdFillBuffer)) {
1053 ALOGE("missing device proc: %s", "vkCmdFillBuffer");
1054 success = false;
1055 }
1056 vtbl.CmdClearColorImage = reinterpret_cast<PFN_vkCmdClearColorImage>(get_proc_addr(device, "vkCmdClearColorImage"));
1057 if (UNLIKELY(!vtbl.CmdClearColorImage)) {
1058 ALOGE("missing device proc: %s", "vkCmdClearColorImage");
1059 success = false;
1060 }
1061 vtbl.CmdClearDepthStencilImage = reinterpret_cast<PFN_vkCmdClearDepthStencilImage>(get_proc_addr(device, "vkCmdClearDepthStencilImage"));
1062 if (UNLIKELY(!vtbl.CmdClearDepthStencilImage)) {
1063 ALOGE("missing device proc: %s", "vkCmdClearDepthStencilImage");
1064 success = false;
1065 }
1066 vtbl.CmdClearColorAttachment = reinterpret_cast<PFN_vkCmdClearColorAttachment>(get_proc_addr(device, "vkCmdClearColorAttachment"));
1067 if (UNLIKELY(!vtbl.CmdClearColorAttachment)) {
1068 ALOGE("missing device proc: %s", "vkCmdClearColorAttachment");
1069 success = false;
1070 }
1071 vtbl.CmdClearDepthStencilAttachment = reinterpret_cast<PFN_vkCmdClearDepthStencilAttachment>(get_proc_addr(device, "vkCmdClearDepthStencilAttachment"));
1072 if (UNLIKELY(!vtbl.CmdClearDepthStencilAttachment)) {
1073 ALOGE("missing device proc: %s", "vkCmdClearDepthStencilAttachment");
1074 success = false;
1075 }
1076 vtbl.CmdResolveImage = reinterpret_cast<PFN_vkCmdResolveImage>(get_proc_addr(device, "vkCmdResolveImage"));
1077 if (UNLIKELY(!vtbl.CmdResolveImage)) {
1078 ALOGE("missing device proc: %s", "vkCmdResolveImage");
1079 success = false;
1080 }
1081 vtbl.CmdSetEvent = reinterpret_cast<PFN_vkCmdSetEvent>(get_proc_addr(device, "vkCmdSetEvent"));
1082 if (UNLIKELY(!vtbl.CmdSetEvent)) {
1083 ALOGE("missing device proc: %s", "vkCmdSetEvent");
1084 success = false;
1085 }
1086 vtbl.CmdResetEvent = reinterpret_cast<PFN_vkCmdResetEvent>(get_proc_addr(device, "vkCmdResetEvent"));
1087 if (UNLIKELY(!vtbl.CmdResetEvent)) {
1088 ALOGE("missing device proc: %s", "vkCmdResetEvent");
1089 success = false;
1090 }
1091 vtbl.CmdWaitEvents = reinterpret_cast<PFN_vkCmdWaitEvents>(get_proc_addr(device, "vkCmdWaitEvents"));
1092 if (UNLIKELY(!vtbl.CmdWaitEvents)) {
1093 ALOGE("missing device proc: %s", "vkCmdWaitEvents");
1094 success = false;
1095 }
1096 vtbl.CmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(get_proc_addr(device, "vkCmdPipelineBarrier"));
1097 if (UNLIKELY(!vtbl.CmdPipelineBarrier)) {
1098 ALOGE("missing device proc: %s", "vkCmdPipelineBarrier");
1099 success = false;
1100 }
1101 vtbl.CmdBeginQuery = reinterpret_cast<PFN_vkCmdBeginQuery>(get_proc_addr(device, "vkCmdBeginQuery"));
1102 if (UNLIKELY(!vtbl.CmdBeginQuery)) {
1103 ALOGE("missing device proc: %s", "vkCmdBeginQuery");
1104 success = false;
1105 }
1106 vtbl.CmdEndQuery = reinterpret_cast<PFN_vkCmdEndQuery>(get_proc_addr(device, "vkCmdEndQuery"));
1107 if (UNLIKELY(!vtbl.CmdEndQuery)) {
1108 ALOGE("missing device proc: %s", "vkCmdEndQuery");
1109 success = false;
1110 }
1111 vtbl.CmdResetQueryPool = reinterpret_cast<PFN_vkCmdResetQueryPool>(get_proc_addr(device, "vkCmdResetQueryPool"));
1112 if (UNLIKELY(!vtbl.CmdResetQueryPool)) {
1113 ALOGE("missing device proc: %s", "vkCmdResetQueryPool");
1114 success = false;
1115 }
1116 vtbl.CmdWriteTimestamp = reinterpret_cast<PFN_vkCmdWriteTimestamp>(get_proc_addr(device, "vkCmdWriteTimestamp"));
1117 if (UNLIKELY(!vtbl.CmdWriteTimestamp)) {
1118 ALOGE("missing device proc: %s", "vkCmdWriteTimestamp");
1119 success = false;
1120 }
1121 vtbl.CmdCopyQueryPoolResults = reinterpret_cast<PFN_vkCmdCopyQueryPoolResults>(get_proc_addr(device, "vkCmdCopyQueryPoolResults"));
1122 if (UNLIKELY(!vtbl.CmdCopyQueryPoolResults)) {
1123 ALOGE("missing device proc: %s", "vkCmdCopyQueryPoolResults");
1124 success = false;
1125 }
1126 vtbl.CmdPushConstants = reinterpret_cast<PFN_vkCmdPushConstants>(get_proc_addr(device, "vkCmdPushConstants"));
1127 if (UNLIKELY(!vtbl.CmdPushConstants)) {
1128 ALOGE("missing device proc: %s", "vkCmdPushConstants");
1129 success = false;
1130 }
1131 vtbl.CmdBeginRenderPass = reinterpret_cast<PFN_vkCmdBeginRenderPass>(get_proc_addr(device, "vkCmdBeginRenderPass"));
1132 if (UNLIKELY(!vtbl.CmdBeginRenderPass)) {
1133 ALOGE("missing device proc: %s", "vkCmdBeginRenderPass");
1134 success = false;
1135 }
1136 vtbl.CmdNextSubpass = reinterpret_cast<PFN_vkCmdNextSubpass>(get_proc_addr(device, "vkCmdNextSubpass"));
1137 if (UNLIKELY(!vtbl.CmdNextSubpass)) {
1138 ALOGE("missing device proc: %s", "vkCmdNextSubpass");
1139 success = false;
1140 }
1141 vtbl.CmdEndRenderPass = reinterpret_cast<PFN_vkCmdEndRenderPass>(get_proc_addr(device, "vkCmdEndRenderPass"));
1142 if (UNLIKELY(!vtbl.CmdEndRenderPass)) {
1143 ALOGE("missing device proc: %s", "vkCmdEndRenderPass");
1144 success = false;
1145 }
1146 vtbl.CmdExecuteCommands = reinterpret_cast<PFN_vkCmdExecuteCommands>(get_proc_addr(device, "vkCmdExecuteCommands"));
1147 if (UNLIKELY(!vtbl.CmdExecuteCommands)) {
1148 ALOGE("missing device proc: %s", "vkCmdExecuteCommands");
1149 success = false;
1150 }
Michael Lentine88594d72015-11-12 12:49:45 -08001151 vtbl.GetSurfacePropertiesKHR = reinterpret_cast<PFN_vkGetSurfacePropertiesKHR>(get_proc_addr(device, "vkGetSurfacePropertiesKHR"));
1152 if (UNLIKELY(!vtbl.GetSurfacePropertiesKHR)) {
1153 ALOGE("missing device proc: %s", "vkGetSurfacePropertiesKHR");
1154 success = false;
1155 }
1156 vtbl.GetSurfaceFormatsKHR = reinterpret_cast<PFN_vkGetSurfaceFormatsKHR>(get_proc_addr(device, "vkGetSurfaceFormatsKHR"));
1157 if (UNLIKELY(!vtbl.GetSurfaceFormatsKHR)) {
1158 ALOGE("missing device proc: %s", "vkGetSurfaceFormatsKHR");
1159 success = false;
1160 }
1161 vtbl.GetSurfacePresentModesKHR = reinterpret_cast<PFN_vkGetSurfacePresentModesKHR>(get_proc_addr(device, "vkGetSurfacePresentModesKHR"));
1162 if (UNLIKELY(!vtbl.GetSurfacePresentModesKHR)) {
1163 ALOGE("missing device proc: %s", "vkGetSurfacePresentModesKHR");
1164 success = false;
1165 }
1166 vtbl.CreateSwapchainKHR = reinterpret_cast<PFN_vkCreateSwapchainKHR>(get_proc_addr(device, "vkCreateSwapchainKHR"));
1167 if (UNLIKELY(!vtbl.CreateSwapchainKHR)) {
1168 ALOGE("missing device proc: %s", "vkCreateSwapchainKHR");
1169 success = false;
1170 }
1171 vtbl.DestroySwapchainKHR = reinterpret_cast<PFN_vkDestroySwapchainKHR>(get_proc_addr(device, "vkDestroySwapchainKHR"));
1172 if (UNLIKELY(!vtbl.DestroySwapchainKHR)) {
1173 ALOGE("missing device proc: %s", "vkDestroySwapchainKHR");
1174 success = false;
1175 }
1176 vtbl.GetSwapchainImagesKHR = reinterpret_cast<PFN_vkGetSwapchainImagesKHR>(get_proc_addr(device, "vkGetSwapchainImagesKHR"));
1177 if (UNLIKELY(!vtbl.GetSwapchainImagesKHR)) {
1178 ALOGE("missing device proc: %s", "vkGetSwapchainImagesKHR");
1179 success = false;
1180 }
1181 vtbl.AcquireNextImageKHR = reinterpret_cast<PFN_vkAcquireNextImageKHR>(get_proc_addr(device, "vkAcquireNextImageKHR"));
1182 if (UNLIKELY(!vtbl.AcquireNextImageKHR)) {
1183 ALOGE("missing device proc: %s", "vkAcquireNextImageKHR");
1184 success = false;
1185 }
1186 vtbl.QueuePresentKHR = reinterpret_cast<PFN_vkQueuePresentKHR>(get_proc_addr(device, "vkQueuePresentKHR"));
1187 if (UNLIKELY(!vtbl.QueuePresentKHR)) {
1188 ALOGE("missing device proc: %s", "vkQueuePresentKHR");
1189 success = false;
1190 }
Jesse Hall70f93352015-11-04 09:41:31 -08001191 vtbl.GetSwapchainGrallocUsageANDROID = reinterpret_cast<PFN_vkGetSwapchainGrallocUsageANDROID>(get_proc_addr(device, "vkGetSwapchainGrallocUsageANDROID"));
1192 if (UNLIKELY(!vtbl.GetSwapchainGrallocUsageANDROID)) {
1193 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1194 // ALOGE("missing device proc: %s", "vkGetSwapchainGrallocUsageANDROID");
1195 ALOGW("missing device proc: %s", "vkGetSwapchainGrallocUsageANDROID");
1196 // success = false;
1197 }
Jesse Hallab9aeef2015-11-04 10:56:20 -08001198 vtbl.AcquireImageANDROID = reinterpret_cast<PFN_vkAcquireImageANDROID>(get_proc_addr(device, "vkAcquireImageANDROID"));
1199 if (UNLIKELY(!vtbl.AcquireImageANDROID)) {
1200 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1201 // ALOGE("missing device proc: %s", "vkImportNativeFenceANDROID");
1202 ALOGW("missing device proc: %s", "vkAcquireImageANDROID");
1203 // success = false;
Jesse Hallb1352bc2015-09-04 16:12:33 -07001204 }
Jesse Hallab9aeef2015-11-04 10:56:20 -08001205 vtbl.QueueSignalReleaseImageANDROID = reinterpret_cast<PFN_vkQueueSignalReleaseImageANDROID>(get_proc_addr(device, "vkQueueSignalReleaseImageANDROID"));
1206 if (UNLIKELY(!vtbl.QueueSignalReleaseImageANDROID)) {
1207 // TODO(jessehall): temporarily make this optional, until drivers have been updated
1208 // ALOGE("missing device proc: %s", "vkQueueSignalReleaseImageANDROID");
1209 ALOGW("missing device proc: %s", "vkQueueSignalReleaseImageANDROID");
1210 // success = false;
1211 }
1212 // TODO(jessehall): these are deprecated; remove when drivers have been updated
1213 vtbl.ImportNativeFenceANDROID = reinterpret_cast<PFN_vkImportNativeFenceANDROID>(get_proc_addr(device, "vkImportNativeFenceANDROID"));
Jesse Hallb1352bc2015-09-04 16:12:33 -07001214 vtbl.QueueSignalNativeFenceANDROID = reinterpret_cast<PFN_vkQueueSignalNativeFenceANDROID>(get_proc_addr(device, "vkQueueSignalNativeFenceANDROID"));
Jesse Hallab9aeef2015-11-04 10:56:20 -08001215 if (!((!vtbl.AcquireImageANDROID && !vtbl.QueueSignalReleaseImageANDROID && vtbl.ImportNativeFenceANDROID && vtbl.QueueSignalNativeFenceANDROID) ||
1216 (vtbl.AcquireImageANDROID && vtbl.QueueSignalReleaseImageANDROID && !vtbl.ImportNativeFenceANDROID && !vtbl.QueueSignalNativeFenceANDROID))) {
1217 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 -07001218 success = false;
1219 }
Jesse Hall04f4f472015-08-16 19:51:04 -07001220 // clang-format on
1221 return success;
1222}
1223
1224} // namespace vulkan