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

module Gpu.Vulkan.CommandBuffer.Core (

	-- * ALLOCATE AND FREE

	allocateCs, freeCs, C, PtrC,
	AllocateInfo, pattern AllocateInfo,
	allocateInfoSType, allocateInfoPNext, allocateInfoCommandPool,
	allocateInfoLevel, levelPrimary, allocateInfoCommandBufferCount,

	-- * BEGIN, END AND RESET
	begin, end, reset,
	BeginInfo, pattern BeginInfo,
	beginInfoSType, beginInfoPNext, beginInfoFlags,
	beginInfoPInheritanceInfo,

	-- ** INHERITANCE INFO
	InheritanceInfo, pattern InheritanceInfo,
	inheritanceInfoSType, inheritanceInfoPNext,
	inheritanceInfoRenderPass, inheritanceInfoSubpass,
	inheritanceInfoFramebuffer, inheritanceInfoOcclusionQueryEnable,
	inheritanceInfoQueryFlags, inheritanceInfoPipelineStatistics,

	-- * SUBMIT INFO

	SubmitInfo, PtrSubmitInfo, pattern SubmitInfo,
	submitInfoSType, submitInfoPNext,
	submitInfoCommandBuffer, submitInfoDeviceMask

	) where

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

import qualified Gpu.Vulkan.Device.Core as Device
import qualified Gpu.Vulkan.RenderPass.Core as RenderPass
import qualified Gpu.Vulkan.Framebuffer.Core as Framebuffer
import qualified Gpu.Vulkan.CommandPool.Core as CommandPool



sTypeA, sTypeB, sTypeI :: Word32
{-# LINE 51 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
sTypeA = 40
{-# LINE 52 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
sTypeB = 42
{-# LINE 53 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
sTypeI = 41
{-# LINE 54 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}

struct "AllocateInfo" (32)
{-# LINE 56 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		8 [
{-# LINE 57 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0)
{-# LINE 59 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
			p sTypeA |]),
	("pNext", ''PtrVoid,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 62 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 63 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("commandPool", ''CommandPool.C,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 65 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 66 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("level", ''Word32,
{-# LINE 67 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 68 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |]),
{-# LINE 69 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("commandBufferCount", ''Word32,
{-# LINE 70 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 28) |],
{-# LINE 71 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 28) |]) ]
{-# LINE 72 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	[''Show, ''Storable]

levelPrimary :: Word32
{-# LINE 75 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
levelPrimary = 0
{-# LINE 76 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}

data CTag
type C = Ptr CTag
type PtrC = Ptr C

foreign import ccall "vkAllocateCommandBuffers" allocateCs ::
	Device.D -> Ptr AllocateInfo -> Ptr C -> IO Int32
{-# LINE 83 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}

struct "InheritanceInfo" (56)
{-# LINE 85 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		8 [
{-# LINE 86 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0)
{-# LINE 88 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
			p sTypeI |]),
	("pNext", ''PtrVoid,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 91 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 92 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("renderPass", ''RenderPass.R,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 94 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 95 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("subpass", ''Word32,
{-# LINE 96 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 97 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |]),
{-# LINE 98 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("framebuffer", ''Framebuffer.F,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 32) |],
{-# LINE 100 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 32) |]),
{-# LINE 101 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("occlusionQueryEnable", ''Word32,
{-# LINE 102 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 40) |],
{-# LINE 104 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 40) |]),
{-# LINE 106 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("queryFlags", ''Word32,
{-# LINE 107 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 44) |],
{-# LINE 108 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 44) |]),
{-# LINE 109 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("pipelineStatistics", ''Word32,
{-# LINE 110 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 48) |],
{-# LINE 112 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 48) |]) ]
{-# LINE 114 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	[''Show, ''Storable]

type PtrInheritanceInfo = Ptr InheritanceInfo

struct "BeginInfo" (32)
{-# LINE 119 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		8 [
{-# LINE 120 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0)
{-# LINE 122 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
			p sTypeB |]),
	("pNext", ''PtrVoid,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 125 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 126 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("flags", ''Word32,
{-# LINE 127 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 128 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 129 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("pInheritanceInfo", ''PtrInheritanceInfo,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 131 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |]) ]
{-# LINE 132 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	[''Show, ''Storable]

foreign import ccall "vkBeginCommandBuffer" begin ::
	C -> Ptr BeginInfo -> IO Int32
{-# LINE 136 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}

foreign import ccall "vkEndCommandBuffer" end :: C -> IO Int32
{-# LINE 138 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}

foreign import ccall "vkResetCommandBuffer" reset ::
	C -> Word32 -> IO Int32
{-# LINE 141 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}

foreign import ccall "vkFreeCommandBuffers" freeCs ::
	Device.D -> CommandPool.C -> Word32 -> Ptr C -> IO ()
{-# LINE 144 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}

sTypeS :: Word32
{-# LINE 146 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
sTypeS = 1000314006
{-# LINE 147 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}

struct "SubmitInfo" (32)
{-# LINE 149 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		8 [
{-# LINE 150 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0)
{-# LINE 152 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
			p sTypeS |]),
	("pNext", ''PtrVoid,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 155 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 156 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("commandBuffer", ''C,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 158 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 159 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	("deviceMask", ''Word32,
{-# LINE 160 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 161 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |])
{-# LINE 162 "src/Gpu/Vulkan/CommandBuffer/Core.hsc" #-}
	]
	[''Show, ''Storable]

type PtrSubmitInfo = Ptr SubmitInfo