1d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall/* 2d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * Copyright 2015 The Android Open Source Project 3d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * 4d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * Licensed under the Apache License, Version 2.0 (the "License"); 5d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * you may not use this file except in compliance with the License. 6d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * You may obtain a copy of the License at 7d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * 8d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * http://www.apache.org/licenses/LICENSE-2.0 9d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * 10d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * Unless required by applicable law or agreed to in writing, software 11d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * distributed under the License is distributed on an "AS IS" BASIS, 12d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * See the License for the specific language governing permissions and 14d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall * limitations under the License. 15d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall */ 16d02edcbb40d476b6d3b5ae279a6ccef786be8848Jesse Hall 1704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <hardware/hwvulkan.h> 1804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 191f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall#include <algorithm> 201f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall#include <array> 21715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall#include <inttypes.h> 22d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall#include <stdlib.h> 23715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall#include <string.h> 2404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 2573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall#include <log/log.h> 2604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <utils/Errors.h> 2704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 281f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall#include "null_driver_gen.h" 2904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 3004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallusing namespace null_driver; 3104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 3204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct VkPhysicalDevice_T { 3304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall hwvulkan_dispatch_t dispatch; 3404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}; 3504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 3604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct VkInstance_T { 3704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall hwvulkan_dispatch_t dispatch; 383fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VkAllocationCallbacks allocator; 3904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall VkPhysicalDevice_T physical_device; 40715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall uint64_t next_callback_handle; 4104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}; 4204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 4304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct VkQueue_T { 4404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall hwvulkan_dispatch_t dispatch; 4504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}; 4604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 473fbc856120217247c72fb5ed88500000f3881c45Jesse Hallstruct VkCommandBuffer_T { 4804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall hwvulkan_dispatch_t dispatch; 4904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}; 5004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 51f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hallnamespace { 52f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// Handles for non-dispatchable objects are either pointers, or arbitrary 53f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// 64-bit non-zero values. We only use pointers when we need to keep state for 54f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// the object even in a null driver. For the rest, we form a handle as: 55f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// [63:63] = 1 to distinguish from pointer handles* 56f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// [62:56] = non-zero handle type enum value 57f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// [55: 0] = per-handle-type incrementing counter 58f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// * This works because virtual addresses with the high bit set are reserved 59f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// for kernel data in all ABIs we run on. 60f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// 61f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// We never reclaim handles on vkDestroy*. It's not even necessary for us to 62f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// have distinct handles for live objects, and practically speaking we won't 63f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// ever create 2^56 objects of the same type from a single VkDevice in a null 64f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// driver. 65f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// 66f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// Using a namespace here instead of 'enum class' since we want scoped 67f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// constants but also want implicit conversions to integral types. 68f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hallnamespace HandleType { 69c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hallenum Enum { 70c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kBufferView, 71715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall kDebugReportCallbackEXT, 72c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kDescriptorPool, 73c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kDescriptorSet, 74c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kDescriptorSetLayout, 75c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kEvent, 76c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kFence, 77c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kFramebuffer, 78c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kImageView, 79c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kPipeline, 80c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kPipelineCache, 81c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kPipelineLayout, 82c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kQueryPool, 83c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kRenderPass, 84c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kSampler, 85c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kSemaphore, 86c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kShaderModule, 87c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall 88c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall kNumTypes 89c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall}; 90c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall} // namespace HandleType 91bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall 9200f10fec7d5cb96bc980a6d272dc8d33597a1b20Jesse Hallconst VkDeviceSize kMaxDeviceMemory = 0x10000000; // 256 MiB, arbitrary 93bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall 94c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall} // anonymous namespace 95f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall 9604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallstruct VkDevice_T { 9704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall hwvulkan_dispatch_t dispatch; 983fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VkAllocationCallbacks allocator; 9904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall VkInstance_T* instance; 10004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall VkQueue_T queue; 101f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall std::array<uint64_t, HandleType::kNumTypes> next_handle; 10204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}; 10304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 10404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// ----------------------------------------------------------------------------- 10504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// Declare HAL_MODULE_INFO_SYM early so it can be referenced by nulldrv_device 10604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// later. 10704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 10804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallnamespace { 10904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallint OpenDevice(const hw_module_t* module, const char* id, hw_device_t** device); 11004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallhw_module_methods_t nulldrv_module_methods = {.open = OpenDevice}; 11104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} // namespace 11204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 11304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#pragma clang diagnostic push 11404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#pragma clang diagnostic ignored "-Wmissing-variable-declarations" 11504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall__attribute__((visibility("default"))) hwvulkan_module_t HAL_MODULE_INFO_SYM = { 11604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall .common = 11704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall { 11803c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .tag = HARDWARE_MODULE_TAG, 11903c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .module_api_version = HWVULKAN_MODULE_API_VERSION_0_1, 12003c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .hal_api_version = HARDWARE_HAL_API_VERSION, 12103c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .id = HWVULKAN_HARDWARE_MODULE_ID, 12203c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .name = "Null Vulkan Driver", 12303c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .author = "The Android Open Source Project", 12403c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .methods = &nulldrv_module_methods, 12504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall }, 12604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall}; 12704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#pragma clang diagnostic pop 12804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// ----------------------------------------------------------------------------- 13004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallnamespace { 13204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallint CloseDevice(struct hw_device_t* /*device*/) { 13404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall // nothing to do - opening a device doesn't allocate any resources 13504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return 0; 13604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 13704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallhwvulkan_device_t nulldrv_device = { 13904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall .common = 14004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall { 14103c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .tag = HARDWARE_DEVICE_TAG, 14203c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .version = HWVULKAN_DEVICE_API_VERSION_0_1, 14303c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .module = &HAL_MODULE_INFO_SYM.common, 14403c64b0b525a2f259456a220c51bbc8438ae2c03Michael Lentine .close = CloseDevice, 14504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall }, 1465ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall .EnumerateInstanceExtensionProperties = 1475ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall EnumerateInstanceExtensionProperties, 14804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall .CreateInstance = CreateInstance, 14904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall .GetInstanceProcAddr = GetInstanceProcAddr}; 15004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 15104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallint OpenDevice(const hw_module_t* /*module*/, 15204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall const char* id, 15304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall hw_device_t** device) { 15404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall if (strcmp(id, HWVULKAN_DEVICE_0) == 0) { 15504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall *device = &nulldrv_device.common; 15604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return 0; 15704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall } 15804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return -ENOENT; 15904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 16004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 16104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkInstance_T* GetInstanceFromPhysicalDevice( 16204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall VkPhysicalDevice_T* physical_device) { 16304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return reinterpret_cast<VkInstance_T*>( 16404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall reinterpret_cast<uintptr_t>(physical_device) - 16504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall offsetof(VkInstance_T, physical_device)); 16604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 16704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 168715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Halluint64_t AllocHandle(uint64_t type, uint64_t* next_handle) { 169715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const uint64_t kHandleMask = (UINT64_C(1) << 56) - 1; 170715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall ALOGE_IF(*next_handle == kHandleMask, 171715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall "non-dispatchable handles of type=%" PRIu64 172715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall " are about to overflow", 173715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall type); 174715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall return (UINT64_C(1) << 63) | ((type & 0x7) << 56) | 175715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall ((*next_handle)++ & kHandleMask); 176715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall} 177715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 178715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Halltemplate <class Handle> 179715b86ac7d0853131b375ff786c87d8d87a762a1Jesse HallHandle AllocHandle(VkInstance instance, HandleType::Enum type) { 180715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall return reinterpret_cast<Handle>( 181715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall AllocHandle(type, &instance->next_callback_handle)); 182715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall} 183715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 1843fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentinetemplate <class Handle> 1853fec89ea37127fe292a6766b5320fcbf9574c0edMichael LentineHandle AllocHandle(VkDevice device, HandleType::Enum type) { 1863fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine return reinterpret_cast<Handle>( 187715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall AllocHandle(type, &device->next_handle[type])); 188f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall} 189f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall 190d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse HallVKAPI_ATTR void* DefaultAllocate(void*, 191d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall size_t size, 192d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall size_t alignment, 193d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall VkSystemAllocationScope) { 194d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall void* ptr = nullptr; 195d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall // Vulkan requires 'alignment' to be a power of two, but posix_memalign 196d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall // additionally requires that it be at least sizeof(void*). 197d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall int ret = posix_memalign(&ptr, std::max(alignment, sizeof(void*)), size); 198d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall return ret == 0 ? ptr : nullptr; 199d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall} 200d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall 201d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse HallVKAPI_ATTR void* DefaultReallocate(void*, 202d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall void* ptr, 203d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall size_t size, 204d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall size_t alignment, 205d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall VkSystemAllocationScope) { 206d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall if (size == 0) { 207d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall free(ptr); 208d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall return nullptr; 209d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall } 210d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall 211d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall // TODO(jessehall): Right now we never shrink allocations; if the new 212d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall // request is smaller than the existing chunk, we just continue using it. 213d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall // The null driver never reallocs, so this doesn't matter. If that changes, 214d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall // or if this code is copied into some other project, this should probably 215d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall // have a heuristic to allocate-copy-free when doing so will save "enough" 216d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall // space. 217d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall size_t old_size = ptr ? malloc_usable_size(ptr) : 0; 218d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall if (size <= old_size) 219d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall return ptr; 220d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall 221d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall void* new_ptr = nullptr; 222d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall if (posix_memalign(&new_ptr, std::max(alignment, sizeof(void*)), size) != 0) 223d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall return nullptr; 224d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall if (ptr) { 225d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall memcpy(new_ptr, ptr, std::min(old_size, size)); 226d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall free(ptr); 227d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall } 228d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall return new_ptr; 229d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall} 230d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall 231d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse HallVKAPI_ATTR void DefaultFree(void*, void* ptr) { 232d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall free(ptr); 233d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall} 234d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall 235d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hallconst VkAllocationCallbacks kDefaultAllocCallbacks = { 236d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall .pUserData = nullptr, 237d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall .pfnAllocation = DefaultAllocate, 238d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall .pfnReallocation = DefaultReallocate, 239d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall .pfnFree = DefaultFree, 240d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall}; 241d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall 24204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} // namespace 24304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 24404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallnamespace null_driver { 24504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 246a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall#define DEFINE_OBJECT_HANDLE_CONVERSION(T) \ 247a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall T* Get##T##FromHandle(Vk##T h); \ 248a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall T* Get##T##FromHandle(Vk##T h) { \ 249a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall return reinterpret_cast<T*>(uintptr_t(h)); \ 250a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall } \ 251a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall Vk##T GetHandleTo##T(const T* obj); \ 252a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall Vk##T GetHandleTo##T(const T* obj) { \ 253a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall return Vk##T(reinterpret_cast<uintptr_t>(obj)); \ 254a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall } 255f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall 25673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// ----------------------------------------------------------------------------- 25773ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// Global 25873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall 259e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse HallVKAPI_ATTR 260715b86ac7d0853131b375ff786c87d8d87a762a1Jesse HallVkResult EnumerateInstanceExtensionProperties( 261715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const char* layer_name, 262715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall uint32_t* count, 263715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkExtensionProperties* properties) { 264715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall if (layer_name) { 265715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall ALOGW( 266715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall "Driver vkEnumerateInstanceExtensionProperties shouldn't be called " 267715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall "with a layer name ('%s')", 268715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall layer_name); 269715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall } 270715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 2714b62e4fd280d4f7a24f906a83ff16f5cd74bf171Jesse Hall// NOTE: Change this to zero to report and extension, which can be useful 2724b62e4fd280d4f7a24f906a83ff16f5cd74bf171Jesse Hall// for testing changes to the loader. 2734b62e4fd280d4f7a24f906a83ff16f5cd74bf171Jesse Hall#if 1 2744b62e4fd280d4f7a24f906a83ff16f5cd74bf171Jesse Hall (void)properties; // unused 2754b62e4fd280d4f7a24f906a83ff16f5cd74bf171Jesse Hall *count = 0; 2764b62e4fd280d4f7a24f906a83ff16f5cd74bf171Jesse Hall return VK_SUCCESS; 2774b62e4fd280d4f7a24f906a83ff16f5cd74bf171Jesse Hall#else 278715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const VkExtensionProperties kExtensions[] = { 279715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall {VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION}}; 280715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const uint32_t kExtensionsCount = 281715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall sizeof(kExtensions) / sizeof(kExtensions[0]); 282715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 283715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall if (!properties || *count > kExtensionsCount) 284715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall *count = kExtensionsCount; 285715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall if (properties) 286715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall std::copy(kExtensions, kExtensions + *count, properties); 287715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall return *count < kExtensionsCount ? VK_INCOMPLETE : VK_SUCCESS; 2884b62e4fd280d4f7a24f906a83ff16f5cd74bf171Jesse Hall#endif 28973ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall} 29073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall 291e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse HallVKAPI_ATTR 292715b86ac7d0853131b375ff786c87d8d87a762a1Jesse HallVkResult CreateInstance(const VkInstanceCreateInfo* create_info, 2931f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall const VkAllocationCallbacks* allocator, 2941f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall VkInstance* out_instance) { 295d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall if (!allocator) 296d3b1450e6606cacff0d2c6e0ff6e45f1420ad5eeJesse Hall allocator = &kDefaultAllocCallbacks; 2971f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall 2981f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall VkInstance_T* instance = 2991f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall static_cast<VkInstance_T*>(allocator->pfnAllocation( 3001f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall allocator->pUserData, sizeof(VkInstance_T), alignof(VkInstance_T), 3011f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE)); 3021f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall if (!instance) 3031f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall return VK_ERROR_OUT_OF_HOST_MEMORY; 3041f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall 3051f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall instance->dispatch.magic = HWVULKAN_DISPATCH_MAGIC; 3061f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall instance->allocator = *allocator; 3071f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall instance->physical_device.dispatch.magic = HWVULKAN_DISPATCH_MAGIC; 308715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall instance->next_callback_handle = 0; 309715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 310715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall for (uint32_t i = 0; i < create_info->enabledExtensionCount; i++) { 311715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall if (strcmp(create_info->ppEnabledExtensionNames[i], 312715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VK_EXT_DEBUG_REPORT_EXTENSION_NAME) == 0) { 313b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall ALOGV("instance extension '%s' requested", 314b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall create_info->ppEnabledExtensionNames[i]); 315b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall } else { 316b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall ALOGW("unsupported extension '%s' requested", 317b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall create_info->ppEnabledExtensionNames[i]); 318715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall } 319715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall } 3201f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall 3211f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall *out_instance = instance; 3221f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall return VK_SUCCESS; 3231f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall} 3241f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall 3251f91d390ac013ea2514a67e12ddb083119d636d7Jesse HallVKAPI_ATTR 3261f91d390ac013ea2514a67e12ddb083119d636d7Jesse HallPFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* name) { 3271f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall return instance ? GetInstanceProcAddr(name) : GetGlobalProcAddr(name); 32804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 32904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 330e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse HallVKAPI_ATTR 33104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallPFN_vkVoidFunction GetDeviceProcAddr(VkDevice, const char* name) { 3321f91d390ac013ea2514a67e12ddb083119d636d7Jesse Hall return GetInstanceProcAddr(name); 33304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 33404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 33573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// ----------------------------------------------------------------------------- 33673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// Instance 33773ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall 33803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hallvoid DestroyInstance(VkInstance instance, 3393fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/) { 34003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall instance->allocator.pfnFree(instance->allocator.pUserData, instance); 34104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 34204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 34373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// ----------------------------------------------------------------------------- 34473ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// PhysicalDevice 34573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall 34604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult EnumeratePhysicalDevices(VkInstance instance, 34704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall uint32_t* physical_device_count, 34804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall VkPhysicalDevice* physical_devices) { 34904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall if (physical_devices && *physical_device_count >= 1) 35004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall physical_devices[0] = &instance->physical_device; 35104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall *physical_device_count = 1; 35204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 35304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 35404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 35557f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse HallVkResult EnumerateDeviceLayerProperties(VkPhysicalDevice /*gpu*/, 35657f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall uint32_t* count, 35757f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall VkLayerProperties* /*properties*/) { 35857f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall ALOGW("Driver vkEnumerateDeviceLayerProperties shouldn't be called"); 35957f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall *count = 0; 36057f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall return VK_SUCCESS; 36157f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall} 36257f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall 36357f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse HallVkResult EnumerateDeviceExtensionProperties(VkPhysicalDevice /*gpu*/, 36457f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall const char* layer_name, 36557f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall uint32_t* count, 36657f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall VkExtensionProperties* properties) { 36757f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall if (layer_name) { 36857f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall ALOGW( 36957f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall "Driver vkEnumerateDeviceExtensionProperties shouldn't be called " 37057f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall "with a layer name ('%s')", 37157f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall layer_name); 37257f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall *count = 0; 37357f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall return VK_SUCCESS; 37457f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall } 37557f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall 37657f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall const VkExtensionProperties kExtensions[] = { 37757f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall {VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME, 37857f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION}}; 37957f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall const uint32_t kExtensionsCount = 38057f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall sizeof(kExtensions) / sizeof(kExtensions[0]); 38157f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall 38257f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall if (!properties || *count > kExtensionsCount) 38357f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall *count = kExtensionsCount; 38457f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall if (properties) 38557f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall std::copy(kExtensions, kExtensions + *count, properties); 38657f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall return *count < kExtensionsCount ? VK_INCOMPLETE : VK_SUCCESS; 38757f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall} 38857f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall 389606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetPhysicalDeviceProperties(VkPhysicalDevice, 390606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hall VkPhysicalDeviceProperties* properties) { 3912676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall properties->apiVersion = VK_MAKE_VERSION(1, 0, VK_HEADER_VERSION); 39204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall properties->driverVersion = VK_MAKE_VERSION(0, 0, 1); 39365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall properties->vendorID = 0; 39465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall properties->deviceID = 0; 39504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall properties->deviceType = VK_PHYSICAL_DEVICE_TYPE_OTHER; 39604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall strcpy(properties->deviceName, "Android Vulkan Null Driver"); 39704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall memset(properties->pipelineCacheUUID, 0, 39804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall sizeof(properties->pipelineCacheUUID)); 399c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall properties->limits = VkPhysicalDeviceLimits{ 400c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4096, // maxImageDimension1D 401c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4096, // maxImageDimension2D 402c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 256, // maxImageDimension3D 403c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4096, // maxImageDimensionCube 404c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 256, // maxImageArrayLayers 405c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 65536, // maxTexelBufferElements 406c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 16384, // maxUniformBufferRange 407c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 1 << 27, // maxStorageBufferRange 408c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 128, // maxPushConstantsSize 409c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4096, // maxMemoryAllocationCount 410c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4000, // maxSamplerAllocationCount 411c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 1, // bufferImageGranularity 412c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // sparseAddressSpaceSize 413c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // maxBoundDescriptorSets 414c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 16, // maxPerStageDescriptorSamplers 415c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 12, // maxPerStageDescriptorUniformBuffers 416c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // maxPerStageDescriptorStorageBuffers 417c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 16, // maxPerStageDescriptorSampledImages 418c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // maxPerStageDescriptorStorageImages 419c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // maxPerStageDescriptorInputAttachments 420c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 128, // maxPerStageResources 421c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 96, // maxDescriptorSetSamplers 422c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 72, // maxDescriptorSetUniformBuffers 423c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 8, // maxDescriptorSetUniformBuffersDynamic 424c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 24, // maxDescriptorSetStorageBuffers 425c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // maxDescriptorSetStorageBuffersDynamic 426c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 96, // maxDescriptorSetSampledImages 427c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 24, // maxDescriptorSetStorageImages 428c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // maxDescriptorSetInputAttachments 429c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 16, // maxVertexInputAttributes 430c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 16, // maxVertexInputBindings 431c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 2047, // maxVertexInputAttributeOffset 432c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 2048, // maxVertexInputBindingStride 433c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 64, // maxVertexOutputComponents 434c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxTessellationGenerationLevel 435c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxTessellationPatchSize 436c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxTessellationControlPerVertexInputComponents 437c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxTessellationControlPerVertexOutputComponents 438c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxTessellationControlPerPatchOutputComponents 439c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxTessellationControlTotalOutputComponents 440c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxTessellationEvaluationInputComponents 441c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxTessellationEvaluationOutputComponents 442c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxGeometryShaderInvocations 443c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxGeometryInputComponents 444c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxGeometryOutputComponents 445c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxGeometryOutputVertices 446c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxGeometryTotalOutputComponents 447c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 64, // maxFragmentInputComponents 448c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // maxFragmentOutputAttachments 449c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxFragmentDualSrcAttachments 450c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // maxFragmentCombinedOutputResources 451c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 16384, // maxComputeSharedMemorySize 452c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall {65536, 65536, 65536}, // maxComputeWorkGroupCount[3] 453c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 128, // maxComputeWorkGroupInvocations 454c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall {128, 128, 64}, // maxComputeWorkGroupSize[3] 455c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // subPixelPrecisionBits 456c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // subTexelPrecisionBits 457c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // mipmapPrecisionBits 458c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall UINT32_MAX, // maxDrawIndexedIndexValue 459c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 1, // maxDrawIndirectCount 460c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 2, // maxSamplerLodBias 461c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 1, // maxSamplerAnisotropy 462c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 1, // maxViewports 463c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall {4096, 4096}, // maxViewportDimensions[2] 464c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall {-8192.0f, 8191.0f}, // viewportBoundsRange[2] 465c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // viewportSubPixelBits 466c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 64, // minMemoryMapAlignment 467c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 256, // minTexelBufferOffsetAlignment 468c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 256, // minUniformBufferOffsetAlignment 469c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 256, // minStorageBufferOffsetAlignment 470c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall -8, // minTexelOffset 471c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 7, // maxTexelOffset 472c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // minTexelGatherOffset 473c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxTexelGatherOffset 474c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0.0f, // minInterpolationOffset 475c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0.0f, // maxInterpolationOffset 476c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // subPixelInterpolationOffsetBits 477c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4096, // maxFramebufferWidth 478c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4096, // maxFramebufferHeight 479c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 256, // maxFramebufferLayers 480c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_1_BIT | 481c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_4_BIT, // framebufferColorSampleCounts 482c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_1_BIT | 483c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_4_BIT, // framebufferDepthSampleCounts 484c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_1_BIT | 485c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_4_BIT, // framebufferStencilSampleCounts 486c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_1_BIT | 487c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_4_BIT, // framebufferNoAttachmentsSampleCounts 488c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 4, // maxColorAttachments 489c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_1_BIT | 490c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_4_BIT, // sampledImageColorSampleCounts 491c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_1_BIT, // sampledImageIntegerSampleCounts 492c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_1_BIT | 493c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_4_BIT, // sampledImageDepthSampleCounts 494c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_1_BIT | 495c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_4_BIT, // sampledImageStencilSampleCounts 496c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_SAMPLE_COUNT_1_BIT, // storageImageSampleCounts 497c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 1, // maxSampleMaskWords 498c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_TRUE, // timestampComputeAndGraphics 499c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 1, // timestampPeriod 500c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxClipDistances 501c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxCullDistances 502c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0, // maxCombinedClipAndCullDistances 503c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 2, // discreteQueuePriorities 504c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall {1.0f, 1.0f}, // pointSizeRange[2] 505c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall {1.0f, 1.0f}, // lineWidthRange[2] 506c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0.0f, // pointSizeGranularity 507c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 0.0f, // lineWidthGranularity 508c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_TRUE, // strictLines 509c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall VK_TRUE, // standardSampleLocations 510c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 1, // optimalBufferCopyOffsetAlignment 511c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 1, // optimalBufferCopyRowPitchAlignment 512c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall 64, // nonCoherentAtomSize 513c34849e83c9bdf2a1d768e621ba6304f905fba93Jesse Hall }; 51404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 51504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 516606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetPhysicalDeviceQueueFamilyProperties( 5175ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall VkPhysicalDevice, 5185ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall uint32_t* count, 5195ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall VkQueueFamilyProperties* properties) { 520715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall if (!properties || *count > 1) 521715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall *count = 1; 522715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall if (properties && *count == 1) { 52365ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall properties->queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | 52465ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall VK_QUEUE_TRANSFER_BIT; 5255ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall properties->queueCount = 1; 526acfa53409aa45de2c12f10617222e0d593e8f2dfJesse Hall properties->timestampValidBits = 64; 527715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall properties->minImageTransferGranularity = VkExtent3D{1, 1, 1}; 5285ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall } 5295ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall} 5305ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 531606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetPhysicalDeviceMemoryProperties( 53273ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall VkPhysicalDevice, 53373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall VkPhysicalDeviceMemoryProperties* properties) { 53473ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall properties->memoryTypeCount = 1; 53573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall properties->memoryTypes[0].propertyFlags = 536d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | 537d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | 538d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | 539d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall VK_MEMORY_PROPERTY_HOST_CACHED_BIT; 54073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall properties->memoryTypes[0].heapIndex = 0; 54173ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall properties->memoryHeapCount = 1; 542bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall properties->memoryHeaps[0].size = kMaxDeviceMemory; 543d1af812f20e0793d94702817d441ab799bf46df7Jesse Hall properties->memoryHeaps[0].flags = VK_MEMORY_HEAP_DEVICE_LOCAL_BIT; 54404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 54504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 5468e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hallvoid GetPhysicalDeviceFeatures(VkPhysicalDevice /*gpu*/, 5478e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VkPhysicalDeviceFeatures* features) { 5488e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall *features = VkPhysicalDeviceFeatures{ 5498e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_TRUE, // robustBufferAccess 5508e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // fullDrawIndexUint32 5518e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // imageCubeArray 5528e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // independentBlend 5538e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // geometryShader 5548e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // tessellationShader 5558e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // sampleRateShading 5568e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // dualSrcBlend 5578e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // logicOp 5588e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // multiDrawIndirect 5598e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // drawIndirectFirstInstance 5608e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // depthClamp 5618e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // depthBiasClamp 5628e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // fillModeNonSolid 5638e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // depthBounds 5648e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // wideLines 5658e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // largePoints 5668e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // alphaToOne 5678e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // multiViewport 5688e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // samplerAnisotropy 5698e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // textureCompressionETC2 5708e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // textureCompressionASTC_LDR 5718e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // textureCompressionBC 5728e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // occlusionQueryPrecise 5738e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // pipelineStatisticsQuery 5748e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // vertexPipelineStoresAndAtomics 5758e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // fragmentStoresAndAtomics 5768e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderTessellationAndGeometryPointSize 5778e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderImageGatherExtended 5788e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderStorageImageExtendedFormats 5798e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderStorageImageMultisample 5808e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderStorageImageReadWithoutFormat 5818e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderStorageImageWriteWithoutFormat 5828e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderUniformBufferArrayDynamicIndexing 5838e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderSampledImageArrayDynamicIndexing 5848e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderStorageBufferArrayDynamicIndexing 5858e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderStorageImageArrayDynamicIndexing 5868e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderClipDistance 5878e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderCullDistance 5888e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderFloat64 5898e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderInt64 5908e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderInt16 5918e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderResourceResidency 5928e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // shaderResourceMinLod 5938e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // sparseBinding 5948e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // sparseResidencyBuffer 5958e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // sparseResidencyImage2D 5968e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // sparseResidencyImage3D 5978e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // sparseResidency2Samples 5988e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // sparseResidency4Samples 5998e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // sparseResidency8Samples 6008e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // sparseResidency16Samples 6018e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // sparseResidencyAliased 6028e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // variableMultisampleRate 6038e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall VK_FALSE, // inheritedQueries 6048e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall }; 6058e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall} 6068e37cf3509b211e8acd4e60437bdbda1cb9278cbJesse Hall 60773ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// ----------------------------------------------------------------------------- 60873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall// Device 60973ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall 61004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse HallVkResult CreateDevice(VkPhysicalDevice physical_device, 611b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall const VkDeviceCreateInfo* create_info, 6123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* allocator, 61304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall VkDevice* out_device) { 61404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall VkInstance_T* instance = GetInstanceFromPhysicalDevice(physical_device); 61503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall if (!allocator) 61603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator = &instance->allocator; 6173fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VkDevice_T* device = static_cast<VkDevice_T*>(allocator->pfnAllocation( 6183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall allocator->pUserData, sizeof(VkDevice_T), alignof(VkDevice_T), 6193fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VK_SYSTEM_ALLOCATION_SCOPE_DEVICE)); 62004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall if (!device) 62104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_ERROR_OUT_OF_HOST_MEMORY; 62204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 62304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall device->dispatch.magic = HWVULKAN_DISPATCH_MAGIC; 62403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall device->allocator = *allocator; 62504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall device->instance = instance; 62604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall device->queue.dispatch.magic = HWVULKAN_DISPATCH_MAGIC; 627f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall std::fill(device->next_handle.begin(), device->next_handle.end(), 628f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall UINT64_C(0)); 62904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 630b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall for (uint32_t i = 0; i < create_info->enabledExtensionCount; i++) { 631b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall if (strcmp(create_info->ppEnabledExtensionNames[i], 632b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME) == 0) { 633b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall ALOGV("Enabling " VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME); 634b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall } 635b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall } 636b147127b06c1ce6443839e8102d1ed2631a57b07Jesse Hall 63704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall *out_device = device; 63804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 63904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 64004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 6413fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyDevice(VkDevice device, 6423fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/) { 64304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall if (!device) 644cf25c4174dca708032ea83ac7ae2baad9e575b29Jesse Hall return; 64503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall device->allocator.pfnFree(device->allocator.pUserData, device); 64604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 64704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 648606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetDeviceQueue(VkDevice device, uint32_t, uint32_t, VkQueue* queue) { 64904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall *queue = &device->queue; 65004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 65104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 65204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// ----------------------------------------------------------------------------- 6533fbc856120217247c72fb5ed88500000f3881c45Jesse Hall// CommandPool 65403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall 6553fbc856120217247c72fb5ed88500000f3881c45Jesse Hallstruct CommandPool { 6563fbc856120217247c72fb5ed88500000f3881c45Jesse Hall typedef VkCommandPool HandleType; 6573fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VkAllocationCallbacks allocator; 65803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall}; 6593fbc856120217247c72fb5ed88500000f3881c45Jesse HallDEFINE_OBJECT_HANDLE_CONVERSION(CommandPool) 66003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall 66103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse HallVkResult CreateCommandPool(VkDevice device, 6623fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkCommandPoolCreateInfo* /*create_info*/, 6633fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* allocator, 6643fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VkCommandPool* cmd_pool) { 66503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall if (!allocator) 66603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator = &device->allocator; 6673fbc856120217247c72fb5ed88500000f3881c45Jesse Hall CommandPool* pool = static_cast<CommandPool*>(allocator->pfnAllocation( 6683fbc856120217247c72fb5ed88500000f3881c45Jesse Hall allocator->pUserData, sizeof(CommandPool), alignof(CommandPool), 6693fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VK_SYSTEM_ALLOCATION_SCOPE_OBJECT)); 67003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall if (!pool) 67103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall return VK_ERROR_OUT_OF_HOST_MEMORY; 67203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall pool->allocator = *allocator; 6733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall *cmd_pool = GetHandleToCommandPool(pool); 67403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall return VK_SUCCESS; 67503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall} 67603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall 67703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hallvoid DestroyCommandPool(VkDevice /*device*/, 6783fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VkCommandPool cmd_pool, 6793fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/) { 6803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall CommandPool* pool = GetCommandPoolFromHandle(cmd_pool); 68103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall pool->allocator.pfnFree(pool->allocator.pUserData, pool); 68203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall} 68303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall 68403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall// ----------------------------------------------------------------------------- 685c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall// CmdBuffer 686c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall 6873fbc856120217247c72fb5ed88500000f3881c45Jesse HallVkResult AllocateCommandBuffers(VkDevice /*device*/, 6883fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkCommandBufferAllocateInfo* alloc_info, 6893fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VkCommandBuffer* cmdbufs) { 690fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall VkResult result = VK_SUCCESS; 6913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall CommandPool& pool = *GetCommandPoolFromHandle(alloc_info->commandPool); 6923dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall std::fill(cmdbufs, cmdbufs + alloc_info->commandBufferCount, nullptr); 6933dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall for (uint32_t i = 0; i < alloc_info->commandBufferCount; i++) { 6943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall cmdbufs[i] = 6953fbc856120217247c72fb5ed88500000f3881c45Jesse Hall static_cast<VkCommandBuffer_T*>(pool.allocator.pfnAllocation( 6963fbc856120217247c72fb5ed88500000f3881c45Jesse Hall pool.allocator.pUserData, sizeof(VkCommandBuffer_T), 6973fbc856120217247c72fb5ed88500000f3881c45Jesse Hall alignof(VkCommandBuffer_T), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT)); 698fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall if (!cmdbufs[i]) { 699fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall result = VK_ERROR_OUT_OF_HOST_MEMORY; 700fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall break; 701fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall } 702fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall cmdbufs[i]->dispatch.magic = HWVULKAN_DISPATCH_MAGIC; 703fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall } 704fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall if (result != VK_SUCCESS) { 7053dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall for (uint32_t i = 0; i < alloc_info->commandBufferCount; i++) { 706fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall if (!cmdbufs[i]) 707fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall break; 70803b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall pool.allocator.pfnFree(pool.allocator.pUserData, cmdbufs[i]); 709fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall } 710fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall } 711fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall return result; 712c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall} 713c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall 71403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hallvoid FreeCommandBuffers(VkDevice /*device*/, 7153fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VkCommandPool cmd_pool, 716fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall uint32_t count, 7173fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkCommandBuffer* cmdbufs) { 7183fbc856120217247c72fb5ed88500000f3881c45Jesse Hall CommandPool& pool = *GetCommandPoolFromHandle(cmd_pool); 719fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse Hall for (uint32_t i = 0; i < count; i++) 72003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall pool.allocator.pfnFree(pool.allocator.pUserData, cmdbufs[i]); 721c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall} 722c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall 723c7a6eb56a2c967685f70d30c643f899b0425c0eaJesse Hall// ----------------------------------------------------------------------------- 7242077ce0c0d7ca716c408826449314ac799eda650Jesse Hall// DeviceMemory 7252077ce0c0d7ca716c408826449314ac799eda650Jesse Hall 7262077ce0c0d7ca716c408826449314ac799eda650Jesse Hallstruct DeviceMemory { 7272077ce0c0d7ca716c408826449314ac799eda650Jesse Hall typedef VkDeviceMemory HandleType; 7282077ce0c0d7ca716c408826449314ac799eda650Jesse Hall VkDeviceSize size; 7292077ce0c0d7ca716c408826449314ac799eda650Jesse Hall alignas(16) uint8_t data[0]; 7302077ce0c0d7ca716c408826449314ac799eda650Jesse Hall}; 731a3a7a1d37bdfad56245b75edac49f8aceded321dJesse HallDEFINE_OBJECT_HANDLE_CONVERSION(DeviceMemory) 7322077ce0c0d7ca716c408826449314ac799eda650Jesse Hall 7333fbc856120217247c72fb5ed88500000f3881c45Jesse HallVkResult AllocateMemory(VkDevice device, 7343fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkMemoryAllocateInfo* alloc_info, 7353fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* allocator, 7363fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VkDeviceMemory* mem_handle) { 7372077ce0c0d7ca716c408826449314ac799eda650Jesse Hall if (SIZE_MAX - sizeof(DeviceMemory) <= alloc_info->allocationSize) 7382077ce0c0d7ca716c408826449314ac799eda650Jesse Hall return VK_ERROR_OUT_OF_HOST_MEMORY; 73903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall if (!allocator) 74003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator = &device->allocator; 7412077ce0c0d7ca716c408826449314ac799eda650Jesse Hall 7422077ce0c0d7ca716c408826449314ac799eda650Jesse Hall size_t size = sizeof(DeviceMemory) + size_t(alloc_info->allocationSize); 7433fbc856120217247c72fb5ed88500000f3881c45Jesse Hall DeviceMemory* mem = static_cast<DeviceMemory*>(allocator->pfnAllocation( 7443fbc856120217247c72fb5ed88500000f3881c45Jesse Hall allocator->pUserData, size, alignof(DeviceMemory), 7453fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VK_SYSTEM_ALLOCATION_SCOPE_OBJECT)); 7462077ce0c0d7ca716c408826449314ac799eda650Jesse Hall if (!mem) 7472077ce0c0d7ca716c408826449314ac799eda650Jesse Hall return VK_ERROR_OUT_OF_HOST_MEMORY; 7482077ce0c0d7ca716c408826449314ac799eda650Jesse Hall mem->size = size; 749a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall *mem_handle = GetHandleToDeviceMemory(mem); 7502077ce0c0d7ca716c408826449314ac799eda650Jesse Hall return VK_SUCCESS; 7512077ce0c0d7ca716c408826449314ac799eda650Jesse Hall} 7522077ce0c0d7ca716c408826449314ac799eda650Jesse Hall 75303b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hallvoid FreeMemory(VkDevice device, 75403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall VkDeviceMemory mem_handle, 7553fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* allocator) { 75603b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall if (!allocator) 75703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator = &device->allocator; 758a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall DeviceMemory* mem = GetDeviceMemoryFromHandle(mem_handle); 75903b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator->pfnFree(allocator->pUserData, mem); 7602077ce0c0d7ca716c408826449314ac799eda650Jesse Hall} 7612077ce0c0d7ca716c408826449314ac799eda650Jesse Hall 7622077ce0c0d7ca716c408826449314ac799eda650Jesse HallVkResult MapMemory(VkDevice, 7632077ce0c0d7ca716c408826449314ac799eda650Jesse Hall VkDeviceMemory mem_handle, 7642077ce0c0d7ca716c408826449314ac799eda650Jesse Hall VkDeviceSize offset, 7652077ce0c0d7ca716c408826449314ac799eda650Jesse Hall VkDeviceSize, 7662077ce0c0d7ca716c408826449314ac799eda650Jesse Hall VkMemoryMapFlags, 7672077ce0c0d7ca716c408826449314ac799eda650Jesse Hall void** out_ptr) { 768a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall DeviceMemory* mem = GetDeviceMemoryFromHandle(mem_handle); 7692077ce0c0d7ca716c408826449314ac799eda650Jesse Hall *out_ptr = &mem->data[0] + offset; 7702077ce0c0d7ca716c408826449314ac799eda650Jesse Hall return VK_SUCCESS; 7712077ce0c0d7ca716c408826449314ac799eda650Jesse Hall} 7722077ce0c0d7ca716c408826449314ac799eda650Jesse Hall 7732077ce0c0d7ca716c408826449314ac799eda650Jesse Hall// ----------------------------------------------------------------------------- 774f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall// Buffer 775f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall 776f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hallstruct Buffer { 777f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall typedef VkBuffer HandleType; 778f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall VkDeviceSize size; 779f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall}; 780a3a7a1d37bdfad56245b75edac49f8aceded321dJesse HallDEFINE_OBJECT_HANDLE_CONVERSION(Buffer) 781f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall 782f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse HallVkResult CreateBuffer(VkDevice device, 783f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall const VkBufferCreateInfo* create_info, 7843fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* allocator, 785f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall VkBuffer* buffer_handle) { 786bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall ALOGW_IF(create_info->size > kMaxDeviceMemory, 787bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall "CreateBuffer: requested size 0x%" PRIx64 788bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall " exceeds max device memory size 0x%" PRIx64, 789bde8ee3037ed1e26d4e603332137c88e6c6d55cbJesse Hall create_info->size, kMaxDeviceMemory); 79003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall if (!allocator) 79103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator = &device->allocator; 7923fbc856120217247c72fb5ed88500000f3881c45Jesse Hall Buffer* buffer = static_cast<Buffer*>(allocator->pfnAllocation( 7933fbc856120217247c72fb5ed88500000f3881c45Jesse Hall allocator->pUserData, sizeof(Buffer), alignof(Buffer), 7943fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VK_SYSTEM_ALLOCATION_SCOPE_OBJECT)); 795f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall if (!buffer) 796f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall return VK_ERROR_OUT_OF_HOST_MEMORY; 797f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall buffer->size = create_info->size; 798a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall *buffer_handle = GetHandleToBuffer(buffer); 799f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall return VK_SUCCESS; 800f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall} 801f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall 802606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetBufferMemoryRequirements(VkDevice, 803606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hall VkBuffer buffer_handle, 804606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hall VkMemoryRequirements* requirements) { 805a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall Buffer* buffer = GetBufferFromHandle(buffer_handle); 806f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall requirements->size = buffer->size; 807f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall requirements->alignment = 16; // allow fast Neon/SSE memcpy 808f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall requirements->memoryTypeBits = 0x1; 809f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall} 810f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall 81103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hallvoid DestroyBuffer(VkDevice device, 81203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall VkBuffer buffer_handle, 8133fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* allocator) { 81403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall if (!allocator) 81503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator = &device->allocator; 816a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall Buffer* buffer = GetBufferFromHandle(buffer_handle); 81703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator->pfnFree(allocator->pUserData, buffer); 818f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall} 819f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall 820f6578743278da9b55d96a4984f4fcaa9d73eda8dJesse Hall// ----------------------------------------------------------------------------- 82185c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall// Image 82285c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall 82385c05b60435ef61e833bcedced9ff0699e829f7cJesse Hallstruct Image { 82485c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall typedef VkImage HandleType; 82585c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall VkDeviceSize size; 82685c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall}; 827a3a7a1d37bdfad56245b75edac49f8aceded321dJesse HallDEFINE_OBJECT_HANDLE_CONVERSION(Image) 82885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall 82985c05b60435ef61e833bcedced9ff0699e829f7cJesse HallVkResult CreateImage(VkDevice device, 83085c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall const VkImageCreateInfo* create_info, 8313fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* allocator, 83285c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall VkImage* image_handle) { 83385c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall if (create_info->imageType != VK_IMAGE_TYPE_2D || 83485c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall create_info->format != VK_FORMAT_R8G8B8A8_UNORM || 83585c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall create_info->mipLevels != 1) { 83685c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall ALOGE("CreateImage: not yet implemented: type=%d format=%d mips=%u", 83785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall create_info->imageType, create_info->format, 83885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall create_info->mipLevels); 839a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall return VK_ERROR_OUT_OF_HOST_MEMORY; 84085c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall } 84185c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall 84285c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall VkDeviceSize size = 84385c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall VkDeviceSize(create_info->extent.width * create_info->extent.height) * 844a15a4bf4bafd6114ae8f28c2df2fc622cb3baaceJesse Hall create_info->arrayLayers * create_info->samples * 4u; 84585c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall ALOGW_IF(size > kMaxDeviceMemory, 84685c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall "CreateImage: image size 0x%" PRIx64 84785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall " exceeds max device memory size 0x%" PRIx64, 84885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall size, kMaxDeviceMemory); 84985c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall 85003b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall if (!allocator) 85103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator = &device->allocator; 8523fbc856120217247c72fb5ed88500000f3881c45Jesse Hall Image* image = static_cast<Image*>(allocator->pfnAllocation( 8533fbc856120217247c72fb5ed88500000f3881c45Jesse Hall allocator->pUserData, sizeof(Image), alignof(Image), 8543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VK_SYSTEM_ALLOCATION_SCOPE_OBJECT)); 85585c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall if (!image) 85685c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall return VK_ERROR_OUT_OF_HOST_MEMORY; 85785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall image->size = size; 858a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall *image_handle = GetHandleToImage(image); 85985c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall return VK_SUCCESS; 86085c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall} 86185c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall 862606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetImageMemoryRequirements(VkDevice, 863606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hall VkImage image_handle, 864606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hall VkMemoryRequirements* requirements) { 865a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall Image* image = GetImageFromHandle(image_handle); 86685c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall requirements->size = image->size; 86785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall requirements->alignment = 16; // allow fast Neon/SSE memcpy 86885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall requirements->memoryTypeBits = 0x1; 86985c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall} 87085c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall 87103b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hallvoid DestroyImage(VkDevice device, 87203b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall VkImage image_handle, 8733fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* allocator) { 87403b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall if (!allocator) 87503b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator = &device->allocator; 876a3a7a1d37bdfad56245b75edac49f8aceded321dJesse Hall Image* image = GetImageFromHandle(image_handle); 87703b6fe1b099764c6010c173c1416ea102cdfe5a4Jesse Hall allocator->pfnFree(allocator->pUserData, image); 87885c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall} 87985c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall 88057f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse HallVkResult GetSwapchainGrallocUsageANDROID(VkDevice, 88157f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall VkFormat, 88257f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall VkImageUsageFlags, 88357f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall int* grallocUsage) { 88457f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall // The null driver never reads or writes the gralloc buffer 88557f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall *grallocUsage = 0; 88657f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall return VK_SUCCESS; 88757f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall} 88857f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall 88957f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse HallVkResult AcquireImageANDROID(VkDevice, 89057f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall VkImage, 89157f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall int fence, 89257f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall VkSemaphore, 89357f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall VkFence) { 89457f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall close(fence); 89557f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall return VK_SUCCESS; 89657f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall} 89757f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall 89857f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse HallVkResult QueueSignalReleaseImageANDROID(VkQueue, 89957f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall uint32_t, 90057f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall const VkSemaphore*, 90157f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall VkImage, 90257f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall int* fence) { 90357f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall *fence = -1; 90457f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall return VK_SUCCESS; 90557f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall} 90657f7f8c140c4b665f05c17866ebf201e9f4f46a4Jesse Hall 90785c05b60435ef61e833bcedced9ff0699e829f7cJesse Hall// ----------------------------------------------------------------------------- 908f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// No-op types 90904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 910f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateBufferView(VkDevice device, 911f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkBufferViewCreateInfo*, 9123fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 913f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkBufferView* view) { 9143fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *view = AllocHandle<VkBufferView>(device, HandleType::kBufferView); 91504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 91604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 91704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 918f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateDescriptorPool(VkDevice device, 919f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkDescriptorPoolCreateInfo*, 9203fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 921f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkDescriptorPool* pool) { 9223fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *pool = AllocHandle<VkDescriptorPool>(device, HandleType::kDescriptorPool); 92304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 92404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 92504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 9263fbc856120217247c72fb5ed88500000f3881c45Jesse HallVkResult AllocateDescriptorSets(VkDevice device, 9273fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkDescriptorSetAllocateInfo* alloc_info, 9283fbc856120217247c72fb5ed88500000f3881c45Jesse Hall VkDescriptorSet* descriptor_sets) { 9293dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hall for (uint32_t i = 0; i < alloc_info->descriptorSetCount; i++) 9303fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine descriptor_sets[i] = 9313fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine AllocHandle<VkDescriptorSet>(device, HandleType::kDescriptorSet); 93204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 93304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 93404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 935f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateDescriptorSetLayout(VkDevice device, 936f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkDescriptorSetLayoutCreateInfo*, 9373fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 938f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkDescriptorSetLayout* layout) { 9393fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *layout = AllocHandle<VkDescriptorSetLayout>( 9403fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine device, HandleType::kDescriptorSetLayout); 94104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 94204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 94304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 944f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateEvent(VkDevice device, 945f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkEventCreateInfo*, 9463fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 947f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkEvent* event) { 9483fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *event = AllocHandle<VkEvent>(device, HandleType::kEvent); 94904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 95004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 95104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 952f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateFence(VkDevice device, 953f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkFenceCreateInfo*, 9543fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 955f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkFence* fence) { 9563fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *fence = AllocHandle<VkFence>(device, HandleType::kFence); 95704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 95804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 95904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 960f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateFramebuffer(VkDevice device, 961f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkFramebufferCreateInfo*, 9623fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 963f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkFramebuffer* framebuffer) { 9643fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *framebuffer = AllocHandle<VkFramebuffer>(device, HandleType::kFramebuffer); 96504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 96604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 96704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 968f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateImageView(VkDevice device, 969f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkImageViewCreateInfo*, 9703fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 971f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkImageView* view) { 9723fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *view = AllocHandle<VkImageView>(device, HandleType::kImageView); 97304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 97404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 97504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 976f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateGraphicsPipelines(VkDevice device, 977f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkPipelineCache, 978f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall uint32_t count, 979f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkGraphicsPipelineCreateInfo*, 9803fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 981f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkPipeline* pipelines) { 982f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall for (uint32_t i = 0; i < count; i++) 9833fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine pipelines[i] = AllocHandle<VkPipeline>(device, HandleType::kPipeline); 98404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 98504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 98604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 987f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateComputePipelines(VkDevice device, 988f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkPipelineCache, 989f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall uint32_t count, 990f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkComputePipelineCreateInfo*, 9913fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 992f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkPipeline* pipelines) { 993f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall for (uint32_t i = 0; i < count; i++) 9943fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine pipelines[i] = AllocHandle<VkPipeline>(device, HandleType::kPipeline); 99504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 99604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 99704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 998f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreatePipelineCache(VkDevice device, 999f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkPipelineCacheCreateInfo*, 10003fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 1001f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkPipelineCache* cache) { 10023fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *cache = AllocHandle<VkPipelineCache>(device, HandleType::kPipelineCache); 100304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 100404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 100504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1006f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreatePipelineLayout(VkDevice device, 1007f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkPipelineLayoutCreateInfo*, 10083fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 1009f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkPipelineLayout* layout) { 10103fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *layout = 10113fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine AllocHandle<VkPipelineLayout>(device, HandleType::kPipelineLayout); 101204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 101304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 101404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1015f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateQueryPool(VkDevice device, 1016f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkQueryPoolCreateInfo*, 10173fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 1018f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkQueryPool* pool) { 10193fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *pool = AllocHandle<VkQueryPool>(device, HandleType::kQueryPool); 102004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 102104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 102204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1023f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateRenderPass(VkDevice device, 1024f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkRenderPassCreateInfo*, 10253fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 1026f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkRenderPass* renderpass) { 10273fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *renderpass = AllocHandle<VkRenderPass>(device, HandleType::kRenderPass); 102804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 102904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 103004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1031f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateSampler(VkDevice device, 1032f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkSamplerCreateInfo*, 10333fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 1034f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkSampler* sampler) { 10353fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *sampler = AllocHandle<VkSampler>(device, HandleType::kSampler); 103604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 103704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 103804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1039f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateSemaphore(VkDevice device, 1040f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkSemaphoreCreateInfo*, 10413fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 1042f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkSemaphore* semaphore) { 10433fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *semaphore = AllocHandle<VkSemaphore>(device, HandleType::kSemaphore); 104404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 104504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 104604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1047f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult CreateShaderModule(VkDevice device, 1048f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall const VkShaderModuleCreateInfo*, 10493fbc856120217247c72fb5ed88500000f3881c45Jesse Hall const VkAllocationCallbacks* /*allocator*/, 1050f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall VkShaderModule* module) { 10513fec89ea37127fe292a6766b5320fcbf9574c0edMichael Lentine *module = AllocHandle<VkShaderModule>(device, HandleType::kShaderModule); 105204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 105304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 105404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1055715b86ac7d0853131b375ff786c87d8d87a762a1Jesse HallVkResult CreateDebugReportCallbackEXT(VkInstance instance, 1056715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const VkDebugReportCallbackCreateInfoEXT*, 1057715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall const VkAllocationCallbacks*, 1058715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall VkDebugReportCallbackEXT* callback) { 1059715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall *callback = AllocHandle<VkDebugReportCallbackEXT>( 1060715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall instance, HandleType::kDebugReportCallbackEXT); 1061715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall return VK_SUCCESS; 1062715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall} 1063715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 1064f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// ----------------------------------------------------------------------------- 1065f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// No-op entrypoints 1066f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall 1067f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall// clang-format off 1068f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall#pragma clang diagnostic push 1069f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall#pragma clang diagnostic ignored "-Wunused-parameter" 1070f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse Hall 1071606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties) { 107273ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 107304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 107404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1075a9e5703e380d9d7f096d177adb792621a1e8d4baJesse HallVkResult GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties) { 107673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 1077a9e5703e380d9d7f096d177adb792621a1e8d4baJesse Hall return VK_SUCCESS; 107804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 107904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 10805ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse HallVkResult EnumerateInstanceLayerProperties(uint32_t* pCount, VkLayerProperties* pProperties) { 108173ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 108204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 108304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 108404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1085a366a5186ea941c5653cbdb8df18dc19318912b6Jesse HallVkResult QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmitInfo, VkFence fence) { 108604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 108704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 108804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1089f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult QueueWaitIdle(VkQueue queue) { 109073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 109104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 109204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 109304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1094f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult DeviceWaitIdle(VkDevice device) { 109573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 109604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 109704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 109804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1099cf25c4174dca708032ea83ac7ae2baad9e575b29Jesse Hallvoid UnmapMemory(VkDevice device, VkDeviceMemory mem) { 110004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 110104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1102f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult FlushMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) { 110373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 110404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 110504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 110604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1107f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult InvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMappedMemoryRange* pMemRanges) { 110873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 110904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 111004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 111104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1112606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes) { 111373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 111404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 111504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1116f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memOffset) { 111704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 111804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 111904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1120f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memOffset) { 112104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 112204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 112304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1124606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t* pNumRequirements, VkSparseImageMemoryRequirements* pSparseMemoryRequirements) { 112573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 112604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 112704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1128091ed9e69400edcc549c9b11635d1a305d6b5a83Jesse Hallvoid GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pNumProperties, VkSparseImageFormatProperties* pProperties) { 112973ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 113004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 113104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1132a64292517b1876c4bbe5d3e62c577812f40bd922Jesse HallVkResult QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence) { 113373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 113404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 113504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 113604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 11373fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks* allocator) { 113804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 113904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1140f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult ResetFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences) { 114104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 114204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 114304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1144f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetFenceStatus(VkDevice device, VkFence fence) { 114573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 114604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 114704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 114804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1149f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout) { 115004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 115104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 115204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 11533fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* allocator) { 115404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 115504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 11563fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks* allocator) { 115704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 115804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1159f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult GetEventStatus(VkDevice device, VkEvent event) { 116073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 116104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 116204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 116304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1164f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult SetEvent(VkDevice device, VkEvent event) { 116573ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 116604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 116704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 116804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1169f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult ResetEvent(VkDevice device, VkEvent event) { 117073ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 117104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 117204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 117304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 11743fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* allocator) { 117504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 117604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1177a9bb62b44be381292b893055cd01cdc89ba55c97Jesse HallVkResult GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags) { 117873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 117904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 118004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 118104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 11823fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* allocator) { 118304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 118404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1185606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout) { 118673ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 118704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 118804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 11893fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* allocator) { 119004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 119104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 11923fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* allocator) { 119304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 119404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 11953fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* allocator) { 119604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 119704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1198a9bb62b44be381292b893055cd01cdc89ba55c97Jesse HallVkResult GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData) { 119973ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 120004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 120104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 120204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1203f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult MergePipelineCaches(VkDevice device, VkPipelineCache destCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches) { 120473ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 120504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 120604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 120704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12083fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* allocator) { 120904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 121004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12113fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* allocator) { 121204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 121304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12143fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* allocator) { 121504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 121604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12173fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* allocator) { 121804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 121904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12203fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* allocator) { 122104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 122204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1223fbf97b0e5e25349b951dce1016b263ec3acbf376Jesse HallVkResult ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags) { 122473ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 122504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 122604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 122704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1228cf25c4174dca708032ea83ac7ae2baad9e575b29Jesse Hallvoid UpdateDescriptorSets(VkDevice device, uint32_t writeCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t copyCount, const VkCopyDescriptorSet* pDescriptorCopies) { 122973ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 123004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 123104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1232f8faf0ce17a6435e58c7d2744d9e0e84f3b25bd7Jesse HallVkResult FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets) { 123373ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 123404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 123504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 123604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12373fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* allocator) { 123804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 123904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12403fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* allocator) { 124104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 124204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1243606a54e194a5884c628130ba2eda1b3bfbc157d7Jesse Hallvoid GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity) { 124473ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 124504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 124604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12473fbc856120217247c72fb5ed88500000f3881c45Jesse HallVkResult ResetCommandPool(VkDevice device, VkCommandPool cmdPool, VkCommandPoolResetFlags flags) { 124873ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 124904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 125004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 125104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12523fbc856120217247c72fb5ed88500000f3881c45Jesse HallVkResult BeginCommandBuffer(VkCommandBuffer cmdBuffer, const VkCommandBufferBeginInfo* pBeginInfo) { 125304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 125404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 125504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12563fbc856120217247c72fb5ed88500000f3881c45Jesse HallVkResult EndCommandBuffer(VkCommandBuffer cmdBuffer) { 125704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 125804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 125904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12603fbc856120217247c72fb5ed88500000f3881c45Jesse HallVkResult ResetCommandBuffer(VkCommandBuffer cmdBuffer, VkCommandBufferResetFlags flags) { 126173ab0acc1990326b4e51b675f4b2b44b6366c0a7Jesse Hall ALOGV("TODO: vk%s", __FUNCTION__); 126204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall return VK_SUCCESS; 126304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 126404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12653fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdBindPipeline(VkCommandBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) { 126604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 126704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1268f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hallvoid CmdSetViewport(VkCommandBuffer cmdBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports) { 12695ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall} 12705ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 1271f9fa9a50d5e87dacce36ef2a56b392fc053cf8ceJesse Hallvoid CmdSetScissor(VkCommandBuffer cmdBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors) { 12725ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall} 12735ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 12743fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdSetLineWidth(VkCommandBuffer cmdBuffer, float lineWidth) { 12755ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall} 12765ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 12773fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdSetDepthBias(VkCommandBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias) { 12785ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall} 12795ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 12803fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdSetBlendConstants(VkCommandBuffer cmdBuffer, const float blendConst[4]) { 12815ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall} 12825ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall 12833fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdSetDepthBounds(VkCommandBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds) { 128404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 128504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12863fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdSetStencilCompareMask(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask) { 128704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 128804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12893fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdSetStencilWriteMask(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask) { 129004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 129104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12923fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdSetStencilReference(VkCommandBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference) { 129304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 129404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12953fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdBindDescriptorSets(VkCommandBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets) { 129604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 129704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 12983fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdBindIndexBuffer(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) { 129904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 130004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13013fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdBindVertexBuffers(VkCommandBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets) { 130204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 130304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13043fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdDraw(VkCommandBuffer cmdBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) { 130504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 130604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13073fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdDrawIndexed(VkCommandBuffer cmdBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) { 130804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 130904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13103fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdDrawIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) { 131104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 131204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13133fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdDrawIndexedIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride) { 131404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 131504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13163fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdDispatch(VkCommandBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z) { 131704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 131804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13193fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdDispatchIndirect(VkCommandBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset) { 132004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 132104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13223fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdCopyBuffer(VkCommandBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions) { 132304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 132404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13253fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdCopyImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions) { 132604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 132704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13283fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdBlitImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter) { 132904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 133004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13313fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdCopyBufferToImage(VkCommandBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions) { 133204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 133304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13343fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdCopyImageToBuffer(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions) { 133504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 133604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13373fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdUpdateBuffer(VkCommandBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData) { 133804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 133904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13403fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdFillBuffer(VkCommandBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data) { 134104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 134204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13433fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdClearColorImage(VkCommandBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) { 134404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 134504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13463fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdClearDepthStencilImage(VkCommandBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges) { 134704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 134804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13493fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdClearAttachments(VkCommandBuffer cmdBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects) { 135004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 135104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13523fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdResolveImage(VkCommandBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions) { 135304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 135404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13553fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdSetEvent(VkCommandBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) { 135604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 135704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13583fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdResetEvent(VkCommandBuffer cmdBuffer, VkEvent event, VkPipelineStageFlags stageMask) { 135904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 136004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13613dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hallvoid CmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) { 136204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 136304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13643dd678a6a30e2d94bfd570ec43ffd379e9c5d409Jesse Hallvoid CmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers) { 136504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 136604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13673fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdBeginQuery(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags) { 136804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 136904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13703fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdEndQuery(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot) { 137104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 137204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13733fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdResetQueryPool(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount) { 137404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 137504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13763fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdWriteTimestamp(VkCommandBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot) { 137704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 137804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13793fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdCopyQueryPoolResults(VkCommandBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize destStride, VkQueryResultFlags flags) { 138004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 138104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13823fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdPushConstants(VkCommandBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values) { 138304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 138404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 138565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallvoid CmdBeginRenderPass(VkCommandBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents) { 138604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 138704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 138865ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hallvoid CmdNextSubpass(VkCommandBuffer cmdBuffer, VkSubpassContents contents) { 138904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 139004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13913fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdEndRenderPass(VkCommandBuffer cmdBuffer) { 139204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 139304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 13943fbc856120217247c72fb5ed88500000f3881c45Jesse Hallvoid CmdExecuteCommands(VkCommandBuffer cmdBuffer, uint32_t cmdBuffersCount, const VkCommandBuffer* pCmdBuffers) { 139504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} 139604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1397715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallvoid DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator) { 1398715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall} 1399715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 1400715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hallvoid DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage) { 1401715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall} 1402715b86ac7d0853131b375ff786c87d8d87a762a1Jesse Hall 140304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#pragma clang diagnostic pop 140404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// clang-format on 140504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 140604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} // namespace null_driver 1407