null_driver.cpp revision d02edcbb40d476b6d3b5ae279a6ccef786be8848
1d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall/*
2d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * Copyright 2015 The Android Open Source Project
3d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall *
4d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * Licensed under the Apache License, Version 2.0 (the "License");
5d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * you may not use this file except in compliance with the License.
6d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * You may obtain a copy of the License at
7d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall *
8d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall *      http://www.apache.org/licenses/LICENSE-2.0
9d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall *
10d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * Unless required by applicable law or agreed to in writing, software
11d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * distributed under the License is distributed on an "AS IS" BASIS,
12d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * See the License for the specific language governing permissions and
14d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * limitations under the License.
15d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall */
16d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall
1704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <hardware/hwvulkan.h>
1804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
19f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall#include <array>
2004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <algorithm>
21bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall#include <inttypes.h>
22bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall#include <string.h>
2304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
2473ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// #define LOG_NDEBUG 0
2573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall#include <log/log.h>
2604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <utils/Errors.h>
2704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
2804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include "null_driver.h"
2904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
3004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallusing namespace null_driver;
3104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
3204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct VkPhysicalDevice_T {
3304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    hwvulkan_dispatch_t dispatch;
3404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall};
3504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
3604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct VkInstance_T {
3704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    hwvulkan_dispatch_t dispatch;
3804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    const VkAllocCallbacks* alloc;
3904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    VkPhysicalDevice_T physical_device;
4004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall};
4104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
4204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct VkQueue_T {
4304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    hwvulkan_dispatch_t dispatch;
4404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall};
4504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
4604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct VkCmdBuffer_T {
4704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    hwvulkan_dispatch_t dispatch;
4804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall};
4904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
50f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hallnamespace {
51f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// Handles for non-dispatchable objects are either pointers, or arbitrary
52f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// 64-bit non-zero values. We only use pointers when we need to keep state for
53f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// the object even in a null driver. For the rest, we form a handle as:
54f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall//   [63:63] = 1 to distinguish from pointer handles*
55f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall//   [62:56] = non-zero handle type enum value
56f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall//   [55: 0] = per-handle-type incrementing counter
57f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// * This works because virtual addresses with the high bit set are reserved
58f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// for kernel data in all ABIs we run on.
59f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall//
60f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// We never reclaim handles on vkDestroy*. It's not even necessary for us to
61f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// have distinct handles for live objects, and practically speaking we won't
62f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// ever create 2^56 objects of the same type from a single VkDevice in a null
63f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// driver.
64f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall//
65f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// Using a namespace here instead of 'enum class' since we want scoped
66f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// constants but also want implicit conversions to integral types.
67f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hallnamespace HandleType {
68c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hallenum Enum {
69c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kAttachmentView,
70c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kBufferView,
71c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kCmdPool,
72c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kDescriptorPool,
73c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kDescriptorSet,
74c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kDescriptorSetLayout,
75c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kDynamicColorBlendState,
76c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kDynamicDepthStencilState,
77c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kDynamicRasterState,
78c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kDynamicViewportState,
79c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kEvent,
80c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kFence,
81c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kFramebuffer,
82c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kImageView,
83c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kPipeline,
84c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kPipelineCache,
85c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kPipelineLayout,
86c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kQueryPool,
87c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kRenderPass,
88c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kSampler,
89c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kSemaphore,
90c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kShader,
91c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kShaderModule,
92c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall
93c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    kNumTypes
94c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall};
95c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall}  // namespace HandleType
96f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Halluint64_t AllocHandle(VkDevice device, HandleType::Enum type);
97bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall
98bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hallconst VkDeviceSize kMaxDeviceMemory = VkDeviceSize(INTPTR_MAX) + 1;
99bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall
100c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall}  // anonymous namespace
101f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall
10204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct VkDevice_T {
10304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    hwvulkan_dispatch_t dispatch;
10404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    VkInstance_T* instance;
10504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    VkQueue_T queue;
106f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    std::array<uint64_t, HandleType::kNumTypes> next_handle;
10704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall};
10804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
10904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// -----------------------------------------------------------------------------
11004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// Declare HAL_MODULE_INFO_SYM early so it can be referenced by nulldrv_device
11104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// later.
11204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
11304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallnamespace {
11404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallint OpenDevice(const hw_module_t* module, const char* id, hw_device_t** device);
11504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallhw_module_methods_t nulldrv_module_methods = {.open = OpenDevice};
11604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}  // namespace
11704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
11804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#pragma clang diagnostic push
11904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#pragma clang diagnostic ignored "-Wmissing-variable-declarations"
12004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall__attribute__((visibility("default"))) hwvulkan_module_t HAL_MODULE_INFO_SYM = {
12104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    .common =
12204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        {
12304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .tag = HARDWARE_MODULE_TAG,
12404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .module_api_version = HWVULKAN_MODULE_API_VERSION_0_1,
12504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .hal_api_version = HARDWARE_HAL_API_VERSION,
12604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .id = HWVULKAN_HARDWARE_MODULE_ID,
12704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .name = "Null Vulkan Driver",
12804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .author = "The Android Open Source Project",
12904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .methods = &nulldrv_module_methods,
13004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        },
13104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall};
13204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#pragma clang diagnostic pop
13304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
13404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// -----------------------------------------------------------------------------
13504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
13604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallnamespace {
13704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
13804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult CreateInstance(const VkInstanceCreateInfo* create_info,
13904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall                        VkInstance* out_instance) {
14004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    VkInstance_T* instance =
14104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        static_cast<VkInstance_T*>(create_info->pAllocCb->pfnAlloc(
14204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall            create_info->pAllocCb->pUserData, sizeof(VkInstance_T),
14304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall            alignof(VkInstance_T), VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
14404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    if (!instance)
14504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        return VK_ERROR_OUT_OF_HOST_MEMORY;
14604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
14704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    instance->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
14804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    instance->alloc = create_info->pAllocCb;
14904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    instance->physical_device.dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
15004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
15104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    *out_instance = instance;
15204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
15304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
15404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
15504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallint CloseDevice(struct hw_device_t* /*device*/) {
15604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    // nothing to do - opening a device doesn't allocate any resources
15704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return 0;
15804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
15904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
16004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallhwvulkan_device_t nulldrv_device = {
16104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    .common =
16204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        {
16304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .tag = HARDWARE_DEVICE_TAG,
16404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .version = HWVULKAN_DEVICE_API_VERSION_0_1,
16504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .module = &HAL_MODULE_INFO_SYM.common,
16604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall         .close = CloseDevice,
16704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        },
16804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    .GetGlobalExtensionProperties = GetGlobalExtensionProperties,
16904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    .CreateInstance = CreateInstance,
17004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    .GetInstanceProcAddr = GetInstanceProcAddr};
17104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
17204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallint OpenDevice(const hw_module_t* /*module*/,
17304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall               const char* id,
17404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall               hw_device_t** device) {
17504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    if (strcmp(id, HWVULKAN_DEVICE_0) == 0) {
17604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        *device = &nulldrv_device.common;
17704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        return 0;
17804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    }
17904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return -ENOENT;
18004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
18104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
18204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkInstance_T* GetInstanceFromPhysicalDevice(
18304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    VkPhysicalDevice_T* physical_device) {
18404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return reinterpret_cast<VkInstance_T*>(
18504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        reinterpret_cast<uintptr_t>(physical_device) -
18604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        offsetof(VkInstance_T, physical_device));
18704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
18804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
189f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Halluint64_t AllocHandle(VkDevice device, HandleType::Enum type) {
190f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    const uint64_t kHandleMask = (UINT64_C(1) << 56) - 1;
191f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    ALOGE_IF(device->next_handle[type] == kHandleMask,
192bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall             "non-dispatchable handles of type=%u are about to overflow", type);
193f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    return (UINT64_C(1) << 63) | ((uint64_t(type) & 0x7) << 56) |
194f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall           (device->next_handle[type]++ & kHandleMask);
195f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall}
196f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall
19704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}  // namespace
19804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
19904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallnamespace null_driver {
20004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
201f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Halltemplate <typename HandleT>
202f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hallstruct HandleTraits {};
203f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall
204f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Halltemplate <typename HandleT>
205f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Halltypename HandleTraits<HandleT>::PointerType GetObjectFromHandle(
206f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    const HandleT& h) {
207f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    return reinterpret_cast<typename HandleTraits<HandleT>::PointerType>(
208f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall        uintptr_t(h.handle));
209f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall}
210f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall
211f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Halltemplate <typename T>
212f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Halltypename T::HandleType GetHandleToObject(const T* obj) {
213f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    return typename T::HandleType(reinterpret_cast<uintptr_t>(obj));
214f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall}
215f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall
21673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// -----------------------------------------------------------------------------
21773ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// Global
21873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall
21973ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse HallVkResult GetGlobalExtensionProperties(const char*,
22073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall                                      uint32_t* count,
22173ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall                                      VkExtensionProperties*) {
22273ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    *count = 0;
22373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    return VK_SUCCESS;
22473ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall}
22573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall
22604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallPFN_vkVoidFunction GetInstanceProcAddr(VkInstance, const char* name) {
22704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    PFN_vkVoidFunction proc = LookupInstanceProcAddr(name);
22804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    if (!proc && strcmp(name, "vkGetDeviceProcAddr") == 0)
22904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        proc = reinterpret_cast<PFN_vkVoidFunction>(GetDeviceProcAddr);
23004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return proc;
23104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
23204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
23304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallPFN_vkVoidFunction GetDeviceProcAddr(VkDevice, const char* name) {
23404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return LookupDeviceProcAddr(name);
23504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
23604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
23773ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// -----------------------------------------------------------------------------
23873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// Instance
23973ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall
24004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult DestroyInstance(VkInstance instance) {
24104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    instance->alloc->pfnFree(instance->alloc->pUserData, instance);
24204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
24304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
24404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
24573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// -----------------------------------------------------------------------------
24673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// PhysicalDevice
24773ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall
24804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult EnumeratePhysicalDevices(VkInstance instance,
24904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall                                  uint32_t* physical_device_count,
25004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall                                  VkPhysicalDevice* physical_devices) {
25104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    if (physical_devices && *physical_device_count >= 1)
25204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        physical_devices[0] = &instance->physical_device;
25304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    *physical_device_count = 1;
25404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
25504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
25604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
25704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult GetPhysicalDeviceProperties(VkPhysicalDevice,
25804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall                                     VkPhysicalDeviceProperties* properties) {
25904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    properties->apiVersion = VK_API_VERSION;
26004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    properties->driverVersion = VK_MAKE_VERSION(0, 0, 1);
26104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    properties->vendorId = 0xC0DE;
26204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    properties->deviceId = 0xCAFE;
26304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    properties->deviceType = VK_PHYSICAL_DEVICE_TYPE_OTHER;
26404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    strcpy(properties->deviceName, "Android Vulkan Null Driver");
26504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    memset(properties->pipelineCacheUUID, 0,
26604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall           sizeof(properties->pipelineCacheUUID));
26704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
26804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
26904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
27073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse HallVkResult GetPhysicalDeviceMemoryProperties(
27173ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    VkPhysicalDevice,
27273ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    VkPhysicalDeviceMemoryProperties* properties) {
27373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    properties->memoryTypeCount = 1;
27473ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    properties->memoryTypes[0].propertyFlags =
27573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
27673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    properties->memoryTypes[0].heapIndex = 0;
27773ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    properties->memoryHeapCount = 1;
278bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall    properties->memoryHeaps[0].size = kMaxDeviceMemory;
27973ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    properties->memoryHeaps[0].flags = VK_MEMORY_HEAP_HOST_LOCAL;
28004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
28104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
28204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
28373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// -----------------------------------------------------------------------------
28473ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// Device
28573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall
28604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult CreateDevice(VkPhysicalDevice physical_device,
28704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall                      const VkDeviceCreateInfo*,
28804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall                      VkDevice* out_device) {
28904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    VkInstance_T* instance = GetInstanceFromPhysicalDevice(physical_device);
29004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    VkDevice_T* device = static_cast<VkDevice_T*>(instance->alloc->pfnAlloc(
29104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        instance->alloc->pUserData, sizeof(VkDevice_T), alignof(VkDevice_T),
29204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
29304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    if (!device)
29404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        return VK_ERROR_OUT_OF_HOST_MEMORY;
29504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
29604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    device->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
29704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    device->instance = instance;
29804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    device->queue.dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
299f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    std::fill(device->next_handle.begin(), device->next_handle.end(),
300f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall              UINT64_C(0));
30104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
30204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    *out_device = device;
30304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
30404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
30504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
30604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult DestroyDevice(VkDevice device) {
30704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    if (!device)
30804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall        return VK_SUCCESS;
30904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    const VkAllocCallbacks* alloc = device->instance->alloc;
31004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    alloc->pfnFree(alloc->pUserData, device);
31104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
31204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
31304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
31404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) {
31504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    *queue = &device->queue;
31604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
31704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
31804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
31904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// -----------------------------------------------------------------------------
320c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall// CmdBuffer
321c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall
322c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse HallVkResult CreateCommandBuffer(VkDevice device,
323c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall                             const VkCmdBufferCreateInfo*,
324c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall                             VkCmdBuffer* out_cmdbuf) {
325c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    const VkAllocCallbacks* alloc = device->instance->alloc;
326c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    VkCmdBuffer_T* cmdbuf = static_cast<VkCmdBuffer_T*>(alloc->pfnAlloc(
327c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall        alloc->pUserData, sizeof(VkCmdBuffer_T), alignof(VkCmdBuffer_T),
328c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
329c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    if (!cmdbuf)
330c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall        return VK_ERROR_OUT_OF_HOST_MEMORY;
331c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    cmdbuf->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
332c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    *out_cmdbuf = cmdbuf;
333c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    return VK_SUCCESS;
334c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall}
335c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall
336c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse HallVkResult DestroyCommandBuffer(VkDevice device, VkCmdBuffer cmdbuf) {
337c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    const VkAllocCallbacks* alloc = device->instance->alloc;
338c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    alloc->pfnFree(alloc->pUserData, cmdbuf);
339c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall    return VK_SUCCESS;
340c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall}
341c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall
342c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall// -----------------------------------------------------------------------------
3432077ce0c0d7ca716c408826449314ac799eda650Jesse Hall// DeviceMemory
3442077ce0c0d7ca716c408826449314ac799eda650Jesse Hall
3452077ce0c0d7ca716c408826449314ac799eda650Jesse Hallstruct DeviceMemory {
3462077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    typedef VkDeviceMemory HandleType;
3472077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    VkDeviceSize size;
3482077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    alignas(16) uint8_t data[0];
3492077ce0c0d7ca716c408826449314ac799eda650Jesse Hall};
3502077ce0c0d7ca716c408826449314ac799eda650Jesse Halltemplate <>
3512077ce0c0d7ca716c408826449314ac799eda650Jesse Hallstruct HandleTraits<VkDeviceMemory> {
3522077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    typedef DeviceMemory* PointerType;
3532077ce0c0d7ca716c408826449314ac799eda650Jesse Hall};
3542077ce0c0d7ca716c408826449314ac799eda650Jesse Hall
3552077ce0c0d7ca716c408826449314ac799eda650Jesse HallVkResult AllocMemory(VkDevice device,
3562077ce0c0d7ca716c408826449314ac799eda650Jesse Hall                     const VkMemoryAllocInfo* alloc_info,
3572077ce0c0d7ca716c408826449314ac799eda650Jesse Hall                     VkDeviceMemory* mem_handle) {
3582077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    if (SIZE_MAX - sizeof(DeviceMemory) <= alloc_info->allocationSize)
3592077ce0c0d7ca716c408826449314ac799eda650Jesse Hall        return VK_ERROR_OUT_OF_HOST_MEMORY;
3602077ce0c0d7ca716c408826449314ac799eda650Jesse Hall
3612077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    const VkAllocCallbacks* alloc = device->instance->alloc;
3622077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    size_t size = sizeof(DeviceMemory) + size_t(alloc_info->allocationSize);
3632077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    DeviceMemory* mem = static_cast<DeviceMemory*>(
3642077ce0c0d7ca716c408826449314ac799eda650Jesse Hall        alloc->pfnAlloc(alloc->pUserData, size, alignof(DeviceMemory),
3652077ce0c0d7ca716c408826449314ac799eda650Jesse Hall                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
3662077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    if (!mem)
3672077ce0c0d7ca716c408826449314ac799eda650Jesse Hall        return VK_ERROR_OUT_OF_HOST_MEMORY;
3682077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    mem->size = size;
3692077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    *mem_handle = GetHandleToObject(mem);
3702077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    return VK_SUCCESS;
3712077ce0c0d7ca716c408826449314ac799eda650Jesse Hall}
3722077ce0c0d7ca716c408826449314ac799eda650Jesse Hall
3732077ce0c0d7ca716c408826449314ac799eda650Jesse HallVkResult FreeMemory(VkDevice device, VkDeviceMemory mem_handle) {
3742077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    const VkAllocCallbacks* alloc = device->instance->alloc;
3752077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    DeviceMemory* mem = GetObjectFromHandle(mem_handle);
3762077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    alloc->pfnFree(alloc->pUserData, mem);
3772077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    return VK_SUCCESS;
3782077ce0c0d7ca716c408826449314ac799eda650Jesse Hall}
3792077ce0c0d7ca716c408826449314ac799eda650Jesse Hall
3802077ce0c0d7ca716c408826449314ac799eda650Jesse HallVkResult MapMemory(VkDevice,
3812077ce0c0d7ca716c408826449314ac799eda650Jesse Hall                   VkDeviceMemory mem_handle,
3822077ce0c0d7ca716c408826449314ac799eda650Jesse Hall                   VkDeviceSize offset,
3832077ce0c0d7ca716c408826449314ac799eda650Jesse Hall                   VkDeviceSize,
3842077ce0c0d7ca716c408826449314ac799eda650Jesse Hall                   VkMemoryMapFlags,
3852077ce0c0d7ca716c408826449314ac799eda650Jesse Hall                   void** out_ptr) {
3862077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    DeviceMemory* mem = GetObjectFromHandle(mem_handle);
3872077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    *out_ptr = &mem->data[0] + offset;
3882077ce0c0d7ca716c408826449314ac799eda650Jesse Hall    return VK_SUCCESS;
3892077ce0c0d7ca716c408826449314ac799eda650Jesse Hall}
3902077ce0c0d7ca716c408826449314ac799eda650Jesse Hall
3912077ce0c0d7ca716c408826449314ac799eda650Jesse Hall// -----------------------------------------------------------------------------
392f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall// Buffer
393f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall
394f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hallstruct Buffer {
395f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    typedef VkBuffer HandleType;
396f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    VkDeviceSize size;
397f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall};
398f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Halltemplate <>
399f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hallstruct HandleTraits<VkBuffer> {
400f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    typedef Buffer* PointerType;
401f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall};
402f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall
403f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse HallVkResult CreateBuffer(VkDevice device,
404f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall                      const VkBufferCreateInfo* create_info,
405f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall                      VkBuffer* buffer_handle) {
406bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall    ALOGW_IF(create_info->size > kMaxDeviceMemory,
407bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall             "CreateBuffer: requested size 0x%" PRIx64
408bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall             " exceeds max device memory size 0x%" PRIx64,
409bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall             create_info->size, kMaxDeviceMemory);
410bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall
411f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    const VkAllocCallbacks* alloc = device->instance->alloc;
412f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    Buffer* buffer = static_cast<Buffer*>(
413f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall        alloc->pfnAlloc(alloc->pUserData, sizeof(Buffer), alignof(Buffer),
414f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
415f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    if (!buffer)
416f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall        return VK_ERROR_OUT_OF_HOST_MEMORY;
417f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    buffer->size = create_info->size;
418f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    *buffer_handle = GetHandleToObject(buffer);
419f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    return VK_SUCCESS;
420f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall}
421f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall
422f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse HallVkResult GetBufferMemoryRequirements(VkDevice,
423f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall                                     VkBuffer buffer_handle,
424f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall                                     VkMemoryRequirements* requirements) {
425f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    Buffer* buffer = GetObjectFromHandle(buffer_handle);
426f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    requirements->size = buffer->size;
427f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    requirements->alignment = 16;  // allow fast Neon/SSE memcpy
428f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    requirements->memoryTypeBits = 0x1;
429f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    return VK_SUCCESS;
430f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall}
431f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall
432f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse HallVkResult DestroyBuffer(VkDevice device, VkBuffer buffer_handle) {
433f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    const VkAllocCallbacks* alloc = device->instance->alloc;
434f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    Buffer* buffer = GetObjectFromHandle(buffer_handle);
435f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    alloc->pfnFree(alloc->pUserData, buffer);
436f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall    return VK_SUCCESS;
437f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall}
438f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall
439f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall// -----------------------------------------------------------------------------
44085c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall// Image
44185c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall
44285c05b60435ef61e833bcedced9ff0699e829f7cJesse Hallstruct Image {
44385c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    typedef VkImage HandleType;
44485c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    VkDeviceSize size;
44585c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall};
44685c05b60435ef61e833bcedced9ff0699e829f7cJesse Halltemplate <>
44785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hallstruct HandleTraits<VkImage> {
44885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    typedef Image* PointerType;
44985c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall};
45085c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall
45185c05b60435ef61e833bcedced9ff0699e829f7cJesse HallVkResult CreateImage(VkDevice device,
45285c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall                     const VkImageCreateInfo* create_info,
45385c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall                     VkImage* image_handle) {
45485c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    if (create_info->imageType != VK_IMAGE_TYPE_2D ||
45585c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall        create_info->format != VK_FORMAT_R8G8B8A8_UNORM ||
45685c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall        create_info->mipLevels != 1) {
45785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall        ALOGE("CreateImage: not yet implemented: type=%d format=%d mips=%u",
45885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall              create_info->imageType, create_info->format,
45985c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall              create_info->mipLevels);
46085c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall        return VK_ERROR_UNAVAILABLE;
46185c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    }
46285c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall
46385c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    VkDeviceSize size =
46485c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall        VkDeviceSize(create_info->extent.width * create_info->extent.height) *
46585c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall        create_info->arraySize * create_info->samples * 4u;
46685c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    ALOGW_IF(size > kMaxDeviceMemory,
46785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall             "CreateImage: image size 0x%" PRIx64
46885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall             " exceeds max device memory size 0x%" PRIx64,
46985c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall             size, kMaxDeviceMemory);
47085c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall
47185c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    const VkAllocCallbacks* alloc = device->instance->alloc;
47285c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    Image* image = static_cast<Image*>(
47385c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall        alloc->pfnAlloc(alloc->pUserData, sizeof(Image), alignof(Image),
47485c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
47585c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    if (!image)
47685c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall        return VK_ERROR_OUT_OF_HOST_MEMORY;
47785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    image->size = size;
47885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    *image_handle = GetHandleToObject(image);
47985c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    return VK_SUCCESS;
48085c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall}
48185c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall
48285c05b60435ef61e833bcedced9ff0699e829f7cJesse HallVkResult GetImageMemoryRequirements(VkDevice,
48385c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall                                    VkImage image_handle,
48485c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall                                    VkMemoryRequirements* requirements) {
48585c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    Image* image = GetObjectFromHandle(image_handle);
48685c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    requirements->size = image->size;
48785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    requirements->alignment = 16;  // allow fast Neon/SSE memcpy
48885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    requirements->memoryTypeBits = 0x1;
48985c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    return VK_SUCCESS;
49085c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall}
49185c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall
49285c05b60435ef61e833bcedced9ff0699e829f7cJesse HallVkResult DestroyImage(VkDevice device, VkImage image_handle) {
49385c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    const VkAllocCallbacks* alloc = device->instance->alloc;
49485c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    Image* image = GetObjectFromHandle(image_handle);
49585c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    alloc->pfnFree(alloc->pUserData, image);
49685c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall    return VK_SUCCESS;
49785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall}
49885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall
49985c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall// -----------------------------------------------------------------------------
500f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// No-op types
50104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
502f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateAttachmentView(VkDevice device,
503f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                              const VkAttachmentViewCreateInfo*,
504f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                              VkAttachmentView* view) {
505f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *view = AllocHandle(device, HandleType::kAttachmentView);
50604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
50704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
50804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
509f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateBufferView(VkDevice device,
510f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                          const VkBufferViewCreateInfo*,
511f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                          VkBufferView* view) {
512f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *view = AllocHandle(device, HandleType::kBufferView);
51304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
51404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
51504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
516f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateCommandPool(VkDevice device,
517f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                           const VkCmdPoolCreateInfo*,
518f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                           VkCmdPool* pool) {
519f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *pool = AllocHandle(device, HandleType::kCmdPool);
52004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
52104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
52204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
523f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateDescriptorPool(VkDevice device,
524f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                              VkDescriptorPoolUsage,
525f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                              uint32_t,
526f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                              const VkDescriptorPoolCreateInfo*,
527f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                              VkDescriptorPool* pool) {
528f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *pool = AllocHandle(device, HandleType::kDescriptorPool);
52904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
53004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
53104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
532f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult AllocDescriptorSets(VkDevice device,
533f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                             VkDescriptorPool,
534f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                             VkDescriptorSetUsage,
535f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                             uint32_t count,
536f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                             const VkDescriptorSetLayout*,
537f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                             VkDescriptorSet* sets,
538f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                             uint32_t* out_count) {
539f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    for (uint32_t i = 0; i < count; i++)
540f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall        sets[i] = AllocHandle(device, HandleType::kDescriptorSet);
541f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *out_count = count;
54204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
54304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
54404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
545f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateDescriptorSetLayout(VkDevice device,
546f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                   const VkDescriptorSetLayoutCreateInfo*,
547f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                   VkDescriptorSetLayout* layout) {
548f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *layout = AllocHandle(device, HandleType::kDescriptorSetLayout);
54904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
55004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
55104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
552f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateDynamicColorBlendState(VkDevice device,
553f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                      const VkDynamicColorBlendStateCreateInfo*,
554f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                      VkDynamicColorBlendState* state) {
555f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *state = AllocHandle(device, HandleType::kDynamicColorBlendState);
55604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
55704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
55804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
559f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateDynamicDepthStencilState(
560f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    VkDevice device,
561f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    const VkDynamicDepthStencilStateCreateInfo*,
562f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    VkDynamicDepthStencilState* state) {
563f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *state = AllocHandle(device, HandleType::kDynamicDepthStencilState);
56404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
56504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
56604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
567f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateDynamicRasterState(VkDevice device,
568f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                  const VkDynamicRasterStateCreateInfo*,
569f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                  VkDynamicRasterState* state) {
570f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *state = AllocHandle(device, HandleType::kDynamicRasterState);
57104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
57204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
57304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
574f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateDynamicViewportState(VkDevice device,
575f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                    const VkDynamicViewportStateCreateInfo*,
576f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                    VkDynamicViewportState* state) {
577f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *state = AllocHandle(device, HandleType::kDynamicViewportState);
57804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
57904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
58004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
581f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateEvent(VkDevice device,
582f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                     const VkEventCreateInfo*,
583f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                     VkEvent* event) {
584f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *event = AllocHandle(device, HandleType::kEvent);
58504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
58604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
58704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
588f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateFence(VkDevice device,
589f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                     const VkFenceCreateInfo*,
590f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                     VkFence* fence) {
591f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *fence = AllocHandle(device, HandleType::kFence);
59204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
59304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
59404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
595f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateFramebuffer(VkDevice device,
596f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                           const VkFramebufferCreateInfo*,
597f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                           VkFramebuffer* framebuffer) {
598f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *framebuffer = AllocHandle(device, HandleType::kFramebuffer);
59904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
60004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
60104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
602f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateImageView(VkDevice device,
603f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                         const VkImageViewCreateInfo*,
604f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                         VkImageView* view) {
605f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *view = AllocHandle(device, HandleType::kImageView);
60604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
60704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
60804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
609f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateGraphicsPipelines(VkDevice device,
610f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                 VkPipelineCache,
611f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                 uint32_t count,
612f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                 const VkGraphicsPipelineCreateInfo*,
613f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                 VkPipeline* pipelines) {
614f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    for (uint32_t i = 0; i < count; i++)
615f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall        pipelines[i] = AllocHandle(device, HandleType::kPipeline);
61604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
61704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
61804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
619f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateComputePipelines(VkDevice device,
620f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                VkPipelineCache,
621f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                uint32_t count,
622f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                const VkComputePipelineCreateInfo*,
623f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                                VkPipeline* pipelines) {
624f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    for (uint32_t i = 0; i < count; i++)
625f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall        pipelines[i] = AllocHandle(device, HandleType::kPipeline);
62604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
62704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
62804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
629f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreatePipelineCache(VkDevice device,
630f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                             const VkPipelineCacheCreateInfo*,
631f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                             VkPipelineCache* cache) {
632f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *cache = AllocHandle(device, HandleType::kPipelineCache);
63304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
63404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
63504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
636f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreatePipelineLayout(VkDevice device,
637f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                              const VkPipelineLayoutCreateInfo*,
638f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                              VkPipelineLayout* layout) {
639f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *layout = AllocHandle(device, HandleType::kPipelineLayout);
64004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
64104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
64204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
643f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateQueryPool(VkDevice device,
644f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                         const VkQueryPoolCreateInfo*,
645f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                         VkQueryPool* pool) {
646f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *pool = AllocHandle(device, HandleType::kQueryPool);
64704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
64804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
64904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
650f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateRenderPass(VkDevice device,
651f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                          const VkRenderPassCreateInfo*,
652f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                          VkRenderPass* renderpass) {
653f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *renderpass = AllocHandle(device, HandleType::kRenderPass);
65404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
65504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
65604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
657f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateSampler(VkDevice device,
658f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                       const VkSamplerCreateInfo*,
659f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                       VkSampler* sampler) {
660f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *sampler = AllocHandle(device, HandleType::kSampler);
66104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
66204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
66304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
664f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateSemaphore(VkDevice device,
665f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                         const VkSemaphoreCreateInfo*,
666f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                         VkSemaphore* semaphore) {
667f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *semaphore = AllocHandle(device, HandleType::kSemaphore);
66804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
66904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
67004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
671f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateShader(VkDevice device,
672f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                      const VkShaderCreateInfo*,
673f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                      VkShader* shader) {
674f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *shader = AllocHandle(device, HandleType::kShader);
67504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
67604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
67704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
678f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateShaderModule(VkDevice device,
679f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                            const VkShaderModuleCreateInfo*,
680f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall                            VkShaderModule* module) {
681f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall    *module = AllocHandle(device, HandleType::kShaderModule);
68204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
68304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
68404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
685f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// -----------------------------------------------------------------------------
686f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// No-op entrypoints
687f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall
688f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// clang-format off
689f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall#pragma clang diagnostic push
690f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall#pragma clang diagnostic ignored "-Wunused-parameter"
691f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall
692f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetPhysicalDeviceQueueCount(VkPhysicalDevice physicalDevice, uint32_t* pCount) {
69373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
69404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
69504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
69604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
697f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetPhysicalDeviceQueueProperties(VkPhysicalDevice physicalDevice, uint32_t count, VkPhysicalDeviceQueueProperties* pQueueProperties) {
69873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
69904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
70004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
70104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
702f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
70373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
70404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
70504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
70604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
707f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) {
70873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
70904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
71004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
71104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
712f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageFormatProperties* pImageFormatProperties) {
71373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
71404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
71504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
71604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
717f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetPhysicalDeviceLimits(VkPhysicalDevice physicalDevice, VkPhysicalDeviceLimits* pLimits) {
71873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
71904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
72004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
72104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
722f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetGlobalLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) {
72373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
72404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
72504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
72604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
727f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetPhysicalDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties) {
72873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
72904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
73004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
73104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
732f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetPhysicalDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
73373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
73404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
73504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
73604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
737f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult QueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence) {
73804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
73904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
74004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
741f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult QueueWaitIdle(VkQueue queue) {
74273ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
74304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
74404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
74504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
746f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DeviceWaitIdle(VkDevice device) {
74773ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
74804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
74904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
75004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
751f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult UnmapMemory(VkDevice device, VkDeviceMemory mem) {
75204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
75304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
75404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
755f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult FlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) {
75673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
75704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
75804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
75904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
760f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult InvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) {
76173ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
76204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
76304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
76404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
765f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) {
76673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
76704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
76804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
76904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
770f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset) {
77104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
77204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
77304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
774f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset) {
77573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
77604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
77704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
77804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
779f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
78073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
78104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
78204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
78304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
784f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) {
78573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
78604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
78704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
78804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
789f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult QueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
79073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
79104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
79204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
79304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
794f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult QueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
79573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
79604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
79704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
79804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
799f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult QueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo) {
80073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
80104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
80204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
80304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
804f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyFence(VkDevice device, VkFence fence) {
80504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
80604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
80704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
808f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) {
80904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
81004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
81104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
812f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetFenceStatus(VkDevice device, VkFence fence) {
81373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
81404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
81504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
81604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
817f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout) {
81804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
81904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
82004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
821f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroySemaphore(VkDevice device, VkSemaphore semaphore) {
82204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
82304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
82404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
825f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult QueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore) {
82673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
82704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
82804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
82904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
830f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult QueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore) {
83173ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
83204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
83304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
83404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
835f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyEvent(VkDevice device, VkEvent event) {
83604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
83704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
83804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
839f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetEventStatus(VkDevice device, VkEvent event) {
84073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
84104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
84204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
84304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
844f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult SetEvent(VkDevice device, VkEvent event) {
84573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
84604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
84704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
84804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
849f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult ResetEvent(VkDevice device, VkEvent event) {
85073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
85104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
85204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
85304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
854f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyQueryPool(VkDevice device, VkQueryPool queryPool) {
85504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
85604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
85704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
858f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags) {
85973ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
86004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
86104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
86204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
863f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyBufferView(VkDevice device, VkBufferView bufferView) {
86404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
86504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
86604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
867f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
86873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
86904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
87004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
87104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
872f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyImageView(VkDevice device, VkImageView imageView) {
87304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
87404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
87504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
876f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyAttachmentView(VkDevice device, VkAttachmentView attachmentView) {
87704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
87804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
87904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
880f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyShaderModule(VkDevice device, VkShaderModule shaderModule) {
88104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
88204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
88304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
884f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyShader(VkDevice device, VkShader shader) {
88504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
88604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
88704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
888f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache) {
88904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
89004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
89104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
892f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hallsize_t GetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache) {
89373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
89404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
89504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
89604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
897f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, void* pData) {
89873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
89904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
90004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
90104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
902f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) {
90373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
90404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
90504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
90604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
907f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyPipeline(VkDevice device, VkPipeline pipeline) {
90804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
90904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
91004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
911f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout) {
91204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
91304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
91404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
915f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroySampler(VkDevice device, VkSampler sampler) {
91604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
91704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
91804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
919f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout) {
92004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
92104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
92204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
923f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
92404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
92504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
92604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
927f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
92873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
92904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
93004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
93104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
932f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult UpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies) {
93373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
93404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
93504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
93604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
937f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets) {
93873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
93904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
94004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
94104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
942f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyDynamicViewportState(VkDevice device, VkDynamicViewportState dynamicViewportState) {
94304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
94404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
94504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
946f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyDynamicRasterState(VkDevice device, VkDynamicRasterState dynamicRasterState) {
94704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
94804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
94904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
950f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyDynamicColorBlendState(VkDevice device, VkDynamicColorBlendState dynamicColorBlendState) {
95104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
95204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
95304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
954f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyDynamicDepthStencilState(VkDevice device, VkDynamicDepthStencilState dynamicDepthStencilState) {
95504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
95604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
95704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
958f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer) {
95904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
96004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
96104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
962f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DestroyRenderPass(VkDevice device, VkRenderPass renderPass) {
96304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
96404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
96504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
966f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
96773ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
96804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
96904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
97004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
97104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult DestroyCommandPool(VkDevice device, VkCmdPool cmdPool) {
97204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
97304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
97404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
97504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult ResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags) {
97673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
97704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
97804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
97904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
98004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult BeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo) {
98104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
98204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
98304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
98404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult EndCommandBuffer(VkCmdBuffer cmdBuffer) {
98504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
98604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
98704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
98804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult ResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags) {
98973ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall    ALOGV("TODO: vk%s", __FUNCTION__);
99004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall    return VK_SUCCESS;
99104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
99204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
99304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) {
99404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
99504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
99604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBindDynamicViewportState(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState) {
99704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
99804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
99904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBindDynamicRasterState(VkCmdBuffer cmdBuffer, VkDynamicRasterState dynamicRasterState) {
100004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
100104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
100204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBindDynamicColorBlendState(VkCmdBuffer cmdBuffer, VkDynamicColorBlendState dynamicColorBlendState) {
100304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
100404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
100504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBindDynamicDepthStencilState(VkCmdBuffer cmdBuffer, VkDynamicDepthStencilState dynamicDepthStencilState) {
100604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
100704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
100804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
100904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
101004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
101104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) {
101204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
101304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
101404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) {
101504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
101604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
101704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount) {
101804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
101904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
102004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount) {
102104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
102204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
102304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
102404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
102504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
102604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
102704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
102804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
102904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z) {
103004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
103104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
103204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset) {
103304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
103404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
103504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) {
103604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
103704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
103804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) {
103904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
104004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
104104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter) {
104204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
104304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
104404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
104504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
104604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
104704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
104804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
104904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
105004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData) {
105104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
105204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
105304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data) {
105404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
105504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
105604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
105704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
105804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
105904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
106004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
106104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
106204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdClearColorAttachment(VkCmdBuffer cmdBuffer, uint32_t colorAttachment, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rectCount, const VkRect3D* pRects) {
106304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
106404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
106504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdClearDepthStencilAttachment(VkCmdBuffer cmdBuffer, VkImageAspectFlags imageAspectMask, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rectCount, const VkRect3D* pRects) {
106604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
106704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
106804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
106904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
107004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
107104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
107204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
107304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
107404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
107504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
107604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
107704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
107804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
107904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
108004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkBool32 byRegion, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
108104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
108204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
108304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags) {
108404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
108504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
108604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) {
108704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
108804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
108904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
109004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
109104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
109204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset) {
109304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
109404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
109504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags) {
109604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
109704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
109804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values) {
109904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
110004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
110104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents) {
110204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
110304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
110404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdNextSubpass(VkCmdBuffer cmdBuffer, VkRenderPassContents contents) {
110504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
110604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
110704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdEndRenderPass(VkCmdBuffer cmdBuffer) {
110804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
110904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
111004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallvoid CmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers) {
111104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}
111204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
111304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#pragma clang diagnostic pop
111404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// clang-format on
111504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall
111604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}  // namespace null_driver
1117