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

module Gpu.Vulkan.Queue.Core (

	-- * SUBMIT AND WAIT IDLE

	Q, submit, submit2, waitIdle,

	-- * BIND SPARSE

	bindSparse, BindSparseInfo, pattern BindSparseInfo,
	bindSparseInfoSType, bindSparseInfoPNext,
	bindSparseInfoWaitSemaphoreCount, bindSparseInfoPWaitSemaphores,
	bindSparseInfoBufferBindCount, bindSparseInfoPBufferBinds,
	bindSparseInfoImageOpaqueBindCount, bindSparseInfoPImageOpaqueBinds,
	bindSparseInfoImageBindCount, bindSparseInfoPImageBinds,
	bindSparseInfoSignalSemaphoreCount, bindSparseInfoPSignalSemaphores

	) 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 {-# SOURCE #-} qualified Gpu.Vulkan.Fence.Core as Fence
import {-# SOURCE #-} Gpu.Vulkan.Semaphore.Core qualified as Semaphore

import Gpu.Vulkan.Sparse.Buffer.Core qualified as Spr.Bffr
import Gpu.Vulkan.Sparse.Image.Core qualified as Spr.Img



data QTag
type Q = Ptr QTag

foreign import ccall "vkQueueSubmit" submit ::
	Q -> Word32 -> Ptr SubmitInfo -> Fence.F ->
{-# LINE 47 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	IO Int32
{-# LINE 48 "src/Gpu/Vulkan/Queue/Core.hsc" #-}

foreign import ccall "vkQueueWaitIdle" waitIdle :: Q -> IO Int32
{-# LINE 50 "src/Gpu/Vulkan/Queue/Core.hsc" #-}

struct "BindSparseInfo" (96) 8 [
{-# LINE 52 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0) p
{-# LINE 54 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
			(7 ::
{-# LINE 55 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
				Word32) |]),
{-# LINE 56 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("pNext", ''PtrVoid,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 58 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 59 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("waitSemaphoreCount", ''Word32,
{-# LINE 60 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 61 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 62 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("pWaitSemaphores", ''Semaphore.PtrS,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 64 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |]),
{-# LINE 65 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("bufferBindCount", ''Word32,
{-# LINE 66 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 32) |],
{-# LINE 67 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 32) |]),
{-# LINE 68 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("pBufferBinds", ''Spr.Bffr.PtrMemoryBindInfo,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 40) |],
{-# LINE 70 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 40) |]),
{-# LINE 71 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("imageOpaqueBindCount", ''Word32,
{-# LINE 72 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 48) |],
{-# LINE 73 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 48) |]),
{-# LINE 74 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("pImageOpaqueBinds", ''Spr.Img.PtrOpaqueMemoryBindInfo,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 56) |],
{-# LINE 76 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 56) |]),
{-# LINE 77 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("imageBindCount", ''Word32,
{-# LINE 78 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 64) |],
{-# LINE 79 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 64) |]),
{-# LINE 80 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("pImageBinds", ''Spr.Img.PtrMemoryBindInfo,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 72) |],
{-# LINE 82 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 72) |]),
{-# LINE 83 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("signalSemaphoreCount", ''Word32,
{-# LINE 84 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 80) |],
{-# LINE 85 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 80) |]),
{-# LINE 86 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	("pSignalSemaphores", ''Semaphore.PtrS,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 88) |],
{-# LINE 88 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 88) |]) ]
{-# LINE 89 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	[''Show, ''Storable]

foreign import ccall "vkQueueBindSparse" bindSparse ::
	Q -> Word32 -> Ptr BindSparseInfo -> Fence.F ->
{-# LINE 93 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	IO Int32
{-# LINE 94 "src/Gpu/Vulkan/Queue/Core.hsc" #-}

foreign import ccall "vkQueueSubmit2" submit2 ::
	Q -> Word32 -> Ptr SubmitInfo2 -> Fence.F ->
{-# LINE 97 "src/Gpu/Vulkan/Queue/Core.hsc" #-}
	IO Int32
{-# LINE 98 "src/Gpu/Vulkan/Queue/Core.hsc" #-}