packages feed

gpu-vulkan-middle-0.1.0.54: src/Gpu/Vulkan/Base/Middle/Internal.hsc

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

module Gpu.Vulkan.Base.Middle.Internal (

	-- * CONVERSION BETWEEN BOOL AND BOOL32

	boolToBool32, bool32ToBool,

	-- * NULL HANDLE

	pattern NullHandle,

	-- * OBJECT HANDLE

	ObjectHandle(..)

	) where

import Foreign.Ptr
import Data.Word

#include <vulkan/vulkan.h>

boolToBool32 :: Bool -> #{type VkBool32}
boolToBool32 False = #{const VK_FALSE}
boolToBool32 True = #{const VK_TRUE}

bool32ToBool :: #{type VkBool32} -> Bool
bool32ToBool #{const VK_FALSE} = False
bool32ToBool #{const VK_TRUE} = True
bool32ToBool _ = error $
	"Application must not pass any other values than " ++
	"VK_TRUE or VK_FALSE into a Gpu.Vulkan implementation " ++
	"where a VkBool32 is expected"

newtype ObjectHandle = ObjectHandle #{type uint64_t} deriving Show

pattern NullHandle :: Ptr a
pattern NullHandle <- (ptrToWordPtr -> (WordPtr #{const VK_NULL_HANDLE})) where
	NullHandle = wordPtrToPtr $ WordPtr #{const VK_NULL_HANDLE}