null_driver.cpp revision acfa53409aa45de2c12f10617222e0d593e8f2df
1c383a500aa59423264811be3874461bf8adbfea0Zonr Chang/*
2d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines * Copyright 2015 The Android Open Source Project
3c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *
4c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License");
5c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * you may not use this file except in compliance with the License.
6c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * You may obtain a copy of the License at
7c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *
8c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *      http://www.apache.org/licenses/LICENSE-2.0
9c383a500aa59423264811be3874461bf8adbfea0Zonr Chang *
10c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Unless required by applicable law or agreed to in writing, software
11c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS,
12c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * See the License for the specific language governing permissions and
14c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * limitations under the License.
15c383a500aa59423264811be3874461bf8adbfea0Zonr Chang */
16c383a500aa59423264811be3874461bf8adbfea0Zonr Chang
176315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include <hardware/hwvulkan.h>
186315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr
19e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#include <array>
206315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include <algorithm>
21462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <inttypes.h>
2243730fe3c839af391efe6bdf56b0479860121924Shih-wei Liao#include <string.h>
2323c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines
24e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines// #define LOG_NDEBUG 0
25462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <log/log.h>
269ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include <utils/Errors.h>
2723c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines
2823c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines#include "null_driver.h"
2923c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines
300a3f20ec28ed6f5ae1ed5d61f6b6e3e577f7f5d1Shih-wei Liaousing namespace null_driver;
316e6578a360497f78a181e63d7783422a9c9bfb15Stephen Hines
326315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonrstruct VkPhysicalDevice_T {
336315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr    hwvulkan_dispatch_t dispatch;
34d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines};
35462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
36641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Changstruct VkInstance_T {
37641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang    hwvulkan_dispatch_t dispatch;
38641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang    const VkAllocCallbacks* alloc;
39641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang    VkPhysicalDevice_T physical_device;
40e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines};
41462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
42e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hinesstruct VkQueue_T {
43462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao    hwvulkan_dispatch_t dispatch;
44474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet};
45474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
46474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouilletstruct VkCmdBuffer_T {
47474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    hwvulkan_dispatch_t dispatch;
48474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet};
49fdd1ba13a69501a1b91fdc9be31413215d467497Stephen Hines
50e4dd17d7b2a292a600756da7680beecd78f74033Pirama Arumuga Nainarnamespace {
51474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet// Handles for non-dispatchable objects are either pointers, or arbitrary
52474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet// 64-bit non-zero values. We only use pointers when we need to keep state for
53474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet// the object even in a null driver. For the rest, we form a handle as:
54474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet//   [63:63] = 1 to distinguish from pointer handles*
55474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet//   [62:56] = non-zero handle type enum value
56474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet//   [55: 0] = per-handle-type incrementing counter
57474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet// * This works because virtual addresses with the high bit set are reserved
58474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet// for kernel data in all ABIs we run on.
59474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet//
60474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet// We never reclaim handles on vkDestroy*. It's not even necessary for us to
61474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet// have distinct handles for live objects, and practically speaking we won't
625abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes// ever create 2^56 objects of the same type from a single VkDevice in a null
63474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet// driver.
645abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes//
655abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes// Using a namespace here instead of 'enum class' since we want scoped
665abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes// constants but also want implicit conversions to integral types.
67474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouilletnamespace HandleType {
685abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailesenum Enum {
695abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kBufferView,
705abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kCmdPool,
71474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    kDescriptorPool,
729ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hines    kDescriptorSet,
739ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hines    kDescriptorSetLayout,
745abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kEvent,
755abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kFence,
765abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kFramebuffer,
775abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kImageView,
785abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kPipeline,
795abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kPipelineCache,
805abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kPipelineLayout,
815abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kQueryPool,
825abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kRenderPass,
835abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kSampler,
845abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kSemaphore,
855abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kShader,
865abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    kShaderModule,
87474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
88474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    kNumTypes
89474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet};
90474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet}  // namespace HandleType
91474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouilletuint64_t AllocHandle(VkDevice device, HandleType::Enum type);
92474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
93cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouilletconst VkDeviceSize kMaxDeviceMemory = VkDeviceSize(INTPTR_MAX) + 1;
94474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
95474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet}  // anonymous namespace
96474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
97474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouilletstruct VkDevice_T {
98474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    hwvulkan_dispatch_t dispatch;
99474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    VkInstance_T* instance;
100cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    VkQueue_T queue;
101474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    std::array<uint64_t, HandleType::kNumTypes> next_handle;
102cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet};
103474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
104cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet// -----------------------------------------------------------------------------
105474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet// Declare HAL_MODULE_INFO_SYM early so it can be referenced by nulldrv_device
106cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet// later.
107474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
108cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouilletnamespace {
109474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouilletint OpenDevice(const hw_module_t* module, const char* id, hw_device_t** device);
110cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillethw_module_methods_t nulldrv_module_methods = {.open = OpenDevice};
111474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet}  // namespace
112cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet
113474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet#pragma clang diagnostic push
114cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet#pragma clang diagnostic ignored "-Wmissing-variable-declarations"
115474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet__attribute__((visibility("default"))) hwvulkan_module_t HAL_MODULE_INFO_SYM = {
116e46265d27df092fbd911075403ec04d9c7ef8de1Tim Murray    .common =
117e46265d27df092fbd911075403ec04d9c7ef8de1Tim Murray        {
118cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet            .tag = HARDWARE_MODULE_TAG,
119474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet            .module_api_version = HWVULKAN_MODULE_API_VERSION_0_1,
120474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet            .hal_api_version = HARDWARE_HAL_API_VERSION,
121cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet            .id = HWVULKAN_HARDWARE_MODULE_ID,
122474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet            .name = "Null Vulkan Driver",
123cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet            .author = "The Android Open Source Project",
124474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet            .methods = &nulldrv_module_methods,
125cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet        },
126474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet};
127cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet#pragma clang diagnostic pop
128474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
129cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet// -----------------------------------------------------------------------------
130474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
131cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouilletnamespace {
132474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
133e4dd17d7b2a292a600756da7680beecd78f74033Pirama Arumuga NainarVkResult CreateInstance(const VkInstanceCreateInfo* create_info,
134e4dd17d7b2a292a600756da7680beecd78f74033Pirama Arumuga Nainar                        VkInstance* out_instance) {
135cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    // Assume the loader provided alloc callbacks even if the app didn't.
136474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    ALOG_ASSERT(
137cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet        create_info->pAllocCb,
138474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet        "Missing alloc callbacks, loader or app should have provided them");
139474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
140474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    VkInstance_T* instance =
141474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet        static_cast<VkInstance_T*>(create_info->pAllocCb->pfnAlloc(
142474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet            create_info->pAllocCb->pUserData, sizeof(VkInstance_T),
143474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet            alignof(VkInstance_T), VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
144cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    if (!instance)
145474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet        return VK_ERROR_OUT_OF_HOST_MEMORY;
146474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
147474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    instance->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
148cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    instance->alloc = create_info->pAllocCb;
149cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    instance->physical_device.dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
150cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet
151cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    *out_instance = instance;
152cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    return VK_SUCCESS;
153cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet}
154cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet
155cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouilletint CloseDevice(struct hw_device_t* /*device*/) {
156cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    // nothing to do - opening a device doesn't allocate any resources
157cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    return 0;
158cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet}
159cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet
160cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillethwvulkan_device_t nulldrv_device = {
161cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    .common =
162cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet        {
163fdd1ba13a69501a1b91fdc9be31413215d467497Stephen Hines            .tag = HARDWARE_DEVICE_TAG,
164fdd1ba13a69501a1b91fdc9be31413215d467497Stephen Hines            .version = HWVULKAN_DEVICE_API_VERSION_0_1,
165474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet            .module = &HAL_MODULE_INFO_SYM.common,
166474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet            .close = CloseDevice,
167474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet        },
16824e79f69125cf87fcaa78c04510a831037203eebStephen Hines    .EnumerateInstanceExtensionProperties =
16924e79f69125cf87fcaa78c04510a831037203eebStephen Hines        EnumerateInstanceExtensionProperties,
17024e79f69125cf87fcaa78c04510a831037203eebStephen Hines    .CreateInstance = CreateInstance,
17148d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines    .GetInstanceProcAddr = GetInstanceProcAddr};
17224e79f69125cf87fcaa78c04510a831037203eebStephen Hines
1735bfec8dd08b3bde9ba3b331e2115210b0e910eaeStephen Hinesint OpenDevice(const hw_module_t* /*module*/,
17424e79f69125cf87fcaa78c04510a831037203eebStephen Hines               const char* id,
175ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray               hw_device_t** device) {
176d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    if (strcmp(id, HWVULKAN_DEVICE_0) == 0) {
17711274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines        *device = &nulldrv_device.common;
17824e79f69125cf87fcaa78c04510a831037203eebStephen Hines        return 0;
179ee4016d1247d3fbe50822de279d3da273d8aef4cTim Murray    }
180d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    return -ENOENT;
18124e79f69125cf87fcaa78c04510a831037203eebStephen Hines}
18224e79f69125cf87fcaa78c04510a831037203eebStephen Hines
18324e79f69125cf87fcaa78c04510a831037203eebStephen HinesVkInstance_T* GetInstanceFromPhysicalDevice(
18424e79f69125cf87fcaa78c04510a831037203eebStephen Hines    VkPhysicalDevice_T* physical_device) {
185d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    return reinterpret_cast<VkInstance_T*>(
186d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet        reinterpret_cast<uintptr_t>(physical_device) -
18711274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines        offsetof(VkInstance_T, physical_device));
188d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet}
189d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet
19024e79f69125cf87fcaa78c04510a831037203eebStephen Hinesuint64_t AllocHandle(VkDevice device, HandleType::Enum type) {
1916e6578a360497f78a181e63d7783422a9c9bfb15Stephen Hines    const uint64_t kHandleMask = (UINT64_C(1) << 56) - 1;
19224e79f69125cf87fcaa78c04510a831037203eebStephen Hines    ALOGE_IF(device->next_handle[type] == kHandleMask,
19324e79f69125cf87fcaa78c04510a831037203eebStephen Hines             "non-dispatchable handles of type=%u are about to overflow", type);
19424e79f69125cf87fcaa78c04510a831037203eebStephen Hines    return (UINT64_C(1) << 63) | ((uint64_t(type) & 0x7) << 56) |
19524e79f69125cf87fcaa78c04510a831037203eebStephen Hines           (device->next_handle[type]++ & kHandleMask);
19624e79f69125cf87fcaa78c04510a831037203eebStephen Hines}
19724e79f69125cf87fcaa78c04510a831037203eebStephen Hines
19848d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines}  // namespace
19924e79f69125cf87fcaa78c04510a831037203eebStephen Hines
2005bfec8dd08b3bde9ba3b331e2115210b0e910eaeStephen Hinesnamespace null_driver {
20124e79f69125cf87fcaa78c04510a831037203eebStephen Hines
202b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillettemplate <typename HandleT>
20324e79f69125cf87fcaa78c04510a831037203eebStephen Hinesstruct HandleTraits {};
204d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet
2059207a2e495c8363606861e4f034504ec5c153dabLogan Chientemplate <typename HandleT>
2065abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailestypename HandleTraits<HandleT>::PointerType GetObjectFromHandle(
20724e79f69125cf87fcaa78c04510a831037203eebStephen Hines    const HandleT& h) {
20824e79f69125cf87fcaa78c04510a831037203eebStephen Hines    return reinterpret_cast<typename HandleTraits<HandleT>::PointerType>(
20924e79f69125cf87fcaa78c04510a831037203eebStephen Hines        uintptr_t(h.handle));
21024e79f69125cf87fcaa78c04510a831037203eebStephen Hines}
21124e79f69125cf87fcaa78c04510a831037203eebStephen Hines
212b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillettemplate <typename T>
21324e79f69125cf87fcaa78c04510a831037203eebStephen Hinestypename T::HandleType GetHandleToObject(const T* obj) {
214d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    return typename T::HandleType(reinterpret_cast<uintptr_t>(obj));
2159207a2e495c8363606861e4f034504ec5c153dabLogan Chien}
2165abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
21724e79f69125cf87fcaa78c04510a831037203eebStephen Hines// -----------------------------------------------------------------------------
21824e79f69125cf87fcaa78c04510a831037203eebStephen Hines// Global
21924e79f69125cf87fcaa78c04510a831037203eebStephen Hines
220d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc BrouilletVkResult EnumerateInstanceExtensionProperties(const char*,
2219207a2e495c8363606861e4f034504ec5c153dabLogan Chien                                              uint32_t* count,
2225abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes                                              VkExtensionProperties*) {
22324e79f69125cf87fcaa78c04510a831037203eebStephen Hines    *count = 0;
22424e79f69125cf87fcaa78c04510a831037203eebStephen Hines    return VK_SUCCESS;
22524e79f69125cf87fcaa78c04510a831037203eebStephen Hines}
22648d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines
2275abbe0e9ca2508260b627ffef2bf01e2554e8357Chris WailesPFN_vkVoidFunction GetInstanceProcAddr(VkInstance, const char* name) {
2285abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    PFN_vkVoidFunction proc = LookupInstanceProcAddr(name);
229d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    if (!proc && strcmp(name, "vkGetDeviceProcAddr") == 0)
23024e79f69125cf87fcaa78c04510a831037203eebStephen Hines        proc = reinterpret_cast<PFN_vkVoidFunction>(GetDeviceProcAddr);
231d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    return proc;
23224e79f69125cf87fcaa78c04510a831037203eebStephen Hines}
23324e79f69125cf87fcaa78c04510a831037203eebStephen Hines
234474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc BrouilletPFN_vkVoidFunction GetDeviceProcAddr(VkDevice, const char* name) {
235474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    PFN_vkVoidFunction proc = LookupDeviceProcAddr(name);
236474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    if (proc)
237474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet        return proc;
238474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    if (strcmp(name, "vkGetSwapchainGrallocUsageANDROID") == 0)
239474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet        return reinterpret_cast<PFN_vkVoidFunction>(
2405abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes            GetSwapchainGrallocUsageANDROID);
241474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet    if (strcmp(name, "vkAcquireImageANDROID") == 0)
242474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet        return reinterpret_cast<PFN_vkVoidFunction>(AcquireImageANDROID);
24324e79f69125cf87fcaa78c04510a831037203eebStephen Hines    if (strcmp(name, "vkQueueSignalReleaseImageANDROID") == 0)
244e67239de8d94975e7e2216ee6860ae2e6cb8b15aStephen Hines        return reinterpret_cast<PFN_vkVoidFunction>(
245e67239de8d94975e7e2216ee6860ae2e6cb8b15aStephen Hines            QueueSignalReleaseImageANDROID);
24648d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines    return nullptr;
247e67239de8d94975e7e2216ee6860ae2e6cb8b15aStephen Hines}
2485bfec8dd08b3bde9ba3b331e2115210b0e910eaeStephen Hines
2499ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao// -----------------------------------------------------------------------------
2505abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes// Instance
2515abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
252462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaovoid DestroyInstance(VkInstance instance) {
2539ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    instance->alloc->pfnFree(instance->alloc->pUserData, instance);
2549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
2551f0d88fbff28e4e2dd563d93c8fe0047381c09ccShih-wei Liao
256b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet// -----------------------------------------------------------------------------
257b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet// PhysicalDevice
2589ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
2599ef2f785e0cc490af678dfd685995dec787321ffShih-wei LiaoVkResult EnumeratePhysicalDevices(VkInstance instance,
260b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet                                  uint32_t* physical_device_count,
2615abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes                                  VkPhysicalDevice* physical_devices) {
2629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    if (physical_devices && *physical_device_count >= 1)
2639ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao        physical_devices[0] = &instance->physical_device;
264cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    *physical_device_count = 1;
2656315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr    return VK_SUCCESS;
266d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines}
267462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
2689ef2f785e0cc490af678dfd685995dec787321ffShih-wei LiaoVkResult GetPhysicalDeviceProperties(VkPhysicalDevice,
269cd440ee9b3bdb7985a20b2cd4b0f8229de34f0a9Stephen Hines                                     VkPhysicalDeviceProperties* properties) {
270d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    properties->apiVersion = VK_API_VERSION;
2719207a2e495c8363606861e4f034504ec5c153dabLogan Chien    properties->driverVersion = VK_MAKE_VERSION(0, 0, 1);
2725abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    properties->vendorId = 0;
273cd440ee9b3bdb7985a20b2cd4b0f8229de34f0a9Stephen Hines    properties->deviceId = 0;
2746e6578a360497f78a181e63d7783422a9c9bfb15Stephen Hines    properties->deviceType = VK_PHYSICAL_DEVICE_TYPE_OTHER;
2755abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    strcpy(properties->deviceName, "Android Vulkan Null Driver");
276cd440ee9b3bdb7985a20b2cd4b0f8229de34f0a9Stephen Hines    memset(properties->pipelineCacheUUID, 0,
277cd440ee9b3bdb7985a20b2cd4b0f8229de34f0a9Stephen Hines           sizeof(properties->pipelineCacheUUID));
27824e79f69125cf87fcaa78c04510a831037203eebStephen Hines    return VK_SUCCESS;
2795abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes}
2809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
2815abbe0e9ca2508260b627ffef2bf01e2554e8357Chris WailesVkResult GetPhysicalDeviceQueueFamilyProperties(
2825abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    VkPhysicalDevice,
2839207a2e495c8363606861e4f034504ec5c153dabLogan Chien    uint32_t* count,
2845abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    VkQueueFamilyProperties* properties) {
2852ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines    if (properties) {
2862ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines        if (*count < 1)
287f8149d9e5a3795e9952717ee6346789a134c55c7Shih-wei Liao            return VK_INCOMPLETE;
288e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines        properties->queueFlags =
289e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines            VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_DMA_BIT;
290e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines        properties->queueCount = 1;
291e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines        properties->timestampValidBits = 64;
2925abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    }
2939207a2e495c8363606861e4f034504ec5c153dabLogan Chien    *count = 1;
2945abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    return VK_SUCCESS;
295e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
296e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
2979ef2f785e0cc490af678dfd685995dec787321ffShih-wei LiaoVkResult GetPhysicalDeviceMemoryProperties(
2989ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    VkPhysicalDevice,
2995abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    VkPhysicalDeviceMemoryProperties* properties) {
300f8149d9e5a3795e9952717ee6346789a134c55c7Shih-wei Liao    properties->memoryTypeCount = 1;
3019ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    properties->memoryTypes[0].propertyFlags =
3029ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao        VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
303f8149d9e5a3795e9952717ee6346789a134c55c7Shih-wei Liao    properties->memoryTypes[0].heapIndex = 0;
3049ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    properties->memoryHeapCount = 1;
3059ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    properties->memoryHeaps[0].size = kMaxDeviceMemory;
3069ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    properties->memoryHeaps[0].flags = VK_MEMORY_HEAP_HOST_LOCAL_BIT;
3079ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    return VK_SUCCESS;
3089ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
3090da0a7dc51c25943fe31d0bfccbdfee326a3199cZonr Chang
310e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines// -----------------------------------------------------------------------------
311b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet// Device
312462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
31348d893dc7794b3cfb74f35955ca763ee4170f9adStephen HinesVkResult CreateDevice(VkPhysicalDevice physical_device,
3145abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes                      const VkDeviceCreateInfo*,
3150da0a7dc51c25943fe31d0bfccbdfee326a3199cZonr Chang                      VkDevice* out_device) {
3162ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines    VkInstance_T* instance = GetInstanceFromPhysicalDevice(physical_device);
3172ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines    VkDevice_T* device = static_cast<VkDevice_T*>(instance->alloc->pfnAlloc(
3182ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines        instance->alloc->pUserData, sizeof(VkDevice_T), alignof(VkDevice_T),
3192ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
3202ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines    if (!device)
321d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet        return VK_ERROR_OUT_OF_HOST_MEMORY;
322d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet
323d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    device->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
324d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    device->instance = instance;
3255abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    device->queue.dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
3262ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines    std::fill(device->next_handle.begin(), device->next_handle.end(),
3279ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao              UINT64_C(0));
328462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
3299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    *out_device = device;
3309ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    return VK_SUCCESS;
3319ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
332e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
333d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouilletvoid DestroyDevice(VkDevice device) {
334ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    if (!device)
335ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines        return;
336ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    const VkAllocCallbacks* alloc = device->instance->alloc;
3375abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    alloc->pfnFree(alloc->pUserData, device);
338c808a99831115928b4648f4c8b86dc682594217aStephen Hines}
33924e79f69125cf87fcaa78c04510a831037203eebStephen Hines
340b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc BrouilletVkResult GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) {
341b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet    *queue = &device->queue;
342462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao    return VK_SUCCESS;
343aa82e74b08fcdc2e4e6c1f6796699566b331b656Stephen Hines}
344d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet
345aa82e74b08fcdc2e4e6c1f6796699566b331b656Stephen Hines// -----------------------------------------------------------------------------
3465abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes// CmdBuffer
347aa82e74b08fcdc2e4e6c1f6796699566b331b656Stephen Hines
3482e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr ChangVkResult CreateCommandBuffer(VkDevice device,
3492e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr Chang                             const VkCmdBufferCreateInfo*,
3502e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr Chang                             VkCmdBuffer* out_cmdbuf) {
35148d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines    const VkAllocCallbacks* alloc = device->instance->alloc;
3525abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    VkCmdBuffer_T* cmdbuf = static_cast<VkCmdBuffer_T*>(alloc->pfnAlloc(
3535abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes        alloc->pUserData, sizeof(VkCmdBuffer_T), alignof(VkCmdBuffer_T),
3549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
3559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    if (!cmdbuf)
3569ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao        return VK_ERROR_OUT_OF_HOST_MEMORY;
3579ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    cmdbuf->dispatch.magic = HWVULKAN_DISPATCH_MAGIC;
3589ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    *out_cmdbuf = cmdbuf;
359b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet    return VK_SUCCESS;
3609ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
3619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
3625abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailesvoid DestroyCommandBuffer(VkDevice device, VkCmdBuffer cmdbuf) {
363f8149d9e5a3795e9952717ee6346789a134c55c7Shih-wei Liao    const VkAllocCallbacks* alloc = device->instance->alloc;
3649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    alloc->pfnFree(alloc->pUserData, cmdbuf);
365b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet}
366462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
3679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao// -----------------------------------------------------------------------------
36848d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines// DeviceMemory
3695abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
3705abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailesstruct DeviceMemory {
3719ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    typedef VkDeviceMemory HandleType;
3729ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    VkDeviceSize size;
3739ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    alignas(16) uint8_t data[0];
3742e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr Chang};
3752e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr Changtemplate <>
376b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouilletstruct HandleTraits<VkDeviceMemory> {
3772e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr Chang    typedef DeviceMemory* PointerType;
37848d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines};
3795bfec8dd08b3bde9ba3b331e2115210b0e910eaeStephen Hines
3802e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr ChangVkResult AllocMemory(VkDevice device,
38148d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines                     const VkMemoryAllocInfo* alloc_info,
38248d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines                     VkDeviceMemory* mem_handle) {
38348d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines    if (SIZE_MAX - sizeof(DeviceMemory) <= alloc_info->allocationSize)
38448d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines        return VK_ERROR_OUT_OF_HOST_MEMORY;
38548d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines
3869ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    const VkAllocCallbacks* alloc = device->instance->alloc;
38748d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines    size_t size = sizeof(DeviceMemory) + size_t(alloc_info->allocationSize);
3885abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    DeviceMemory* mem = static_cast<DeviceMemory*>(
389462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao        alloc->pfnAlloc(alloc->pUserData, size, alignof(DeviceMemory),
3909ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
3919ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    if (!mem)
392462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao        return VK_ERROR_OUT_OF_HOST_MEMORY;
393e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    mem->size = size;
3945abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    *mem_handle = GetHandleToObject(mem);
3955abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    return VK_SUCCESS;
3965abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes}
3975abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
3985abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailesvoid FreeMemory(VkDevice device, VkDeviceMemory mem_handle) {
3995abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    const VkAllocCallbacks* alloc = device->instance->alloc;
4005abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    DeviceMemory* mem = GetObjectFromHandle(mem_handle);
401e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    alloc->pfnFree(alloc->pUserData, mem);
40248d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines}
4035bfec8dd08b3bde9ba3b331e2115210b0e910eaeStephen Hines
404e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult MapMemory(VkDevice,
405e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines                   VkDeviceMemory mem_handle,
406e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines                   VkDeviceSize offset,
4075abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes                   VkDeviceSize,
40878e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                   VkMemoryMapFlags,
40978e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                   void** out_ptr) {
410d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    DeviceMemory* mem = GetObjectFromHandle(mem_handle);
411d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    *out_ptr = &mem->data[0] + offset;
412d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    return VK_SUCCESS;
413d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines}
414d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines
415d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines// -----------------------------------------------------------------------------
416d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines// Buffer
41744f10063c2c08dab103a44cded0c3a288d65d43bStephen Hines
41844f10063c2c08dab103a44cded0c3a288d65d43bStephen Hinesstruct Buffer {
419d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    typedef VkBuffer HandleType;
420b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet    VkDeviceSize size;
421d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines};
4225abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailestemplate <>
423d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hinesstruct HandleTraits<VkBuffer> {
424d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    typedef Buffer* PointerType;
425d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines};
426d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines
427d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen HinesVkResult CreateBuffer(VkDevice device,
428d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines                      const VkBufferCreateInfo* create_info,
429d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines                      VkBuffer* buffer_handle) {
430d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    ALOGW_IF(create_info->size > kMaxDeviceMemory,
431d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines             "CreateBuffer: requested size 0x%" PRIx64
432d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines             " exceeds max device memory size 0x%" PRIx64,
433d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines             create_info->size, kMaxDeviceMemory);
434d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines
43511274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    const VkAllocCallbacks* alloc = device->instance->alloc;
436d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    Buffer* buffer = static_cast<Buffer*>(
437d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines        alloc->pfnAlloc(alloc->pUserData, sizeof(Buffer), alignof(Buffer),
438d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
439d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    if (!buffer)
440d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines        return VK_ERROR_OUT_OF_HOST_MEMORY;
44111274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    buffer->size = create_info->size;
44211274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    *buffer_handle = GetHandleToObject(buffer);
44311274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    return VK_SUCCESS;
444d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines}
445d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines
446d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen HinesVkResult GetBufferMemoryRequirements(VkDevice,
447d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines                                     VkBuffer buffer_handle,
44811274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines                                     VkMemoryRequirements* requirements) {
449ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    Buffer* buffer = GetObjectFromHandle(buffer_handle);
450ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    requirements->size = buffer->size;
45111274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    requirements->alignment = 16;  // allow fast Neon/SSE memcpy
452d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    requirements->memoryTypeBits = 0x1;
45311274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    return VK_SUCCESS;
45478e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines}
45511274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines
45611274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hinesvoid DestroyBuffer(VkDevice device, VkBuffer buffer_handle) {
45778e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    const VkAllocCallbacks* alloc = device->instance->alloc;
458d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    Buffer* buffer = GetObjectFromHandle(buffer_handle);
459d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    alloc->pfnFree(alloc->pUserData, buffer);
46011274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines}
461ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines
462ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines// -----------------------------------------------------------------------------
4635abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes// Image
46478e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines
46578e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hinesstruct Image {
46678e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    typedef VkImage HandleType;
46778e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    VkDeviceSize size;
46878e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines};
469b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillettemplate <>
470b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouilletstruct HandleTraits<VkImage> {
47178e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    typedef Image* PointerType;
47278e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines};
473d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines
4745abbe0e9ca2508260b627ffef2bf01e2554e8357Chris WailesVkResult CreateImage(VkDevice device,
475d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet                     const VkImageCreateInfo* create_info,
476d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet                     VkImage* image_handle) {
477d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines    if (create_info->imageType != VK_IMAGE_TYPE_2D ||
478d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines        create_info->format != VK_FORMAT_R8G8B8A8_UNORM ||
479d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines        create_info->mipLevels != 1) {
480d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines        ALOGE("CreateImage: not yet implemented: type=%d format=%d mips=%u",
481cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet              create_info->imageType, create_info->format,
48278e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines              create_info->mipLevels);
48378e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines        return VK_UNSUPPORTED;
48478e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    }
4855abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
48678e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    VkDeviceSize size =
48778e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines        VkDeviceSize(create_info->extent.width * create_info->extent.height) *
48878e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines        create_info->arraySize * create_info->samples * 4u;
48978e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    ALOGW_IF(size > kMaxDeviceMemory,
49078e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines             "CreateImage: image size 0x%" PRIx64
4915abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes             " exceeds max device memory size 0x%" PRIx64,
49278e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines             size, kMaxDeviceMemory);
49378e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines
49478e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    const VkAllocCallbacks* alloc = device->instance->alloc;
49578e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    Image* image = static_cast<Image*>(
49678e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines        alloc->pfnAlloc(alloc->pUserData, sizeof(Image), alignof(Image),
49778e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                        VK_SYSTEM_ALLOC_TYPE_API_OBJECT));
49878e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    if (!image)
49978e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines        return VK_ERROR_OUT_OF_HOST_MEMORY;
50078e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    image->size = size;
50178e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    *image_handle = GetHandleToObject(image);
50278e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    return VK_SUCCESS;
50378e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines}
5045abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
50578e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen HinesVkResult GetImageMemoryRequirements(VkDevice,
5065abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes                                    VkImage image_handle,
50778e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                                    VkMemoryRequirements* requirements) {
50878e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    Image* image = GetObjectFromHandle(image_handle);
50978e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    requirements->size = image->size;
51078e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    requirements->alignment = 16;  // allow fast Neon/SSE memcpy
51178e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    requirements->memoryTypeBits = 0x1;
51278e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    return VK_SUCCESS;
51378e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines}
51478e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines
51578e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hinesvoid DestroyImage(VkDevice device, VkImage image_handle) {
51678e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    const VkAllocCallbacks* alloc = device->instance->alloc;
51778e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    Image* image = GetObjectFromHandle(image_handle);
51878e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    alloc->pfnFree(alloc->pUserData, image);
51978e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines}
52078e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines
52178e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines// -----------------------------------------------------------------------------
52278e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines// No-op types
52378e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines
52478e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen HinesVkResult CreateBufferView(VkDevice device,
52578e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                          const VkBufferViewCreateInfo*,
526b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet                          VkBufferView* view) {
52778e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    *view = AllocHandle(device, HandleType::kBufferView);
528d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    return VK_SUCCESS;
529ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines}
53078e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines
53178e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen HinesVkResult CreateCommandPool(VkDevice device,
53278e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                           const VkCmdPoolCreateInfo*,
53378e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                           VkCmdPool* pool) {
53478e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    *pool = AllocHandle(device, HandleType::kCmdPool);
53578e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    return VK_SUCCESS;
53678e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines}
53778e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines
53811274a7324b478ec13e1d10a1b81350b34a65ab1Stephen HinesVkResult CreateDescriptorPool(VkDevice device,
53911274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines                              const VkDescriptorPoolCreateInfo*,
54011274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines                              VkDescriptorPool* pool) {
54111274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    *pool = AllocHandle(device, HandleType::kDescriptorPool);
54211274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    return VK_SUCCESS;
54311274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines}
54411274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines
545d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc BrouilletVkResult AllocDescriptorSets(VkDevice device,
546d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet                             VkDescriptorPool,
54711274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines                             VkDescriptorSetUsage,
548d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet                             uint32_t count,
549d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet                             const VkDescriptorSetLayout*,
55011274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines                             VkDescriptorSet* sets) {
551d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    for (uint32_t i = 0; i < count; i++)
552d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet        sets[i] = AllocHandle(device, HandleType::kDescriptorSet);
55311274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    return VK_SUCCESS;
554d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet}
55511274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines
55611274a7324b478ec13e1d10a1b81350b34a65ab1Stephen HinesVkResult CreateDescriptorSetLayout(VkDevice device,
55711274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines                                   const VkDescriptorSetLayoutCreateInfo*,
55811274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines                                   VkDescriptorSetLayout* layout) {
55978e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    *layout = AllocHandle(device, HandleType::kDescriptorSetLayout);
56078e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    return VK_SUCCESS;
56178e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines}
56278e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines
56311274a7324b478ec13e1d10a1b81350b34a65ab1Stephen HinesVkResult CreateEvent(VkDevice device,
56411274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines                     const VkEventCreateInfo*,
565d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet                     VkEvent* event) {
566d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    *event = AllocHandle(device, HandleType::kEvent);
567d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    return VK_SUCCESS;
56811274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines}
56911274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines
57011274a7324b478ec13e1d10a1b81350b34a65ab1Stephen HinesVkResult CreateFence(VkDevice device,
57111274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines                     const VkFenceCreateInfo*,
57211274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines                     VkFence* fence) {
57311274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    *fence = AllocHandle(device, HandleType::kFence);
57411274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    return VK_SUCCESS;
57511274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines}
57611274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines
577ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen HinesVkResult CreateFramebuffer(VkDevice device,
578ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines                           const VkFramebufferCreateInfo*,
579ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines                           VkFramebuffer* framebuffer) {
580ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    *framebuffer = AllocHandle(device, HandleType::kFramebuffer);
581ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    return VK_SUCCESS;
582ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines}
583ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines
584ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen HinesVkResult CreateImageView(VkDevice device,
585ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines                         const VkImageViewCreateInfo*,
586ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines                         VkImageView* view) {
587ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    *view = AllocHandle(device, HandleType::kImageView);
588ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    return VK_SUCCESS;
589ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines}
590ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines
591ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen HinesVkResult CreateGraphicsPipelines(VkDevice device,
592ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines                                 VkPipelineCache,
593ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines                                 uint32_t count,
594b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet                                 const VkGraphicsPipelineCreateInfo*,
595b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet                                 VkPipeline* pipelines) {
59678e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    for (uint32_t i = 0; i < count; i++)
597d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet        pipelines[i] = AllocHandle(device, HandleType::kPipeline);
598d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    return VK_SUCCESS;
599ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines}
60078e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines
60178e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen HinesVkResult CreateComputePipelines(VkDevice device,
60278e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                                VkPipelineCache,
60378e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                                uint32_t count,
604b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet                                const VkComputePipelineCreateInfo*,
605b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet                                VkPipeline* pipelines) {
606b13b85e31ac978254cb1ed7653f149f8a3eef460Stephen Hines    for (uint32_t i = 0; i < count; i++)
607b13b85e31ac978254cb1ed7653f149f8a3eef460Stephen Hines        pipelines[i] = AllocHandle(device, HandleType::kPipeline);
608fdae63e8142f56521813f59e0c506ed3a1636021Stephen Hines    return VK_SUCCESS;
609fdae63e8142f56521813f59e0c506ed3a1636021Stephen Hines}
61044f10063c2c08dab103a44cded0c3a288d65d43bStephen Hines
6115abbe0e9ca2508260b627ffef2bf01e2554e8357Chris WailesVkResult CreatePipelineCache(VkDevice device,
612b13b85e31ac978254cb1ed7653f149f8a3eef460Stephen Hines                             const VkPipelineCacheCreateInfo*,
613b13b85e31ac978254cb1ed7653f149f8a3eef460Stephen Hines                             VkPipelineCache* cache) {
614b13b85e31ac978254cb1ed7653f149f8a3eef460Stephen Hines    *cache = AllocHandle(device, HandleType::kPipelineCache);
615b13b85e31ac978254cb1ed7653f149f8a3eef460Stephen Hines    return VK_SUCCESS;
616d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet}
617ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines
61878e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen HinesVkResult CreatePipelineLayout(VkDevice device,
61978e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                              const VkPipelineLayoutCreateInfo*,
62078e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                              VkPipelineLayout* layout) {
621b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet    *layout = AllocHandle(device, HandleType::kPipelineLayout);
622b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet    return VK_SUCCESS;
623d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet}
624ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines
62578e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen HinesVkResult CreateQueryPool(VkDevice device,
62678e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                         const VkQueryPoolCreateInfo*,
62778e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines                         VkQueryPool* pool) {
62878e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    *pool = AllocHandle(device, HandleType::kQueryPool);
62978e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    return VK_SUCCESS;
63078e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines}
63178e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines
63278e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen HinesVkResult CreateRenderPass(VkDevice device,
633e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines                          const VkRenderPassCreateInfo*,
634e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines                          VkRenderPass* renderpass) {
635e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    *renderpass = AllocHandle(device, HandleType::kRenderPass);
636e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
637eca0534a31b6185d6ab758f5e97acd7a4cb21e8eJean-Luc Brouillet}
638eca0534a31b6185d6ab758f5e97acd7a4cb21e8eJean-Luc Brouillet
639eca0534a31b6185d6ab758f5e97acd7a4cb21e8eJean-Luc BrouilletVkResult CreateSampler(VkDevice device,
640eca0534a31b6185d6ab758f5e97acd7a4cb21e8eJean-Luc Brouillet                       const VkSamplerCreateInfo*,
641eca0534a31b6185d6ab758f5e97acd7a4cb21e8eJean-Luc Brouillet                       VkSampler* sampler) {
642eca0534a31b6185d6ab758f5e97acd7a4cb21e8eJean-Luc Brouillet    *sampler = AllocHandle(device, HandleType::kSampler);
643eca0534a31b6185d6ab758f5e97acd7a4cb21e8eJean-Luc Brouillet    return VK_SUCCESS;
644eca0534a31b6185d6ab758f5e97acd7a4cb21e8eJean-Luc Brouillet}
645eca0534a31b6185d6ab758f5e97acd7a4cb21e8eJean-Luc Brouillet
646eca0534a31b6185d6ab758f5e97acd7a4cb21e8eJean-Luc BrouilletVkResult CreateSemaphore(VkDevice device,
647e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines                         const VkSemaphoreCreateInfo*,
648e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines                         VkSemaphore* semaphore) {
649e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    *semaphore = AllocHandle(device, HandleType::kSemaphore);
65048d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines    return VK_SUCCESS;
6515bfec8dd08b3bde9ba3b331e2115210b0e910eaeStephen Hines}
6525abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
653e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult CreateShader(VkDevice device,
654e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines                      const VkShaderCreateInfo*,
655e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines                      VkShader* shader) {
656e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    *shader = AllocHandle(device, HandleType::kShader);
65748d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines    return VK_SUCCESS;
65848d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines}
659d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet
660d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc BrouilletVkResult CreateShaderModule(VkDevice device,
66148d893dc7794b3cfb74f35955ca763ee4170f9adStephen Hines                            const VkShaderModuleCreateInfo*,
662d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet                            VkShaderModule* module) {
663e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    *module = AllocHandle(device, HandleType::kShaderModule);
664e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
665e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
666e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
667e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult GetSwapchainGrallocUsageANDROID(VkDevice,
668e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines                                         VkFormat,
669e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines                                         VkImageUsageFlags,
670d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet                                         int* grallocUsage) {
671d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    // The null driver never reads or writes the gralloc buffer
672d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    *grallocUsage = 0;
673ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    return VK_SUCCESS;
674ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines}
67511274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines
67678e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen HinesVkResult AcquireImageANDROID(VkDevice, VkImage, int fence, VkSemaphore) {
67778e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    close(fence);
67878e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    return VK_SUCCESS;
679ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines}
680ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines
681ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen HinesVkResult QueueSignalReleaseImageANDROID(VkQueue, VkImage, int* fence) {
682ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    *fence = -1;
683ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines    return VK_SUCCESS;
684ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines}
685ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines
686ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines// -----------------------------------------------------------------------------
687ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines// No-op entrypoints
6885abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
689ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines// clang-format off
69011274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines#pragma clang diagnostic push
69111274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines#pragma clang diagnostic ignored "-Wunused-parameter"
692d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet
693d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc BrouilletVkResult GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures) {
69411274a7324b478ec13e1d10a1b81350b34a65ab1Stephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
695d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet    return VK_SUCCESS;
696ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines}
697ab94bccca64c9b126cbd1b732aa5e681d8639b99Stephen Hines
69878e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen HinesVkResult GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) {
69978e69cb06b9b0683b2ac9dcafde87b867690ef2fStephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
700e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
701e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
702e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
7038de1922e037612f2521acac2f4c4289a9f71450dStephen HinesVkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) {
704e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
705e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
7065abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes}
707e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
708e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) {
709e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
7105abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    return VK_SUCCESS;
711e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
712e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
713e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t* pCount, VkLayerProperties* pProperties) {
714b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet    ALOGV("TODO: vk%s", __FUNCTION__);
7155abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    return VK_SUCCESS;
716e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
717e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
718b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc BrouilletVkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pCount, VkExtensionProperties* pProperties) {
719b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet    ALOGV("TODO: vk%s", __FUNCTION__);
720e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
721e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
722b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet
723474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc BrouilletVkResult QueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence) {
7245abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    return VK_SUCCESS;
725474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet}
726e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
727474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc BrouilletVkResult QueueWaitIdle(VkQueue queue) {
728e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
729e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
730e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
731cd440ee9b3bdb7985a20b2cd4b0f8229de34f0a9Stephen Hines
732cd440ee9b3bdb7985a20b2cd4b0f8229de34f0a9Stephen HinesVkResult DeviceWaitIdle(VkDevice device) {
733cd440ee9b3bdb7985a20b2cd4b0f8229de34f0a9Stephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
734dd6206bb61bf8df2ed6b643abe8a29c48a315685Stephen Hines    return VK_SUCCESS;
735cd440ee9b3bdb7985a20b2cd4b0f8229de34f0a9Stephen Hines}
736cd440ee9b3bdb7985a20b2cd4b0f8229de34f0a9Stephen Hines
737cd440ee9b3bdb7985a20b2cd4b0f8229de34f0a9Stephen Hinesvoid UnmapMemory(VkDevice device, VkDeviceMemory mem) {
738e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
739e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
7405abbe0e9ca2508260b627ffef2bf01e2554e8357Chris WailesVkResult FlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) {
74183f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao    ALOGV("TODO: vk%s", __FUNCTION__);
74283f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao    return VK_SUCCESS;
74383f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao}
74483f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao
74583f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei LiaoVkResult InvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) {
74683f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao    ALOGV("TODO: vk%s", __FUNCTION__);
74783f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao    return VK_SUCCESS;
74883f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao}
74983f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao
7505abbe0e9ca2508260b627ffef2bf01e2554e8357Chris WailesVkResult GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) {
75183f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao    ALOGV("TODO: vk%s", __FUNCTION__);
75283f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao    return VK_SUCCESS;
75383f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao}
75483f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao
75583f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei LiaoVkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset) {
75683f0c6261efc8f397fc2509e3862bc6d0eb1e1c4Shih-wei Liao    return VK_SUCCESS;
757e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
758e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
759e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset) {
760e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
761e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
762b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet
763b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc BrouilletVkResult GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) {
764e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
7655abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    return VK_SUCCESS;
766e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
767e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
768e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, uint32_t samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) {
769e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
770e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
771e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
772e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
773e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult QueueBindSparseBufferMemory(VkQueue queue, VkBuffer buffer, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
774e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
775e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
776b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet}
777e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
778e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult QueueBindSparseImageOpaqueMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseMemoryBindInfo* pBindInfo) {
779e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
780e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
781e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
782340b5550cf63b6beae3b12c2e91377bce7704c34Stephen Hines
783e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult QueueBindSparseImageMemory(VkQueue queue, VkImage image, uint32_t numBindings, const VkSparseImageMemoryBindInfo* pBindInfo) {
784e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    ALOGV("TODO: vk%s", __FUNCTION__);
785e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
786e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
787e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
788e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hinesvoid DestroyFence(VkDevice device, VkFence fence) {
789e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines}
790e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines
791e5e64432476a44b59c61ded233b1149109c7a7c3Stephen HinesVkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) {
792e5e64432476a44b59c61ded233b1149109c7a7c3Stephen Hines    return VK_SUCCESS;
7939ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
7949ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
7959ef2f785e0cc490af678dfd685995dec787321ffShih-wei LiaoVkResult GetFenceStatus(VkDevice device, VkFence fence) {
7969ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    ALOGV("TODO: vk%s", __FUNCTION__);
7979ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    return VK_SUCCESS;
7989ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
7999ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
8009ef2f785e0cc490af678dfd685995dec787321ffShih-wei LiaoVkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout) {
8019ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    return VK_SUCCESS;
8029ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
8039ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
804b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouilletvoid DestroySemaphore(VkDevice device, VkSemaphore semaphore) {
805b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet}
8065abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
8079ef2f785e0cc490af678dfd685995dec787321ffShih-wei LiaoVkResult QueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore) {
8089ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    ALOGV("TODO: vk%s", __FUNCTION__);
809cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    return VK_SUCCESS;
8109ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
811cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet
81292b344a51c6c4934e96882bd401e4b13d6d03db8Zonr ChangVkResult QueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore) {
8139ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    return VK_SUCCESS;
8149ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
8159ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
8169ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid DestroyEvent(VkDevice device, VkEvent event) {
8179ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
818cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet
81992b344a51c6c4934e96882bd401e4b13d6d03db8Zonr ChangVkResult GetEventStatus(VkDevice device, VkEvent event) {
82092b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang    ALOGV("TODO: vk%s", __FUNCTION__);
82192b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang    return VK_SUCCESS;
82292b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang}
82392b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang
82492b344a51c6c4934e96882bd401e4b13d6d03db8Zonr ChangVkResult SetEvent(VkDevice device, VkEvent event) {
82592b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang    ALOGV("TODO: vk%s", __FUNCTION__);
826cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet    return VK_SUCCESS;
82792b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang}
82892b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang
82992b344a51c6c4934e96882bd401e4b13d6d03db8Zonr ChangVkResult ResetEvent(VkDevice device, VkEvent event) {
83092b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang    ALOGV("TODO: vk%s", __FUNCTION__);
83192b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang    return VK_SUCCESS;
83292b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang}
83392b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang
834cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouilletvoid DestroyQueryPool(VkDevice device, VkQueryPool queryPool) {
83592b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang}
83692b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang
83792b344a51c6c4934e96882bd401e4b13d6d03db8Zonr ChangVkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags) {
83892b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang    ALOGV("TODO: vk%s", __FUNCTION__);
83992b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang    return VK_SUCCESS;
8409ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
8419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
8429ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid DestroyBufferView(VkDevice device, VkBufferView bufferView) {
84392b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang}
8449ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
8459ef2f785e0cc490af678dfd685995dec787321ffShih-wei LiaoVkResult GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) {
8469ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    ALOGV("TODO: vk%s", __FUNCTION__);
8479ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    return VK_SUCCESS;
8489ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
8499ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
8509ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid DestroyImageView(VkDevice device, VkImageView imageView) {
8519ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
8529ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
8539ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid DestroyShaderModule(VkDevice device, VkShaderModule shaderModule) {
8549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
8559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
856b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouilletvoid DestroyShader(VkDevice device, VkShader shader) {
857b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet}
85892b344a51c6c4934e96882bd401e4b13d6d03db8Zonr Chang
8599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache) {
8609ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
8619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
8629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaosize_t GetPipelineCacheSize(VkDevice device, VkPipelineCache pipelineCache) {
8639ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    ALOGV("TODO: vk%s", __FUNCTION__);
864b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet    return VK_SUCCESS;
865b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet}
8669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
8679ef2f785e0cc490af678dfd685995dec787321ffShih-wei LiaoVkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, void* pData) {
8682e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr Chang    ALOGV("TODO: vk%s", __FUNCTION__);
8692e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr Chang    return VK_SUCCESS;
8702e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr Chang}
871b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet
8722e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr ChangVkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) {
8732e1dba6c779a0ae55c76d36a3c03553e16725ab7Zonr Chang    ALOGV("TODO: vk%s", __FUNCTION__);
8749ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    return VK_SUCCESS;
875d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet}
876d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet
8779ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid DestroyPipeline(VkDevice device, VkPipeline pipeline) {
8789ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
8799ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
8809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout) {
8819ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
882462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
8831f0d88fbff28e4e2dd563d93c8fe0047381c09ccShih-wei Liaovoid DestroySampler(VkDevice device, VkSampler sampler) {
8846315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr}
8859ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
8865abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailesvoid DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout) {
8879ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
888d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines
8895abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailesvoid DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
890d5a84f6d49d64738e4bb7c9dea7242e48acad959Stephen Hines}
891462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
892462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei LiaoVkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool) {
8939ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    ALOGV("TODO: vk%s", __FUNCTION__);
8949ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao    return VK_SUCCESS;
8959ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
896462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
897462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaovoid UpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies) {
898c95381a2c3b6e9117901eef0687e861e4d533bfeJean-Luc Brouillet    ALOGV("TODO: vk%s", __FUNCTION__);
899c95381a2c3b6e9117901eef0687e861e4d533bfeJean-Luc Brouillet}
900462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
901462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei LiaoVkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets) {
902c95381a2c3b6e9117901eef0687e861e4d533bfeJean-Luc Brouillet    ALOGV("TODO: vk%s", __FUNCTION__);
903c95381a2c3b6e9117901eef0687e861e4d533bfeJean-Luc Brouillet    return VK_SUCCESS;
904462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}
905462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
9066b6320ad5faee29e0f75fe937e40156746ef9e80Zonr Changvoid DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer) {
9076b6320ad5faee29e0f75fe937e40156746ef9e80Zonr Chang}
9086b6320ad5faee29e0f75fe937e40156746ef9e80Zonr Chang
909a41ce1d98094da84643995d40d71c529905123fcZonr Changvoid DestroyRenderPass(VkDevice device, VkRenderPass renderPass) {
9106b6320ad5faee29e0f75fe937e40156746ef9e80Zonr Chang}
9110da0a7dc51c25943fe31d0bfccbdfee326a3199cZonr Chang
9120da0a7dc51c25943fe31d0bfccbdfee326a3199cZonr ChangVkResult GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) {
9136315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr    ALOGV("TODO: vk%s", __FUNCTION__);
9145abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes    return VK_SUCCESS;
9150da0a7dc51c25943fe31d0bfccbdfee326a3199cZonr Chang}
9160da0a7dc51c25943fe31d0bfccbdfee326a3199cZonr Chang
9170da0a7dc51c25943fe31d0bfccbdfee326a3199cZonr Changvoid DestroyCommandPool(VkDevice device, VkCmdPool cmdPool) {
918b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet}
9190da0a7dc51c25943fe31d0bfccbdfee326a3199cZonr Chang
9200da0a7dc51c25943fe31d0bfccbdfee326a3199cZonr ChangVkResult ResetCommandPool(VkDevice device, VkCmdPool cmdPool, VkCmdPoolResetFlags flags) {
921b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet    ALOGV("TODO: vk%s", __FUNCTION__);
922b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet    return VK_SUCCESS;
923462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}
924462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
9253cd3dd327445fcfa49f0e96cb2de2055bce541e9Zonr ChangVkResult BeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo) {
9263cd3dd327445fcfa49f0e96cb2de2055bce541e9Zonr Chang    return VK_SUCCESS;
9273cd3dd327445fcfa49f0e96cb2de2055bce541e9Zonr Chang}
928641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang
9295abbe0e9ca2508260b627ffef2bf01e2554e8357Chris WailesVkResult EndCommandBuffer(VkCmdBuffer cmdBuffer) {
9303cd3dd327445fcfa49f0e96cb2de2055bce541e9Zonr Chang    return VK_SUCCESS;
931641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang}
932641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang
933641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr ChangVkResult ResetCommandBuffer(VkCmdBuffer cmdBuffer, VkCmdBufferResetFlags flags) {
934641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang    ALOGV("TODO: vk%s", __FUNCTION__);
935641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang    return VK_SUCCESS;
936641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang}
937641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang
938a7a828d1ff95c5a8f2327f56a137a2bcb3a9a8faZonr Changvoid CmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) {
939a7a828d1ff95c5a8f2327f56a137a2bcb3a9a8faZonr Chang}
940a7a828d1ff95c5a8f2327f56a137a2bcb3a9a8faZonr Chang
9419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid CmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports) {
942b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang}
943b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang
9449ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid CmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors) {
9459ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
9465abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
9479ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid CmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth) {
9489ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
9499ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
950462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaovoid CmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias) {
951462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}
952cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet
953b1771ef128b10c4d4575634828006bfba20b1d9cZonr Changvoid CmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4]) {
9549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
9559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
956462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaovoid CmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds) {
957b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang}
958474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
9593eb819ad8beec566a73b288204f9b75c2bb1d4e6Stephen Hinesvoid CmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask) {
9603eb819ad8beec566a73b288204f9b75c2bb1d4e6Stephen Hines}
961474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
9629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid CmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask) {
963462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}
964b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang
965b1771ef128b10c4d4575634828006bfba20b1d9cZonr Changvoid CmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference) {
9669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
9679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
9689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid CmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) {
9699ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
9709ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
971cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouilletvoid CmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) {
972b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet}
9735abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailes
9749ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid CmdBindVertexBuffers(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) {
9759ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
976b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang
977b1771ef128b10c4d4575634828006bfba20b1d9cZonr Changvoid CmdDraw(VkCmdBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) {
978b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang}
979b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang
980474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouilletvoid CmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) {
981474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet}
982474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
983474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouilletvoid CmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
984b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang}
985b1771ef128b10c4d4575634828006bfba20b1d9cZonr Chang
986b1771ef128b10c4d4575634828006bfba20b1d9cZonr Changvoid CmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) {
987474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet}
988474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet
989474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouilletvoid CmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z) {
990474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet}
9919ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
9929ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaovoid CmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset) {
993feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
994feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
995feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) {
996feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
997feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
998feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) {
999feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1000feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1001feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkTexFilter filter) {
1002feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1003b0fabe574945bfa85e688e77e9dcb5341fe08840Stephen Hines
1004feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
1005b0fabe574945bfa85e688e77e9dcb5341fe08840Stephen Hines}
1006b0fabe574945bfa85e688e77e9dcb5341fe08840Stephen Hines
1007b0fabe574945bfa85e688e77e9dcb5341fe08840Stephen Hinesvoid CmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) {
1008b0fabe574945bfa85e688e77e9dcb5341fe08840Stephen Hines}
1009b0fabe574945bfa85e688e77e9dcb5341fe08840Stephen Hines
1010b0fabe574945bfa85e688e77e9dcb5341fe08840Stephen Hinesvoid CmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData) {
1011b0fabe574945bfa85e688e77e9dcb5341fe08840Stephen Hines}
1012feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1013feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data) {
1014feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1015feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1016feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
1017feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1018feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1019feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdClearDepthStencilImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) {
1020feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1021feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1022feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdClearAttachments(VkCmdBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkRect3D* pRects) {
1023feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1024cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet
1025feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) {
1026feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1027feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1028feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
1029feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1030cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet
1031cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouilletvoid CmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) {
1032cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet}
1033feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1034feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdWaitEvents(VkCmdBuffer cmdBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
1035feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1036feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1037feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags destStageMask, VkBool32 byRegion, uint32_t memBarrierCount, const void* const* ppMemBarriers) {
1038feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1039feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1040feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags) {
1041feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1042feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1043feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) {
1044feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1045feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1046feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) {
1047feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1048feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1049feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset) {
1050feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
1051feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines
1052feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hinesvoid CmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags) {
1053feaca06fcb0772e9e972a0d61b17259fc5124d50Stephen Hines}
10549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1055474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouilletvoid CmdPushConstants(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values) {
1056474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet}
10576e6578a360497f78a181e63d7783422a9c9bfb15Stephen Hines
10589ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hinesvoid CmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents) {
10599ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hines}
10609ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hines
10619ae18b2bbee0b08afd400542e863dd665ff76059Stephen Hinesvoid CmdNextSubpass(VkCmdBuffer cmdBuffer, VkRenderPassContents contents) {
1062474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet}
1063462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
1064462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaovoid CmdEndRenderPass(VkCmdBuffer cmdBuffer) {
1065cec9b65aa890dea58e39951900ae13efb8d11703Jean-Luc Brouillet}
10662ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines
10675abbe0e9ca2508260b627ffef2bf01e2554e8357Chris Wailesvoid CmdExecuteCommands(VkCmdBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCmdBuffer* pCmdBuffers) {
10689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
1069462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
10709ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#pragma clang diagnostic pop
10719ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao// clang-format on
1072be27482cdeaf08576bc39b72a15d35d13014a636Logan
1073b095e05fef8f0230ab42eaed7a06c3b2d698189aJean-Luc Brouillet}  // namespace null_driver
1074474655a402e70cb329e1bcd4ebbe00bdc5be4206Jean-Luc Brouillet