xref: /aosp_15_r20/external/swiftshader/src/Vulkan/libVulkan.cpp (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker // Copyright 2018 The SwiftShader Authors. All Rights Reserved.
2*03ce13f7SAndroid Build Coastguard Worker //
3*03ce13f7SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*03ce13f7SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*03ce13f7SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*03ce13f7SAndroid Build Coastguard Worker //
7*03ce13f7SAndroid Build Coastguard Worker //    http://www.apache.org/licenses/LICENSE-2.0
8*03ce13f7SAndroid Build Coastguard Worker //
9*03ce13f7SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*03ce13f7SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*03ce13f7SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*03ce13f7SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*03ce13f7SAndroid Build Coastguard Worker // limitations under the License.
14*03ce13f7SAndroid Build Coastguard Worker 
15*03ce13f7SAndroid Build Coastguard Worker #include "VkBuffer.hpp"
16*03ce13f7SAndroid Build Coastguard Worker #include "VkBufferView.hpp"
17*03ce13f7SAndroid Build Coastguard Worker #include "VkCommandBuffer.hpp"
18*03ce13f7SAndroid Build Coastguard Worker #include "VkCommandPool.hpp"
19*03ce13f7SAndroid Build Coastguard Worker #include "VkConfig.hpp"
20*03ce13f7SAndroid Build Coastguard Worker #include "VkDebugUtilsMessenger.hpp"
21*03ce13f7SAndroid Build Coastguard Worker #include "VkDescriptorPool.hpp"
22*03ce13f7SAndroid Build Coastguard Worker #include "VkDescriptorSetLayout.hpp"
23*03ce13f7SAndroid Build Coastguard Worker #include "VkDescriptorUpdateTemplate.hpp"
24*03ce13f7SAndroid Build Coastguard Worker #include "VkDestroy.hpp"
25*03ce13f7SAndroid Build Coastguard Worker #include "VkDevice.hpp"
26*03ce13f7SAndroid Build Coastguard Worker #include "VkDeviceMemory.hpp"
27*03ce13f7SAndroid Build Coastguard Worker #include "VkEvent.hpp"
28*03ce13f7SAndroid Build Coastguard Worker #include "VkFence.hpp"
29*03ce13f7SAndroid Build Coastguard Worker #include "VkFramebuffer.hpp"
30*03ce13f7SAndroid Build Coastguard Worker #include "VkGetProcAddress.hpp"
31*03ce13f7SAndroid Build Coastguard Worker #include "VkImage.hpp"
32*03ce13f7SAndroid Build Coastguard Worker #include "VkImageView.hpp"
33*03ce13f7SAndroid Build Coastguard Worker #include "VkInstance.hpp"
34*03ce13f7SAndroid Build Coastguard Worker #include "VkPhysicalDevice.hpp"
35*03ce13f7SAndroid Build Coastguard Worker #include "VkPipeline.hpp"
36*03ce13f7SAndroid Build Coastguard Worker #include "VkPipelineCache.hpp"
37*03ce13f7SAndroid Build Coastguard Worker #include "VkPipelineLayout.hpp"
38*03ce13f7SAndroid Build Coastguard Worker #include "VkQueryPool.hpp"
39*03ce13f7SAndroid Build Coastguard Worker #include "VkQueue.hpp"
40*03ce13f7SAndroid Build Coastguard Worker #include "VkRenderPass.hpp"
41*03ce13f7SAndroid Build Coastguard Worker #include "VkSampler.hpp"
42*03ce13f7SAndroid Build Coastguard Worker #include "VkSemaphore.hpp"
43*03ce13f7SAndroid Build Coastguard Worker #include "VkShaderModule.hpp"
44*03ce13f7SAndroid Build Coastguard Worker #include "VkStringify.hpp"
45*03ce13f7SAndroid Build Coastguard Worker #include "VkStructConversion.hpp"
46*03ce13f7SAndroid Build Coastguard Worker #include "VkTimelineSemaphore.hpp"
47*03ce13f7SAndroid Build Coastguard Worker 
48*03ce13f7SAndroid Build Coastguard Worker #include "Reactor/Nucleus.hpp"
49*03ce13f7SAndroid Build Coastguard Worker #include "System/CPUID.hpp"
50*03ce13f7SAndroid Build Coastguard Worker #include "System/Debug.hpp"
51*03ce13f7SAndroid Build Coastguard Worker #include "System/SwiftConfig.hpp"
52*03ce13f7SAndroid Build Coastguard Worker #include "WSI/HeadlessSurfaceKHR.hpp"
53*03ce13f7SAndroid Build Coastguard Worker #include "WSI/VkSwapchainKHR.hpp"
54*03ce13f7SAndroid Build Coastguard Worker 
55*03ce13f7SAndroid Build Coastguard Worker #if defined(VK_USE_PLATFORM_METAL_EXT) || defined(VK_USE_PLATFORM_MACOS_MVK)
56*03ce13f7SAndroid Build Coastguard Worker #	include "WSI/MetalSurface.hpp"
57*03ce13f7SAndroid Build Coastguard Worker #endif
58*03ce13f7SAndroid Build Coastguard Worker 
59*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_XCB_KHR
60*03ce13f7SAndroid Build Coastguard Worker #	include "WSI/XcbSurfaceKHR.hpp"
61*03ce13f7SAndroid Build Coastguard Worker #endif
62*03ce13f7SAndroid Build Coastguard Worker 
63*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_WAYLAND_KHR
64*03ce13f7SAndroid Build Coastguard Worker #	include "WSI/WaylandSurfaceKHR.hpp"
65*03ce13f7SAndroid Build Coastguard Worker #endif
66*03ce13f7SAndroid Build Coastguard Worker 
67*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
68*03ce13f7SAndroid Build Coastguard Worker #	include "WSI/DirectFBSurfaceEXT.hpp"
69*03ce13f7SAndroid Build Coastguard Worker #endif
70*03ce13f7SAndroid Build Coastguard Worker 
71*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_DISPLAY_KHR
72*03ce13f7SAndroid Build Coastguard Worker #	include "WSI/DisplaySurfaceKHR.hpp"
73*03ce13f7SAndroid Build Coastguard Worker #endif
74*03ce13f7SAndroid Build Coastguard Worker 
75*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_WIN32_KHR
76*03ce13f7SAndroid Build Coastguard Worker #	include "WSI/Win32SurfaceKHR.hpp"
77*03ce13f7SAndroid Build Coastguard Worker #endif
78*03ce13f7SAndroid Build Coastguard Worker 
79*03ce13f7SAndroid Build Coastguard Worker #include "marl/mutex.h"
80*03ce13f7SAndroid Build Coastguard Worker #include "marl/scheduler.h"
81*03ce13f7SAndroid Build Coastguard Worker #include "marl/thread.h"
82*03ce13f7SAndroid Build Coastguard Worker #include "marl/tsa.h"
83*03ce13f7SAndroid Build Coastguard Worker 
84*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
85*03ce13f7SAndroid Build Coastguard Worker #	include <unistd.h>
86*03ce13f7SAndroid Build Coastguard Worker 
87*03ce13f7SAndroid Build Coastguard Worker #	include "commit.h"
88*03ce13f7SAndroid Build Coastguard Worker #	include <android/log.h>
89*03ce13f7SAndroid Build Coastguard Worker #	include <hardware/gralloc.h>
90*03ce13f7SAndroid Build Coastguard Worker #	include <hardware/gralloc1.h>
91*03ce13f7SAndroid Build Coastguard Worker #	include <sync/sync.h>
92*03ce13f7SAndroid Build Coastguard Worker #	ifdef SWIFTSHADER_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER
93*03ce13f7SAndroid Build Coastguard Worker #		include "VkDeviceMemoryExternalAndroid.hpp"
94*03ce13f7SAndroid Build Coastguard Worker #	endif
95*03ce13f7SAndroid Build Coastguard Worker #endif
96*03ce13f7SAndroid Build Coastguard Worker 
97*03ce13f7SAndroid Build Coastguard Worker #include <algorithm>
98*03ce13f7SAndroid Build Coastguard Worker #include <cinttypes>
99*03ce13f7SAndroid Build Coastguard Worker #include <cmath>
100*03ce13f7SAndroid Build Coastguard Worker #include <cstring>
101*03ce13f7SAndroid Build Coastguard Worker #include <functional>
102*03ce13f7SAndroid Build Coastguard Worker #include <map>
103*03ce13f7SAndroid Build Coastguard Worker #include <string>
104*03ce13f7SAndroid Build Coastguard Worker 
105*03ce13f7SAndroid Build Coastguard Worker namespace {
106*03ce13f7SAndroid Build Coastguard Worker 
107*03ce13f7SAndroid Build Coastguard Worker // Enable commit_id.py and #include commit.h for other platforms.
108*03ce13f7SAndroid Build Coastguard Worker #if defined(__ANDROID__) && defined(ENABLE_BUILD_VERSION_OUTPUT)
logBuildVersionInformation()109*03ce13f7SAndroid Build Coastguard Worker void logBuildVersionInformation()
110*03ce13f7SAndroid Build Coastguard Worker {
111*03ce13f7SAndroid Build Coastguard Worker 	// TODO(b/144093703): Don't call __android_log_print() directly
112*03ce13f7SAndroid Build Coastguard Worker 	__android_log_print(ANDROID_LOG_INFO, "SwiftShader", "SwiftShader Version: %s", SWIFTSHADER_VERSION_STRING);
113*03ce13f7SAndroid Build Coastguard Worker }
114*03ce13f7SAndroid Build Coastguard Worker #endif  // __ANDROID__ && ENABLE_BUILD_VERSION_OUTPUT
115*03ce13f7SAndroid Build Coastguard Worker 
getOrCreateScheduler()116*03ce13f7SAndroid Build Coastguard Worker std::shared_ptr<marl::Scheduler> getOrCreateScheduler()
117*03ce13f7SAndroid Build Coastguard Worker {
118*03ce13f7SAndroid Build Coastguard Worker 	struct Scheduler
119*03ce13f7SAndroid Build Coastguard Worker 	{
120*03ce13f7SAndroid Build Coastguard Worker 		marl::mutex mutex;
121*03ce13f7SAndroid Build Coastguard Worker 		std::weak_ptr<marl::Scheduler> weakptr GUARDED_BY(mutex);
122*03ce13f7SAndroid Build Coastguard Worker 	};
123*03ce13f7SAndroid Build Coastguard Worker 
124*03ce13f7SAndroid Build Coastguard Worker 	static Scheduler scheduler;  // TODO(b/208256248): Avoid exit-time destructor.
125*03ce13f7SAndroid Build Coastguard Worker 
126*03ce13f7SAndroid Build Coastguard Worker 	marl::lock lock(scheduler.mutex);
127*03ce13f7SAndroid Build Coastguard Worker 	auto sptr = scheduler.weakptr.lock();
128*03ce13f7SAndroid Build Coastguard Worker 	if(!sptr)
129*03ce13f7SAndroid Build Coastguard Worker 	{
130*03ce13f7SAndroid Build Coastguard Worker 		const sw::Configuration &config = sw::getConfiguration();
131*03ce13f7SAndroid Build Coastguard Worker 		marl::Scheduler::Config cfg = sw::getSchedulerConfiguration(config);
132*03ce13f7SAndroid Build Coastguard Worker 		sptr = std::make_shared<marl::Scheduler>(cfg);
133*03ce13f7SAndroid Build Coastguard Worker 		scheduler.weakptr = sptr;
134*03ce13f7SAndroid Build Coastguard Worker 	}
135*03ce13f7SAndroid Build Coastguard Worker 	return sptr;
136*03ce13f7SAndroid Build Coastguard Worker }
137*03ce13f7SAndroid Build Coastguard Worker 
138*03ce13f7SAndroid Build Coastguard Worker // initializeLibrary() is called by vkCreateInstance() to perform one-off global
139*03ce13f7SAndroid Build Coastguard Worker // initialization of the swiftshader driver.
initializeLibrary()140*03ce13f7SAndroid Build Coastguard Worker void initializeLibrary()
141*03ce13f7SAndroid Build Coastguard Worker {
142*03ce13f7SAndroid Build Coastguard Worker 	static bool doOnce = [] {
143*03ce13f7SAndroid Build Coastguard Worker #if defined(__ANDROID__) && defined(ENABLE_BUILD_VERSION_OUTPUT)
144*03ce13f7SAndroid Build Coastguard Worker 		logBuildVersionInformation();
145*03ce13f7SAndroid Build Coastguard Worker #endif  // __ANDROID__ && ENABLE_BUILD_VERSION_OUTPUT
146*03ce13f7SAndroid Build Coastguard Worker 		return true;
147*03ce13f7SAndroid Build Coastguard Worker 	}();
148*03ce13f7SAndroid Build Coastguard Worker 	(void)doOnce;
149*03ce13f7SAndroid Build Coastguard Worker }
150*03ce13f7SAndroid Build Coastguard Worker 
151*03ce13f7SAndroid Build Coastguard Worker template<class T>
ValidateRenderPassPNextChain(VkDevice device,const T * pCreateInfo)152*03ce13f7SAndroid Build Coastguard Worker void ValidateRenderPassPNextChain(VkDevice device, const T *pCreateInfo)
153*03ce13f7SAndroid Build Coastguard Worker {
154*03ce13f7SAndroid Build Coastguard Worker 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
155*03ce13f7SAndroid Build Coastguard Worker 
156*03ce13f7SAndroid Build Coastguard Worker 	while(extensionCreateInfo)
157*03ce13f7SAndroid Build Coastguard Worker 	{
158*03ce13f7SAndroid Build Coastguard Worker 		switch(extensionCreateInfo->sType)
159*03ce13f7SAndroid Build Coastguard Worker 		{
160*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:
161*03ce13f7SAndroid Build Coastguard Worker 			{
162*03ce13f7SAndroid Build Coastguard Worker 				const VkRenderPassInputAttachmentAspectCreateInfo *inputAttachmentAspectCreateInfo = reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo *>(extensionCreateInfo);
163*03ce13f7SAndroid Build Coastguard Worker 
164*03ce13f7SAndroid Build Coastguard Worker 				for(uint32_t i = 0; i < inputAttachmentAspectCreateInfo->aspectReferenceCount; i++)
165*03ce13f7SAndroid Build Coastguard Worker 				{
166*03ce13f7SAndroid Build Coastguard Worker 					const auto &aspectReference = inputAttachmentAspectCreateInfo->pAspectReferences[i];
167*03ce13f7SAndroid Build Coastguard Worker 					ASSERT(aspectReference.subpass < pCreateInfo->subpassCount);
168*03ce13f7SAndroid Build Coastguard Worker 					const auto &subpassDescription = pCreateInfo->pSubpasses[aspectReference.subpass];
169*03ce13f7SAndroid Build Coastguard Worker 					ASSERT(aspectReference.inputAttachmentIndex < subpassDescription.inputAttachmentCount);
170*03ce13f7SAndroid Build Coastguard Worker 					const auto &attachmentReference = subpassDescription.pInputAttachments[aspectReference.inputAttachmentIndex];
171*03ce13f7SAndroid Build Coastguard Worker 					if(attachmentReference.attachment != VK_ATTACHMENT_UNUSED)
172*03ce13f7SAndroid Build Coastguard Worker 					{
173*03ce13f7SAndroid Build Coastguard Worker 						// If the pNext chain includes an instance of VkRenderPassInputAttachmentAspectCreateInfo, for any
174*03ce13f7SAndroid Build Coastguard Worker 						// element of the pInputAttachments member of any element of pSubpasses where the attachment member
175*03ce13f7SAndroid Build Coastguard Worker 						// is not VK_ATTACHMENT_UNUSED, the aspectMask member of the corresponding element of
176*03ce13f7SAndroid Build Coastguard Worker 						// VkRenderPassInputAttachmentAspectCreateInfo::pAspectReferences must only include aspects that are
177*03ce13f7SAndroid Build Coastguard Worker 						// present in images of the format specified by the element of pAttachments at attachment
178*03ce13f7SAndroid Build Coastguard Worker 						vk::Format format(pCreateInfo->pAttachments[attachmentReference.attachment].format);
179*03ce13f7SAndroid Build Coastguard Worker 						bool isDepth = format.isDepth();
180*03ce13f7SAndroid Build Coastguard Worker 						bool isStencil = format.isStencil();
181*03ce13f7SAndroid Build Coastguard Worker 						ASSERT(!(aspectReference.aspectMask & VK_IMAGE_ASPECT_COLOR_BIT) || (!isDepth && !isStencil));
182*03ce13f7SAndroid Build Coastguard Worker 						ASSERT(!(aspectReference.aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) || isDepth);
183*03ce13f7SAndroid Build Coastguard Worker 						ASSERT(!(aspectReference.aspectMask & VK_IMAGE_ASPECT_STENCIL_BIT) || isStencil);
184*03ce13f7SAndroid Build Coastguard Worker 					}
185*03ce13f7SAndroid Build Coastguard Worker 				}
186*03ce13f7SAndroid Build Coastguard Worker 			}
187*03ce13f7SAndroid Build Coastguard Worker 			break;
188*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
189*03ce13f7SAndroid Build Coastguard Worker 			{
190*03ce13f7SAndroid Build Coastguard Worker 				const VkRenderPassMultiviewCreateInfo *multiviewCreateInfo = reinterpret_cast<const VkRenderPassMultiviewCreateInfo *>(extensionCreateInfo);
191*03ce13f7SAndroid Build Coastguard Worker 				ASSERT((multiviewCreateInfo->subpassCount == 0) || (multiviewCreateInfo->subpassCount == pCreateInfo->subpassCount));
192*03ce13f7SAndroid Build Coastguard Worker 				ASSERT((multiviewCreateInfo->dependencyCount == 0) || (multiviewCreateInfo->dependencyCount == pCreateInfo->dependencyCount));
193*03ce13f7SAndroid Build Coastguard Worker 
194*03ce13f7SAndroid Build Coastguard Worker 				bool zeroMask = (multiviewCreateInfo->pViewMasks[0] == 0);
195*03ce13f7SAndroid Build Coastguard Worker 				for(uint32_t i = 1; i < multiviewCreateInfo->subpassCount; i++)
196*03ce13f7SAndroid Build Coastguard Worker 				{
197*03ce13f7SAndroid Build Coastguard Worker 					ASSERT((multiviewCreateInfo->pViewMasks[i] == 0) == zeroMask);
198*03ce13f7SAndroid Build Coastguard Worker 				}
199*03ce13f7SAndroid Build Coastguard Worker 
200*03ce13f7SAndroid Build Coastguard Worker 				if(zeroMask)
201*03ce13f7SAndroid Build Coastguard Worker 				{
202*03ce13f7SAndroid Build Coastguard Worker 					ASSERT(multiviewCreateInfo->correlationMaskCount == 0);
203*03ce13f7SAndroid Build Coastguard Worker 				}
204*03ce13f7SAndroid Build Coastguard Worker 
205*03ce13f7SAndroid Build Coastguard Worker 				for(uint32_t i = 0; i < multiviewCreateInfo->dependencyCount; i++)
206*03ce13f7SAndroid Build Coastguard Worker 				{
207*03ce13f7SAndroid Build Coastguard Worker 					const auto &dependency = pCreateInfo->pDependencies[i];
208*03ce13f7SAndroid Build Coastguard Worker 					if(multiviewCreateInfo->pViewOffsets[i] != 0)
209*03ce13f7SAndroid Build Coastguard Worker 					{
210*03ce13f7SAndroid Build Coastguard Worker 						ASSERT(dependency.srcSubpass != dependency.dstSubpass);
211*03ce13f7SAndroid Build Coastguard Worker 						ASSERT(dependency.dependencyFlags & VK_DEPENDENCY_VIEW_LOCAL_BIT);
212*03ce13f7SAndroid Build Coastguard Worker 					}
213*03ce13f7SAndroid Build Coastguard Worker 					if(zeroMask)
214*03ce13f7SAndroid Build Coastguard Worker 					{
215*03ce13f7SAndroid Build Coastguard Worker 						ASSERT(!(dependency.dependencyFlags & VK_DEPENDENCY_VIEW_LOCAL_BIT));
216*03ce13f7SAndroid Build Coastguard Worker 					}
217*03ce13f7SAndroid Build Coastguard Worker 				}
218*03ce13f7SAndroid Build Coastguard Worker 
219*03ce13f7SAndroid Build Coastguard Worker 				// If the pNext chain includes an instance of VkRenderPassMultiviewCreateInfo,
220*03ce13f7SAndroid Build Coastguard Worker 				// each element of its pViewMask member must not include a bit at a position
221*03ce13f7SAndroid Build Coastguard Worker 				// greater than the value of VkPhysicalDeviceLimits::maxFramebufferLayers
222*03ce13f7SAndroid Build Coastguard Worker 				// pViewMask is a 32 bit value. If maxFramebufferLayers > 32, it's impossible
223*03ce13f7SAndroid Build Coastguard Worker 				// for pViewMask to contain a bit at an illegal position
224*03ce13f7SAndroid Build Coastguard Worker 				// Note: Verify pViewMask values instead if we hit this assert
225*03ce13f7SAndroid Build Coastguard Worker 				ASSERT(vk::Cast(device)->getPhysicalDevice()->getProperties().limits.maxFramebufferLayers >= 32);
226*03ce13f7SAndroid Build Coastguard Worker 			}
227*03ce13f7SAndroid Build Coastguard Worker 			break;
228*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
229*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
230*03ce13f7SAndroid Build Coastguard Worker 			break;
231*03ce13f7SAndroid Build Coastguard Worker 		default:
232*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType).c_str());
233*03ce13f7SAndroid Build Coastguard Worker 			break;
234*03ce13f7SAndroid Build Coastguard Worker 		}
235*03ce13f7SAndroid Build Coastguard Worker 
236*03ce13f7SAndroid Build Coastguard Worker 		extensionCreateInfo = extensionCreateInfo->pNext;
237*03ce13f7SAndroid Build Coastguard Worker 	}
238*03ce13f7SAndroid Build Coastguard Worker }
239*03ce13f7SAndroid Build Coastguard Worker 
240*03ce13f7SAndroid Build Coastguard Worker // This variable will be set to the negotiated ICD interface version negotiated with the loader.
241*03ce13f7SAndroid Build Coastguard Worker // It defaults to 1 because if vk_icdNegotiateLoaderICDInterfaceVersion is never called it means
242*03ce13f7SAndroid Build Coastguard Worker // that the loader doens't support version 2 of that interface.
243*03ce13f7SAndroid Build Coastguard Worker uint32_t sICDInterfaceVersion = 1;
244*03ce13f7SAndroid Build Coastguard Worker // Whether any vk_icd* entrypoints were used. This is used to distinguish between applications that
245*03ce13f7SAndroid Build Coastguard Worker // use the Vulkan loader to load Swiftshader (in which case vk_icd functions are called), and
246*03ce13f7SAndroid Build Coastguard Worker // applications that load Swiftshader and grab vkGetInstanceProcAddr directly.
247*03ce13f7SAndroid Build Coastguard Worker bool sICDEntryPointsUsed = false;
248*03ce13f7SAndroid Build Coastguard Worker 
249*03ce13f7SAndroid Build Coastguard Worker }  // namespace
250*03ce13f7SAndroid Build Coastguard Worker 
251*03ce13f7SAndroid Build Coastguard Worker extern "C" {
vk_icdGetInstanceProcAddr(VkInstance instance,const char * pName)252*03ce13f7SAndroid Build Coastguard Worker VK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char *pName)
253*03ce13f7SAndroid Build Coastguard Worker {
254*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, const char* pName = %p)", instance, pName);
255*03ce13f7SAndroid Build Coastguard Worker 	sICDEntryPointsUsed = true;
256*03ce13f7SAndroid Build Coastguard Worker 
257*03ce13f7SAndroid Build Coastguard Worker 	return vk::GetInstanceProcAddr(vk::Cast(instance), pName);
258*03ce13f7SAndroid Build Coastguard Worker }
259*03ce13f7SAndroid Build Coastguard Worker 
vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t * pSupportedVersion)260*03ce13f7SAndroid Build Coastguard Worker VK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t *pSupportedVersion)
261*03ce13f7SAndroid Build Coastguard Worker {
262*03ce13f7SAndroid Build Coastguard Worker 	sICDEntryPointsUsed = true;
263*03ce13f7SAndroid Build Coastguard Worker 
264*03ce13f7SAndroid Build Coastguard Worker 	sICDInterfaceVersion = std::min(*pSupportedVersion, 7u);
265*03ce13f7SAndroid Build Coastguard Worker 	*pSupportedVersion = sICDInterfaceVersion;
266*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
267*03ce13f7SAndroid Build Coastguard Worker }
268*03ce13f7SAndroid Build Coastguard Worker 
vk_icdGetPhysicalDeviceProcAddr(VkInstance instance,const char * pName)269*03ce13f7SAndroid Build Coastguard Worker VK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance instance, const char *pName)
270*03ce13f7SAndroid Build Coastguard Worker {
271*03ce13f7SAndroid Build Coastguard Worker 	sICDEntryPointsUsed = true;
272*03ce13f7SAndroid Build Coastguard Worker 	return vk::GetPhysicalDeviceProcAddr(vk::Cast(instance), pName);
273*03ce13f7SAndroid Build Coastguard Worker }
274*03ce13f7SAndroid Build Coastguard Worker 
275*03ce13f7SAndroid Build Coastguard Worker #if VK_USE_PLATFORM_WIN32_KHR
276*03ce13f7SAndroid Build Coastguard Worker 
vk_icdEnumerateAdapterPhysicalDevices(VkInstance instance,LUID adapterLUID,uint32_t * pPhysicalDeviceCount,VkPhysicalDevice * pPhysicalDevices)277*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vk_icdEnumerateAdapterPhysicalDevices(VkInstance instance, LUID adapterLUID, uint32_t *pPhysicalDeviceCount, VkPhysicalDevice *pPhysicalDevices)
278*03ce13f7SAndroid Build Coastguard Worker {
279*03ce13f7SAndroid Build Coastguard Worker 	sICDEntryPointsUsed = true;
280*03ce13f7SAndroid Build Coastguard Worker 	if(!pPhysicalDevices)
281*03ce13f7SAndroid Build Coastguard Worker 	{
282*03ce13f7SAndroid Build Coastguard Worker 		*pPhysicalDeviceCount = 0;
283*03ce13f7SAndroid Build Coastguard Worker 	}
284*03ce13f7SAndroid Build Coastguard Worker 
285*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
286*03ce13f7SAndroid Build Coastguard Worker }
287*03ce13f7SAndroid Build Coastguard Worker 
288*03ce13f7SAndroid Build Coastguard Worker #endif  // VK_USE_PLATFORM_WIN32_KHR
289*03ce13f7SAndroid Build Coastguard Worker 
290*03ce13f7SAndroid Build Coastguard Worker #if VK_USE_PLATFORM_FUCHSIA
291*03ce13f7SAndroid Build Coastguard Worker 
292*03ce13f7SAndroid Build Coastguard Worker // This symbol must be exported by a Fuchsia Vulkan ICD. The Vulkan loader will
293*03ce13f7SAndroid Build Coastguard Worker // call it, passing the address of a global function pointer that can later be
294*03ce13f7SAndroid Build Coastguard Worker // used at runtime to connect to Fuchsia FIDL services, as required by certain
295*03ce13f7SAndroid Build Coastguard Worker // extensions. See https://fxbug.dev/13095 for more details.
296*03ce13f7SAndroid Build Coastguard Worker //
297*03ce13f7SAndroid Build Coastguard Worker // NOTE: This entry point has not been upstreamed to Khronos yet, which reserves
298*03ce13f7SAndroid Build Coastguard Worker //       all symbols starting with vk_icd. See https://fxbug.dev/13074 which
299*03ce13f7SAndroid Build Coastguard Worker //       tracks upstreaming progress.
vk_icdInitializeConnectToServiceCallback(PFN_vkConnectToService callback)300*03ce13f7SAndroid Build Coastguard Worker VK_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vk_icdInitializeConnectToServiceCallback(
301*03ce13f7SAndroid Build Coastguard Worker     PFN_vkConnectToService callback)
302*03ce13f7SAndroid Build Coastguard Worker {
303*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(callback = %p)", callback);
304*03ce13f7SAndroid Build Coastguard Worker 	sICDEntryPointsUsed = true;
305*03ce13f7SAndroid Build Coastguard Worker 	vk::icdFuchsiaServiceConnectCallback = callback;
306*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
307*03ce13f7SAndroid Build Coastguard Worker }
308*03ce13f7SAndroid Build Coastguard Worker 
309*03ce13f7SAndroid Build Coastguard Worker #endif  // VK_USE_PLATFORM_FUCHSIA
310*03ce13f7SAndroid Build Coastguard Worker 
311*03ce13f7SAndroid Build Coastguard Worker struct ExtensionProperties : public VkExtensionProperties
312*03ce13f7SAndroid Build Coastguard Worker {
__anon00b16cca0302ExtensionProperties313*03ce13f7SAndroid Build Coastguard Worker 	std::function<bool()> isSupported = [] { return true; };
314*03ce13f7SAndroid Build Coastguard Worker };
315*03ce13f7SAndroid Build Coastguard Worker 
316*03ce13f7SAndroid Build Coastguard Worker // TODO(b/208256248): Avoid exit-time destructor.
317*03ce13f7SAndroid Build Coastguard Worker static const ExtensionProperties instanceExtensionProperties[] = {
318*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME, VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION } },
319*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME, VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION } },
320*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME, VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION } },
321*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME, VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION } },
322*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME, VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION } },
323*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_DEBUG_UTILS_EXTENSION_NAME, VK_EXT_DEBUG_UTILS_SPEC_VERSION } },
324*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, VK_EXT_HEADLESS_SURFACE_SPEC_VERSION } },
325*03ce13f7SAndroid Build Coastguard Worker #ifndef __ANDROID__
326*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SURFACE_EXTENSION_NAME, VK_KHR_SURFACE_SPEC_VERSION } },
327*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME, VK_EXT_SURFACE_MAINTENANCE_1_SPEC_VERSION } },
328*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION } },
329*03ce13f7SAndroid Build Coastguard Worker #endif
330*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_XCB_KHR
__anon00b16cca0402null331*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_XCB_SURFACE_EXTENSION_NAME, VK_KHR_XCB_SURFACE_SPEC_VERSION }, [] { return vk::XcbSurfaceKHR::isSupported(); } },
332*03ce13f7SAndroid Build Coastguard Worker #endif
333*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_WAYLAND_KHR
__anon00b16cca0502null334*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME, VK_KHR_WAYLAND_SURFACE_SPEC_VERSION }, [] { return vk::WaylandSurfaceKHR::isSupported(); } },
335*03ce13f7SAndroid Build Coastguard Worker #endif
336*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
337*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME, VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION } },
338*03ce13f7SAndroid Build Coastguard Worker #endif
339*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_DISPLAY_KHR
340*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_DISPLAY_EXTENSION_NAME, VK_KHR_DISPLAY_SPEC_VERSION } },
341*03ce13f7SAndroid Build Coastguard Worker #endif
342*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_MACOS_MVK
343*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_MVK_MACOS_SURFACE_EXTENSION_NAME, VK_MVK_MACOS_SURFACE_SPEC_VERSION } },
344*03ce13f7SAndroid Build Coastguard Worker #endif
345*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_METAL_EXT
346*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_METAL_SURFACE_EXTENSION_NAME, VK_EXT_METAL_SURFACE_SPEC_VERSION } },
347*03ce13f7SAndroid Build Coastguard Worker #endif
348*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_WIN32_KHR
349*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_WIN32_SURFACE_EXTENSION_NAME, VK_KHR_WIN32_SURFACE_SPEC_VERSION } },
350*03ce13f7SAndroid Build Coastguard Worker #endif
351*03ce13f7SAndroid Build Coastguard Worker };
352*03ce13f7SAndroid Build Coastguard Worker 
353*03ce13f7SAndroid Build Coastguard Worker // TODO(b/208256248): Avoid exit-time destructor.
354*03ce13f7SAndroid Build Coastguard Worker static const ExtensionProperties deviceExtensionProperties[] = {
355*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION } },
356*03ce13f7SAndroid Build Coastguard Worker 	// Vulkan 1.1 promoted extensions
357*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_BIND_MEMORY_2_EXTENSION_NAME, VK_KHR_BIND_MEMORY_2_SPEC_VERSION } },
358*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME, VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION } },
359*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME, VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION } },
360*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME, VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION } },
361*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_DEVICE_GROUP_EXTENSION_NAME, VK_KHR_DEVICE_GROUP_SPEC_VERSION } },
362*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME, VK_KHR_EXTERNAL_FENCE_SPEC_VERSION } },
363*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION } },
364*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME, VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION } },
365*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION } },
366*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_MAINTENANCE1_EXTENSION_NAME, VK_KHR_MAINTENANCE1_SPEC_VERSION } },
367*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_MAINTENANCE2_EXTENSION_NAME, VK_KHR_MAINTENANCE2_SPEC_VERSION } },
368*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_MAINTENANCE3_EXTENSION_NAME, VK_KHR_MAINTENANCE3_SPEC_VERSION } },
369*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_MULTIVIEW_EXTENSION_NAME, VK_KHR_MULTIVIEW_SPEC_VERSION } },
370*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME, VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION } },
371*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION } },
372*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME, VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION } },
373*03ce13f7SAndroid Build Coastguard Worker 	// Only 1.1 core version of this is supported. The extension has additional requirements
374*03ce13f7SAndroid Build Coastguard Worker 	//{{ VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME, VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION }},
375*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME, VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION } },
376*03ce13f7SAndroid Build Coastguard Worker 	// Only 1.1 core version of this is supported. The extension has additional requirements
377*03ce13f7SAndroid Build Coastguard Worker 	//{{ VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, VK_KHR_VARIABLE_POINTERS_SPEC_VERSION }},
378*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME, VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION } },
379*03ce13f7SAndroid Build Coastguard Worker #ifndef __ANDROID__
380*03ce13f7SAndroid Build Coastguard Worker 	// We fully support the KHR_swapchain v70 additions, so just track the spec version.
381*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SWAPCHAIN_EXTENSION_NAME, VK_KHR_SWAPCHAIN_SPEC_VERSION } },
382*03ce13f7SAndroid Build Coastguard Worker #else
383*03ce13f7SAndroid Build Coastguard Worker 	// We only support V7 of this extension. Missing functionality: in V8,
384*03ce13f7SAndroid Build Coastguard Worker 	// it becomes possible to pass a VkNativeBufferANDROID structure to
385*03ce13f7SAndroid Build Coastguard Worker 	// vkBindImageMemory2. Android's swapchain implementation does this in
386*03ce13f7SAndroid Build Coastguard Worker 	// order to support passing VkBindImageMemorySwapchainInfoKHR
387*03ce13f7SAndroid Build Coastguard Worker 	// (from KHR_swapchain v70) to vkBindImageMemory2.
388*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME, 7 } },
389*03ce13f7SAndroid Build Coastguard Worker #endif
390*03ce13f7SAndroid Build Coastguard Worker #if SWIFTSHADER_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER
391*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME, VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION } },
392*03ce13f7SAndroid Build Coastguard Worker #endif
393*03ce13f7SAndroid Build Coastguard Worker #if SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
394*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME, VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION } },
395*03ce13f7SAndroid Build Coastguard Worker #endif
396*03ce13f7SAndroid Build Coastguard Worker #if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
397*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME, VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION } },
398*03ce13f7SAndroid Build Coastguard Worker #endif
399*03ce13f7SAndroid Build Coastguard Worker #if !defined(__APPLE__)
400*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME, VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION } },
401*03ce13f7SAndroid Build Coastguard Worker #endif
402*03ce13f7SAndroid Build Coastguard Worker #if VK_USE_PLATFORM_FUCHSIA
403*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME, VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION } },
404*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME, VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION } },
405*03ce13f7SAndroid Build Coastguard Worker #endif
406*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_PROVOKING_VERTEX_EXTENSION_NAME, VK_EXT_PROVOKING_VERTEX_SPEC_VERSION } },
407*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME, VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION } },
408*03ce13f7SAndroid Build Coastguard Worker #ifdef SWIFTSHADER_DEVICE_MEMORY_REPORT
409*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME, VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION } },
410*03ce13f7SAndroid Build Coastguard Worker #endif  // SWIFTSHADER_DEVICE_MEMORY_REPORT
411*03ce13f7SAndroid Build Coastguard Worker 	// Vulkan 1.2 promoted extensions
412*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION } },
413*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME, VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION } },
414*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME, VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION } },
415*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME, VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION } },
416*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME, VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION } },
417*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME, VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION } },
418*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME, VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION } },
419*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME, VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION } },
420*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SPIRV_1_4_EXTENSION_NAME, VK_KHR_SPIRV_1_4_SPEC_VERSION } },
421*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION } },
422*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME, VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION } },
423*03ce13f7SAndroid Build Coastguard Worker 	// Vulkan 1.3 promoted extensions
424*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION } },
425*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME, VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION } },
426*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME, VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION } },
427*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME, VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION } },
428*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_PRIVATE_DATA_EXTENSION_NAME, VK_EXT_PRIVATE_DATA_SPEC_VERSION } },
429*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME, VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION } },
430*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME, VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION } },
431*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME, VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION } },
432*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_TOOLING_INFO_EXTENSION_NAME, VK_EXT_TOOLING_INFO_SPEC_VERSION } },
433*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME, VK_KHR_COPY_COMMANDS_2_SPEC_VERSION } },
434*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION } },
435*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_EXTENSION_NAME, VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_SPEC_VERSION } },
436*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME, VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION } },
437*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_MAINTENANCE_4_EXTENSION_NAME, VK_KHR_MAINTENANCE_4_SPEC_VERSION } },
438*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME, VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION } },
439*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME, VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION } },
440*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME, VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION } },
441*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME, VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION } },
442*03ce13f7SAndroid Build Coastguard Worker 	// Roadmap 2022 extension
443*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_GLOBAL_PRIORITY_EXTENSION_NAME, VK_KHR_GLOBAL_PRIORITY_SPEC_VERSION } },
444*03ce13f7SAndroid Build Coastguard Worker 	// Additional extension
445*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION } },
446*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME, VK_GOOGLE_DECORATE_STRING_SPEC_VERSION } },
447*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME, VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION } },
448*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_GOOGLE_USER_TYPE_EXTENSION_NAME, VK_GOOGLE_USER_TYPE_SPEC_VERSION } },
449*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION } },
450*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME, VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION } },
451*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME, VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION } },
452*03ce13f7SAndroid Build Coastguard Worker #ifndef __ANDROID__
453*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME, VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION } },
454*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME, VK_EXT_SWAPCHAIN_MAINTENANCE_1_SPEC_VERSION } },
455*03ce13f7SAndroid Build Coastguard Worker #endif
456*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME, VK_EXT_GRAPHICS_PIPELINE_LIBRARY_SPEC_VERSION } },
457*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION } },
458*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION } },
459*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION } },
460*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME, VK_EXT_LOAD_STORE_OP_NONE_SPEC_VERSION } },
461*03ce13f7SAndroid Build Coastguard Worker 	// The following extension is only used to add support for Bresenham lines
462*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME, VK_EXT_LINE_RASTERIZATION_SPEC_VERSION } },
463*03ce13f7SAndroid Build Coastguard Worker 	// The following extension is used by ANGLE to emulate blitting the stencil buffer
464*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME, VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION } },
465*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION } },
466*03ce13f7SAndroid Build Coastguard Worker 	// Useful for D3D emulation
467*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_4444_FORMATS_EXTENSION_NAME, VK_EXT_4444_FORMATS_SPEC_VERSION } },
468*03ce13f7SAndroid Build Coastguard Worker 	// Used by ANGLE to support GL_KHR_blend_equation_advanced
469*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME, VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION } },
470*03ce13f7SAndroid Build Coastguard Worker 	// Used by ANGLE to implement triangle/etc list restarts as possible in OpenGL
471*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME, VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION } },
472*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_PIPELINE_ROBUSTNESS_EXTENSION_NAME, VK_EXT_PIPELINE_ROBUSTNESS_SPEC_VERSION } },
473*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME, VK_EXT_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION } },
474*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME, VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION } },
475*03ce13f7SAndroid Build Coastguard Worker 	{ { VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME, VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION } },
476*03ce13f7SAndroid Build Coastguard Worker };
477*03ce13f7SAndroid Build Coastguard Worker 
numSupportedExtensions(const ExtensionProperties * extensionProperties,uint32_t extensionPropertiesCount)478*03ce13f7SAndroid Build Coastguard Worker static uint32_t numSupportedExtensions(const ExtensionProperties *extensionProperties, uint32_t extensionPropertiesCount)
479*03ce13f7SAndroid Build Coastguard Worker {
480*03ce13f7SAndroid Build Coastguard Worker 	uint32_t count = 0;
481*03ce13f7SAndroid Build Coastguard Worker 
482*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < extensionPropertiesCount; i++)
483*03ce13f7SAndroid Build Coastguard Worker 	{
484*03ce13f7SAndroid Build Coastguard Worker 		if(extensionProperties[i].isSupported())
485*03ce13f7SAndroid Build Coastguard Worker 		{
486*03ce13f7SAndroid Build Coastguard Worker 			count++;
487*03ce13f7SAndroid Build Coastguard Worker 		}
488*03ce13f7SAndroid Build Coastguard Worker 	}
489*03ce13f7SAndroid Build Coastguard Worker 
490*03ce13f7SAndroid Build Coastguard Worker 	return count;
491*03ce13f7SAndroid Build Coastguard Worker }
492*03ce13f7SAndroid Build Coastguard Worker 
numInstanceSupportedExtensions()493*03ce13f7SAndroid Build Coastguard Worker static uint32_t numInstanceSupportedExtensions()
494*03ce13f7SAndroid Build Coastguard Worker {
495*03ce13f7SAndroid Build Coastguard Worker 	return numSupportedExtensions(instanceExtensionProperties, sizeof(instanceExtensionProperties) / sizeof(instanceExtensionProperties[0]));
496*03ce13f7SAndroid Build Coastguard Worker }
497*03ce13f7SAndroid Build Coastguard Worker 
numDeviceSupportedExtensions()498*03ce13f7SAndroid Build Coastguard Worker static uint32_t numDeviceSupportedExtensions()
499*03ce13f7SAndroid Build Coastguard Worker {
500*03ce13f7SAndroid Build Coastguard Worker 	return numSupportedExtensions(deviceExtensionProperties, sizeof(deviceExtensionProperties) / sizeof(deviceExtensionProperties[0]));
501*03ce13f7SAndroid Build Coastguard Worker }
502*03ce13f7SAndroid Build Coastguard Worker 
hasExtension(const char * extensionName,const ExtensionProperties * extensionProperties,uint32_t extensionPropertiesCount)503*03ce13f7SAndroid Build Coastguard Worker static bool hasExtension(const char *extensionName, const ExtensionProperties *extensionProperties, uint32_t extensionPropertiesCount)
504*03ce13f7SAndroid Build Coastguard Worker {
505*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < extensionPropertiesCount; i++)
506*03ce13f7SAndroid Build Coastguard Worker 	{
507*03ce13f7SAndroid Build Coastguard Worker 		if(strcmp(extensionName, extensionProperties[i].extensionName) == 0)
508*03ce13f7SAndroid Build Coastguard Worker 		{
509*03ce13f7SAndroid Build Coastguard Worker 			return extensionProperties[i].isSupported();
510*03ce13f7SAndroid Build Coastguard Worker 		}
511*03ce13f7SAndroid Build Coastguard Worker 	}
512*03ce13f7SAndroid Build Coastguard Worker 
513*03ce13f7SAndroid Build Coastguard Worker 	return false;
514*03ce13f7SAndroid Build Coastguard Worker }
515*03ce13f7SAndroid Build Coastguard Worker 
hasInstanceExtension(const char * extensionName)516*03ce13f7SAndroid Build Coastguard Worker static bool hasInstanceExtension(const char *extensionName)
517*03ce13f7SAndroid Build Coastguard Worker {
518*03ce13f7SAndroid Build Coastguard Worker 	return hasExtension(extensionName, instanceExtensionProperties, sizeof(instanceExtensionProperties) / sizeof(instanceExtensionProperties[0]));
519*03ce13f7SAndroid Build Coastguard Worker }
520*03ce13f7SAndroid Build Coastguard Worker 
hasDeviceExtension(const char * extensionName)521*03ce13f7SAndroid Build Coastguard Worker static bool hasDeviceExtension(const char *extensionName)
522*03ce13f7SAndroid Build Coastguard Worker {
523*03ce13f7SAndroid Build Coastguard Worker 	return hasExtension(extensionName, deviceExtensionProperties, sizeof(deviceExtensionProperties) / sizeof(deviceExtensionProperties[0]));
524*03ce13f7SAndroid Build Coastguard Worker }
525*03ce13f7SAndroid Build Coastguard Worker 
copyExtensions(VkExtensionProperties * pProperties,uint32_t toCopy,const ExtensionProperties * extensionProperties,uint32_t extensionPropertiesCount)526*03ce13f7SAndroid Build Coastguard Worker static void copyExtensions(VkExtensionProperties *pProperties, uint32_t toCopy, const ExtensionProperties *extensionProperties, uint32_t extensionPropertiesCount)
527*03ce13f7SAndroid Build Coastguard Worker {
528*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0, j = 0; i < toCopy; i++, j++)
529*03ce13f7SAndroid Build Coastguard Worker 	{
530*03ce13f7SAndroid Build Coastguard Worker 		while((j < extensionPropertiesCount) && !extensionProperties[j].isSupported())
531*03ce13f7SAndroid Build Coastguard Worker 		{
532*03ce13f7SAndroid Build Coastguard Worker 			j++;
533*03ce13f7SAndroid Build Coastguard Worker 		}
534*03ce13f7SAndroid Build Coastguard Worker 		if(j < extensionPropertiesCount)
535*03ce13f7SAndroid Build Coastguard Worker 		{
536*03ce13f7SAndroid Build Coastguard Worker 			pProperties[i] = extensionProperties[j];
537*03ce13f7SAndroid Build Coastguard Worker 		}
538*03ce13f7SAndroid Build Coastguard Worker 	}
539*03ce13f7SAndroid Build Coastguard Worker }
540*03ce13f7SAndroid Build Coastguard Worker 
copyInstanceExtensions(VkExtensionProperties * pProperties,uint32_t toCopy)541*03ce13f7SAndroid Build Coastguard Worker static void copyInstanceExtensions(VkExtensionProperties *pProperties, uint32_t toCopy)
542*03ce13f7SAndroid Build Coastguard Worker {
543*03ce13f7SAndroid Build Coastguard Worker 	copyExtensions(pProperties, toCopy, instanceExtensionProperties, sizeof(instanceExtensionProperties) / sizeof(instanceExtensionProperties[0]));
544*03ce13f7SAndroid Build Coastguard Worker }
545*03ce13f7SAndroid Build Coastguard Worker 
copyDeviceExtensions(VkExtensionProperties * pProperties,uint32_t toCopy)546*03ce13f7SAndroid Build Coastguard Worker static void copyDeviceExtensions(VkExtensionProperties *pProperties, uint32_t toCopy)
547*03ce13f7SAndroid Build Coastguard Worker {
548*03ce13f7SAndroid Build Coastguard Worker 	copyExtensions(pProperties, toCopy, deviceExtensionProperties, sizeof(deviceExtensionProperties) / sizeof(deviceExtensionProperties[0]));
549*03ce13f7SAndroid Build Coastguard Worker }
550*03ce13f7SAndroid Build Coastguard Worker 
vkCreateInstance(const VkInstanceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkInstance * pInstance)551*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkInstance *pInstance)
552*03ce13f7SAndroid Build Coastguard Worker {
553*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(const VkInstanceCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkInstance* pInstance = %p)",
554*03ce13f7SAndroid Build Coastguard Worker 	      pCreateInfo, pAllocator, pInstance);
555*03ce13f7SAndroid Build Coastguard Worker 
556*03ce13f7SAndroid Build Coastguard Worker 	initializeLibrary();
557*03ce13f7SAndroid Build Coastguard Worker 
558*03ce13f7SAndroid Build Coastguard Worker 	// ICD interface rule for version 5 of the interface:
559*03ce13f7SAndroid Build Coastguard Worker 	//    - If the loader supports version 4 or lower, the driver must fail with
560*03ce13f7SAndroid Build Coastguard Worker 	//      VK_ERROR_INCOMPATIBLE_DRIVER for all vkCreateInstance calls with apiVersion
561*03ce13f7SAndroid Build Coastguard Worker 	//      set to > Vulkan 1.0
562*03ce13f7SAndroid Build Coastguard Worker 	//    - If the loader supports version 5 or above, the loader must fail with
563*03ce13f7SAndroid Build Coastguard Worker 	//      VK_ERROR_INCOMPATIBLE_DRIVER if it can't handle the apiVersion, and drivers
564*03ce13f7SAndroid Build Coastguard Worker 	//      should fail with VK_ERROR_INCOMPATIBLE_DRIVER only if they can not support the
565*03ce13f7SAndroid Build Coastguard Worker 	//      specified apiVersion.
566*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->pApplicationInfo)
567*03ce13f7SAndroid Build Coastguard Worker 	{
568*03ce13f7SAndroid Build Coastguard Worker 		uint32_t appApiVersion = pCreateInfo->pApplicationInfo->apiVersion;
569*03ce13f7SAndroid Build Coastguard Worker 		if(sICDEntryPointsUsed && sICDInterfaceVersion <= 4)
570*03ce13f7SAndroid Build Coastguard Worker 		{
571*03ce13f7SAndroid Build Coastguard Worker 			// Any version above 1.0 is an error.
572*03ce13f7SAndroid Build Coastguard Worker 			if(VK_API_VERSION_MAJOR(appApiVersion) != 1 || VK_API_VERSION_MINOR(appApiVersion) != 0)
573*03ce13f7SAndroid Build Coastguard Worker 			{
574*03ce13f7SAndroid Build Coastguard Worker 				return VK_ERROR_INCOMPATIBLE_DRIVER;
575*03ce13f7SAndroid Build Coastguard Worker 			}
576*03ce13f7SAndroid Build Coastguard Worker 		}
577*03ce13f7SAndroid Build Coastguard Worker 		else
578*03ce13f7SAndroid Build Coastguard Worker 		{
579*03ce13f7SAndroid Build Coastguard Worker 			if(VK_API_VERSION_MAJOR(appApiVersion) > VK_API_VERSION_MINOR(vk::API_VERSION))
580*03ce13f7SAndroid Build Coastguard Worker 			{
581*03ce13f7SAndroid Build Coastguard Worker 				return VK_ERROR_INCOMPATIBLE_DRIVER;
582*03ce13f7SAndroid Build Coastguard Worker 			}
583*03ce13f7SAndroid Build Coastguard Worker 			if((VK_API_VERSION_MAJOR(appApiVersion) == VK_API_VERSION_MINOR(vk::API_VERSION)) &&
584*03ce13f7SAndroid Build Coastguard Worker 			   VK_API_VERSION_MINOR(appApiVersion) > VK_API_VERSION_MINOR(vk::API_VERSION))
585*03ce13f7SAndroid Build Coastguard Worker 			{
586*03ce13f7SAndroid Build Coastguard Worker 				return VK_ERROR_INCOMPATIBLE_DRIVER;
587*03ce13f7SAndroid Build Coastguard Worker 			}
588*03ce13f7SAndroid Build Coastguard Worker 		}
589*03ce13f7SAndroid Build Coastguard Worker 	}
590*03ce13f7SAndroid Build Coastguard Worker 
591*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
592*03ce13f7SAndroid Build Coastguard Worker 	{
593*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.3: "flags is reserved for future use." "flags must be 0"
594*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
595*03ce13f7SAndroid Build Coastguard Worker 	}
596*03ce13f7SAndroid Build Coastguard Worker 
597*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->enabledLayerCount != 0)
598*03ce13f7SAndroid Build Coastguard Worker 	{
599*03ce13f7SAndroid Build Coastguard Worker 		// Creating instances with unsupported layers should fail and SwiftShader doesn't support any layer
600*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_LAYER_NOT_PRESENT;
601*03ce13f7SAndroid Build Coastguard Worker 	}
602*03ce13f7SAndroid Build Coastguard Worker 
603*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; ++i)
604*03ce13f7SAndroid Build Coastguard Worker 	{
605*03ce13f7SAndroid Build Coastguard Worker 		if(!hasInstanceExtension(pCreateInfo->ppEnabledExtensionNames[i]))
606*03ce13f7SAndroid Build Coastguard Worker 		{
607*03ce13f7SAndroid Build Coastguard Worker 			return VK_ERROR_EXTENSION_NOT_PRESENT;
608*03ce13f7SAndroid Build Coastguard Worker 		}
609*03ce13f7SAndroid Build Coastguard Worker 	}
610*03ce13f7SAndroid Build Coastguard Worker 
611*03ce13f7SAndroid Build Coastguard Worker 	VkDebugUtilsMessengerEXT messenger = { VK_NULL_HANDLE };
612*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->pNext)
613*03ce13f7SAndroid Build Coastguard Worker 	{
614*03ce13f7SAndroid Build Coastguard Worker 		const VkBaseInStructure *createInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
615*03ce13f7SAndroid Build Coastguard Worker 		switch(createInfo->sType)
616*03ce13f7SAndroid Build Coastguard Worker 		{
617*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
618*03ce13f7SAndroid Build Coastguard Worker 			{
619*03ce13f7SAndroid Build Coastguard Worker 				const VkDebugUtilsMessengerCreateInfoEXT *debugUtilsMessengerCreateInfoEXT = reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT *>(createInfo);
620*03ce13f7SAndroid Build Coastguard Worker 				VkResult result = vk::DebugUtilsMessenger::Create(pAllocator, debugUtilsMessengerCreateInfoEXT, &messenger);
621*03ce13f7SAndroid Build Coastguard Worker 				if(result != VK_SUCCESS)
622*03ce13f7SAndroid Build Coastguard Worker 				{
623*03ce13f7SAndroid Build Coastguard Worker 					return result;
624*03ce13f7SAndroid Build Coastguard Worker 				}
625*03ce13f7SAndroid Build Coastguard Worker 			}
626*03ce13f7SAndroid Build Coastguard Worker 			break;
627*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO:
628*03ce13f7SAndroid Build Coastguard Worker 			// According to the Vulkan spec, section 2.7.2. Implicit Valid Usage:
629*03ce13f7SAndroid Build Coastguard Worker 			// "The values VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO and
630*03ce13f7SAndroid Build Coastguard Worker 			//  VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO are reserved for
631*03ce13f7SAndroid Build Coastguard Worker 			//  internal use by the loader, and do not have corresponding
632*03ce13f7SAndroid Build Coastguard Worker 			//  Vulkan structures in this Specification."
633*03ce13f7SAndroid Build Coastguard Worker 			break;
634*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG:
635*03ce13f7SAndroid Build Coastguard Worker 			// TODO(b/229112690): This structure is only meant to be used by the Vulkan Loader
636*03ce13f7SAndroid Build Coastguard Worker 			// and should not be forwarded to the driver.
637*03ce13f7SAndroid Build Coastguard Worker 			break;
638*03ce13f7SAndroid Build Coastguard Worker 		default:
639*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(createInfo->sType).c_str());
640*03ce13f7SAndroid Build Coastguard Worker 			break;
641*03ce13f7SAndroid Build Coastguard Worker 		}
642*03ce13f7SAndroid Build Coastguard Worker 	}
643*03ce13f7SAndroid Build Coastguard Worker 
644*03ce13f7SAndroid Build Coastguard Worker 	*pInstance = VK_NULL_HANDLE;
645*03ce13f7SAndroid Build Coastguard Worker 	VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
646*03ce13f7SAndroid Build Coastguard Worker 
647*03ce13f7SAndroid Build Coastguard Worker 	VkResult result = vk::DispatchablePhysicalDevice::Create(pAllocator, pCreateInfo, &physicalDevice);
648*03ce13f7SAndroid Build Coastguard Worker 	if(result != VK_SUCCESS)
649*03ce13f7SAndroid Build Coastguard Worker 	{
650*03ce13f7SAndroid Build Coastguard Worker 		vk::destroy(messenger, pAllocator);
651*03ce13f7SAndroid Build Coastguard Worker 		return result;
652*03ce13f7SAndroid Build Coastguard Worker 	}
653*03ce13f7SAndroid Build Coastguard Worker 
654*03ce13f7SAndroid Build Coastguard Worker 	result = vk::DispatchableInstance::Create(pAllocator, pCreateInfo, pInstance, physicalDevice, vk::Cast(messenger));
655*03ce13f7SAndroid Build Coastguard Worker 	if(result != VK_SUCCESS)
656*03ce13f7SAndroid Build Coastguard Worker 	{
657*03ce13f7SAndroid Build Coastguard Worker 		vk::destroy(messenger, pAllocator);
658*03ce13f7SAndroid Build Coastguard Worker 		vk::destroy(physicalDevice, pAllocator);
659*03ce13f7SAndroid Build Coastguard Worker 		return result;
660*03ce13f7SAndroid Build Coastguard Worker 	}
661*03ce13f7SAndroid Build Coastguard Worker 
662*03ce13f7SAndroid Build Coastguard Worker 	return result;
663*03ce13f7SAndroid Build Coastguard Worker }
664*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyInstance(VkInstance instance,const VkAllocationCallbacks * pAllocator)665*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator)
666*03ce13f7SAndroid Build Coastguard Worker {
667*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, const VkAllocationCallbacks* pAllocator = %p)", instance, pAllocator);
668*03ce13f7SAndroid Build Coastguard Worker 
669*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(instance, pAllocator);
670*03ce13f7SAndroid Build Coastguard Worker }
671*03ce13f7SAndroid Build Coastguard Worker 
vkEnumeratePhysicalDevices(VkInstance instance,uint32_t * pPhysicalDeviceCount,VkPhysicalDevice * pPhysicalDevices)672*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, VkPhysicalDevice *pPhysicalDevices)
673*03ce13f7SAndroid Build Coastguard Worker {
674*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, uint32_t* pPhysicalDeviceCount = %p, VkPhysicalDevice* pPhysicalDevices = %p)",
675*03ce13f7SAndroid Build Coastguard Worker 	      instance, pPhysicalDeviceCount, pPhysicalDevices);
676*03ce13f7SAndroid Build Coastguard Worker 
677*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(instance)->getPhysicalDevices(pPhysicalDeviceCount, pPhysicalDevices);
678*03ce13f7SAndroid Build Coastguard Worker }
679*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures * pFeatures)680*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures *pFeatures)
681*03ce13f7SAndroid Build Coastguard Worker {
682*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkPhysicalDeviceFeatures* pFeatures = %p)",
683*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pFeatures);
684*03ce13f7SAndroid Build Coastguard Worker 
685*03ce13f7SAndroid Build Coastguard Worker 	*pFeatures = vk::Cast(physicalDevice)->getFeatures();
686*03ce13f7SAndroid Build Coastguard Worker }
687*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties * pFormatProperties)688*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties *pFormatProperties)
689*03ce13f7SAndroid Build Coastguard Worker {
690*03ce13f7SAndroid Build Coastguard Worker 	TRACE("GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice = %p, VkFormat format = %d, VkFormatProperties* pFormatProperties = %p)",
691*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, (int)format, pFormatProperties);
692*03ce13f7SAndroid Build Coastguard Worker 
693*03ce13f7SAndroid Build Coastguard Worker 	vk::PhysicalDevice::GetFormatProperties(format, pFormatProperties);
694*03ce13f7SAndroid Build Coastguard Worker }
695*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkImageTiling tiling,VkImageUsageFlags usage,VkImageCreateFlags flags,VkImageFormatProperties * pImageFormatProperties)696*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties *pImageFormatProperties)
697*03ce13f7SAndroid Build Coastguard Worker {
698*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkFormat format = %d, VkImageType type = %d, VkImageTiling tiling = %d, VkImageUsageFlags usage = %d, VkImageCreateFlags flags = %d, VkImageFormatProperties* pImageFormatProperties = %p)",
699*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, (int)format, (int)type, (int)tiling, usage, flags, pImageFormatProperties);
700*03ce13f7SAndroid Build Coastguard Worker 
701*03ce13f7SAndroid Build Coastguard Worker 	VkPhysicalDeviceImageFormatInfo2 info2 = {};
702*03ce13f7SAndroid Build Coastguard Worker 	info2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2;
703*03ce13f7SAndroid Build Coastguard Worker 	info2.pNext = nullptr;
704*03ce13f7SAndroid Build Coastguard Worker 	info2.format = format;
705*03ce13f7SAndroid Build Coastguard Worker 	info2.type = type;
706*03ce13f7SAndroid Build Coastguard Worker 	info2.tiling = tiling;
707*03ce13f7SAndroid Build Coastguard Worker 	info2.usage = usage;
708*03ce13f7SAndroid Build Coastguard Worker 	info2.flags = flags;
709*03ce13f7SAndroid Build Coastguard Worker 
710*03ce13f7SAndroid Build Coastguard Worker 	VkImageFormatProperties2 properties2 = {};
711*03ce13f7SAndroid Build Coastguard Worker 	properties2.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2;
712*03ce13f7SAndroid Build Coastguard Worker 	properties2.pNext = nullptr;
713*03ce13f7SAndroid Build Coastguard Worker 
714*03ce13f7SAndroid Build Coastguard Worker 	VkResult result = vkGetPhysicalDeviceImageFormatProperties2(physicalDevice, &info2, &properties2);
715*03ce13f7SAndroid Build Coastguard Worker 
716*03ce13f7SAndroid Build Coastguard Worker 	*pImageFormatProperties = properties2.imageFormatProperties;
717*03ce13f7SAndroid Build Coastguard Worker 
718*03ce13f7SAndroid Build Coastguard Worker 	return result;
719*03ce13f7SAndroid Build Coastguard Worker }
720*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties * pProperties)721*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties *pProperties)
722*03ce13f7SAndroid Build Coastguard Worker {
723*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkPhysicalDeviceProperties* pProperties = %p)",
724*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pProperties);
725*03ce13f7SAndroid Build Coastguard Worker 
726*03ce13f7SAndroid Build Coastguard Worker 	*pProperties = vk::Cast(physicalDevice)->getProperties();
727*03ce13f7SAndroid Build Coastguard Worker }
728*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties * pQueueFamilyProperties)729*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, uint32_t *pQueueFamilyPropertyCount, VkQueueFamilyProperties *pQueueFamilyProperties)
730*03ce13f7SAndroid Build Coastguard Worker {
731*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t* pQueueFamilyPropertyCount = %p, VkQueueFamilyProperties* pQueueFamilyProperties = %p))", physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
732*03ce13f7SAndroid Build Coastguard Worker 
733*03ce13f7SAndroid Build Coastguard Worker 	if(!pQueueFamilyProperties)
734*03ce13f7SAndroid Build Coastguard Worker 	{
735*03ce13f7SAndroid Build Coastguard Worker 		*pQueueFamilyPropertyCount = vk::Cast(physicalDevice)->getQueueFamilyPropertyCount();
736*03ce13f7SAndroid Build Coastguard Worker 	}
737*03ce13f7SAndroid Build Coastguard Worker 	else
738*03ce13f7SAndroid Build Coastguard Worker 	{
739*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(physicalDevice)->getQueueFamilyProperties(*pQueueFamilyPropertyCount, pQueueFamilyProperties);
740*03ce13f7SAndroid Build Coastguard Worker 	}
741*03ce13f7SAndroid Build Coastguard Worker }
742*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties * pMemoryProperties)743*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties *pMemoryProperties)
744*03ce13f7SAndroid Build Coastguard Worker {
745*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkPhysicalDeviceMemoryProperties* pMemoryProperties = %p)", physicalDevice, pMemoryProperties);
746*03ce13f7SAndroid Build Coastguard Worker 
747*03ce13f7SAndroid Build Coastguard Worker 	*pMemoryProperties = vk::PhysicalDevice::GetMemoryProperties();
748*03ce13f7SAndroid Build Coastguard Worker }
749*03ce13f7SAndroid Build Coastguard Worker 
vkGetInstanceProcAddr(VkInstance instance,const char * pName)750*03ce13f7SAndroid Build Coastguard Worker VK_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *pName)
751*03ce13f7SAndroid Build Coastguard Worker {
752*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, const char* pName = %p)", instance, pName);
753*03ce13f7SAndroid Build Coastguard Worker 
754*03ce13f7SAndroid Build Coastguard Worker 	return vk::GetInstanceProcAddr(vk::Cast(instance), pName);
755*03ce13f7SAndroid Build Coastguard Worker }
756*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceProcAddr(VkDevice device,const char * pName)757*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char *pName)
758*03ce13f7SAndroid Build Coastguard Worker {
759*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const char* pName = %p)", device, pName);
760*03ce13f7SAndroid Build Coastguard Worker 
761*03ce13f7SAndroid Build Coastguard Worker 	return vk::GetDeviceProcAddr(vk::Cast(device), pName);
762*03ce13f7SAndroid Build Coastguard Worker }
763*03ce13f7SAndroid Build Coastguard Worker 
vkCreateDevice(VkPhysicalDevice physicalDevice,const VkDeviceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDevice * pDevice)764*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDevice *pDevice)
765*03ce13f7SAndroid Build Coastguard Worker {
766*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, const VkDeviceCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkDevice* pDevice = %p)",
767*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pCreateInfo, pAllocator, pDevice);
768*03ce13f7SAndroid Build Coastguard Worker 
769*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
770*03ce13f7SAndroid Build Coastguard Worker 	{
771*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
772*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
773*03ce13f7SAndroid Build Coastguard Worker 	}
774*03ce13f7SAndroid Build Coastguard Worker 
775*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->enabledLayerCount != 0)
776*03ce13f7SAndroid Build Coastguard Worker 	{
777*03ce13f7SAndroid Build Coastguard Worker 		// "The ppEnabledLayerNames and enabledLayerCount members of VkDeviceCreateInfo are deprecated and their values must be ignored by implementations."
778*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->enabledLayerCount != 0");
779*03ce13f7SAndroid Build Coastguard Worker 	}
780*03ce13f7SAndroid Build Coastguard Worker 
781*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; ++i)
782*03ce13f7SAndroid Build Coastguard Worker 	{
783*03ce13f7SAndroid Build Coastguard Worker 		if(!hasDeviceExtension(pCreateInfo->ppEnabledExtensionNames[i]))
784*03ce13f7SAndroid Build Coastguard Worker 		{
785*03ce13f7SAndroid Build Coastguard Worker 			return VK_ERROR_EXTENSION_NOT_PRESENT;
786*03ce13f7SAndroid Build Coastguard Worker 		}
787*03ce13f7SAndroid Build Coastguard Worker 	}
788*03ce13f7SAndroid Build Coastguard Worker 
789*03ce13f7SAndroid Build Coastguard Worker 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
790*03ce13f7SAndroid Build Coastguard Worker 
791*03ce13f7SAndroid Build Coastguard Worker 	const VkPhysicalDeviceFeatures *enabledFeatures = pCreateInfo->pEnabledFeatures;
792*03ce13f7SAndroid Build Coastguard Worker 
793*03ce13f7SAndroid Build Coastguard Worker 	while(extensionCreateInfo)
794*03ce13f7SAndroid Build Coastguard Worker 	{
795*03ce13f7SAndroid Build Coastguard Worker 		switch(extensionCreateInfo->sType)
796*03ce13f7SAndroid Build Coastguard Worker 		{
797*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO:
798*03ce13f7SAndroid Build Coastguard Worker 			// According to the Vulkan spec, section 2.7.2. Implicit Valid Usage:
799*03ce13f7SAndroid Build Coastguard Worker 			// "The values VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO and
800*03ce13f7SAndroid Build Coastguard Worker 			//  VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO are reserved for
801*03ce13f7SAndroid Build Coastguard Worker 			//  internal use by the loader, and do not have corresponding
802*03ce13f7SAndroid Build Coastguard Worker 			//  Vulkan structures in this Specification."
803*03ce13f7SAndroid Build Coastguard Worker 			break;
804*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
805*03ce13f7SAndroid Build Coastguard Worker 			{
806*03ce13f7SAndroid Build Coastguard Worker 				ASSERT(!pCreateInfo->pEnabledFeatures);  // "If the pNext chain includes a VkPhysicalDeviceFeatures2 structure, then pEnabledFeatures must be NULL"
807*03ce13f7SAndroid Build Coastguard Worker 
808*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceFeatures2 *physicalDeviceFeatures2 = reinterpret_cast<const VkPhysicalDeviceFeatures2 *>(extensionCreateInfo);
809*03ce13f7SAndroid Build Coastguard Worker 
810*03ce13f7SAndroid Build Coastguard Worker 				enabledFeatures = &physicalDeviceFeatures2->features;
811*03ce13f7SAndroid Build Coastguard Worker 			}
812*03ce13f7SAndroid Build Coastguard Worker 			break;
813*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
814*03ce13f7SAndroid Build Coastguard Worker 			{
815*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceSamplerYcbcrConversionFeatures *samplerYcbcrConversionFeatures = reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures *>(extensionCreateInfo);
816*03ce13f7SAndroid Build Coastguard Worker 
817*03ce13f7SAndroid Build Coastguard Worker 				// YCbCr conversion is supported.
818*03ce13f7SAndroid Build Coastguard Worker 				// samplerYcbcrConversionFeatures->samplerYcbcrConversion can be VK_TRUE or VK_FALSE.
819*03ce13f7SAndroid Build Coastguard Worker 				// No action needs to be taken on our end in either case; it's the apps responsibility that
820*03ce13f7SAndroid Build Coastguard Worker 				// "To create a sampler Y'CbCr conversion, the samplerYcbcrConversion feature must be enabled."
821*03ce13f7SAndroid Build Coastguard Worker 				(void)samplerYcbcrConversionFeatures->samplerYcbcrConversion;
822*03ce13f7SAndroid Build Coastguard Worker 			}
823*03ce13f7SAndroid Build Coastguard Worker 			break;
824*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
825*03ce13f7SAndroid Build Coastguard Worker 			{
826*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDevice16BitStorageFeatures *storage16BitFeatures = reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures *>(extensionCreateInfo);
827*03ce13f7SAndroid Build Coastguard Worker 
828*03ce13f7SAndroid Build Coastguard Worker 				if(storage16BitFeatures->storageBuffer16BitAccess != VK_FALSE ||
829*03ce13f7SAndroid Build Coastguard Worker 				   storage16BitFeatures->uniformAndStorageBuffer16BitAccess != VK_FALSE ||
830*03ce13f7SAndroid Build Coastguard Worker 				   storage16BitFeatures->storagePushConstant16 != VK_FALSE ||
831*03ce13f7SAndroid Build Coastguard Worker 				   storage16BitFeatures->storageInputOutput16 != VK_FALSE)
832*03ce13f7SAndroid Build Coastguard Worker 				{
833*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
834*03ce13f7SAndroid Build Coastguard Worker 				}
835*03ce13f7SAndroid Build Coastguard Worker 			}
836*03ce13f7SAndroid Build Coastguard Worker 			break;
837*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES:
838*03ce13f7SAndroid Build Coastguard Worker 			{
839*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceVariablePointerFeatures *variablePointerFeatures = reinterpret_cast<const VkPhysicalDeviceVariablePointerFeatures *>(extensionCreateInfo);
840*03ce13f7SAndroid Build Coastguard Worker 
841*03ce13f7SAndroid Build Coastguard Worker 				if(variablePointerFeatures->variablePointersStorageBuffer != VK_FALSE ||
842*03ce13f7SAndroid Build Coastguard Worker 				   variablePointerFeatures->variablePointers != VK_FALSE)
843*03ce13f7SAndroid Build Coastguard Worker 				{
844*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
845*03ce13f7SAndroid Build Coastguard Worker 				}
846*03ce13f7SAndroid Build Coastguard Worker 			}
847*03ce13f7SAndroid Build Coastguard Worker 			break;
848*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
849*03ce13f7SAndroid Build Coastguard Worker 			{
850*03ce13f7SAndroid Build Coastguard Worker 				const VkDeviceGroupDeviceCreateInfo *groupDeviceCreateInfo = reinterpret_cast<const VkDeviceGroupDeviceCreateInfo *>(extensionCreateInfo);
851*03ce13f7SAndroid Build Coastguard Worker 
852*03ce13f7SAndroid Build Coastguard Worker 				if((groupDeviceCreateInfo->physicalDeviceCount != 1) ||
853*03ce13f7SAndroid Build Coastguard Worker 				   (groupDeviceCreateInfo->pPhysicalDevices[0] != physicalDevice))
854*03ce13f7SAndroid Build Coastguard Worker 				{
855*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
856*03ce13f7SAndroid Build Coastguard Worker 				}
857*03ce13f7SAndroid Build Coastguard Worker 			}
858*03ce13f7SAndroid Build Coastguard Worker 			break;
859*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
860*03ce13f7SAndroid Build Coastguard Worker 			{
861*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceMultiviewFeatures *multiviewFeatures = reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures *>(extensionCreateInfo);
862*03ce13f7SAndroid Build Coastguard Worker 
863*03ce13f7SAndroid Build Coastguard Worker 				if(multiviewFeatures->multiviewGeometryShader ||
864*03ce13f7SAndroid Build Coastguard Worker 				   multiviewFeatures->multiviewTessellationShader)
865*03ce13f7SAndroid Build Coastguard Worker 				{
866*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
867*03ce13f7SAndroid Build Coastguard Worker 				}
868*03ce13f7SAndroid Build Coastguard Worker 			}
869*03ce13f7SAndroid Build Coastguard Worker 			break;
870*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:
871*03ce13f7SAndroid Build Coastguard Worker 			{
872*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceShaderDrawParametersFeatures *shaderDrawParametersFeatures = reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures *>(extensionCreateInfo);
873*03ce13f7SAndroid Build Coastguard Worker 
874*03ce13f7SAndroid Build Coastguard Worker 				if(shaderDrawParametersFeatures->shaderDrawParameters)
875*03ce13f7SAndroid Build Coastguard Worker 				{
876*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
877*03ce13f7SAndroid Build Coastguard Worker 				}
878*03ce13f7SAndroid Build Coastguard Worker 			}
879*03ce13f7SAndroid Build Coastguard Worker 			break;
880*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES:
881*03ce13f7SAndroid Build Coastguard Worker 			{
882*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceDynamicRenderingFeatures *dynamicRenderingFeatures = reinterpret_cast<const VkPhysicalDeviceDynamicRenderingFeatures *>(extensionCreateInfo);
883*03ce13f7SAndroid Build Coastguard Worker 
884*03ce13f7SAndroid Build Coastguard Worker 				// Dynamic rendering is supported
885*03ce13f7SAndroid Build Coastguard Worker 				(void)(dynamicRenderingFeatures->dynamicRendering);
886*03ce13f7SAndroid Build Coastguard Worker 			}
887*03ce13f7SAndroid Build Coastguard Worker 			break;
888*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR:
889*03ce13f7SAndroid Build Coastguard Worker 			{
890*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR *dynamicRenderingLocalReadFeatures = reinterpret_cast<const VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR *>(extensionCreateInfo);
891*03ce13f7SAndroid Build Coastguard Worker 
892*03ce13f7SAndroid Build Coastguard Worker 				// Dynamic rendering local read is supported
893*03ce13f7SAndroid Build Coastguard Worker 				(void)(dynamicRenderingLocalReadFeatures->dynamicRenderingLocalRead);
894*03ce13f7SAndroid Build Coastguard Worker 			}
895*03ce13f7SAndroid Build Coastguard Worker 			break;
896*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES:
897*03ce13f7SAndroid Build Coastguard Worker 			{
898*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR *shaderDrawParametersFeatures = reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR *>(extensionCreateInfo);
899*03ce13f7SAndroid Build Coastguard Worker 
900*03ce13f7SAndroid Build Coastguard Worker 				// Separate depth and stencil layouts is already supported
901*03ce13f7SAndroid Build Coastguard Worker 				(void)(shaderDrawParametersFeatures->separateDepthStencilLayouts);
902*03ce13f7SAndroid Build Coastguard Worker 			}
903*03ce13f7SAndroid Build Coastguard Worker 			break;
904*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:
905*03ce13f7SAndroid Build Coastguard Worker 			{
906*03ce13f7SAndroid Build Coastguard Worker 				const auto *lineRasterizationFeatures = reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT *>(extensionCreateInfo);
907*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(lineRasterizationFeatures);
908*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
909*03ce13f7SAndroid Build Coastguard Worker 				{
910*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
911*03ce13f7SAndroid Build Coastguard Worker 				}
912*03ce13f7SAndroid Build Coastguard Worker 			}
913*03ce13f7SAndroid Build Coastguard Worker 			break;
914*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT:
915*03ce13f7SAndroid Build Coastguard Worker 			{
916*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceProvokingVertexFeaturesEXT *provokingVertexFeatures = reinterpret_cast<const VkPhysicalDeviceProvokingVertexFeaturesEXT *>(extensionCreateInfo);
917*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(provokingVertexFeatures);
918*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
919*03ce13f7SAndroid Build Coastguard Worker 				{
920*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
921*03ce13f7SAndroid Build Coastguard Worker 				}
922*03ce13f7SAndroid Build Coastguard Worker 			}
923*03ce13f7SAndroid Build Coastguard Worker 			break;
924*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES:
925*03ce13f7SAndroid Build Coastguard Worker 			{
926*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceImageRobustnessFeatures *imageRobustnessFeatures = reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeatures *>(extensionCreateInfo);
927*03ce13f7SAndroid Build Coastguard Worker 
928*03ce13f7SAndroid Build Coastguard Worker 				// We currently always provide robust image accesses. When the feature is disabled, results are
929*03ce13f7SAndroid Build Coastguard Worker 				// undefined (for images with Dim != Buffer), so providing robustness is also acceptable.
930*03ce13f7SAndroid Build Coastguard Worker 				// TODO(b/159329067): Only provide robustness when requested.
931*03ce13f7SAndroid Build Coastguard Worker 				(void)imageRobustnessFeatures->robustImageAccess;
932*03ce13f7SAndroid Build Coastguard Worker 			}
933*03ce13f7SAndroid Build Coastguard Worker 			break;
934*03ce13f7SAndroid Build Coastguard Worker 		// For unsupported structures, check that we don't expose the corresponding extension string:
935*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT:
936*03ce13f7SAndroid Build Coastguard Worker 			ASSERT(!hasDeviceExtension(VK_EXT_ROBUSTNESS_2_EXTENSION_NAME));
937*03ce13f7SAndroid Build Coastguard Worker 			break;
938*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES:
939*03ce13f7SAndroid Build Coastguard Worker 			{
940*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceImagelessFramebufferFeaturesKHR *imagelessFramebufferFeatures = reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeaturesKHR *>(extensionCreateInfo);
941*03ce13f7SAndroid Build Coastguard Worker 				// Always provide Imageless Framebuffers
942*03ce13f7SAndroid Build Coastguard Worker 				(void)imagelessFramebufferFeatures->imagelessFramebuffer;
943*03ce13f7SAndroid Build Coastguard Worker 			}
944*03ce13f7SAndroid Build Coastguard Worker 			break;
945*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES:
946*03ce13f7SAndroid Build Coastguard Worker 			{
947*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceScalarBlockLayoutFeatures *scalarBlockLayoutFeatures = reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures *>(extensionCreateInfo);
948*03ce13f7SAndroid Build Coastguard Worker 
949*03ce13f7SAndroid Build Coastguard Worker 				// VK_EXT_scalar_block_layout is supported, allowing C-like structure layout for SPIR-V blocks.
950*03ce13f7SAndroid Build Coastguard Worker 				(void)scalarBlockLayoutFeatures->scalarBlockLayout;
951*03ce13f7SAndroid Build Coastguard Worker 			}
952*03ce13f7SAndroid Build Coastguard Worker 			break;
953*03ce13f7SAndroid Build Coastguard Worker #ifdef SWIFTSHADER_DEVICE_MEMORY_REPORT
954*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT:
955*03ce13f7SAndroid Build Coastguard Worker 			{
956*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT *deviceMemoryReportFeatures = reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT *>(extensionCreateInfo);
957*03ce13f7SAndroid Build Coastguard Worker 				(void)deviceMemoryReportFeatures->deviceMemoryReport;
958*03ce13f7SAndroid Build Coastguard Worker 			}
959*03ce13f7SAndroid Build Coastguard Worker 			break;
960*03ce13f7SAndroid Build Coastguard Worker #endif  // SWIFTSHADER_DEVICE_MEMORY_REPORT
961*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
962*03ce13f7SAndroid Build Coastguard Worker 			{
963*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceHostQueryResetFeatures *hostQueryResetFeatures = reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures *>(extensionCreateInfo);
964*03ce13f7SAndroid Build Coastguard Worker 
965*03ce13f7SAndroid Build Coastguard Worker 				// VK_EXT_host_query_reset is always enabled.
966*03ce13f7SAndroid Build Coastguard Worker 				(void)hostQueryResetFeatures->hostQueryReset;
967*03ce13f7SAndroid Build Coastguard Worker 			}
968*03ce13f7SAndroid Build Coastguard Worker 			break;
969*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES:
970*03ce13f7SAndroid Build Coastguard Worker 			{
971*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDevicePipelineCreationCacheControlFeatures *pipelineCreationCacheControlFeatures = reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeatures *>(extensionCreateInfo);
972*03ce13f7SAndroid Build Coastguard Worker 
973*03ce13f7SAndroid Build Coastguard Worker 				// VK_EXT_pipeline_creation_cache_control is always enabled.
974*03ce13f7SAndroid Build Coastguard Worker 				(void)pipelineCreationCacheControlFeatures->pipelineCreationCacheControl;
975*03ce13f7SAndroid Build Coastguard Worker 			}
976*03ce13f7SAndroid Build Coastguard Worker 			break;
977*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:
978*03ce13f7SAndroid Build Coastguard Worker 			{
979*03ce13f7SAndroid Build Coastguard Worker 				const auto *tsFeatures = reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures *>(extensionCreateInfo);
980*03ce13f7SAndroid Build Coastguard Worker 
981*03ce13f7SAndroid Build Coastguard Worker 				// VK_KHR_timeline_semaphores is always enabled
982*03ce13f7SAndroid Build Coastguard Worker 				(void)tsFeatures->timelineSemaphore;
983*03ce13f7SAndroid Build Coastguard Worker 			}
984*03ce13f7SAndroid Build Coastguard Worker 			break;
985*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT:
986*03ce13f7SAndroid Build Coastguard Worker 			{
987*03ce13f7SAndroid Build Coastguard Worker 				const auto *customBorderColorFeatures = reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT *>(extensionCreateInfo);
988*03ce13f7SAndroid Build Coastguard Worker 
989*03ce13f7SAndroid Build Coastguard Worker 				// VK_EXT_custom_border_color is always enabled
990*03ce13f7SAndroid Build Coastguard Worker 				(void)customBorderColorFeatures->customBorderColors;
991*03ce13f7SAndroid Build Coastguard Worker 				(void)customBorderColorFeatures->customBorderColorWithoutFormat;
992*03ce13f7SAndroid Build Coastguard Worker 			}
993*03ce13f7SAndroid Build Coastguard Worker 			break;
994*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES:
995*03ce13f7SAndroid Build Coastguard Worker 			{
996*03ce13f7SAndroid Build Coastguard Worker 				const auto *vk11Features = reinterpret_cast<const VkPhysicalDeviceVulkan11Features *>(extensionCreateInfo);
997*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(vk11Features);
998*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
999*03ce13f7SAndroid Build Coastguard Worker 				{
1000*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1001*03ce13f7SAndroid Build Coastguard Worker 				}
1002*03ce13f7SAndroid Build Coastguard Worker 			}
1003*03ce13f7SAndroid Build Coastguard Worker 			break;
1004*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES:
1005*03ce13f7SAndroid Build Coastguard Worker 			{
1006*03ce13f7SAndroid Build Coastguard Worker 				const auto *vk12Features = reinterpret_cast<const VkPhysicalDeviceVulkan12Features *>(extensionCreateInfo);
1007*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(vk12Features);
1008*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1009*03ce13f7SAndroid Build Coastguard Worker 				{
1010*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1011*03ce13f7SAndroid Build Coastguard Worker 				}
1012*03ce13f7SAndroid Build Coastguard Worker 			}
1013*03ce13f7SAndroid Build Coastguard Worker 			break;
1014*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES:
1015*03ce13f7SAndroid Build Coastguard Worker 			{
1016*03ce13f7SAndroid Build Coastguard Worker 				const auto *vk13Features = reinterpret_cast<const VkPhysicalDeviceVulkan13Features *>(extensionCreateInfo);
1017*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(vk13Features);
1018*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1019*03ce13f7SAndroid Build Coastguard Worker 				{
1020*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1021*03ce13f7SAndroid Build Coastguard Worker 				}
1022*03ce13f7SAndroid Build Coastguard Worker 			}
1023*03ce13f7SAndroid Build Coastguard Worker 			break;
1024*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:
1025*03ce13f7SAndroid Build Coastguard Worker 			{
1026*03ce13f7SAndroid Build Coastguard Worker 				const auto *depthClipFeatures = reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT *>(extensionCreateInfo);
1027*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(depthClipFeatures);
1028*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1029*03ce13f7SAndroid Build Coastguard Worker 				{
1030*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1031*03ce13f7SAndroid Build Coastguard Worker 				}
1032*03ce13f7SAndroid Build Coastguard Worker 			}
1033*03ce13f7SAndroid Build Coastguard Worker 			break;
1034*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
1035*03ce13f7SAndroid Build Coastguard Worker 			{
1036*03ce13f7SAndroid Build Coastguard Worker 				const auto *blendOpFeatures = reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *>(extensionCreateInfo);
1037*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(blendOpFeatures);
1038*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1039*03ce13f7SAndroid Build Coastguard Worker 				{
1040*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1041*03ce13f7SAndroid Build Coastguard Worker 				}
1042*03ce13f7SAndroid Build Coastguard Worker 			}
1043*03ce13f7SAndroid Build Coastguard Worker 			break;
1044*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:
1045*03ce13f7SAndroid Build Coastguard Worker 			{
1046*03ce13f7SAndroid Build Coastguard Worker 				const auto *dynamicStateFeatures = reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *>(extensionCreateInfo);
1047*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(dynamicStateFeatures);
1048*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1049*03ce13f7SAndroid Build Coastguard Worker 				{
1050*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1051*03ce13f7SAndroid Build Coastguard Worker 				}
1052*03ce13f7SAndroid Build Coastguard Worker 			}
1053*03ce13f7SAndroid Build Coastguard Worker 			break;
1054*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT:
1055*03ce13f7SAndroid Build Coastguard Worker 			{
1056*03ce13f7SAndroid Build Coastguard Worker 				const auto *dynamicStateFeatures = reinterpret_cast<const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *>(extensionCreateInfo);
1057*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(dynamicStateFeatures);
1058*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1059*03ce13f7SAndroid Build Coastguard Worker 				{
1060*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1061*03ce13f7SAndroid Build Coastguard Worker 				}
1062*03ce13f7SAndroid Build Coastguard Worker 			}
1063*03ce13f7SAndroid Build Coastguard Worker 			break;
1064*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES:
1065*03ce13f7SAndroid Build Coastguard Worker 			{
1066*03ce13f7SAndroid Build Coastguard Worker 				const auto *privateDataFeatures = reinterpret_cast<const VkPhysicalDevicePrivateDataFeatures *>(extensionCreateInfo);
1067*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(privateDataFeatures);
1068*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1069*03ce13f7SAndroid Build Coastguard Worker 				{
1070*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1071*03ce13f7SAndroid Build Coastguard Worker 				}
1072*03ce13f7SAndroid Build Coastguard Worker 			}
1073*03ce13f7SAndroid Build Coastguard Worker 			break;
1074*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO:
1075*03ce13f7SAndroid Build Coastguard Worker 			{
1076*03ce13f7SAndroid Build Coastguard Worker 				const auto *privateDataCreateInfo = reinterpret_cast<const VkDevicePrivateDataCreateInfo *>(extensionCreateInfo);
1077*03ce13f7SAndroid Build Coastguard Worker 				(void)privateDataCreateInfo->privateDataSlotRequestCount;
1078*03ce13f7SAndroid Build Coastguard Worker 			}
1079*03ce13f7SAndroid Build Coastguard Worker 			break;
1080*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES:
1081*03ce13f7SAndroid Build Coastguard Worker 			{
1082*03ce13f7SAndroid Build Coastguard Worker 				const auto *textureCompressionASTCHDRFeatures = reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *>(extensionCreateInfo);
1083*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(textureCompressionASTCHDRFeatures);
1084*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1085*03ce13f7SAndroid Build Coastguard Worker 				{
1086*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1087*03ce13f7SAndroid Build Coastguard Worker 				}
1088*03ce13f7SAndroid Build Coastguard Worker 			}
1089*03ce13f7SAndroid Build Coastguard Worker 			break;
1090*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES:
1091*03ce13f7SAndroid Build Coastguard Worker 			{
1092*03ce13f7SAndroid Build Coastguard Worker 				const auto *shaderDemoteToHelperInvocationFeatures = reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *>(extensionCreateInfo);
1093*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(shaderDemoteToHelperInvocationFeatures);
1094*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1095*03ce13f7SAndroid Build Coastguard Worker 				{
1096*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1097*03ce13f7SAndroid Build Coastguard Worker 				}
1098*03ce13f7SAndroid Build Coastguard Worker 			}
1099*03ce13f7SAndroid Build Coastguard Worker 			break;
1100*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES:
1101*03ce13f7SAndroid Build Coastguard Worker 			{
1102*03ce13f7SAndroid Build Coastguard Worker 				const auto *shaderTerminateInvocationFeatures = reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeatures *>(extensionCreateInfo);
1103*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(shaderTerminateInvocationFeatures);
1104*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1105*03ce13f7SAndroid Build Coastguard Worker 				{
1106*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1107*03ce13f7SAndroid Build Coastguard Worker 				}
1108*03ce13f7SAndroid Build Coastguard Worker 			}
1109*03ce13f7SAndroid Build Coastguard Worker 			break;
1110*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES:
1111*03ce13f7SAndroid Build Coastguard Worker 			{
1112*03ce13f7SAndroid Build Coastguard Worker 				const auto *subgroupSizeControlFeatures = reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeatures *>(extensionCreateInfo);
1113*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(subgroupSizeControlFeatures);
1114*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1115*03ce13f7SAndroid Build Coastguard Worker 				{
1116*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1117*03ce13f7SAndroid Build Coastguard Worker 				}
1118*03ce13f7SAndroid Build Coastguard Worker 			}
1119*03ce13f7SAndroid Build Coastguard Worker 			break;
1120*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES:
1121*03ce13f7SAndroid Build Coastguard Worker 			{
1122*03ce13f7SAndroid Build Coastguard Worker 				const auto *uniformBlockFeatures = reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeatures *>(extensionCreateInfo);
1123*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(uniformBlockFeatures);
1124*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1125*03ce13f7SAndroid Build Coastguard Worker 				{
1126*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1127*03ce13f7SAndroid Build Coastguard Worker 				}
1128*03ce13f7SAndroid Build Coastguard Worker 			}
1129*03ce13f7SAndroid Build Coastguard Worker 			break;
1130*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES:
1131*03ce13f7SAndroid Build Coastguard Worker 			{
1132*03ce13f7SAndroid Build Coastguard Worker 				const auto *integerDotProductFeatures = reinterpret_cast<const VkPhysicalDeviceShaderIntegerDotProductFeatures *>(extensionCreateInfo);
1133*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(integerDotProductFeatures);
1134*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1135*03ce13f7SAndroid Build Coastguard Worker 				{
1136*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1137*03ce13f7SAndroid Build Coastguard Worker 				}
1138*03ce13f7SAndroid Build Coastguard Worker 			}
1139*03ce13f7SAndroid Build Coastguard Worker 			break;
1140*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES:
1141*03ce13f7SAndroid Build Coastguard Worker 			{
1142*03ce13f7SAndroid Build Coastguard Worker 				const auto *zeroInitializeWorkgroupMemoryFeatures = reinterpret_cast<const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *>(extensionCreateInfo);
1143*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(zeroInitializeWorkgroupMemoryFeatures);
1144*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1145*03ce13f7SAndroid Build Coastguard Worker 				{
1146*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1147*03ce13f7SAndroid Build Coastguard Worker 				}
1148*03ce13f7SAndroid Build Coastguard Worker 			}
1149*03ce13f7SAndroid Build Coastguard Worker 			break;
1150*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT:
1151*03ce13f7SAndroid Build Coastguard Worker 			{
1152*03ce13f7SAndroid Build Coastguard Worker 				const auto *primitiveTopologyListRestartFeatures = reinterpret_cast<const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *>(extensionCreateInfo);
1153*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(primitiveTopologyListRestartFeatures);
1154*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1155*03ce13f7SAndroid Build Coastguard Worker 				{
1156*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1157*03ce13f7SAndroid Build Coastguard Worker 				}
1158*03ce13f7SAndroid Build Coastguard Worker 			}
1159*03ce13f7SAndroid Build Coastguard Worker 			break;
1160*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES:
1161*03ce13f7SAndroid Build Coastguard Worker 			{
1162*03ce13f7SAndroid Build Coastguard Worker 				const auto *descriptorIndexingFeatures = reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures *>(extensionCreateInfo);
1163*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(descriptorIndexingFeatures);
1164*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1165*03ce13f7SAndroid Build Coastguard Worker 				{
1166*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1167*03ce13f7SAndroid Build Coastguard Worker 				}
1168*03ce13f7SAndroid Build Coastguard Worker 			}
1169*03ce13f7SAndroid Build Coastguard Worker 			break;
1170*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR:
1171*03ce13f7SAndroid Build Coastguard Worker 			{
1172*03ce13f7SAndroid Build Coastguard Worker 				const auto *globalPriorityQueryFeatures = reinterpret_cast<const VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR *>(extensionCreateInfo);
1173*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(globalPriorityQueryFeatures);
1174*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1175*03ce13f7SAndroid Build Coastguard Worker 				{
1176*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1177*03ce13f7SAndroid Build Coastguard Worker 				}
1178*03ce13f7SAndroid Build Coastguard Worker 			}
1179*03ce13f7SAndroid Build Coastguard Worker 			break;
1180*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
1181*03ce13f7SAndroid Build Coastguard Worker 			{
1182*03ce13f7SAndroid Build Coastguard Worker 				const auto *protectedMemoryFeatures = reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures *>(extensionCreateInfo);
1183*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(protectedMemoryFeatures);
1184*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1185*03ce13f7SAndroid Build Coastguard Worker 				{
1186*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1187*03ce13f7SAndroid Build Coastguard Worker 				}
1188*03ce13f7SAndroid Build Coastguard Worker 			}
1189*03ce13f7SAndroid Build Coastguard Worker 			break;
1190*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:
1191*03ce13f7SAndroid Build Coastguard Worker 			{
1192*03ce13f7SAndroid Build Coastguard Worker 				const auto *bufferDeviceAddressFeatures = reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures *>(extensionCreateInfo);
1193*03ce13f7SAndroid Build Coastguard Worker 				bool hasFeatures = vk::Cast(physicalDevice)->hasExtendedFeatures(bufferDeviceAddressFeatures);
1194*03ce13f7SAndroid Build Coastguard Worker 				if(!hasFeatures)
1195*03ce13f7SAndroid Build Coastguard Worker 				{
1196*03ce13f7SAndroid Build Coastguard Worker 					return VK_ERROR_FEATURE_NOT_PRESENT;
1197*03ce13f7SAndroid Build Coastguard Worker 				}
1198*03ce13f7SAndroid Build Coastguard Worker 			}
1199*03ce13f7SAndroid Build Coastguard Worker 			break;
1200*03ce13f7SAndroid Build Coastguard Worker 		// These structs are supported, but no behavior changes based on their feature flags
1201*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES:
1202*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:
1203*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES:
1204*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:
1205*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:
1206*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
1207*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES:
1208*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:
1209*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES:
1210*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT:
1211*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT:
1212*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT:
1213*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT:
1214*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT:
1215*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT:
1216*03ce13f7SAndroid Build Coastguard Worker 			break;
1217*03ce13f7SAndroid Build Coastguard Worker 		default:
1218*03ce13f7SAndroid Build Coastguard Worker 			// "the [driver] must skip over, without processing (other than reading the sType and pNext members) any structures in the chain with sType values not defined by [supported extenions]"
1219*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType).c_str());
1220*03ce13f7SAndroid Build Coastguard Worker 			break;
1221*03ce13f7SAndroid Build Coastguard Worker 		}
1222*03ce13f7SAndroid Build Coastguard Worker 
1223*03ce13f7SAndroid Build Coastguard Worker 		extensionCreateInfo = extensionCreateInfo->pNext;
1224*03ce13f7SAndroid Build Coastguard Worker 	}
1225*03ce13f7SAndroid Build Coastguard Worker 
1226*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(pCreateInfo->queueCreateInfoCount > 0);
1227*03ce13f7SAndroid Build Coastguard Worker 
1228*03ce13f7SAndroid Build Coastguard Worker 	if(enabledFeatures)
1229*03ce13f7SAndroid Build Coastguard Worker 	{
1230*03ce13f7SAndroid Build Coastguard Worker 		if(!vk::Cast(physicalDevice)->hasFeatures(*enabledFeatures))
1231*03ce13f7SAndroid Build Coastguard Worker 		{
1232*03ce13f7SAndroid Build Coastguard Worker 			return VK_ERROR_FEATURE_NOT_PRESENT;
1233*03ce13f7SAndroid Build Coastguard Worker 		}
1234*03ce13f7SAndroid Build Coastguard Worker 	}
1235*03ce13f7SAndroid Build Coastguard Worker 
1236*03ce13f7SAndroid Build Coastguard Worker 	uint32_t queueFamilyPropertyCount = vk::Cast(physicalDevice)->getQueueFamilyPropertyCount();
1237*03ce13f7SAndroid Build Coastguard Worker 
1238*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; i++)
1239*03ce13f7SAndroid Build Coastguard Worker 	{
1240*03ce13f7SAndroid Build Coastguard Worker 		const VkDeviceQueueCreateInfo &queueCreateInfo = pCreateInfo->pQueueCreateInfos[i];
1241*03ce13f7SAndroid Build Coastguard Worker 		if(queueCreateInfo.flags != 0)
1242*03ce13f7SAndroid Build Coastguard Worker 		{
1243*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pQueueCreateInfos[%d]->flags 0x%08X", i, queueCreateInfo.flags);
1244*03ce13f7SAndroid Build Coastguard Worker 		}
1245*03ce13f7SAndroid Build Coastguard Worker 
1246*03ce13f7SAndroid Build Coastguard Worker 		const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(queueCreateInfo.pNext);
1247*03ce13f7SAndroid Build Coastguard Worker 		while(extInfo)
1248*03ce13f7SAndroid Build Coastguard Worker 		{
1249*03ce13f7SAndroid Build Coastguard Worker 			switch(extInfo->sType)
1250*03ce13f7SAndroid Build Coastguard Worker 			{
1251*03ce13f7SAndroid Build Coastguard Worker 			case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR:
1252*03ce13f7SAndroid Build Coastguard Worker 				{
1253*03ce13f7SAndroid Build Coastguard Worker 					const auto *globalPriorityCreateInfo = reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoKHR *>(extInfo);
1254*03ce13f7SAndroid Build Coastguard Worker 					if(!(vk::Cast(physicalDevice)->validateQueueGlobalPriority(globalPriorityCreateInfo->globalPriority)))
1255*03ce13f7SAndroid Build Coastguard Worker 					{
1256*03ce13f7SAndroid Build Coastguard Worker 						return VK_ERROR_INITIALIZATION_FAILED;
1257*03ce13f7SAndroid Build Coastguard Worker 					}
1258*03ce13f7SAndroid Build Coastguard Worker 				}
1259*03ce13f7SAndroid Build Coastguard Worker 				break;
1260*03ce13f7SAndroid Build Coastguard Worker 			default:
1261*03ce13f7SAndroid Build Coastguard Worker 				UNSUPPORTED("pCreateInfo->pQueueCreateInfos[%d].pNext sType = %s", i, vk::Stringify(extInfo->sType).c_str());
1262*03ce13f7SAndroid Build Coastguard Worker 				break;
1263*03ce13f7SAndroid Build Coastguard Worker 			}
1264*03ce13f7SAndroid Build Coastguard Worker 
1265*03ce13f7SAndroid Build Coastguard Worker 			extInfo = extInfo->pNext;
1266*03ce13f7SAndroid Build Coastguard Worker 		}
1267*03ce13f7SAndroid Build Coastguard Worker 
1268*03ce13f7SAndroid Build Coastguard Worker 		ASSERT(queueCreateInfo.queueFamilyIndex < queueFamilyPropertyCount);
1269*03ce13f7SAndroid Build Coastguard Worker 		(void)queueFamilyPropertyCount;  // Silence unused variable warning
1270*03ce13f7SAndroid Build Coastguard Worker 	}
1271*03ce13f7SAndroid Build Coastguard Worker 
1272*03ce13f7SAndroid Build Coastguard Worker 	auto scheduler = getOrCreateScheduler();
1273*03ce13f7SAndroid Build Coastguard Worker 	return vk::DispatchableDevice::Create(pAllocator, pCreateInfo, pDevice, vk::Cast(physicalDevice), enabledFeatures, scheduler);
1274*03ce13f7SAndroid Build Coastguard Worker }
1275*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyDevice(VkDevice device,const VkAllocationCallbacks * pAllocator)1276*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator)
1277*03ce13f7SAndroid Build Coastguard Worker {
1278*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkAllocationCallbacks* pAllocator = %p)", device, pAllocator);
1279*03ce13f7SAndroid Build Coastguard Worker 
1280*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(device, pAllocator);
1281*03ce13f7SAndroid Build Coastguard Worker }
1282*03ce13f7SAndroid Build Coastguard Worker 
vkEnumerateInstanceExtensionProperties(const char * pLayerName,uint32_t * pPropertyCount,VkExtensionProperties * pProperties)1283*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties)
1284*03ce13f7SAndroid Build Coastguard Worker {
1285*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(const char* pLayerName = %p, uint32_t* pPropertyCount = %p, VkExtensionProperties* pProperties = %p)",
1286*03ce13f7SAndroid Build Coastguard Worker 	      pLayerName, pPropertyCount, pProperties);
1287*03ce13f7SAndroid Build Coastguard Worker 
1288*03ce13f7SAndroid Build Coastguard Worker 	uint32_t extensionPropertiesCount = numInstanceSupportedExtensions();
1289*03ce13f7SAndroid Build Coastguard Worker 
1290*03ce13f7SAndroid Build Coastguard Worker 	if(!pProperties)
1291*03ce13f7SAndroid Build Coastguard Worker 	{
1292*03ce13f7SAndroid Build Coastguard Worker 		*pPropertyCount = extensionPropertiesCount;
1293*03ce13f7SAndroid Build Coastguard Worker 		return VK_SUCCESS;
1294*03ce13f7SAndroid Build Coastguard Worker 	}
1295*03ce13f7SAndroid Build Coastguard Worker 
1296*03ce13f7SAndroid Build Coastguard Worker 	auto toCopy = std::min(*pPropertyCount, extensionPropertiesCount);
1297*03ce13f7SAndroid Build Coastguard Worker 	copyInstanceExtensions(pProperties, toCopy);
1298*03ce13f7SAndroid Build Coastguard Worker 
1299*03ce13f7SAndroid Build Coastguard Worker 	*pPropertyCount = toCopy;
1300*03ce13f7SAndroid Build Coastguard Worker 	return (toCopy < extensionPropertiesCount) ? VK_INCOMPLETE : VK_SUCCESS;
1301*03ce13f7SAndroid Build Coastguard Worker }
1302*03ce13f7SAndroid Build Coastguard Worker 
vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice,const char * pLayerName,uint32_t * pPropertyCount,VkExtensionProperties * pProperties)1303*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties)
1304*03ce13f7SAndroid Build Coastguard Worker {
1305*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, const char* pLayerName, uint32_t* pPropertyCount = %p, VkExtensionProperties* pProperties = %p)", physicalDevice, pPropertyCount, pProperties);
1306*03ce13f7SAndroid Build Coastguard Worker 
1307*03ce13f7SAndroid Build Coastguard Worker 	uint32_t extensionPropertiesCount = numDeviceSupportedExtensions();
1308*03ce13f7SAndroid Build Coastguard Worker 
1309*03ce13f7SAndroid Build Coastguard Worker 	if(!pProperties)
1310*03ce13f7SAndroid Build Coastguard Worker 	{
1311*03ce13f7SAndroid Build Coastguard Worker 		*pPropertyCount = extensionPropertiesCount;
1312*03ce13f7SAndroid Build Coastguard Worker 		return VK_SUCCESS;
1313*03ce13f7SAndroid Build Coastguard Worker 	}
1314*03ce13f7SAndroid Build Coastguard Worker 
1315*03ce13f7SAndroid Build Coastguard Worker 	auto toCopy = std::min(*pPropertyCount, extensionPropertiesCount);
1316*03ce13f7SAndroid Build Coastguard Worker 	copyDeviceExtensions(pProperties, toCopy);
1317*03ce13f7SAndroid Build Coastguard Worker 
1318*03ce13f7SAndroid Build Coastguard Worker 	*pPropertyCount = toCopy;
1319*03ce13f7SAndroid Build Coastguard Worker 	return (toCopy < extensionPropertiesCount) ? VK_INCOMPLETE : VK_SUCCESS;
1320*03ce13f7SAndroid Build Coastguard Worker }
1321*03ce13f7SAndroid Build Coastguard Worker 
vkEnumerateInstanceLayerProperties(uint32_t * pPropertyCount,VkLayerProperties * pProperties)1322*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *pPropertyCount, VkLayerProperties *pProperties)
1323*03ce13f7SAndroid Build Coastguard Worker {
1324*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(uint32_t* pPropertyCount = %p, VkLayerProperties* pProperties = %p)", pPropertyCount, pProperties);
1325*03ce13f7SAndroid Build Coastguard Worker 
1326*03ce13f7SAndroid Build Coastguard Worker 	if(!pProperties)
1327*03ce13f7SAndroid Build Coastguard Worker 	{
1328*03ce13f7SAndroid Build Coastguard Worker 		*pPropertyCount = 0;
1329*03ce13f7SAndroid Build Coastguard Worker 		return VK_SUCCESS;
1330*03ce13f7SAndroid Build Coastguard Worker 	}
1331*03ce13f7SAndroid Build Coastguard Worker 
1332*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1333*03ce13f7SAndroid Build Coastguard Worker }
1334*03ce13f7SAndroid Build Coastguard Worker 
vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkLayerProperties * pProperties)1335*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, VkLayerProperties *pProperties)
1336*03ce13f7SAndroid Build Coastguard Worker {
1337*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t* pPropertyCount = %p, VkLayerProperties* pProperties = %p)", physicalDevice, pPropertyCount, pProperties);
1338*03ce13f7SAndroid Build Coastguard Worker 
1339*03ce13f7SAndroid Build Coastguard Worker 	if(!pProperties)
1340*03ce13f7SAndroid Build Coastguard Worker 	{
1341*03ce13f7SAndroid Build Coastguard Worker 		*pPropertyCount = 0;
1342*03ce13f7SAndroid Build Coastguard Worker 		return VK_SUCCESS;
1343*03ce13f7SAndroid Build Coastguard Worker 	}
1344*03ce13f7SAndroid Build Coastguard Worker 
1345*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1346*03ce13f7SAndroid Build Coastguard Worker }
1347*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceQueue(VkDevice device,uint32_t queueFamilyIndex,uint32_t queueIndex,VkQueue * pQueue)1348*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue)
1349*03ce13f7SAndroid Build Coastguard Worker {
1350*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, uint32_t queueFamilyIndex = %d, uint32_t queueIndex = %d, VkQueue* pQueue = %p)",
1351*03ce13f7SAndroid Build Coastguard Worker 	      device, queueFamilyIndex, queueIndex, pQueue);
1352*03ce13f7SAndroid Build Coastguard Worker 
1353*03ce13f7SAndroid Build Coastguard Worker 	*pQueue = vk::Cast(device)->getQueue(queueFamilyIndex, queueIndex);
1354*03ce13f7SAndroid Build Coastguard Worker }
1355*03ce13f7SAndroid Build Coastguard Worker 
vkQueueSubmit(VkQueue queue,uint32_t submitCount,const VkSubmitInfo * pSubmits,VkFence fence)1356*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, VkFence fence)
1357*03ce13f7SAndroid Build Coastguard Worker {
1358*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkQueue queue = %p, uint32_t submitCount = %d, const VkSubmitInfo* pSubmits = %p, VkFence fence = %p)",
1359*03ce13f7SAndroid Build Coastguard Worker 	      queue, submitCount, pSubmits, static_cast<void *>(fence));
1360*03ce13f7SAndroid Build Coastguard Worker 
1361*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(queue)->submit(submitCount, vk::SubmitInfo::Allocate(submitCount, pSubmits), vk::Cast(fence));
1362*03ce13f7SAndroid Build Coastguard Worker }
1363*03ce13f7SAndroid Build Coastguard Worker 
vkQueueSubmit2(VkQueue queue,uint32_t submitCount,const VkSubmitInfo2 * pSubmits,VkFence fence)1364*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2 *pSubmits, VkFence fence)
1365*03ce13f7SAndroid Build Coastguard Worker {
1366*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkQueue queue = %p, uint32_t submitCount = %d, const VkSubmitInfo2* pSubmits = %p, VkFence fence = %p)",
1367*03ce13f7SAndroid Build Coastguard Worker 	      queue, submitCount, pSubmits, static_cast<void *>(fence));
1368*03ce13f7SAndroid Build Coastguard Worker 
1369*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(queue)->submit(submitCount, vk::SubmitInfo::Allocate(submitCount, pSubmits), vk::Cast(fence));
1370*03ce13f7SAndroid Build Coastguard Worker }
1371*03ce13f7SAndroid Build Coastguard Worker 
vkQueueWaitIdle(VkQueue queue)1372*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(VkQueue queue)
1373*03ce13f7SAndroid Build Coastguard Worker {
1374*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkQueue queue = %p)", queue);
1375*03ce13f7SAndroid Build Coastguard Worker 
1376*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(queue)->waitIdle();
1377*03ce13f7SAndroid Build Coastguard Worker }
1378*03ce13f7SAndroid Build Coastguard Worker 
vkDeviceWaitIdle(VkDevice device)1379*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(VkDevice device)
1380*03ce13f7SAndroid Build Coastguard Worker {
1381*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p)", device);
1382*03ce13f7SAndroid Build Coastguard Worker 
1383*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(device)->waitIdle();
1384*03ce13f7SAndroid Build Coastguard Worker }
1385*03ce13f7SAndroid Build Coastguard Worker 
vkAllocateMemory(VkDevice device,const VkMemoryAllocateInfo * pAllocateInfo,const VkAllocationCallbacks * pAllocator,VkDeviceMemory * pMemory)1386*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo *pAllocateInfo, const VkAllocationCallbacks *pAllocator, VkDeviceMemory *pMemory)
1387*03ce13f7SAndroid Build Coastguard Worker {
1388*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkMemoryAllocateInfo* pAllocateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkDeviceMemory* pMemory = %p)",
1389*03ce13f7SAndroid Build Coastguard Worker 	      device, pAllocateInfo, pAllocator, pMemory);
1390*03ce13f7SAndroid Build Coastguard Worker 
1391*03ce13f7SAndroid Build Coastguard Worker 	VkResult result = vk::DeviceMemory::Allocate(pAllocator, pAllocateInfo, pMemory, vk::Cast(device));
1392*03ce13f7SAndroid Build Coastguard Worker 
1393*03ce13f7SAndroid Build Coastguard Worker 	if(result != VK_SUCCESS)
1394*03ce13f7SAndroid Build Coastguard Worker 	{
1395*03ce13f7SAndroid Build Coastguard Worker 		vk::destroy(*pMemory, pAllocator);
1396*03ce13f7SAndroid Build Coastguard Worker 		*pMemory = VK_NULL_HANDLE;
1397*03ce13f7SAndroid Build Coastguard Worker 	}
1398*03ce13f7SAndroid Build Coastguard Worker 
1399*03ce13f7SAndroid Build Coastguard Worker 	return result;
1400*03ce13f7SAndroid Build Coastguard Worker }
1401*03ce13f7SAndroid Build Coastguard Worker 
vkFreeMemory(VkDevice device,VkDeviceMemory memory,const VkAllocationCallbacks * pAllocator)1402*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkFreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks *pAllocator)
1403*03ce13f7SAndroid Build Coastguard Worker {
1404*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDeviceMemory memory = %p, const VkAllocationCallbacks* pAllocator = %p)",
1405*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(memory), pAllocator);
1406*03ce13f7SAndroid Build Coastguard Worker 
1407*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(memory, pAllocator);
1408*03ce13f7SAndroid Build Coastguard Worker }
1409*03ce13f7SAndroid Build Coastguard Worker 
1410*03ce13f7SAndroid Build Coastguard Worker #if SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
vkGetMemoryFdKHR(VkDevice device,const VkMemoryGetFdInfoKHR * getFdInfo,int * pFd)1411*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR(VkDevice device, const VkMemoryGetFdInfoKHR *getFdInfo, int *pFd)
1412*03ce13f7SAndroid Build Coastguard Worker {
1413*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkMemoryGetFdInfoKHR* getFdInfo = %p, int* pFd = %p",
1414*03ce13f7SAndroid Build Coastguard Worker 	      device, getFdInfo, pFd);
1415*03ce13f7SAndroid Build Coastguard Worker 
1416*03ce13f7SAndroid Build Coastguard Worker 	if(getFdInfo->handleType != VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT)
1417*03ce13f7SAndroid Build Coastguard Worker 	{
1418*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pGetFdInfo->handleType %u", getFdInfo->handleType);
1419*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_INVALID_EXTERNAL_HANDLE;
1420*03ce13f7SAndroid Build Coastguard Worker 	}
1421*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(getFdInfo->memory)->exportFd(pFd);
1422*03ce13f7SAndroid Build Coastguard Worker }
1423*03ce13f7SAndroid Build Coastguard Worker 
vkGetMemoryFdPropertiesKHR(VkDevice device,VkExternalMemoryHandleTypeFlagBits handleType,int fd,VkMemoryFdPropertiesKHR * pMemoryFdProperties)1424*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR *pMemoryFdProperties)
1425*03ce13f7SAndroid Build Coastguard Worker {
1426*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkExternalMemoryHandleTypeFlagBits handleType = %x, int fd = %d, VkMemoryFdPropertiesKHR* pMemoryFdProperties = %p)",
1427*03ce13f7SAndroid Build Coastguard Worker 	      device, handleType, fd, pMemoryFdProperties);
1428*03ce13f7SAndroid Build Coastguard Worker 
1429*03ce13f7SAndroid Build Coastguard Worker 	if(handleType != VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT)
1430*03ce13f7SAndroid Build Coastguard Worker 	{
1431*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("handleType %u", handleType);
1432*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_INVALID_EXTERNAL_HANDLE;
1433*03ce13f7SAndroid Build Coastguard Worker 	}
1434*03ce13f7SAndroid Build Coastguard Worker 
1435*03ce13f7SAndroid Build Coastguard Worker 	if(fd < 0)
1436*03ce13f7SAndroid Build Coastguard Worker 	{
1437*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_INVALID_EXTERNAL_HANDLE;
1438*03ce13f7SAndroid Build Coastguard Worker 	}
1439*03ce13f7SAndroid Build Coastguard Worker 
1440*03ce13f7SAndroid Build Coastguard Worker 	const VkPhysicalDeviceMemoryProperties &memoryProperties =
1441*03ce13f7SAndroid Build Coastguard Worker 	    vk::PhysicalDevice::GetMemoryProperties();
1442*03ce13f7SAndroid Build Coastguard Worker 
1443*03ce13f7SAndroid Build Coastguard Worker 	// All SwiftShader memory types support this!
1444*03ce13f7SAndroid Build Coastguard Worker 	pMemoryFdProperties->memoryTypeBits = (1U << memoryProperties.memoryTypeCount) - 1U;
1445*03ce13f7SAndroid Build Coastguard Worker 
1446*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1447*03ce13f7SAndroid Build Coastguard Worker }
1448*03ce13f7SAndroid Build Coastguard Worker #endif  // SWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD
1449*03ce13f7SAndroid Build Coastguard Worker #if VK_USE_PLATFORM_FUCHSIA
vkGetMemoryZirconHandleFUCHSIA(VkDevice device,const VkMemoryGetZirconHandleInfoFUCHSIA * pGetHandleInfo,zx_handle_t * pHandle)1450*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA *pGetHandleInfo, zx_handle_t *pHandle)
1451*03ce13f7SAndroid Build Coastguard Worker {
1452*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetHandleInfo = %p, zx_handle_t* pHandle = %p",
1453*03ce13f7SAndroid Build Coastguard Worker 	      device, pGetHandleInfo, pHandle);
1454*03ce13f7SAndroid Build Coastguard Worker 
1455*03ce13f7SAndroid Build Coastguard Worker 	if(pGetHandleInfo->handleType != VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA)
1456*03ce13f7SAndroid Build Coastguard Worker 	{
1457*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pGetHandleInfo->handleType %u", pGetHandleInfo->handleType);
1458*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_INVALID_EXTERNAL_HANDLE;
1459*03ce13f7SAndroid Build Coastguard Worker 	}
1460*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pGetHandleInfo->memory)->exportHandle(pHandle);
1461*03ce13f7SAndroid Build Coastguard Worker }
1462*03ce13f7SAndroid Build Coastguard Worker 
vkGetMemoryZirconHandlePropertiesFUCHSIA(VkDevice device,VkExternalMemoryHandleTypeFlagBits handleType,zx_handle_t handle,VkMemoryZirconHandlePropertiesFUCHSIA * pMemoryZirconHandleProperties)1463*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t handle, VkMemoryZirconHandlePropertiesFUCHSIA *pMemoryZirconHandleProperties)
1464*03ce13f7SAndroid Build Coastguard Worker {
1465*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkExternalMemoryHandleTypeFlagBits handleType = %x, zx_handle_t handle = %d, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties = %p)",
1466*03ce13f7SAndroid Build Coastguard Worker 	      device, handleType, handle, pMemoryZirconHandleProperties);
1467*03ce13f7SAndroid Build Coastguard Worker 
1468*03ce13f7SAndroid Build Coastguard Worker 	if(handleType != VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA)
1469*03ce13f7SAndroid Build Coastguard Worker 	{
1470*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("handleType %u", handleType);
1471*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_INVALID_EXTERNAL_HANDLE;
1472*03ce13f7SAndroid Build Coastguard Worker 	}
1473*03ce13f7SAndroid Build Coastguard Worker 
1474*03ce13f7SAndroid Build Coastguard Worker 	if(handle == ZX_HANDLE_INVALID)
1475*03ce13f7SAndroid Build Coastguard Worker 	{
1476*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_INVALID_EXTERNAL_HANDLE;
1477*03ce13f7SAndroid Build Coastguard Worker 	}
1478*03ce13f7SAndroid Build Coastguard Worker 
1479*03ce13f7SAndroid Build Coastguard Worker 	const VkPhysicalDeviceMemoryProperties &memoryProperties =
1480*03ce13f7SAndroid Build Coastguard Worker 	    vk::PhysicalDevice::GetMemoryProperties();
1481*03ce13f7SAndroid Build Coastguard Worker 
1482*03ce13f7SAndroid Build Coastguard Worker 	// All SwiftShader memory types support this!
1483*03ce13f7SAndroid Build Coastguard Worker 	pMemoryZirconHandleProperties->memoryTypeBits = (1U << memoryProperties.memoryTypeCount) - 1U;
1484*03ce13f7SAndroid Build Coastguard Worker 
1485*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1486*03ce13f7SAndroid Build Coastguard Worker }
1487*03ce13f7SAndroid Build Coastguard Worker #endif  // VK_USE_PLATFORM_FUCHSIA
1488*03ce13f7SAndroid Build Coastguard Worker 
vkGetMemoryHostPointerPropertiesEXT(VkDevice device,VkExternalMemoryHandleTypeFlagBits handleType,const void * pHostPointer,VkMemoryHostPointerPropertiesEXT * pMemoryHostPointerProperties)1489*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void *pHostPointer, VkMemoryHostPointerPropertiesEXT *pMemoryHostPointerProperties)
1490*03ce13f7SAndroid Build Coastguard Worker {
1491*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkExternalMemoryHandleTypeFlagBits handleType = %x, const void *pHostPointer = %p, VkMemoryHostPointerPropertiesEXT *pMemoryHostPointerProperties = %p)",
1492*03ce13f7SAndroid Build Coastguard Worker 	      device, handleType, pHostPointer, pMemoryHostPointerProperties);
1493*03ce13f7SAndroid Build Coastguard Worker 
1494*03ce13f7SAndroid Build Coastguard Worker 	if(handleType != VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT && handleType != VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT)
1495*03ce13f7SAndroid Build Coastguard Worker 	{
1496*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("handleType %u", handleType);
1497*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_INVALID_EXTERNAL_HANDLE;
1498*03ce13f7SAndroid Build Coastguard Worker 	}
1499*03ce13f7SAndroid Build Coastguard Worker 	pMemoryHostPointerProperties->memoryTypeBits = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
1500*03ce13f7SAndroid Build Coastguard Worker 
1501*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1502*03ce13f7SAndroid Build Coastguard Worker }
1503*03ce13f7SAndroid Build Coastguard Worker 
1504*03ce13f7SAndroid Build Coastguard Worker #if SWIFTSHADER_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER
vkGetMemoryAndroidHardwareBufferANDROID(VkDevice device,const VkMemoryGetAndroidHardwareBufferInfoANDROID * pInfo,struct AHardwareBuffer ** pBuffer)1505*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID *pInfo, struct AHardwareBuffer **pBuffer)
1506*03ce13f7SAndroid Build Coastguard Worker {
1507*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkMemoryGetAndroidHardwareBufferInfoANDROID *pInfo = %p, struct AHardwareBuffer **pBuffer = %p)",
1508*03ce13f7SAndroid Build Coastguard Worker 	      device, pInfo, pBuffer);
1509*03ce13f7SAndroid Build Coastguard Worker 
1510*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pInfo->memory)->exportAndroidHardwareBuffer(pBuffer);
1511*03ce13f7SAndroid Build Coastguard Worker }
1512*03ce13f7SAndroid Build Coastguard Worker 
vkGetAndroidHardwareBufferPropertiesANDROID(VkDevice device,const struct AHardwareBuffer * buffer,VkAndroidHardwareBufferPropertiesANDROID * pProperties)1513*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID(VkDevice device, const struct AHardwareBuffer *buffer, VkAndroidHardwareBufferPropertiesANDROID *pProperties)
1514*03ce13f7SAndroid Build Coastguard Worker {
1515*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const struct AHardwareBuffer *buffer = %p, VkAndroidHardwareBufferPropertiesANDROID *pProperties = %p)",
1516*03ce13f7SAndroid Build Coastguard Worker 	      device, buffer, pProperties);
1517*03ce13f7SAndroid Build Coastguard Worker 
1518*03ce13f7SAndroid Build Coastguard Worker 	return vk::DeviceMemory::GetAndroidHardwareBufferProperties(device, buffer, pProperties);
1519*03ce13f7SAndroid Build Coastguard Worker }
1520*03ce13f7SAndroid Build Coastguard Worker #endif  // SWIFTSHADER_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER
1521*03ce13f7SAndroid Build Coastguard Worker 
vkMapMemory(VkDevice device,VkDeviceMemory memory,VkDeviceSize offset,VkDeviceSize size,VkMemoryMapFlags flags,void ** ppData)1522*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void **ppData)
1523*03ce13f7SAndroid Build Coastguard Worker {
1524*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDeviceMemory memory = %p, VkDeviceSize offset = %d, VkDeviceSize size = %d, VkMemoryMapFlags flags = %d, void** ppData = %p)",
1525*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(memory), int(offset), int(size), flags, ppData);
1526*03ce13f7SAndroid Build Coastguard Worker 
1527*03ce13f7SAndroid Build Coastguard Worker 	if(flags != 0)
1528*03ce13f7SAndroid Build Coastguard Worker 	{
1529*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
1530*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("flags 0x%08X", int(flags));
1531*03ce13f7SAndroid Build Coastguard Worker 	}
1532*03ce13f7SAndroid Build Coastguard Worker 
1533*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(memory)->map(offset, size, ppData);
1534*03ce13f7SAndroid Build Coastguard Worker }
1535*03ce13f7SAndroid Build Coastguard Worker 
vkUnmapMemory(VkDevice device,VkDeviceMemory memory)1536*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkUnmapMemory(VkDevice device, VkDeviceMemory memory)
1537*03ce13f7SAndroid Build Coastguard Worker {
1538*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDeviceMemory memory = %p)", device, static_cast<void *>(memory));
1539*03ce13f7SAndroid Build Coastguard Worker 
1540*03ce13f7SAndroid Build Coastguard Worker 	// Noop, memory will be released when the DeviceMemory object is released
1541*03ce13f7SAndroid Build Coastguard Worker }
1542*03ce13f7SAndroid Build Coastguard Worker 
vkFlushMappedMemoryRanges(VkDevice device,uint32_t memoryRangeCount,const VkMappedMemoryRange * pMemoryRanges)1543*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange *pMemoryRanges)
1544*03ce13f7SAndroid Build Coastguard Worker {
1545*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, uint32_t memoryRangeCount = %d, const VkMappedMemoryRange* pMemoryRanges = %p)",
1546*03ce13f7SAndroid Build Coastguard Worker 	      device, memoryRangeCount, pMemoryRanges);
1547*03ce13f7SAndroid Build Coastguard Worker 
1548*03ce13f7SAndroid Build Coastguard Worker 	// Noop, host and device memory are the same to SwiftShader
1549*03ce13f7SAndroid Build Coastguard Worker 
1550*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1551*03ce13f7SAndroid Build Coastguard Worker }
1552*03ce13f7SAndroid Build Coastguard Worker 
vkInvalidateMappedMemoryRanges(VkDevice device,uint32_t memoryRangeCount,const VkMappedMemoryRange * pMemoryRanges)1553*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange *pMemoryRanges)
1554*03ce13f7SAndroid Build Coastguard Worker {
1555*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, uint32_t memoryRangeCount = %d, const VkMappedMemoryRange* pMemoryRanges = %p)",
1556*03ce13f7SAndroid Build Coastguard Worker 	      device, memoryRangeCount, pMemoryRanges);
1557*03ce13f7SAndroid Build Coastguard Worker 
1558*03ce13f7SAndroid Build Coastguard Worker 	// Noop, host and device memory are the same to SwiftShader
1559*03ce13f7SAndroid Build Coastguard Worker 
1560*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1561*03ce13f7SAndroid Build Coastguard Worker }
1562*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceMemoryCommitment(VkDevice pDevice,VkDeviceMemory pMemory,VkDeviceSize * pCommittedMemoryInBytes)1563*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(VkDevice pDevice, VkDeviceMemory pMemory, VkDeviceSize *pCommittedMemoryInBytes)
1564*03ce13f7SAndroid Build Coastguard Worker {
1565*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDeviceMemory memory = %p, VkDeviceSize* pCommittedMemoryInBytes = %p)",
1566*03ce13f7SAndroid Build Coastguard Worker 	      pDevice, static_cast<void *>(pMemory), pCommittedMemoryInBytes);
1567*03ce13f7SAndroid Build Coastguard Worker 
1568*03ce13f7SAndroid Build Coastguard Worker 	auto *memory = vk::Cast(pMemory);
1569*03ce13f7SAndroid Build Coastguard Worker 
1570*03ce13f7SAndroid Build Coastguard Worker #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
1571*03ce13f7SAndroid Build Coastguard Worker 	const auto &memoryProperties = vk::PhysicalDevice::GetMemoryProperties();
1572*03ce13f7SAndroid Build Coastguard Worker 	uint32_t typeIndex = memory->getMemoryTypeIndex();
1573*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(typeIndex < memoryProperties.memoryTypeCount);
1574*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(memoryProperties.memoryTypes[typeIndex].propertyFlags & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT);
1575*03ce13f7SAndroid Build Coastguard Worker #endif
1576*03ce13f7SAndroid Build Coastguard Worker 
1577*03ce13f7SAndroid Build Coastguard Worker 	*pCommittedMemoryInBytes = memory->getCommittedMemoryInBytes();
1578*03ce13f7SAndroid Build Coastguard Worker }
1579*03ce13f7SAndroid Build Coastguard Worker 
vkBindBufferMemory(VkDevice device,VkBuffer buffer,VkDeviceMemory memory,VkDeviceSize memoryOffset)1580*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset)
1581*03ce13f7SAndroid Build Coastguard Worker {
1582*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkBuffer buffer = %p, VkDeviceMemory memory = %p, VkDeviceSize memoryOffset = %d)",
1583*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(buffer), static_cast<void *>(memory), int(memoryOffset));
1584*03ce13f7SAndroid Build Coastguard Worker 
1585*03ce13f7SAndroid Build Coastguard Worker 	if(!vk::Cast(buffer)->canBindToMemory(vk::Cast(memory)))
1586*03ce13f7SAndroid Build Coastguard Worker 	{
1587*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("vkBindBufferMemory with invalid external memory");
1588*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_INVALID_EXTERNAL_HANDLE;
1589*03ce13f7SAndroid Build Coastguard Worker 	}
1590*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(buffer)->bind(vk::Cast(memory), memoryOffset);
1591*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1592*03ce13f7SAndroid Build Coastguard Worker }
1593*03ce13f7SAndroid Build Coastguard Worker 
vkBindImageMemory(VkDevice device,VkImage image,VkDeviceMemory memory,VkDeviceSize memoryOffset)1594*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset)
1595*03ce13f7SAndroid Build Coastguard Worker {
1596*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkImage image = %p, VkDeviceMemory memory = %p, VkDeviceSize memoryOffset = %d)",
1597*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(image), static_cast<void *>(memory), int(memoryOffset));
1598*03ce13f7SAndroid Build Coastguard Worker 
1599*03ce13f7SAndroid Build Coastguard Worker 	if(!vk::Cast(image)->canBindToMemory(vk::Cast(memory)))
1600*03ce13f7SAndroid Build Coastguard Worker 	{
1601*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("vkBindImageMemory with invalid external memory");
1602*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_INVALID_EXTERNAL_HANDLE;
1603*03ce13f7SAndroid Build Coastguard Worker 	}
1604*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(image)->bind(vk::Cast(memory), memoryOffset);
1605*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1606*03ce13f7SAndroid Build Coastguard Worker }
1607*03ce13f7SAndroid Build Coastguard Worker 
vkGetBufferMemoryRequirements(VkDevice device,VkBuffer buffer,VkMemoryRequirements * pMemoryRequirements)1608*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, VkMemoryRequirements *pMemoryRequirements)
1609*03ce13f7SAndroid Build Coastguard Worker {
1610*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkBuffer buffer = %p, VkMemoryRequirements* pMemoryRequirements = %p)",
1611*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(buffer), pMemoryRequirements);
1612*03ce13f7SAndroid Build Coastguard Worker 
1613*03ce13f7SAndroid Build Coastguard Worker 	*pMemoryRequirements = vk::Cast(buffer)->getMemoryRequirements();
1614*03ce13f7SAndroid Build Coastguard Worker }
1615*03ce13f7SAndroid Build Coastguard Worker 
vkGetImageMemoryRequirements(VkDevice device,VkImage image,VkMemoryRequirements * pMemoryRequirements)1616*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements *pMemoryRequirements)
1617*03ce13f7SAndroid Build Coastguard Worker {
1618*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkImage image = %p, VkMemoryRequirements* pMemoryRequirements = %p)",
1619*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(image), pMemoryRequirements);
1620*03ce13f7SAndroid Build Coastguard Worker 
1621*03ce13f7SAndroid Build Coastguard Worker 	*pMemoryRequirements = vk::Cast(image)->getMemoryRequirements();
1622*03ce13f7SAndroid Build Coastguard Worker }
1623*03ce13f7SAndroid Build Coastguard Worker 
vkGetImageSparseMemoryRequirements(VkDevice device,VkImage image,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements * pSparseMemoryRequirements)1624*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t *pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements *pSparseMemoryRequirements)
1625*03ce13f7SAndroid Build Coastguard Worker {
1626*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkImage image = %p, uint32_t* pSparseMemoryRequirementCount = %p, VkSparseImageMemoryRequirements* pSparseMemoryRequirements = %p)",
1627*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(image), pSparseMemoryRequirementCount, pSparseMemoryRequirements);
1628*03ce13f7SAndroid Build Coastguard Worker 
1629*03ce13f7SAndroid Build Coastguard Worker 	// The 'sparseBinding' feature is not supported, so images can not be created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag.
1630*03ce13f7SAndroid Build Coastguard Worker 	// "If the image was not created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT then pSparseMemoryRequirementCount will be set to zero and pSparseMemoryRequirements will not be written to."
1631*03ce13f7SAndroid Build Coastguard Worker 	*pSparseMemoryRequirementCount = 0;
1632*03ce13f7SAndroid Build Coastguard Worker }
1633*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice,VkFormat format,VkImageType type,VkSampleCountFlagBits samples,VkImageUsageFlags usage,VkImageTiling tiling,uint32_t * pPropertyCount,VkSparseImageFormatProperties * pProperties)1634*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t *pPropertyCount, VkSparseImageFormatProperties *pProperties)
1635*03ce13f7SAndroid Build Coastguard Worker {
1636*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkFormat format = %d, VkImageType type = %d, VkSampleCountFlagBits samples = %d, VkImageUsageFlags usage = %d, VkImageTiling tiling = %d, uint32_t* pPropertyCount = %p, VkSparseImageFormatProperties* pProperties = %p)",
1637*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, format, type, samples, usage, tiling, pPropertyCount, pProperties);
1638*03ce13f7SAndroid Build Coastguard Worker 
1639*03ce13f7SAndroid Build Coastguard Worker 	// We do not support sparse images.
1640*03ce13f7SAndroid Build Coastguard Worker 	*pPropertyCount = 0;
1641*03ce13f7SAndroid Build Coastguard Worker }
1642*03ce13f7SAndroid Build Coastguard Worker 
vkQueueBindSparse(VkQueue queue,uint32_t bindInfoCount,const VkBindSparseInfo * pBindInfo,VkFence fence)1643*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo *pBindInfo, VkFence fence)
1644*03ce13f7SAndroid Build Coastguard Worker {
1645*03ce13f7SAndroid Build Coastguard Worker 	TRACE("()");
1646*03ce13f7SAndroid Build Coastguard Worker 	UNSUPPORTED("vkQueueBindSparse");
1647*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1648*03ce13f7SAndroid Build Coastguard Worker }
1649*03ce13f7SAndroid Build Coastguard Worker 
vkCreateFence(VkDevice device,const VkFenceCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkFence * pFence)1650*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(VkDevice device, const VkFenceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkFence *pFence)
1651*03ce13f7SAndroid Build Coastguard Worker {
1652*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkFenceCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkFence* pFence = %p)",
1653*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pFence);
1654*03ce13f7SAndroid Build Coastguard Worker 
1655*03ce13f7SAndroid Build Coastguard Worker 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
1656*03ce13f7SAndroid Build Coastguard Worker 	while(nextInfo)
1657*03ce13f7SAndroid Build Coastguard Worker 	{
1658*03ce13f7SAndroid Build Coastguard Worker 		switch(nextInfo->sType)
1659*03ce13f7SAndroid Build Coastguard Worker 		{
1660*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
1661*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
1662*03ce13f7SAndroid Build Coastguard Worker 			break;
1663*03ce13f7SAndroid Build Coastguard Worker 		default:
1664*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType).c_str());
1665*03ce13f7SAndroid Build Coastguard Worker 			break;
1666*03ce13f7SAndroid Build Coastguard Worker 		}
1667*03ce13f7SAndroid Build Coastguard Worker 		nextInfo = nextInfo->pNext;
1668*03ce13f7SAndroid Build Coastguard Worker 	}
1669*03ce13f7SAndroid Build Coastguard Worker 
1670*03ce13f7SAndroid Build Coastguard Worker 	return vk::Fence::Create(pAllocator, pCreateInfo, pFence);
1671*03ce13f7SAndroid Build Coastguard Worker }
1672*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyFence(VkDevice device,VkFence fence,const VkAllocationCallbacks * pAllocator)1673*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks *pAllocator)
1674*03ce13f7SAndroid Build Coastguard Worker {
1675*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkFence fence = %p, const VkAllocationCallbacks* pAllocator = %p)",
1676*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(fence), pAllocator);
1677*03ce13f7SAndroid Build Coastguard Worker 
1678*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(fence, pAllocator);
1679*03ce13f7SAndroid Build Coastguard Worker }
1680*03ce13f7SAndroid Build Coastguard Worker 
vkResetFences(VkDevice device,uint32_t fenceCount,const VkFence * pFences)1681*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences)
1682*03ce13f7SAndroid Build Coastguard Worker {
1683*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, uint32_t fenceCount = %d, const VkFence* pFences = %p)",
1684*03ce13f7SAndroid Build Coastguard Worker 	      device, fenceCount, pFences);
1685*03ce13f7SAndroid Build Coastguard Worker 
1686*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < fenceCount; i++)
1687*03ce13f7SAndroid Build Coastguard Worker 	{
1688*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(pFences[i])->reset();
1689*03ce13f7SAndroid Build Coastguard Worker 	}
1690*03ce13f7SAndroid Build Coastguard Worker 
1691*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1692*03ce13f7SAndroid Build Coastguard Worker }
1693*03ce13f7SAndroid Build Coastguard Worker 
vkGetFenceStatus(VkDevice device,VkFence fence)1694*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(VkDevice device, VkFence fence)
1695*03ce13f7SAndroid Build Coastguard Worker {
1696*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkFence fence = %p)", device, static_cast<void *>(fence));
1697*03ce13f7SAndroid Build Coastguard Worker 
1698*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(fence)->getStatus();
1699*03ce13f7SAndroid Build Coastguard Worker }
1700*03ce13f7SAndroid Build Coastguard Worker 
vkWaitForFences(VkDevice device,uint32_t fenceCount,const VkFence * pFences,VkBool32 waitAll,uint64_t timeout)1701*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences, VkBool32 waitAll, uint64_t timeout)
1702*03ce13f7SAndroid Build Coastguard Worker {
1703*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, uint32_t fenceCount = %d, const VkFence* pFences = %p, VkBool32 waitAll = %d, uint64_t timeout = %" PRIu64 ")",
1704*03ce13f7SAndroid Build Coastguard Worker 	      device, int(fenceCount), pFences, int(waitAll), timeout);
1705*03ce13f7SAndroid Build Coastguard Worker 
1706*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(device)->waitForFences(fenceCount, pFences, waitAll, timeout);
1707*03ce13f7SAndroid Build Coastguard Worker }
1708*03ce13f7SAndroid Build Coastguard Worker 
vkCreateSemaphore(VkDevice device,const VkSemaphoreCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSemaphore * pSemaphore)1709*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSemaphore *pSemaphore)
1710*03ce13f7SAndroid Build Coastguard Worker {
1711*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkSemaphoreCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkSemaphore* pSemaphore = %p)",
1712*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pSemaphore);
1713*03ce13f7SAndroid Build Coastguard Worker 
1714*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
1715*03ce13f7SAndroid Build Coastguard Worker 	{
1716*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
1717*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
1718*03ce13f7SAndroid Build Coastguard Worker 	}
1719*03ce13f7SAndroid Build Coastguard Worker 
1720*03ce13f7SAndroid Build Coastguard Worker 	VkSemaphoreType type = VK_SEMAPHORE_TYPE_BINARY;
1721*03ce13f7SAndroid Build Coastguard Worker 	for(const auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
1722*03ce13f7SAndroid Build Coastguard Worker 	    nextInfo != nullptr; nextInfo = nextInfo->pNext)
1723*03ce13f7SAndroid Build Coastguard Worker 	{
1724*03ce13f7SAndroid Build Coastguard Worker 		switch(nextInfo->sType)
1725*03ce13f7SAndroid Build Coastguard Worker 		{
1726*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:
1727*03ce13f7SAndroid Build Coastguard Worker 			// Let the semaphore constructor handle this
1728*03ce13f7SAndroid Build Coastguard Worker 			break;
1729*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:
1730*03ce13f7SAndroid Build Coastguard Worker 			{
1731*03ce13f7SAndroid Build Coastguard Worker 				const VkSemaphoreTypeCreateInfo *info = reinterpret_cast<const VkSemaphoreTypeCreateInfo *>(nextInfo);
1732*03ce13f7SAndroid Build Coastguard Worker 				type = info->semaphoreType;
1733*03ce13f7SAndroid Build Coastguard Worker 			}
1734*03ce13f7SAndroid Build Coastguard Worker 			break;
1735*03ce13f7SAndroid Build Coastguard Worker 		default:
1736*03ce13f7SAndroid Build Coastguard Worker 			WARN("nextInfo->sType = %s", vk::Stringify(nextInfo->sType).c_str());
1737*03ce13f7SAndroid Build Coastguard Worker 			break;
1738*03ce13f7SAndroid Build Coastguard Worker 		}
1739*03ce13f7SAndroid Build Coastguard Worker 	}
1740*03ce13f7SAndroid Build Coastguard Worker 
1741*03ce13f7SAndroid Build Coastguard Worker 	if(type == VK_SEMAPHORE_TYPE_BINARY)
1742*03ce13f7SAndroid Build Coastguard Worker 	{
1743*03ce13f7SAndroid Build Coastguard Worker 		return vk::BinarySemaphore::Create(pAllocator, pCreateInfo, pSemaphore, pAllocator);
1744*03ce13f7SAndroid Build Coastguard Worker 	}
1745*03ce13f7SAndroid Build Coastguard Worker 	else
1746*03ce13f7SAndroid Build Coastguard Worker 	{
1747*03ce13f7SAndroid Build Coastguard Worker 		return vk::TimelineSemaphore::Create(pAllocator, pCreateInfo, pSemaphore, pAllocator);
1748*03ce13f7SAndroid Build Coastguard Worker 	}
1749*03ce13f7SAndroid Build Coastguard Worker }
1750*03ce13f7SAndroid Build Coastguard Worker 
vkDestroySemaphore(VkDevice device,VkSemaphore semaphore,const VkAllocationCallbacks * pAllocator)1751*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks *pAllocator)
1752*03ce13f7SAndroid Build Coastguard Worker {
1753*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkSemaphore semaphore = %p, const VkAllocationCallbacks* pAllocator = %p)",
1754*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(semaphore), pAllocator);
1755*03ce13f7SAndroid Build Coastguard Worker 
1756*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(semaphore, pAllocator);
1757*03ce13f7SAndroid Build Coastguard Worker }
1758*03ce13f7SAndroid Build Coastguard Worker 
1759*03ce13f7SAndroid Build Coastguard Worker #if SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
vkGetSemaphoreFdKHR(VkDevice device,const VkSemaphoreGetFdInfoKHR * pGetFdInfo,int * pFd)1760*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR(VkDevice device, const VkSemaphoreGetFdInfoKHR *pGetFdInfo, int *pFd)
1761*03ce13f7SAndroid Build Coastguard Worker {
1762*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkSemaphoreGetFdInfoKHR* pGetFdInfo = %p, int* pFd = %p)",
1763*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<const void *>(pGetFdInfo), static_cast<void *>(pFd));
1764*03ce13f7SAndroid Build Coastguard Worker 
1765*03ce13f7SAndroid Build Coastguard Worker 	if(pGetFdInfo->handleType != VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT)
1766*03ce13f7SAndroid Build Coastguard Worker 	{
1767*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pGetFdInfo->handleType %d", int(pGetFdInfo->handleType));
1768*03ce13f7SAndroid Build Coastguard Worker 	}
1769*03ce13f7SAndroid Build Coastguard Worker 
1770*03ce13f7SAndroid Build Coastguard Worker 	auto *sem = vk::DynamicCast<vk::BinarySemaphore>(pGetFdInfo->semaphore);
1771*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(sem != nullptr);
1772*03ce13f7SAndroid Build Coastguard Worker 	return sem->exportFd(pFd);
1773*03ce13f7SAndroid Build Coastguard Worker }
1774*03ce13f7SAndroid Build Coastguard Worker 
vkImportSemaphoreFdKHR(VkDevice device,const VkImportSemaphoreFdInfoKHR * pImportSemaphoreInfo)1775*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR(VkDevice device, const VkImportSemaphoreFdInfoKHR *pImportSemaphoreInfo)
1776*03ce13f7SAndroid Build Coastguard Worker {
1777*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreInfo = %p",
1778*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<const void *>(pImportSemaphoreInfo));
1779*03ce13f7SAndroid Build Coastguard Worker 
1780*03ce13f7SAndroid Build Coastguard Worker 	if(pImportSemaphoreInfo->handleType != VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT)
1781*03ce13f7SAndroid Build Coastguard Worker 	{
1782*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pImportSemaphoreInfo->handleType %d", int(pImportSemaphoreInfo->handleType));
1783*03ce13f7SAndroid Build Coastguard Worker 	}
1784*03ce13f7SAndroid Build Coastguard Worker 	bool temporaryImport = (pImportSemaphoreInfo->flags & VK_SEMAPHORE_IMPORT_TEMPORARY_BIT) != 0;
1785*03ce13f7SAndroid Build Coastguard Worker 
1786*03ce13f7SAndroid Build Coastguard Worker 	auto *sem = vk::DynamicCast<vk::BinarySemaphore>(pImportSemaphoreInfo->semaphore);
1787*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(sem != nullptr);
1788*03ce13f7SAndroid Build Coastguard Worker 	return sem->importFd(pImportSemaphoreInfo->fd, temporaryImport);
1789*03ce13f7SAndroid Build Coastguard Worker }
1790*03ce13f7SAndroid Build Coastguard Worker #endif  // SWIFTSHADER_EXTERNAL_SEMAPHORE_OPAQUE_FD
1791*03ce13f7SAndroid Build Coastguard Worker 
1792*03ce13f7SAndroid Build Coastguard Worker #if VK_USE_PLATFORM_FUCHSIA
vkImportSemaphoreZirconHandleFUCHSIA(VkDevice device,const VkImportSemaphoreZirconHandleInfoFUCHSIA * pImportSemaphoreZirconHandleInfo)1793*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA(
1794*03ce13f7SAndroid Build Coastguard Worker     VkDevice device,
1795*03ce13f7SAndroid Build Coastguard Worker     const VkImportSemaphoreZirconHandleInfoFUCHSIA *pImportSemaphoreZirconHandleInfo)
1796*03ce13f7SAndroid Build Coastguard Worker {
1797*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo = %p)",
1798*03ce13f7SAndroid Build Coastguard Worker 	      device, pImportSemaphoreZirconHandleInfo);
1799*03ce13f7SAndroid Build Coastguard Worker 
1800*03ce13f7SAndroid Build Coastguard Worker 	if(pImportSemaphoreZirconHandleInfo->handleType != VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA)
1801*03ce13f7SAndroid Build Coastguard Worker 	{
1802*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pImportSemaphoreZirconHandleInfo->handleType %d", int(pImportSemaphoreZirconHandleInfo->handleType));
1803*03ce13f7SAndroid Build Coastguard Worker 	}
1804*03ce13f7SAndroid Build Coastguard Worker 	bool temporaryImport = (pImportSemaphoreZirconHandleInfo->flags & VK_SEMAPHORE_IMPORT_TEMPORARY_BIT) != 0;
1805*03ce13f7SAndroid Build Coastguard Worker 	auto *sem = vk::DynamicCast<vk::BinarySemaphore>(pImportSemaphoreZirconHandleInfo->semaphore);
1806*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(sem != nullptr);
1807*03ce13f7SAndroid Build Coastguard Worker 	return sem->importHandle(pImportSemaphoreZirconHandleInfo->zirconHandle, temporaryImport);
1808*03ce13f7SAndroid Build Coastguard Worker }
1809*03ce13f7SAndroid Build Coastguard Worker 
vkGetSemaphoreZirconHandleFUCHSIA(VkDevice device,const VkSemaphoreGetZirconHandleInfoFUCHSIA * pGetZirconHandleInfo,zx_handle_t * pZirconHandle)1810*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA(
1811*03ce13f7SAndroid Build Coastguard Worker     VkDevice device,
1812*03ce13f7SAndroid Build Coastguard Worker     const VkSemaphoreGetZirconHandleInfoFUCHSIA *pGetZirconHandleInfo,
1813*03ce13f7SAndroid Build Coastguard Worker     zx_handle_t *pZirconHandle)
1814*03ce13f7SAndroid Build Coastguard Worker {
1815*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo = %p, zx_handle_t* pZirconHandle = %p)",
1816*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<const void *>(pGetZirconHandleInfo), static_cast<void *>(pZirconHandle));
1817*03ce13f7SAndroid Build Coastguard Worker 
1818*03ce13f7SAndroid Build Coastguard Worker 	if(pGetZirconHandleInfo->handleType != VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA)
1819*03ce13f7SAndroid Build Coastguard Worker 	{
1820*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pGetZirconHandleInfo->handleType %d", int(pGetZirconHandleInfo->handleType));
1821*03ce13f7SAndroid Build Coastguard Worker 	}
1822*03ce13f7SAndroid Build Coastguard Worker 
1823*03ce13f7SAndroid Build Coastguard Worker 	auto *sem = vk::DynamicCast<vk::BinarySemaphore>(pGetZirconHandleInfo->semaphore);
1824*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(sem != nullptr);
1825*03ce13f7SAndroid Build Coastguard Worker 	return sem->exportHandle(pZirconHandle);
1826*03ce13f7SAndroid Build Coastguard Worker }
1827*03ce13f7SAndroid Build Coastguard Worker #endif  // VK_USE_PLATFORM_FUCHSIA
1828*03ce13f7SAndroid Build Coastguard Worker 
vkGetSemaphoreCounterValue(VkDevice device,VkSemaphore semaphore,uint64_t * pValue)1829*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue(VkDevice device, VkSemaphore semaphore, uint64_t *pValue)
1830*03ce13f7SAndroid Build Coastguard Worker {
1831*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkSemaphore semaphore = %p, uint64_t* pValue = %p)",
1832*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(semaphore), pValue);
1833*03ce13f7SAndroid Build Coastguard Worker 	*pValue = vk::DynamicCast<vk::TimelineSemaphore>(semaphore)->getCounterValue();
1834*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1835*03ce13f7SAndroid Build Coastguard Worker }
1836*03ce13f7SAndroid Build Coastguard Worker 
vkSignalSemaphore(VkDevice device,const VkSemaphoreSignalInfo * pSignalInfo)1837*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore(VkDevice device, const VkSemaphoreSignalInfo *pSignalInfo)
1838*03ce13f7SAndroid Build Coastguard Worker {
1839*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkSemaphoreSignalInfo *pSignalInfo = %p)",
1840*03ce13f7SAndroid Build Coastguard Worker 	      device, pSignalInfo);
1841*03ce13f7SAndroid Build Coastguard Worker 	vk::DynamicCast<vk::TimelineSemaphore>(pSignalInfo->semaphore)->signal(pSignalInfo->value);
1842*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1843*03ce13f7SAndroid Build Coastguard Worker }
1844*03ce13f7SAndroid Build Coastguard Worker 
vkWaitSemaphores(VkDevice device,const VkSemaphoreWaitInfo * pWaitInfo,uint64_t timeout)1845*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores(VkDevice device, const VkSemaphoreWaitInfo *pWaitInfo, uint64_t timeout)
1846*03ce13f7SAndroid Build Coastguard Worker {
1847*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkSemaphoreWaitInfo *pWaitInfo = %p, uint64_t timeout = %" PRIu64 ")",
1848*03ce13f7SAndroid Build Coastguard Worker 	      device, pWaitInfo, timeout);
1849*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(device)->waitForSemaphores(pWaitInfo, timeout);
1850*03ce13f7SAndroid Build Coastguard Worker }
1851*03ce13f7SAndroid Build Coastguard Worker 
vkCreateEvent(VkDevice device,const VkEventCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkEvent * pEvent)1852*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(VkDevice device, const VkEventCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkEvent *pEvent)
1853*03ce13f7SAndroid Build Coastguard Worker {
1854*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkEventCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkEvent* pEvent = %p)",
1855*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pEvent);
1856*03ce13f7SAndroid Build Coastguard Worker 
1857*03ce13f7SAndroid Build Coastguard Worker 	// VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR is provided by VK_KHR_synchronization2
1858*03ce13f7SAndroid Build Coastguard Worker 	if((pCreateInfo->flags != 0) && (pCreateInfo->flags != VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR))
1859*03ce13f7SAndroid Build Coastguard Worker 	{
1860*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
1861*03ce13f7SAndroid Build Coastguard Worker 	}
1862*03ce13f7SAndroid Build Coastguard Worker 
1863*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
1864*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
1865*03ce13f7SAndroid Build Coastguard Worker 	{
1866*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "pNext must be NULL"
1867*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
1868*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
1869*03ce13f7SAndroid Build Coastguard Worker 	}
1870*03ce13f7SAndroid Build Coastguard Worker 
1871*03ce13f7SAndroid Build Coastguard Worker 	return vk::Event::Create(pAllocator, pCreateInfo, pEvent);
1872*03ce13f7SAndroid Build Coastguard Worker }
1873*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyEvent(VkDevice device,VkEvent event,const VkAllocationCallbacks * pAllocator)1874*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks *pAllocator)
1875*03ce13f7SAndroid Build Coastguard Worker {
1876*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkEvent event = %p, const VkAllocationCallbacks* pAllocator = %p)",
1877*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(event), pAllocator);
1878*03ce13f7SAndroid Build Coastguard Worker 
1879*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(event, pAllocator);
1880*03ce13f7SAndroid Build Coastguard Worker }
1881*03ce13f7SAndroid Build Coastguard Worker 
vkGetEventStatus(VkDevice device,VkEvent event)1882*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(VkDevice device, VkEvent event)
1883*03ce13f7SAndroid Build Coastguard Worker {
1884*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkEvent event = %p)", device, static_cast<void *>(event));
1885*03ce13f7SAndroid Build Coastguard Worker 
1886*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(event)->getStatus();
1887*03ce13f7SAndroid Build Coastguard Worker }
1888*03ce13f7SAndroid Build Coastguard Worker 
vkSetEvent(VkDevice device,VkEvent event)1889*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(VkDevice device, VkEvent event)
1890*03ce13f7SAndroid Build Coastguard Worker {
1891*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkEvent event = %p)", device, static_cast<void *>(event));
1892*03ce13f7SAndroid Build Coastguard Worker 
1893*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(event)->signal();
1894*03ce13f7SAndroid Build Coastguard Worker 
1895*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1896*03ce13f7SAndroid Build Coastguard Worker }
1897*03ce13f7SAndroid Build Coastguard Worker 
vkResetEvent(VkDevice device,VkEvent event)1898*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(VkDevice device, VkEvent event)
1899*03ce13f7SAndroid Build Coastguard Worker {
1900*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkEvent event = %p)", device, static_cast<void *>(event));
1901*03ce13f7SAndroid Build Coastguard Worker 
1902*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(event)->reset();
1903*03ce13f7SAndroid Build Coastguard Worker 
1904*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
1905*03ce13f7SAndroid Build Coastguard Worker }
1906*03ce13f7SAndroid Build Coastguard Worker 
vkCreateQueryPool(VkDevice device,const VkQueryPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkQueryPool * pQueryPool)1907*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkQueryPool *pQueryPool)
1908*03ce13f7SAndroid Build Coastguard Worker {
1909*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkQueryPoolCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkQueryPool* pQueryPool = %p)",
1910*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pQueryPool);
1911*03ce13f7SAndroid Build Coastguard Worker 
1912*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
1913*03ce13f7SAndroid Build Coastguard Worker 	{
1914*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
1915*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
1916*03ce13f7SAndroid Build Coastguard Worker 	}
1917*03ce13f7SAndroid Build Coastguard Worker 
1918*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
1919*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
1920*03ce13f7SAndroid Build Coastguard Worker 	{
1921*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
1922*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
1923*03ce13f7SAndroid Build Coastguard Worker 	}
1924*03ce13f7SAndroid Build Coastguard Worker 
1925*03ce13f7SAndroid Build Coastguard Worker 	return vk::QueryPool::Create(pAllocator, pCreateInfo, pQueryPool);
1926*03ce13f7SAndroid Build Coastguard Worker }
1927*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyQueryPool(VkDevice device,VkQueryPool queryPool,const VkAllocationCallbacks * pAllocator)1928*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks *pAllocator)
1929*03ce13f7SAndroid Build Coastguard Worker {
1930*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkQueryPool queryPool = %p, const VkAllocationCallbacks* pAllocator = %p)",
1931*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(queryPool), pAllocator);
1932*03ce13f7SAndroid Build Coastguard Worker 
1933*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(queryPool, pAllocator);
1934*03ce13f7SAndroid Build Coastguard Worker }
1935*03ce13f7SAndroid Build Coastguard Worker 
vkGetQueryPoolResults(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,size_t dataSize,void * pData,VkDeviceSize stride,VkQueryResultFlags flags)1936*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void *pData, VkDeviceSize stride, VkQueryResultFlags flags)
1937*03ce13f7SAndroid Build Coastguard Worker {
1938*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkQueryPool queryPool = %p, uint32_t firstQuery = %d, uint32_t queryCount = %d, size_t dataSize = %d, void* pData = %p, VkDeviceSize stride = %d, VkQueryResultFlags flags = %d)",
1939*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(queryPool), int(firstQuery), int(queryCount), int(dataSize), pData, int(stride), flags);
1940*03ce13f7SAndroid Build Coastguard Worker 
1941*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(queryPool)->getResults(firstQuery, queryCount, dataSize, pData, stride, flags);
1942*03ce13f7SAndroid Build Coastguard Worker }
1943*03ce13f7SAndroid Build Coastguard Worker 
vkCreateBuffer(VkDevice device,const VkBufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBuffer * pBuffer)1944*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkBuffer *pBuffer)
1945*03ce13f7SAndroid Build Coastguard Worker {
1946*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkBufferCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkBuffer* pBuffer = %p)",
1947*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pBuffer);
1948*03ce13f7SAndroid Build Coastguard Worker 
1949*03ce13f7SAndroid Build Coastguard Worker 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
1950*03ce13f7SAndroid Build Coastguard Worker 	while(nextInfo)
1951*03ce13f7SAndroid Build Coastguard Worker 	{
1952*03ce13f7SAndroid Build Coastguard Worker 		switch(nextInfo->sType)
1953*03ce13f7SAndroid Build Coastguard Worker 		{
1954*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
1955*03ce13f7SAndroid Build Coastguard Worker 			// Do nothing. Should be handled by vk::Buffer::Create().
1956*03ce13f7SAndroid Build Coastguard Worker 			break;
1957*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
1958*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
1959*03ce13f7SAndroid Build Coastguard Worker 			break;
1960*03ce13f7SAndroid Build Coastguard Worker 		default:
1961*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType).c_str());
1962*03ce13f7SAndroid Build Coastguard Worker 			break;
1963*03ce13f7SAndroid Build Coastguard Worker 		}
1964*03ce13f7SAndroid Build Coastguard Worker 		nextInfo = nextInfo->pNext;
1965*03ce13f7SAndroid Build Coastguard Worker 	}
1966*03ce13f7SAndroid Build Coastguard Worker 
1967*03ce13f7SAndroid Build Coastguard Worker 	return vk::Buffer::Create(pAllocator, pCreateInfo, pBuffer);
1968*03ce13f7SAndroid Build Coastguard Worker }
1969*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyBuffer(VkDevice device,VkBuffer buffer,const VkAllocationCallbacks * pAllocator)1970*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks *pAllocator)
1971*03ce13f7SAndroid Build Coastguard Worker {
1972*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkBuffer buffer = %p, const VkAllocationCallbacks* pAllocator = %p)",
1973*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(buffer), pAllocator);
1974*03ce13f7SAndroid Build Coastguard Worker 
1975*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(buffer, pAllocator);
1976*03ce13f7SAndroid Build Coastguard Worker }
1977*03ce13f7SAndroid Build Coastguard Worker 
vkGetBufferDeviceAddress(VkDevice device,const VkBufferDeviceAddressInfo * pInfo)1978*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferDeviceAddress(VkDevice device, const VkBufferDeviceAddressInfo *pInfo)
1979*03ce13f7SAndroid Build Coastguard Worker {
1980*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkBufferDeviceAddressInfo* pInfo = %p)",
1981*03ce13f7SAndroid Build Coastguard Worker 	      device, pInfo);
1982*03ce13f7SAndroid Build Coastguard Worker 
1983*03ce13f7SAndroid Build Coastguard Worker 	// This function must return VkBufferDeviceAddressCreateInfoEXT::deviceAddress if provided
1984*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(!vk::Cast(device)->hasExtension(VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME));
1985*03ce13f7SAndroid Build Coastguard Worker 
1986*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pInfo->buffer)->getOpaqueCaptureAddress();
1987*03ce13f7SAndroid Build Coastguard Worker }
1988*03ce13f7SAndroid Build Coastguard Worker 
vkGetBufferOpaqueCaptureAddress(VkDevice device,const VkBufferDeviceAddressInfo * pInfo)1989*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress(VkDevice device, const VkBufferDeviceAddressInfo *pInfo)
1990*03ce13f7SAndroid Build Coastguard Worker {
1991*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkBufferDeviceAddressInfo* pInfo = %p)",
1992*03ce13f7SAndroid Build Coastguard Worker 	      device, pInfo);
1993*03ce13f7SAndroid Build Coastguard Worker 
1994*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pInfo->buffer)->getOpaqueCaptureAddress();
1995*03ce13f7SAndroid Build Coastguard Worker }
1996*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device,const VkDeviceMemoryOpaqueCaptureAddressInfo * pInfo)1997*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo *pInfo)
1998*03ce13f7SAndroid Build Coastguard Worker {
1999*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo = %p)",
2000*03ce13f7SAndroid Build Coastguard Worker 	      device, pInfo);
2001*03ce13f7SAndroid Build Coastguard Worker 
2002*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pInfo->memory)->getOpaqueCaptureAddress();
2003*03ce13f7SAndroid Build Coastguard Worker }
2004*03ce13f7SAndroid Build Coastguard Worker 
vkCreateBufferView(VkDevice device,const VkBufferViewCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkBufferView * pView)2005*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkBufferView *pView)
2006*03ce13f7SAndroid Build Coastguard Worker {
2007*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkBufferViewCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkBufferView* pView = %p)",
2008*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pView);
2009*03ce13f7SAndroid Build Coastguard Worker 
2010*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
2011*03ce13f7SAndroid Build Coastguard Worker 	{
2012*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
2013*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
2014*03ce13f7SAndroid Build Coastguard Worker 	}
2015*03ce13f7SAndroid Build Coastguard Worker 
2016*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
2017*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
2018*03ce13f7SAndroid Build Coastguard Worker 	{
2019*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
2020*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
2021*03ce13f7SAndroid Build Coastguard Worker 	}
2022*03ce13f7SAndroid Build Coastguard Worker 
2023*03ce13f7SAndroid Build Coastguard Worker 	return vk::BufferView::Create(pAllocator, pCreateInfo, pView);
2024*03ce13f7SAndroid Build Coastguard Worker }
2025*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyBufferView(VkDevice device,VkBufferView bufferView,const VkAllocationCallbacks * pAllocator)2026*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks *pAllocator)
2027*03ce13f7SAndroid Build Coastguard Worker {
2028*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkBufferView bufferView = %p, const VkAllocationCallbacks* pAllocator = %p)",
2029*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(bufferView), pAllocator);
2030*03ce13f7SAndroid Build Coastguard Worker 
2031*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(bufferView, pAllocator);
2032*03ce13f7SAndroid Build Coastguard Worker }
2033*03ce13f7SAndroid Build Coastguard Worker 
vkCreateImage(VkDevice device,const VkImageCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImage * pImage)2034*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(VkDevice device, const VkImageCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkImage *pImage)
2035*03ce13f7SAndroid Build Coastguard Worker {
2036*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkImageCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkImage* pImage = %p)",
2037*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pImage);
2038*03ce13f7SAndroid Build Coastguard Worker 
2039*03ce13f7SAndroid Build Coastguard Worker 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
2040*03ce13f7SAndroid Build Coastguard Worker 
2041*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
2042*03ce13f7SAndroid Build Coastguard Worker 	vk::BackingMemory backmem;
2043*03ce13f7SAndroid Build Coastguard Worker 	bool swapchainImage = false;
2044*03ce13f7SAndroid Build Coastguard Worker #endif
2045*03ce13f7SAndroid Build Coastguard Worker 
2046*03ce13f7SAndroid Build Coastguard Worker 	while(extensionCreateInfo)
2047*03ce13f7SAndroid Build Coastguard Worker 	{
2048*03ce13f7SAndroid Build Coastguard Worker 		// Casting to an int since some structures, such as VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID and
2049*03ce13f7SAndroid Build Coastguard Worker 		// VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID, are not enumerated in the official Vulkan headers.
2050*03ce13f7SAndroid Build Coastguard Worker 		switch((int)(extensionCreateInfo->sType))
2051*03ce13f7SAndroid Build Coastguard Worker 		{
2052*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
2053*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID:
2054*03ce13f7SAndroid Build Coastguard Worker 			{
2055*03ce13f7SAndroid Build Coastguard Worker 				const VkSwapchainImageCreateInfoANDROID *swapImageCreateInfo = reinterpret_cast<const VkSwapchainImageCreateInfoANDROID *>(extensionCreateInfo);
2056*03ce13f7SAndroid Build Coastguard Worker 				backmem.androidUsage = swapImageCreateInfo->usage;
2057*03ce13f7SAndroid Build Coastguard Worker 			}
2058*03ce13f7SAndroid Build Coastguard Worker 			break;
2059*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID:
2060*03ce13f7SAndroid Build Coastguard Worker 			{
2061*03ce13f7SAndroid Build Coastguard Worker 				const VkNativeBufferANDROID *nativeBufferInfo = reinterpret_cast<const VkNativeBufferANDROID *>(extensionCreateInfo);
2062*03ce13f7SAndroid Build Coastguard Worker 				backmem.nativeBufferInfo = *nativeBufferInfo;
2063*03ce13f7SAndroid Build Coastguard Worker 				backmem.nativeBufferInfo.pNext = nullptr;
2064*03ce13f7SAndroid Build Coastguard Worker 				swapchainImage = true;
2065*03ce13f7SAndroid Build Coastguard Worker 			}
2066*03ce13f7SAndroid Build Coastguard Worker 			break;
2067*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
2068*03ce13f7SAndroid Build Coastguard Worker 			break;
2069*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
2070*03ce13f7SAndroid Build Coastguard Worker 			// Do nothing. Should be handled by vk::Image::Create()
2071*03ce13f7SAndroid Build Coastguard Worker 			break;
2072*03ce13f7SAndroid Build Coastguard Worker #endif
2073*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:
2074*03ce13f7SAndroid Build Coastguard Worker 			// Do nothing. Should be handled by vk::Image::Create()
2075*03ce13f7SAndroid Build Coastguard Worker 			break;
2076*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:
2077*03ce13f7SAndroid Build Coastguard Worker 			/* Do nothing. We don't actually need the swapchain handle yet; we'll do all the work in vkBindImageMemory2. */
2078*03ce13f7SAndroid Build Coastguard Worker 			break;
2079*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:
2080*03ce13f7SAndroid Build Coastguard Worker 			// Do nothing. This extension tells the driver which image formats will be used
2081*03ce13f7SAndroid Build Coastguard Worker 			// by the application. Swiftshader is not impacted from lacking this information,
2082*03ce13f7SAndroid Build Coastguard Worker 			// so we don't need to track the format list.
2083*03ce13f7SAndroid Build Coastguard Worker 			break;
2084*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
2085*03ce13f7SAndroid Build Coastguard Worker 			{
2086*03ce13f7SAndroid Build Coastguard Worker 				// SwiftShader does not use an image's usage info for non-debug purposes outside of
2087*03ce13f7SAndroid Build Coastguard Worker 				// vkGetPhysicalDeviceImageFormatProperties2. This also applies to separate stencil usage.
2088*03ce13f7SAndroid Build Coastguard Worker 				const VkImageStencilUsageCreateInfo *stencilUsageInfo = reinterpret_cast<const VkImageStencilUsageCreateInfo *>(extensionCreateInfo);
2089*03ce13f7SAndroid Build Coastguard Worker 				(void)stencilUsageInfo->stencilUsage;
2090*03ce13f7SAndroid Build Coastguard Worker 			}
2091*03ce13f7SAndroid Build Coastguard Worker 			break;
2092*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT:
2093*03ce13f7SAndroid Build Coastguard Worker 			{
2094*03ce13f7SAndroid Build Coastguard Worker 				// Explicitly ignored, since VK_EXT_image_drm_format_modifier is not supported
2095*03ce13f7SAndroid Build Coastguard Worker 				ASSERT(!hasDeviceExtension(VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME));
2096*03ce13f7SAndroid Build Coastguard Worker 			}
2097*03ce13f7SAndroid Build Coastguard Worker 			break;
2098*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
2099*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
2100*03ce13f7SAndroid Build Coastguard Worker 			break;
2101*03ce13f7SAndroid Build Coastguard Worker 		default:
2102*03ce13f7SAndroid Build Coastguard Worker 			// "the [driver] must skip over, without processing (other than reading the sType and pNext members) any structures in the chain with sType values not defined by [supported extenions]"
2103*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType).c_str());
2104*03ce13f7SAndroid Build Coastguard Worker 			break;
2105*03ce13f7SAndroid Build Coastguard Worker 		}
2106*03ce13f7SAndroid Build Coastguard Worker 
2107*03ce13f7SAndroid Build Coastguard Worker 		extensionCreateInfo = extensionCreateInfo->pNext;
2108*03ce13f7SAndroid Build Coastguard Worker 	}
2109*03ce13f7SAndroid Build Coastguard Worker 
2110*03ce13f7SAndroid Build Coastguard Worker 	VkResult result = vk::Image::Create(pAllocator, pCreateInfo, pImage, vk::Cast(device));
2111*03ce13f7SAndroid Build Coastguard Worker 
2112*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
2113*03ce13f7SAndroid Build Coastguard Worker 	if(swapchainImage)
2114*03ce13f7SAndroid Build Coastguard Worker 	{
2115*03ce13f7SAndroid Build Coastguard Worker 		if(result != VK_SUCCESS)
2116*03ce13f7SAndroid Build Coastguard Worker 		{
2117*03ce13f7SAndroid Build Coastguard Worker 			return result;
2118*03ce13f7SAndroid Build Coastguard Worker 		}
2119*03ce13f7SAndroid Build Coastguard Worker 
2120*03ce13f7SAndroid Build Coastguard Worker 		vk::Image *image = vk::Cast(*pImage);
2121*03ce13f7SAndroid Build Coastguard Worker 		VkMemoryRequirements memRequirements = image->getMemoryRequirements();
2122*03ce13f7SAndroid Build Coastguard Worker 
2123*03ce13f7SAndroid Build Coastguard Worker 		VkMemoryAllocateInfo allocInfo = {};
2124*03ce13f7SAndroid Build Coastguard Worker 		allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
2125*03ce13f7SAndroid Build Coastguard Worker 		allocInfo.allocationSize = memRequirements.size;
2126*03ce13f7SAndroid Build Coastguard Worker 		allocInfo.memoryTypeIndex = 0;
2127*03ce13f7SAndroid Build Coastguard Worker 
2128*03ce13f7SAndroid Build Coastguard Worker 		VkDeviceMemory devmem = { VK_NULL_HANDLE };
2129*03ce13f7SAndroid Build Coastguard Worker 		result = vkAllocateMemory(device, &allocInfo, pAllocator, &devmem);
2130*03ce13f7SAndroid Build Coastguard Worker 		if(result != VK_SUCCESS)
2131*03ce13f7SAndroid Build Coastguard Worker 		{
2132*03ce13f7SAndroid Build Coastguard Worker 			return result;
2133*03ce13f7SAndroid Build Coastguard Worker 		}
2134*03ce13f7SAndroid Build Coastguard Worker 
2135*03ce13f7SAndroid Build Coastguard Worker 		vkBindImageMemory(device, *pImage, devmem, 0);
2136*03ce13f7SAndroid Build Coastguard Worker 		backmem.externalMemory = true;
2137*03ce13f7SAndroid Build Coastguard Worker 
2138*03ce13f7SAndroid Build Coastguard Worker 		image->setBackingMemory(backmem);
2139*03ce13f7SAndroid Build Coastguard Worker 	}
2140*03ce13f7SAndroid Build Coastguard Worker #endif
2141*03ce13f7SAndroid Build Coastguard Worker 
2142*03ce13f7SAndroid Build Coastguard Worker 	return result;
2143*03ce13f7SAndroid Build Coastguard Worker }
2144*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyImage(VkDevice device,VkImage image,const VkAllocationCallbacks * pAllocator)2145*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator)
2146*03ce13f7SAndroid Build Coastguard Worker {
2147*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkImage image = %p, const VkAllocationCallbacks* pAllocator = %p)",
2148*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(image), pAllocator);
2149*03ce13f7SAndroid Build Coastguard Worker 
2150*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
2151*03ce13f7SAndroid Build Coastguard Worker 	vk::Image *img = vk::Cast(image);
2152*03ce13f7SAndroid Build Coastguard Worker 	if(img && img->hasExternalMemory())
2153*03ce13f7SAndroid Build Coastguard Worker 	{
2154*03ce13f7SAndroid Build Coastguard Worker 		vk::destroy(img->getExternalMemory(), pAllocator);
2155*03ce13f7SAndroid Build Coastguard Worker 	}
2156*03ce13f7SAndroid Build Coastguard Worker #endif
2157*03ce13f7SAndroid Build Coastguard Worker 
2158*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(image, pAllocator);
2159*03ce13f7SAndroid Build Coastguard Worker }
2160*03ce13f7SAndroid Build Coastguard Worker 
vkGetImageSubresourceLayout(VkDevice device,VkImage image,const VkImageSubresource * pSubresource,VkSubresourceLayout * pLayout)2161*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource *pSubresource, VkSubresourceLayout *pLayout)
2162*03ce13f7SAndroid Build Coastguard Worker {
2163*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkImage image = %p, const VkImageSubresource* pSubresource = %p, VkSubresourceLayout* pLayout = %p)",
2164*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(image), pSubresource, pLayout);
2165*03ce13f7SAndroid Build Coastguard Worker 
2166*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(image)->getSubresourceLayout(pSubresource, pLayout);
2167*03ce13f7SAndroid Build Coastguard Worker }
2168*03ce13f7SAndroid Build Coastguard Worker 
vkGetImageSubresourceLayout2EXT(VkDevice device,VkImage image,const VkImageSubresource2KHR * pSubresource,VkSubresourceLayout2KHR * pLayout)2169*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2EXT(VkDevice device, VkImage image, const VkImageSubresource2KHR *pSubresource, VkSubresourceLayout2KHR *pLayout)
2170*03ce13f7SAndroid Build Coastguard Worker {
2171*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkImage image = %p, const VkImageSubresource2KHR* pSubresource = %p, VkSubresourceLayout2KHR* pLayout = %p)",
2172*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(image), pSubresource, pLayout);
2173*03ce13f7SAndroid Build Coastguard Worker 
2174*03ce13f7SAndroid Build Coastguard Worker 	// If tiling is OPTIMAL, this doesn't need to be done, but it's harmless especially since
2175*03ce13f7SAndroid Build Coastguard Worker 	// LINEAR and OPTIMAL are the same.
2176*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(image)->getSubresourceLayout(&pSubresource->imageSubresource, &pLayout->subresourceLayout);
2177*03ce13f7SAndroid Build Coastguard Worker 
2178*03ce13f7SAndroid Build Coastguard Worker 	VkBaseOutStructure *extInfo = reinterpret_cast<VkBaseOutStructure *>(pLayout->pNext);
2179*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
2180*03ce13f7SAndroid Build Coastguard Worker 	{
2181*03ce13f7SAndroid Build Coastguard Worker 		switch(extInfo->sType)
2182*03ce13f7SAndroid Build Coastguard Worker 		{
2183*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT:
2184*03ce13f7SAndroid Build Coastguard Worker 			{
2185*03ce13f7SAndroid Build Coastguard Worker 				// Since the subresource layout is filled above already, get the size out of
2186*03ce13f7SAndroid Build Coastguard Worker 				// that.
2187*03ce13f7SAndroid Build Coastguard Worker 				VkSubresourceHostMemcpySizeEXT *hostMemcpySize = reinterpret_cast<VkSubresourceHostMemcpySizeEXT *>(extInfo);
2188*03ce13f7SAndroid Build Coastguard Worker 				hostMemcpySize->size = pLayout->subresourceLayout.size;
2189*03ce13f7SAndroid Build Coastguard Worker 				break;
2190*03ce13f7SAndroid Build Coastguard Worker 			}
2191*03ce13f7SAndroid Build Coastguard Worker 		default:
2192*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pLayout->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
2193*03ce13f7SAndroid Build Coastguard Worker 			break;
2194*03ce13f7SAndroid Build Coastguard Worker 		}
2195*03ce13f7SAndroid Build Coastguard Worker 
2196*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
2197*03ce13f7SAndroid Build Coastguard Worker 	}
2198*03ce13f7SAndroid Build Coastguard Worker }
2199*03ce13f7SAndroid Build Coastguard Worker 
vkCreateImageView(VkDevice device,const VkImageViewCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkImageView * pView)2200*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(VkDevice device, const VkImageViewCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkImageView *pView)
2201*03ce13f7SAndroid Build Coastguard Worker {
2202*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkImageViewCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkImageView* pView = %p)",
2203*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pView);
2204*03ce13f7SAndroid Build Coastguard Worker 
2205*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
2206*03ce13f7SAndroid Build Coastguard Worker 	{
2207*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
2208*03ce13f7SAndroid Build Coastguard Worker 	}
2209*03ce13f7SAndroid Build Coastguard Worker 
2210*03ce13f7SAndroid Build Coastguard Worker 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
2211*03ce13f7SAndroid Build Coastguard Worker 	const vk::SamplerYcbcrConversion *ycbcrConversion = nullptr;
2212*03ce13f7SAndroid Build Coastguard Worker 
2213*03ce13f7SAndroid Build Coastguard Worker 	while(extensionCreateInfo)
2214*03ce13f7SAndroid Build Coastguard Worker 	{
2215*03ce13f7SAndroid Build Coastguard Worker 		switch(extensionCreateInfo->sType)
2216*03ce13f7SAndroid Build Coastguard Worker 		{
2217*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
2218*03ce13f7SAndroid Build Coastguard Worker 			{
2219*03ce13f7SAndroid Build Coastguard Worker 				const VkImageViewUsageCreateInfo *multiviewCreateInfo = reinterpret_cast<const VkImageViewUsageCreateInfo *>(extensionCreateInfo);
2220*03ce13f7SAndroid Build Coastguard Worker 				ASSERT(!(~vk::Cast(pCreateInfo->image)->getUsage() & multiviewCreateInfo->usage));
2221*03ce13f7SAndroid Build Coastguard Worker 			}
2222*03ce13f7SAndroid Build Coastguard Worker 			break;
2223*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
2224*03ce13f7SAndroid Build Coastguard Worker 			{
2225*03ce13f7SAndroid Build Coastguard Worker 				const VkSamplerYcbcrConversionInfo *samplerYcbcrConversionInfo = reinterpret_cast<const VkSamplerYcbcrConversionInfo *>(extensionCreateInfo);
2226*03ce13f7SAndroid Build Coastguard Worker 				ycbcrConversion = vk::Cast(samplerYcbcrConversionInfo->conversion);
2227*03ce13f7SAndroid Build Coastguard Worker 
2228*03ce13f7SAndroid Build Coastguard Worker 				if(ycbcrConversion)
2229*03ce13f7SAndroid Build Coastguard Worker 				{
2230*03ce13f7SAndroid Build Coastguard Worker 					ASSERT((pCreateInfo->components.r == VK_COMPONENT_SWIZZLE_IDENTITY || pCreateInfo->components.r == VK_COMPONENT_SWIZZLE_R) &&
2231*03ce13f7SAndroid Build Coastguard Worker 					       (pCreateInfo->components.g == VK_COMPONENT_SWIZZLE_IDENTITY || pCreateInfo->components.g == VK_COMPONENT_SWIZZLE_G) &&
2232*03ce13f7SAndroid Build Coastguard Worker 					       (pCreateInfo->components.b == VK_COMPONENT_SWIZZLE_IDENTITY || pCreateInfo->components.b == VK_COMPONENT_SWIZZLE_B) &&
2233*03ce13f7SAndroid Build Coastguard Worker 					       (pCreateInfo->components.a == VK_COMPONENT_SWIZZLE_IDENTITY || pCreateInfo->components.a == VK_COMPONENT_SWIZZLE_A));
2234*03ce13f7SAndroid Build Coastguard Worker 				}
2235*03ce13f7SAndroid Build Coastguard Worker 			}
2236*03ce13f7SAndroid Build Coastguard Worker 			break;
2237*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
2238*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
2239*03ce13f7SAndroid Build Coastguard Worker 			break;
2240*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT:
2241*03ce13f7SAndroid Build Coastguard Worker 			// TODO(b/218318109): Part of the VK_EXT_image_view_min_lod extension, which we don't support.
2242*03ce13f7SAndroid Build Coastguard Worker 			// Remove when https://gitlab.khronos.org/Tracker/vk-gl-cts/-/issues/3094#note_348979 has been fixed.
2243*03ce13f7SAndroid Build Coastguard Worker 			break;
2244*03ce13f7SAndroid Build Coastguard Worker 		default:
2245*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType).c_str());
2246*03ce13f7SAndroid Build Coastguard Worker 			break;
2247*03ce13f7SAndroid Build Coastguard Worker 		}
2248*03ce13f7SAndroid Build Coastguard Worker 
2249*03ce13f7SAndroid Build Coastguard Worker 		extensionCreateInfo = extensionCreateInfo->pNext;
2250*03ce13f7SAndroid Build Coastguard Worker 	}
2251*03ce13f7SAndroid Build Coastguard Worker 
2252*03ce13f7SAndroid Build Coastguard Worker 	VkResult result = vk::ImageView::Create(pAllocator, pCreateInfo, pView, ycbcrConversion);
2253*03ce13f7SAndroid Build Coastguard Worker 	if(result == VK_SUCCESS)
2254*03ce13f7SAndroid Build Coastguard Worker 	{
2255*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(device)->registerImageView(vk::Cast(*pView));
2256*03ce13f7SAndroid Build Coastguard Worker 	}
2257*03ce13f7SAndroid Build Coastguard Worker 
2258*03ce13f7SAndroid Build Coastguard Worker 	return result;
2259*03ce13f7SAndroid Build Coastguard Worker }
2260*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyImageView(VkDevice device,VkImageView imageView,const VkAllocationCallbacks * pAllocator)2261*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks *pAllocator)
2262*03ce13f7SAndroid Build Coastguard Worker {
2263*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkImageView imageView = %p, const VkAllocationCallbacks* pAllocator = %p)",
2264*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(imageView), pAllocator);
2265*03ce13f7SAndroid Build Coastguard Worker 
2266*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(device)->unregisterImageView(vk::Cast(imageView));
2267*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(imageView, pAllocator);
2268*03ce13f7SAndroid Build Coastguard Worker }
2269*03ce13f7SAndroid Build Coastguard Worker 
vkCreateShaderModule(VkDevice device,const VkShaderModuleCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkShaderModule * pShaderModule)2270*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkShaderModule *pShaderModule)
2271*03ce13f7SAndroid Build Coastguard Worker {
2272*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkShaderModuleCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkShaderModule* pShaderModule = %p)",
2273*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pShaderModule);
2274*03ce13f7SAndroid Build Coastguard Worker 
2275*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
2276*03ce13f7SAndroid Build Coastguard Worker 	{
2277*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
2278*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
2279*03ce13f7SAndroid Build Coastguard Worker 	}
2280*03ce13f7SAndroid Build Coastguard Worker 
2281*03ce13f7SAndroid Build Coastguard Worker 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
2282*03ce13f7SAndroid Build Coastguard Worker 	while(nextInfo)
2283*03ce13f7SAndroid Build Coastguard Worker 	{
2284*03ce13f7SAndroid Build Coastguard Worker 		switch(nextInfo->sType)
2285*03ce13f7SAndroid Build Coastguard Worker 		{
2286*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
2287*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
2288*03ce13f7SAndroid Build Coastguard Worker 			break;
2289*03ce13f7SAndroid Build Coastguard Worker 		default:
2290*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType).c_str());
2291*03ce13f7SAndroid Build Coastguard Worker 			break;
2292*03ce13f7SAndroid Build Coastguard Worker 		}
2293*03ce13f7SAndroid Build Coastguard Worker 		nextInfo = nextInfo->pNext;
2294*03ce13f7SAndroid Build Coastguard Worker 	}
2295*03ce13f7SAndroid Build Coastguard Worker 
2296*03ce13f7SAndroid Build Coastguard Worker 	return vk::ShaderModule::Create(pAllocator, pCreateInfo, pShaderModule);
2297*03ce13f7SAndroid Build Coastguard Worker }
2298*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyShaderModule(VkDevice device,VkShaderModule shaderModule,const VkAllocationCallbacks * pAllocator)2299*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks *pAllocator)
2300*03ce13f7SAndroid Build Coastguard Worker {
2301*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkShaderModule shaderModule = %p, const VkAllocationCallbacks* pAllocator = %p)",
2302*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(shaderModule), pAllocator);
2303*03ce13f7SAndroid Build Coastguard Worker 
2304*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(shaderModule, pAllocator);
2305*03ce13f7SAndroid Build Coastguard Worker }
2306*03ce13f7SAndroid Build Coastguard Worker 
vkCreatePipelineCache(VkDevice device,const VkPipelineCacheCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineCache * pPipelineCache)2307*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkPipelineCache *pPipelineCache)
2308*03ce13f7SAndroid Build Coastguard Worker {
2309*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkPipelineCacheCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkPipelineCache* pPipelineCache = %p)",
2310*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pPipelineCache);
2311*03ce13f7SAndroid Build Coastguard Worker 
2312*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0 && pCreateInfo->flags != VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT)
2313*03ce13f7SAndroid Build Coastguard Worker 	{
2314*03ce13f7SAndroid Build Coastguard Worker 		// Flags must be 0 or VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT.
2315*03ce13f7SAndroid Build Coastguard Worker 		// VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT: When set, the implementation may skip any
2316*03ce13f7SAndroid Build Coastguard Worker 		// unnecessary processing needed to support simultaneous modification from multiple threads where allowed.
2317*03ce13f7SAndroid Build Coastguard Worker 		// TODO(b/246369329): Optimize PipelineCache objects when VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT is used.
2318*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
2319*03ce13f7SAndroid Build Coastguard Worker 	}
2320*03ce13f7SAndroid Build Coastguard Worker 
2321*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
2322*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
2323*03ce13f7SAndroid Build Coastguard Worker 	{
2324*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
2325*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
2326*03ce13f7SAndroid Build Coastguard Worker 	}
2327*03ce13f7SAndroid Build Coastguard Worker 
2328*03ce13f7SAndroid Build Coastguard Worker 	return vk::PipelineCache::Create(pAllocator, pCreateInfo, pPipelineCache);
2329*03ce13f7SAndroid Build Coastguard Worker }
2330*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyPipelineCache(VkDevice device,VkPipelineCache pipelineCache,const VkAllocationCallbacks * pAllocator)2331*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks *pAllocator)
2332*03ce13f7SAndroid Build Coastguard Worker {
2333*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkPipelineCache pipelineCache = %p, const VkAllocationCallbacks* pAllocator = %p)",
2334*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(pipelineCache), pAllocator);
2335*03ce13f7SAndroid Build Coastguard Worker 
2336*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(pipelineCache, pAllocator);
2337*03ce13f7SAndroid Build Coastguard Worker }
2338*03ce13f7SAndroid Build Coastguard Worker 
vkGetPipelineCacheData(VkDevice device,VkPipelineCache pipelineCache,size_t * pDataSize,void * pData)2339*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t *pDataSize, void *pData)
2340*03ce13f7SAndroid Build Coastguard Worker {
2341*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkPipelineCache pipelineCache = %p, size_t* pDataSize = %p, void* pData = %p)",
2342*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(pipelineCache), pDataSize, pData);
2343*03ce13f7SAndroid Build Coastguard Worker 
2344*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pipelineCache)->getData(pDataSize, pData);
2345*03ce13f7SAndroid Build Coastguard Worker }
2346*03ce13f7SAndroid Build Coastguard Worker 
vkMergePipelineCaches(VkDevice device,VkPipelineCache dstCache,uint32_t srcCacheCount,const VkPipelineCache * pSrcCaches)2347*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache *pSrcCaches)
2348*03ce13f7SAndroid Build Coastguard Worker {
2349*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkPipelineCache dstCache = %p, uint32_t srcCacheCount = %d, const VkPipelineCache* pSrcCaches = %p)",
2350*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(dstCache), int(srcCacheCount), pSrcCaches);
2351*03ce13f7SAndroid Build Coastguard Worker 
2352*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(dstCache)->merge(srcCacheCount, pSrcCaches);
2353*03ce13f7SAndroid Build Coastguard Worker }
2354*03ce13f7SAndroid Build Coastguard Worker 
vkCreateGraphicsPipelines(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkGraphicsPipelineCreateInfo * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines)2355*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo *pCreateInfos, const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines)
2356*03ce13f7SAndroid Build Coastguard Worker {
2357*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkPipelineCache pipelineCache = %p, uint32_t createInfoCount = %d, const VkGraphicsPipelineCreateInfo* pCreateInfos = %p, const VkAllocationCallbacks* pAllocator = %p, VkPipeline* pPipelines = %p)",
2358*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(pipelineCache), int(createInfoCount), pCreateInfos, pAllocator, pPipelines);
2359*03ce13f7SAndroid Build Coastguard Worker 
2360*03ce13f7SAndroid Build Coastguard Worker 	memset(pPipelines, 0, sizeof(void *) * createInfoCount);
2361*03ce13f7SAndroid Build Coastguard Worker 
2362*03ce13f7SAndroid Build Coastguard Worker 	VkResult errorResult = VK_SUCCESS;
2363*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < createInfoCount; i++)
2364*03ce13f7SAndroid Build Coastguard Worker 	{
2365*03ce13f7SAndroid Build Coastguard Worker 		VkResult result = vk::GraphicsPipeline::Create(pAllocator, &pCreateInfos[i], &pPipelines[i], vk::Cast(device));
2366*03ce13f7SAndroid Build Coastguard Worker 
2367*03ce13f7SAndroid Build Coastguard Worker 		if(result == VK_SUCCESS)
2368*03ce13f7SAndroid Build Coastguard Worker 		{
2369*03ce13f7SAndroid Build Coastguard Worker 			result = static_cast<vk::GraphicsPipeline *>(vk::Cast(pPipelines[i]))->compileShaders(pAllocator, &pCreateInfos[i], vk::Cast(pipelineCache));
2370*03ce13f7SAndroid Build Coastguard Worker 			if(result != VK_SUCCESS)
2371*03ce13f7SAndroid Build Coastguard Worker 			{
2372*03ce13f7SAndroid Build Coastguard Worker 				vk::destroy(pPipelines[i], pAllocator);
2373*03ce13f7SAndroid Build Coastguard Worker 			}
2374*03ce13f7SAndroid Build Coastguard Worker 		}
2375*03ce13f7SAndroid Build Coastguard Worker 
2376*03ce13f7SAndroid Build Coastguard Worker 		if(result != VK_SUCCESS)
2377*03ce13f7SAndroid Build Coastguard Worker 		{
2378*03ce13f7SAndroid Build Coastguard Worker 			// According to the Vulkan spec, section 9.4. Multiple Pipeline Creation
2379*03ce13f7SAndroid Build Coastguard Worker 			// "When an application attempts to create many pipelines in a single command,
2380*03ce13f7SAndroid Build Coastguard Worker 			//  it is possible that some subset may fail creation. In that case, the
2381*03ce13f7SAndroid Build Coastguard Worker 			//  corresponding entries in the pPipelines output array will be filled with
2382*03ce13f7SAndroid Build Coastguard Worker 			//  VK_NULL_HANDLE values. If any pipeline fails creation (for example, due to
2383*03ce13f7SAndroid Build Coastguard Worker 			//  out of memory errors), the vkCreate*Pipelines commands will return an
2384*03ce13f7SAndroid Build Coastguard Worker 			//  error code. The implementation will attempt to create all pipelines, and
2385*03ce13f7SAndroid Build Coastguard Worker 			//  only return VK_NULL_HANDLE values for those that actually failed."
2386*03ce13f7SAndroid Build Coastguard Worker 			pPipelines[i] = VK_NULL_HANDLE;
2387*03ce13f7SAndroid Build Coastguard Worker 			errorResult = result;
2388*03ce13f7SAndroid Build Coastguard Worker 
2389*03ce13f7SAndroid Build Coastguard Worker 			// VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT specifies that control
2390*03ce13f7SAndroid Build Coastguard Worker 			// will be returned to the application on failure of the corresponding pipeline
2391*03ce13f7SAndroid Build Coastguard Worker 			// rather than continuing to create additional pipelines.
2392*03ce13f7SAndroid Build Coastguard Worker 			if(pCreateInfos[i].flags & VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT)
2393*03ce13f7SAndroid Build Coastguard Worker 			{
2394*03ce13f7SAndroid Build Coastguard Worker 				return errorResult;
2395*03ce13f7SAndroid Build Coastguard Worker 			}
2396*03ce13f7SAndroid Build Coastguard Worker 		}
2397*03ce13f7SAndroid Build Coastguard Worker 	}
2398*03ce13f7SAndroid Build Coastguard Worker 
2399*03ce13f7SAndroid Build Coastguard Worker 	return errorResult;
2400*03ce13f7SAndroid Build Coastguard Worker }
2401*03ce13f7SAndroid Build Coastguard Worker 
vkCreateComputePipelines(VkDevice device,VkPipelineCache pipelineCache,uint32_t createInfoCount,const VkComputePipelineCreateInfo * pCreateInfos,const VkAllocationCallbacks * pAllocator,VkPipeline * pPipelines)2402*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo *pCreateInfos, const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines)
2403*03ce13f7SAndroid Build Coastguard Worker {
2404*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkPipelineCache pipelineCache = %p, uint32_t createInfoCount = %d, const VkComputePipelineCreateInfo* pCreateInfos = %p, const VkAllocationCallbacks* pAllocator = %p, VkPipeline* pPipelines = %p)",
2405*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(pipelineCache), int(createInfoCount), pCreateInfos, pAllocator, pPipelines);
2406*03ce13f7SAndroid Build Coastguard Worker 
2407*03ce13f7SAndroid Build Coastguard Worker 	memset(pPipelines, 0, sizeof(void *) * createInfoCount);
2408*03ce13f7SAndroid Build Coastguard Worker 
2409*03ce13f7SAndroid Build Coastguard Worker 	VkResult errorResult = VK_SUCCESS;
2410*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < createInfoCount; i++)
2411*03ce13f7SAndroid Build Coastguard Worker 	{
2412*03ce13f7SAndroid Build Coastguard Worker 		VkResult result = vk::ComputePipeline::Create(pAllocator, &pCreateInfos[i], &pPipelines[i], vk::Cast(device));
2413*03ce13f7SAndroid Build Coastguard Worker 
2414*03ce13f7SAndroid Build Coastguard Worker 		if(result == VK_SUCCESS)
2415*03ce13f7SAndroid Build Coastguard Worker 		{
2416*03ce13f7SAndroid Build Coastguard Worker 			result = static_cast<vk::ComputePipeline *>(vk::Cast(pPipelines[i]))->compileShaders(pAllocator, &pCreateInfos[i], vk::Cast(pipelineCache));
2417*03ce13f7SAndroid Build Coastguard Worker 			if(result != VK_SUCCESS)
2418*03ce13f7SAndroid Build Coastguard Worker 			{
2419*03ce13f7SAndroid Build Coastguard Worker 				vk::destroy(pPipelines[i], pAllocator);
2420*03ce13f7SAndroid Build Coastguard Worker 			}
2421*03ce13f7SAndroid Build Coastguard Worker 		}
2422*03ce13f7SAndroid Build Coastguard Worker 
2423*03ce13f7SAndroid Build Coastguard Worker 		if(result != VK_SUCCESS)
2424*03ce13f7SAndroid Build Coastguard Worker 		{
2425*03ce13f7SAndroid Build Coastguard Worker 			// According to the Vulkan spec, section 9.4. Multiple Pipeline Creation
2426*03ce13f7SAndroid Build Coastguard Worker 			// "When an application attempts to create many pipelines in a single command,
2427*03ce13f7SAndroid Build Coastguard Worker 			//  it is possible that some subset may fail creation. In that case, the
2428*03ce13f7SAndroid Build Coastguard Worker 			//  corresponding entries in the pPipelines output array will be filled with
2429*03ce13f7SAndroid Build Coastguard Worker 			//  VK_NULL_HANDLE values. If any pipeline fails creation (for example, due to
2430*03ce13f7SAndroid Build Coastguard Worker 			//  out of memory errors), the vkCreate*Pipelines commands will return an
2431*03ce13f7SAndroid Build Coastguard Worker 			//  error code. The implementation will attempt to create all pipelines, and
2432*03ce13f7SAndroid Build Coastguard Worker 			//  only return VK_NULL_HANDLE values for those that actually failed."
2433*03ce13f7SAndroid Build Coastguard Worker 			pPipelines[i] = VK_NULL_HANDLE;
2434*03ce13f7SAndroid Build Coastguard Worker 			errorResult = result;
2435*03ce13f7SAndroid Build Coastguard Worker 
2436*03ce13f7SAndroid Build Coastguard Worker 			// VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT specifies that control
2437*03ce13f7SAndroid Build Coastguard Worker 			// will be returned to the application on failure of the corresponding pipeline
2438*03ce13f7SAndroid Build Coastguard Worker 			// rather than continuing to create additional pipelines.
2439*03ce13f7SAndroid Build Coastguard Worker 			if(pCreateInfos[i].flags & VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT)
2440*03ce13f7SAndroid Build Coastguard Worker 			{
2441*03ce13f7SAndroid Build Coastguard Worker 				return errorResult;
2442*03ce13f7SAndroid Build Coastguard Worker 			}
2443*03ce13f7SAndroid Build Coastguard Worker 		}
2444*03ce13f7SAndroid Build Coastguard Worker 	}
2445*03ce13f7SAndroid Build Coastguard Worker 
2446*03ce13f7SAndroid Build Coastguard Worker 	return errorResult;
2447*03ce13f7SAndroid Build Coastguard Worker }
2448*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyPipeline(VkDevice device,VkPipeline pipeline,const VkAllocationCallbacks * pAllocator)2449*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks *pAllocator)
2450*03ce13f7SAndroid Build Coastguard Worker {
2451*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkPipeline pipeline = %p, const VkAllocationCallbacks* pAllocator = %p)",
2452*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(pipeline), pAllocator);
2453*03ce13f7SAndroid Build Coastguard Worker 
2454*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(pipeline, pAllocator);
2455*03ce13f7SAndroid Build Coastguard Worker }
2456*03ce13f7SAndroid Build Coastguard Worker 
vkCreatePipelineLayout(VkDevice device,const VkPipelineLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPipelineLayout * pPipelineLayout)2457*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkPipelineLayout *pPipelineLayout)
2458*03ce13f7SAndroid Build Coastguard Worker {
2459*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkPipelineLayoutCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkPipelineLayout* pPipelineLayout = %p)",
2460*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pPipelineLayout);
2461*03ce13f7SAndroid Build Coastguard Worker 
2462*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0 && pCreateInfo->flags != VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT)
2463*03ce13f7SAndroid Build Coastguard Worker 	{
2464*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
2465*03ce13f7SAndroid Build Coastguard Worker 	}
2466*03ce13f7SAndroid Build Coastguard Worker 
2467*03ce13f7SAndroid Build Coastguard Worker 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
2468*03ce13f7SAndroid Build Coastguard Worker 	while(nextInfo)
2469*03ce13f7SAndroid Build Coastguard Worker 	{
2470*03ce13f7SAndroid Build Coastguard Worker 		switch(nextInfo->sType)
2471*03ce13f7SAndroid Build Coastguard Worker 		{
2472*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
2473*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
2474*03ce13f7SAndroid Build Coastguard Worker 			break;
2475*03ce13f7SAndroid Build Coastguard Worker 		default:
2476*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType).c_str());
2477*03ce13f7SAndroid Build Coastguard Worker 			break;
2478*03ce13f7SAndroid Build Coastguard Worker 		}
2479*03ce13f7SAndroid Build Coastguard Worker 		nextInfo = nextInfo->pNext;
2480*03ce13f7SAndroid Build Coastguard Worker 	}
2481*03ce13f7SAndroid Build Coastguard Worker 
2482*03ce13f7SAndroid Build Coastguard Worker 	return vk::PipelineLayout::Create(pAllocator, pCreateInfo, pPipelineLayout);
2483*03ce13f7SAndroid Build Coastguard Worker }
2484*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyPipelineLayout(VkDevice device,VkPipelineLayout pipelineLayout,const VkAllocationCallbacks * pAllocator)2485*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks *pAllocator)
2486*03ce13f7SAndroid Build Coastguard Worker {
2487*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkPipelineLayout pipelineLayout = %p, const VkAllocationCallbacks* pAllocator = %p)",
2488*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(pipelineLayout), pAllocator);
2489*03ce13f7SAndroid Build Coastguard Worker 
2490*03ce13f7SAndroid Build Coastguard Worker 	vk::release(pipelineLayout, pAllocator);
2491*03ce13f7SAndroid Build Coastguard Worker }
2492*03ce13f7SAndroid Build Coastguard Worker 
vkCreateSampler(VkDevice device,const VkSamplerCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSampler * pSampler)2493*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(VkDevice device, const VkSamplerCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSampler *pSampler)
2494*03ce13f7SAndroid Build Coastguard Worker {
2495*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkSamplerCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkSampler* pSampler = %p)",
2496*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pSampler);
2497*03ce13f7SAndroid Build Coastguard Worker 
2498*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
2499*03ce13f7SAndroid Build Coastguard Worker 	{
2500*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
2501*03ce13f7SAndroid Build Coastguard Worker 	}
2502*03ce13f7SAndroid Build Coastguard Worker 
2503*03ce13f7SAndroid Build Coastguard Worker 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
2504*03ce13f7SAndroid Build Coastguard Worker 	const vk::SamplerYcbcrConversion *ycbcrConversion = nullptr;
2505*03ce13f7SAndroid Build Coastguard Worker 	VkClearColorValue borderColor = {};
2506*03ce13f7SAndroid Build Coastguard Worker 
2507*03ce13f7SAndroid Build Coastguard Worker 	while(extensionCreateInfo)
2508*03ce13f7SAndroid Build Coastguard Worker 	{
2509*03ce13f7SAndroid Build Coastguard Worker 		switch(static_cast<long>(extensionCreateInfo->sType))
2510*03ce13f7SAndroid Build Coastguard Worker 		{
2511*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
2512*03ce13f7SAndroid Build Coastguard Worker 			{
2513*03ce13f7SAndroid Build Coastguard Worker 				const VkSamplerYcbcrConversionInfo *samplerYcbcrConversionInfo =
2514*03ce13f7SAndroid Build Coastguard Worker 				    reinterpret_cast<const VkSamplerYcbcrConversionInfo *>(extensionCreateInfo);
2515*03ce13f7SAndroid Build Coastguard Worker 				ycbcrConversion = vk::Cast(samplerYcbcrConversionInfo->conversion);
2516*03ce13f7SAndroid Build Coastguard Worker 			}
2517*03ce13f7SAndroid Build Coastguard Worker 			break;
2518*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT:
2519*03ce13f7SAndroid Build Coastguard Worker 			{
2520*03ce13f7SAndroid Build Coastguard Worker 				const VkSamplerCustomBorderColorCreateInfoEXT *borderColorInfo =
2521*03ce13f7SAndroid Build Coastguard Worker 				    reinterpret_cast<const VkSamplerCustomBorderColorCreateInfoEXT *>(extensionCreateInfo);
2522*03ce13f7SAndroid Build Coastguard Worker 
2523*03ce13f7SAndroid Build Coastguard Worker 				borderColor = borderColorInfo->customBorderColor;
2524*03ce13f7SAndroid Build Coastguard Worker 			}
2525*03ce13f7SAndroid Build Coastguard Worker 			break;
2526*03ce13f7SAndroid Build Coastguard Worker 		default:
2527*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType).c_str());
2528*03ce13f7SAndroid Build Coastguard Worker 			break;
2529*03ce13f7SAndroid Build Coastguard Worker 		}
2530*03ce13f7SAndroid Build Coastguard Worker 
2531*03ce13f7SAndroid Build Coastguard Worker 		extensionCreateInfo = extensionCreateInfo->pNext;
2532*03ce13f7SAndroid Build Coastguard Worker 	}
2533*03ce13f7SAndroid Build Coastguard Worker 
2534*03ce13f7SAndroid Build Coastguard Worker 	vk::SamplerState samplerState(pCreateInfo, ycbcrConversion, borderColor);
2535*03ce13f7SAndroid Build Coastguard Worker 	uint32_t samplerID = vk::Cast(device)->indexSampler(samplerState);
2536*03ce13f7SAndroid Build Coastguard Worker 
2537*03ce13f7SAndroid Build Coastguard Worker 	VkResult result = vk::Sampler::Create(pAllocator, pCreateInfo, pSampler, samplerState, samplerID);
2538*03ce13f7SAndroid Build Coastguard Worker 
2539*03ce13f7SAndroid Build Coastguard Worker 	if(*pSampler == VK_NULL_HANDLE)
2540*03ce13f7SAndroid Build Coastguard Worker 	{
2541*03ce13f7SAndroid Build Coastguard Worker 		ASSERT(result != VK_SUCCESS);
2542*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(device)->removeSampler(samplerState);
2543*03ce13f7SAndroid Build Coastguard Worker 	}
2544*03ce13f7SAndroid Build Coastguard Worker 
2545*03ce13f7SAndroid Build Coastguard Worker 	return result;
2546*03ce13f7SAndroid Build Coastguard Worker }
2547*03ce13f7SAndroid Build Coastguard Worker 
vkDestroySampler(VkDevice device,VkSampler sampler,const VkAllocationCallbacks * pAllocator)2548*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks *pAllocator)
2549*03ce13f7SAndroid Build Coastguard Worker {
2550*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkSampler sampler = %p, const VkAllocationCallbacks* pAllocator = %p)",
2551*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(sampler), pAllocator);
2552*03ce13f7SAndroid Build Coastguard Worker 
2553*03ce13f7SAndroid Build Coastguard Worker 	if(sampler != VK_NULL_HANDLE)
2554*03ce13f7SAndroid Build Coastguard Worker 	{
2555*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(device)->removeSampler(*vk::Cast(sampler));
2556*03ce13f7SAndroid Build Coastguard Worker 
2557*03ce13f7SAndroid Build Coastguard Worker 		vk::destroy(sampler, pAllocator);
2558*03ce13f7SAndroid Build Coastguard Worker 	}
2559*03ce13f7SAndroid Build Coastguard Worker }
2560*03ce13f7SAndroid Build Coastguard Worker 
vkCreateDescriptorSetLayout(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorSetLayout * pSetLayout)2561*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDescriptorSetLayout *pSetLayout)
2562*03ce13f7SAndroid Build Coastguard Worker {
2563*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDescriptorSetLayoutCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkDescriptorSetLayout* pSetLayout = %p)",
2564*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pSetLayout);
2565*03ce13f7SAndroid Build Coastguard Worker 
2566*03ce13f7SAndroid Build Coastguard Worker 	const VkBaseInStructure *extensionCreateInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
2567*03ce13f7SAndroid Build Coastguard Worker 
2568*03ce13f7SAndroid Build Coastguard Worker 	while(extensionCreateInfo)
2569*03ce13f7SAndroid Build Coastguard Worker 	{
2570*03ce13f7SAndroid Build Coastguard Worker 		switch(extensionCreateInfo->sType)
2571*03ce13f7SAndroid Build Coastguard Worker 		{
2572*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT:
2573*03ce13f7SAndroid Build Coastguard Worker 			ASSERT(!vk::Cast(device)->hasExtension(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME));
2574*03ce13f7SAndroid Build Coastguard Worker 			break;
2575*03ce13f7SAndroid Build Coastguard Worker 		default:
2576*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType).c_str());
2577*03ce13f7SAndroid Build Coastguard Worker 			break;
2578*03ce13f7SAndroid Build Coastguard Worker 		}
2579*03ce13f7SAndroid Build Coastguard Worker 
2580*03ce13f7SAndroid Build Coastguard Worker 		extensionCreateInfo = extensionCreateInfo->pNext;
2581*03ce13f7SAndroid Build Coastguard Worker 	}
2582*03ce13f7SAndroid Build Coastguard Worker 
2583*03ce13f7SAndroid Build Coastguard Worker 	return vk::DescriptorSetLayout::Create(pAllocator, pCreateInfo, pSetLayout);
2584*03ce13f7SAndroid Build Coastguard Worker }
2585*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyDescriptorSetLayout(VkDevice device,VkDescriptorSetLayout descriptorSetLayout,const VkAllocationCallbacks * pAllocator)2586*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks *pAllocator)
2587*03ce13f7SAndroid Build Coastguard Worker {
2588*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDescriptorSetLayout descriptorSetLayout = %p, const VkAllocationCallbacks* pAllocator = %p)",
2589*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(descriptorSetLayout), pAllocator);
2590*03ce13f7SAndroid Build Coastguard Worker 
2591*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(descriptorSetLayout, pAllocator);
2592*03ce13f7SAndroid Build Coastguard Worker }
2593*03ce13f7SAndroid Build Coastguard Worker 
vkCreateDescriptorPool(VkDevice device,const VkDescriptorPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorPool * pDescriptorPool)2594*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDescriptorPool *pDescriptorPool)
2595*03ce13f7SAndroid Build Coastguard Worker {
2596*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDescriptorPoolCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkDescriptorPool* pDescriptorPool = %p)",
2597*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pDescriptorPool);
2598*03ce13f7SAndroid Build Coastguard Worker 
2599*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
2600*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
2601*03ce13f7SAndroid Build Coastguard Worker 	{
2602*03ce13f7SAndroid Build Coastguard Worker 		switch(extInfo->sType)
2603*03ce13f7SAndroid Build Coastguard Worker 		{
2604*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO:
2605*03ce13f7SAndroid Build Coastguard Worker 			break;
2606*03ce13f7SAndroid Build Coastguard Worker 		default:
2607*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
2608*03ce13f7SAndroid Build Coastguard Worker 			break;
2609*03ce13f7SAndroid Build Coastguard Worker 		}
2610*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
2611*03ce13f7SAndroid Build Coastguard Worker 	}
2612*03ce13f7SAndroid Build Coastguard Worker 
2613*03ce13f7SAndroid Build Coastguard Worker 	return vk::DescriptorPool::Create(pAllocator, pCreateInfo, pDescriptorPool);
2614*03ce13f7SAndroid Build Coastguard Worker }
2615*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyDescriptorPool(VkDevice device,VkDescriptorPool descriptorPool,const VkAllocationCallbacks * pAllocator)2616*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks *pAllocator)
2617*03ce13f7SAndroid Build Coastguard Worker {
2618*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDescriptorPool descriptorPool = %p, const VkAllocationCallbacks* pAllocator = %p)",
2619*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(descriptorPool), pAllocator);
2620*03ce13f7SAndroid Build Coastguard Worker 
2621*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(descriptorPool, pAllocator);
2622*03ce13f7SAndroid Build Coastguard Worker }
2623*03ce13f7SAndroid Build Coastguard Worker 
vkResetDescriptorPool(VkDevice device,VkDescriptorPool descriptorPool,VkDescriptorPoolResetFlags flags)2624*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags)
2625*03ce13f7SAndroid Build Coastguard Worker {
2626*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDescriptorPool descriptorPool = %p, VkDescriptorPoolResetFlags flags = 0x%08X)",
2627*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(descriptorPool), int(flags));
2628*03ce13f7SAndroid Build Coastguard Worker 
2629*03ce13f7SAndroid Build Coastguard Worker 	if(flags != 0)
2630*03ce13f7SAndroid Build Coastguard Worker 	{
2631*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
2632*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("flags 0x%08X", int(flags));
2633*03ce13f7SAndroid Build Coastguard Worker 	}
2634*03ce13f7SAndroid Build Coastguard Worker 
2635*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(descriptorPool)->reset();
2636*03ce13f7SAndroid Build Coastguard Worker }
2637*03ce13f7SAndroid Build Coastguard Worker 
vkAllocateDescriptorSets(VkDevice device,const VkDescriptorSetAllocateInfo * pAllocateInfo,VkDescriptorSet * pDescriptorSets)2638*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo *pAllocateInfo, VkDescriptorSet *pDescriptorSets)
2639*03ce13f7SAndroid Build Coastguard Worker {
2640*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDescriptorSetAllocateInfo* pAllocateInfo = %p, VkDescriptorSet* pDescriptorSets = %p)",
2641*03ce13f7SAndroid Build Coastguard Worker 	      device, pAllocateInfo, pDescriptorSets);
2642*03ce13f7SAndroid Build Coastguard Worker 
2643*03ce13f7SAndroid Build Coastguard Worker 	const VkDescriptorSetVariableDescriptorCountAllocateInfo *variableDescriptorCountAllocateInfo = nullptr;
2644*03ce13f7SAndroid Build Coastguard Worker 
2645*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pAllocateInfo->pNext);
2646*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
2647*03ce13f7SAndroid Build Coastguard Worker 	{
2648*03ce13f7SAndroid Build Coastguard Worker 		switch(extInfo->sType)
2649*03ce13f7SAndroid Build Coastguard Worker 		{
2650*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:
2651*03ce13f7SAndroid Build Coastguard Worker 			variableDescriptorCountAllocateInfo = reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfo *>(extInfo);
2652*03ce13f7SAndroid Build Coastguard Worker 			break;
2653*03ce13f7SAndroid Build Coastguard Worker 		default:
2654*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pAllocateInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
2655*03ce13f7SAndroid Build Coastguard Worker 			break;
2656*03ce13f7SAndroid Build Coastguard Worker 		}
2657*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
2658*03ce13f7SAndroid Build Coastguard Worker 	}
2659*03ce13f7SAndroid Build Coastguard Worker 
2660*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pAllocateInfo->descriptorPool)->allocateSets(pAllocateInfo->descriptorSetCount, pAllocateInfo->pSetLayouts, pDescriptorSets, variableDescriptorCountAllocateInfo);
2661*03ce13f7SAndroid Build Coastguard Worker }
2662*03ce13f7SAndroid Build Coastguard Worker 
vkFreeDescriptorSets(VkDevice device,VkDescriptorPool descriptorPool,uint32_t descriptorSetCount,const VkDescriptorSet * pDescriptorSets)2663*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet *pDescriptorSets)
2664*03ce13f7SAndroid Build Coastguard Worker {
2665*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDescriptorPool descriptorPool = %p, uint32_t descriptorSetCount = %d, const VkDescriptorSet* pDescriptorSets = %p)",
2666*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(descriptorPool), descriptorSetCount, pDescriptorSets);
2667*03ce13f7SAndroid Build Coastguard Worker 
2668*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(descriptorPool)->freeSets(descriptorSetCount, pDescriptorSets);
2669*03ce13f7SAndroid Build Coastguard Worker 
2670*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
2671*03ce13f7SAndroid Build Coastguard Worker }
2672*03ce13f7SAndroid Build Coastguard Worker 
vkUpdateDescriptorSets(VkDevice device,uint32_t descriptorWriteCount,const VkWriteDescriptorSet * pDescriptorWrites,uint32_t descriptorCopyCount,const VkCopyDescriptorSet * pDescriptorCopies)2673*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet *pDescriptorCopies)
2674*03ce13f7SAndroid Build Coastguard Worker {
2675*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, uint32_t descriptorWriteCount = %d, const VkWriteDescriptorSet* pDescriptorWrites = %p, uint32_t descriptorCopyCount = %d, const VkCopyDescriptorSet* pDescriptorCopies = %p)",
2676*03ce13f7SAndroid Build Coastguard Worker 	      device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2677*03ce13f7SAndroid Build Coastguard Worker 
2678*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(device)->updateDescriptorSets(descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
2679*03ce13f7SAndroid Build Coastguard Worker }
2680*03ce13f7SAndroid Build Coastguard Worker 
vkCreateFramebuffer(VkDevice device,const VkFramebufferCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkFramebuffer * pFramebuffer)2681*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkFramebuffer *pFramebuffer)
2682*03ce13f7SAndroid Build Coastguard Worker {
2683*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkFramebufferCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkFramebuffer* pFramebuffer = %p)",
2684*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pFramebuffer);
2685*03ce13f7SAndroid Build Coastguard Worker 
2686*03ce13f7SAndroid Build Coastguard Worker 	return vk::Framebuffer::Create(pAllocator, pCreateInfo, pFramebuffer);
2687*03ce13f7SAndroid Build Coastguard Worker }
2688*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyFramebuffer(VkDevice device,VkFramebuffer framebuffer,const VkAllocationCallbacks * pAllocator)2689*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks *pAllocator)
2690*03ce13f7SAndroid Build Coastguard Worker {
2691*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkFramebuffer framebuffer = %p, const VkAllocationCallbacks* pAllocator = %p)",
2692*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(framebuffer), pAllocator);
2693*03ce13f7SAndroid Build Coastguard Worker 
2694*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(framebuffer, pAllocator);
2695*03ce13f7SAndroid Build Coastguard Worker }
2696*03ce13f7SAndroid Build Coastguard Worker 
vkCreateRenderPass(VkDevice device,const VkRenderPassCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass)2697*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass)
2698*03ce13f7SAndroid Build Coastguard Worker {
2699*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkRenderPassCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkRenderPass* pRenderPass = %p)",
2700*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pRenderPass);
2701*03ce13f7SAndroid Build Coastguard Worker 
2702*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
2703*03ce13f7SAndroid Build Coastguard Worker 	{
2704*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
2705*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
2706*03ce13f7SAndroid Build Coastguard Worker 	}
2707*03ce13f7SAndroid Build Coastguard Worker 
2708*03ce13f7SAndroid Build Coastguard Worker 	ValidateRenderPassPNextChain(device, pCreateInfo);
2709*03ce13f7SAndroid Build Coastguard Worker 
2710*03ce13f7SAndroid Build Coastguard Worker 	return vk::RenderPass::Create(pAllocator, pCreateInfo, pRenderPass);
2711*03ce13f7SAndroid Build Coastguard Worker }
2712*03ce13f7SAndroid Build Coastguard Worker 
vkCreateRenderPass2(VkDevice device,const VkRenderPassCreateInfo2KHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkRenderPass * pRenderPass)2713*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2(VkDevice device, const VkRenderPassCreateInfo2KHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass)
2714*03ce13f7SAndroid Build Coastguard Worker {
2715*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkRenderPassCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkRenderPass* pRenderPass = %p)",
2716*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pRenderPass);
2717*03ce13f7SAndroid Build Coastguard Worker 
2718*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
2719*03ce13f7SAndroid Build Coastguard Worker 	{
2720*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
2721*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
2722*03ce13f7SAndroid Build Coastguard Worker 	}
2723*03ce13f7SAndroid Build Coastguard Worker 
2724*03ce13f7SAndroid Build Coastguard Worker 	ValidateRenderPassPNextChain(device, pCreateInfo);
2725*03ce13f7SAndroid Build Coastguard Worker 
2726*03ce13f7SAndroid Build Coastguard Worker 	return vk::RenderPass::Create(pAllocator, pCreateInfo, pRenderPass);
2727*03ce13f7SAndroid Build Coastguard Worker }
2728*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyRenderPass(VkDevice device,VkRenderPass renderPass,const VkAllocationCallbacks * pAllocator)2729*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator)
2730*03ce13f7SAndroid Build Coastguard Worker {
2731*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkRenderPass renderPass = %p, const VkAllocationCallbacks* pAllocator = %p)",
2732*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(renderPass), pAllocator);
2733*03ce13f7SAndroid Build Coastguard Worker 
2734*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(renderPass, pAllocator);
2735*03ce13f7SAndroid Build Coastguard Worker }
2736*03ce13f7SAndroid Build Coastguard Worker 
vkGetRenderAreaGranularity(VkDevice device,VkRenderPass renderPass,VkExtent2D * pGranularity)2737*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D *pGranularity)
2738*03ce13f7SAndroid Build Coastguard Worker {
2739*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkRenderPass renderPass = %p, VkExtent2D* pGranularity = %p)",
2740*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(renderPass), pGranularity);
2741*03ce13f7SAndroid Build Coastguard Worker 
2742*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(renderPass)->getRenderAreaGranularity(pGranularity);
2743*03ce13f7SAndroid Build Coastguard Worker }
2744*03ce13f7SAndroid Build Coastguard Worker 
vkCreateCommandPool(VkDevice device,const VkCommandPoolCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkCommandPool * pCommandPool)2745*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkCommandPool *pCommandPool)
2746*03ce13f7SAndroid Build Coastguard Worker {
2747*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkCommandPoolCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkCommandPool* pCommandPool = %p)",
2748*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pCommandPool);
2749*03ce13f7SAndroid Build Coastguard Worker 
2750*03ce13f7SAndroid Build Coastguard Worker 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
2751*03ce13f7SAndroid Build Coastguard Worker 	while(nextInfo)
2752*03ce13f7SAndroid Build Coastguard Worker 	{
2753*03ce13f7SAndroid Build Coastguard Worker 		switch(nextInfo->sType)
2754*03ce13f7SAndroid Build Coastguard Worker 		{
2755*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
2756*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
2757*03ce13f7SAndroid Build Coastguard Worker 			break;
2758*03ce13f7SAndroid Build Coastguard Worker 		default:
2759*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType).c_str());
2760*03ce13f7SAndroid Build Coastguard Worker 			break;
2761*03ce13f7SAndroid Build Coastguard Worker 		}
2762*03ce13f7SAndroid Build Coastguard Worker 		nextInfo = nextInfo->pNext;
2763*03ce13f7SAndroid Build Coastguard Worker 	}
2764*03ce13f7SAndroid Build Coastguard Worker 
2765*03ce13f7SAndroid Build Coastguard Worker 	return vk::CommandPool::Create(pAllocator, pCreateInfo, pCommandPool);
2766*03ce13f7SAndroid Build Coastguard Worker }
2767*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyCommandPool(VkDevice device,VkCommandPool commandPool,const VkAllocationCallbacks * pAllocator)2768*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks *pAllocator)
2769*03ce13f7SAndroid Build Coastguard Worker {
2770*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkCommandPool commandPool = %p, const VkAllocationCallbacks* pAllocator = %p)",
2771*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(commandPool), pAllocator);
2772*03ce13f7SAndroid Build Coastguard Worker 
2773*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(commandPool, pAllocator);
2774*03ce13f7SAndroid Build Coastguard Worker }
2775*03ce13f7SAndroid Build Coastguard Worker 
vkResetCommandPool(VkDevice device,VkCommandPool commandPool,VkCommandPoolResetFlags flags)2776*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags)
2777*03ce13f7SAndroid Build Coastguard Worker {
2778*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkCommandPool commandPool = %p, VkCommandPoolResetFlags flags = %d)",
2779*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(commandPool), int(flags));
2780*03ce13f7SAndroid Build Coastguard Worker 
2781*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(commandPool)->reset(flags);
2782*03ce13f7SAndroid Build Coastguard Worker }
2783*03ce13f7SAndroid Build Coastguard Worker 
vkAllocateCommandBuffers(VkDevice device,const VkCommandBufferAllocateInfo * pAllocateInfo,VkCommandBuffer * pCommandBuffers)2784*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo *pAllocateInfo, VkCommandBuffer *pCommandBuffers)
2785*03ce13f7SAndroid Build Coastguard Worker {
2786*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkCommandBufferAllocateInfo* pAllocateInfo = %p, VkCommandBuffer* pCommandBuffers = %p)",
2787*03ce13f7SAndroid Build Coastguard Worker 	      device, pAllocateInfo, pCommandBuffers);
2788*03ce13f7SAndroid Build Coastguard Worker 
2789*03ce13f7SAndroid Build Coastguard Worker 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pAllocateInfo->pNext);
2790*03ce13f7SAndroid Build Coastguard Worker 	while(nextInfo)
2791*03ce13f7SAndroid Build Coastguard Worker 	{
2792*03ce13f7SAndroid Build Coastguard Worker 		switch(nextInfo->sType)
2793*03ce13f7SAndroid Build Coastguard Worker 		{
2794*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
2795*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
2796*03ce13f7SAndroid Build Coastguard Worker 			break;
2797*03ce13f7SAndroid Build Coastguard Worker 		default:
2798*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pAllocateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType).c_str());
2799*03ce13f7SAndroid Build Coastguard Worker 			break;
2800*03ce13f7SAndroid Build Coastguard Worker 		}
2801*03ce13f7SAndroid Build Coastguard Worker 		nextInfo = nextInfo->pNext;
2802*03ce13f7SAndroid Build Coastguard Worker 	}
2803*03ce13f7SAndroid Build Coastguard Worker 
2804*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pAllocateInfo->commandPool)->allocateCommandBuffers(vk::Cast(device), pAllocateInfo->level, pAllocateInfo->commandBufferCount, pCommandBuffers);
2805*03ce13f7SAndroid Build Coastguard Worker }
2806*03ce13f7SAndroid Build Coastguard Worker 
vkFreeCommandBuffers(VkDevice device,VkCommandPool commandPool,uint32_t commandBufferCount,const VkCommandBuffer * pCommandBuffers)2807*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers)
2808*03ce13f7SAndroid Build Coastguard Worker {
2809*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkCommandPool commandPool = %p, uint32_t commandBufferCount = %d, const VkCommandBuffer* pCommandBuffers = %p)",
2810*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(commandPool), int(commandBufferCount), pCommandBuffers);
2811*03ce13f7SAndroid Build Coastguard Worker 
2812*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandPool)->freeCommandBuffers(commandBufferCount, pCommandBuffers);
2813*03ce13f7SAndroid Build Coastguard Worker }
2814*03ce13f7SAndroid Build Coastguard Worker 
vkBeginCommandBuffer(VkCommandBuffer commandBuffer,const VkCommandBufferBeginInfo * pBeginInfo)2815*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo *pBeginInfo)
2816*03ce13f7SAndroid Build Coastguard Worker {
2817*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkCommandBufferBeginInfo* pBeginInfo = %p)",
2818*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pBeginInfo);
2819*03ce13f7SAndroid Build Coastguard Worker 
2820*03ce13f7SAndroid Build Coastguard Worker 	auto *nextInfo = reinterpret_cast<const VkBaseInStructure *>(pBeginInfo->pNext);
2821*03ce13f7SAndroid Build Coastguard Worker 	while(nextInfo)
2822*03ce13f7SAndroid Build Coastguard Worker 	{
2823*03ce13f7SAndroid Build Coastguard Worker 		switch(nextInfo->sType)
2824*03ce13f7SAndroid Build Coastguard Worker 		{
2825*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
2826*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
2827*03ce13f7SAndroid Build Coastguard Worker 			break;
2828*03ce13f7SAndroid Build Coastguard Worker 		default:
2829*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pBeginInfo->pNext sType = %s", vk::Stringify(nextInfo->sType).c_str());
2830*03ce13f7SAndroid Build Coastguard Worker 			break;
2831*03ce13f7SAndroid Build Coastguard Worker 		}
2832*03ce13f7SAndroid Build Coastguard Worker 		nextInfo = nextInfo->pNext;
2833*03ce13f7SAndroid Build Coastguard Worker 	}
2834*03ce13f7SAndroid Build Coastguard Worker 
2835*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(commandBuffer)->begin(pBeginInfo->flags, pBeginInfo->pInheritanceInfo);
2836*03ce13f7SAndroid Build Coastguard Worker }
2837*03ce13f7SAndroid Build Coastguard Worker 
vkEndCommandBuffer(VkCommandBuffer commandBuffer)2838*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(VkCommandBuffer commandBuffer)
2839*03ce13f7SAndroid Build Coastguard Worker {
2840*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p)", commandBuffer);
2841*03ce13f7SAndroid Build Coastguard Worker 
2842*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(commandBuffer)->end();
2843*03ce13f7SAndroid Build Coastguard Worker }
2844*03ce13f7SAndroid Build Coastguard Worker 
vkResetCommandBuffer(VkCommandBuffer commandBuffer,VkCommandBufferResetFlags flags)2845*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags)
2846*03ce13f7SAndroid Build Coastguard Worker {
2847*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkCommandBufferResetFlags flags = %d)", commandBuffer, int(flags));
2848*03ce13f7SAndroid Build Coastguard Worker 
2849*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(commandBuffer)->reset(flags);
2850*03ce13f7SAndroid Build Coastguard Worker }
2851*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBindPipeline(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipeline pipeline)2852*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
2853*03ce13f7SAndroid Build Coastguard Worker {
2854*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkPipelineBindPoint pipelineBindPoint = %d, VkPipeline pipeline = %p)",
2855*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(pipelineBindPoint), static_cast<void *>(pipeline));
2856*03ce13f7SAndroid Build Coastguard Worker 
2857*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->bindPipeline(pipelineBindPoint, vk::Cast(pipeline));
2858*03ce13f7SAndroid Build Coastguard Worker }
2859*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetViewport(VkCommandBuffer commandBuffer,uint32_t firstViewport,uint32_t viewportCount,const VkViewport * pViewports)2860*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport *pViewports)
2861*03ce13f7SAndroid Build Coastguard Worker {
2862*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t firstViewport = %d, uint32_t viewportCount = %d, const VkViewport* pViewports = %p)",
2863*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(firstViewport), int(viewportCount), pViewports);
2864*03ce13f7SAndroid Build Coastguard Worker 
2865*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setViewport(firstViewport, viewportCount, pViewports);
2866*03ce13f7SAndroid Build Coastguard Worker }
2867*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetScissor(VkCommandBuffer commandBuffer,uint32_t firstScissor,uint32_t scissorCount,const VkRect2D * pScissors)2868*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D *pScissors)
2869*03ce13f7SAndroid Build Coastguard Worker {
2870*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t firstScissor = %d, uint32_t scissorCount = %d, const VkRect2D* pScissors = %p)",
2871*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(firstScissor), int(scissorCount), pScissors);
2872*03ce13f7SAndroid Build Coastguard Worker 
2873*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setScissor(firstScissor, scissorCount, pScissors);
2874*03ce13f7SAndroid Build Coastguard Worker }
2875*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetLineWidth(VkCommandBuffer commandBuffer,float lineWidth)2876*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
2877*03ce13f7SAndroid Build Coastguard Worker {
2878*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, float lineWidth = %f)", commandBuffer, lineWidth);
2879*03ce13f7SAndroid Build Coastguard Worker 
2880*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setLineWidth(lineWidth);
2881*03ce13f7SAndroid Build Coastguard Worker }
2882*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetDepthBias(VkCommandBuffer commandBuffer,float depthBiasConstantFactor,float depthBiasClamp,float depthBiasSlopeFactor)2883*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
2884*03ce13f7SAndroid Build Coastguard Worker {
2885*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, float depthBiasConstantFactor = %f, float depthBiasClamp = %f, float depthBiasSlopeFactor = %f)",
2886*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2887*03ce13f7SAndroid Build Coastguard Worker 
2888*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setDepthBias(depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
2889*03ce13f7SAndroid Build Coastguard Worker }
2890*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetBlendConstants(VkCommandBuffer commandBuffer,const float blendConstants[4])2891*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
2892*03ce13f7SAndroid Build Coastguard Worker {
2893*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const float blendConstants[4] = {%f, %f, %f, %f})",
2894*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, blendConstants[0], blendConstants[1], blendConstants[2], blendConstants[3]);
2895*03ce13f7SAndroid Build Coastguard Worker 
2896*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setBlendConstants(blendConstants);
2897*03ce13f7SAndroid Build Coastguard Worker }
2898*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetDepthBounds(VkCommandBuffer commandBuffer,float minDepthBounds,float maxDepthBounds)2899*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
2900*03ce13f7SAndroid Build Coastguard Worker {
2901*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, float minDepthBounds = %f, float maxDepthBounds = %f)",
2902*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, minDepthBounds, maxDepthBounds);
2903*03ce13f7SAndroid Build Coastguard Worker 
2904*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setDepthBounds(minDepthBounds, maxDepthBounds);
2905*03ce13f7SAndroid Build Coastguard Worker }
2906*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t compareMask)2907*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
2908*03ce13f7SAndroid Build Coastguard Worker {
2909*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkStencilFaceFlags faceMask = %d, uint32_t compareMask = %d)",
2910*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(faceMask), int(compareMask));
2911*03ce13f7SAndroid Build Coastguard Worker 
2912*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setStencilCompareMask(faceMask, compareMask);
2913*03ce13f7SAndroid Build Coastguard Worker }
2914*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t writeMask)2915*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
2916*03ce13f7SAndroid Build Coastguard Worker {
2917*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkStencilFaceFlags faceMask = %d, uint32_t writeMask = %d)",
2918*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(faceMask), int(writeMask));
2919*03ce13f7SAndroid Build Coastguard Worker 
2920*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setStencilWriteMask(faceMask, writeMask);
2921*03ce13f7SAndroid Build Coastguard Worker }
2922*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetStencilReference(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,uint32_t reference)2923*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
2924*03ce13f7SAndroid Build Coastguard Worker {
2925*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkStencilFaceFlags faceMask = %d, uint32_t reference = %d)",
2926*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(faceMask), int(reference));
2927*03ce13f7SAndroid Build Coastguard Worker 
2928*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setStencilReference(faceMask, reference);
2929*03ce13f7SAndroid Build Coastguard Worker }
2930*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer,VkPipelineBindPoint pipelineBindPoint,VkPipelineLayout layout,uint32_t firstSet,uint32_t descriptorSetCount,const VkDescriptorSet * pDescriptorSets,uint32_t dynamicOffsetCount,const uint32_t * pDynamicOffsets)2931*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet *pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t *pDynamicOffsets)
2932*03ce13f7SAndroid Build Coastguard Worker {
2933*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkPipelineBindPoint pipelineBindPoint = %d, VkPipelineLayout layout = %p, uint32_t firstSet = %d, uint32_t descriptorSetCount = %d, const VkDescriptorSet* pDescriptorSets = %p, uint32_t dynamicOffsetCount = %d, const uint32_t* pDynamicOffsets = %p)",
2934*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(pipelineBindPoint), static_cast<void *>(layout), int(firstSet), int(descriptorSetCount), pDescriptorSets, int(dynamicOffsetCount), pDynamicOffsets);
2935*03ce13f7SAndroid Build Coastguard Worker 
2936*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->bindDescriptorSets(pipelineBindPoint, vk::Cast(layout), firstSet, descriptorSetCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
2937*03ce13f7SAndroid Build Coastguard Worker }
2938*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkIndexType indexType)2939*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
2940*03ce13f7SAndroid Build Coastguard Worker {
2941*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer buffer = %p, VkDeviceSize offset = %d, VkIndexType indexType = %d)",
2942*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(buffer), int(offset), int(indexType));
2943*03ce13f7SAndroid Build Coastguard Worker 
2944*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->bindIndexBuffer(vk::Cast(buffer), offset, indexType);
2945*03ce13f7SAndroid Build Coastguard Worker }
2946*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets)2947*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer *pBuffers, const VkDeviceSize *pOffsets)
2948*03ce13f7SAndroid Build Coastguard Worker {
2949*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t firstBinding = %d, uint32_t bindingCount = %d, const VkBuffer* pBuffers = %p, const VkDeviceSize* pOffsets = %p)",
2950*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(firstBinding), int(bindingCount), pBuffers, pOffsets);
2951*03ce13f7SAndroid Build Coastguard Worker 
2952*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->bindVertexBuffers(firstBinding, bindingCount, pBuffers, pOffsets, nullptr, nullptr);
2953*03ce13f7SAndroid Build Coastguard Worker }
2954*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer,uint32_t firstBinding,uint32_t bindingCount,const VkBuffer * pBuffers,const VkDeviceSize * pOffsets,const VkDeviceSize * pSizes,const VkDeviceSize * pStrides)2955*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer *pBuffers, const VkDeviceSize *pOffsets, const VkDeviceSize *pSizes, const VkDeviceSize *pStrides)
2956*03ce13f7SAndroid Build Coastguard Worker {
2957*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t firstBinding = %d, uint32_t bindingCount = %d, const VkBuffer* pBuffers = %p, const VkDeviceSize* pOffsets = %p, const VkDeviceSize *pSizes = %p, const VkDeviceSize *pStrides = %p)",
2958*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(firstBinding), int(bindingCount), pBuffers, pOffsets, pSizes, pStrides);
2959*03ce13f7SAndroid Build Coastguard Worker 
2960*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->bindVertexBuffers(firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides);
2961*03ce13f7SAndroid Build Coastguard Worker }
2962*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetCullMode(VkCommandBuffer commandBuffer,VkCullModeFlags cullMode)2963*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetCullMode(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode)
2964*03ce13f7SAndroid Build Coastguard Worker {
2965*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkCullModeFlags cullMode = %d)",
2966*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(cullMode));
2967*03ce13f7SAndroid Build Coastguard Worker 
2968*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setCullMode(cullMode);
2969*03ce13f7SAndroid Build Coastguard Worker }
2970*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer,VkBool32 depthBoundsTestEnable)2971*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable)
2972*03ce13f7SAndroid Build Coastguard Worker {
2973*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBool32 depthBoundsTestEnable = %d)",
2974*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(depthBoundsTestEnable));
2975*03ce13f7SAndroid Build Coastguard Worker 
2976*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setDepthBoundsTestEnable(depthBoundsTestEnable);
2977*03ce13f7SAndroid Build Coastguard Worker }
2978*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer,VkCompareOp depthCompareOp)2979*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOp(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp)
2980*03ce13f7SAndroid Build Coastguard Worker {
2981*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkCompareOp depthCompareOp = %d)",
2982*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(depthCompareOp));
2983*03ce13f7SAndroid Build Coastguard Worker 
2984*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setDepthCompareOp(depthCompareOp);
2985*03ce13f7SAndroid Build Coastguard Worker }
2986*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer,VkBool32 depthTestEnable)2987*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnable(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable)
2988*03ce13f7SAndroid Build Coastguard Worker {
2989*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBool32 depthTestEnable = %d)",
2990*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(depthTestEnable));
2991*03ce13f7SAndroid Build Coastguard Worker 
2992*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setDepthTestEnable(depthTestEnable);
2993*03ce13f7SAndroid Build Coastguard Worker }
2994*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer,VkBool32 depthWriteEnable)2995*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnable(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable)
2996*03ce13f7SAndroid Build Coastguard Worker {
2997*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBool32 depthWriteEnable = %d)",
2998*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(depthWriteEnable));
2999*03ce13f7SAndroid Build Coastguard Worker 
3000*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setDepthWriteEnable(depthWriteEnable);
3001*03ce13f7SAndroid Build Coastguard Worker }
3002*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetFrontFace(VkCommandBuffer commandBuffer,VkFrontFace frontFace)3003*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFace(VkCommandBuffer commandBuffer, VkFrontFace frontFace)
3004*03ce13f7SAndroid Build Coastguard Worker {
3005*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkFrontFace frontFace = %d)",
3006*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(frontFace));
3007*03ce13f7SAndroid Build Coastguard Worker 
3008*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setFrontFace(frontFace);
3009*03ce13f7SAndroid Build Coastguard Worker }
3010*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer,VkPrimitiveTopology primitiveTopology)3011*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopology(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology)
3012*03ce13f7SAndroid Build Coastguard Worker {
3013*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkPrimitiveTopology primitiveTopology = %d)",
3014*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(primitiveTopology));
3015*03ce13f7SAndroid Build Coastguard Worker 
3016*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setPrimitiveTopology(primitiveTopology);
3017*03ce13f7SAndroid Build Coastguard Worker }
3018*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer,uint32_t scissorCount,const VkRect2D * pScissors)3019*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCount(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D *pScissors)
3020*03ce13f7SAndroid Build Coastguard Worker {
3021*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t scissorCount = %d, const VkRect2D *pScissors = %p)",
3022*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, scissorCount, pScissors);
3023*03ce13f7SAndroid Build Coastguard Worker 
3024*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setScissorWithCount(scissorCount, pScissors);
3025*03ce13f7SAndroid Build Coastguard Worker }
3026*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetStencilOp(VkCommandBuffer commandBuffer,VkStencilFaceFlags faceMask,VkStencilOp failOp,VkStencilOp passOp,VkStencilOp depthFailOp,VkCompareOp compareOp)3027*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp)
3028*03ce13f7SAndroid Build Coastguard Worker {
3029*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkStencilFaceFlags faceMask = %d, VkStencilOp failOp = %d, VkStencilOp passOp = %d, VkStencilOp depthFailOp = %d, VkCompareOp compareOp = %d)",
3030*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(faceMask), int(failOp), int(passOp), int(depthFailOp), int(compareOp));
3031*03ce13f7SAndroid Build Coastguard Worker 
3032*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setStencilOp(faceMask, failOp, passOp, depthFailOp, compareOp);
3033*03ce13f7SAndroid Build Coastguard Worker }
3034*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer,VkBool32 stencilTestEnable)3035*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnable(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable)
3036*03ce13f7SAndroid Build Coastguard Worker {
3037*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBool32 stencilTestEnable = %d)",
3038*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(stencilTestEnable));
3039*03ce13f7SAndroid Build Coastguard Worker 
3040*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setStencilTestEnable(stencilTestEnable);
3041*03ce13f7SAndroid Build Coastguard Worker }
3042*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer,uint32_t viewportCount,const VkViewport * pViewports)3043*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCount(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport *pViewports)
3044*03ce13f7SAndroid Build Coastguard Worker {
3045*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t viewportCount = %d, const VkViewport *pViewports = %p)",
3046*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, viewportCount, pViewports);
3047*03ce13f7SAndroid Build Coastguard Worker 
3048*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setViewportWithCount(viewportCount, pViewports);
3049*03ce13f7SAndroid Build Coastguard Worker }
3050*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer,VkBool32 rasterizerDiscardEnable)3051*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable)
3052*03ce13f7SAndroid Build Coastguard Worker {
3053*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBool32 rasterizerDiscardEnable = %d)",
3054*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, rasterizerDiscardEnable);
3055*03ce13f7SAndroid Build Coastguard Worker 
3056*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setRasterizerDiscardEnable(rasterizerDiscardEnable);
3057*03ce13f7SAndroid Build Coastguard Worker }
3058*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer,VkBool32 depthBiasEnable)3059*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable)
3060*03ce13f7SAndroid Build Coastguard Worker {
3061*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBool32 depthBiasEnable = %d)",
3062*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, depthBiasEnable);
3063*03ce13f7SAndroid Build Coastguard Worker 
3064*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setDepthBiasEnable(depthBiasEnable);
3065*03ce13f7SAndroid Build Coastguard Worker }
3066*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer,VkBool32 primitiveRestartEnable)3067*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable)
3068*03ce13f7SAndroid Build Coastguard Worker {
3069*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBool32 primitiveRestartEnable = %d)",
3070*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, primitiveRestartEnable);
3071*03ce13f7SAndroid Build Coastguard Worker 
3072*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setPrimitiveRestartEnable(primitiveRestartEnable);
3073*03ce13f7SAndroid Build Coastguard Worker }
3074*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetVertexInputEXT(VkCommandBuffer commandBuffer,uint32_t vertexBindingDescriptionCount,const VkVertexInputBindingDescription2EXT * pVertexBindingDescriptions,uint32_t vertexAttributeDescriptionCount,const VkVertexInputAttributeDescription2EXT * pVertexAttributeDescriptions)3075*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount,
3076*03ce13f7SAndroid Build Coastguard Worker                                                   const VkVertexInputBindingDescription2EXT *pVertexBindingDescriptions,
3077*03ce13f7SAndroid Build Coastguard Worker                                                   uint32_t vertexAttributeDescriptionCount,
3078*03ce13f7SAndroid Build Coastguard Worker                                                   const VkVertexInputAttributeDescription2EXT *pVertexAttributeDescriptions)
3079*03ce13f7SAndroid Build Coastguard Worker {
3080*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t vertexBindingDescriptionCount = %d, const VkVertexInputBindingDescription2EXT *pVertexBindingDescriptions = %p, uint32_t vertexAttributeDescriptionCount = %d, const VkVertexInputAttributeDescription2EXT *pVertexAttributeDescriptions = %p)",
3081*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions);
3082*03ce13f7SAndroid Build Coastguard Worker 
3083*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setVertexInput(vertexBindingDescriptionCount, pVertexBindingDescriptions, vertexAttributeDescriptionCount, pVertexAttributeDescriptions);
3084*03ce13f7SAndroid Build Coastguard Worker }
3085*03ce13f7SAndroid Build Coastguard Worker 
vkCmdDraw(VkCommandBuffer commandBuffer,uint32_t vertexCount,uint32_t instanceCount,uint32_t firstVertex,uint32_t firstInstance)3086*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
3087*03ce13f7SAndroid Build Coastguard Worker {
3088*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t vertexCount = %d, uint32_t instanceCount = %d, uint32_t firstVertex = %d, uint32_t firstInstance = %d)",
3089*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(vertexCount), int(instanceCount), int(firstVertex), int(firstInstance));
3090*03ce13f7SAndroid Build Coastguard Worker 
3091*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->draw(vertexCount, instanceCount, firstVertex, firstInstance);
3092*03ce13f7SAndroid Build Coastguard Worker }
3093*03ce13f7SAndroid Build Coastguard Worker 
vkCmdDrawIndexed(VkCommandBuffer commandBuffer,uint32_t indexCount,uint32_t instanceCount,uint32_t firstIndex,int32_t vertexOffset,uint32_t firstInstance)3094*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
3095*03ce13f7SAndroid Build Coastguard Worker {
3096*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t indexCount = %d, uint32_t instanceCount = %d, uint32_t firstIndex = %d, int32_t vertexOffset = %d, uint32_t firstInstance = %d)",
3097*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(indexCount), int(instanceCount), int(firstIndex), int(vertexOffset), int(firstInstance));
3098*03ce13f7SAndroid Build Coastguard Worker 
3099*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->drawIndexed(indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
3100*03ce13f7SAndroid Build Coastguard Worker }
3101*03ce13f7SAndroid Build Coastguard Worker 
vkCmdDrawIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)3102*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
3103*03ce13f7SAndroid Build Coastguard Worker {
3104*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer buffer = %p, VkDeviceSize offset = %d, uint32_t drawCount = %d, uint32_t stride = %d)",
3105*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(buffer), int(offset), int(drawCount), int(stride));
3106*03ce13f7SAndroid Build Coastguard Worker 
3107*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->drawIndirect(vk::Cast(buffer), offset, drawCount, stride);
3108*03ce13f7SAndroid Build Coastguard Worker }
3109*03ce13f7SAndroid Build Coastguard Worker 
vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,uint32_t drawCount,uint32_t stride)3110*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride)
3111*03ce13f7SAndroid Build Coastguard Worker {
3112*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer buffer = %p, VkDeviceSize offset = %d, uint32_t drawCount = %d, uint32_t stride = %d)",
3113*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(buffer), int(offset), int(drawCount), int(stride));
3114*03ce13f7SAndroid Build Coastguard Worker 
3115*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->drawIndexedIndirect(vk::Cast(buffer), offset, drawCount, stride);
3116*03ce13f7SAndroid Build Coastguard Worker }
3117*03ce13f7SAndroid Build Coastguard Worker 
vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)3118*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
3119*03ce13f7SAndroid Build Coastguard Worker {
3120*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer buffer = %p, VkDeviceSize offset = %d, VkBuffer countBuffer = %p, VkDeviceSize countBufferOffset = %d, uint32_t maxDrawCount = %d, uint32_t stride = %d",
3121*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(buffer), int(offset), static_cast<void *>(countBuffer), int(countBufferOffset), int(maxDrawCount), int(stride));
3122*03ce13f7SAndroid Build Coastguard Worker 	UNSUPPORTED("VK_KHR_draw_indirect_count");
3123*03ce13f7SAndroid Build Coastguard Worker }
3124*03ce13f7SAndroid Build Coastguard Worker 
vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset,VkBuffer countBuffer,VkDeviceSize countBufferOffset,uint32_t maxDrawCount,uint32_t stride)3125*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride)
3126*03ce13f7SAndroid Build Coastguard Worker {
3127*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer buffer = %p, VkDeviceSize offset = %d, VkBuffer countBuffer = %p, VkDeviceSize countBufferOffset = %d, uint32_t maxDrawCount = %d, uint32_t stride = %d",
3128*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(buffer), int(offset), static_cast<void *>(countBuffer), int(countBufferOffset), int(maxDrawCount), int(stride));
3129*03ce13f7SAndroid Build Coastguard Worker 	UNSUPPORTED("VK_KHR_draw_indirect_count");
3130*03ce13f7SAndroid Build Coastguard Worker }
3131*03ce13f7SAndroid Build Coastguard Worker 
vkCmdDispatch(VkCommandBuffer commandBuffer,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ)3132*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
3133*03ce13f7SAndroid Build Coastguard Worker {
3134*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t groupCountX = %d, uint32_t groupCountY = %d, uint32_t groupCountZ = %d)",
3135*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(groupCountX), int(groupCountY), int(groupCountZ));
3136*03ce13f7SAndroid Build Coastguard Worker 
3137*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->dispatch(groupCountX, groupCountY, groupCountZ);
3138*03ce13f7SAndroid Build Coastguard Worker }
3139*03ce13f7SAndroid Build Coastguard Worker 
vkCmdDispatchIndirect(VkCommandBuffer commandBuffer,VkBuffer buffer,VkDeviceSize offset)3140*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset)
3141*03ce13f7SAndroid Build Coastguard Worker {
3142*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer buffer = %p, VkDeviceSize offset = %d)",
3143*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(buffer), int(offset));
3144*03ce13f7SAndroid Build Coastguard Worker 
3145*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->dispatchIndirect(vk::Cast(buffer), offset);
3146*03ce13f7SAndroid Build Coastguard Worker }
3147*03ce13f7SAndroid Build Coastguard Worker 
vkCmdCopyBuffer(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferCopy * pRegions)3148*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy *pRegions)
3149*03ce13f7SAndroid Build Coastguard Worker {
3150*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer srcBuffer = %p, VkBuffer dstBuffer = %p, uint32_t regionCount = %d, const VkBufferCopy* pRegions = %p)",
3151*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(srcBuffer), static_cast<void *>(dstBuffer), int(regionCount), pRegions);
3152*03ce13f7SAndroid Build Coastguard Worker 
3153*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->copyBuffer(vk::CopyBufferInfo(srcBuffer, dstBuffer, regionCount, pRegions));
3154*03ce13f7SAndroid Build Coastguard Worker }
3155*03ce13f7SAndroid Build Coastguard Worker 
vkCmdCopyBuffer2(VkCommandBuffer commandBuffer,const VkCopyBufferInfo2 * pCopyBufferInfo)3156*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2 *pCopyBufferInfo)
3157*03ce13f7SAndroid Build Coastguard Worker {
3158*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkCopyBufferInfo2* pCopyBufferInfo = %p)",
3159*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pCopyBufferInfo);
3160*03ce13f7SAndroid Build Coastguard Worker 
3161*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->copyBuffer(*pCopyBufferInfo);
3162*03ce13f7SAndroid Build Coastguard Worker }
3163*03ce13f7SAndroid Build Coastguard Worker 
vkCmdCopyImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageCopy * pRegions)3164*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy *pRegions)
3165*03ce13f7SAndroid Build Coastguard Worker {
3166*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkImage srcImage = %p, VkImageLayout srcImageLayout = %d, VkImage dstImage = %p, VkImageLayout dstImageLayout = %d, uint32_t regionCount = %d, const VkImageCopy* pRegions = %p)",
3167*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(srcImage), srcImageLayout, static_cast<void *>(dstImage), dstImageLayout, int(regionCount), pRegions);
3168*03ce13f7SAndroid Build Coastguard Worker 
3169*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->copyImage(vk::CopyImageInfo(srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions));
3170*03ce13f7SAndroid Build Coastguard Worker }
3171*03ce13f7SAndroid Build Coastguard Worker 
vkCmdCopyImage2(VkCommandBuffer commandBuffer,const VkCopyImageInfo2 * pCopyImageInfo)3172*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2 *pCopyImageInfo)
3173*03ce13f7SAndroid Build Coastguard Worker {
3174*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkCopyImageInfo2* pCopyImageInfo = %p)",
3175*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pCopyImageInfo);
3176*03ce13f7SAndroid Build Coastguard Worker 
3177*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->copyImage(*pCopyImageInfo);
3178*03ce13f7SAndroid Build Coastguard Worker }
3179*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBlitImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageBlit * pRegions,VkFilter filter)3180*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit *pRegions, VkFilter filter)
3181*03ce13f7SAndroid Build Coastguard Worker {
3182*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkImage srcImage = %p, VkImageLayout srcImageLayout = %d, VkImage dstImage = %p, VkImageLayout dstImageLayout = %d, uint32_t regionCount = %d, const VkImageBlit* pRegions = %p, VkFilter filter = %d)",
3183*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(srcImage), srcImageLayout, static_cast<void *>(dstImage), dstImageLayout, int(regionCount), pRegions, filter);
3184*03ce13f7SAndroid Build Coastguard Worker 
3185*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->blitImage(vk::BlitImageInfo(srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter));
3186*03ce13f7SAndroid Build Coastguard Worker }
3187*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBlitImage2(VkCommandBuffer commandBuffer,const VkBlitImageInfo2 * pBlitImageInfo)3188*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2(VkCommandBuffer commandBuffer, const VkBlitImageInfo2 *pBlitImageInfo)
3189*03ce13f7SAndroid Build Coastguard Worker {
3190*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkBlitImageInfo2* pBlitImageInfo = %p)",
3191*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pBlitImageInfo);
3192*03ce13f7SAndroid Build Coastguard Worker 
3193*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->blitImage(*pBlitImageInfo);
3194*03ce13f7SAndroid Build Coastguard Worker }
3195*03ce13f7SAndroid Build Coastguard Worker 
vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer,VkBuffer srcBuffer,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkBufferImageCopy * pRegions)3196*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy *pRegions)
3197*03ce13f7SAndroid Build Coastguard Worker {
3198*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer srcBuffer = %p, VkImage dstImage = %p, VkImageLayout dstImageLayout = %d, uint32_t regionCount = %d, const VkBufferImageCopy* pRegions = %p)",
3199*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(srcBuffer), static_cast<void *>(dstImage), dstImageLayout, int(regionCount), pRegions);
3200*03ce13f7SAndroid Build Coastguard Worker 
3201*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->copyBufferToImage(vk::CopyBufferToImageInfo(srcBuffer, dstImage, dstImageLayout, regionCount, pRegions));
3202*03ce13f7SAndroid Build Coastguard Worker }
3203*03ce13f7SAndroid Build Coastguard Worker 
vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer,const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo)3204*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2 *pCopyBufferToImageInfo)
3205*03ce13f7SAndroid Build Coastguard Worker {
3206*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo = %p)",
3207*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pCopyBufferToImageInfo);
3208*03ce13f7SAndroid Build Coastguard Worker 
3209*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->copyBufferToImage(*pCopyBufferToImageInfo);
3210*03ce13f7SAndroid Build Coastguard Worker }
3211*03ce13f7SAndroid Build Coastguard Worker 
vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkBuffer dstBuffer,uint32_t regionCount,const VkBufferImageCopy * pRegions)3212*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy *pRegions)
3213*03ce13f7SAndroid Build Coastguard Worker {
3214*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkImage srcImage = %p, VkImageLayout srcImageLayout = %d, VkBuffer dstBuffer = %p, uint32_t regionCount = %d, const VkBufferImageCopy* pRegions = %p)",
3215*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(srcImage), int(srcImageLayout), static_cast<void *>(dstBuffer), int(regionCount), pRegions);
3216*03ce13f7SAndroid Build Coastguard Worker 
3217*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->copyImageToBuffer(vk::CopyImageToBufferInfo(srcImage, srcImageLayout, dstBuffer, regionCount, pRegions));
3218*03ce13f7SAndroid Build Coastguard Worker }
3219*03ce13f7SAndroid Build Coastguard Worker 
vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer,const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo)3220*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2 *pCopyImageToBufferInfo)
3221*03ce13f7SAndroid Build Coastguard Worker {
3222*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo = %p)",
3223*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pCopyImageToBufferInfo);
3224*03ce13f7SAndroid Build Coastguard Worker 
3225*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->copyImageToBuffer(*pCopyImageToBufferInfo);
3226*03ce13f7SAndroid Build Coastguard Worker }
3227*03ce13f7SAndroid Build Coastguard Worker 
vkCmdUpdateBuffer(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize dataSize,const void * pData)3228*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void *pData)
3229*03ce13f7SAndroid Build Coastguard Worker {
3230*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer dstBuffer = %p, VkDeviceSize dstOffset = %d, VkDeviceSize dataSize = %d, const void* pData = %p)",
3231*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(dstBuffer), int(dstOffset), int(dataSize), pData);
3232*03ce13f7SAndroid Build Coastguard Worker 
3233*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->updateBuffer(vk::Cast(dstBuffer), dstOffset, dataSize, pData);
3234*03ce13f7SAndroid Build Coastguard Worker }
3235*03ce13f7SAndroid Build Coastguard Worker 
vkCmdFillBuffer(VkCommandBuffer commandBuffer,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize size,uint32_t data)3236*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data)
3237*03ce13f7SAndroid Build Coastguard Worker {
3238*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkBuffer dstBuffer = %p, VkDeviceSize dstOffset = %d, VkDeviceSize size = %d, uint32_t data = %d)",
3239*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(dstBuffer), int(dstOffset), int(size), data);
3240*03ce13f7SAndroid Build Coastguard Worker 
3241*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->fillBuffer(vk::Cast(dstBuffer), dstOffset, size, data);
3242*03ce13f7SAndroid Build Coastguard Worker }
3243*03ce13f7SAndroid Build Coastguard Worker 
vkCmdClearColorImage(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const VkClearColorValue * pColor,uint32_t rangeCount,const VkImageSubresourceRange * pRanges)3244*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue *pColor, uint32_t rangeCount, const VkImageSubresourceRange *pRanges)
3245*03ce13f7SAndroid Build Coastguard Worker {
3246*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkImage image = %p, VkImageLayout imageLayout = %d, const VkClearColorValue* pColor = %p, uint32_t rangeCount = %d, const VkImageSubresourceRange* pRanges = %p)",
3247*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(image), int(imageLayout), pColor, int(rangeCount), pRanges);
3248*03ce13f7SAndroid Build Coastguard Worker 
3249*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->clearColorImage(vk::Cast(image), imageLayout, pColor, rangeCount, pRanges);
3250*03ce13f7SAndroid Build Coastguard Worker }
3251*03ce13f7SAndroid Build Coastguard Worker 
vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer,VkImage image,VkImageLayout imageLayout,const VkClearDepthStencilValue * pDepthStencil,uint32_t rangeCount,const VkImageSubresourceRange * pRanges)3252*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue *pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange *pRanges)
3253*03ce13f7SAndroid Build Coastguard Worker {
3254*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkImage image = %p, VkImageLayout imageLayout = %d, const VkClearDepthStencilValue* pDepthStencil = %p, uint32_t rangeCount = %d, const VkImageSubresourceRange* pRanges = %p)",
3255*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(image), int(imageLayout), pDepthStencil, int(rangeCount), pRanges);
3256*03ce13f7SAndroid Build Coastguard Worker 
3257*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->clearDepthStencilImage(vk::Cast(image), imageLayout, pDepthStencil, rangeCount, pRanges);
3258*03ce13f7SAndroid Build Coastguard Worker }
3259*03ce13f7SAndroid Build Coastguard Worker 
vkCmdClearAttachments(VkCommandBuffer commandBuffer,uint32_t attachmentCount,const VkClearAttachment * pAttachments,uint32_t rectCount,const VkClearRect * pRects)3260*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment *pAttachments, uint32_t rectCount, const VkClearRect *pRects)
3261*03ce13f7SAndroid Build Coastguard Worker {
3262*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t attachmentCount = %d, const VkClearAttachment* pAttachments = %p, uint32_t rectCount = %d, const VkClearRect* pRects = %p)",
3263*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(attachmentCount), pAttachments, int(rectCount), pRects);
3264*03ce13f7SAndroid Build Coastguard Worker 
3265*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->clearAttachments(attachmentCount, pAttachments, rectCount, pRects);
3266*03ce13f7SAndroid Build Coastguard Worker }
3267*03ce13f7SAndroid Build Coastguard Worker 
vkCmdResolveImage(VkCommandBuffer commandBuffer,VkImage srcImage,VkImageLayout srcImageLayout,VkImage dstImage,VkImageLayout dstImageLayout,uint32_t regionCount,const VkImageResolve * pRegions)3268*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve *pRegions)
3269*03ce13f7SAndroid Build Coastguard Worker {
3270*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkImage srcImage = %p, VkImageLayout srcImageLayout = %d, VkImage dstImage = %p, VkImageLayout dstImageLayout = %d, uint32_t regionCount = %d, const VkImageResolve* pRegions = %p)",
3271*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(srcImage), int(srcImageLayout), static_cast<void *>(dstImage), int(dstImageLayout), regionCount, pRegions);
3272*03ce13f7SAndroid Build Coastguard Worker 
3273*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->resolveImage(vk::ResolveImageInfo(srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions));
3274*03ce13f7SAndroid Build Coastguard Worker }
3275*03ce13f7SAndroid Build Coastguard Worker 
vkCmdResolveImage2(VkCommandBuffer commandBuffer,const VkResolveImageInfo2 * pResolveImageInfo)3276*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2(VkCommandBuffer commandBuffer, const VkResolveImageInfo2 *pResolveImageInfo)
3277*03ce13f7SAndroid Build Coastguard Worker {
3278*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkResolveImageInfo2* pResolveImageInfo = %p)",
3279*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pResolveImageInfo);
3280*03ce13f7SAndroid Build Coastguard Worker 
3281*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->resolveImage(*pResolveImageInfo);
3282*03ce13f7SAndroid Build Coastguard Worker }
3283*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetEvent(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask)3284*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
3285*03ce13f7SAndroid Build Coastguard Worker {
3286*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkEvent event = %p, VkPipelineStageFlags stageMask = %d)",
3287*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(event), int(stageMask));
3288*03ce13f7SAndroid Build Coastguard Worker 
3289*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setEvent(vk::Cast(event), vk::DependencyInfo(stageMask, stageMask, VkDependencyFlags(0), 0, nullptr, 0, nullptr, 0, nullptr));
3290*03ce13f7SAndroid Build Coastguard Worker }
3291*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetEvent2(VkCommandBuffer commandBuffer,VkEvent event,const VkDependencyInfo * pDependencyInfo)3292*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo *pDependencyInfo)
3293*03ce13f7SAndroid Build Coastguard Worker {
3294*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkEvent event = %p, const VkDependencyInfo* pDependencyInfo = %p)",
3295*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(event), pDependencyInfo);
3296*03ce13f7SAndroid Build Coastguard Worker 
3297*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setEvent(vk::Cast(event), *pDependencyInfo);
3298*03ce13f7SAndroid Build Coastguard Worker }
3299*03ce13f7SAndroid Build Coastguard Worker 
vkCmdResetEvent(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags stageMask)3300*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask)
3301*03ce13f7SAndroid Build Coastguard Worker {
3302*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkEvent event = %p, VkPipelineStageFlags stageMask = %d)",
3303*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(event), int(stageMask));
3304*03ce13f7SAndroid Build Coastguard Worker 
3305*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->resetEvent(vk::Cast(event), stageMask);
3306*03ce13f7SAndroid Build Coastguard Worker }
3307*03ce13f7SAndroid Build Coastguard Worker 
vkCmdResetEvent2(VkCommandBuffer commandBuffer,VkEvent event,VkPipelineStageFlags2 stageMask)3308*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask)
3309*03ce13f7SAndroid Build Coastguard Worker {
3310*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkEvent event = %p, VkPipelineStageFlags2 stageMask = %d)",
3311*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(event), int(stageMask));
3312*03ce13f7SAndroid Build Coastguard Worker 
3313*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->resetEvent(vk::Cast(event), stageMask);
3314*03ce13f7SAndroid Build Coastguard Worker }
3315*03ce13f7SAndroid Build Coastguard Worker 
vkCmdWaitEvents(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)3316*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(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)
3317*03ce13f7SAndroid Build Coastguard Worker {
3318*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t eventCount = %d, const VkEvent* pEvents = %p, VkPipelineStageFlags srcStageMask = 0x%08X, VkPipelineStageFlags dstStageMask = 0x%08X, uint32_t memoryBarrierCount = %d, const VkMemoryBarrier* pMemoryBarriers = %p, uint32_t bufferMemoryBarrierCount = %d, const VkBufferMemoryBarrier* pBufferMemoryBarriers = %p, uint32_t imageMemoryBarrierCount = %d, const VkImageMemoryBarrier* pImageMemoryBarriers = %p)",
3319*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(eventCount), pEvents, int(srcStageMask), int(dstStageMask), int(memoryBarrierCount), pMemoryBarriers, int(bufferMemoryBarrierCount), pBufferMemoryBarriers, int(imageMemoryBarrierCount), pImageMemoryBarriers);
3320*03ce13f7SAndroid Build Coastguard Worker 
3321*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->waitEvents(eventCount, pEvents, vk::DependencyInfo(srcStageMask, dstStageMask, VkDependencyFlags(0), memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers));
3322*03ce13f7SAndroid Build Coastguard Worker }
3323*03ce13f7SAndroid Build Coastguard Worker 
vkCmdWaitEvents2(VkCommandBuffer commandBuffer,uint32_t eventCount,const VkEvent * pEvents,const VkDependencyInfo * pDependencyInfos)3324*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents, const VkDependencyInfo *pDependencyInfos)
3325*03ce13f7SAndroid Build Coastguard Worker {
3326*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t eventCount = %d, const VkEvent* pEvents = %p, const VkDependencyInfo* pDependencyInfos = %p)",
3327*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(eventCount), pEvents, pDependencyInfos);
3328*03ce13f7SAndroid Build Coastguard Worker 
3329*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->waitEvents(eventCount, pEvents, *pDependencyInfos);
3330*03ce13f7SAndroid Build Coastguard Worker }
3331*03ce13f7SAndroid Build Coastguard Worker 
vkCmdPipelineBarrier(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)3332*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(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)
3333*03ce13f7SAndroid Build Coastguard Worker {
3334*03ce13f7SAndroid Build Coastguard Worker 	TRACE(
3335*03ce13f7SAndroid Build Coastguard Worker 	    "(VkCommandBuffer commandBuffer = %p, VkPipelineStageFlags srcStageMask = 0x%08X, VkPipelineStageFlags dstStageMask = 0x%08X, VkDependencyFlags dependencyFlags = %d, uint32_t memoryBarrierCount = %d, onst VkMemoryBarrier* pMemoryBarriers = %p,"
3336*03ce13f7SAndroid Build Coastguard Worker 	    " uint32_t bufferMemoryBarrierCount = %d, const VkBufferMemoryBarrier* pBufferMemoryBarriers = %p, uint32_t imageMemoryBarrierCount = %d, const VkImageMemoryBarrier* pImageMemoryBarriers = %p)",
3337*03ce13f7SAndroid Build Coastguard Worker 	    commandBuffer, int(srcStageMask), int(dstStageMask), dependencyFlags, int(memoryBarrierCount), pMemoryBarriers, int(bufferMemoryBarrierCount), pBufferMemoryBarriers, int(imageMemoryBarrierCount), pImageMemoryBarriers);
3338*03ce13f7SAndroid Build Coastguard Worker 
3339*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->pipelineBarrier(vk::DependencyInfo(srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers));
3340*03ce13f7SAndroid Build Coastguard Worker }
3341*03ce13f7SAndroid Build Coastguard Worker 
vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer,const VkDependencyInfo * pDependencyInfo)3342*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2(VkCommandBuffer commandBuffer, const VkDependencyInfo *pDependencyInfo)
3343*03ce13f7SAndroid Build Coastguard Worker {
3344*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkDependencyInfo* pDependencyInfo = %p)",
3345*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pDependencyInfo);
3346*03ce13f7SAndroid Build Coastguard Worker 
3347*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->pipelineBarrier(*pDependencyInfo);
3348*03ce13f7SAndroid Build Coastguard Worker }
3349*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBeginQuery(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query,VkQueryControlFlags flags)3350*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags)
3351*03ce13f7SAndroid Build Coastguard Worker {
3352*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkQueryPool queryPool = %p, uint32_t query = %d, VkQueryControlFlags flags = %d)",
3353*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(queryPool), query, int(flags));
3354*03ce13f7SAndroid Build Coastguard Worker 
3355*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->beginQuery(vk::Cast(queryPool), query, flags);
3356*03ce13f7SAndroid Build Coastguard Worker }
3357*03ce13f7SAndroid Build Coastguard Worker 
vkCmdEndQuery(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t query)3358*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query)
3359*03ce13f7SAndroid Build Coastguard Worker {
3360*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkQueryPool queryPool = %p, uint32_t query = %d)",
3361*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(queryPool), int(query));
3362*03ce13f7SAndroid Build Coastguard Worker 
3363*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->endQuery(vk::Cast(queryPool), query);
3364*03ce13f7SAndroid Build Coastguard Worker }
3365*03ce13f7SAndroid Build Coastguard Worker 
vkCmdResetQueryPool(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount)3366*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount)
3367*03ce13f7SAndroid Build Coastguard Worker {
3368*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkQueryPool queryPool = %p, uint32_t firstQuery = %d, uint32_t queryCount = %d)",
3369*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(queryPool), int(firstQuery), int(queryCount));
3370*03ce13f7SAndroid Build Coastguard Worker 
3371*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->resetQueryPool(vk::Cast(queryPool), firstQuery, queryCount);
3372*03ce13f7SAndroid Build Coastguard Worker }
3373*03ce13f7SAndroid Build Coastguard Worker 
vkCmdWriteTimestamp(VkCommandBuffer commandBuffer,VkPipelineStageFlagBits pipelineStage,VkQueryPool queryPool,uint32_t query)3374*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query)
3375*03ce13f7SAndroid Build Coastguard Worker {
3376*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkPipelineStageFlagBits pipelineStage = %d, VkQueryPool queryPool = %p, uint32_t query = %d)",
3377*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(pipelineStage), static_cast<void *>(queryPool), int(query));
3378*03ce13f7SAndroid Build Coastguard Worker 
3379*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->writeTimestamp(pipelineStage, vk::Cast(queryPool), query);
3380*03ce13f7SAndroid Build Coastguard Worker }
3381*03ce13f7SAndroid Build Coastguard Worker 
vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer,VkPipelineStageFlags2 stage,VkQueryPool queryPool,uint32_t query)3382*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query)
3383*03ce13f7SAndroid Build Coastguard Worker {
3384*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkPipelineStageFlags2 stage = %d, VkQueryPool queryPool = %p, uint32_t query = %d)",
3385*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, int(stage), static_cast<void *>(queryPool), int(query));
3386*03ce13f7SAndroid Build Coastguard Worker 
3387*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->writeTimestamp(stage, vk::Cast(queryPool), query);
3388*03ce13f7SAndroid Build Coastguard Worker }
3389*03ce13f7SAndroid Build Coastguard Worker 
vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount,VkBuffer dstBuffer,VkDeviceSize dstOffset,VkDeviceSize stride,VkQueryResultFlags flags)3390*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags)
3391*03ce13f7SAndroid Build Coastguard Worker {
3392*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkQueryPool queryPool = %p, uint32_t firstQuery = %d, uint32_t queryCount = %d, VkBuffer dstBuffer = %p, VkDeviceSize dstOffset = %d, VkDeviceSize stride = %d, VkQueryResultFlags flags = %d)",
3393*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(queryPool), int(firstQuery), int(queryCount), static_cast<void *>(dstBuffer), int(dstOffset), int(stride), int(flags));
3394*03ce13f7SAndroid Build Coastguard Worker 
3395*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->copyQueryPoolResults(vk::Cast(queryPool), firstQuery, queryCount, vk::Cast(dstBuffer), dstOffset, stride, flags);
3396*03ce13f7SAndroid Build Coastguard Worker }
3397*03ce13f7SAndroid Build Coastguard Worker 
vkCmdPushConstants(VkCommandBuffer commandBuffer,VkPipelineLayout layout,VkShaderStageFlags stageFlags,uint32_t offset,uint32_t size,const void * pValues)3398*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void *pValues)
3399*03ce13f7SAndroid Build Coastguard Worker {
3400*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkPipelineLayout layout = %p, VkShaderStageFlags stageFlags = %d, uint32_t offset = %d, uint32_t size = %d, const void* pValues = %p)",
3401*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, static_cast<void *>(layout), stageFlags, offset, size, pValues);
3402*03ce13f7SAndroid Build Coastguard Worker 
3403*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->pushConstants(vk::Cast(layout), stageFlags, offset, size, pValues);
3404*03ce13f7SAndroid Build Coastguard Worker }
3405*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBeginRenderPass(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,VkSubpassContents contents)3406*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo *pRenderPassBegin, VkSubpassContents contents)
3407*03ce13f7SAndroid Build Coastguard Worker {
3408*03ce13f7SAndroid Build Coastguard Worker 	VkSubpassBeginInfo subpassBeginInfo = { VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO, nullptr, contents };
3409*03ce13f7SAndroid Build Coastguard Worker 	vkCmdBeginRenderPass2(commandBuffer, pRenderPassBegin, &subpassBeginInfo);
3410*03ce13f7SAndroid Build Coastguard Worker }
3411*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,const VkSubpassBeginInfoKHR * pSubpassBeginInfo)3412*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo *pRenderPassBegin, const VkSubpassBeginInfoKHR *pSubpassBeginInfo)
3413*03ce13f7SAndroid Build Coastguard Worker {
3414*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkRenderPassBeginInfo* pRenderPassBegin = %p, const VkSubpassBeginInfoKHR* pSubpassBeginInfo = %p)",
3415*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pRenderPassBegin, pSubpassBeginInfo);
3416*03ce13f7SAndroid Build Coastguard Worker 
3417*03ce13f7SAndroid Build Coastguard Worker 	const VkBaseInStructure *renderPassBeginInfo = reinterpret_cast<const VkBaseInStructure *>(pRenderPassBegin->pNext);
3418*03ce13f7SAndroid Build Coastguard Worker 	const VkRenderPassAttachmentBeginInfo *attachmentBeginInfo = nullptr;
3419*03ce13f7SAndroid Build Coastguard Worker 	while(renderPassBeginInfo)
3420*03ce13f7SAndroid Build Coastguard Worker 	{
3421*03ce13f7SAndroid Build Coastguard Worker 		switch(renderPassBeginInfo->sType)
3422*03ce13f7SAndroid Build Coastguard Worker 		{
3423*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
3424*03ce13f7SAndroid Build Coastguard Worker 			// This extension controls which render area is used on which physical device,
3425*03ce13f7SAndroid Build Coastguard Worker 			// in order to distribute rendering between multiple physical devices.
3426*03ce13f7SAndroid Build Coastguard Worker 			// SwiftShader only has a single physical device, so this extension does nothing in this case.
3427*03ce13f7SAndroid Build Coastguard Worker 			break;
3428*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:
3429*03ce13f7SAndroid Build Coastguard Worker 			attachmentBeginInfo = reinterpret_cast<const VkRenderPassAttachmentBeginInfo *>(renderPassBeginInfo);
3430*03ce13f7SAndroid Build Coastguard Worker 			break;
3431*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MAX_ENUM:
3432*03ce13f7SAndroid Build Coastguard Worker 			// dEQP tests that this value is ignored.
3433*03ce13f7SAndroid Build Coastguard Worker 			break;
3434*03ce13f7SAndroid Build Coastguard Worker 		default:
3435*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pRenderPassBegin->pNext sType = %s", vk::Stringify(renderPassBeginInfo->sType).c_str());
3436*03ce13f7SAndroid Build Coastguard Worker 			break;
3437*03ce13f7SAndroid Build Coastguard Worker 		}
3438*03ce13f7SAndroid Build Coastguard Worker 
3439*03ce13f7SAndroid Build Coastguard Worker 		renderPassBeginInfo = renderPassBeginInfo->pNext;
3440*03ce13f7SAndroid Build Coastguard Worker 	}
3441*03ce13f7SAndroid Build Coastguard Worker 
3442*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->beginRenderPass(vk::Cast(pRenderPassBegin->renderPass), vk::Cast(pRenderPassBegin->framebuffer), pRenderPassBegin->renderArea, pRenderPassBegin->clearValueCount, pRenderPassBegin->pClearValues, pSubpassBeginInfo->contents, attachmentBeginInfo);
3443*03ce13f7SAndroid Build Coastguard Worker }
3444*03ce13f7SAndroid Build Coastguard Worker 
vkCmdNextSubpass(VkCommandBuffer commandBuffer,VkSubpassContents contents)3445*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents)
3446*03ce13f7SAndroid Build Coastguard Worker {
3447*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, VkSubpassContents contents = %d)",
3448*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, contents);
3449*03ce13f7SAndroid Build Coastguard Worker 
3450*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->nextSubpass(contents);
3451*03ce13f7SAndroid Build Coastguard Worker }
3452*03ce13f7SAndroid Build Coastguard Worker 
vkCmdNextSubpass2(VkCommandBuffer commandBuffer,const VkSubpassBeginInfoKHR * pSubpassBeginInfo,const VkSubpassEndInfoKHR * pSubpassEndInfo)3453*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2(VkCommandBuffer commandBuffer, const VkSubpassBeginInfoKHR *pSubpassBeginInfo, const VkSubpassEndInfoKHR *pSubpassEndInfo)
3454*03ce13f7SAndroid Build Coastguard Worker {
3455*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkSubpassBeginInfoKHR* pSubpassBeginInfo = %p, const VkSubpassEndInfoKHR* pSubpassEndInfo = %p)",
3456*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pSubpassBeginInfo, pSubpassEndInfo);
3457*03ce13f7SAndroid Build Coastguard Worker 
3458*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->nextSubpass(pSubpassBeginInfo->contents);
3459*03ce13f7SAndroid Build Coastguard Worker }
3460*03ce13f7SAndroid Build Coastguard Worker 
vkCmdEndRenderPass(VkCommandBuffer commandBuffer)3461*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(VkCommandBuffer commandBuffer)
3462*03ce13f7SAndroid Build Coastguard Worker {
3463*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p)", commandBuffer);
3464*03ce13f7SAndroid Build Coastguard Worker 
3465*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->endRenderPass();
3466*03ce13f7SAndroid Build Coastguard Worker }
3467*03ce13f7SAndroid Build Coastguard Worker 
vkCmdEndRenderPass2(VkCommandBuffer commandBuffer,const VkSubpassEndInfoKHR * pSubpassEndInfo)3468*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2(VkCommandBuffer commandBuffer, const VkSubpassEndInfoKHR *pSubpassEndInfo)
3469*03ce13f7SAndroid Build Coastguard Worker {
3470*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkSubpassEndInfoKHR* pSubpassEndInfo = %p)", commandBuffer, pSubpassEndInfo);
3471*03ce13f7SAndroid Build Coastguard Worker 
3472*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->endRenderPass();
3473*03ce13f7SAndroid Build Coastguard Worker }
3474*03ce13f7SAndroid Build Coastguard Worker 
vkCmdExecuteCommands(VkCommandBuffer commandBuffer,uint32_t commandBufferCount,const VkCommandBuffer * pCommandBuffers)3475*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer *pCommandBuffers)
3476*03ce13f7SAndroid Build Coastguard Worker {
3477*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t commandBufferCount = %d, const VkCommandBuffer* pCommandBuffers = %p)",
3478*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, commandBufferCount, pCommandBuffers);
3479*03ce13f7SAndroid Build Coastguard Worker 
3480*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->executeCommands(commandBufferCount, pCommandBuffers);
3481*03ce13f7SAndroid Build Coastguard Worker }
3482*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBeginRendering(VkCommandBuffer commandBuffer,const VkRenderingInfo * pRenderingInfo)3483*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering(VkCommandBuffer commandBuffer, const VkRenderingInfo *pRenderingInfo)
3484*03ce13f7SAndroid Build Coastguard Worker {
3485*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkRenderingInfo* pRenderingInfo = %p)",
3486*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pRenderingInfo);
3487*03ce13f7SAndroid Build Coastguard Worker 
3488*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->beginRendering(pRenderingInfo);
3489*03ce13f7SAndroid Build Coastguard Worker }
3490*03ce13f7SAndroid Build Coastguard Worker 
vkCmdEndRendering(VkCommandBuffer commandBuffer)3491*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering(VkCommandBuffer commandBuffer)
3492*03ce13f7SAndroid Build Coastguard Worker {
3493*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p)", commandBuffer);
3494*03ce13f7SAndroid Build Coastguard Worker 
3495*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->endRendering();
3496*03ce13f7SAndroid Build Coastguard Worker }
3497*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetRenderingAttachmentLocationsKHR(VkCommandBuffer commandBuffer,const VkRenderingAttachmentLocationInfoKHR * pLocationInfo)3498*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocationsKHR(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfoKHR *pLocationInfo)
3499*03ce13f7SAndroid Build Coastguard Worker {
3500*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p)", commandBuffer);
3501*03ce13f7SAndroid Build Coastguard Worker 
3502*03ce13f7SAndroid Build Coastguard Worker 	// No-op; the same information is provided in pipeline create info.
3503*03ce13f7SAndroid Build Coastguard Worker }
3504*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetRenderingInputAttachmentIndicesKHR(VkCommandBuffer commandBuffer,const VkRenderingInputAttachmentIndexInfoKHR * pInputAttachmentIndexInfo)3505*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndicesKHR(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfoKHR *pInputAttachmentIndexInfo)
3506*03ce13f7SAndroid Build Coastguard Worker {
3507*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p)", commandBuffer);
3508*03ce13f7SAndroid Build Coastguard Worker 
3509*03ce13f7SAndroid Build Coastguard Worker 	// No-op; the same information is provided in pipeline create info.
3510*03ce13f7SAndroid Build Coastguard Worker }
3511*03ce13f7SAndroid Build Coastguard Worker 
vkEnumerateInstanceVersion(uint32_t * pApiVersion)3512*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceVersion(uint32_t *pApiVersion)
3513*03ce13f7SAndroid Build Coastguard Worker {
3514*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(uint32_t* pApiVersion = %p)", pApiVersion);
3515*03ce13f7SAndroid Build Coastguard Worker 	*pApiVersion = vk::API_VERSION;
3516*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
3517*03ce13f7SAndroid Build Coastguard Worker }
3518*03ce13f7SAndroid Build Coastguard Worker 
vkBindBufferMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindBufferMemoryInfo * pBindInfos)3519*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo *pBindInfos)
3520*03ce13f7SAndroid Build Coastguard Worker {
3521*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, uint32_t bindInfoCount = %d, const VkBindBufferMemoryInfo* pBindInfos = %p)",
3522*03ce13f7SAndroid Build Coastguard Worker 	      device, bindInfoCount, pBindInfos);
3523*03ce13f7SAndroid Build Coastguard Worker 
3524*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < bindInfoCount; i++)
3525*03ce13f7SAndroid Build Coastguard Worker 	{
3526*03ce13f7SAndroid Build Coastguard Worker 		const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pBindInfos[i].pNext);
3527*03ce13f7SAndroid Build Coastguard Worker 		while(extInfo)
3528*03ce13f7SAndroid Build Coastguard Worker 		{
3529*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pBindInfos[%d].pNext sType = %s", i, vk::Stringify(extInfo->sType).c_str());
3530*03ce13f7SAndroid Build Coastguard Worker 			extInfo = extInfo->pNext;
3531*03ce13f7SAndroid Build Coastguard Worker 		}
3532*03ce13f7SAndroid Build Coastguard Worker 
3533*03ce13f7SAndroid Build Coastguard Worker 		if(!vk::Cast(pBindInfos[i].buffer)->canBindToMemory(vk::Cast(pBindInfos[i].memory)))
3534*03ce13f7SAndroid Build Coastguard Worker 		{
3535*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("vkBindBufferMemory2 with invalid external memory");
3536*03ce13f7SAndroid Build Coastguard Worker 			return VK_ERROR_INVALID_EXTERNAL_HANDLE;
3537*03ce13f7SAndroid Build Coastguard Worker 		}
3538*03ce13f7SAndroid Build Coastguard Worker 	}
3539*03ce13f7SAndroid Build Coastguard Worker 
3540*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < bindInfoCount; i++)
3541*03ce13f7SAndroid Build Coastguard Worker 	{
3542*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(pBindInfos[i].buffer)->bind(vk::Cast(pBindInfos[i].memory), pBindInfos[i].memoryOffset);
3543*03ce13f7SAndroid Build Coastguard Worker 	}
3544*03ce13f7SAndroid Build Coastguard Worker 
3545*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
3546*03ce13f7SAndroid Build Coastguard Worker }
3547*03ce13f7SAndroid Build Coastguard Worker 
vkBindImageMemory2(VkDevice device,uint32_t bindInfoCount,const VkBindImageMemoryInfo * pBindInfos)3548*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo *pBindInfos)
3549*03ce13f7SAndroid Build Coastguard Worker {
3550*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, uint32_t bindInfoCount = %d, const VkBindImageMemoryInfo* pBindInfos = %p)",
3551*03ce13f7SAndroid Build Coastguard Worker 	      device, bindInfoCount, pBindInfos);
3552*03ce13f7SAndroid Build Coastguard Worker 
3553*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < bindInfoCount; i++)
3554*03ce13f7SAndroid Build Coastguard Worker 	{
3555*03ce13f7SAndroid Build Coastguard Worker 		if(!vk::Cast(pBindInfos[i].image)->canBindToMemory(vk::Cast(pBindInfos[i].memory)))
3556*03ce13f7SAndroid Build Coastguard Worker 		{
3557*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("vkBindImageMemory2 with invalid external memory");
3558*03ce13f7SAndroid Build Coastguard Worker 			return VK_ERROR_OUT_OF_DEVICE_MEMORY;
3559*03ce13f7SAndroid Build Coastguard Worker 		}
3560*03ce13f7SAndroid Build Coastguard Worker 	}
3561*03ce13f7SAndroid Build Coastguard Worker 
3562*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < bindInfoCount; i++)
3563*03ce13f7SAndroid Build Coastguard Worker 	{
3564*03ce13f7SAndroid Build Coastguard Worker 		vk::DeviceMemory *memory = vk::Cast(pBindInfos[i].memory);
3565*03ce13f7SAndroid Build Coastguard Worker 		VkDeviceSize offset = pBindInfos[i].memoryOffset;
3566*03ce13f7SAndroid Build Coastguard Worker 
3567*03ce13f7SAndroid Build Coastguard Worker 		const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pBindInfos[i].pNext);
3568*03ce13f7SAndroid Build Coastguard Worker 		while(extInfo)
3569*03ce13f7SAndroid Build Coastguard Worker 		{
3570*03ce13f7SAndroid Build Coastguard Worker 			switch(extInfo->sType)
3571*03ce13f7SAndroid Build Coastguard Worker 			{
3572*03ce13f7SAndroid Build Coastguard Worker 			case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:
3573*03ce13f7SAndroid Build Coastguard Worker 				/* Do nothing */
3574*03ce13f7SAndroid Build Coastguard Worker 				break;
3575*03ce13f7SAndroid Build Coastguard Worker 
3576*03ce13f7SAndroid Build Coastguard Worker #ifndef __ANDROID__
3577*03ce13f7SAndroid Build Coastguard Worker 			case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:
3578*03ce13f7SAndroid Build Coastguard Worker 				{
3579*03ce13f7SAndroid Build Coastguard Worker 					const auto *swapchainInfo = reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR *>(extInfo);
3580*03ce13f7SAndroid Build Coastguard Worker 					memory = vk::Cast(swapchainInfo->swapchain)->getImage(swapchainInfo->imageIndex).getImageMemory();
3581*03ce13f7SAndroid Build Coastguard Worker 					offset = 0;
3582*03ce13f7SAndroid Build Coastguard Worker 				}
3583*03ce13f7SAndroid Build Coastguard Worker 				break;
3584*03ce13f7SAndroid Build Coastguard Worker #endif
3585*03ce13f7SAndroid Build Coastguard Worker 
3586*03ce13f7SAndroid Build Coastguard Worker 			default:
3587*03ce13f7SAndroid Build Coastguard Worker 				UNSUPPORTED("pBindInfos[%d].pNext sType = %s", i, vk::Stringify(extInfo->sType).c_str());
3588*03ce13f7SAndroid Build Coastguard Worker 				break;
3589*03ce13f7SAndroid Build Coastguard Worker 			}
3590*03ce13f7SAndroid Build Coastguard Worker 			extInfo = extInfo->pNext;
3591*03ce13f7SAndroid Build Coastguard Worker 		}
3592*03ce13f7SAndroid Build Coastguard Worker 
3593*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(pBindInfos[i].image)->bind(memory, offset);
3594*03ce13f7SAndroid Build Coastguard Worker 	}
3595*03ce13f7SAndroid Build Coastguard Worker 
3596*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
3597*03ce13f7SAndroid Build Coastguard Worker }
3598*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceGroupPeerMemoryFeatures(VkDevice device,uint32_t heapIndex,uint32_t localDeviceIndex,uint32_t remoteDeviceIndex,VkPeerMemoryFeatureFlags * pPeerMemoryFeatures)3599*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags *pPeerMemoryFeatures)
3600*03ce13f7SAndroid Build Coastguard Worker {
3601*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, uint32_t heapIndex = %d, uint32_t localDeviceIndex = %d, uint32_t remoteDeviceIndex = %d, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures = %p)",
3602*03ce13f7SAndroid Build Coastguard Worker 	      device, heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
3603*03ce13f7SAndroid Build Coastguard Worker 
3604*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(localDeviceIndex != remoteDeviceIndex);                 // "localDeviceIndex must not equal remoteDeviceIndex"
3605*03ce13f7SAndroid Build Coastguard Worker 	UNSUPPORTED("remoteDeviceIndex: %d", int(remoteDeviceIndex));  // Only one physical device is supported, and since the device indexes can't be equal, this should never be called.
3606*03ce13f7SAndroid Build Coastguard Worker }
3607*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetDeviceMask(VkCommandBuffer commandBuffer,uint32_t deviceMask)3608*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask(VkCommandBuffer commandBuffer, uint32_t deviceMask)
3609*03ce13f7SAndroid Build Coastguard Worker {
3610*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t deviceMask = %d", commandBuffer, deviceMask);
3611*03ce13f7SAndroid Build Coastguard Worker 
3612*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->setDeviceMask(deviceMask);
3613*03ce13f7SAndroid Build Coastguard Worker }
3614*03ce13f7SAndroid Build Coastguard Worker 
vkCmdDispatchBase(VkCommandBuffer commandBuffer,uint32_t baseGroupX,uint32_t baseGroupY,uint32_t baseGroupZ,uint32_t groupCountX,uint32_t groupCountY,uint32_t groupCountZ)3615*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
3616*03ce13f7SAndroid Build Coastguard Worker {
3617*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, baseGroupX = %u, baseGroupY = %u, baseGroupZ = %u, groupCountX = %u, groupCountY = %u, groupCountZ = %u)",
3618*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3619*03ce13f7SAndroid Build Coastguard Worker 
3620*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->dispatchBase(baseGroupX, baseGroupY, baseGroupZ, groupCountX, groupCountY, groupCountZ);
3621*03ce13f7SAndroid Build Coastguard Worker }
3622*03ce13f7SAndroid Build Coastguard Worker 
vkResetQueryPool(VkDevice device,VkQueryPool queryPool,uint32_t firstQuery,uint32_t queryCount)3623*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkResetQueryPool(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount)
3624*03ce13f7SAndroid Build Coastguard Worker {
3625*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkQueryPool queryPool = %p, uint32_t firstQuery = %d, uint32_t queryCount = %d)",
3626*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(queryPool), firstQuery, queryCount);
3627*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(queryPool)->reset(firstQuery, queryCount);
3628*03ce13f7SAndroid Build Coastguard Worker }
3629*03ce13f7SAndroid Build Coastguard Worker 
vkEnumeratePhysicalDeviceGroups(VkInstance instance,uint32_t * pPhysicalDeviceGroupCount,VkPhysicalDeviceGroupProperties * pPhysicalDeviceGroupProperties)3630*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups(VkInstance instance, uint32_t *pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties *pPhysicalDeviceGroupProperties)
3631*03ce13f7SAndroid Build Coastguard Worker {
3632*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, uint32_t* pPhysicalDeviceGroupCount = %p, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties = %p)",
3633*03ce13f7SAndroid Build Coastguard Worker 	      instance, pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
3634*03ce13f7SAndroid Build Coastguard Worker 
3635*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(instance)->getPhysicalDeviceGroups(pPhysicalDeviceGroupCount, pPhysicalDeviceGroupProperties);
3636*03ce13f7SAndroid Build Coastguard Worker }
3637*03ce13f7SAndroid Build Coastguard Worker 
vkGetImageMemoryRequirements2(VkDevice device,const VkImageMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)3638*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2(VkDevice device, const VkImageMemoryRequirementsInfo2 *pInfo, VkMemoryRequirements2 *pMemoryRequirements)
3639*03ce13f7SAndroid Build Coastguard Worker {
3640*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkImageMemoryRequirementsInfo2* pInfo = %p, VkMemoryRequirements2* pMemoryRequirements = %p)",
3641*03ce13f7SAndroid Build Coastguard Worker 	      device, pInfo, pMemoryRequirements);
3642*03ce13f7SAndroid Build Coastguard Worker 
3643*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pInfo->pNext);
3644*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
3645*03ce13f7SAndroid Build Coastguard Worker 	{
3646*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
3647*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
3648*03ce13f7SAndroid Build Coastguard Worker 	}
3649*03ce13f7SAndroid Build Coastguard Worker 
3650*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(pInfo->image)->getMemoryRequirements(pMemoryRequirements);
3651*03ce13f7SAndroid Build Coastguard Worker }
3652*03ce13f7SAndroid Build Coastguard Worker 
vkGetBufferMemoryRequirements2(VkDevice device,const VkBufferMemoryRequirementsInfo2 * pInfo,VkMemoryRequirements2 * pMemoryRequirements)3653*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2(VkDevice device, const VkBufferMemoryRequirementsInfo2 *pInfo, VkMemoryRequirements2 *pMemoryRequirements)
3654*03ce13f7SAndroid Build Coastguard Worker {
3655*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkBufferMemoryRequirementsInfo2* pInfo = %p, VkMemoryRequirements2* pMemoryRequirements = %p)",
3656*03ce13f7SAndroid Build Coastguard Worker 	      device, pInfo, pMemoryRequirements);
3657*03ce13f7SAndroid Build Coastguard Worker 
3658*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pInfo->pNext);
3659*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
3660*03ce13f7SAndroid Build Coastguard Worker 	{
3661*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
3662*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
3663*03ce13f7SAndroid Build Coastguard Worker 	}
3664*03ce13f7SAndroid Build Coastguard Worker 
3665*03ce13f7SAndroid Build Coastguard Worker 	VkBaseOutStructure *extensionRequirements = reinterpret_cast<VkBaseOutStructure *>(pMemoryRequirements->pNext);
3666*03ce13f7SAndroid Build Coastguard Worker 	while(extensionRequirements)
3667*03ce13f7SAndroid Build Coastguard Worker 	{
3668*03ce13f7SAndroid Build Coastguard Worker 		switch(extensionRequirements->sType)
3669*03ce13f7SAndroid Build Coastguard Worker 		{
3670*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
3671*03ce13f7SAndroid Build Coastguard Worker 			{
3672*03ce13f7SAndroid Build Coastguard Worker 				auto *requirements = reinterpret_cast<VkMemoryDedicatedRequirements *>(extensionRequirements);
3673*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(device)->getRequirements(requirements);
3674*03ce13f7SAndroid Build Coastguard Worker 			}
3675*03ce13f7SAndroid Build Coastguard Worker 			break;
3676*03ce13f7SAndroid Build Coastguard Worker 		default:
3677*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pMemoryRequirements->pNext sType = %s", vk::Stringify(extensionRequirements->sType).c_str());
3678*03ce13f7SAndroid Build Coastguard Worker 			break;
3679*03ce13f7SAndroid Build Coastguard Worker 		}
3680*03ce13f7SAndroid Build Coastguard Worker 
3681*03ce13f7SAndroid Build Coastguard Worker 		extensionRequirements = extensionRequirements->pNext;
3682*03ce13f7SAndroid Build Coastguard Worker 	}
3683*03ce13f7SAndroid Build Coastguard Worker 
3684*03ce13f7SAndroid Build Coastguard Worker 	vkGetBufferMemoryRequirements(device, pInfo->buffer, &(pMemoryRequirements->memoryRequirements));
3685*03ce13f7SAndroid Build Coastguard Worker }
3686*03ce13f7SAndroid Build Coastguard Worker 
vkGetImageSparseMemoryRequirements2(VkDevice device,const VkImageSparseMemoryRequirementsInfo2 * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements)3687*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2(VkDevice device, const VkImageSparseMemoryRequirementsInfo2 *pInfo, uint32_t *pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements)
3688*03ce13f7SAndroid Build Coastguard Worker {
3689*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkImageSparseMemoryRequirementsInfo2* pInfo = %p, uint32_t* pSparseMemoryRequirementCount = %p, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements = %p)",
3690*03ce13f7SAndroid Build Coastguard Worker 	      device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
3691*03ce13f7SAndroid Build Coastguard Worker 
3692*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pInfo->pNext);
3693*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
3694*03ce13f7SAndroid Build Coastguard Worker 	{
3695*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
3696*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
3697*03ce13f7SAndroid Build Coastguard Worker 	}
3698*03ce13f7SAndroid Build Coastguard Worker 
3699*03ce13f7SAndroid Build Coastguard Worker 	if(pSparseMemoryRequirements)  // Valid to be NULL
3700*03ce13f7SAndroid Build Coastguard Worker 	{
3701*03ce13f7SAndroid Build Coastguard Worker 		const auto *extensionRequirements = reinterpret_cast<const VkBaseInStructure *>(pSparseMemoryRequirements->pNext);
3702*03ce13f7SAndroid Build Coastguard Worker 		while(extensionRequirements)
3703*03ce13f7SAndroid Build Coastguard Worker 		{
3704*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pSparseMemoryRequirements->pNext sType = %s", vk::Stringify(extensionRequirements->sType).c_str());
3705*03ce13f7SAndroid Build Coastguard Worker 			extensionRequirements = extensionRequirements->pNext;
3706*03ce13f7SAndroid Build Coastguard Worker 		}
3707*03ce13f7SAndroid Build Coastguard Worker 	}
3708*03ce13f7SAndroid Build Coastguard Worker 
3709*03ce13f7SAndroid Build Coastguard Worker 	// The 'sparseBinding' feature is not supported, so images can not be created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag.
3710*03ce13f7SAndroid Build Coastguard Worker 	// "If the image was not created with VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT then pSparseMemoryRequirementCount will be set to zero and pSparseMemoryRequirements will not be written to."
3711*03ce13f7SAndroid Build Coastguard Worker 	*pSparseMemoryRequirementCount = 0;
3712*03ce13f7SAndroid Build Coastguard Worker }
3713*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceFeatures2 * pFeatures)3714*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2 *pFeatures)
3715*03ce13f7SAndroid Build Coastguard Worker {
3716*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkPhysicalDeviceFeatures2* pFeatures = %p)", physicalDevice, pFeatures);
3717*03ce13f7SAndroid Build Coastguard Worker 
3718*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(physicalDevice)->getFeatures2(pFeatures);
3719*03ce13f7SAndroid Build Coastguard Worker }
3720*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceProperties2 * pProperties)3721*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2 *pProperties)
3722*03ce13f7SAndroid Build Coastguard Worker {
3723*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkPhysicalDeviceProperties2* pProperties = %p)", physicalDevice, pProperties);
3724*03ce13f7SAndroid Build Coastguard Worker 
3725*03ce13f7SAndroid Build Coastguard Worker 	VkBaseOutStructure *extensionProperties = reinterpret_cast<VkBaseOutStructure *>(pProperties->pNext);
3726*03ce13f7SAndroid Build Coastguard Worker 	while(extensionProperties)
3727*03ce13f7SAndroid Build Coastguard Worker 	{
3728*03ce13f7SAndroid Build Coastguard Worker 		// Casting to an int since some structures, such as VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID,
3729*03ce13f7SAndroid Build Coastguard Worker 		// are not enumerated in the official Vulkan headers.
3730*03ce13f7SAndroid Build Coastguard Worker 		switch((int)(extensionProperties->sType))
3731*03ce13f7SAndroid Build Coastguard Worker 		{
3732*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
3733*03ce13f7SAndroid Build Coastguard Worker 			{
3734*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceIDProperties *>(extensionProperties);
3735*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3736*03ce13f7SAndroid Build Coastguard Worker 			}
3737*03ce13f7SAndroid Build Coastguard Worker 			break;
3738*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
3739*03ce13f7SAndroid Build Coastguard Worker 			{
3740*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceMaintenance3Properties *>(extensionProperties);
3741*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3742*03ce13f7SAndroid Build Coastguard Worker 			}
3743*03ce13f7SAndroid Build Coastguard Worker 			break;
3744*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES:
3745*03ce13f7SAndroid Build Coastguard Worker 			{
3746*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceMaintenance4Properties *>(extensionProperties);
3747*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3748*03ce13f7SAndroid Build Coastguard Worker 			}
3749*03ce13f7SAndroid Build Coastguard Worker 			break;
3750*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
3751*03ce13f7SAndroid Build Coastguard Worker 			{
3752*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceMultiviewProperties *>(extensionProperties);
3753*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3754*03ce13f7SAndroid Build Coastguard Worker 			}
3755*03ce13f7SAndroid Build Coastguard Worker 			break;
3756*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
3757*03ce13f7SAndroid Build Coastguard Worker 			{
3758*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDevicePointClippingProperties *>(extensionProperties);
3759*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3760*03ce13f7SAndroid Build Coastguard Worker 			}
3761*03ce13f7SAndroid Build Coastguard Worker 			break;
3762*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
3763*03ce13f7SAndroid Build Coastguard Worker 			{
3764*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties *>(extensionProperties);
3765*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3766*03ce13f7SAndroid Build Coastguard Worker 			}
3767*03ce13f7SAndroid Build Coastguard Worker 			break;
3768*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
3769*03ce13f7SAndroid Build Coastguard Worker 			{
3770*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceSubgroupProperties *>(extensionProperties);
3771*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3772*03ce13f7SAndroid Build Coastguard Worker 			}
3773*03ce13f7SAndroid Build Coastguard Worker 			break;
3774*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:
3775*03ce13f7SAndroid Build Coastguard Worker 			{
3776*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT *>(extensionProperties);
3777*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3778*03ce13f7SAndroid Build Coastguard Worker 			}
3779*03ce13f7SAndroid Build Coastguard Worker 			break;
3780*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES:
3781*03ce13f7SAndroid Build Coastguard Worker 			{
3782*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceDriverProperties *>(extensionProperties);
3783*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3784*03ce13f7SAndroid Build Coastguard Worker 			}
3785*03ce13f7SAndroid Build Coastguard Worker 			break;
3786*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
3787*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID:
3788*03ce13f7SAndroid Build Coastguard Worker 			{
3789*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDevicePresentationPropertiesANDROID *>(extensionProperties);
3790*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3791*03ce13f7SAndroid Build Coastguard Worker 			}
3792*03ce13f7SAndroid Build Coastguard Worker 			break;
3793*03ce13f7SAndroid Build Coastguard Worker #endif
3794*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:
3795*03ce13f7SAndroid Build Coastguard Worker 			{
3796*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceLineRasterizationPropertiesEXT *>(extensionProperties);
3797*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3798*03ce13f7SAndroid Build Coastguard Worker 			}
3799*03ce13f7SAndroid Build Coastguard Worker 			break;
3800*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT:
3801*03ce13f7SAndroid Build Coastguard Worker 			{
3802*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceProvokingVertexPropertiesEXT *>(extensionProperties);
3803*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3804*03ce13f7SAndroid Build Coastguard Worker 			}
3805*03ce13f7SAndroid Build Coastguard Worker 			break;
3806*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES:
3807*03ce13f7SAndroid Build Coastguard Worker 			{
3808*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceFloatControlsProperties *>(extensionProperties);
3809*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3810*03ce13f7SAndroid Build Coastguard Worker 			}
3811*03ce13f7SAndroid Build Coastguard Worker 			break;
3812*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES:
3813*03ce13f7SAndroid Build Coastguard Worker 			{
3814*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceVulkan11Properties *>(extensionProperties);
3815*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3816*03ce13f7SAndroid Build Coastguard Worker 			}
3817*03ce13f7SAndroid Build Coastguard Worker 			break;
3818*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES:
3819*03ce13f7SAndroid Build Coastguard Worker 			{
3820*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceSamplerFilterMinmaxProperties *>(extensionProperties);
3821*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3822*03ce13f7SAndroid Build Coastguard Worker 			}
3823*03ce13f7SAndroid Build Coastguard Worker 			break;
3824*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES:
3825*03ce13f7SAndroid Build Coastguard Worker 			{
3826*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreProperties *>(extensionProperties);
3827*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3828*03ce13f7SAndroid Build Coastguard Worker 			}
3829*03ce13f7SAndroid Build Coastguard Worker 			break;
3830*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES:
3831*03ce13f7SAndroid Build Coastguard Worker 			{
3832*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceVulkan12Properties *>(extensionProperties);
3833*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3834*03ce13f7SAndroid Build Coastguard Worker 			}
3835*03ce13f7SAndroid Build Coastguard Worker 			break;
3836*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES:
3837*03ce13f7SAndroid Build Coastguard Worker 			{
3838*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceVulkan13Properties *>(extensionProperties);
3839*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3840*03ce13f7SAndroid Build Coastguard Worker 			}
3841*03ce13f7SAndroid Build Coastguard Worker 			break;
3842*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES:
3843*03ce13f7SAndroid Build Coastguard Worker 			{
3844*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceDescriptorIndexingProperties *>(extensionProperties);
3845*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3846*03ce13f7SAndroid Build Coastguard Worker 			}
3847*03ce13f7SAndroid Build Coastguard Worker 			break;
3848*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES:
3849*03ce13f7SAndroid Build Coastguard Worker 			{
3850*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceDepthStencilResolveProperties *>(extensionProperties);
3851*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3852*03ce13f7SAndroid Build Coastguard Worker 			}
3853*03ce13f7SAndroid Build Coastguard Worker 			break;
3854*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT:
3855*03ce13f7SAndroid Build Coastguard Worker 			{
3856*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceCustomBorderColorPropertiesEXT *>(extensionProperties);
3857*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3858*03ce13f7SAndroid Build Coastguard Worker 			}
3859*03ce13f7SAndroid Build Coastguard Worker 			break;
3860*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
3861*03ce13f7SAndroid Build Coastguard Worker 			{
3862*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *>(extensionProperties);
3863*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3864*03ce13f7SAndroid Build Coastguard Worker 			}
3865*03ce13f7SAndroid Build Coastguard Worker 			break;
3866*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES:
3867*03ce13f7SAndroid Build Coastguard Worker 			{
3868*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlProperties *>(extensionProperties);
3869*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3870*03ce13f7SAndroid Build Coastguard Worker 			}
3871*03ce13f7SAndroid Build Coastguard Worker 			break;
3872*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES:
3873*03ce13f7SAndroid Build Coastguard Worker 			{
3874*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceInlineUniformBlockProperties *>(extensionProperties);
3875*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3876*03ce13f7SAndroid Build Coastguard Worker 			}
3877*03ce13f7SAndroid Build Coastguard Worker 			break;
3878*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES:
3879*03ce13f7SAndroid Build Coastguard Worker 			{
3880*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentProperties *>(extensionProperties);
3881*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3882*03ce13f7SAndroid Build Coastguard Worker 			}
3883*03ce13f7SAndroid Build Coastguard Worker 			break;
3884*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES:
3885*03ce13f7SAndroid Build Coastguard Worker 			{
3886*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceShaderIntegerDotProductProperties *>(extensionProperties);
3887*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3888*03ce13f7SAndroid Build Coastguard Worker 			}
3889*03ce13f7SAndroid Build Coastguard Worker 			break;
3890*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT:
3891*03ce13f7SAndroid Build Coastguard Worker 			{
3892*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDevicePipelineRobustnessPropertiesEXT *>(extensionProperties);
3893*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3894*03ce13f7SAndroid Build Coastguard Worker 			}
3895*03ce13f7SAndroid Build Coastguard Worker 			break;
3896*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT:
3897*03ce13f7SAndroid Build Coastguard Worker 			{
3898*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT *>(extensionProperties);
3899*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3900*03ce13f7SAndroid Build Coastguard Worker 			}
3901*03ce13f7SAndroid Build Coastguard Worker 			break;
3902*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT:
3903*03ce13f7SAndroid Build Coastguard Worker 			{
3904*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkPhysicalDeviceHostImageCopyPropertiesEXT *>(extensionProperties);
3905*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
3906*03ce13f7SAndroid Build Coastguard Worker 			}
3907*03ce13f7SAndroid Build Coastguard Worker 			break;
3908*03ce13f7SAndroid Build Coastguard Worker 		default:
3909*03ce13f7SAndroid Build Coastguard Worker 			// "the [driver] must skip over, without processing (other than reading the sType and pNext members) any structures in the chain with sType values not defined by [supported extenions]"
3910*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pProperties->pNext sType = %s", vk::Stringify(extensionProperties->sType).c_str());
3911*03ce13f7SAndroid Build Coastguard Worker 			break;
3912*03ce13f7SAndroid Build Coastguard Worker 		}
3913*03ce13f7SAndroid Build Coastguard Worker 
3914*03ce13f7SAndroid Build Coastguard Worker 		extensionProperties = extensionProperties->pNext;
3915*03ce13f7SAndroid Build Coastguard Worker 	}
3916*03ce13f7SAndroid Build Coastguard Worker 
3917*03ce13f7SAndroid Build Coastguard Worker 	vkGetPhysicalDeviceProperties(physicalDevice, &(pProperties->properties));
3918*03ce13f7SAndroid Build Coastguard Worker }
3919*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,VkFormat format,VkFormatProperties2 * pFormatProperties)3920*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2 *pFormatProperties)
3921*03ce13f7SAndroid Build Coastguard Worker {
3922*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkFormat format = %d, VkFormatProperties2* pFormatProperties = %p)",
3923*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, format, pFormatProperties);
3924*03ce13f7SAndroid Build Coastguard Worker 
3925*03ce13f7SAndroid Build Coastguard Worker 	VkBaseOutStructure *extensionProperties = reinterpret_cast<VkBaseOutStructure *>(pFormatProperties->pNext);
3926*03ce13f7SAndroid Build Coastguard Worker 	while(extensionProperties)
3927*03ce13f7SAndroid Build Coastguard Worker 	{
3928*03ce13f7SAndroid Build Coastguard Worker 		switch(extensionProperties->sType)
3929*03ce13f7SAndroid Build Coastguard Worker 		{
3930*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3:
3931*03ce13f7SAndroid Build Coastguard Worker 			{
3932*03ce13f7SAndroid Build Coastguard Worker 				auto *properties3 = reinterpret_cast<VkFormatProperties3 *>(extensionProperties);
3933*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->GetFormatProperties(format, properties3);
3934*03ce13f7SAndroid Build Coastguard Worker 			}
3935*03ce13f7SAndroid Build Coastguard Worker 			break;
3936*03ce13f7SAndroid Build Coastguard Worker 		default:
3937*03ce13f7SAndroid Build Coastguard Worker 			// "the [driver] must skip over, without processing (other than reading the sType and pNext members) any structures in the chain with sType values not defined by [supported extenions]"
3938*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pFormatProperties->pNext sType = %s", vk::Stringify(extensionProperties->sType).c_str());
3939*03ce13f7SAndroid Build Coastguard Worker 			break;
3940*03ce13f7SAndroid Build Coastguard Worker 		}
3941*03ce13f7SAndroid Build Coastguard Worker 
3942*03ce13f7SAndroid Build Coastguard Worker 		extensionProperties = extensionProperties->pNext;
3943*03ce13f7SAndroid Build Coastguard Worker 	}
3944*03ce13f7SAndroid Build Coastguard Worker 
3945*03ce13f7SAndroid Build Coastguard Worker 	vkGetPhysicalDeviceFormatProperties(physicalDevice, format, &(pFormatProperties->formatProperties));
3946*03ce13f7SAndroid Build Coastguard Worker }
3947*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceImageFormatInfo2 * pImageFormatInfo,VkImageFormatProperties2 * pImageFormatProperties)3948*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2 *pImageFormatInfo, VkImageFormatProperties2 *pImageFormatProperties)
3949*03ce13f7SAndroid Build Coastguard Worker {
3950*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo = %p, VkImageFormatProperties2* pImageFormatProperties = %p)",
3951*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pImageFormatInfo, pImageFormatProperties);
3952*03ce13f7SAndroid Build Coastguard Worker 
3953*03ce13f7SAndroid Build Coastguard Worker 	// "If the combination of parameters to vkGetPhysicalDeviceImageFormatProperties is not supported by the implementation
3954*03ce13f7SAndroid Build Coastguard Worker 	//  for use in vkCreateImage, then all members of VkImageFormatProperties will be filled with zero."
3955*03ce13f7SAndroid Build Coastguard Worker 	memset(&pImageFormatProperties->imageFormatProperties, 0, sizeof(VkImageFormatProperties));
3956*03ce13f7SAndroid Build Coastguard Worker 
3957*03ce13f7SAndroid Build Coastguard Worker 	const VkBaseInStructure *extensionFormatInfo = reinterpret_cast<const VkBaseInStructure *>(pImageFormatInfo->pNext);
3958*03ce13f7SAndroid Build Coastguard Worker 
3959*03ce13f7SAndroid Build Coastguard Worker 	const VkExternalMemoryHandleTypeFlagBits *handleType = nullptr;
3960*03ce13f7SAndroid Build Coastguard Worker 	VkImageUsageFlags stencilUsage = 0;
3961*03ce13f7SAndroid Build Coastguard Worker 	while(extensionFormatInfo)
3962*03ce13f7SAndroid Build Coastguard Worker 	{
3963*03ce13f7SAndroid Build Coastguard Worker 		switch(extensionFormatInfo->sType)
3964*03ce13f7SAndroid Build Coastguard Worker 		{
3965*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:
3966*03ce13f7SAndroid Build Coastguard Worker 			{
3967*03ce13f7SAndroid Build Coastguard Worker 				// Per the Vulkan spec on VkImageFormatListcreateInfo:
3968*03ce13f7SAndroid Build Coastguard Worker 				//     "If the pNext chain of VkImageCreateInfo includes a
3969*03ce13f7SAndroid Build Coastguard Worker 				//      VkImageFormatListCreateInfo structure, then that
3970*03ce13f7SAndroid Build Coastguard Worker 				//      structure contains a list of all formats that can be
3971*03ce13f7SAndroid Build Coastguard Worker 				//      used when creating views of this image"
3972*03ce13f7SAndroid Build Coastguard Worker 				// This limitation does not affect SwiftShader's behavior and
3973*03ce13f7SAndroid Build Coastguard Worker 				// the Vulkan Validation Layers can detect Views created with a
3974*03ce13f7SAndroid Build Coastguard Worker 				// format which is not included in that list.
3975*03ce13f7SAndroid Build Coastguard Worker 			}
3976*03ce13f7SAndroid Build Coastguard Worker 			break;
3977*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
3978*03ce13f7SAndroid Build Coastguard Worker 			{
3979*03ce13f7SAndroid Build Coastguard Worker 				const VkImageStencilUsageCreateInfo *stencilUsageInfo = reinterpret_cast<const VkImageStencilUsageCreateInfo *>(extensionFormatInfo);
3980*03ce13f7SAndroid Build Coastguard Worker 				stencilUsage = stencilUsageInfo->stencilUsage;
3981*03ce13f7SAndroid Build Coastguard Worker 			}
3982*03ce13f7SAndroid Build Coastguard Worker 			break;
3983*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
3984*03ce13f7SAndroid Build Coastguard Worker 			{
3985*03ce13f7SAndroid Build Coastguard Worker 				const VkPhysicalDeviceExternalImageFormatInfo *imageFormatInfo = reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo *>(extensionFormatInfo);
3986*03ce13f7SAndroid Build Coastguard Worker 				handleType = &(imageFormatInfo->handleType);
3987*03ce13f7SAndroid Build Coastguard Worker 			}
3988*03ce13f7SAndroid Build Coastguard Worker 			break;
3989*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT:
3990*03ce13f7SAndroid Build Coastguard Worker 			{
3991*03ce13f7SAndroid Build Coastguard Worker 				// Explicitly ignored, since VK_EXT_image_drm_format_modifier is not supported
3992*03ce13f7SAndroid Build Coastguard Worker 				ASSERT(!hasDeviceExtension(VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME));
3993*03ce13f7SAndroid Build Coastguard Worker 			}
3994*03ce13f7SAndroid Build Coastguard Worker 			break;
3995*03ce13f7SAndroid Build Coastguard Worker 		default:
3996*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pImageFormatInfo->pNext sType = %s", vk::Stringify(extensionFormatInfo->sType).c_str());
3997*03ce13f7SAndroid Build Coastguard Worker 			break;
3998*03ce13f7SAndroid Build Coastguard Worker 		}
3999*03ce13f7SAndroid Build Coastguard Worker 
4000*03ce13f7SAndroid Build Coastguard Worker 		extensionFormatInfo = extensionFormatInfo->pNext;
4001*03ce13f7SAndroid Build Coastguard Worker 	}
4002*03ce13f7SAndroid Build Coastguard Worker 
4003*03ce13f7SAndroid Build Coastguard Worker 	VkBaseOutStructure *extensionProperties = reinterpret_cast<VkBaseOutStructure *>(pImageFormatProperties->pNext);
4004*03ce13f7SAndroid Build Coastguard Worker 
4005*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
4006*03ce13f7SAndroid Build Coastguard Worker 	bool hasAHBUsage = false;
4007*03ce13f7SAndroid Build Coastguard Worker #endif
4008*03ce13f7SAndroid Build Coastguard Worker 
4009*03ce13f7SAndroid Build Coastguard Worker 	while(extensionProperties)
4010*03ce13f7SAndroid Build Coastguard Worker 	{
4011*03ce13f7SAndroid Build Coastguard Worker 		switch(extensionProperties->sType)
4012*03ce13f7SAndroid Build Coastguard Worker 		{
4013*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:
4014*03ce13f7SAndroid Build Coastguard Worker 			{
4015*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkExternalImageFormatProperties *>(extensionProperties);
4016*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(handleType, properties);
4017*03ce13f7SAndroid Build Coastguard Worker 			}
4018*03ce13f7SAndroid Build Coastguard Worker 			break;
4019*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:
4020*03ce13f7SAndroid Build Coastguard Worker 			{
4021*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkSamplerYcbcrConversionImageFormatProperties *>(extensionProperties);
4022*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(properties);
4023*03ce13f7SAndroid Build Coastguard Worker 			}
4024*03ce13f7SAndroid Build Coastguard Worker 			break;
4025*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
4026*03ce13f7SAndroid Build Coastguard Worker 			{
4027*03ce13f7SAndroid Build Coastguard Worker 				// Explicitly ignored, since VK_AMD_texture_gather_bias_lod is not supported
4028*03ce13f7SAndroid Build Coastguard Worker 				ASSERT(!hasDeviceExtension(VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME));
4029*03ce13f7SAndroid Build Coastguard Worker 			}
4030*03ce13f7SAndroid Build Coastguard Worker 			break;
4031*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT:
4032*03ce13f7SAndroid Build Coastguard Worker 			{
4033*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkHostImageCopyDevicePerformanceQueryEXT *>(extensionProperties);
4034*03ce13f7SAndroid Build Coastguard Worker 				// Host image copy is equally performant on the host with SwiftShader; it's the same code running on the main thread.
4035*03ce13f7SAndroid Build Coastguard Worker 				properties->optimalDeviceAccess = VK_TRUE;
4036*03ce13f7SAndroid Build Coastguard Worker 				properties->identicalMemoryLayout = VK_TRUE;
4037*03ce13f7SAndroid Build Coastguard Worker 			}
4038*03ce13f7SAndroid Build Coastguard Worker 			break;
4039*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
4040*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
4041*03ce13f7SAndroid Build Coastguard Worker 			{
4042*03ce13f7SAndroid Build Coastguard Worker 				auto *properties = reinterpret_cast<VkAndroidHardwareBufferUsageANDROID *>(extensionProperties);
4043*03ce13f7SAndroid Build Coastguard Worker 				vk::Cast(physicalDevice)->getProperties(pImageFormatInfo, properties);
4044*03ce13f7SAndroid Build Coastguard Worker 				hasAHBUsage = true;
4045*03ce13f7SAndroid Build Coastguard Worker 			}
4046*03ce13f7SAndroid Build Coastguard Worker 			break;
4047*03ce13f7SAndroid Build Coastguard Worker #endif
4048*03ce13f7SAndroid Build Coastguard Worker 		default:
4049*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pImageFormatProperties->pNext sType = %s", vk::Stringify(extensionProperties->sType).c_str());
4050*03ce13f7SAndroid Build Coastguard Worker 			break;
4051*03ce13f7SAndroid Build Coastguard Worker 		}
4052*03ce13f7SAndroid Build Coastguard Worker 
4053*03ce13f7SAndroid Build Coastguard Worker 		extensionProperties = extensionProperties->pNext;
4054*03ce13f7SAndroid Build Coastguard Worker 	}
4055*03ce13f7SAndroid Build Coastguard Worker 
4056*03ce13f7SAndroid Build Coastguard Worker 	vk::Format format = pImageFormatInfo->format;
4057*03ce13f7SAndroid Build Coastguard Worker 	VkImageType type = pImageFormatInfo->type;
4058*03ce13f7SAndroid Build Coastguard Worker 	VkImageTiling tiling = pImageFormatInfo->tiling;
4059*03ce13f7SAndroid Build Coastguard Worker 	VkImageUsageFlags usage = pImageFormatInfo->usage;
4060*03ce13f7SAndroid Build Coastguard Worker 	VkImageCreateFlags flags = pImageFormatInfo->flags;
4061*03ce13f7SAndroid Build Coastguard Worker 
4062*03ce13f7SAndroid Build Coastguard Worker 	if(!vk::Cast(physicalDevice)->isFormatSupported(format, type, tiling, usage, stencilUsage, flags))
4063*03ce13f7SAndroid Build Coastguard Worker 	{
4064*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_FORMAT_NOT_SUPPORTED;
4065*03ce13f7SAndroid Build Coastguard Worker 	}
4066*03ce13f7SAndroid Build Coastguard Worker 
4067*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(physicalDevice)->getImageFormatProperties(format, type, tiling, usage, flags, &pImageFormatProperties->imageFormatProperties);
4068*03ce13f7SAndroid Build Coastguard Worker 
4069*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
4070*03ce13f7SAndroid Build Coastguard Worker 	if(hasAHBUsage)
4071*03ce13f7SAndroid Build Coastguard Worker 	{
4072*03ce13f7SAndroid Build Coastguard Worker 		// AHardwareBuffer_lock may only be called with a single layer.
4073*03ce13f7SAndroid Build Coastguard Worker 		pImageFormatProperties->imageFormatProperties.maxArrayLayers = 1;
4074*03ce13f7SAndroid Build Coastguard Worker 		pImageFormatProperties->imageFormatProperties.maxMipLevels = 1;
4075*03ce13f7SAndroid Build Coastguard Worker 	}
4076*03ce13f7SAndroid Build Coastguard Worker #endif
4077*03ce13f7SAndroid Build Coastguard Worker 
4078*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4079*03ce13f7SAndroid Build Coastguard Worker }
4080*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice,uint32_t * pQueueFamilyPropertyCount,VkQueueFamilyProperties2 * pQueueFamilyProperties)4081*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2(VkPhysicalDevice physicalDevice, uint32_t *pQueueFamilyPropertyCount, VkQueueFamilyProperties2 *pQueueFamilyProperties)
4082*03ce13f7SAndroid Build Coastguard Worker {
4083*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t* pQueueFamilyPropertyCount = %p, VkQueueFamilyProperties2* pQueueFamilyProperties = %p)",
4084*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
4085*03ce13f7SAndroid Build Coastguard Worker 
4086*03ce13f7SAndroid Build Coastguard Worker 	if(!pQueueFamilyProperties)
4087*03ce13f7SAndroid Build Coastguard Worker 	{
4088*03ce13f7SAndroid Build Coastguard Worker 		*pQueueFamilyPropertyCount = vk::Cast(physicalDevice)->getQueueFamilyPropertyCount();
4089*03ce13f7SAndroid Build Coastguard Worker 	}
4090*03ce13f7SAndroid Build Coastguard Worker 	else
4091*03ce13f7SAndroid Build Coastguard Worker 	{
4092*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(physicalDevice)->getQueueFamilyProperties(*pQueueFamilyPropertyCount, pQueueFamilyProperties);
4093*03ce13f7SAndroid Build Coastguard Worker 	}
4094*03ce13f7SAndroid Build Coastguard Worker }
4095*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice,VkPhysicalDeviceMemoryProperties2 * pMemoryProperties)4096*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2 *pMemoryProperties)
4097*03ce13f7SAndroid Build Coastguard Worker {
4098*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkPhysicalDeviceMemoryProperties2* pMemoryProperties = %p)", physicalDevice, pMemoryProperties);
4099*03ce13f7SAndroid Build Coastguard Worker 
4100*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pMemoryProperties->pNext);
4101*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
4102*03ce13f7SAndroid Build Coastguard Worker 	{
4103*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pMemoryProperties->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
4104*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
4105*03ce13f7SAndroid Build Coastguard Worker 	}
4106*03ce13f7SAndroid Build Coastguard Worker 
4107*03ce13f7SAndroid Build Coastguard Worker 	vkGetPhysicalDeviceMemoryProperties(physicalDevice, &(pMemoryProperties->memoryProperties));
4108*03ce13f7SAndroid Build Coastguard Worker }
4109*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSparseImageFormatInfo2 * pFormatInfo,uint32_t * pPropertyCount,VkSparseImageFormatProperties2 * pProperties)4110*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2 *pFormatInfo, uint32_t *pPropertyCount, VkSparseImageFormatProperties2 *pProperties)
4111*03ce13f7SAndroid Build Coastguard Worker {
4112*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo = %p, uint32_t* pPropertyCount = %p, VkSparseImageFormatProperties2* pProperties = %p)",
4113*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pFormatInfo, pPropertyCount, pProperties);
4114*03ce13f7SAndroid Build Coastguard Worker 
4115*03ce13f7SAndroid Build Coastguard Worker 	if(pProperties)
4116*03ce13f7SAndroid Build Coastguard Worker 	{
4117*03ce13f7SAndroid Build Coastguard Worker 		const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pProperties->pNext);
4118*03ce13f7SAndroid Build Coastguard Worker 		while(extInfo)
4119*03ce13f7SAndroid Build Coastguard Worker 		{
4120*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pProperties->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
4121*03ce13f7SAndroid Build Coastguard Worker 			extInfo = extInfo->pNext;
4122*03ce13f7SAndroid Build Coastguard Worker 		}
4123*03ce13f7SAndroid Build Coastguard Worker 	}
4124*03ce13f7SAndroid Build Coastguard Worker 
4125*03ce13f7SAndroid Build Coastguard Worker 	// We do not support sparse images.
4126*03ce13f7SAndroid Build Coastguard Worker 	*pPropertyCount = 0;
4127*03ce13f7SAndroid Build Coastguard Worker }
4128*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice,uint32_t * pToolCount,VkPhysicalDeviceToolProperties * pToolProperties)4129*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties(VkPhysicalDevice physicalDevice, uint32_t *pToolCount, VkPhysicalDeviceToolProperties *pToolProperties)
4130*03ce13f7SAndroid Build Coastguard Worker {
4131*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t* pToolCount = %p, VkPhysicalDeviceToolProperties* pToolProperties = %p)",
4132*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pToolCount, pToolProperties);
4133*03ce13f7SAndroid Build Coastguard Worker 
4134*03ce13f7SAndroid Build Coastguard Worker 	if(!pToolProperties)
4135*03ce13f7SAndroid Build Coastguard Worker 	{
4136*03ce13f7SAndroid Build Coastguard Worker 		*pToolCount = 0;
4137*03ce13f7SAndroid Build Coastguard Worker 		return VK_SUCCESS;
4138*03ce13f7SAndroid Build Coastguard Worker 	}
4139*03ce13f7SAndroid Build Coastguard Worker 
4140*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4141*03ce13f7SAndroid Build Coastguard Worker }
4142*03ce13f7SAndroid Build Coastguard Worker 
vkTrimCommandPool(VkDevice device,VkCommandPool commandPool,VkCommandPoolTrimFlags flags)4143*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags)
4144*03ce13f7SAndroid Build Coastguard Worker {
4145*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkCommandPool commandPool = %p, VkCommandPoolTrimFlags flags = %d)",
4146*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(commandPool), flags);
4147*03ce13f7SAndroid Build Coastguard Worker 
4148*03ce13f7SAndroid Build Coastguard Worker 	if(flags != 0)
4149*03ce13f7SAndroid Build Coastguard Worker 	{
4150*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
4151*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("flags 0x%08X", int(flags));
4152*03ce13f7SAndroid Build Coastguard Worker 	}
4153*03ce13f7SAndroid Build Coastguard Worker 
4154*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandPool)->trim(flags);
4155*03ce13f7SAndroid Build Coastguard Worker }
4156*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceQueue2(VkDevice device,const VkDeviceQueueInfo2 * pQueueInfo,VkQueue * pQueue)4157*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2(VkDevice device, const VkDeviceQueueInfo2 *pQueueInfo, VkQueue *pQueue)
4158*03ce13f7SAndroid Build Coastguard Worker {
4159*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDeviceQueueInfo2* pQueueInfo = %p, VkQueue* pQueue = %p)",
4160*03ce13f7SAndroid Build Coastguard Worker 	      device, pQueueInfo, pQueue);
4161*03ce13f7SAndroid Build Coastguard Worker 
4162*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pQueueInfo->pNext);
4163*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
4164*03ce13f7SAndroid Build Coastguard Worker 	{
4165*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pQueueInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
4166*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
4167*03ce13f7SAndroid Build Coastguard Worker 	}
4168*03ce13f7SAndroid Build Coastguard Worker 
4169*03ce13f7SAndroid Build Coastguard Worker 	if(pQueueInfo->flags != 0)
4170*03ce13f7SAndroid Build Coastguard Worker 	{
4171*03ce13f7SAndroid Build Coastguard Worker 		// The only flag that can be set here is VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT
4172*03ce13f7SAndroid Build Coastguard Worker 		// According to the Vulkan 1.2.132 spec, 4.3.1. Queue Family Properties:
4173*03ce13f7SAndroid Build Coastguard Worker 		// "VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT specifies that the device queue is a
4174*03ce13f7SAndroid Build Coastguard Worker 		//  protected-capable queue. If the protected memory feature is not enabled,
4175*03ce13f7SAndroid Build Coastguard Worker 		//  the VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT bit of flags must not be set."
4176*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("VkPhysicalDeviceVulkan11Features::protectedMemory");
4177*03ce13f7SAndroid Build Coastguard Worker 	}
4178*03ce13f7SAndroid Build Coastguard Worker 
4179*03ce13f7SAndroid Build Coastguard Worker 	vkGetDeviceQueue(device, pQueueInfo->queueFamilyIndex, pQueueInfo->queueIndex, pQueue);
4180*03ce13f7SAndroid Build Coastguard Worker }
4181*03ce13f7SAndroid Build Coastguard Worker 
vkCreateSamplerYcbcrConversion(VkDevice device,const VkSamplerYcbcrConversionCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSamplerYcbcrConversion * pYcbcrConversion)4182*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion(VkDevice device, const VkSamplerYcbcrConversionCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSamplerYcbcrConversion *pYcbcrConversion)
4183*03ce13f7SAndroid Build Coastguard Worker {
4184*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkSamplerYcbcrConversion* pYcbcrConversion = %p)",
4185*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pYcbcrConversion);
4186*03ce13f7SAndroid Build Coastguard Worker 
4187*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
4188*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
4189*03ce13f7SAndroid Build Coastguard Worker 	{
4190*03ce13f7SAndroid Build Coastguard Worker 		switch(extInfo->sType)
4191*03ce13f7SAndroid Build Coastguard Worker 		{
4192*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
4193*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
4194*03ce13f7SAndroid Build Coastguard Worker 			break;
4195*03ce13f7SAndroid Build Coastguard Worker #endif
4196*03ce13f7SAndroid Build Coastguard Worker 		default:
4197*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
4198*03ce13f7SAndroid Build Coastguard Worker 			break;
4199*03ce13f7SAndroid Build Coastguard Worker 		}
4200*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
4201*03ce13f7SAndroid Build Coastguard Worker 	}
4202*03ce13f7SAndroid Build Coastguard Worker 
4203*03ce13f7SAndroid Build Coastguard Worker 	return vk::SamplerYcbcrConversion::Create(pAllocator, pCreateInfo, pYcbcrConversion);
4204*03ce13f7SAndroid Build Coastguard Worker }
4205*03ce13f7SAndroid Build Coastguard Worker 
vkDestroySamplerYcbcrConversion(VkDevice device,VkSamplerYcbcrConversion ycbcrConversion,const VkAllocationCallbacks * pAllocator)4206*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks *pAllocator)
4207*03ce13f7SAndroid Build Coastguard Worker {
4208*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkSamplerYcbcrConversion ycbcrConversion = %p, const VkAllocationCallbacks* pAllocator = %p)",
4209*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(ycbcrConversion), pAllocator);
4210*03ce13f7SAndroid Build Coastguard Worker 
4211*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(ycbcrConversion, pAllocator);
4212*03ce13f7SAndroid Build Coastguard Worker }
4213*03ce13f7SAndroid Build Coastguard Worker 
vkCreateDescriptorUpdateTemplate(VkDevice device,const VkDescriptorUpdateTemplateCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDescriptorUpdateTemplate * pDescriptorUpdateTemplate)4214*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDescriptorUpdateTemplate *pDescriptorUpdateTemplate)
4215*03ce13f7SAndroid Build Coastguard Worker {
4216*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate = %p)",
4217*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
4218*03ce13f7SAndroid Build Coastguard Worker 
4219*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
4220*03ce13f7SAndroid Build Coastguard Worker 	{
4221*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
4222*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
4223*03ce13f7SAndroid Build Coastguard Worker 	}
4224*03ce13f7SAndroid Build Coastguard Worker 
4225*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->templateType != VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)
4226*03ce13f7SAndroid Build Coastguard Worker 	{
4227*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->templateType %d", int(pCreateInfo->templateType));
4228*03ce13f7SAndroid Build Coastguard Worker 	}
4229*03ce13f7SAndroid Build Coastguard Worker 
4230*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pCreateInfo->pNext);
4231*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
4232*03ce13f7SAndroid Build Coastguard Worker 	{
4233*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
4234*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
4235*03ce13f7SAndroid Build Coastguard Worker 	}
4236*03ce13f7SAndroid Build Coastguard Worker 
4237*03ce13f7SAndroid Build Coastguard Worker 	return vk::DescriptorUpdateTemplate::Create(pAllocator, pCreateInfo, pDescriptorUpdateTemplate);
4238*03ce13f7SAndroid Build Coastguard Worker }
4239*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyDescriptorUpdateTemplate(VkDevice device,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const VkAllocationCallbacks * pAllocator)4240*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks *pAllocator)
4241*03ce13f7SAndroid Build Coastguard Worker {
4242*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDescriptorUpdateTemplate descriptorUpdateTemplate = %p, const VkAllocationCallbacks* pAllocator = %p)",
4243*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(descriptorUpdateTemplate), pAllocator);
4244*03ce13f7SAndroid Build Coastguard Worker 
4245*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(descriptorUpdateTemplate, pAllocator);
4246*03ce13f7SAndroid Build Coastguard Worker }
4247*03ce13f7SAndroid Build Coastguard Worker 
vkUpdateDescriptorSetWithTemplate(VkDevice device,VkDescriptorSet descriptorSet,VkDescriptorUpdateTemplate descriptorUpdateTemplate,const void * pData)4248*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplate(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void *pData)
4249*03ce13f7SAndroid Build Coastguard Worker {
4250*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDescriptorSet descriptorSet = %p, VkDescriptorUpdateTemplate descriptorUpdateTemplate = %p, const void* pData = %p)",
4251*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(descriptorSet), static_cast<void *>(descriptorUpdateTemplate), pData);
4252*03ce13f7SAndroid Build Coastguard Worker 
4253*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(descriptorUpdateTemplate)->updateDescriptorSet(vk::Cast(device), descriptorSet, pData);
4254*03ce13f7SAndroid Build Coastguard Worker }
4255*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalBufferInfo * pExternalBufferInfo,VkExternalBufferProperties * pExternalBufferProperties)4256*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo, VkExternalBufferProperties *pExternalBufferProperties)
4257*03ce13f7SAndroid Build Coastguard Worker {
4258*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo = %p, VkExternalBufferProperties* pExternalBufferProperties = %p)",
4259*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pExternalBufferInfo, pExternalBufferProperties);
4260*03ce13f7SAndroid Build Coastguard Worker 
4261*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(physicalDevice)->getProperties(pExternalBufferInfo, pExternalBufferProperties);
4262*03ce13f7SAndroid Build Coastguard Worker }
4263*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalFenceInfo * pExternalFenceInfo,VkExternalFenceProperties * pExternalFenceProperties)4264*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo *pExternalFenceInfo, VkExternalFenceProperties *pExternalFenceProperties)
4265*03ce13f7SAndroid Build Coastguard Worker {
4266*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo = %p, VkExternalFenceProperties* pExternalFenceProperties = %p)",
4267*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pExternalFenceInfo, pExternalFenceProperties);
4268*03ce13f7SAndroid Build Coastguard Worker 
4269*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(physicalDevice)->getProperties(pExternalFenceInfo, pExternalFenceProperties);
4270*03ce13f7SAndroid Build Coastguard Worker }
4271*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceExternalSemaphoreInfo * pExternalSemaphoreInfo,VkExternalSemaphoreProperties * pExternalSemaphoreProperties)4272*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo *pExternalSemaphoreInfo, VkExternalSemaphoreProperties *pExternalSemaphoreProperties)
4273*03ce13f7SAndroid Build Coastguard Worker {
4274*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo = %p, VkExternalSemaphoreProperties* pExternalSemaphoreProperties = %p)",
4275*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4276*03ce13f7SAndroid Build Coastguard Worker 
4277*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(physicalDevice)->getProperties(pExternalSemaphoreInfo, pExternalSemaphoreProperties);
4278*03ce13f7SAndroid Build Coastguard Worker }
4279*03ce13f7SAndroid Build Coastguard Worker 
vkGetDescriptorSetLayoutSupport(VkDevice device,const VkDescriptorSetLayoutCreateInfo * pCreateInfo,VkDescriptorSetLayoutSupport * pSupport)4280*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport(VkDevice device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo, VkDescriptorSetLayoutSupport *pSupport)
4281*03ce13f7SAndroid Build Coastguard Worker {
4282*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDescriptorSetLayoutCreateInfo* pCreateInfo = %p, VkDescriptorSetLayoutSupport* pSupport = %p)",
4283*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pSupport);
4284*03ce13f7SAndroid Build Coastguard Worker 
4285*03ce13f7SAndroid Build Coastguard Worker 	VkBaseOutStructure *layoutSupport = reinterpret_cast<VkBaseOutStructure *>(pSupport->pNext);
4286*03ce13f7SAndroid Build Coastguard Worker 	while(layoutSupport)
4287*03ce13f7SAndroid Build Coastguard Worker 	{
4288*03ce13f7SAndroid Build Coastguard Worker 		switch(layoutSupport->sType)
4289*03ce13f7SAndroid Build Coastguard Worker 		{
4290*03ce13f7SAndroid Build Coastguard Worker 		case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT:
4291*03ce13f7SAndroid Build Coastguard Worker 			break;
4292*03ce13f7SAndroid Build Coastguard Worker 		default:
4293*03ce13f7SAndroid Build Coastguard Worker 			UNSUPPORTED("pSupport->pNext sType = %s", vk::Stringify(layoutSupport->sType).c_str());
4294*03ce13f7SAndroid Build Coastguard Worker 			break;
4295*03ce13f7SAndroid Build Coastguard Worker 		}
4296*03ce13f7SAndroid Build Coastguard Worker 
4297*03ce13f7SAndroid Build Coastguard Worker 		layoutSupport = layoutSupport->pNext;
4298*03ce13f7SAndroid Build Coastguard Worker 	}
4299*03ce13f7SAndroid Build Coastguard Worker 
4300*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(device)->getDescriptorSetLayoutSupport(pCreateInfo, pSupport);
4301*03ce13f7SAndroid Build Coastguard Worker }
4302*03ce13f7SAndroid Build Coastguard Worker 
vkCreatePrivateDataSlot(VkDevice device,const VkPrivateDataSlotCreateInfo * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkPrivateDataSlot * pPrivateDataSlot)4303*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot(VkDevice device, const VkPrivateDataSlotCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkPrivateDataSlot *pPrivateDataSlot)
4304*03ce13f7SAndroid Build Coastguard Worker {
4305*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkPrivateDataSlotCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkPrivateDataSlot* pPrivateDataSlot = %p)",
4306*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pPrivateDataSlot);
4307*03ce13f7SAndroid Build Coastguard Worker 
4308*03ce13f7SAndroid Build Coastguard Worker 	return vk::PrivateData::Create(pAllocator, pCreateInfo, pPrivateDataSlot);
4309*03ce13f7SAndroid Build Coastguard Worker }
4310*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyPrivateDataSlot(VkDevice device,VkPrivateDataSlot privateDataSlot,const VkAllocationCallbacks * pAllocator)4311*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks *pAllocator)
4312*03ce13f7SAndroid Build Coastguard Worker {
4313*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkPrivateDataSlot privateDataSlot = %p, const VkAllocationCallbacks* pAllocator = %p)",
4314*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(privateDataSlot), pAllocator);
4315*03ce13f7SAndroid Build Coastguard Worker 
4316*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(device)->removePrivateDataSlot(vk::Cast(privateDataSlot));
4317*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(privateDataSlot, pAllocator);
4318*03ce13f7SAndroid Build Coastguard Worker }
4319*03ce13f7SAndroid Build Coastguard Worker 
vkSetPrivateData(VkDevice device,VkObjectType objectType,uint64_t objectHandle,VkPrivateDataSlot privateDataSlot,uint64_t data)4320*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data)
4321*03ce13f7SAndroid Build Coastguard Worker {
4322*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkObjectType objectType = %d, uint64_t objectHandle = %" PRIu64 ", VkPrivateDataSlot privateDataSlot = %p, uint64_t data = %" PRIu64 ")",
4323*03ce13f7SAndroid Build Coastguard Worker 	      device, objectType, objectHandle, static_cast<void *>(privateDataSlot), data);
4324*03ce13f7SAndroid Build Coastguard Worker 
4325*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(device)->setPrivateData(objectType, objectHandle, vk::Cast(privateDataSlot), data);
4326*03ce13f7SAndroid Build Coastguard Worker }
4327*03ce13f7SAndroid Build Coastguard Worker 
vkGetPrivateData(VkDevice device,VkObjectType objectType,uint64_t objectHandle,VkPrivateDataSlot privateDataSlot,uint64_t * pData)4328*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetPrivateData(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t *pData)
4329*03ce13f7SAndroid Build Coastguard Worker {
4330*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkObjectType objectType = %d, uint64_t objectHandle = %" PRIu64 ", VkPrivateDataSlot privateDataSlot = %p, uint64_t data = %p)",
4331*03ce13f7SAndroid Build Coastguard Worker 	      device, objectType, objectHandle, static_cast<void *>(privateDataSlot), pData);
4332*03ce13f7SAndroid Build Coastguard Worker 
4333*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(device)->getPrivateData(objectType, objectHandle, vk::Cast(privateDataSlot), pData);
4334*03ce13f7SAndroid Build Coastguard Worker }
4335*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceBufferMemoryRequirements(VkDevice device,const VkDeviceBufferMemoryRequirements * pInfo,VkMemoryRequirements2 * pMemoryRequirements)4336*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements(VkDevice device, const VkDeviceBufferMemoryRequirements *pInfo, VkMemoryRequirements2 *pMemoryRequirements)
4337*03ce13f7SAndroid Build Coastguard Worker {
4338*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDeviceBufferMemoryRequirements* pInfo = %p, VkMemoryRequirements2* pMemoryRequirements = %p)",
4339*03ce13f7SAndroid Build Coastguard Worker 	      device, pInfo, pMemoryRequirements);
4340*03ce13f7SAndroid Build Coastguard Worker 
4341*03ce13f7SAndroid Build Coastguard Worker 	pMemoryRequirements->memoryRequirements =
4342*03ce13f7SAndroid Build Coastguard Worker 	    vk::Buffer::GetMemoryRequirements(pInfo->pCreateInfo->size, pInfo->pCreateInfo->usage);
4343*03ce13f7SAndroid Build Coastguard Worker }
4344*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceImageMemoryRequirements(VkDevice device,const VkDeviceImageMemoryRequirements * pInfo,VkMemoryRequirements2 * pMemoryRequirements)4345*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements(VkDevice device, const VkDeviceImageMemoryRequirements *pInfo, VkMemoryRequirements2 *pMemoryRequirements)
4346*03ce13f7SAndroid Build Coastguard Worker {
4347*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDeviceImageMemoryRequirements* pInfo = %p, VkMemoryRequirements2* pMemoryRequirements = %p)",
4348*03ce13f7SAndroid Build Coastguard Worker 	      device, pInfo, pMemoryRequirements);
4349*03ce13f7SAndroid Build Coastguard Worker 
4350*03ce13f7SAndroid Build Coastguard Worker 	const auto *extInfo = reinterpret_cast<const VkBaseInStructure *>(pInfo->pNext);
4351*03ce13f7SAndroid Build Coastguard Worker 	while(extInfo)
4352*03ce13f7SAndroid Build Coastguard Worker 	{
4353*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pInfo->pNext sType = %s", vk::Stringify(extInfo->sType).c_str());
4354*03ce13f7SAndroid Build Coastguard Worker 		extInfo = extInfo->pNext;
4355*03ce13f7SAndroid Build Coastguard Worker 	}
4356*03ce13f7SAndroid Build Coastguard Worker 
4357*03ce13f7SAndroid Build Coastguard Worker 	// Create a temporary image object to obtain the memory requirements.
4358*03ce13f7SAndroid Build Coastguard Worker 	// TODO(b/221299948): Reduce overhead by using a lightweight local proxy.
4359*03ce13f7SAndroid Build Coastguard Worker 	pMemoryRequirements->memoryRequirements = {};
4360*03ce13f7SAndroid Build Coastguard Worker 	const VkAllocationCallbacks *pAllocator = nullptr;
4361*03ce13f7SAndroid Build Coastguard Worker 	VkImage image = { VK_NULL_HANDLE };
4362*03ce13f7SAndroid Build Coastguard Worker 	VkResult result = vk::Image::Create(pAllocator, pInfo->pCreateInfo, &image, vk::Cast(device));
4363*03ce13f7SAndroid Build Coastguard Worker 	if(result == VK_SUCCESS)
4364*03ce13f7SAndroid Build Coastguard Worker 	{
4365*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(image)->getMemoryRequirements(pMemoryRequirements);
4366*03ce13f7SAndroid Build Coastguard Worker 	}
4367*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(image, pAllocator);
4368*03ce13f7SAndroid Build Coastguard Worker }
4369*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceImageSparseMemoryRequirements(VkDevice device,const VkDeviceImageMemoryRequirements * pInfo,uint32_t * pSparseMemoryRequirementCount,VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements)4370*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements(VkDevice device, const VkDeviceImageMemoryRequirements *pInfo, uint32_t *pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2 *pSparseMemoryRequirements)
4371*03ce13f7SAndroid Build Coastguard Worker {
4372*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDeviceImageMemoryRequirements* pInfo = %p, uint32_t* pSparseMemoryRequirementCount = %p, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements = %p)",
4373*03ce13f7SAndroid Build Coastguard Worker 	      device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
4374*03ce13f7SAndroid Build Coastguard Worker 
4375*03ce13f7SAndroid Build Coastguard Worker 	*pSparseMemoryRequirementCount = 0;
4376*03ce13f7SAndroid Build Coastguard Worker }
4377*03ce13f7SAndroid Build Coastguard Worker 
vkCmdSetLineStippleEXT(VkCommandBuffer commandBuffer,uint32_t lineStippleFactor,uint16_t lineStipplePattern)4378*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern)
4379*03ce13f7SAndroid Build Coastguard Worker {
4380*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, uint32_t lineStippleFactor = %u, uint16_t lineStipplePattern = %u)",
4381*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, lineStippleFactor, lineStipplePattern);
4382*03ce13f7SAndroid Build Coastguard Worker 
4383*03ce13f7SAndroid Build Coastguard Worker 	static constexpr uint16_t solidLine = 0xFFFFu;
4384*03ce13f7SAndroid Build Coastguard Worker 	if(lineStipplePattern != solidLine)
4385*03ce13f7SAndroid Build Coastguard Worker 	{
4386*03ce13f7SAndroid Build Coastguard Worker 		// VkPhysicalDeviceLineRasterizationFeaturesEXT::stippled*Lines are all set to VK_FALSE and,
4387*03ce13f7SAndroid Build Coastguard Worker 		// according to the Vulkan spec for VkPipelineRasterizationLineStateCreateInfoEXT:
4388*03ce13f7SAndroid Build Coastguard Worker 		// "If stippledLineEnable is VK_FALSE, the values of lineStippleFactor and lineStipplePattern are ignored."
4389*03ce13f7SAndroid Build Coastguard Worker 		WARN("vkCmdSetLineStippleEXT: line stipple pattern ignored : 0x%04X", lineStipplePattern);
4390*03ce13f7SAndroid Build Coastguard Worker 	}
4391*03ce13f7SAndroid Build Coastguard Worker }
4392*03ce13f7SAndroid Build Coastguard Worker 
vkCmdBeginDebugUtilsLabelEXT(VkCommandBuffer commandBuffer,const VkDebugUtilsLabelEXT * pLabelInfo)4393*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdBeginDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT *pLabelInfo)
4394*03ce13f7SAndroid Build Coastguard Worker {
4395*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkDebugUtilsLabelEXT* pLabelInfo = %p)",
4396*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pLabelInfo);
4397*03ce13f7SAndroid Build Coastguard Worker 
4398*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->beginDebugUtilsLabel(pLabelInfo);
4399*03ce13f7SAndroid Build Coastguard Worker }
4400*03ce13f7SAndroid Build Coastguard Worker 
vkCmdEndDebugUtilsLabelEXT(VkCommandBuffer commandBuffer)4401*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdEndDebugUtilsLabelEXT(VkCommandBuffer commandBuffer)
4402*03ce13f7SAndroid Build Coastguard Worker {
4403*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p)", commandBuffer);
4404*03ce13f7SAndroid Build Coastguard Worker 
4405*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->endDebugUtilsLabel();
4406*03ce13f7SAndroid Build Coastguard Worker }
4407*03ce13f7SAndroid Build Coastguard Worker 
vkCmdInsertDebugUtilsLabelEXT(VkCommandBuffer commandBuffer,const VkDebugUtilsLabelEXT * pLabelInfo)4408*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkCmdInsertDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT *pLabelInfo)
4409*03ce13f7SAndroid Build Coastguard Worker {
4410*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkDebugUtilsLabelEXT* pLabelInfo = %p)",
4411*03ce13f7SAndroid Build Coastguard Worker 	      commandBuffer, pLabelInfo);
4412*03ce13f7SAndroid Build Coastguard Worker 
4413*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(commandBuffer)->insertDebugUtilsLabel(pLabelInfo);
4414*03ce13f7SAndroid Build Coastguard Worker }
4415*03ce13f7SAndroid Build Coastguard Worker 
vkCreateDebugUtilsMessengerEXT(VkInstance instance,const VkDebugUtilsMessengerCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDebugUtilsMessengerEXT * pMessenger)4416*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerEXT *pMessenger)
4417*03ce13f7SAndroid Build Coastguard Worker {
4418*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkDebugUtilsMessengerEXT* pMessenger = %p)",
4419*03ce13f7SAndroid Build Coastguard Worker 	      instance, pCreateInfo, pAllocator, pMessenger);
4420*03ce13f7SAndroid Build Coastguard Worker 
4421*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->flags != 0)
4422*03ce13f7SAndroid Build Coastguard Worker 	{
4423*03ce13f7SAndroid Build Coastguard Worker 		// Vulkan 1.2: "flags is reserved for future use." "flags must be 0"
4424*03ce13f7SAndroid Build Coastguard Worker 		UNSUPPORTED("pCreateInfo->flags 0x%08X", int(pCreateInfo->flags));
4425*03ce13f7SAndroid Build Coastguard Worker 	}
4426*03ce13f7SAndroid Build Coastguard Worker 
4427*03ce13f7SAndroid Build Coastguard Worker 	return vk::DebugUtilsMessenger::Create(pAllocator, pCreateInfo, pMessenger);
4428*03ce13f7SAndroid Build Coastguard Worker }
4429*03ce13f7SAndroid Build Coastguard Worker 
vkDestroyDebugUtilsMessengerEXT(VkInstance instance,VkDebugUtilsMessengerEXT messenger,const VkAllocationCallbacks * pAllocator)4430*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks *pAllocator)
4431*03ce13f7SAndroid Build Coastguard Worker {
4432*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkDebugUtilsMessengerEXT messenger = %p, const VkAllocationCallbacks* pAllocator = %p)",
4433*03ce13f7SAndroid Build Coastguard Worker 	      instance, static_cast<void *>(messenger), pAllocator);
4434*03ce13f7SAndroid Build Coastguard Worker 
4435*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(messenger, pAllocator);
4436*03ce13f7SAndroid Build Coastguard Worker }
4437*03ce13f7SAndroid Build Coastguard Worker 
vkQueueBeginDebugUtilsLabelEXT(VkQueue queue,const VkDebugUtilsLabelEXT * pLabelInfo)4438*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkQueueBeginDebugUtilsLabelEXT(VkQueue queue, const VkDebugUtilsLabelEXT *pLabelInfo)
4439*03ce13f7SAndroid Build Coastguard Worker {
4440*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkQueue queue = %p, const VkDebugUtilsLabelEXT* pLabelInfo = %p)",
4441*03ce13f7SAndroid Build Coastguard Worker 	      queue, pLabelInfo);
4442*03ce13f7SAndroid Build Coastguard Worker 
4443*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(queue)->beginDebugUtilsLabel(pLabelInfo);
4444*03ce13f7SAndroid Build Coastguard Worker }
4445*03ce13f7SAndroid Build Coastguard Worker 
vkQueueEndDebugUtilsLabelEXT(VkQueue queue)4446*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkQueueEndDebugUtilsLabelEXT(VkQueue queue)
4447*03ce13f7SAndroid Build Coastguard Worker {
4448*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkQueue queue = %p)", queue);
4449*03ce13f7SAndroid Build Coastguard Worker 
4450*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(queue)->endDebugUtilsLabel();
4451*03ce13f7SAndroid Build Coastguard Worker }
4452*03ce13f7SAndroid Build Coastguard Worker 
vkQueueInsertDebugUtilsLabelEXT(VkQueue queue,const VkDebugUtilsLabelEXT * pLabelInfo)4453*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkQueueInsertDebugUtilsLabelEXT(VkQueue queue, const VkDebugUtilsLabelEXT *pLabelInfo)
4454*03ce13f7SAndroid Build Coastguard Worker {
4455*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkQueue queue = %p, const VkDebugUtilsLabelEXT* pLabelInfo = %p)",
4456*03ce13f7SAndroid Build Coastguard Worker 	      queue, pLabelInfo);
4457*03ce13f7SAndroid Build Coastguard Worker 
4458*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(queue)->insertDebugUtilsLabel(pLabelInfo);
4459*03ce13f7SAndroid Build Coastguard Worker }
4460*03ce13f7SAndroid Build Coastguard Worker 
vkSetDebugUtilsObjectNameEXT(VkDevice device,const VkDebugUtilsObjectNameInfoEXT * pNameInfo)4461*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectNameEXT(VkDevice device, const VkDebugUtilsObjectNameInfoEXT *pNameInfo)
4462*03ce13f7SAndroid Build Coastguard Worker {
4463*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDebugUtilsObjectNameInfoEXT* pNameInfo = %p)",
4464*03ce13f7SAndroid Build Coastguard Worker 	      device, pNameInfo);
4465*03ce13f7SAndroid Build Coastguard Worker 
4466*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(device)->setDebugUtilsObjectName(pNameInfo);
4467*03ce13f7SAndroid Build Coastguard Worker }
4468*03ce13f7SAndroid Build Coastguard Worker 
vkSetDebugUtilsObjectTagEXT(VkDevice device,const VkDebugUtilsObjectTagInfoEXT * pTagInfo)4469*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectTagEXT(VkDevice device, const VkDebugUtilsObjectTagInfoEXT *pTagInfo)
4470*03ce13f7SAndroid Build Coastguard Worker {
4471*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkDebugUtilsObjectTagInfoEXT* pTagInfo = %p)",
4472*03ce13f7SAndroid Build Coastguard Worker 	      device, pTagInfo);
4473*03ce13f7SAndroid Build Coastguard Worker 
4474*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(device)->setDebugUtilsObjectTag(pTagInfo);
4475*03ce13f7SAndroid Build Coastguard Worker }
4476*03ce13f7SAndroid Build Coastguard Worker 
vkSubmitDebugUtilsMessageEXT(VkInstance instance,VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,VkDebugUtilsMessageTypeFlagsEXT messageTypes,const VkDebugUtilsMessengerCallbackDataEXT * pCallbackData)4477*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkSubmitDebugUtilsMessageEXT(VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData)
4478*03ce13f7SAndroid Build Coastguard Worker {
4479*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity = %d, VkDebugUtilsMessageTypeFlagsEXT messageTypes = %d, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData = %p)",
4480*03ce13f7SAndroid Build Coastguard Worker 	      instance, messageSeverity, messageTypes, pCallbackData);
4481*03ce13f7SAndroid Build Coastguard Worker 
4482*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(instance)->submitDebugUtilsMessage(messageSeverity, messageTypes, pCallbackData);
4483*03ce13f7SAndroid Build Coastguard Worker }
4484*03ce13f7SAndroid Build Coastguard Worker 
vkCopyMemoryToImageEXT(VkDevice device,const VkCopyMemoryToImageInfoEXT * pCopyMemoryToImageInfo)4485*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImageEXT(VkDevice device, const VkCopyMemoryToImageInfoEXT *pCopyMemoryToImageInfo)
4486*03ce13f7SAndroid Build Coastguard Worker {
4487*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo = %p)",
4488*03ce13f7SAndroid Build Coastguard Worker 	      device, pCopyMemoryToImageInfo);
4489*03ce13f7SAndroid Build Coastguard Worker 
4490*03ce13f7SAndroid Build Coastguard Worker 	constexpr auto allRecognizedFlagBits = VK_HOST_IMAGE_COPY_MEMCPY_EXT;
4491*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(!(pCopyMemoryToImageInfo->flags & ~allRecognizedFlagBits));
4492*03ce13f7SAndroid Build Coastguard Worker 
4493*03ce13f7SAndroid Build Coastguard Worker 	vk::Image *dstImage = vk::Cast(pCopyMemoryToImageInfo->dstImage);
4494*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < pCopyMemoryToImageInfo->regionCount; i++)
4495*03ce13f7SAndroid Build Coastguard Worker 	{
4496*03ce13f7SAndroid Build Coastguard Worker 		dstImage->copyFromMemory(pCopyMemoryToImageInfo->pRegions[i]);
4497*03ce13f7SAndroid Build Coastguard Worker 	}
4498*03ce13f7SAndroid Build Coastguard Worker 
4499*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4500*03ce13f7SAndroid Build Coastguard Worker }
4501*03ce13f7SAndroid Build Coastguard Worker 
vkCopyImageToMemoryEXT(VkDevice device,const VkCopyImageToMemoryInfoEXT * pCopyImageToMemoryInfo)4502*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemoryEXT(VkDevice device, const VkCopyImageToMemoryInfoEXT *pCopyImageToMemoryInfo)
4503*03ce13f7SAndroid Build Coastguard Worker {
4504*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo = %p)",
4505*03ce13f7SAndroid Build Coastguard Worker 	      device, pCopyImageToMemoryInfo);
4506*03ce13f7SAndroid Build Coastguard Worker 
4507*03ce13f7SAndroid Build Coastguard Worker 	constexpr auto allRecognizedFlagBits = VK_HOST_IMAGE_COPY_MEMCPY_EXT;
4508*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(!(pCopyImageToMemoryInfo->flags & ~allRecognizedFlagBits));
4509*03ce13f7SAndroid Build Coastguard Worker 
4510*03ce13f7SAndroid Build Coastguard Worker 	vk::Image *srcImage = vk::Cast(pCopyImageToMemoryInfo->srcImage);
4511*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < pCopyImageToMemoryInfo->regionCount; i++)
4512*03ce13f7SAndroid Build Coastguard Worker 	{
4513*03ce13f7SAndroid Build Coastguard Worker 		srcImage->copyToMemory(pCopyImageToMemoryInfo->pRegions[i]);
4514*03ce13f7SAndroid Build Coastguard Worker 	}
4515*03ce13f7SAndroid Build Coastguard Worker 
4516*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4517*03ce13f7SAndroid Build Coastguard Worker }
4518*03ce13f7SAndroid Build Coastguard Worker 
vkCopyImageToImageEXT(VkDevice device,const VkCopyImageToImageInfoEXT * pCopyImageToImageInfo)4519*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImageEXT(VkDevice device, const VkCopyImageToImageInfoEXT *pCopyImageToImageInfo)
4520*03ce13f7SAndroid Build Coastguard Worker {
4521*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo = %p)",
4522*03ce13f7SAndroid Build Coastguard Worker 	      device, pCopyImageToImageInfo);
4523*03ce13f7SAndroid Build Coastguard Worker 
4524*03ce13f7SAndroid Build Coastguard Worker 	constexpr auto allRecognizedFlagBits = VK_HOST_IMAGE_COPY_MEMCPY_EXT;
4525*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(!(pCopyImageToImageInfo->flags & ~allRecognizedFlagBits));
4526*03ce13f7SAndroid Build Coastguard Worker 
4527*03ce13f7SAndroid Build Coastguard Worker 	vk::Image *srcImage = vk::Cast(pCopyImageToImageInfo->srcImage);
4528*03ce13f7SAndroid Build Coastguard Worker 	vk::Image *dstImage = vk::Cast(pCopyImageToImageInfo->dstImage);
4529*03ce13f7SAndroid Build Coastguard Worker 	for(uint32_t i = 0; i < pCopyImageToImageInfo->regionCount; i++)
4530*03ce13f7SAndroid Build Coastguard Worker 	{
4531*03ce13f7SAndroid Build Coastguard Worker 		srcImage->copyTo(dstImage, pCopyImageToImageInfo->pRegions[i]);
4532*03ce13f7SAndroid Build Coastguard Worker 	}
4533*03ce13f7SAndroid Build Coastguard Worker 
4534*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4535*03ce13f7SAndroid Build Coastguard Worker }
4536*03ce13f7SAndroid Build Coastguard Worker 
vkTransitionImageLayoutEXT(VkDevice device,uint32_t transitionCount,const VkHostImageLayoutTransitionInfoEXT * pTransitions)4537*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayoutEXT(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfoEXT *pTransitions)
4538*03ce13f7SAndroid Build Coastguard Worker {
4539*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, uint32_t transitionCount = %u, const VkHostImageLayoutTransitionInfoEXT* pTransitions = %p)",
4540*03ce13f7SAndroid Build Coastguard Worker 	      device, transitionCount, pTransitions);
4541*03ce13f7SAndroid Build Coastguard Worker 
4542*03ce13f7SAndroid Build Coastguard Worker 	// This function is a no-op; there are no image layouts in SwiftShader.
4543*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4544*03ce13f7SAndroid Build Coastguard Worker }
4545*03ce13f7SAndroid Build Coastguard Worker 
4546*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_XCB_KHR
vkCreateXcbSurfaceKHR(VkInstance instance,const VkXcbSurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)4547*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
4548*03ce13f7SAndroid Build Coastguard Worker {
4549*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkXcbSurfaceCreateInfoKHR* pCreateInfo = %p, VkAllocationCallbacks* pAllocator = %p, VkSurface* pSurface = %p)",
4550*03ce13f7SAndroid Build Coastguard Worker 	      instance, pCreateInfo, pAllocator, pSurface);
4551*03ce13f7SAndroid Build Coastguard Worker 
4552*03ce13f7SAndroid Build Coastguard Worker 	// VUID-VkXcbSurfaceCreateInfoKHR-connection-01310 : connection must point to a valid X11 xcb_connection_t
4553*03ce13f7SAndroid Build Coastguard Worker 	ASSERT(pCreateInfo->connection);
4554*03ce13f7SAndroid Build Coastguard Worker 
4555*03ce13f7SAndroid Build Coastguard Worker 	return vk::XcbSurfaceKHR::Create(pAllocator, pCreateInfo, pSurface);
4556*03ce13f7SAndroid Build Coastguard Worker }
4557*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,xcb_connection_t * connection,xcb_visualid_t visual_id)4558*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t *connection, xcb_visualid_t visual_id)
4559*03ce13f7SAndroid Build Coastguard Worker {
4560*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t queueFamilyIndex = %d, xcb_connection_t* connection = %p, xcb_visualid_t visual_id = %d)",
4561*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, int(queueFamilyIndex), connection, int(visual_id));
4562*03ce13f7SAndroid Build Coastguard Worker 
4563*03ce13f7SAndroid Build Coastguard Worker 	return VK_TRUE;
4564*03ce13f7SAndroid Build Coastguard Worker }
4565*03ce13f7SAndroid Build Coastguard Worker #endif
4566*03ce13f7SAndroid Build Coastguard Worker 
4567*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_WAYLAND_KHR
vkCreateWaylandSurfaceKHR(VkInstance instance,const VkWaylandSurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)4568*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
4569*03ce13f7SAndroid Build Coastguard Worker {
4570*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkWaylandSurfaceCreateInfoKHR* pCreateInfo = %p, VkAllocationCallbacks* pAllocator = %p, VkSurface* pSurface = %p)",
4571*03ce13f7SAndroid Build Coastguard Worker 	      instance, pCreateInfo, pAllocator, pSurface);
4572*03ce13f7SAndroid Build Coastguard Worker 
4573*03ce13f7SAndroid Build Coastguard Worker 	return vk::WaylandSurfaceKHR::Create(pAllocator, pCreateInfo, pSurface);
4574*03ce13f7SAndroid Build Coastguard Worker }
4575*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,struct wl_display * display)4576*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display *display)
4577*03ce13f7SAndroid Build Coastguard Worker {
4578*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t queueFamilyIndex = %d, struct wl_display* display = %p)",
4579*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, int(queueFamilyIndex), display);
4580*03ce13f7SAndroid Build Coastguard Worker 
4581*03ce13f7SAndroid Build Coastguard Worker 	return VK_TRUE;
4582*03ce13f7SAndroid Build Coastguard Worker }
4583*03ce13f7SAndroid Build Coastguard Worker #endif
4584*03ce13f7SAndroid Build Coastguard Worker 
4585*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_DIRECTFB_EXT
vkCreateDirectFBSurfaceEXT(VkInstance instance,const VkDirectFBSurfaceCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)4586*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT(VkInstance instance, const VkDirectFBSurfaceCreateInfoEXT *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
4587*03ce13f7SAndroid Build Coastguard Worker {
4588*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkDirectFBSurfaceCreateInfoEXT* pCreateInfo = %p, VkAllocationCallbacks* pAllocator = %p, VkSurface* pSurface = %p)",
4589*03ce13f7SAndroid Build Coastguard Worker 	      instance, pCreateInfo, pAllocator, pSurface);
4590*03ce13f7SAndroid Build Coastguard Worker 
4591*03ce13f7SAndroid Build Coastguard Worker 	return vk::DirectFBSurfaceEXT::Create(pAllocator, pCreateInfo, pSurface);
4592*03ce13f7SAndroid Build Coastguard Worker }
4593*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceDirectFBPresentationSupportEXT(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,IDirectFB * dfb)4594*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB *dfb)
4595*03ce13f7SAndroid Build Coastguard Worker {
4596*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t queueFamilyIndex = %d, IDirectFB* dfb = %p)",
4597*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, int(queueFamilyIndex), dfb);
4598*03ce13f7SAndroid Build Coastguard Worker 
4599*03ce13f7SAndroid Build Coastguard Worker 	return VK_TRUE;
4600*03ce13f7SAndroid Build Coastguard Worker }
4601*03ce13f7SAndroid Build Coastguard Worker #endif
4602*03ce13f7SAndroid Build Coastguard Worker 
4603*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_DISPLAY_KHR
vkCreateDisplayModeKHR(VkPhysicalDevice physicalDevice,VkDisplayKHR display,const VkDisplayModeCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkDisplayModeKHR * pMode)4604*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDisplayModeKHR *pMode)
4605*03ce13f7SAndroid Build Coastguard Worker {
4606*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkDisplayKHR display = %p, VkDisplayModeCreateInfoKHR* pCreateInfo = %p, VkAllocationCallbacks* pAllocator = %p, VkDisplayModeKHR* pModei = %p)",
4607*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, static_cast<void *>(display), pCreateInfo, pAllocator, pMode);
4608*03ce13f7SAndroid Build Coastguard Worker 
4609*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4610*03ce13f7SAndroid Build Coastguard Worker }
4611*03ce13f7SAndroid Build Coastguard Worker 
vkCreateDisplayPlaneSurfaceKHR(VkInstance instance,const VkDisplaySurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)4612*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
4613*03ce13f7SAndroid Build Coastguard Worker {
4614*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkDisplaySurfaceCreateInfoKHR* pCreateInfo = %p, VkAllocationCallbacks* pAllocator = %p, VkSurface* pSurface = %p)",
4615*03ce13f7SAndroid Build Coastguard Worker 	      instance, pCreateInfo, pAllocator, pSurface);
4616*03ce13f7SAndroid Build Coastguard Worker 
4617*03ce13f7SAndroid Build Coastguard Worker 	return vk::DisplaySurfaceKHR::Create(pAllocator, pCreateInfo, pSurface);
4618*03ce13f7SAndroid Build Coastguard Worker }
4619*03ce13f7SAndroid Build Coastguard Worker 
vkGetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice,VkDisplayKHR display,uint32_t * pPropertyCount,VkDisplayModePropertiesKHR * pProperties)4620*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t *pPropertyCount, VkDisplayModePropertiesKHR *pProperties)
4621*03ce13f7SAndroid Build Coastguard Worker {
4622*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkDisplayKHR display = %p, uint32_t* pPropertyCount = %p, VkDisplayModePropertiesKHR* pProperties = %p)",
4623*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, static_cast<void *>(display), pPropertyCount, pProperties);
4624*03ce13f7SAndroid Build Coastguard Worker 
4625*03ce13f7SAndroid Build Coastguard Worker 	return vk::DisplaySurfaceKHR::GetDisplayModeProperties(pPropertyCount, pProperties);
4626*03ce13f7SAndroid Build Coastguard Worker }
4627*03ce13f7SAndroid Build Coastguard Worker 
vkGetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice,VkDisplayModeKHR mode,uint32_t planeIndex,VkDisplayPlaneCapabilitiesKHR * pCapabilities)4628*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR *pCapabilities)
4629*03ce13f7SAndroid Build Coastguard Worker {
4630*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkDisplayModeKHR mode = %p, uint32_t planeIndex = %d, VkDisplayPlaneCapabilitiesKHR* pCapabilities = %p)",
4631*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, static_cast<void *>(mode), planeIndex, pCapabilities);
4632*03ce13f7SAndroid Build Coastguard Worker 
4633*03ce13f7SAndroid Build Coastguard Worker 	return vk::DisplaySurfaceKHR::GetDisplayPlaneCapabilities(pCapabilities);
4634*03ce13f7SAndroid Build Coastguard Worker }
4635*03ce13f7SAndroid Build Coastguard Worker 
vkGetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice,uint32_t planeIndex,uint32_t * pDisplayCount,VkDisplayKHR * pDisplays)4636*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t *pDisplayCount, VkDisplayKHR *pDisplays)
4637*03ce13f7SAndroid Build Coastguard Worker {
4638*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t planeIndex = %d, uint32_t* pDisplayCount = %p, VkDisplayKHR* pDisplays = %p)",
4639*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, planeIndex, pDisplayCount, pDisplays);
4640*03ce13f7SAndroid Build Coastguard Worker 
4641*03ce13f7SAndroid Build Coastguard Worker 	return vk::DisplaySurfaceKHR::GetDisplayPlaneSupportedDisplays(pDisplayCount, pDisplays);
4642*03ce13f7SAndroid Build Coastguard Worker }
4643*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkDisplayPlanePropertiesKHR * pProperties)4644*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, VkDisplayPlanePropertiesKHR *pProperties)
4645*03ce13f7SAndroid Build Coastguard Worker {
4646*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t* pPropertyCount = %p, VkDisplayPlanePropertiesKHR* pProperties = %p)",
4647*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pPropertyCount, pProperties);
4648*03ce13f7SAndroid Build Coastguard Worker 
4649*03ce13f7SAndroid Build Coastguard Worker 	return vk::DisplaySurfaceKHR::GetPhysicalDeviceDisplayPlaneProperties(pPropertyCount, pProperties);
4650*03ce13f7SAndroid Build Coastguard Worker }
4651*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice,uint32_t * pPropertyCount,VkDisplayPropertiesKHR * pProperties)4652*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, VkDisplayPropertiesKHR *pProperties)
4653*03ce13f7SAndroid Build Coastguard Worker {
4654*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t* pPropertyCount = %p, VkDisplayPropertiesKHR* pProperties = %p)",
4655*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pPropertyCount, pProperties);
4656*03ce13f7SAndroid Build Coastguard Worker 
4657*03ce13f7SAndroid Build Coastguard Worker 	return vk::DisplaySurfaceKHR::GetPhysicalDeviceDisplayProperties(pPropertyCount, pProperties);
4658*03ce13f7SAndroid Build Coastguard Worker }
4659*03ce13f7SAndroid Build Coastguard Worker #endif
4660*03ce13f7SAndroid Build Coastguard Worker 
4661*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_MACOS_MVK
vkCreateMacOSSurfaceMVK(VkInstance instance,const VkMacOSSurfaceCreateInfoMVK * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)4662*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
4663*03ce13f7SAndroid Build Coastguard Worker {
4664*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkMacOSSurfaceCreateInfoMVK* pCreateInfo = %p, VkAllocationCallbacks* pAllocator = %p, VkSurface* pSurface = %p)",
4665*03ce13f7SAndroid Build Coastguard Worker 	      instance, pCreateInfo, pAllocator, pSurface);
4666*03ce13f7SAndroid Build Coastguard Worker 
4667*03ce13f7SAndroid Build Coastguard Worker 	return vk::MacOSSurfaceMVK::Create(pAllocator, pCreateInfo, pSurface);
4668*03ce13f7SAndroid Build Coastguard Worker }
4669*03ce13f7SAndroid Build Coastguard Worker #endif
4670*03ce13f7SAndroid Build Coastguard Worker 
4671*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_METAL_EXT
vkCreateMetalSurfaceEXT(VkInstance instance,const VkMetalSurfaceCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)4672*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT(VkInstance instance, const VkMetalSurfaceCreateInfoEXT *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
4673*03ce13f7SAndroid Build Coastguard Worker {
4674*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkMetalSurfaceCreateInfoEXT* pCreateInfo = %p, VkAllocationCallbacks* pAllocator = %p, VkSurface* pSurface = %p)",
4675*03ce13f7SAndroid Build Coastguard Worker 	      instance, pCreateInfo, pAllocator, pSurface);
4676*03ce13f7SAndroid Build Coastguard Worker 
4677*03ce13f7SAndroid Build Coastguard Worker 	return vk::MetalSurfaceEXT::Create(pAllocator, pCreateInfo, pSurface);
4678*03ce13f7SAndroid Build Coastguard Worker }
4679*03ce13f7SAndroid Build Coastguard Worker #endif
4680*03ce13f7SAndroid Build Coastguard Worker 
4681*03ce13f7SAndroid Build Coastguard Worker #ifdef VK_USE_PLATFORM_WIN32_KHR
vkCreateWin32SurfaceKHR(VkInstance instance,const VkWin32SurfaceCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)4682*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
4683*03ce13f7SAndroid Build Coastguard Worker {
4684*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkWin32SurfaceCreateInfoKHR* pCreateInfo = %p, VkAllocationCallbacks* pAllocator = %p, VkSurface* pSurface = %p)",
4685*03ce13f7SAndroid Build Coastguard Worker 	      instance, pCreateInfo, pAllocator, pSurface);
4686*03ce13f7SAndroid Build Coastguard Worker 
4687*03ce13f7SAndroid Build Coastguard Worker 	return vk::Win32SurfaceKHR::Create(pAllocator, pCreateInfo, pSurface);
4688*03ce13f7SAndroid Build Coastguard Worker }
4689*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex)4690*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex)
4691*03ce13f7SAndroid Build Coastguard Worker {
4692*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t queueFamilyIndex = %d)",
4693*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, queueFamilyIndex);
4694*03ce13f7SAndroid Build Coastguard Worker 	return VK_TRUE;
4695*03ce13f7SAndroid Build Coastguard Worker }
4696*03ce13f7SAndroid Build Coastguard Worker #endif
4697*03ce13f7SAndroid Build Coastguard Worker 
vkCreateHeadlessSurfaceEXT(VkInstance instance,const VkHeadlessSurfaceCreateInfoEXT * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSurfaceKHR * pSurface)4698*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface)
4699*03ce13f7SAndroid Build Coastguard Worker {
4700*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkHeadlessSurfaceCreateInfoEXT* pCreateInfo = %p, VkAllocationCallbacks* pAllocator = %p, VkSurface* pSurface = %p)",
4701*03ce13f7SAndroid Build Coastguard Worker 	      instance, pCreateInfo, pAllocator, pSurface);
4702*03ce13f7SAndroid Build Coastguard Worker 
4703*03ce13f7SAndroid Build Coastguard Worker 	return vk::HeadlessSurfaceKHR::Create(pAllocator, pCreateInfo, pSurface);
4704*03ce13f7SAndroid Build Coastguard Worker }
4705*03ce13f7SAndroid Build Coastguard Worker 
4706*03ce13f7SAndroid Build Coastguard Worker #ifndef __ANDROID__
vkDestroySurfaceKHR(VkInstance instance,VkSurfaceKHR surface,const VkAllocationCallbacks * pAllocator)4707*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks *pAllocator)
4708*03ce13f7SAndroid Build Coastguard Worker {
4709*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkInstance instance = %p, VkSurfaceKHR surface = %p, const VkAllocationCallbacks* pAllocator = %p)",
4710*03ce13f7SAndroid Build Coastguard Worker 	      instance, static_cast<void *>(surface), pAllocator);
4711*03ce13f7SAndroid Build Coastguard Worker 
4712*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(surface, pAllocator);
4713*03ce13f7SAndroid Build Coastguard Worker }
4714*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice,uint32_t queueFamilyIndex,VkSurfaceKHR surface,VkBool32 * pSupported)4715*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32 *pSupported)
4716*03ce13f7SAndroid Build Coastguard Worker {
4717*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t queueFamilyIndex = %d, VkSurface surface = %p, VKBool32* pSupported = %p)",
4718*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, int(queueFamilyIndex), static_cast<void *>(surface), pSupported);
4719*03ce13f7SAndroid Build Coastguard Worker 
4720*03ce13f7SAndroid Build Coastguard Worker 	*pSupported = VK_TRUE;
4721*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4722*03ce13f7SAndroid Build Coastguard Worker }
4723*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,VkSurfaceCapabilitiesKHR * pSurfaceCapabilities)4724*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR *pSurfaceCapabilities)
4725*03ce13f7SAndroid Build Coastguard Worker {
4726*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkSurfaceKHR surface = %p, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities = %p)",
4727*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, static_cast<void *>(surface), pSurfaceCapabilities);
4728*03ce13f7SAndroid Build Coastguard Worker 
4729*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(surface)->getSurfaceCapabilities(nullptr, pSurfaceCapabilities, nullptr);
4730*03ce13f7SAndroid Build Coastguard Worker }
4731*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,VkSurfaceCapabilities2KHR * pSurfaceCapabilities)4732*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, VkSurfaceCapabilities2KHR *pSurfaceCapabilities)
4733*03ce13f7SAndroid Build Coastguard Worker {
4734*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo = %p, VkSurfaceCapabilities2KHR *pSurfaceCapabilities = %p)",
4735*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pSurfaceInfo, pSurfaceCapabilities);
4736*03ce13f7SAndroid Build Coastguard Worker 
4737*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pSurfaceInfo->surface)->getSurfaceCapabilities(pSurfaceInfo->pNext, &pSurfaceCapabilities->surfaceCapabilities, pSurfaceCapabilities->pNext);
4738*03ce13f7SAndroid Build Coastguard Worker }
4739*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t * pSurfaceFormatCount,VkSurfaceFormatKHR * pSurfaceFormats)4740*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t *pSurfaceFormatCount, VkSurfaceFormatKHR *pSurfaceFormats)
4741*03ce13f7SAndroid Build Coastguard Worker {
4742*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkSurfaceKHR surface = %p. uint32_t* pSurfaceFormatCount = %p, VkSurfaceFormatKHR* pSurfaceFormats = %p)",
4743*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, static_cast<void *>(surface), pSurfaceFormatCount, pSurfaceFormats);
4744*03ce13f7SAndroid Build Coastguard Worker 
4745*03ce13f7SAndroid Build Coastguard Worker 	if(!pSurfaceFormats)
4746*03ce13f7SAndroid Build Coastguard Worker 	{
4747*03ce13f7SAndroid Build Coastguard Worker 		*pSurfaceFormatCount = vk::Cast(surface)->getSurfaceFormatsCount(nullptr);
4748*03ce13f7SAndroid Build Coastguard Worker 		return VK_SUCCESS;
4749*03ce13f7SAndroid Build Coastguard Worker 	}
4750*03ce13f7SAndroid Build Coastguard Worker 
4751*03ce13f7SAndroid Build Coastguard Worker 	std::vector<VkSurfaceFormat2KHR> formats(*pSurfaceFormatCount);
4752*03ce13f7SAndroid Build Coastguard Worker 
4753*03ce13f7SAndroid Build Coastguard Worker 	VkResult result = vk::Cast(surface)->getSurfaceFormats(nullptr, pSurfaceFormatCount, formats.data());
4754*03ce13f7SAndroid Build Coastguard Worker 
4755*03ce13f7SAndroid Build Coastguard Worker 	if(result == VK_SUCCESS || result == VK_INCOMPLETE)
4756*03ce13f7SAndroid Build Coastguard Worker 	{
4757*03ce13f7SAndroid Build Coastguard Worker 		// The value returned in pSurfaceFormatCount is either capped at the original value,
4758*03ce13f7SAndroid Build Coastguard Worker 		// or is smaller because there aren't that many formats.
4759*03ce13f7SAndroid Build Coastguard Worker 		ASSERT(*pSurfaceFormatCount <= formats.size());
4760*03ce13f7SAndroid Build Coastguard Worker 
4761*03ce13f7SAndroid Build Coastguard Worker 		for(size_t i = 0; i < *pSurfaceFormatCount; ++i)
4762*03ce13f7SAndroid Build Coastguard Worker 		{
4763*03ce13f7SAndroid Build Coastguard Worker 			pSurfaceFormats[i] = formats[i].surfaceFormat;
4764*03ce13f7SAndroid Build Coastguard Worker 		}
4765*03ce13f7SAndroid Build Coastguard Worker 	}
4766*03ce13f7SAndroid Build Coastguard Worker 
4767*03ce13f7SAndroid Build Coastguard Worker 	return result;
4768*03ce13f7SAndroid Build Coastguard Worker }
4769*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice,const VkPhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,uint32_t * pSurfaceFormatCount,VkSurfaceFormat2KHR * pSurfaceFormats)4770*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, uint32_t *pSurfaceFormatCount, VkSurfaceFormat2KHR *pSurfaceFormats)
4771*03ce13f7SAndroid Build Coastguard Worker {
4772*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo = %p. uint32_t* pSurfaceFormatCount = %p, VkSurfaceFormat2KHR* pSurfaceFormats = %p)",
4773*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, pSurfaceInfo, pSurfaceFormatCount, pSurfaceFormats);
4774*03ce13f7SAndroid Build Coastguard Worker 
4775*03ce13f7SAndroid Build Coastguard Worker 	if(!pSurfaceFormats)
4776*03ce13f7SAndroid Build Coastguard Worker 	{
4777*03ce13f7SAndroid Build Coastguard Worker 		*pSurfaceFormatCount = vk::Cast(pSurfaceInfo->surface)->getSurfaceFormatsCount(pSurfaceInfo->pNext);
4778*03ce13f7SAndroid Build Coastguard Worker 		return VK_SUCCESS;
4779*03ce13f7SAndroid Build Coastguard Worker 	}
4780*03ce13f7SAndroid Build Coastguard Worker 
4781*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pSurfaceInfo->surface)->getSurfaceFormats(pSurfaceInfo->pNext, pSurfaceFormatCount, pSurfaceFormats);
4782*03ce13f7SAndroid Build Coastguard Worker }
4783*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t * pPresentModeCount,VkPresentModeKHR * pPresentModes)4784*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t *pPresentModeCount, VkPresentModeKHR *pPresentModes)
4785*03ce13f7SAndroid Build Coastguard Worker {
4786*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkSurfaceKHR surface = %p uint32_t* pPresentModeCount = %p, VkPresentModeKHR* pPresentModes = %p)",
4787*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, static_cast<void *>(surface), pPresentModeCount, pPresentModes);
4788*03ce13f7SAndroid Build Coastguard Worker 
4789*03ce13f7SAndroid Build Coastguard Worker 	if(!pPresentModes)
4790*03ce13f7SAndroid Build Coastguard Worker 	{
4791*03ce13f7SAndroid Build Coastguard Worker 		*pPresentModeCount = vk::Cast(surface)->getPresentModeCount();
4792*03ce13f7SAndroid Build Coastguard Worker 		return VK_SUCCESS;
4793*03ce13f7SAndroid Build Coastguard Worker 	}
4794*03ce13f7SAndroid Build Coastguard Worker 
4795*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(surface)->getPresentModes(pPresentModeCount, pPresentModes);
4796*03ce13f7SAndroid Build Coastguard Worker }
4797*03ce13f7SAndroid Build Coastguard Worker 
vkCreateSwapchainKHR(VkDevice device,const VkSwapchainCreateInfoKHR * pCreateInfo,const VkAllocationCallbacks * pAllocator,VkSwapchainKHR * pSwapchain)4798*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain)
4799*03ce13f7SAndroid Build Coastguard Worker {
4800*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkSwapchainCreateInfoKHR* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkSwapchainKHR* pSwapchain = %p)",
4801*03ce13f7SAndroid Build Coastguard Worker 	      device, pCreateInfo, pAllocator, pSwapchain);
4802*03ce13f7SAndroid Build Coastguard Worker 
4803*03ce13f7SAndroid Build Coastguard Worker 	if(pCreateInfo->oldSwapchain)
4804*03ce13f7SAndroid Build Coastguard Worker 	{
4805*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(pCreateInfo->oldSwapchain)->retire();
4806*03ce13f7SAndroid Build Coastguard Worker 	}
4807*03ce13f7SAndroid Build Coastguard Worker 
4808*03ce13f7SAndroid Build Coastguard Worker 	if(vk::Cast(pCreateInfo->surface)->hasAssociatedSwapchain())
4809*03ce13f7SAndroid Build Coastguard Worker 	{
4810*03ce13f7SAndroid Build Coastguard Worker 		return VK_ERROR_NATIVE_WINDOW_IN_USE_KHR;
4811*03ce13f7SAndroid Build Coastguard Worker 	}
4812*03ce13f7SAndroid Build Coastguard Worker 
4813*03ce13f7SAndroid Build Coastguard Worker 	VkResult status = vk::SwapchainKHR::Create(pAllocator, pCreateInfo, pSwapchain);
4814*03ce13f7SAndroid Build Coastguard Worker 
4815*03ce13f7SAndroid Build Coastguard Worker 	if(status != VK_SUCCESS)
4816*03ce13f7SAndroid Build Coastguard Worker 	{
4817*03ce13f7SAndroid Build Coastguard Worker 		return status;
4818*03ce13f7SAndroid Build Coastguard Worker 	}
4819*03ce13f7SAndroid Build Coastguard Worker 
4820*03ce13f7SAndroid Build Coastguard Worker 	auto *swapchain = vk::Cast(*pSwapchain);
4821*03ce13f7SAndroid Build Coastguard Worker 	status = swapchain->createImages(device, pCreateInfo);
4822*03ce13f7SAndroid Build Coastguard Worker 
4823*03ce13f7SAndroid Build Coastguard Worker 	if(status != VK_SUCCESS)
4824*03ce13f7SAndroid Build Coastguard Worker 	{
4825*03ce13f7SAndroid Build Coastguard Worker 		vk::destroy(*pSwapchain, pAllocator);
4826*03ce13f7SAndroid Build Coastguard Worker 		return status;
4827*03ce13f7SAndroid Build Coastguard Worker 	}
4828*03ce13f7SAndroid Build Coastguard Worker 
4829*03ce13f7SAndroid Build Coastguard Worker 	vk::Cast(pCreateInfo->surface)->associateSwapchain(swapchain);
4830*03ce13f7SAndroid Build Coastguard Worker 
4831*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4832*03ce13f7SAndroid Build Coastguard Worker }
4833*03ce13f7SAndroid Build Coastguard Worker 
vkDestroySwapchainKHR(VkDevice device,VkSwapchainKHR swapchain,const VkAllocationCallbacks * pAllocator)4834*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks *pAllocator)
4835*03ce13f7SAndroid Build Coastguard Worker {
4836*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkSwapchainKHR swapchain = %p, const VkAllocationCallbacks* pAllocator = %p)",
4837*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(swapchain), pAllocator);
4838*03ce13f7SAndroid Build Coastguard Worker 
4839*03ce13f7SAndroid Build Coastguard Worker 	vk::destroy(swapchain, pAllocator);
4840*03ce13f7SAndroid Build Coastguard Worker }
4841*03ce13f7SAndroid Build Coastguard Worker 
vkGetSwapchainImagesKHR(VkDevice device,VkSwapchainKHR swapchain,uint32_t * pSwapchainImageCount,VkImage * pSwapchainImages)4842*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t *pSwapchainImageCount, VkImage *pSwapchainImages)
4843*03ce13f7SAndroid Build Coastguard Worker {
4844*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkSwapchainKHR swapchain = %p, uint32_t* pSwapchainImageCount = %p, VkImage* pSwapchainImages = %p)",
4845*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(swapchain), pSwapchainImageCount, pSwapchainImages);
4846*03ce13f7SAndroid Build Coastguard Worker 
4847*03ce13f7SAndroid Build Coastguard Worker 	if(!pSwapchainImages)
4848*03ce13f7SAndroid Build Coastguard Worker 	{
4849*03ce13f7SAndroid Build Coastguard Worker 		*pSwapchainImageCount = vk::Cast(swapchain)->getImageCount();
4850*03ce13f7SAndroid Build Coastguard Worker 		return VK_SUCCESS;
4851*03ce13f7SAndroid Build Coastguard Worker 	}
4852*03ce13f7SAndroid Build Coastguard Worker 
4853*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(swapchain)->getImages(pSwapchainImageCount, pSwapchainImages);
4854*03ce13f7SAndroid Build Coastguard Worker }
4855*03ce13f7SAndroid Build Coastguard Worker 
vkAcquireNextImageKHR(VkDevice device,VkSwapchainKHR swapchain,uint64_t timeout,VkSemaphore semaphore,VkFence fence,uint32_t * pImageIndex)4856*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t *pImageIndex)
4857*03ce13f7SAndroid Build Coastguard Worker {
4858*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkSwapchainKHR swapchain = %p, uint64_t timeout = %" PRIu64 ", VkSemaphore semaphore = %p, VkFence fence = %p, uint32_t* pImageIndex = %p)",
4859*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(swapchain), timeout, static_cast<void *>(semaphore), static_cast<void *>(fence), pImageIndex);
4860*03ce13f7SAndroid Build Coastguard Worker 
4861*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(swapchain)->getNextImage(timeout, vk::DynamicCast<vk::BinarySemaphore>(semaphore), vk::Cast(fence), pImageIndex);
4862*03ce13f7SAndroid Build Coastguard Worker }
4863*03ce13f7SAndroid Build Coastguard Worker 
vkQueuePresentKHR(VkQueue queue,const VkPresentInfoKHR * pPresentInfo)4864*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo)
4865*03ce13f7SAndroid Build Coastguard Worker {
4866*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkQueue queue = %p, const VkPresentInfoKHR* pPresentInfo = %p)",
4867*03ce13f7SAndroid Build Coastguard Worker 	      queue, pPresentInfo);
4868*03ce13f7SAndroid Build Coastguard Worker 
4869*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(queue)->present(pPresentInfo);
4870*03ce13f7SAndroid Build Coastguard Worker }
4871*03ce13f7SAndroid Build Coastguard Worker 
vkAcquireNextImage2KHR(VkDevice device,const VkAcquireNextImageInfoKHR * pAcquireInfo,uint32_t * pImageIndex)4872*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR(VkDevice device, const VkAcquireNextImageInfoKHR *pAcquireInfo, uint32_t *pImageIndex)
4873*03ce13f7SAndroid Build Coastguard Worker {
4874*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkAcquireNextImageInfoKHR *pAcquireInfo = %p, uint32_t *pImageIndex = %p",
4875*03ce13f7SAndroid Build Coastguard Worker 	      device, pAcquireInfo, pImageIndex);
4876*03ce13f7SAndroid Build Coastguard Worker 
4877*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pAcquireInfo->swapchain)->getNextImage(pAcquireInfo->timeout, vk::DynamicCast<vk::BinarySemaphore>(pAcquireInfo->semaphore), vk::Cast(pAcquireInfo->fence), pImageIndex);
4878*03ce13f7SAndroid Build Coastguard Worker }
4879*03ce13f7SAndroid Build Coastguard Worker 
vkReleaseSwapchainImagesEXT(VkDevice device,const VkReleaseSwapchainImagesInfoEXT * pReleaseInfo)4880*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkReleaseSwapchainImagesEXT(VkDevice device, const VkReleaseSwapchainImagesInfoEXT *pReleaseInfo)
4881*03ce13f7SAndroid Build Coastguard Worker {
4882*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, const VkReleaseSwapchainImagesInfoEXT *pReleaseInfo = %p",
4883*03ce13f7SAndroid Build Coastguard Worker 	      device, pReleaseInfo);
4884*03ce13f7SAndroid Build Coastguard Worker 
4885*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(pReleaseInfo->swapchain)->releaseImages(pReleaseInfo->imageIndexCount, pReleaseInfo->pImageIndices);
4886*03ce13f7SAndroid Build Coastguard Worker }
4887*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceGroupPresentCapabilitiesKHR(VkDevice device,VkDeviceGroupPresentCapabilitiesKHR * pDeviceGroupPresentCapabilities)4888*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR *pDeviceGroupPresentCapabilities)
4889*03ce13f7SAndroid Build Coastguard Worker {
4890*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities = %p)",
4891*03ce13f7SAndroid Build Coastguard Worker 	      device, pDeviceGroupPresentCapabilities);
4892*03ce13f7SAndroid Build Coastguard Worker 
4893*03ce13f7SAndroid Build Coastguard Worker 	for(unsigned int i = 0; i < VK_MAX_DEVICE_GROUP_SIZE; i++)
4894*03ce13f7SAndroid Build Coastguard Worker 	{
4895*03ce13f7SAndroid Build Coastguard Worker 		// The only real physical device in the presentation group is device 0,
4896*03ce13f7SAndroid Build Coastguard Worker 		// and it can present to itself.
4897*03ce13f7SAndroid Build Coastguard Worker 		pDeviceGroupPresentCapabilities->presentMask[i] = (i == 0) ? 1 : 0;
4898*03ce13f7SAndroid Build Coastguard Worker 	}
4899*03ce13f7SAndroid Build Coastguard Worker 
4900*03ce13f7SAndroid Build Coastguard Worker 	pDeviceGroupPresentCapabilities->modes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR;
4901*03ce13f7SAndroid Build Coastguard Worker 
4902*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4903*03ce13f7SAndroid Build Coastguard Worker }
4904*03ce13f7SAndroid Build Coastguard Worker 
vkGetDeviceGroupSurfacePresentModesKHR(VkDevice device,VkSurfaceKHR surface,VkDeviceGroupPresentModeFlagsKHR * pModes)4905*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR *pModes)
4906*03ce13f7SAndroid Build Coastguard Worker {
4907*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkSurfaceKHR surface = %p, VkDeviceGroupPresentModeFlagsKHR *pModes = %p)",
4908*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(surface), pModes);
4909*03ce13f7SAndroid Build Coastguard Worker 
4910*03ce13f7SAndroid Build Coastguard Worker 	*pModes = VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR;
4911*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4912*03ce13f7SAndroid Build Coastguard Worker }
4913*03ce13f7SAndroid Build Coastguard Worker 
vkGetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice,VkSurfaceKHR surface,uint32_t * pRectCount,VkRect2D * pRects)4914*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t *pRectCount, VkRect2D *pRects)
4915*03ce13f7SAndroid Build Coastguard Worker {
4916*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkSurfaceKHR surface = %p, uint32_t* pRectCount = %p, VkRect2D* pRects = %p)",
4917*03ce13f7SAndroid Build Coastguard Worker 	      physicalDevice, static_cast<void *>(surface), pRectCount, pRects);
4918*03ce13f7SAndroid Build Coastguard Worker 
4919*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(surface)->getPresentRectangles(pRectCount, pRects);
4920*03ce13f7SAndroid Build Coastguard Worker }
4921*03ce13f7SAndroid Build Coastguard Worker 
4922*03ce13f7SAndroid Build Coastguard Worker #endif  // ! __ANDROID__
4923*03ce13f7SAndroid Build Coastguard Worker 
4924*03ce13f7SAndroid Build Coastguard Worker #ifdef __ANDROID__
4925*03ce13f7SAndroid Build Coastguard Worker 
vkGetSwapchainGrallocUsage2ANDROID(VkDevice device,VkFormat format,VkImageUsageFlags imageUsage,VkSwapchainImageUsageFlagsANDROID swapchainUsage,uint64_t * grallocConsumerUsage,uint64_t * grallocProducerUsage)4926*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsage2ANDROID(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, VkSwapchainImageUsageFlagsANDROID swapchainUsage, uint64_t *grallocConsumerUsage, uint64_t *grallocProducerUsage)
4927*03ce13f7SAndroid Build Coastguard Worker {
4928*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkFormat format = %d, VkImageUsageFlags imageUsage = %d, VkSwapchainImageUsageFlagsANDROID swapchainUsage = %d, uint64_t* grallocConsumerUsage = %p, uin64_t* grallocProducerUsage = %p)",
4929*03ce13f7SAndroid Build Coastguard Worker 	      device, format, imageUsage, swapchainUsage, grallocConsumerUsage, grallocProducerUsage);
4930*03ce13f7SAndroid Build Coastguard Worker 
4931*03ce13f7SAndroid Build Coastguard Worker 	*grallocConsumerUsage = 0;
4932*03ce13f7SAndroid Build Coastguard Worker 	*grallocProducerUsage = GRALLOC1_PRODUCER_USAGE_CPU_WRITE_OFTEN;
4933*03ce13f7SAndroid Build Coastguard Worker 
4934*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4935*03ce13f7SAndroid Build Coastguard Worker }
4936*03ce13f7SAndroid Build Coastguard Worker 
vkGetSwapchainGrallocUsageANDROID(VkDevice device,VkFormat format,VkImageUsageFlags imageUsage,int * grallocUsage)4937*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsageANDROID(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int *grallocUsage)
4938*03ce13f7SAndroid Build Coastguard Worker {
4939*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkFormat format = %d, VkImageUsageFlags imageUsage = %d, int* grallocUsage = %p)",
4940*03ce13f7SAndroid Build Coastguard Worker 	      device, format, imageUsage, grallocUsage);
4941*03ce13f7SAndroid Build Coastguard Worker 
4942*03ce13f7SAndroid Build Coastguard Worker 	*grallocUsage = GRALLOC_USAGE_SW_WRITE_OFTEN;
4943*03ce13f7SAndroid Build Coastguard Worker 
4944*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4945*03ce13f7SAndroid Build Coastguard Worker }
4946*03ce13f7SAndroid Build Coastguard Worker 
vkAcquireImageANDROID(VkDevice device,VkImage image,int nativeFenceFd,VkSemaphore semaphore,VkFence fence)4947*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkAcquireImageANDROID(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore, VkFence fence)
4948*03ce13f7SAndroid Build Coastguard Worker {
4949*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkDevice device = %p, VkImage image = %p, int nativeFenceFd = %d, VkSemaphore semaphore = %p, VkFence fence = %p)",
4950*03ce13f7SAndroid Build Coastguard Worker 	      device, static_cast<void *>(image), nativeFenceFd, static_cast<void *>(semaphore), static_cast<void *>(fence));
4951*03ce13f7SAndroid Build Coastguard Worker 
4952*03ce13f7SAndroid Build Coastguard Worker 	if(nativeFenceFd >= 0)
4953*03ce13f7SAndroid Build Coastguard Worker 	{
4954*03ce13f7SAndroid Build Coastguard Worker 		sync_wait(nativeFenceFd, -1);
4955*03ce13f7SAndroid Build Coastguard Worker 		close(nativeFenceFd);
4956*03ce13f7SAndroid Build Coastguard Worker 	}
4957*03ce13f7SAndroid Build Coastguard Worker 
4958*03ce13f7SAndroid Build Coastguard Worker 	if(fence != VK_NULL_HANDLE)
4959*03ce13f7SAndroid Build Coastguard Worker 	{
4960*03ce13f7SAndroid Build Coastguard Worker 		vk::Cast(fence)->complete();
4961*03ce13f7SAndroid Build Coastguard Worker 	}
4962*03ce13f7SAndroid Build Coastguard Worker 
4963*03ce13f7SAndroid Build Coastguard Worker 	if(semaphore != VK_NULL_HANDLE)
4964*03ce13f7SAndroid Build Coastguard Worker 	{
4965*03ce13f7SAndroid Build Coastguard Worker 		vk::DynamicCast<vk::BinarySemaphore>(semaphore)->signal();
4966*03ce13f7SAndroid Build Coastguard Worker 	}
4967*03ce13f7SAndroid Build Coastguard Worker 
4968*03ce13f7SAndroid Build Coastguard Worker 	return VK_SUCCESS;
4969*03ce13f7SAndroid Build Coastguard Worker }
4970*03ce13f7SAndroid Build Coastguard Worker 
vkQueueSignalReleaseImageANDROID(VkQueue queue,uint32_t waitSemaphoreCount,const VkSemaphore * pWaitSemaphores,VkImage image,int * pNativeFenceFd)4971*03ce13f7SAndroid Build Coastguard Worker VKAPI_ATTR VkResult VKAPI_CALL vkQueueSignalReleaseImageANDROID(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore *pWaitSemaphores, VkImage image, int *pNativeFenceFd)
4972*03ce13f7SAndroid Build Coastguard Worker {
4973*03ce13f7SAndroid Build Coastguard Worker 	TRACE("(VkQueue queue = %p, uint32_t waitSemaphoreCount = %d, const VkSemaphore* pWaitSemaphores = %p, VkImage image = %p, int* pNativeFenceFd = %p)",
4974*03ce13f7SAndroid Build Coastguard Worker 	      queue, waitSemaphoreCount, pWaitSemaphores, static_cast<void *>(image), pNativeFenceFd);
4975*03ce13f7SAndroid Build Coastguard Worker 
4976*03ce13f7SAndroid Build Coastguard Worker 	// This is a hack to deal with screen tearing for now.
4977*03ce13f7SAndroid Build Coastguard Worker 	// Need to correctly implement threading using VkSemaphore
4978*03ce13f7SAndroid Build Coastguard Worker 	// to get rid of it. b/132458423
4979*03ce13f7SAndroid Build Coastguard Worker 	vkQueueWaitIdle(queue);
4980*03ce13f7SAndroid Build Coastguard Worker 
4981*03ce13f7SAndroid Build Coastguard Worker 	*pNativeFenceFd = -1;
4982*03ce13f7SAndroid Build Coastguard Worker 
4983*03ce13f7SAndroid Build Coastguard Worker 	return vk::Cast(image)->prepareForExternalUseANDROID();
4984*03ce13f7SAndroid Build Coastguard Worker }
4985*03ce13f7SAndroid Build Coastguard Worker #endif  // __ANDROID__
4986*03ce13f7SAndroid Build Coastguard Worker }
4987