blob: 8aee40b5b7b0ded1b5576c16b0773853f2e937b4 [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>
41const TEntry* FindProcEntry(const TEntry(&table)[N], const char* name) {
42 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)},
65 // clang-format on
66};
67
68const NameProcEntry kDeviceProcTbl[] = {
69 // clang-format off
70 {"vkAllocDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkAllocDescriptorSets)},
71 {"vkAllocMemory", reinterpret_cast<PFN_vkVoidFunction>(vkAllocMemory)},
72 {"vkBeginCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkBeginCommandBuffer)},
73 {"vkBindBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkBindBufferMemory)},
74 {"vkBindImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkBindImageMemory)},
75 {"vkCmdBeginQuery", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBeginQuery)},
76 {"vkCmdBeginRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBeginRenderPass)},
77 {"vkCmdBindDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindDescriptorSets)},
Jesse Hall04f4f472015-08-16 19:51:04 -070078 {"vkCmdBindIndexBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindIndexBuffer)},
79 {"vkCmdBindPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindPipeline)},
80 {"vkCmdBindVertexBuffers", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBindVertexBuffers)},
81 {"vkCmdBlitImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdBlitImage)},
82 {"vkCmdClearColorAttachment", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearColorAttachment)},
83 {"vkCmdClearColorImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearColorImage)},
84 {"vkCmdClearDepthStencilAttachment", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearDepthStencilAttachment)},
85 {"vkCmdClearDepthStencilImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdClearDepthStencilImage)},
86 {"vkCmdCopyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBuffer)},
87 {"vkCmdCopyBufferToImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyBufferToImage)},
88 {"vkCmdCopyImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyImage)},
89 {"vkCmdCopyImageToBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyImageToBuffer)},
90 {"vkCmdCopyQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkCmdCopyQueryPoolResults)},
91 {"vkCmdDispatch", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDispatch)},
92 {"vkCmdDispatchIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDispatchIndirect)},
93 {"vkCmdDraw", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDraw)},
94 {"vkCmdDrawIndexed", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndexed)},
95 {"vkCmdDrawIndexedIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndexedIndirect)},
96 {"vkCmdDrawIndirect", reinterpret_cast<PFN_vkVoidFunction>(vkCmdDrawIndirect)},
97 {"vkCmdEndQuery", reinterpret_cast<PFN_vkVoidFunction>(vkCmdEndQuery)},
98 {"vkCmdEndRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdEndRenderPass)},
99 {"vkCmdExecuteCommands", reinterpret_cast<PFN_vkVoidFunction>(vkCmdExecuteCommands)},
100 {"vkCmdFillBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdFillBuffer)},
101 {"vkCmdNextSubpass", reinterpret_cast<PFN_vkVoidFunction>(vkCmdNextSubpass)},
102 {"vkCmdPipelineBarrier", reinterpret_cast<PFN_vkVoidFunction>(vkCmdPipelineBarrier)},
103 {"vkCmdPushConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdPushConstants)},
104 {"vkCmdResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetEvent)},
105 {"vkCmdResetQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResetQueryPool)},
106 {"vkCmdResolveImage", reinterpret_cast<PFN_vkVoidFunction>(vkCmdResolveImage)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700107 {"vkCmdSetBlendConstants", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetBlendConstants)},
108 {"vkCmdSetDepthBias", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBias)},
109 {"vkCmdSetDepthBounds", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetDepthBounds)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700110 {"vkCmdSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetEvent)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700111 {"vkCmdSetLineWidth", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetLineWidth)},
112 {"vkCmdSetScissor", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetScissor)},
113 {"vkCmdSetStencilCompareMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilCompareMask)},
114 {"vkCmdSetStencilReference", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilReference)},
115 {"vkCmdSetStencilWriteMask", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetStencilWriteMask)},
116 {"vkCmdSetViewport", reinterpret_cast<PFN_vkVoidFunction>(vkCmdSetViewport)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700117 {"vkCmdUpdateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCmdUpdateBuffer)},
118 {"vkCmdWaitEvents", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWaitEvents)},
119 {"vkCmdWriteTimestamp", reinterpret_cast<PFN_vkVoidFunction>(vkCmdWriteTimestamp)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700120 {"vkCreateBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBuffer)},
121 {"vkCreateBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateBufferView)},
122 {"vkCreateCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandBuffer)},
123 {"vkCreateCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateCommandPool)},
124 {"vkCreateComputePipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateComputePipelines)},
125 {"vkCreateDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorPool)},
126 {"vkCreateDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreateDescriptorSetLayout)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700127 {"vkCreateEvent", reinterpret_cast<PFN_vkVoidFunction>(vkCreateEvent)},
128 {"vkCreateFence", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFence)},
129 {"vkCreateFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkCreateFramebuffer)},
130 {"vkCreateGraphicsPipelines", reinterpret_cast<PFN_vkVoidFunction>(vkCreateGraphicsPipelines)},
131 {"vkCreateImage", reinterpret_cast<PFN_vkVoidFunction>(vkCreateImage)},
132 {"vkCreateImageView", reinterpret_cast<PFN_vkVoidFunction>(vkCreateImageView)},
133 {"vkCreatePipelineCache", reinterpret_cast<PFN_vkVoidFunction>(vkCreatePipelineCache)},
134 {"vkCreatePipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(vkCreatePipelineLayout)},
135 {"vkCreateQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkCreateQueryPool)},
136 {"vkCreateRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkCreateRenderPass)},
137 {"vkCreateSampler", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSampler)},
138 {"vkCreateSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkCreateSemaphore)},
139 {"vkCreateShader", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShader)},
140 {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkCreateShaderModule)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700141 {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBuffer)},
142 {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyBufferView)},
143 {"vkDestroyCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandBuffer)},
144 {"vkDestroyCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyCommandPool)},
145 {"vkDestroyDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorPool)},
146 {"vkDestroyDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDescriptorSetLayout)},
147 {"vkDestroyDevice", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyDevice)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700148 {"vkDestroyEvent", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyEvent)},
149 {"vkDestroyFence", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFence)},
150 {"vkDestroyFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyFramebuffer)},
151 {"vkDestroyImage", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyImage)},
152 {"vkDestroyImageView", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyImageView)},
153 {"vkDestroyPipeline", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipeline)},
154 {"vkDestroyPipelineCache", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipelineCache)},
155 {"vkDestroyPipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyPipelineLayout)},
156 {"vkDestroyQueryPool", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyQueryPool)},
157 {"vkDestroyRenderPass", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyRenderPass)},
158 {"vkDestroySampler", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySampler)},
159 {"vkDestroySemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkDestroySemaphore)},
160 {"vkDestroyShader", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShader)},
161 {"vkDestroyShaderModule", reinterpret_cast<PFN_vkVoidFunction>(vkDestroyShaderModule)},
162 {"vkDeviceWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkDeviceWaitIdle)},
163 {"vkEndCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkEndCommandBuffer)},
164 {"vkFlushMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkFlushMappedMemoryRanges)},
165 {"vkFreeDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkFreeDescriptorSets)},
166 {"vkFreeMemory", reinterpret_cast<PFN_vkVoidFunction>(vkFreeMemory)},
167 {"vkGetBufferMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetBufferMemoryRequirements)},
168 {"vkGetDeviceMemoryCommitment", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceMemoryCommitment)},
169 {"vkGetDeviceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceProcAddr)},
170 {"vkGetDeviceQueue", reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceQueue)},
171 {"vkGetEventStatus", reinterpret_cast<PFN_vkVoidFunction>(vkGetEventStatus)},
172 {"vkGetFenceStatus", reinterpret_cast<PFN_vkVoidFunction>(vkGetFenceStatus)},
173 {"vkGetImageMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageMemoryRequirements)},
174 {"vkGetImageSparseMemoryRequirements", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSparseMemoryRequirements)},
175 {"vkGetImageSubresourceLayout", reinterpret_cast<PFN_vkVoidFunction>(vkGetImageSubresourceLayout)},
176 {"vkGetPipelineCacheData", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheData)},
177 {"vkGetPipelineCacheSize", reinterpret_cast<PFN_vkVoidFunction>(vkGetPipelineCacheSize)},
178 {"vkGetQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(vkGetQueryPoolResults)},
179 {"vkGetRenderAreaGranularity", reinterpret_cast<PFN_vkVoidFunction>(vkGetRenderAreaGranularity)},
180 {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(vkInvalidateMappedMemoryRanges)},
181 {"vkMapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkMapMemory)},
182 {"vkMergePipelineCaches", reinterpret_cast<PFN_vkVoidFunction>(vkMergePipelineCaches)},
183 {"vkQueueBindSparseBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseBufferMemory)},
184 {"vkQueueBindSparseImageMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageMemory)},
185 {"vkQueueBindSparseImageOpaqueMemory", reinterpret_cast<PFN_vkVoidFunction>(vkQueueBindSparseImageOpaqueMemory)},
186 {"vkQueueSignalSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSignalSemaphore)},
187 {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(vkQueueSubmit)},
188 {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitIdle)},
189 {"vkQueueWaitSemaphore", reinterpret_cast<PFN_vkVoidFunction>(vkQueueWaitSemaphore)},
190 {"vkResetCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandBuffer)},
191 {"vkResetCommandPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetCommandPool)},
192 {"vkResetDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(vkResetDescriptorPool)},
193 {"vkResetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkResetEvent)},
194 {"vkResetFences", reinterpret_cast<PFN_vkVoidFunction>(vkResetFences)},
195 {"vkSetEvent", reinterpret_cast<PFN_vkVoidFunction>(vkSetEvent)},
196 {"vkUnmapMemory", reinterpret_cast<PFN_vkVoidFunction>(vkUnmapMemory)},
197 {"vkUpdateDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(vkUpdateDescriptorSets)},
198 {"vkWaitForFences", reinterpret_cast<PFN_vkVoidFunction>(vkWaitForFences)},
199 // clang-format on
200};
201
202const NameOffsetEntry kInstanceOffsetTbl[] = {
203 // clang-format off
204 {"vkCreateDevice", offsetof(InstanceVtbl, CreateDevice)},
205 {"vkDestroyInstance", offsetof(InstanceVtbl, DestroyInstance)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700206 {"vkEnumerateDeviceExtensionProperties", offsetof(InstanceVtbl, EnumerateDeviceExtensionProperties)},
207 {"vkEnumerateDeviceLayerProperties", offsetof(InstanceVtbl, EnumerateDeviceLayerProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700208 {"vkEnumeratePhysicalDevices", offsetof(InstanceVtbl, EnumeratePhysicalDevices)},
209 {"vkGetInstanceProcAddr", offsetof(InstanceVtbl, GetInstanceProcAddr)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700210 {"vkGetPhysicalDeviceFeatures", offsetof(InstanceVtbl, GetPhysicalDeviceFeatures)},
211 {"vkGetPhysicalDeviceFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceFormatProperties)},
212 {"vkGetPhysicalDeviceImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceImageFormatProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700213 {"vkGetPhysicalDeviceMemoryProperties", offsetof(InstanceVtbl, GetPhysicalDeviceMemoryProperties)},
214 {"vkGetPhysicalDeviceProperties", offsetof(InstanceVtbl, GetPhysicalDeviceProperties)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700215 {"vkGetPhysicalDeviceQueueFamilyProperties", offsetof(InstanceVtbl, GetPhysicalDeviceQueueFamilyProperties)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700216 {"vkGetPhysicalDeviceSparseImageFormatProperties", offsetof(InstanceVtbl, GetPhysicalDeviceSparseImageFormatProperties)},
217 // clang-format on
218};
219
220const NameOffsetEntry kDeviceOffsetTbl[] = {
221 // clang-format off
222 {"vkAllocDescriptorSets", offsetof(DeviceVtbl, AllocDescriptorSets)},
223 {"vkAllocMemory", offsetof(DeviceVtbl, AllocMemory)},
224 {"vkBeginCommandBuffer", offsetof(DeviceVtbl, BeginCommandBuffer)},
225 {"vkBindBufferMemory", offsetof(DeviceVtbl, BindBufferMemory)},
226 {"vkBindImageMemory", offsetof(DeviceVtbl, BindImageMemory)},
227 {"vkCmdBeginQuery", offsetof(DeviceVtbl, CmdBeginQuery)},
228 {"vkCmdBeginRenderPass", offsetof(DeviceVtbl, CmdBeginRenderPass)},
229 {"vkCmdBindDescriptorSets", offsetof(DeviceVtbl, CmdBindDescriptorSets)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700230 {"vkCmdBindIndexBuffer", offsetof(DeviceVtbl, CmdBindIndexBuffer)},
231 {"vkCmdBindPipeline", offsetof(DeviceVtbl, CmdBindPipeline)},
232 {"vkCmdBindVertexBuffers", offsetof(DeviceVtbl, CmdBindVertexBuffers)},
233 {"vkCmdBlitImage", offsetof(DeviceVtbl, CmdBlitImage)},
234 {"vkCmdClearColorAttachment", offsetof(DeviceVtbl, CmdClearColorAttachment)},
235 {"vkCmdClearColorImage", offsetof(DeviceVtbl, CmdClearColorImage)},
236 {"vkCmdClearDepthStencilAttachment", offsetof(DeviceVtbl, CmdClearDepthStencilAttachment)},
237 {"vkCmdClearDepthStencilImage", offsetof(DeviceVtbl, CmdClearDepthStencilImage)},
238 {"vkCmdCopyBuffer", offsetof(DeviceVtbl, CmdCopyBuffer)},
239 {"vkCmdCopyBufferToImage", offsetof(DeviceVtbl, CmdCopyBufferToImage)},
240 {"vkCmdCopyImage", offsetof(DeviceVtbl, CmdCopyImage)},
241 {"vkCmdCopyImageToBuffer", offsetof(DeviceVtbl, CmdCopyImageToBuffer)},
242 {"vkCmdCopyQueryPoolResults", offsetof(DeviceVtbl, CmdCopyQueryPoolResults)},
243 {"vkCmdDispatch", offsetof(DeviceVtbl, CmdDispatch)},
244 {"vkCmdDispatchIndirect", offsetof(DeviceVtbl, CmdDispatchIndirect)},
245 {"vkCmdDraw", offsetof(DeviceVtbl, CmdDraw)},
246 {"vkCmdDrawIndexed", offsetof(DeviceVtbl, CmdDrawIndexed)},
247 {"vkCmdDrawIndexedIndirect", offsetof(DeviceVtbl, CmdDrawIndexedIndirect)},
248 {"vkCmdDrawIndirect", offsetof(DeviceVtbl, CmdDrawIndirect)},
249 {"vkCmdEndQuery", offsetof(DeviceVtbl, CmdEndQuery)},
250 {"vkCmdEndRenderPass", offsetof(DeviceVtbl, CmdEndRenderPass)},
251 {"vkCmdExecuteCommands", offsetof(DeviceVtbl, CmdExecuteCommands)},
252 {"vkCmdFillBuffer", offsetof(DeviceVtbl, CmdFillBuffer)},
253 {"vkCmdNextSubpass", offsetof(DeviceVtbl, CmdNextSubpass)},
254 {"vkCmdPipelineBarrier", offsetof(DeviceVtbl, CmdPipelineBarrier)},
255 {"vkCmdPushConstants", offsetof(DeviceVtbl, CmdPushConstants)},
256 {"vkCmdResetEvent", offsetof(DeviceVtbl, CmdResetEvent)},
257 {"vkCmdResetQueryPool", offsetof(DeviceVtbl, CmdResetQueryPool)},
258 {"vkCmdResolveImage", offsetof(DeviceVtbl, CmdResolveImage)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700259 {"vkCmdSetBlendConstants", offsetof(DeviceVtbl, CmdSetBlendConstants)},
260 {"vkCmdSetDepthBias", offsetof(DeviceVtbl, CmdSetDepthBias)},
261 {"vkCmdSetDepthBounds", offsetof(DeviceVtbl, CmdSetDepthBounds)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700262 {"vkCmdSetEvent", offsetof(DeviceVtbl, CmdSetEvent)},
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700263 {"vkCmdSetLineWidth", offsetof(DeviceVtbl, CmdSetLineWidth)},
264 {"vkCmdSetScissor", offsetof(DeviceVtbl, CmdSetScissor)},
265 {"vkCmdSetStencilCompareMask", offsetof(DeviceVtbl, CmdSetStencilCompareMask)},
266 {"vkCmdSetStencilReference", offsetof(DeviceVtbl, CmdSetStencilReference)},
267 {"vkCmdSetStencilWriteMask", offsetof(DeviceVtbl, CmdSetStencilWriteMask)},
268 {"vkCmdSetViewport", offsetof(DeviceVtbl, CmdSetViewport)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700269 {"vkCmdUpdateBuffer", offsetof(DeviceVtbl, CmdUpdateBuffer)},
270 {"vkCmdWaitEvents", offsetof(DeviceVtbl, CmdWaitEvents)},
271 {"vkCmdWriteTimestamp", offsetof(DeviceVtbl, CmdWriteTimestamp)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700272 {"vkCreateBuffer", offsetof(DeviceVtbl, CreateBuffer)},
273 {"vkCreateBufferView", offsetof(DeviceVtbl, CreateBufferView)},
274 {"vkCreateCommandBuffer", offsetof(DeviceVtbl, CreateCommandBuffer)},
275 {"vkCreateCommandPool", offsetof(DeviceVtbl, CreateCommandPool)},
276 {"vkCreateComputePipelines", offsetof(DeviceVtbl, CreateComputePipelines)},
277 {"vkCreateDescriptorPool", offsetof(DeviceVtbl, CreateDescriptorPool)},
278 {"vkCreateDescriptorSetLayout", offsetof(DeviceVtbl, CreateDescriptorSetLayout)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700279 {"vkCreateEvent", offsetof(DeviceVtbl, CreateEvent)},
280 {"vkCreateFence", offsetof(DeviceVtbl, CreateFence)},
281 {"vkCreateFramebuffer", offsetof(DeviceVtbl, CreateFramebuffer)},
282 {"vkCreateGraphicsPipelines", offsetof(DeviceVtbl, CreateGraphicsPipelines)},
283 {"vkCreateImage", offsetof(DeviceVtbl, CreateImage)},
284 {"vkCreateImageView", offsetof(DeviceVtbl, CreateImageView)},
285 {"vkCreatePipelineCache", offsetof(DeviceVtbl, CreatePipelineCache)},
286 {"vkCreatePipelineLayout", offsetof(DeviceVtbl, CreatePipelineLayout)},
287 {"vkCreateQueryPool", offsetof(DeviceVtbl, CreateQueryPool)},
288 {"vkCreateRenderPass", offsetof(DeviceVtbl, CreateRenderPass)},
289 {"vkCreateSampler", offsetof(DeviceVtbl, CreateSampler)},
290 {"vkCreateSemaphore", offsetof(DeviceVtbl, CreateSemaphore)},
291 {"vkCreateShader", offsetof(DeviceVtbl, CreateShader)},
292 {"vkCreateShaderModule", offsetof(DeviceVtbl, CreateShaderModule)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700293 {"vkDestroyBuffer", offsetof(DeviceVtbl, DestroyBuffer)},
294 {"vkDestroyBufferView", offsetof(DeviceVtbl, DestroyBufferView)},
295 {"vkDestroyCommandBuffer", offsetof(DeviceVtbl, DestroyCommandBuffer)},
296 {"vkDestroyCommandPool", offsetof(DeviceVtbl, DestroyCommandPool)},
297 {"vkDestroyDescriptorPool", offsetof(DeviceVtbl, DestroyDescriptorPool)},
298 {"vkDestroyDescriptorSetLayout", offsetof(DeviceVtbl, DestroyDescriptorSetLayout)},
299 {"vkDestroyDevice", offsetof(DeviceVtbl, DestroyDevice)},
Jesse Hall04f4f472015-08-16 19:51:04 -0700300 {"vkDestroyEvent", offsetof(DeviceVtbl, DestroyEvent)},
301 {"vkDestroyFence", offsetof(DeviceVtbl, DestroyFence)},
302 {"vkDestroyFramebuffer", offsetof(DeviceVtbl, DestroyFramebuffer)},
303 {"vkDestroyImage", offsetof(DeviceVtbl, DestroyImage)},
304 {"vkDestroyImageView", offsetof(DeviceVtbl, DestroyImageView)},
305 {"vkDestroyPipeline", offsetof(DeviceVtbl, DestroyPipeline)},
306 {"vkDestroyPipelineCache", offsetof(DeviceVtbl, DestroyPipelineCache)},
307 {"vkDestroyPipelineLayout", offsetof(DeviceVtbl, DestroyPipelineLayout)},
308 {"vkDestroyQueryPool", offsetof(DeviceVtbl, DestroyQueryPool)},
309 {"vkDestroyRenderPass", offsetof(DeviceVtbl, DestroyRenderPass)},
310 {"vkDestroySampler", offsetof(DeviceVtbl, DestroySampler)},
311 {"vkDestroySemaphore", offsetof(DeviceVtbl, DestroySemaphore)},
312 {"vkDestroyShader", offsetof(DeviceVtbl, DestroyShader)},
313 {"vkDestroyShaderModule", offsetof(DeviceVtbl, DestroyShaderModule)},
314 {"vkDeviceWaitIdle", offsetof(DeviceVtbl, DeviceWaitIdle)},
315 {"vkEndCommandBuffer", offsetof(DeviceVtbl, EndCommandBuffer)},
316 {"vkFlushMappedMemoryRanges", offsetof(DeviceVtbl, FlushMappedMemoryRanges)},
317 {"vkFreeDescriptorSets", offsetof(DeviceVtbl, FreeDescriptorSets)},
318 {"vkFreeMemory", offsetof(DeviceVtbl, FreeMemory)},
319 {"vkGetBufferMemoryRequirements", offsetof(DeviceVtbl, GetBufferMemoryRequirements)},
320 {"vkGetDeviceMemoryCommitment", offsetof(DeviceVtbl, GetDeviceMemoryCommitment)},
321 {"vkGetDeviceProcAddr", offsetof(DeviceVtbl, GetDeviceProcAddr)},
322 {"vkGetDeviceQueue", offsetof(DeviceVtbl, GetDeviceQueue)},
323 {"vkGetEventStatus", offsetof(DeviceVtbl, GetEventStatus)},
324 {"vkGetFenceStatus", offsetof(DeviceVtbl, GetFenceStatus)},
325 {"vkGetImageMemoryRequirements", offsetof(DeviceVtbl, GetImageMemoryRequirements)},
326 {"vkGetImageSparseMemoryRequirements", offsetof(DeviceVtbl, GetImageSparseMemoryRequirements)},
327 {"vkGetImageSubresourceLayout", offsetof(DeviceVtbl, GetImageSubresourceLayout)},
328 {"vkGetPipelineCacheData", offsetof(DeviceVtbl, GetPipelineCacheData)},
329 {"vkGetPipelineCacheSize", offsetof(DeviceVtbl, GetPipelineCacheSize)},
330 {"vkGetQueryPoolResults", offsetof(DeviceVtbl, GetQueryPoolResults)},
331 {"vkGetRenderAreaGranularity", offsetof(DeviceVtbl, GetRenderAreaGranularity)},
332 {"vkInvalidateMappedMemoryRanges", offsetof(DeviceVtbl, InvalidateMappedMemoryRanges)},
333 {"vkMapMemory", offsetof(DeviceVtbl, MapMemory)},
334 {"vkMergePipelineCaches", offsetof(DeviceVtbl, MergePipelineCaches)},
335 {"vkQueueBindSparseBufferMemory", offsetof(DeviceVtbl, QueueBindSparseBufferMemory)},
336 {"vkQueueBindSparseImageMemory", offsetof(DeviceVtbl, QueueBindSparseImageMemory)},
337 {"vkQueueBindSparseImageOpaqueMemory", offsetof(DeviceVtbl, QueueBindSparseImageOpaqueMemory)},
338 {"vkQueueSignalSemaphore", offsetof(DeviceVtbl, QueueSignalSemaphore)},
339 {"vkQueueSubmit", offsetof(DeviceVtbl, QueueSubmit)},
340 {"vkQueueWaitIdle", offsetof(DeviceVtbl, QueueWaitIdle)},
341 {"vkQueueWaitSemaphore", offsetof(DeviceVtbl, QueueWaitSemaphore)},
342 {"vkResetCommandBuffer", offsetof(DeviceVtbl, ResetCommandBuffer)},
343 {"vkResetCommandPool", offsetof(DeviceVtbl, ResetCommandPool)},
344 {"vkResetDescriptorPool", offsetof(DeviceVtbl, ResetDescriptorPool)},
345 {"vkResetEvent", offsetof(DeviceVtbl, ResetEvent)},
346 {"vkResetFences", offsetof(DeviceVtbl, ResetFences)},
347 {"vkSetEvent", offsetof(DeviceVtbl, SetEvent)},
348 {"vkUnmapMemory", offsetof(DeviceVtbl, UnmapMemory)},
349 {"vkUpdateDescriptorSets", offsetof(DeviceVtbl, UpdateDescriptorSets)},
350 {"vkWaitForFences", offsetof(DeviceVtbl, WaitForFences)},
351 // clang-format on
352};
353
354} // namespace
355
356namespace vulkan {
357
358PFN_vkVoidFunction GetGlobalInstanceProcAddr(const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700359 const NameProcEntry* entry = FindProcEntry(kInstanceProcTbl, name);
360 if (entry)
361 return entry->proc;
362 // vkGetDeviceProcAddr must be available at the global/instance level for
363 // bootstrapping
Jesse Hall04f4f472015-08-16 19:51:04 -0700364 if (strcmp(name, "vkGetDeviceProcAddr") == 0)
365 return reinterpret_cast<PFN_vkVoidFunction>(vkGetDeviceProcAddr);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700366 // special-case extension functions until they can be auto-generated
367 if (strcmp(name, "vkGetPhysicalDeviceSurfaceSupportKHR") == 0)
368 return reinterpret_cast<PFN_vkVoidFunction>(
369 vkGetPhysicalDeviceSurfaceSupportKHR);
370 return nullptr;
Jesse Hall04f4f472015-08-16 19:51:04 -0700371}
372
373PFN_vkVoidFunction GetGlobalDeviceProcAddr(const char* name) {
374 const NameProcEntry* entry = FindProcEntry(kDeviceProcTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700375 if (entry)
376 return entry->proc;
377 // special-case extension functions until they can be auto-generated
378 if (strcmp(name, "vkGetSurfacePropertiesKHR") == 0)
379 return reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfacePropertiesKHR);
380 if (strcmp(name, "vkGetSurfaceFormatsKHR") == 0)
381 return reinterpret_cast<PFN_vkVoidFunction>(vkGetSurfaceFormatsKHR);
382 if (strcmp(name, "vkGetSurfacePresentModesKHR") == 0)
383 return reinterpret_cast<PFN_vkVoidFunction>(
384 vkGetSurfacePresentModesKHR);
385 if (strcmp(name, "vkCreateSwapchainKHR") == 0)
386 return reinterpret_cast<PFN_vkVoidFunction>(vkCreateSwapchainKHR);
387 if (strcmp(name, "vkDestroySwapchainKHR") == 0)
388 return reinterpret_cast<PFN_vkVoidFunction>(vkDestroySwapchainKHR);
389 if (strcmp(name, "vkGetSwapchainImagesKHR") == 0)
390 return reinterpret_cast<PFN_vkVoidFunction>(vkGetSwapchainImagesKHR);
391 if (strcmp(name, "vkAcquireNextImageKHR") == 0)
392 return reinterpret_cast<PFN_vkVoidFunction>(vkAcquireNextImageKHR);
393 if (strcmp(name, "vkQueuePresentKHR") == 0)
394 return reinterpret_cast<PFN_vkVoidFunction>(vkQueuePresentKHR);
395 return nullptr;
Jesse Hall04f4f472015-08-16 19:51:04 -0700396}
397
398PFN_vkVoidFunction GetSpecificInstanceProcAddr(const InstanceVtbl* vtbl,
399 const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700400 size_t offset;
Jesse Hall04f4f472015-08-16 19:51:04 -0700401 const NameOffsetEntry* entry = FindProcEntry(kInstanceOffsetTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700402 if (entry)
403 offset = entry->offset;
404 else if (strcmp(name, "vkGetPhysicalDeviceSurfaceSupportKHR") == 0)
405 offset = offsetof(InstanceVtbl, GetPhysicalDeviceSurfaceSupportKHR);
406 else
Jesse Hall04f4f472015-08-16 19:51:04 -0700407 return nullptr;
408 const unsigned char* base = reinterpret_cast<const unsigned char*>(vtbl);
Michael Lentine62270162015-09-15 13:25:36 -0500409 return *reinterpret_cast<PFN_vkVoidFunction*>(
Jesse Hall6614a572015-10-23 11:33:39 -0500410 const_cast<unsigned char*>(base) + offset);
Jesse Hall04f4f472015-08-16 19:51:04 -0700411}
412
413PFN_vkVoidFunction GetSpecificDeviceProcAddr(const DeviceVtbl* vtbl,
414 const char* name) {
Jesse Hallb1352bc2015-09-04 16:12:33 -0700415 size_t offset;
Jesse Hall04f4f472015-08-16 19:51:04 -0700416 const NameOffsetEntry* entry = FindProcEntry(kDeviceOffsetTbl, name);
Jesse Hallb1352bc2015-09-04 16:12:33 -0700417 if (entry)
418 offset = entry->offset;
419 else if (strcmp(name, "vkGetSurfacePropertiesKHR") == 0)
420 offset = offsetof(DeviceVtbl, GetSurfacePropertiesKHR);
421 else if (strcmp(name, "vkGetSurfaceFormatsKHR") == 0)
422 offset = offsetof(DeviceVtbl, GetSurfaceFormatsKHR);
423 else if (strcmp(name, "vkGetSurfacePresentModesKHR") == 0)
424 offset = offsetof(DeviceVtbl, GetSurfacePresentModesKHR);
425 else if (strcmp(name, "vkCreateSwapchainKHR") == 0)
426 offset = offsetof(DeviceVtbl, CreateSwapchainKHR);
427 else if (strcmp(name, "vkDestroySwapchainKHR") == 0)
428 offset = offsetof(DeviceVtbl, DestroySwapchainKHR);
429 else if (strcmp(name, "vkGetSwapchainImagesKHR") == 0)
430 offset = offsetof(DeviceVtbl, GetSwapchainImagesKHR);
431 else if (strcmp(name, "vkAcquireNextImageKHR") == 0)
432 offset = offsetof(DeviceVtbl, AcquireNextImageKHR);
433 else if (strcmp(name, "vkQueuePresentKHR") == 0)
434 offset = offsetof(DeviceVtbl, QueuePresentKHR);
435 else
Jesse Hall04f4f472015-08-16 19:51:04 -0700436 return nullptr;
437 const unsigned char* base = reinterpret_cast<const unsigned char*>(vtbl);
Michael Lentine62270162015-09-15 13:25:36 -0500438 return *reinterpret_cast<PFN_vkVoidFunction*>(
Jesse Hall6614a572015-10-23 11:33:39 -0500439 const_cast<unsigned char*>(base) + offset);
Jesse Hall04f4f472015-08-16 19:51:04 -0700440}
441
442bool LoadInstanceVtbl(VkInstance instance,
Michael Lentine03c64b02015-08-26 18:27:26 -0500443 VkInstance instance_next,
Jesse Hall04f4f472015-08-16 19:51:04 -0700444 PFN_vkGetInstanceProcAddr get_proc_addr,
445 InstanceVtbl& vtbl) {
446 bool success = true;
447 // clang-format off
Michael Lentine03c64b02015-08-26 18:27:26 -0500448 vtbl.GetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(get_proc_addr(instance_next, "vkGetInstanceProcAddr"));
449 if (UNLIKELY(!vtbl.GetInstanceProcAddr)) {
450 ALOGE("missing instance proc: %s", "vkGetInstanceProcAddr");
451 success = false;
452 }
453 vtbl.CreateInstance = reinterpret_cast<PFN_vkCreateInstance>(get_proc_addr(instance, "vkCreateInstance"));
454 if (UNLIKELY(!vtbl.CreateInstance)) {
455 // This is allowed to fail as the driver doesn't have to return vkCreateInstance when given an instance
456 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700457 vtbl.DestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(get_proc_addr(instance, "vkDestroyInstance"));
458 if (UNLIKELY(!vtbl.DestroyInstance)) {
459 ALOGE("missing instance proc: %s", "vkDestroyInstance");
460 success = false;
461 }
462 vtbl.EnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(get_proc_addr(instance, "vkEnumeratePhysicalDevices"));
463 if (UNLIKELY(!vtbl.EnumeratePhysicalDevices)) {
464 ALOGE("missing instance proc: %s", "vkEnumeratePhysicalDevices");
465 success = false;
466 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700467 vtbl.GetPhysicalDeviceProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceProperties"));
468 if (UNLIKELY(!vtbl.GetPhysicalDeviceProperties)) {
469 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceProperties");
470 success = false;
471 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700472 vtbl.GetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceQueueFamilyProperties"));
473 if (UNLIKELY(!vtbl.GetPhysicalDeviceQueueFamilyProperties)) {
474 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceQueueFamilyProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700475 success = false;
476 }
477 vtbl.GetPhysicalDeviceMemoryProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceMemoryProperties"));
478 if (UNLIKELY(!vtbl.GetPhysicalDeviceMemoryProperties)) {
479 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceMemoryProperties");
480 success = false;
481 }
482 vtbl.GetPhysicalDeviceFeatures = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures>(get_proc_addr(instance, "vkGetPhysicalDeviceFeatures"));
483 if (UNLIKELY(!vtbl.GetPhysicalDeviceFeatures)) {
484 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceFeatures");
485 success = false;
486 }
487 vtbl.GetPhysicalDeviceFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceFormatProperties"));
488 if (UNLIKELY(!vtbl.GetPhysicalDeviceFormatProperties)) {
489 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceFormatProperties");
490 success = false;
491 }
492 vtbl.GetPhysicalDeviceImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceImageFormatProperties"));
493 if (UNLIKELY(!vtbl.GetPhysicalDeviceImageFormatProperties)) {
494 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceImageFormatProperties");
495 success = false;
496 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700497 vtbl.CreateDevice = reinterpret_cast<PFN_vkCreateDevice>(get_proc_addr(instance, "vkCreateDevice"));
498 if (UNLIKELY(!vtbl.CreateDevice)) {
499 ALOGE("missing instance proc: %s", "vkCreateDevice");
500 success = false;
501 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700502 vtbl.EnumerateDeviceLayerProperties = reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(get_proc_addr(instance, "vkEnumerateDeviceLayerProperties"));
503 if (UNLIKELY(!vtbl.EnumerateDeviceLayerProperties)) {
504 ALOGE("missing instance proc: %s", "vkEnumerateDeviceLayerProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700505 success = false;
506 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700507 vtbl.EnumerateDeviceExtensionProperties = reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(get_proc_addr(instance, "vkEnumerateDeviceExtensionProperties"));
508 if (UNLIKELY(!vtbl.EnumerateDeviceExtensionProperties)) {
509 ALOGE("missing instance proc: %s", "vkEnumerateDeviceExtensionProperties");
Jesse Hall04f4f472015-08-16 19:51:04 -0700510 success = false;
511 }
512 vtbl.GetPhysicalDeviceSparseImageFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceSparseImageFormatProperties>(get_proc_addr(instance, "vkGetPhysicalDeviceSparseImageFormatProperties"));
513 if (UNLIKELY(!vtbl.GetPhysicalDeviceSparseImageFormatProperties)) {
514 ALOGE("missing instance proc: %s", "vkGetPhysicalDeviceSparseImageFormatProperties");
515 success = false;
516 }
517 // clang-format on
518 return success;
519}
520
521bool LoadDeviceVtbl(VkDevice device,
Michael Lentine03c64b02015-08-26 18:27:26 -0500522 VkDevice device_next,
Jesse Hall04f4f472015-08-16 19:51:04 -0700523 PFN_vkGetDeviceProcAddr get_proc_addr,
524 DeviceVtbl& vtbl) {
525 bool success = true;
526 // clang-format off
Michael Lentine03c64b02015-08-26 18:27:26 -0500527 vtbl.GetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(get_proc_addr(device_next, "vkGetDeviceProcAddr"));
Jesse Hall04f4f472015-08-16 19:51:04 -0700528 if (UNLIKELY(!vtbl.GetDeviceProcAddr)) {
529 ALOGE("missing device proc: %s", "vkGetDeviceProcAddr");
530 success = false;
531 }
532 vtbl.DestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(get_proc_addr(device, "vkDestroyDevice"));
533 if (UNLIKELY(!vtbl.DestroyDevice)) {
534 ALOGE("missing device proc: %s", "vkDestroyDevice");
535 success = false;
536 }
537 vtbl.GetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(get_proc_addr(device, "vkGetDeviceQueue"));
538 if (UNLIKELY(!vtbl.GetDeviceQueue)) {
539 ALOGE("missing device proc: %s", "vkGetDeviceQueue");
540 success = false;
541 }
542 vtbl.QueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(get_proc_addr(device, "vkQueueSubmit"));
543 if (UNLIKELY(!vtbl.QueueSubmit)) {
544 ALOGE("missing device proc: %s", "vkQueueSubmit");
545 success = false;
546 }
547 vtbl.QueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(get_proc_addr(device, "vkQueueWaitIdle"));
548 if (UNLIKELY(!vtbl.QueueWaitIdle)) {
549 ALOGE("missing device proc: %s", "vkQueueWaitIdle");
550 success = false;
551 }
552 vtbl.DeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(get_proc_addr(device, "vkDeviceWaitIdle"));
553 if (UNLIKELY(!vtbl.DeviceWaitIdle)) {
554 ALOGE("missing device proc: %s", "vkDeviceWaitIdle");
555 success = false;
556 }
557 vtbl.AllocMemory = reinterpret_cast<PFN_vkAllocMemory>(get_proc_addr(device, "vkAllocMemory"));
558 if (UNLIKELY(!vtbl.AllocMemory)) {
559 ALOGE("missing device proc: %s", "vkAllocMemory");
560 success = false;
561 }
562 vtbl.FreeMemory = reinterpret_cast<PFN_vkFreeMemory>(get_proc_addr(device, "vkFreeMemory"));
563 if (UNLIKELY(!vtbl.FreeMemory)) {
564 ALOGE("missing device proc: %s", "vkFreeMemory");
565 success = false;
566 }
567 vtbl.MapMemory = reinterpret_cast<PFN_vkMapMemory>(get_proc_addr(device, "vkMapMemory"));
568 if (UNLIKELY(!vtbl.MapMemory)) {
569 ALOGE("missing device proc: %s", "vkMapMemory");
570 success = false;
571 }
572 vtbl.UnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(get_proc_addr(device, "vkUnmapMemory"));
573 if (UNLIKELY(!vtbl.UnmapMemory)) {
574 ALOGE("missing device proc: %s", "vkUnmapMemory");
575 success = false;
576 }
577 vtbl.FlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(get_proc_addr(device, "vkFlushMappedMemoryRanges"));
578 if (UNLIKELY(!vtbl.FlushMappedMemoryRanges)) {
579 ALOGE("missing device proc: %s", "vkFlushMappedMemoryRanges");
580 success = false;
581 }
582 vtbl.InvalidateMappedMemoryRanges = reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>(get_proc_addr(device, "vkInvalidateMappedMemoryRanges"));
583 if (UNLIKELY(!vtbl.InvalidateMappedMemoryRanges)) {
584 ALOGE("missing device proc: %s", "vkInvalidateMappedMemoryRanges");
585 success = false;
586 }
587 vtbl.GetDeviceMemoryCommitment = reinterpret_cast<PFN_vkGetDeviceMemoryCommitment>(get_proc_addr(device, "vkGetDeviceMemoryCommitment"));
588 if (UNLIKELY(!vtbl.GetDeviceMemoryCommitment)) {
589 ALOGE("missing device proc: %s", "vkGetDeviceMemoryCommitment");
590 success = false;
591 }
592 vtbl.GetBufferMemoryRequirements = reinterpret_cast<PFN_vkGetBufferMemoryRequirements>(get_proc_addr(device, "vkGetBufferMemoryRequirements"));
593 if (UNLIKELY(!vtbl.GetBufferMemoryRequirements)) {
594 ALOGE("missing device proc: %s", "vkGetBufferMemoryRequirements");
595 success = false;
596 }
597 vtbl.BindBufferMemory = reinterpret_cast<PFN_vkBindBufferMemory>(get_proc_addr(device, "vkBindBufferMemory"));
598 if (UNLIKELY(!vtbl.BindBufferMemory)) {
599 ALOGE("missing device proc: %s", "vkBindBufferMemory");
600 success = false;
601 }
602 vtbl.GetImageMemoryRequirements = reinterpret_cast<PFN_vkGetImageMemoryRequirements>(get_proc_addr(device, "vkGetImageMemoryRequirements"));
603 if (UNLIKELY(!vtbl.GetImageMemoryRequirements)) {
604 ALOGE("missing device proc: %s", "vkGetImageMemoryRequirements");
605 success = false;
606 }
607 vtbl.BindImageMemory = reinterpret_cast<PFN_vkBindImageMemory>(get_proc_addr(device, "vkBindImageMemory"));
608 if (UNLIKELY(!vtbl.BindImageMemory)) {
609 ALOGE("missing device proc: %s", "vkBindImageMemory");
610 success = false;
611 }
612 vtbl.GetImageSparseMemoryRequirements = reinterpret_cast<PFN_vkGetImageSparseMemoryRequirements>(get_proc_addr(device, "vkGetImageSparseMemoryRequirements"));
613 if (UNLIKELY(!vtbl.GetImageSparseMemoryRequirements)) {
614 ALOGE("missing device proc: %s", "vkGetImageSparseMemoryRequirements");
615 success = false;
616 }
617 vtbl.QueueBindSparseBufferMemory = reinterpret_cast<PFN_vkQueueBindSparseBufferMemory>(get_proc_addr(device, "vkQueueBindSparseBufferMemory"));
618 if (UNLIKELY(!vtbl.QueueBindSparseBufferMemory)) {
619 ALOGE("missing device proc: %s", "vkQueueBindSparseBufferMemory");
620 success = false;
621 }
622 vtbl.QueueBindSparseImageOpaqueMemory = reinterpret_cast<PFN_vkQueueBindSparseImageOpaqueMemory>(get_proc_addr(device, "vkQueueBindSparseImageOpaqueMemory"));
623 if (UNLIKELY(!vtbl.QueueBindSparseImageOpaqueMemory)) {
624 ALOGE("missing device proc: %s", "vkQueueBindSparseImageOpaqueMemory");
625 success = false;
626 }
627 vtbl.QueueBindSparseImageMemory = reinterpret_cast<PFN_vkQueueBindSparseImageMemory>(get_proc_addr(device, "vkQueueBindSparseImageMemory"));
628 if (UNLIKELY(!vtbl.QueueBindSparseImageMemory)) {
629 ALOGE("missing device proc: %s", "vkQueueBindSparseImageMemory");
630 success = false;
631 }
632 vtbl.CreateFence = reinterpret_cast<PFN_vkCreateFence>(get_proc_addr(device, "vkCreateFence"));
633 if (UNLIKELY(!vtbl.CreateFence)) {
634 ALOGE("missing device proc: %s", "vkCreateFence");
635 success = false;
636 }
637 vtbl.DestroyFence = reinterpret_cast<PFN_vkDestroyFence>(get_proc_addr(device, "vkDestroyFence"));
638 if (UNLIKELY(!vtbl.DestroyFence)) {
639 ALOGE("missing device proc: %s", "vkDestroyFence");
640 success = false;
641 }
642 vtbl.ResetFences = reinterpret_cast<PFN_vkResetFences>(get_proc_addr(device, "vkResetFences"));
643 if (UNLIKELY(!vtbl.ResetFences)) {
644 ALOGE("missing device proc: %s", "vkResetFences");
645 success = false;
646 }
647 vtbl.GetFenceStatus = reinterpret_cast<PFN_vkGetFenceStatus>(get_proc_addr(device, "vkGetFenceStatus"));
648 if (UNLIKELY(!vtbl.GetFenceStatus)) {
649 ALOGE("missing device proc: %s", "vkGetFenceStatus");
650 success = false;
651 }
652 vtbl.WaitForFences = reinterpret_cast<PFN_vkWaitForFences>(get_proc_addr(device, "vkWaitForFences"));
653 if (UNLIKELY(!vtbl.WaitForFences)) {
654 ALOGE("missing device proc: %s", "vkWaitForFences");
655 success = false;
656 }
657 vtbl.CreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(get_proc_addr(device, "vkCreateSemaphore"));
658 if (UNLIKELY(!vtbl.CreateSemaphore)) {
659 ALOGE("missing device proc: %s", "vkCreateSemaphore");
660 success = false;
661 }
662 vtbl.DestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(get_proc_addr(device, "vkDestroySemaphore"));
663 if (UNLIKELY(!vtbl.DestroySemaphore)) {
664 ALOGE("missing device proc: %s", "vkDestroySemaphore");
665 success = false;
666 }
667 vtbl.QueueSignalSemaphore = reinterpret_cast<PFN_vkQueueSignalSemaphore>(get_proc_addr(device, "vkQueueSignalSemaphore"));
668 if (UNLIKELY(!vtbl.QueueSignalSemaphore)) {
669 ALOGE("missing device proc: %s", "vkQueueSignalSemaphore");
670 success = false;
671 }
672 vtbl.QueueWaitSemaphore = reinterpret_cast<PFN_vkQueueWaitSemaphore>(get_proc_addr(device, "vkQueueWaitSemaphore"));
673 if (UNLIKELY(!vtbl.QueueWaitSemaphore)) {
674 ALOGE("missing device proc: %s", "vkQueueWaitSemaphore");
675 success = false;
676 }
677 vtbl.CreateEvent = reinterpret_cast<PFN_vkCreateEvent>(get_proc_addr(device, "vkCreateEvent"));
678 if (UNLIKELY(!vtbl.CreateEvent)) {
679 ALOGE("missing device proc: %s", "vkCreateEvent");
680 success = false;
681 }
682 vtbl.DestroyEvent = reinterpret_cast<PFN_vkDestroyEvent>(get_proc_addr(device, "vkDestroyEvent"));
683 if (UNLIKELY(!vtbl.DestroyEvent)) {
684 ALOGE("missing device proc: %s", "vkDestroyEvent");
685 success = false;
686 }
687 vtbl.GetEventStatus = reinterpret_cast<PFN_vkGetEventStatus>(get_proc_addr(device, "vkGetEventStatus"));
688 if (UNLIKELY(!vtbl.GetEventStatus)) {
689 ALOGE("missing device proc: %s", "vkGetEventStatus");
690 success = false;
691 }
692 vtbl.SetEvent = reinterpret_cast<PFN_vkSetEvent>(get_proc_addr(device, "vkSetEvent"));
693 if (UNLIKELY(!vtbl.SetEvent)) {
694 ALOGE("missing device proc: %s", "vkSetEvent");
695 success = false;
696 }
697 vtbl.ResetEvent = reinterpret_cast<PFN_vkResetEvent>(get_proc_addr(device, "vkResetEvent"));
698 if (UNLIKELY(!vtbl.ResetEvent)) {
699 ALOGE("missing device proc: %s", "vkResetEvent");
700 success = false;
701 }
702 vtbl.CreateQueryPool = reinterpret_cast<PFN_vkCreateQueryPool>(get_proc_addr(device, "vkCreateQueryPool"));
703 if (UNLIKELY(!vtbl.CreateQueryPool)) {
704 ALOGE("missing device proc: %s", "vkCreateQueryPool");
705 success = false;
706 }
707 vtbl.DestroyQueryPool = reinterpret_cast<PFN_vkDestroyQueryPool>(get_proc_addr(device, "vkDestroyQueryPool"));
708 if (UNLIKELY(!vtbl.DestroyQueryPool)) {
709 ALOGE("missing device proc: %s", "vkDestroyQueryPool");
710 success = false;
711 }
712 vtbl.GetQueryPoolResults = reinterpret_cast<PFN_vkGetQueryPoolResults>(get_proc_addr(device, "vkGetQueryPoolResults"));
713 if (UNLIKELY(!vtbl.GetQueryPoolResults)) {
714 ALOGE("missing device proc: %s", "vkGetQueryPoolResults");
715 success = false;
716 }
717 vtbl.CreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(get_proc_addr(device, "vkCreateBuffer"));
718 if (UNLIKELY(!vtbl.CreateBuffer)) {
719 ALOGE("missing device proc: %s", "vkCreateBuffer");
720 success = false;
721 }
722 vtbl.DestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(get_proc_addr(device, "vkDestroyBuffer"));
723 if (UNLIKELY(!vtbl.DestroyBuffer)) {
724 ALOGE("missing device proc: %s", "vkDestroyBuffer");
725 success = false;
726 }
727 vtbl.CreateBufferView = reinterpret_cast<PFN_vkCreateBufferView>(get_proc_addr(device, "vkCreateBufferView"));
728 if (UNLIKELY(!vtbl.CreateBufferView)) {
729 ALOGE("missing device proc: %s", "vkCreateBufferView");
730 success = false;
731 }
732 vtbl.DestroyBufferView = reinterpret_cast<PFN_vkDestroyBufferView>(get_proc_addr(device, "vkDestroyBufferView"));
733 if (UNLIKELY(!vtbl.DestroyBufferView)) {
734 ALOGE("missing device proc: %s", "vkDestroyBufferView");
735 success = false;
736 }
737 vtbl.CreateImage = reinterpret_cast<PFN_vkCreateImage>(get_proc_addr(device, "vkCreateImage"));
738 if (UNLIKELY(!vtbl.CreateImage)) {
739 ALOGE("missing device proc: %s", "vkCreateImage");
740 success = false;
741 }
742 vtbl.DestroyImage = reinterpret_cast<PFN_vkDestroyImage>(get_proc_addr(device, "vkDestroyImage"));
743 if (UNLIKELY(!vtbl.DestroyImage)) {
744 ALOGE("missing device proc: %s", "vkDestroyImage");
745 success = false;
746 }
747 vtbl.GetImageSubresourceLayout = reinterpret_cast<PFN_vkGetImageSubresourceLayout>(get_proc_addr(device, "vkGetImageSubresourceLayout"));
748 if (UNLIKELY(!vtbl.GetImageSubresourceLayout)) {
749 ALOGE("missing device proc: %s", "vkGetImageSubresourceLayout");
750 success = false;
751 }
752 vtbl.CreateImageView = reinterpret_cast<PFN_vkCreateImageView>(get_proc_addr(device, "vkCreateImageView"));
753 if (UNLIKELY(!vtbl.CreateImageView)) {
754 ALOGE("missing device proc: %s", "vkCreateImageView");
755 success = false;
756 }
757 vtbl.DestroyImageView = reinterpret_cast<PFN_vkDestroyImageView>(get_proc_addr(device, "vkDestroyImageView"));
758 if (UNLIKELY(!vtbl.DestroyImageView)) {
759 ALOGE("missing device proc: %s", "vkDestroyImageView");
760 success = false;
761 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700762 vtbl.CreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(get_proc_addr(device, "vkCreateShaderModule"));
763 if (UNLIKELY(!vtbl.CreateShaderModule)) {
764 ALOGE("missing device proc: %s", "vkCreateShaderModule");
765 success = false;
766 }
767 vtbl.DestroyShaderModule = reinterpret_cast<PFN_vkDestroyShaderModule>(get_proc_addr(device, "vkDestroyShaderModule"));
768 if (UNLIKELY(!vtbl.DestroyShaderModule)) {
769 ALOGE("missing device proc: %s", "vkDestroyShaderModule");
770 success = false;
771 }
772 vtbl.CreateShader = reinterpret_cast<PFN_vkCreateShader>(get_proc_addr(device, "vkCreateShader"));
773 if (UNLIKELY(!vtbl.CreateShader)) {
774 ALOGE("missing device proc: %s", "vkCreateShader");
775 success = false;
776 }
777 vtbl.DestroyShader = reinterpret_cast<PFN_vkDestroyShader>(get_proc_addr(device, "vkDestroyShader"));
778 if (UNLIKELY(!vtbl.DestroyShader)) {
779 ALOGE("missing device proc: %s", "vkDestroyShader");
780 success = false;
781 }
782 vtbl.CreatePipelineCache = reinterpret_cast<PFN_vkCreatePipelineCache>(get_proc_addr(device, "vkCreatePipelineCache"));
783 if (UNLIKELY(!vtbl.CreatePipelineCache)) {
784 ALOGE("missing device proc: %s", "vkCreatePipelineCache");
785 success = false;
786 }
787 vtbl.DestroyPipelineCache = reinterpret_cast<PFN_vkDestroyPipelineCache>(get_proc_addr(device, "vkDestroyPipelineCache"));
788 if (UNLIKELY(!vtbl.DestroyPipelineCache)) {
789 ALOGE("missing device proc: %s", "vkDestroyPipelineCache");
790 success = false;
791 }
792 vtbl.GetPipelineCacheSize = reinterpret_cast<PFN_vkGetPipelineCacheSize>(get_proc_addr(device, "vkGetPipelineCacheSize"));
793 if (UNLIKELY(!vtbl.GetPipelineCacheSize)) {
794 ALOGE("missing device proc: %s", "vkGetPipelineCacheSize");
795 success = false;
796 }
797 vtbl.GetPipelineCacheData = reinterpret_cast<PFN_vkGetPipelineCacheData>(get_proc_addr(device, "vkGetPipelineCacheData"));
798 if (UNLIKELY(!vtbl.GetPipelineCacheData)) {
799 ALOGE("missing device proc: %s", "vkGetPipelineCacheData");
800 success = false;
801 }
802 vtbl.MergePipelineCaches = reinterpret_cast<PFN_vkMergePipelineCaches>(get_proc_addr(device, "vkMergePipelineCaches"));
803 if (UNLIKELY(!vtbl.MergePipelineCaches)) {
804 ALOGE("missing device proc: %s", "vkMergePipelineCaches");
805 success = false;
806 }
807 vtbl.CreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(get_proc_addr(device, "vkCreateGraphicsPipelines"));
808 if (UNLIKELY(!vtbl.CreateGraphicsPipelines)) {
809 ALOGE("missing device proc: %s", "vkCreateGraphicsPipelines");
810 success = false;
811 }
812 vtbl.CreateComputePipelines = reinterpret_cast<PFN_vkCreateComputePipelines>(get_proc_addr(device, "vkCreateComputePipelines"));
813 if (UNLIKELY(!vtbl.CreateComputePipelines)) {
814 ALOGE("missing device proc: %s", "vkCreateComputePipelines");
815 success = false;
816 }
817 vtbl.DestroyPipeline = reinterpret_cast<PFN_vkDestroyPipeline>(get_proc_addr(device, "vkDestroyPipeline"));
818 if (UNLIKELY(!vtbl.DestroyPipeline)) {
819 ALOGE("missing device proc: %s", "vkDestroyPipeline");
820 success = false;
821 }
822 vtbl.CreatePipelineLayout = reinterpret_cast<PFN_vkCreatePipelineLayout>(get_proc_addr(device, "vkCreatePipelineLayout"));
823 if (UNLIKELY(!vtbl.CreatePipelineLayout)) {
824 ALOGE("missing device proc: %s", "vkCreatePipelineLayout");
825 success = false;
826 }
827 vtbl.DestroyPipelineLayout = reinterpret_cast<PFN_vkDestroyPipelineLayout>(get_proc_addr(device, "vkDestroyPipelineLayout"));
828 if (UNLIKELY(!vtbl.DestroyPipelineLayout)) {
829 ALOGE("missing device proc: %s", "vkDestroyPipelineLayout");
830 success = false;
831 }
832 vtbl.CreateSampler = reinterpret_cast<PFN_vkCreateSampler>(get_proc_addr(device, "vkCreateSampler"));
833 if (UNLIKELY(!vtbl.CreateSampler)) {
834 ALOGE("missing device proc: %s", "vkCreateSampler");
835 success = false;
836 }
837 vtbl.DestroySampler = reinterpret_cast<PFN_vkDestroySampler>(get_proc_addr(device, "vkDestroySampler"));
838 if (UNLIKELY(!vtbl.DestroySampler)) {
839 ALOGE("missing device proc: %s", "vkDestroySampler");
840 success = false;
841 }
842 vtbl.CreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(get_proc_addr(device, "vkCreateDescriptorSetLayout"));
843 if (UNLIKELY(!vtbl.CreateDescriptorSetLayout)) {
844 ALOGE("missing device proc: %s", "vkCreateDescriptorSetLayout");
845 success = false;
846 }
847 vtbl.DestroyDescriptorSetLayout = reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>(get_proc_addr(device, "vkDestroyDescriptorSetLayout"));
848 if (UNLIKELY(!vtbl.DestroyDescriptorSetLayout)) {
849 ALOGE("missing device proc: %s", "vkDestroyDescriptorSetLayout");
850 success = false;
851 }
852 vtbl.CreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(get_proc_addr(device, "vkCreateDescriptorPool"));
853 if (UNLIKELY(!vtbl.CreateDescriptorPool)) {
854 ALOGE("missing device proc: %s", "vkCreateDescriptorPool");
855 success = false;
856 }
857 vtbl.DestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>(get_proc_addr(device, "vkDestroyDescriptorPool"));
858 if (UNLIKELY(!vtbl.DestroyDescriptorPool)) {
859 ALOGE("missing device proc: %s", "vkDestroyDescriptorPool");
860 success = false;
861 }
862 vtbl.ResetDescriptorPool = reinterpret_cast<PFN_vkResetDescriptorPool>(get_proc_addr(device, "vkResetDescriptorPool"));
863 if (UNLIKELY(!vtbl.ResetDescriptorPool)) {
864 ALOGE("missing device proc: %s", "vkResetDescriptorPool");
865 success = false;
866 }
867 vtbl.AllocDescriptorSets = reinterpret_cast<PFN_vkAllocDescriptorSets>(get_proc_addr(device, "vkAllocDescriptorSets"));
868 if (UNLIKELY(!vtbl.AllocDescriptorSets)) {
869 ALOGE("missing device proc: %s", "vkAllocDescriptorSets");
870 success = false;
871 }
872 vtbl.FreeDescriptorSets = reinterpret_cast<PFN_vkFreeDescriptorSets>(get_proc_addr(device, "vkFreeDescriptorSets"));
873 if (UNLIKELY(!vtbl.FreeDescriptorSets)) {
874 ALOGE("missing device proc: %s", "vkFreeDescriptorSets");
875 success = false;
876 }
877 vtbl.UpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(get_proc_addr(device, "vkUpdateDescriptorSets"));
878 if (UNLIKELY(!vtbl.UpdateDescriptorSets)) {
879 ALOGE("missing device proc: %s", "vkUpdateDescriptorSets");
880 success = false;
881 }
Jesse Hall04f4f472015-08-16 19:51:04 -0700882 vtbl.CreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(get_proc_addr(device, "vkCreateFramebuffer"));
883 if (UNLIKELY(!vtbl.CreateFramebuffer)) {
884 ALOGE("missing device proc: %s", "vkCreateFramebuffer");
885 success = false;
886 }
887 vtbl.DestroyFramebuffer = reinterpret_cast<PFN_vkDestroyFramebuffer>(get_proc_addr(device, "vkDestroyFramebuffer"));
888 if (UNLIKELY(!vtbl.DestroyFramebuffer)) {
889 ALOGE("missing device proc: %s", "vkDestroyFramebuffer");
890 success = false;
891 }
892 vtbl.CreateRenderPass = reinterpret_cast<PFN_vkCreateRenderPass>(get_proc_addr(device, "vkCreateRenderPass"));
893 if (UNLIKELY(!vtbl.CreateRenderPass)) {
894 ALOGE("missing device proc: %s", "vkCreateRenderPass");
895 success = false;
896 }
897 vtbl.DestroyRenderPass = reinterpret_cast<PFN_vkDestroyRenderPass>(get_proc_addr(device, "vkDestroyRenderPass"));
898 if (UNLIKELY(!vtbl.DestroyRenderPass)) {
899 ALOGE("missing device proc: %s", "vkDestroyRenderPass");
900 success = false;
901 }
902 vtbl.GetRenderAreaGranularity = reinterpret_cast<PFN_vkGetRenderAreaGranularity>(get_proc_addr(device, "vkGetRenderAreaGranularity"));
903 if (UNLIKELY(!vtbl.GetRenderAreaGranularity)) {
904 ALOGE("missing device proc: %s", "vkGetRenderAreaGranularity");
905 success = false;
906 }
907 vtbl.CreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(get_proc_addr(device, "vkCreateCommandPool"));
908 if (UNLIKELY(!vtbl.CreateCommandPool)) {
909 ALOGE("missing device proc: %s", "vkCreateCommandPool");
910 success = false;
911 }
912 vtbl.DestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(get_proc_addr(device, "vkDestroyCommandPool"));
913 if (UNLIKELY(!vtbl.DestroyCommandPool)) {
914 ALOGE("missing device proc: %s", "vkDestroyCommandPool");
915 success = false;
916 }
917 vtbl.ResetCommandPool = reinterpret_cast<PFN_vkResetCommandPool>(get_proc_addr(device, "vkResetCommandPool"));
918 if (UNLIKELY(!vtbl.ResetCommandPool)) {
919 ALOGE("missing device proc: %s", "vkResetCommandPool");
920 success = false;
921 }
922 vtbl.CreateCommandBuffer = reinterpret_cast<PFN_vkCreateCommandBuffer>(get_proc_addr(device, "vkCreateCommandBuffer"));
923 if (UNLIKELY(!vtbl.CreateCommandBuffer)) {
924 ALOGE("missing device proc: %s", "vkCreateCommandBuffer");
925 success = false;
926 }
927 vtbl.DestroyCommandBuffer = reinterpret_cast<PFN_vkDestroyCommandBuffer>(get_proc_addr(device, "vkDestroyCommandBuffer"));
928 if (UNLIKELY(!vtbl.DestroyCommandBuffer)) {
929 ALOGE("missing device proc: %s", "vkDestroyCommandBuffer");
930 success = false;
931 }
932 vtbl.BeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(get_proc_addr(device, "vkBeginCommandBuffer"));
933 if (UNLIKELY(!vtbl.BeginCommandBuffer)) {
934 ALOGE("missing device proc: %s", "vkBeginCommandBuffer");
935 success = false;
936 }
937 vtbl.EndCommandBuffer = reinterpret_cast<PFN_vkEndCommandBuffer>(get_proc_addr(device, "vkEndCommandBuffer"));
938 if (UNLIKELY(!vtbl.EndCommandBuffer)) {
939 ALOGE("missing device proc: %s", "vkEndCommandBuffer");
940 success = false;
941 }
942 vtbl.ResetCommandBuffer = reinterpret_cast<PFN_vkResetCommandBuffer>(get_proc_addr(device, "vkResetCommandBuffer"));
943 if (UNLIKELY(!vtbl.ResetCommandBuffer)) {
944 ALOGE("missing device proc: %s", "vkResetCommandBuffer");
945 success = false;
946 }
947 vtbl.CmdBindPipeline = reinterpret_cast<PFN_vkCmdBindPipeline>(get_proc_addr(device, "vkCmdBindPipeline"));
948 if (UNLIKELY(!vtbl.CmdBindPipeline)) {
949 ALOGE("missing device proc: %s", "vkCmdBindPipeline");
950 success = false;
951 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700952 vtbl.CmdSetViewport = reinterpret_cast<PFN_vkCmdSetViewport>(get_proc_addr(device, "vkCmdSetViewport"));
953 if (UNLIKELY(!vtbl.CmdSetViewport)) {
954 ALOGE("missing device proc: %s", "vkCmdSetViewport");
Jesse Hall04f4f472015-08-16 19:51:04 -0700955 success = false;
956 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700957 vtbl.CmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(get_proc_addr(device, "vkCmdSetScissor"));
958 if (UNLIKELY(!vtbl.CmdSetScissor)) {
959 ALOGE("missing device proc: %s", "vkCmdSetScissor");
Jesse Hall04f4f472015-08-16 19:51:04 -0700960 success = false;
961 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700962 vtbl.CmdSetLineWidth = reinterpret_cast<PFN_vkCmdSetLineWidth>(get_proc_addr(device, "vkCmdSetLineWidth"));
963 if (UNLIKELY(!vtbl.CmdSetLineWidth)) {
964 ALOGE("missing device proc: %s", "vkCmdSetLineWidth");
Jesse Hall04f4f472015-08-16 19:51:04 -0700965 success = false;
966 }
Jesse Hall5ae3abb2015-10-08 14:00:22 -0700967 vtbl.CmdSetDepthBias = reinterpret_cast<PFN_vkCmdSetDepthBias>(get_proc_addr(device, "vkCmdSetDepthBias"));
968 if (UNLIKELY(!vtbl.CmdSetDepthBias)) {
969 ALOGE("missing device proc: %s", "vkCmdSetDepthBias");
970 success = false;
971 }
972 vtbl.CmdSetBlendConstants = reinterpret_cast<PFN_vkCmdSetBlendConstants>(get_proc_addr(device, "vkCmdSetBlendConstants"));
973 if (UNLIKELY(!vtbl.CmdSetBlendConstants)) {
974 ALOGE("missing device proc: %s", "vkCmdSetBlendConstants");
975 success = false;
976 }
977 vtbl.CmdSetDepthBounds = reinterpret_cast<PFN_vkCmdSetDepthBounds>(get_proc_addr(device, "vkCmdSetDepthBounds"));
978 if (UNLIKELY(!vtbl.CmdSetDepthBounds)) {
979 ALOGE("missing device proc: %s", "vkCmdSetDepthBounds");
980 success = false;
981 }
982 vtbl.CmdSetStencilCompareMask = reinterpret_cast<PFN_vkCmdSetStencilCompareMask>(get_proc_addr(device, "vkCmdSetStencilCompareMask"));
983 if (UNLIKELY(!vtbl.CmdSetStencilCompareMask)) {
984 ALOGE("missing device proc: %s", "vkCmdSetStencilCompareMask");
985 success = false;
986 }
987 vtbl.CmdSetStencilWriteMask = reinterpret_cast<PFN_vkCmdSetStencilWriteMask>(get_proc_addr(device, "vkCmdSetStencilWriteMask"));
988 if (UNLIKELY(!vtbl.CmdSetStencilWriteMask)) {
989 ALOGE("missing device proc: %s", "vkCmdSetStencilWriteMask");
990 success = false;
991 }
992 vtbl.CmdSetStencilReference = reinterpret_cast<PFN_vkCmdSetStencilReference>(get_proc_addr(device, "vkCmdSetStencilReference"));
993 if (UNLIKELY(!vtbl.CmdSetStencilReference)) {
994 ALOGE("missing device proc: %s", "vkCmdSetStencilReference");
Jesse Hall04f4f472015-08-16 19:51:04 -0700995 success = false;
996 }
997 vtbl.CmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>(get_proc_addr(device, "vkCmdBindDescriptorSets"));
998 if (UNLIKELY(!vtbl.CmdBindDescriptorSets)) {
999 ALOGE("missing device proc: %s", "vkCmdBindDescriptorSets");
1000 success = false;
1001 }
1002 vtbl.CmdBindIndexBuffer = reinterpret_cast<PFN_vkCmdBindIndexBuffer>(get_proc_addr(device, "vkCmdBindIndexBuffer"));
1003 if (UNLIKELY(!vtbl.CmdBindIndexBuffer)) {
1004 ALOGE("missing device proc: %s", "vkCmdBindIndexBuffer");
1005 success = false;
1006 }
1007 vtbl.CmdBindVertexBuffers = reinterpret_cast<PFN_vkCmdBindVertexBuffers>(get_proc_addr(device, "vkCmdBindVertexBuffers"));
1008 if (UNLIKELY(!vtbl.CmdBindVertexBuffers)) {
1009 ALOGE("missing device proc: %s", "vkCmdBindVertexBuffers");
1010 success = false;
1011 }
1012 vtbl.CmdDraw = reinterpret_cast<PFN_vkCmdDraw>(get_proc_addr(device, "vkCmdDraw"));
1013 if (UNLIKELY(!vtbl.CmdDraw)) {
1014 ALOGE("missing device proc: %s", "vkCmdDraw");
1015 success = false;
1016 }
1017 vtbl.CmdDrawIndexed = reinterpret_cast<PFN_vkCmdDrawIndexed>(get_proc_addr(device, "vkCmdDrawIndexed"));
1018 if (UNLIKELY(!vtbl.CmdDrawIndexed)) {
1019 ALOGE("missing device proc: %s", "vkCmdDrawIndexed");
1020 success = false;
1021 }
1022 vtbl.CmdDrawIndirect = reinterpret_cast<PFN_vkCmdDrawIndirect>(get_proc_addr(device, "vkCmdDrawIndirect"));
1023 if (UNLIKELY(!vtbl.CmdDrawIndirect)) {
1024 ALOGE("missing device proc: %s", "vkCmdDrawIndirect");
1025 success = false;
1026 }
1027 vtbl.CmdDrawIndexedIndirect = reinterpret_cast<PFN_vkCmdDrawIndexedIndirect>(get_proc_addr(device, "vkCmdDrawIndexedIndirect"));
1028 if (UNLIKELY(!vtbl.CmdDrawIndexedIndirect)) {
1029 ALOGE("missing device proc: %s", "vkCmdDrawIndexedIndirect");
1030 success = false;
1031 }
1032 vtbl.CmdDispatch = reinterpret_cast<PFN_vkCmdDispatch>(get_proc_addr(device, "vkCmdDispatch"));
1033 if (UNLIKELY(!vtbl.CmdDispatch)) {
1034 ALOGE("missing device proc: %s", "vkCmdDispatch");
1035 success = false;
1036 }
1037 vtbl.CmdDispatchIndirect = reinterpret_cast<PFN_vkCmdDispatchIndirect>(get_proc_addr(device, "vkCmdDispatchIndirect"));
1038 if (UNLIKELY(!vtbl.CmdDispatchIndirect)) {
1039 ALOGE("missing device proc: %s", "vkCmdDispatchIndirect");
1040 success = false;
1041 }
1042 vtbl.CmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(get_proc_addr(device, "vkCmdCopyBuffer"));
1043 if (UNLIKELY(!vtbl.CmdCopyBuffer)) {
1044 ALOGE("missing device proc: %s", "vkCmdCopyBuffer");
1045 success = false;
1046 }
1047 vtbl.CmdCopyImage = reinterpret_cast<PFN_vkCmdCopyImage>(get_proc_addr(device, "vkCmdCopyImage"));
1048 if (UNLIKELY(!vtbl.CmdCopyImage)) {
1049 ALOGE("missing device proc: %s", "vkCmdCopyImage");
1050 success = false;
1051 }
1052 vtbl.CmdBlitImage = reinterpret_cast<PFN_vkCmdBlitImage>(get_proc_addr(device, "vkCmdBlitImage"));
1053 if (UNLIKELY(!vtbl.CmdBlitImage)) {
1054 ALOGE("missing device proc: %s", "vkCmdBlitImage");
1055 success = false;
1056 }
1057 vtbl.CmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(get_proc_addr(device, "vkCmdCopyBufferToImage"));
1058 if (UNLIKELY(!vtbl.CmdCopyBufferToImage)) {
1059 ALOGE("missing device proc: %s", "vkCmdCopyBufferToImage");
1060 success = false;
1061 }
1062 vtbl.CmdCopyImageToBuffer = reinterpret_cast<PFN_vkCmdCopyImageToBuffer>(get_proc_addr(device, "vkCmdCopyImageToBuffer"));
1063 if (UNLIKELY(!vtbl.CmdCopyImageToBuffer)) {
1064 ALOGE("missing device proc: %s", "vkCmdCopyImageToBuffer");
1065 success = false;
1066 }
1067 vtbl.CmdUpdateBuffer = reinterpret_cast<PFN_vkCmdUpdateBuffer>(get_proc_addr(device, "vkCmdUpdateBuffer"));
1068 if (UNLIKELY(!vtbl.CmdUpdateBuffer)) {
1069 ALOGE("missing device proc: %s", "vkCmdUpdateBuffer");
1070 success = false;
1071 }
1072 vtbl.CmdFillBuffer = reinterpret_cast<PFN_vkCmdFillBuffer>(get_proc_addr(device, "vkCmdFillBuffer"));
1073 if (UNLIKELY(!vtbl.CmdFillBuffer)) {
1074 ALOGE("missing device proc: %s", "vkCmdFillBuffer");
1075 success = false;
1076 }
1077 vtbl.CmdClearColorImage = reinterpret_cast<PFN_vkCmdClearColorImage>(get_proc_addr(device, "vkCmdClearColorImage"));
1078 if (UNLIKELY(!vtbl.CmdClearColorImage)) {
1079 ALOGE("missing device proc: %s", "vkCmdClearColorImage");
1080 success = false;
1081 }
1082 vtbl.CmdClearDepthStencilImage = reinterpret_cast<PFN_vkCmdClearDepthStencilImage>(get_proc_addr(device, "vkCmdClearDepthStencilImage"));
1083 if (UNLIKELY(!vtbl.CmdClearDepthStencilImage)) {
1084 ALOGE("missing device proc: %s", "vkCmdClearDepthStencilImage");
1085 success = false;
1086 }
1087 vtbl.CmdClearColorAttachment = reinterpret_cast<PFN_vkCmdClearColorAttachment>(get_proc_addr(device, "vkCmdClearColorAttachment"));
1088 if (UNLIKELY(!vtbl.CmdClearColorAttachment)) {
1089 ALOGE("missing device proc: %s", "vkCmdClearColorAttachment");
1090 success = false;
1091 }
1092 vtbl.CmdClearDepthStencilAttachment = reinterpret_cast<PFN_vkCmdClearDepthStencilAttachment>(get_proc_addr(device, "vkCmdClearDepthStencilAttachment"));
1093 if (UNLIKELY(!vtbl.CmdClearDepthStencilAttachment)) {
1094 ALOGE("missing device proc: %s", "vkCmdClearDepthStencilAttachment");
1095 success = false;
1096 }
1097 vtbl.CmdResolveImage = reinterpret_cast<PFN_vkCmdResolveImage>(get_proc_addr(device, "vkCmdResolveImage"));
1098 if (UNLIKELY(!vtbl.CmdResolveImage)) {
1099 ALOGE("missing device proc: %s", "vkCmdResolveImage");
1100 success = false;
1101 }
1102 vtbl.CmdSetEvent = reinterpret_cast<PFN_vkCmdSetEvent>(get_proc_addr(device, "vkCmdSetEvent"));
1103 if (UNLIKELY(!vtbl.CmdSetEvent)) {
1104 ALOGE("missing device proc: %s", "vkCmdSetEvent");
1105 success = false;
1106 }
1107 vtbl.CmdResetEvent = reinterpret_cast<PFN_vkCmdResetEvent>(get_proc_addr(device, "vkCmdResetEvent"));
1108 if (UNLIKELY(!vtbl.CmdResetEvent)) {
1109 ALOGE("missing device proc: %s", "vkCmdResetEvent");
1110 success = false;
1111 }
1112 vtbl.CmdWaitEvents = reinterpret_cast<PFN_vkCmdWaitEvents>(get_proc_addr(device, "vkCmdWaitEvents"));
1113 if (UNLIKELY(!vtbl.CmdWaitEvents)) {
1114 ALOGE("missing device proc: %s", "vkCmdWaitEvents");
1115 success = false;
1116 }
1117 vtbl.CmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(get_proc_addr(device, "vkCmdPipelineBarrier"));
1118 if (UNLIKELY(!vtbl.CmdPipelineBarrier)) {
1119 ALOGE("missing device proc: %s", "vkCmdPipelineBarrier");
1120 success = false;
1121 }
1122 vtbl.CmdBeginQuery = reinterpret_cast<PFN_vkCmdBeginQuery>(get_proc_addr(device, "vkCmdBeginQuery"));
1123 if (UNLIKELY(!vtbl.CmdBeginQuery)) {
1124 ALOGE("missing device proc: %s", "vkCmdBeginQuery");
1125 success = false;
1126 }
1127 vtbl.CmdEndQuery = reinterpret_cast<PFN_vkCmdEndQuery>(get_proc_addr(device, "vkCmdEndQuery"));
1128 if (UNLIKELY(!vtbl.CmdEndQuery)) {
1129 ALOGE("missing device proc: %s", "vkCmdEndQuery");
1130 success = false;
1131 }
1132 vtbl.CmdResetQueryPool = reinterpret_cast<PFN_vkCmdResetQueryPool>(get_proc_addr(device, "vkCmdResetQueryPool"));
1133 if (UNLIKELY(!vtbl.CmdResetQueryPool)) {
1134 ALOGE("missing device proc: %s", "vkCmdResetQueryPool");
1135 success = false;
1136 }
1137 vtbl.CmdWriteTimestamp = reinterpret_cast<PFN_vkCmdWriteTimestamp>(get_proc_addr(device, "vkCmdWriteTimestamp"));
1138 if (UNLIKELY(!vtbl.CmdWriteTimestamp)) {
1139 ALOGE("missing device proc: %s", "vkCmdWriteTimestamp");
1140 success = false;
1141 }
1142 vtbl.CmdCopyQueryPoolResults = reinterpret_cast<PFN_vkCmdCopyQueryPoolResults>(get_proc_addr(device, "vkCmdCopyQueryPoolResults"));
1143 if (UNLIKELY(!vtbl.CmdCopyQueryPoolResults)) {
1144 ALOGE("missing device proc: %s", "vkCmdCopyQueryPoolResults");
1145 success = false;
1146 }
1147 vtbl.CmdPushConstants = reinterpret_cast<PFN_vkCmdPushConstants>(get_proc_addr(device, "vkCmdPushConstants"));
1148 if (UNLIKELY(!vtbl.CmdPushConstants)) {
1149 ALOGE("missing device proc: %s", "vkCmdPushConstants");
1150 success = false;
1151 }
1152 vtbl.CmdBeginRenderPass = reinterpret_cast<PFN_vkCmdBeginRenderPass>(get_proc_addr(device, "vkCmdBeginRenderPass"));
1153 if (UNLIKELY(!vtbl.CmdBeginRenderPass)) {
1154 ALOGE("missing device proc: %s", "vkCmdBeginRenderPass");
1155 success = false;
1156 }
1157 vtbl.CmdNextSubpass = reinterpret_cast<PFN_vkCmdNextSubpass>(get_proc_addr(device, "vkCmdNextSubpass"));
1158 if (UNLIKELY(!vtbl.CmdNextSubpass)) {
1159 ALOGE("missing device proc: %s", "vkCmdNextSubpass");
1160 success = false;
1161 }
1162 vtbl.CmdEndRenderPass = reinterpret_cast<PFN_vkCmdEndRenderPass>(get_proc_addr(device, "vkCmdEndRenderPass"));
1163 if (UNLIKELY(!vtbl.CmdEndRenderPass)) {
1164 ALOGE("missing device proc: %s", "vkCmdEndRenderPass");
1165 success = false;
1166 }
1167 vtbl.CmdExecuteCommands = reinterpret_cast<PFN_vkCmdExecuteCommands>(get_proc_addr(device, "vkCmdExecuteCommands"));
1168 if (UNLIKELY(!vtbl.CmdExecuteCommands)) {
1169 ALOGE("missing device proc: %s", "vkCmdExecuteCommands");
1170 success = false;
1171 }
Jesse Hallb1352bc2015-09-04 16:12:33 -07001172 vtbl.ImportNativeFenceANDROID = reinterpret_cast<PFN_vkImportNativeFenceANDROID>(get_proc_addr(device, "vkImportNativeFenceANDROID"));
1173 if (UNLIKELY(!vtbl.ImportNativeFenceANDROID)) {
1174 ALOGE("missing device proc: %s", "vkImportNativeFenceANDROID");
1175 success = false;
1176 }
1177 vtbl.QueueSignalNativeFenceANDROID = reinterpret_cast<PFN_vkQueueSignalNativeFenceANDROID>(get_proc_addr(device, "vkQueueSignalNativeFenceANDROID"));
1178 if (UNLIKELY(!vtbl.QueueSignalNativeFenceANDROID)) {
1179 ALOGE("missing device proc: %s", "vkQueueSignalNativeFenceANDROID");
1180 success = false;
1181 }
Jesse Hall04f4f472015-08-16 19:51:04 -07001182 // clang-format on
1183 return success;
1184}
1185
1186} // namespace vulkan