1//
2// Copyright 2019 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6// vulkan_fuchsia_ext:
7// Defines Fuchsia-specific Vulkan extensions that haven't been
8// upstreamed to the official Vulkan headers.
9//
10
11#ifndef COMMON_VULKAN_FUCHSIA_EXT_H_
12#define COMMON_VULKAN_FUCHSIA_EXT_H_
13
14#if !defined(VK_NO_PROTOTYPES)
15# define VK_NO_PROTOTYPES
16#endif
17
18#include <vulkan/vulkan.h>
19
20#if defined(ANGLE_PLATFORM_FUCHSIA)
21# include <zircon/types.h>
22#else
23typedef uint32_t zx_handle_t;
24# define ZX_HANDLE_INVALID ((zx_handle_t)0)
25#endif
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31const VkStructureType VK_STRUCTURE_TYPE_TEMP_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA =
32 static_cast<VkStructureType>(1001005000);
33const VkStructureType VK_STRUCTURE_TYPE_TEMP_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA =
34 static_cast<VkStructureType>(1001005001);
35const VkStructureType VK_STRUCTURE_TYPE_TEMP_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA =
36 static_cast<VkStructureType>(1001005002);
37const VkStructureType VK_STRUCTURE_TYPE_TEMP_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA =
38 static_cast<VkStructureType>(1001006000);
39const VkStructureType VK_STRUCTURE_TYPE_TEMP_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA =
40 static_cast<VkStructureType>(1001006001);
41
42const VkExternalMemoryHandleTypeFlagBits
43 VK_EXTERNAL_MEMORY_HANDLE_TYPE_TEMP_ZIRCON_VMO_BIT_FUCHSIA =
44 static_cast<VkExternalMemoryHandleTypeFlagBits>(0x00100000);
45
46const VkExternalSemaphoreHandleTypeFlagBits
47 VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TEMP_ZIRCON_EVENT_BIT_FUCHSIA =
48 static_cast<VkExternalSemaphoreHandleTypeFlagBits>(0x00100000);
49
50#define VK_FUCHSIA_external_memory 1
51#define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1
52#define VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME "VK_FUCHSIA_external_memory"
53
54typedef struct VkImportMemoryZirconHandleInfoFUCHSIA
55{
56 VkStructureType sType;
57 const void *pNext;
58 VkExternalMemoryHandleTypeFlagBits handleType;
59 zx_handle_t handle;
60} VkImportMemoryZirconHandleInfoFUCHSIA;
61
62typedef struct VkMemoryZirconHandlePropertiesFUCHSIA
63{
64 VkStructureType sType;
65 void *pNext;
66 zx_handle_t memoryTypeBits;
67} VkMemoryZirconHandlePropertiesFUCHSIA;
68
69typedef struct VkMemoryGetZirconHandleInfoFUCHSIA
70{
71 VkStructureType sType;
72 const void *pNext;
73 VkDeviceMemory memory;
74 VkExternalMemoryHandleTypeFlagBits handleType;
75} VkMemoryGetZirconHandleInfoFUCHSIA;
76
77typedef VkResult(VKAPI_PTR *PFN_vkGetMemoryZirconHandleFUCHSIA)(
78 VkDevice device,
79 const VkMemoryGetZirconHandleInfoFUCHSIA *pGetZirconHandleInfo,
80 zx_handle_t *pZirconHandle);
81typedef VkResult(VKAPI_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(
82 VkDevice device,
83 VkExternalMemoryHandleTypeFlagBits handleType,
84 zx_handle_t ZirconHandle,
85 VkMemoryZirconHandlePropertiesFUCHSIA *pMemoryZirconHandleProperties);
86
87#ifndef VK_NO_PROTOTYPES
88VKAPI_ATTR VkResult VKAPI_CALL
89vkGetMemoryZirconHandleFUCHSIA(VkDevice device,
90 const VkMemoryGetZirconHandleInfoFUCHSIA *pGetZirconHandleInfo,
91 zx_handle_t *pZirconHandle);
92
93VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA(
94 VkDevice device,
95 VkExternalMemoryHandleTypeFlagBits handleType,
96 zx_handle_t ZirconHandle,
97 VkMemoryZirconHandlePropertiesFUCHSIA *pMemoryZirconHandleProperties);
98#endif
99
100#define VK_FUCHSIA_external_semaphore 1
101#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
102#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_FUCHSIA_external_semaphore"
103
104typedef struct VkImportSemaphoreZirconHandleInfoFUCHSIA
105{
106 VkStructureType sType;
107 const void *pNext;
108 VkSemaphore semaphore;
109 VkSemaphoreImportFlags flags;
110 VkExternalSemaphoreHandleTypeFlagBits handleType;
111 zx_handle_t handle;
112} VkImportSemaphoreZirconHandleInfoFUCHSIA;
113
114typedef struct VkSemaphoreGetZirconHandleInfoFUCHSIA
115{
116 VkStructureType sType;
117 const void *pNext;
118 VkSemaphore semaphore;
119 VkExternalSemaphoreHandleTypeFlagBits handleType;
120} VkSemaphoreGetZirconHandleInfoFUCHSIA;
121
122typedef VkResult(VKAPI_PTR *PFN_vkImportSemaphoreZirconHandleFUCHSIA)(
123 VkDevice device,
124 const VkImportSemaphoreZirconHandleInfoFUCHSIA *pImportSemaphoreZirconHandleInfo);
125typedef VkResult(VKAPI_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(
126 VkDevice device,
127 const VkSemaphoreGetZirconHandleInfoFUCHSIA *pGetZirconHandleInfo,
128 zx_handle_t *pZirconHandle);
129
130#ifndef VK_NO_PROTOTYPES
131VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA(
132 VkDevice device,
133 const VkImportSemaphoreZirconHandleInfoFUCHSIA *pImportSemaphoreZirconHandleInfo);
134
135VKAPI_ATTR VkResult VKAPI_CALL
136vkGetSemaphoreZirconHandleFUCHSIA(VkDevice device,
137 const VkSemaphoreGetZirconHandleInfoFUCHSIA *pGetZirconHandleInfo,
138 zx_handle_t *pZirconHandle);
139#endif
140
141#ifdef __cplusplus
142}
143#endif
144
145#endif // COMMON_VULKAN_FUCHSIA_EXT_H_
146