packages feed

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

{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ScopedTypeVariables, TypeApplications #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures, TypeOperators #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Gpu.Vulkan.Attachment.Middle.Internal where

import Foreign.Storable
import Foreign.C.Enum
import Data.Word

import Gpu.Vulkan.Enum
import Gpu.Vulkan.Attachment.Enum

import qualified Gpu.Vulkan.Sample.Enum as Sample
import qualified Gpu.Vulkan.Image.Enum as Image
import qualified Gpu.Vulkan.Attachment.Core as C

#include <vulkan/vulkan.h>

data Description = Description {
	descriptionFlags :: DescriptionFlags,
	descriptionFormat :: Format,
	descriptionSamples :: Sample.CountFlagBits,
	descriptionLoadOp :: LoadOp,
	descriptionStoreOp :: StoreOp,
	descriptionStencilLoadOp :: LoadOp,
	descriptionStencilStoreOp :: StoreOp,
	descriptionInitialLayout :: Image.Layout,
	descriptionFinalLayout :: Image.Layout }
	deriving Show

descriptionToCore :: Description -> C.Description
descriptionToCore Description {
	descriptionFlags = DescriptionFlagBits flgs,
	descriptionFormat = Format fmt,
	descriptionSamples = Sample.CountFlagBits smps,
	descriptionLoadOp = LoadOp lo,
	descriptionStoreOp = StoreOp so,
	descriptionStencilLoadOp = LoadOp slo,
	descriptionStencilStoreOp = StoreOp sso,
	descriptionInitialLayout = Image.Layout il,
	descriptionFinalLayout = Image.Layout fl
	} = C.Description {
		C.descriptionFlags = flgs,
		C.descriptionFormat = fmt,
		C.descriptionSamples = smps,
		C.descriptionLoadOp = lo,
		C.descriptionStoreOp = so,
		C.descriptionStencilLoadOp = slo,
		C.descriptionStencilStoreOp = sso,
		C.descriptionInitialLayout = il,
		C.descriptionFinalLayout = fl }

enum "A" ''#{type uint32_t} [''Show, ''Storable, ''Num]
	[("AUnused", #{const VK_ATTACHMENT_UNUSED})]

data Reference = Reference {
	referenceAttachment :: A,
	referenceLayout :: Image.Layout }
	deriving Show

referenceToCore :: Reference -> C.Reference
referenceToCore Reference {
	referenceAttachment = A a,
	referenceLayout = Image.Layout lyt } = C.Reference {
		C.referenceAttachment = a,
		C.referenceLayout = lyt }