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

module Gpu.Vulkan.DescriptorSetLayout.Core (
	-- * CREATE AND DESTROY

	create, destroy, D, PtrD, CreateInfo, pattern CreateInfo,
	createInfoSType, createInfoPNext, createInfoFlags,
	createInfoBindingCount, createInfoPBindings,

	-- ** Binding
	Binding, PtrBinding, pattern Binding,
	bindingBinding, bindingDescriptorType, bindingDescriptorCount,
	bindingStageFlags, bindingPImmutableSamplers

	) 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.AllocationCallbacks.Core as AllocationCallbacks
import qualified Gpu.Vulkan.Device.Core as Device
import qualified Gpu.Vulkan.Sampler.Core as Sampler



data DTag
type D = Ptr DTag

type PtrD = Ptr D

struct "Binding" (24)
{-# LINE 39 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		8 [
{-# LINE 40 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	("binding", ''Word32,
{-# LINE 41 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 0) |],
{-# LINE 42 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 0) |]),
{-# LINE 43 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	("descriptorType", ''Word32,
{-# LINE 44 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 4) |],
{-# LINE 45 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 4) |]),
{-# LINE 46 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	("descriptorCount", ''Word32,
{-# LINE 47 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 48 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 49 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	("stageFlags", ''Word32,
{-# LINE 50 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 12) |],
{-# LINE 51 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 12) |]),
{-# LINE 52 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	("pImmutableSamplers", ''Sampler.PtrS,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 54 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |])
{-# LINE 55 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	]
	[''Show, ''Storable]

type PtrBinding = Ptr Binding

sType :: Word32
{-# LINE 61 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
sType = 32
{-# LINE 62 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}

struct "CreateInfo" (32)
{-# LINE 64 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		8 [
{-# LINE 65 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	("sType", ''(), [| const $ pure () |],
		[| \p _ -> (\hsc_ptr -> pokeByteOff hsc_ptr 0)
{-# LINE 67 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
			p sType |]),
	("pNext", ''PtrVoid,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 8) |],
{-# LINE 70 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 8) |]),
{-# LINE 71 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	("flags", ''Word32,
{-# LINE 72 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 16) |],
{-# LINE 73 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 16) |]),
{-# LINE 74 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	("bindingCount", ''Word32,
{-# LINE 75 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> peekByteOff hsc_ptr 20) |],
{-# LINE 76 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 20) |]),
{-# LINE 77 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	("pBindings", ''PtrBinding,
		[| (\hsc_ptr -> peekByteOff hsc_ptr 24) |],
{-# LINE 79 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
		[| (\hsc_ptr -> pokeByteOff hsc_ptr 24) |]) ]
{-# LINE 80 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}
	[''Show, ''Storable]

foreign import ccall "vkCreateDescriptorSetLayout" create ::
	Device.D -> Ptr CreateInfo -> Ptr AllocationCallbacks.A -> Ptr D ->
	IO Int32
{-# LINE 85 "src/Gpu/Vulkan/DescriptorSetLayout/Core.hsc" #-}

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