104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall/* 204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * Copyright 2015 The Android Open Source Project 304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * 404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * Licensed under the Apache License, Version 2.0 (the "License"); 504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * you may not use this file except in compliance with the License. 604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * You may obtain a copy of the License at 704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * 804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * http://www.apache.org/licenses/LICENSE-2.0 904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * 1004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * Unless required by applicable law or agreed to in writing, software 1104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * distributed under the License is distributed on an "AS IS" BASIS, 1204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * See the License for the specific language governing permissions and 1404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * limitations under the License. 1504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall */ 1604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 1704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#ifndef ANDROID_HWVULKAN_H 1804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#define ANDROID_HWVULKAN_H 1904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 2004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <hardware/hardware.h> 2104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <vulkan/vulkan.h> 2204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 2304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall__BEGIN_DECLS 2404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 2504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#define HWVULKAN_HARDWARE_MODULE_ID "vulkan" 2604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 2704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#define HWVULKAN_MODULE_API_VERSION_0_1 HARDWARE_MODULE_API_VERSION(0, 1) 2804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#define HWVULKAN_DEVICE_API_VERSION_0_1 HARDWARE_DEVICE_API_VERSION_2(0, 1, 0) 2904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 3004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#define HWVULKAN_DEVICE_0 "vk0" 3104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 3204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Halltypedef struct hwvulkan_module_t { 3304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall struct hw_module_t common; 3404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} hwvulkan_module_t; 3504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 3604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall/* Dispatchable Vulkan object handles must be pointers, which must point to 3704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * instances of hwvulkan_dispatch_t (potentially followed by additional 3804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * implementation-defined data). On return from the creation function, the 3904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * 'magic' field must contain HWVULKAN_DISPATCH_MAGIC; the loader will overwrite 4004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * the 'vtbl' field. 41619157c63bf5faba94321623d32bcc949985ea8eJesse Hall * 42619157c63bf5faba94321623d32bcc949985ea8eJesse Hall * NOTE: The magic value and the layout of hwvulkan_dispatch_t match the LunarG 43619157c63bf5faba94321623d32bcc949985ea8eJesse Hall * loader used on platforms, to avoid pointless annoying differences for 44619157c63bf5faba94321623d32bcc949985ea8eJesse Hall * multi-platform drivers. Don't change them without a good reason. If there is 45619157c63bf5faba94321623d32bcc949985ea8eJesse Hall * an opportunity to change it, using a magic value that doesn't leave the 46619157c63bf5faba94321623d32bcc949985ea8eJesse Hall * upper 32-bits zero on 64-bit platforms would be nice. 4704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall */ 48619157c63bf5faba94321623d32bcc949985ea8eJesse Hall#define HWVULKAN_DISPATCH_MAGIC 0x01CDC0DE 4904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Halltypedef union { 5004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall uintptr_t magic; 5104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall const void* vtbl; 5204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} hwvulkan_dispatch_t; 5304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 5404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall/* A hwvulkan_device_t corresponds to an ICD on other systems. Currently there 5504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * can only be one on a system (HWVULKAN_DEVICE_0). It is opened once per 5604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * process when the Vulkan API is first used; the hw_device_t::close() function 5704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * is never called. Any non-trivial resource allocation should be done when 5804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall * the VkInstance is created rather than when the hwvulkan_device_t is opened. 5904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall */ 6004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Halltypedef struct hwvulkan_device_t { 6104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall struct hw_device_t common; 6204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 635ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall PFN_vkEnumerateInstanceExtensionProperties 645ae3abb3ca6728de04935b0c81bcdbdfc37b0d47Jesse Hall EnumerateInstanceExtensionProperties; 6504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall PFN_vkCreateInstance CreateInstance; 6604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall PFN_vkGetInstanceProcAddr GetInstanceProcAddr; 6704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} hwvulkan_device_t; 6804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 6904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall__END_DECLS 7004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 7104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#endif // ANDROID_HWVULKAN_H 72