blob: f1dc6601de8778b1f818923c0bac27466666f42a [file] [log] [blame]
David 'Digit' Turner80e57ad2019-08-13 10:43:41 +02001#ifndef VULKAN_FUCHSIA_EXTRAS_H_
2#define VULKAN_FUCHSIA_EXTRAS_H_ 1
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8/*
9** Copyright (c) 2015-2019 The Khronos Group Inc.
10**
11** Licensed under the Apache License, Version 2.0 (the "License");
12** you may not use this file except in compliance with the License.
13** You may obtain a copy of the License at
14**
15** http://www.apache.org/licenses/LICENSE-2.0
16**
17** Unless required by applicable law or agreed to in writing, software
18** distributed under the License is distributed on an "AS IS" BASIS,
19** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20** See the License for the specific language governing permissions and
21** limitations under the License.
22*/
23
24// IMPORTANT:
25//
26// The following declarations are not part of the upstream Khronos headers yet
27// but the Fuchsia platform currently relies on them to implement various
28// extensions required by its compositor and graphics libraries.
29
30
31//////////////////////////////////////////////////////////////////////////
32///
33/// The following will be part of vulkan_core.h
34///
35
36#define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA ((VkStructureType)1001004000)
37#define VK_STRUCTURE_TYPE_FUCHSIA_IMAGE_FORMAT_FUCHSIA ((VkStructureType)1001004001)
38#define VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA ((VkStructureType)1001004004)
39#define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA ((VkStructureType)1001004005)
40#define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA ((VkStructureType)1001004006)
41#define VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA ((VkStructureType)1001004007)
42#define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA ((VkStructureType)1001004008)
43#define VK_STRUCTURE_TYPE_TEMP_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA ((VkStructureType)1001005000)
44#define VK_STRUCTURE_TYPE_TEMP_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA ((VkStructureType)1001005001)
45#define VK_STRUCTURE_TYPE_TEMP_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA ((VkStructureType)1001005002)
46#define VK_STRUCTURE_TYPE_TEMP_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA ((VkStructureType)1001006000)
47#define VK_STRUCTURE_TYPE_TEMP_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA ((VkStructureType)1001006001)
48
49#define VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA ((VkObjectType)1001004002)
50
51#define VK_EXTERNAL_MEMORY_HANDLE_TYPE_TEMP_ZIRCON_VMO_BIT_FUCHSIA ((VkExternalMemoryHandleTypeFlagBits)0x00100000)
52#define VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TEMP_ZIRCON_EVENT_BIT_FUCHSIA ((VkExternalSemaphoreHandleTypeFlagBits) 0x00100000)
53
54#define VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT ((VkDebugReportObjectTypeEXT) 1001004003)
55
56
57//////////////////////////////////////////////////////////////////////////
58///
59/// The following will be part of vulkan_fuchsia.h
60///
61
62#define VK_FUCHSIA_buffer_collection 1
63VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA)
64
65#define VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION 1
66#define VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME "VK_FUCHSIA_buffer_collection"
67
68typedef struct VkBufferCollectionCreateInfoFUCHSIA {
69 VkStructureType sType;
70 const void* pNext;
71 zx_handle_t collectionToken;
72} VkBufferCollectionCreateInfoFUCHSIA;
73
74typedef struct VkFuchsiaImageFormatFUCHSIA {
75 VkStructureType sType;
76 const void* pNext;
77 const void* imageFormat;
78 uint32_t imageFormatSize;
79} VkFuchsiaImageFormatFUCHSIA;
80
81typedef struct VkImportMemoryBufferCollectionFUCHSIA {
82 VkStructureType sType;
83 const void* pNext;
84 VkBufferCollectionFUCHSIA collection;
85 uint32_t index;
86} VkImportMemoryBufferCollectionFUCHSIA;
87
88typedef struct VkBufferCollectionImageCreateInfoFUCHSIA {
89 VkStructureType sType;
90 const void* pNext;
91 VkBufferCollectionFUCHSIA collection;
92 uint32_t index;
93} VkBufferCollectionImageCreateInfoFUCHSIA;
94
95typedef struct VkBufferConstraintsInfoFUCHSIA {
96 VkStructureType sType;
97 const void* pNext;
98 const VkBufferCreateInfo* pBufferCreateInfo;
99 VkFormatFeatureFlags requiredFormatFeatures;
100 uint32_t minCount;
101} VkBufferConstraintsInfoFUCHSIA;
102
103typedef struct VkBufferCollectionBufferCreateInfoFUCHSIA {
104 VkStructureType sType;
105 const void* pNext;
106 VkBufferCollectionFUCHSIA collection;
107 uint32_t index;
108} VkBufferCollectionBufferCreateInfoFUCHSIA;
109
110typedef struct VkBufferCollectionPropertiesFUCHSIA {
111 VkStructureType sType;
112 void* pNext;
113 uint32_t memoryTypeBits;
114 uint32_t count;
115} VkBufferCollectionPropertiesFUCHSIA;
116
117
118typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferCollectionFUCHSIA)(VkDevice device, const VkBufferCollectionCreateInfoFUCHSIA* pImportInfo, const VkAllocationCallbacks* pAllocator, VkBufferCollectionFUCHSIA* pCollection);
119typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageCreateInfo* pImageInfo);
120typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
121typedef void (VKAPI_PTR *PFN_vkDestroyBufferCollectionFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks* pAllocator);
122typedef VkResult (VKAPI_PTR *PFN_vkGetBufferCollectionPropertiesFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA* pProperties);
123
124#ifndef VK_NO_PROTOTYPES
125VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferCollectionFUCHSIA(
126 VkDevice device,
127 const VkBufferCollectionCreateInfoFUCHSIA* pImportInfo,
128 const VkAllocationCallbacks* pAllocator,
129 VkBufferCollectionFUCHSIA* pCollection);
130
131VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionConstraintsFUCHSIA(
132 VkDevice device,
133 VkBufferCollectionFUCHSIA collection,
134 const VkImageCreateInfo* pImageInfo);
135
136VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA(
137 VkDevice device,
138 VkBufferCollectionFUCHSIA collection,
139 const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
140
141VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA(
142 VkDevice device,
143 VkBufferCollectionFUCHSIA collection,
144 const VkAllocationCallbacks* pAllocator);
145
146VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferCollectionPropertiesFUCHSIA(
147 VkDevice device,
148 VkBufferCollectionFUCHSIA collection,
149 VkBufferCollectionPropertiesFUCHSIA* pProperties);
150#endif
151
152#define VK_FUCHSIA_external_memory 1
153#define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1
154#define VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME "VK_FUCHSIA_external_memory"
155
156typedef struct VkImportMemoryZirconHandleInfoFUCHSIA {
157 VkStructureType sType;
158 const void* pNext;
159 VkExternalMemoryHandleTypeFlagBits handleType;
160 zx_handle_t handle;
161} VkImportMemoryZirconHandleInfoFUCHSIA;
162
163typedef struct VkMemoryZirconHandlePropertiesFUCHSIA {
164 VkStructureType sType;
165 void* pNext;
166 uint32_t memoryTypeBits;
167} VkMemoryZirconHandlePropertiesFUCHSIA;
168
169typedef struct VkMemoryGetZirconHandleInfoFUCHSIA {
170 VkStructureType sType;
171 const void* pNext;
172 VkDeviceMemory memory;
173 VkExternalMemoryHandleTypeFlagBits handleType;
174} VkMemoryGetZirconHandleInfoFUCHSIA;
175
176
177typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandleFUCHSIA)(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle);
178typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t ZirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties);
179
180#ifndef VK_NO_PROTOTYPES
181VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA(
182 VkDevice device,
183 const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
184 zx_handle_t* pZirconHandle);
185
186VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA(
187 VkDevice device,
188 VkExternalMemoryHandleTypeFlagBits handleType,
189 zx_handle_t ZirconHandle,
190 VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties);
191#endif
192
193#define VK_FUCHSIA_external_semaphore 1
194#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION 1
195#define VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_FUCHSIA_external_semaphore"
196
197typedef struct VkImportSemaphoreZirconHandleInfoFUCHSIA {
198 VkStructureType sType;
199 const void* pNext;
200 VkSemaphore semaphore;
201 VkSemaphoreImportFlags flags;
202 VkExternalSemaphoreHandleTypeFlagBits handleType;
203 zx_handle_t handle;
204} VkImportSemaphoreZirconHandleInfoFUCHSIA;
205
206typedef struct VkSemaphoreGetZirconHandleInfoFUCHSIA {
207 VkStructureType sType;
208 const void* pNext;
209 VkSemaphore semaphore;
210 VkExternalSemaphoreHandleTypeFlagBits handleType;
211} VkSemaphoreGetZirconHandleInfoFUCHSIA;
212
213
214typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo);
215typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle);
216
217#ifndef VK_NO_PROTOTYPES
218VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA(
219 VkDevice device,
220 const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo);
221
222VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA(
223 VkDevice device,
224 const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo,
225 zx_handle_t* pZirconHandle);
226#endif
227
228#ifdef __cplusplus
229}
230#endif
231
232#endif // VULKAN_FUCHSIA_EXTRAS_H_