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

module Gpu.Vulkan.DescriptorSet.Core (

	-- * ALLOCATE AND FREE

	allocateDs, freeDs, D, AllocateInfo, pattern AllocateInfo,
	allocateInfoSType, allocateInfoPNext,
	allocateInfoDescriptorPool, allocateInfoDescriptorSetCount,
	allocateInfoPSetLayouts,

	-- * UPDATE

	updateDs,

	-- ** Write

	Write, pattern Write,
	writeSType, writePNext,
	writeDstSet, writeDstBinding, writeDstArrayElement,
	writeDescriptorCount, writeDescriptorType,
	writePImageInfo, writePBufferInfo, writePTexelBufferView,

	-- ** Copy

	Copy, pattern Copy,
	copySType, copyPNext,
	copySrcSet, copySrcBinding, copySrcArrayElement,
	copyDstSet, copyDstBinding, copyDstArrayElement,
	copyDescriptorCount

	) 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.BufferView.Core as Buffer.View
import qualified Gpu.Vulkan.Descriptor.Core as Dsc
import qualified Gpu.Vulkan.DescriptorPool.Core as Pool
import qualified Gpu.Vulkan.DescriptorSetLayout.Core as Layout



aType :: Word32
{-# LINE 53 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
aType = 34
{-# LINE 54 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}

struct "AllocateInfo" (40)
{-# LINE 56 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		8 [
{-# LINE 57 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |], [| \p _ ->
		(\hsc_ptr -> pokeByteOff hsc_ptr 0) p aType |]),
{-# LINE 59 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("pNext", ''PtrVoid,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 61 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 62 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("descriptorPool", ''Pool.D,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 64 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 65 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("descriptorSetCount", ''Word32,
{-# LINE 66 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 67 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |]),
{-# LINE 68 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("pSetLayouts", ''Layout.PtrD,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 32) |],
{-# LINE 70 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 32) |]) ]
{-# LINE 71 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	[''Show, ''Storable]

data DTag
type D = Ptr DTag

foreign import ccall "vkAllocateDescriptorSets" allocateDs ::
	Device.D -> Ptr AllocateInfo -> Ptr D -> IO Int32
{-# LINE 78 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}

foreign import ccall "vkFreeDescriptorSets" freeDs ::
	Device.D -> Pool.D -> Word32 -> Ptr D -> IO Int32
{-# LINE 81 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}

wType :: Word32
{-# LINE 83 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
wType = 35
{-# LINE 84 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}

struct "Write" (64) 8 [
{-# LINE 86 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0) p wType |]),
{-# LINE 88 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("pNext", ''PtrVoid,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 90 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 91 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("dstSet", ''D,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 93 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 94 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("dstBinding", ''Word32,
{-# LINE 95 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 96 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |]),
{-# LINE 97 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("dstArrayElement", ''Word32,
{-# LINE 98 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 28) |],
{-# LINE 99 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 28) |]),
{-# LINE 100 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("descriptorCount", ''Word32,
{-# LINE 101 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 32) |],
{-# LINE 102 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 32) |]),
{-# LINE 103 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("descriptorType", ''Word32,
{-# LINE 104 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 36) |],
{-# LINE 105 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 36) |]),
{-# LINE 106 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("pImageInfo", ''Dsc.PtrImageInfo,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 40) |],
{-# LINE 108 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 40) |]),
{-# LINE 109 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("pBufferInfo", ''Dsc.PtrBufferInfo,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 48) |],
{-# LINE 111 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 48) |]),
{-# LINE 112 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("pTexelBufferView", ''Buffer.View.PtrB,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 56) |],
{-# LINE 114 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 56) |]) ]
{-# LINE 115 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	[''Show, ''Storable]

cType :: Word32
{-# LINE 118 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
cType = 36
{-# LINE 119 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}

struct "Copy" (56) 8 [
{-# LINE 121 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0) p cType |]),
{-# LINE 123 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("pNext", ''PtrVoid,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 125 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 126 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("srcSet", ''D,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 128 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 129 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("srcBinding", ''Word32,
{-# LINE 130 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 131 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |]),
{-# LINE 132 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("srcArrayElement", ''Word32,
{-# LINE 133 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 28) |],
{-# LINE 134 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 28) |]),
{-# LINE 135 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("dstSet", ''D,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 32) |],
{-# LINE 137 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 32) |]),
{-# LINE 138 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("dstBinding", ''Word32,
{-# LINE 139 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 40) |],
{-# LINE 140 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 40) |]),
{-# LINE 141 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("dstArrayElement", ''Word32,
{-# LINE 142 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 44) |],
{-# LINE 143 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 44) |]),
{-# LINE 144 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	("descriptorCount", ''Word32,
{-# LINE 145 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 48) |],
{-# LINE 146 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 48) |]) ]
{-# LINE 147 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}
	[''Show, ''Storable]

foreign import ccall "vkUpdateDescriptorSets" updateDs ::
	Device.D ->
	Word32 -> Ptr Write -> Word32 -> Ptr Copy -> IO ()
{-# LINE 152 "src/Gpu/Vulkan/DescriptorSet/Core.hsc" #-}