#ifndef VULKAN_OHOS_H_
#define VULKAN_OHOS_H_ 1

/*
** Copyright 2015-2026 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0 OR MIT
*/

/*
** This header is generated from the Khronos Vulkan XML API Registry.
**
*/


#ifdef __cplusplus
extern "C" {
#endif

// VK_OHOS_external_memory is a preprocessor guard. Do not pass it to API calls.
#	define VK_OHOS_external_memory 1
struct OH_NativeBuffer;
#	define VK_OHOS_EXTERNAL_MEMORY_SPEC_VERSION 1
#	define VK_OHOS_EXTERNAL_MEMORY_EXTENSION_NAME "VK_OHOS_external_memory"
typedef struct VkNativeBufferUsageOHOS
{
	VkStructureType sType;
	void *pNext;
	uint64_t OHOSNativeBufferUsage;
} VkNativeBufferUsageOHOS;

typedef struct VkNativeBufferPropertiesOHOS
{
	VkStructureType sType;
	void *pNext;
	VkDeviceSize allocationSize;
	uint32_t memoryTypeBits;
} VkNativeBufferPropertiesOHOS;

typedef struct VkNativeBufferFormatPropertiesOHOS
{
	VkStructureType sType;
	void *pNext;
	VkFormat format;
	uint64_t externalFormat;
	VkFormatFeatureFlags formatFeatures;
	VkComponentMapping samplerYcbcrConversionComponents;
	VkSamplerYcbcrModelConversion suggestedYcbcrModel;
	VkSamplerYcbcrRange suggestedYcbcrRange;
	VkChromaLocation suggestedXChromaOffset;
	VkChromaLocation suggestedYChromaOffset;
} VkNativeBufferFormatPropertiesOHOS;

typedef struct VkImportNativeBufferInfoOHOS
{
	VkStructureType sType;
	const void *pNext;
	struct OH_NativeBuffer *buffer;
} VkImportNativeBufferInfoOHOS;

typedef struct VkMemoryGetNativeBufferInfoOHOS
{
	VkStructureType sType;
	const void *pNext;
	VkDeviceMemory memory;
} VkMemoryGetNativeBufferInfoOHOS;

typedef struct VkExternalFormatOHOS
{
	VkStructureType sType;
	void *pNext;
	uint64_t externalFormat;
} VkExternalFormatOHOS;

typedef VkResult(VKAPI_PTR *PFN_vkGetNativeBufferPropertiesOHOS)(VkDevice device, const struct OH_NativeBuffer *buffer, VkNativeBufferPropertiesOHOS *pProperties);
typedef VkResult(VKAPI_PTR *PFN_vkGetMemoryNativeBufferOHOS)(VkDevice device, const VkMemoryGetNativeBufferInfoOHOS *pInfo, struct OH_NativeBuffer **pBuffer);

#	ifndef VK_NO_PROTOTYPES
#		ifndef VK_ONLY_EXPORTED_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkGetNativeBufferPropertiesOHOS(
    VkDevice device,
    const struct OH_NativeBuffer *buffer,
    VkNativeBufferPropertiesOHOS *pProperties);
#		endif

#		ifndef VK_ONLY_EXPORTED_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryNativeBufferOHOS(
    VkDevice device,
    const VkMemoryGetNativeBufferInfoOHOS *pInfo,
    struct OH_NativeBuffer **pBuffer);
#		endif
#	endif

// VK_OHOS_surface is a preprocessor guard. Do not pass it to API calls.
#define VK_OHOS_surface 1
typedef struct NativeWindow OHNativeWindow;
#define VK_OHOS_SURFACE_SPEC_VERSION      1
#define VK_OHOS_SURFACE_EXTENSION_NAME    "VK_OHOS_surface"
typedef VkFlags VkSurfaceCreateFlagsOHOS;
typedef struct VkSurfaceCreateInfoOHOS
{
	VkStructureType             sType;
    const void*                 pNext;
    VkSurfaceCreateFlagsOHOS    flags;
    OHNativeWindow*             window;
} VkSurfaceCreateInfoOHOS;

typedef VkResult (VKAPI_PTR *PFN_vkCreateSurfaceOHOS)(VkInstance instance, const VkSurfaceCreateInfoOHOS* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface);

#ifndef VK_NO_PROTOTYPES
#ifndef VK_ONLY_EXPORTED_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkCreateSurfaceOHOS(
    VkInstance                                  instance,
    const VkSurfaceCreateInfoOHOS*              pCreateInfo,
    const VkAllocationCallbacks*                pAllocator,
    VkSurfaceKHR*                               pSurface);
#endif
#endif

#ifdef __cplusplus
}
#endif

#endif
