//go:build darwin
// Code generated by go-vk from vk-1.3.270.xml at 2023-11-22 10:57:10.641701 -0500 EST m=+3.167146284. DO NOT EDIT.

package vk

import "unsafe"

// ExportMetalBufferInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkExportMetalBufferInfoEXT.html
type ExportMetalBufferInfoEXT struct {
	// SType = STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT
	PNext     unsafe.Pointer
	Memory    DeviceMemory
	MtlBuffer MTLBuffer_id
}

type _vkExportMetalBufferInfoEXT struct {
	sType     StructureType
	pNext     unsafe.Pointer
	memory    DeviceMemory
	mtlBuffer MTLBuffer_id
}

func (s *_vkExportMetalBufferInfoEXT) Goify() *ExportMetalBufferInfoEXT {
	rval := &ExportMetalBufferInfoEXT{
		PNext:     (unsafe.Pointer)(s.pNext),
		Memory:    (DeviceMemory)(s.memory),
		MtlBuffer: (MTLBuffer_id)(s.mtlBuffer),
	}
	return rval
}
func (s *ExportMetalBufferInfoEXT) Vulkanize() *_vkExportMetalBufferInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkExportMetalBufferInfoEXT{
		sType:     STRUCTURE_TYPE_EXPORT_METAL_BUFFER_INFO_EXT, /*c1*/
		pNext:     (unsafe.Pointer)(s.PNext),                   /*cb*/
		memory:    (DeviceMemory)(s.Memory),                    /*cb*/
		mtlBuffer: (MTLBuffer_id)(s.MtlBuffer),                 /*cb*/
	}
	return rval
}

// ExportMetalCommandQueueInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkExportMetalCommandQueueInfoEXT.html
type ExportMetalCommandQueueInfoEXT struct {
	// SType = STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT
	PNext           unsafe.Pointer
	Queue           Queue
	MtlCommandQueue MTLCommandQueue_id
}

type _vkExportMetalCommandQueueInfoEXT struct {
	sType           StructureType
	pNext           unsafe.Pointer
	queue           Queue
	mtlCommandQueue MTLCommandQueue_id
}

func (s *_vkExportMetalCommandQueueInfoEXT) Goify() *ExportMetalCommandQueueInfoEXT {
	rval := &ExportMetalCommandQueueInfoEXT{
		PNext:           (unsafe.Pointer)(s.pNext),
		Queue:           (Queue)(s.queue),
		MtlCommandQueue: (MTLCommandQueue_id)(s.mtlCommandQueue),
	}
	return rval
}
func (s *ExportMetalCommandQueueInfoEXT) Vulkanize() *_vkExportMetalCommandQueueInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkExportMetalCommandQueueInfoEXT{
		sType:           STRUCTURE_TYPE_EXPORT_METAL_COMMAND_QUEUE_INFO_EXT, /*c1*/
		pNext:           (unsafe.Pointer)(s.PNext),                          /*cb*/
		queue:           (Queue)(s.Queue),                                   /*cb*/
		mtlCommandQueue: (MTLCommandQueue_id)(s.MtlCommandQueue),            /*cb*/
	}
	return rval
}

// ExportMetalDeviceInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkExportMetalDeviceInfoEXT.html
type ExportMetalDeviceInfoEXT struct {
	// SType = STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT
	PNext     unsafe.Pointer
	MtlDevice MTLDevice_id
}

type _vkExportMetalDeviceInfoEXT struct {
	sType     StructureType
	pNext     unsafe.Pointer
	mtlDevice MTLDevice_id
}

func (s *_vkExportMetalDeviceInfoEXT) Goify() *ExportMetalDeviceInfoEXT {
	rval := &ExportMetalDeviceInfoEXT{
		PNext:     (unsafe.Pointer)(s.pNext),
		MtlDevice: (MTLDevice_id)(s.mtlDevice),
	}
	return rval
}
func (s *ExportMetalDeviceInfoEXT) Vulkanize() *_vkExportMetalDeviceInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkExportMetalDeviceInfoEXT{
		sType:     STRUCTURE_TYPE_EXPORT_METAL_DEVICE_INFO_EXT, /*c1*/
		pNext:     (unsafe.Pointer)(s.PNext),                   /*cb*/
		mtlDevice: (MTLDevice_id)(s.MtlDevice),                 /*cb*/
	}
	return rval
}

// ExportMetalIOSurfaceInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkExportMetalIOSurfaceInfoEXT.html
type ExportMetalIOSurfaceInfoEXT struct {
	// SType = STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT
	PNext     unsafe.Pointer
	Image     Image
	IoSurface IOSurfaceRef
}

type _vkExportMetalIOSurfaceInfoEXT struct {
	sType     StructureType
	pNext     unsafe.Pointer
	image     Image
	ioSurface IOSurfaceRef
}

func (s *_vkExportMetalIOSurfaceInfoEXT) Goify() *ExportMetalIOSurfaceInfoEXT {
	rval := &ExportMetalIOSurfaceInfoEXT{
		PNext:     (unsafe.Pointer)(s.pNext),
		Image:     (Image)(s.image),
		IoSurface: (IOSurfaceRef)(s.ioSurface),
	}
	return rval
}
func (s *ExportMetalIOSurfaceInfoEXT) Vulkanize() *_vkExportMetalIOSurfaceInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkExportMetalIOSurfaceInfoEXT{
		sType:     STRUCTURE_TYPE_EXPORT_METAL_IO_SURFACE_INFO_EXT, /*c1*/
		pNext:     (unsafe.Pointer)(s.PNext),                       /*cb*/
		image:     (Image)(s.Image),                                /*cb*/
		ioSurface: (IOSurfaceRef)(s.IoSurface),                     /*cb*/
	}
	return rval
}

// ExportMetalObjectCreateInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkExportMetalObjectCreateInfoEXT.html
type ExportMetalObjectCreateInfoEXT struct {
	// SType = STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT
	PNext            unsafe.Pointer
	ExportObjectType ExportMetalObjectTypeFlagBitsEXT
}

type _vkExportMetalObjectCreateInfoEXT struct {
	sType            StructureType
	pNext            unsafe.Pointer
	exportObjectType ExportMetalObjectTypeFlagBitsEXT
}

func (s *_vkExportMetalObjectCreateInfoEXT) Goify() *ExportMetalObjectCreateInfoEXT {
	rval := &ExportMetalObjectCreateInfoEXT{
		PNext:            (unsafe.Pointer)(s.pNext),
		ExportObjectType: (ExportMetalObjectTypeFlagBitsEXT)(s.exportObjectType),
	}
	return rval
}
func (s *ExportMetalObjectCreateInfoEXT) Vulkanize() *_vkExportMetalObjectCreateInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkExportMetalObjectCreateInfoEXT{
		sType:            STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT,     /*c1*/
		pNext:            (unsafe.Pointer)(s.PNext),                              /*cb*/
		exportObjectType: (ExportMetalObjectTypeFlagBitsEXT)(s.ExportObjectType), /*cb*/
	}
	return rval
}

// ExportMetalObjectsInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkExportMetalObjectsInfoEXT.html
type ExportMetalObjectsInfoEXT struct {
	// SType = STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT
	PNext unsafe.Pointer
}

type _vkExportMetalObjectsInfoEXT struct {
	sType StructureType
	pNext unsafe.Pointer
}

func (s *_vkExportMetalObjectsInfoEXT) Goify() *ExportMetalObjectsInfoEXT {
	rval := &ExportMetalObjectsInfoEXT{
		PNext: (unsafe.Pointer)(s.pNext),
	}
	return rval
}
func (s *ExportMetalObjectsInfoEXT) Vulkanize() *_vkExportMetalObjectsInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkExportMetalObjectsInfoEXT{
		sType: STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT, /*c1*/
		pNext: (unsafe.Pointer)(s.PNext),                    /*cb*/
	}
	return rval
}

// ExportMetalSharedEventInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkExportMetalSharedEventInfoEXT.html
type ExportMetalSharedEventInfoEXT struct {
	// SType = STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT
	PNext          unsafe.Pointer
	Semaphore      Semaphore
	Event          Event
	MtlSharedEvent MTLSharedEvent_id
}

type _vkExportMetalSharedEventInfoEXT struct {
	sType          StructureType
	pNext          unsafe.Pointer
	semaphore      Semaphore
	event          Event
	mtlSharedEvent MTLSharedEvent_id
}

func (s *_vkExportMetalSharedEventInfoEXT) Goify() *ExportMetalSharedEventInfoEXT {
	rval := &ExportMetalSharedEventInfoEXT{
		PNext:          (unsafe.Pointer)(s.pNext),
		Semaphore:      (Semaphore)(s.semaphore),
		Event:          (Event)(s.event),
		MtlSharedEvent: (MTLSharedEvent_id)(s.mtlSharedEvent),
	}
	return rval
}
func (s *ExportMetalSharedEventInfoEXT) Vulkanize() *_vkExportMetalSharedEventInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkExportMetalSharedEventInfoEXT{
		sType:          STRUCTURE_TYPE_EXPORT_METAL_SHARED_EVENT_INFO_EXT, /*c1*/
		pNext:          (unsafe.Pointer)(s.PNext),                         /*cb*/
		semaphore:      (Semaphore)(s.Semaphore),                          /*cb*/
		event:          (Event)(s.Event),                                  /*cb*/
		mtlSharedEvent: (MTLSharedEvent_id)(s.MtlSharedEvent),             /*cb*/
	}
	return rval
}

// ExportMetalTextureInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkExportMetalTextureInfoEXT.html
type ExportMetalTextureInfoEXT struct {
	// SType = STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT
	PNext      unsafe.Pointer
	Image      Image
	ImageView  ImageView
	BufferView BufferView
	Plane      ImageAspectFlagBits
	MtlTexture MTLTexture_id
}

type _vkExportMetalTextureInfoEXT struct {
	sType      StructureType
	pNext      unsafe.Pointer
	image      Image
	imageView  ImageView
	bufferView BufferView
	plane      ImageAspectFlagBits
	mtlTexture MTLTexture_id
}

func (s *_vkExportMetalTextureInfoEXT) Goify() *ExportMetalTextureInfoEXT {
	rval := &ExportMetalTextureInfoEXT{
		PNext:      (unsafe.Pointer)(s.pNext),
		Image:      (Image)(s.image),
		ImageView:  (ImageView)(s.imageView),
		BufferView: (BufferView)(s.bufferView),
		Plane:      (ImageAspectFlagBits)(s.plane),
		MtlTexture: (MTLTexture_id)(s.mtlTexture),
	}
	return rval
}
func (s *ExportMetalTextureInfoEXT) Vulkanize() *_vkExportMetalTextureInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkExportMetalTextureInfoEXT{
		sType:      STRUCTURE_TYPE_EXPORT_METAL_TEXTURE_INFO_EXT, /*c1*/
		pNext:      (unsafe.Pointer)(s.PNext),                    /*cb*/
		image:      (Image)(s.Image),                             /*cb*/
		imageView:  (ImageView)(s.ImageView),                     /*cb*/
		bufferView: (BufferView)(s.BufferView),                   /*cb*/
		plane:      (ImageAspectFlagBits)(s.Plane),               /*cb*/
		mtlTexture: (MTLTexture_id)(s.MtlTexture),                /*cb*/
	}
	return rval
}

// ImportMetalBufferInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkImportMetalBufferInfoEXT.html
type ImportMetalBufferInfoEXT struct {
	// SType = STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT
	PNext     unsafe.Pointer
	MtlBuffer MTLBuffer_id
}

type _vkImportMetalBufferInfoEXT struct {
	sType     StructureType
	pNext     unsafe.Pointer
	mtlBuffer MTLBuffer_id
}

func (s *_vkImportMetalBufferInfoEXT) Goify() *ImportMetalBufferInfoEXT {
	rval := &ImportMetalBufferInfoEXT{
		PNext:     (unsafe.Pointer)(s.pNext),
		MtlBuffer: (MTLBuffer_id)(s.mtlBuffer),
	}
	return rval
}
func (s *ImportMetalBufferInfoEXT) Vulkanize() *_vkImportMetalBufferInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkImportMetalBufferInfoEXT{
		sType:     STRUCTURE_TYPE_IMPORT_METAL_BUFFER_INFO_EXT, /*c1*/
		pNext:     (unsafe.Pointer)(s.PNext),                   /*cb*/
		mtlBuffer: (MTLBuffer_id)(s.MtlBuffer),                 /*cb*/
	}
	return rval
}

// ImportMetalIOSurfaceInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkImportMetalIOSurfaceInfoEXT.html
type ImportMetalIOSurfaceInfoEXT struct {
	// SType = STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT
	PNext     unsafe.Pointer
	IoSurface IOSurfaceRef
}

type _vkImportMetalIOSurfaceInfoEXT struct {
	sType     StructureType
	pNext     unsafe.Pointer
	ioSurface IOSurfaceRef
}

func (s *_vkImportMetalIOSurfaceInfoEXT) Goify() *ImportMetalIOSurfaceInfoEXT {
	rval := &ImportMetalIOSurfaceInfoEXT{
		PNext:     (unsafe.Pointer)(s.pNext),
		IoSurface: (IOSurfaceRef)(s.ioSurface),
	}
	return rval
}
func (s *ImportMetalIOSurfaceInfoEXT) Vulkanize() *_vkImportMetalIOSurfaceInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkImportMetalIOSurfaceInfoEXT{
		sType:     STRUCTURE_TYPE_IMPORT_METAL_IO_SURFACE_INFO_EXT, /*c1*/
		pNext:     (unsafe.Pointer)(s.PNext),                       /*cb*/
		ioSurface: (IOSurfaceRef)(s.IoSurface),                     /*cb*/
	}
	return rval
}

// ImportMetalSharedEventInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkImportMetalSharedEventInfoEXT.html
type ImportMetalSharedEventInfoEXT struct {
	// SType = STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT
	PNext          unsafe.Pointer
	MtlSharedEvent MTLSharedEvent_id
}

type _vkImportMetalSharedEventInfoEXT struct {
	sType          StructureType
	pNext          unsafe.Pointer
	mtlSharedEvent MTLSharedEvent_id
}

func (s *_vkImportMetalSharedEventInfoEXT) Goify() *ImportMetalSharedEventInfoEXT {
	rval := &ImportMetalSharedEventInfoEXT{
		PNext:          (unsafe.Pointer)(s.pNext),
		MtlSharedEvent: (MTLSharedEvent_id)(s.mtlSharedEvent),
	}
	return rval
}
func (s *ImportMetalSharedEventInfoEXT) Vulkanize() *_vkImportMetalSharedEventInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkImportMetalSharedEventInfoEXT{
		sType:          STRUCTURE_TYPE_IMPORT_METAL_SHARED_EVENT_INFO_EXT, /*c1*/
		pNext:          (unsafe.Pointer)(s.PNext),                         /*cb*/
		mtlSharedEvent: (MTLSharedEvent_id)(s.MtlSharedEvent),             /*cb*/
	}
	return rval
}

// ImportMetalTextureInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkImportMetalTextureInfoEXT.html
type ImportMetalTextureInfoEXT struct {
	// SType = STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT
	PNext      unsafe.Pointer
	Plane      ImageAspectFlagBits
	MtlTexture MTLTexture_id
}

type _vkImportMetalTextureInfoEXT struct {
	sType      StructureType
	pNext      unsafe.Pointer
	plane      ImageAspectFlagBits
	mtlTexture MTLTexture_id
}

func (s *_vkImportMetalTextureInfoEXT) Goify() *ImportMetalTextureInfoEXT {
	rval := &ImportMetalTextureInfoEXT{
		PNext:      (unsafe.Pointer)(s.pNext),
		Plane:      (ImageAspectFlagBits)(s.plane),
		MtlTexture: (MTLTexture_id)(s.mtlTexture),
	}
	return rval
}
func (s *ImportMetalTextureInfoEXT) Vulkanize() *_vkImportMetalTextureInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkImportMetalTextureInfoEXT{
		sType:      STRUCTURE_TYPE_IMPORT_METAL_TEXTURE_INFO_EXT, /*c1*/
		pNext:      (unsafe.Pointer)(s.PNext),                    /*cb*/
		plane:      (ImageAspectFlagBits)(s.Plane),               /*cb*/
		mtlTexture: (MTLTexture_id)(s.MtlTexture),                /*cb*/
	}
	return rval
}

// MetalSurfaceCreateInfoEXT: See https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkMetalSurfaceCreateInfoEXT.html
type MetalSurfaceCreateInfoEXT struct {
	// SType = STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT
	PNext  unsafe.Pointer
	Flags  MetalSurfaceCreateFlagsEXT
	PLayer *CAMetalLayer
}

type _vkMetalSurfaceCreateInfoEXT struct {
	sType  StructureType
	pNext  unsafe.Pointer
	flags  MetalSurfaceCreateFlagsEXT
	pLayer *CAMetalLayer
}

func (s *_vkMetalSurfaceCreateInfoEXT) Goify() *MetalSurfaceCreateInfoEXT {
	rval := &MetalSurfaceCreateInfoEXT{
		PNext:  (unsafe.Pointer)(s.pNext),
		Flags:  (MetalSurfaceCreateFlagsEXT)(s.flags),
		PLayer: (*CAMetalLayer)(s.pLayer),
	}
	return rval
}
func (s *MetalSurfaceCreateInfoEXT) Vulkanize() *_vkMetalSurfaceCreateInfoEXT {
	if s == nil {
		return nil
	}
	rval := &_vkMetalSurfaceCreateInfoEXT{
		sType:  STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT, /*c1*/
		pNext:  (unsafe.Pointer)(s.PNext),                    /*cb*/
		flags:  (MetalSurfaceCreateFlagsEXT)(s.Flags),        /*cb*/
		pLayer: (*CAMetalLayer)(s.PLayer),                    /*cb*/
	}
	return rval
}
