packages feed

gpu-vulkan-core-0.1.0.7: src/Gpu/Vulkan/Specialization/Core.hsc

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Gpu.Vulkan.Specialization.Core (

	-- * INFO

	Info, PtrInfo, pattern Info,
	infoMapEntryCount, infoPMapEntries, infoDataSize, infoPData,

	-- ** MapEntry

	MapEntry, pattern MapEntry,
	mapEntryConstantId, mapEntryOffset, mapEntrySize,

	) where

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

#include <vulkan/vulkan.h>

struct "MapEntry" #{size VkSpecializationMapEntry}
		#{alignment VkSpecializationMapEntry} [
	("constantId", ''#{type uint32_t},
		[| #{peek VkSpecializationMapEntry, constantID} |],
		[| #{poke VkSpecializationMapEntry, constantID} |]),
	("offset", ''#{type uint32_t},
		[| #{peek VkSpecializationMapEntry, offset} |],
		[| #{poke VkSpecializationMapEntry, offset} |]),
	("size", ''#{type size_t},
		[| #{peek VkSpecializationMapEntry, size} |],
		[| #{poke VkSpecializationMapEntry, size} |]) ]
	[''Show, ''Storable]

type PtrMapEntry = Ptr MapEntry

struct "Info" #{size VkSpecializationInfo} #{alignment VkSpecializationInfo} [
	("mapEntryCount", ''#{type uint32_t},
		[| #{peek VkSpecializationInfo, mapEntryCount} |],
		[| #{poke VkSpecializationInfo, mapEntryCount} |]),
	("pMapEntries", ''PtrMapEntry,
		[| #{peek VkSpecializationInfo, pMapEntries} |],
		[| #{poke VkSpecializationInfo, pMapEntries} |]),
	("dataSize", ''#{type size_t},
		[| #{peek VkSpecializationInfo, dataSize} |],
		[| #{poke VkSpecializationInfo, dataSize} |]),
	("pData", ''PtrVoid,
		[| #{peek VkSpecializationInfo, pData} |],
		[| #{poke VkSpecializationInfo, pData} |]) ]
	[''Show, ''Storable]

type PtrInfo = Ptr Info