{-# LINE 1 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Gpu.Vulkan.Khr.Swapchain.Core (

	-- * ACQUIRE NEXT IMAGE

	acquireNextImage,

	-- * QUEUE PRESENT

	queuePresent,
	PresentInfo, pattern PresentInfo,
	presentInfoSType, presentInfoPNext,
	presentInfoWaitSemaphoreCount, presentInfoPWaitSemaphores,
	presentInfoSwapchainCount, presentInfoPSwapchains,
	presentInfoPImageIndices, presentInfoPResults,

	-- * CREATE AND DESTROY

	create, destroy, S, PtrS, CreateInfo, pattern CreateInfo,
	createInfoSType, createInfoPNext, createInfoFlags,
	createInfoSurface, createInfoMinImageCount,
	createInfoImageFormat, createInfoImageColorSpace, createInfoImageExtent,
	createInfoImageArrayLayers, createInfoImageUsage,
	createInfoImageSharingMode,
	createInfoQueueFamilyIndexCount, createInfoPQueueFamilyIndices,
	createInfoPreTransform, createInfoCompositeAlpha, createInfoPresentMode,
	createInfoClipped, createInfoOldSwapchain,

	-- * GET IMAGES

	getImages

	) where

import Foreign.Ptr
import Foreign.Storable
import Foreign.C.Struct
import Foreign.C.Struct.TypeSynonyms
import Data.Word
import Data.Int

import Gpu.Vulkan.Core
import Gpu.Vulkan.TypeSynonyms.Core
import Gpu.Vulkan.AllocationCallbacks.Core qualified as AllocationCallbacks
import Gpu.Vulkan.Device.Core qualified as Device
import Gpu.Vulkan.Khr.Surface.Core qualified as Surface
import Gpu.Vulkan.Image.Core qualified as Image

import Gpu.Vulkan.Queue.Core qualified as Queue
import Gpu.Vulkan.Semaphore.Core qualified as Semaphore
import Gpu.Vulkan.Fence.Core qualified as Fence



spType :: Word32
{-# LINE 61 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
spType = 1000001001
{-# LINE 62 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}

data STag
type S = Ptr STag
type PtrS = Ptr S

foreign import ccall "vkAcquireNextImageKHR" acquireNextImage ::
	Device.D -> S -> Word64 -> Semaphore.S -> Fence.F ->
{-# LINE 69 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	Ptr Word32 -> IO Int32
{-# LINE 70 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}

struct "PresentInfo" (64) 8 [
{-# LINE 72 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0) p spType |]),
{-# LINE 74 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("pNext", ''PtrVoid,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 76 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 77 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("waitSemaphoreCount", ''Word32,
{-# LINE 78 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 79 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 80 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("pWaitSemaphores", ''Semaphore.PtrS,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 82 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |]),
{-# LINE 83 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("swapchainCount", ''Word32,
{-# LINE 84 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 32) |],
{-# LINE 85 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 32) |]),
{-# LINE 86 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("pSwapchains", ''PtrS,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 40) |],
{-# LINE 88 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 40) |]),
{-# LINE 89 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("pImageIndices", ''PtrUint32T,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 48) |],
{-# LINE 91 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 48) |]),
{-# LINE 92 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("pResults", ''PtrResult,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 56) |],
{-# LINE 94 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 56) |]) ]
{-# LINE 95 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	[''Show, ''Storable]

foreign import ccall "vkQueuePresentKHR" queuePresent ::
	Queue.Q -> Ptr PresentInfo -> IO Int32
{-# LINE 99 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}

struct "CreateInfo" (104)
{-# LINE 101 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		8 [
{-# LINE 102 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0) p scType |]),
{-# LINE 104 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("pNext", ''PtrVoid, [| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 105 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 106 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("flags", ''Word32,
{-# LINE 107 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 108 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 109 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("surface", ''Surface.S,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 111 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |]),
{-# LINE 112 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("minImageCount", ''Word32,
{-# LINE 113 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 32) |],
{-# LINE 114 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 32) |]),
{-# LINE 115 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("imageFormat", ''Word32,
{-# LINE 116 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 36) |],
{-# LINE 117 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 36) |]),
{-# LINE 118 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("imageColorSpace", ''Word32,
{-# LINE 119 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 40) |],
{-# LINE 120 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 40) |]),
{-# LINE 121 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("imageExtent", ''Extent2d,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 44) |],
{-# LINE 123 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 44) |]),
{-# LINE 124 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("imageArrayLayers", ''Word32,
{-# LINE 125 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 52) |],
{-# LINE 126 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 52) |]),
{-# LINE 127 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("imageUsage", ''Word32,
{-# LINE 128 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 56) |],
{-# LINE 129 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 56) |]),
{-# LINE 130 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("imageSharingMode", ''Word32,
{-# LINE 131 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 60) |],
{-# LINE 132 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 60) |]),
{-# LINE 133 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("queueFamilyIndexCount", ''Word32,
{-# LINE 134 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 64) |],
{-# LINE 135 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 64) |]),
{-# LINE 136 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("pQueueFamilyIndices", ''PtrUint32T,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 72) |],
{-# LINE 138 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 72) |]),
{-# LINE 139 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("preTransform", ''Word32,
{-# LINE 140 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 80) |],
{-# LINE 141 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 80) |]),
{-# LINE 142 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("compositeAlpha", ''Word32,
{-# LINE 143 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 84) |],
{-# LINE 144 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 84) |]),
{-# LINE 145 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("presentMode", ''Word32,
{-# LINE 146 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 88) |],
{-# LINE 147 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 88) |]),
{-# LINE 148 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("clipped", ''Word32,
{-# LINE 149 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 92) |],
{-# LINE 150 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 92) |]),
{-# LINE 151 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	("oldSwapchain", ''S,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 96) |],
{-# LINE 153 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 96) |]) ]
{-# LINE 154 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	[''Show, ''Storable]

scType :: Word32
{-# LINE 157 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
scType = 1000001000
{-# LINE 158 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}

foreign import ccall "vkCreateSwapchainKHR" create ::
	Device.D -> Ptr CreateInfo -> Ptr AllocationCallbacks.A -> Ptr S ->
	IO Int32
{-# LINE 162 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}

foreign import ccall "vkDestroySwapchainKHR" destroy ::
	Device.D -> S -> Ptr AllocationCallbacks.A -> IO ()

foreign import ccall "vkGetSwapchainImagesKHR" getImages ::
	Device.D -> S -> Ptr Word32 -> Ptr Image.I ->
{-# LINE 168 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}
	IO Int32
{-# LINE 169 "src/Gpu/Vulkan/Khr/Swapchain/Core.hsc" #-}