{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE BlockArguments, LambdaCase #-}
{-# LANGUAGE ScopedTypeVariables, RankNTypes, TypeApplications #-}
{-# LANGUAGE GADTs, TypeFamilies #-}
{-# LANGUAGE DataKinds, PolyKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts, FlexibleInstances, UndecidableInstances #-}
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Gpu.Vulkan.Pipeline.Graphics (
createGs, unsafeRecreateGs, G, CreateInfo(..),
CreateInfoListArgsToGArgs, CreateInfoListToMiddle,
group, Group, createGs', unsafeDestroyGs, lookup
) where
import Prelude hiding (lookup)
import Foreign.Storable.PeekPoke
import Control.Concurrent.STM
import Control.Concurrent.STM.TSem
import Control.Exception
import Data.Kind
import Data.TypeLevel.Maybe qualified as TMaybe
import Data.TypeLevel.ParMaybe qualified as TPMaybe
import Data.TypeLevel.Tuple.Uncurry
import Data.TypeLevel.Tuple.Index qualified as TIndex
import Data.TypeLevel.Tuple.MapIndex qualified as TMapIndex
import Data.Map qualified as Map
import Data.HeteroParList qualified as HeteroParList
import Data.HeteroParList (pattern (:**))
import Data.HeteroParList.Tuple qualified as HeteroParList
import Data.Word
import Data.Int
import Language.SpirV.ShaderKind
import Gpu.Vulkan.Pipeline.Enum
import Gpu.Vulkan.Pipeline.Graphics.Type
import qualified Gpu.Vulkan.AllocationCallbacks as AllocationCallbacks
import qualified Gpu.Vulkan.AllocationCallbacks.Type as AllocationCallbacks
import qualified Gpu.Vulkan.Device.Type as Device
import qualified Gpu.Vulkan.Pipeline.Graphics.Middle as M
import qualified Gpu.Vulkan.PipelineCache.Type as Cache
import qualified Gpu.Vulkan.PipelineLayout.Type as Layout
import qualified Gpu.Vulkan.RenderPass.Type as RenderPass
import qualified Gpu.Vulkan.Pipeline.DynamicState as DynamicState
import qualified Gpu.Vulkan.Pipeline.ColorBlendState as ColorBlendState
import qualified Gpu.Vulkan.Pipeline.DepthStencilState as DepthStencilState
import qualified Gpu.Vulkan.Pipeline.MultisampleState as MultisampleState
import qualified Gpu.Vulkan.Pipeline.RasterizationState as RasterizationState
import qualified Gpu.Vulkan.Pipeline.ViewportState as ViewportState
import qualified Gpu.Vulkan.Pipeline.TessellationState as TessellationState
import qualified Gpu.Vulkan.Pipeline.InputAssemblyState as InputAssemblyState
import Gpu.Vulkan.Pipeline.VertexInputState.Internal
qualified as VertexInputState
import qualified Gpu.Vulkan.Pipeline.ShaderStage.Internal as ShaderStage
import Gpu.Vulkan.VertexInput qualified as VertexInput
import qualified Gpu.Vulkan.Pipeline.ShaderStage.Middle as ShaderStage.M
createGs :: (CreateInfoListToMiddle cias, AllocationCallbacks.ToMiddle mac) =>
Device.D sd -> Maybe (Cache.P sc) ->
HeteroParList.PL (U14 CreateInfo) cias ->
TPMaybe.M (U2 AllocationCallbacks.A) mac ->
(forall sg .
HeteroParList.PL
(U3 (G sg)) (CreateInfoListArgsToGArgs cias) ->
IO a) -> IO a
createGs :: forall (cias :: [(Maybe (*),
[(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])],
(Maybe (*), [(*, Rate)], [(Nat, *)]), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
(*, [(*, [BindingType])], [*]), *,
(*, [(*, Rate)], [(Nat, *)], (*, [(*, [BindingType])], [*])))])
(mac :: Maybe (*, *)) sd sc a.
(CreateInfoListToMiddle cias, ToMiddle mac) =>
D sd
-> Maybe (P sc)
-> PL (U14 CreateInfo) cias
-> M (U2 A) mac
-> (forall sg.
PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias) -> IO a)
-> IO a
createGs d :: D sd
d@(Device.D D
dvc) ((P sc -> P
forall s. P s -> P
Cache.pToMiddle (P sc -> P) -> Maybe (P sc) -> Maybe P
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) -> Maybe P
mc) PL (U14 CreateInfo) cias
cis
macc :: M (U2 A) mac
macc@(M (U2 A) mac -> M A (Snd mac)
forall (msa :: Maybe (*, *)).
ToMiddle msa =>
M (U2 A) msa -> M A (Snd msa)
AllocationCallbacks.toMiddle -> M A (Snd mac)
macd) forall sg. PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias) -> IO a
f = IO [G] -> ([G] -> IO ()) -> ([G] -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket
(D sd
-> PL (U14 CreateInfo) cias
-> IO (PL (U11 CreateInfo) (MiddleArgs cias))
forall (cias :: [(Maybe (*),
[(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])],
(Maybe (*), [(*, Rate)], [(Nat, *)]), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
(*, [(*, [BindingType])], [*]), *,
(*, [(*, Rate)], [(Nat, *)], (*, [(*, [BindingType])], [*])))])
sd.
CreateInfoListToMiddle cias =>
D sd
-> PL (U14 CreateInfo) cias
-> IO (PL (U11 CreateInfo) (MiddleArgs cias))
forall sd.
D sd
-> PL (U14 CreateInfo) cias
-> IO (PL (U11 CreateInfo) (MiddleArgs cias))
createInfoListToMiddle D sd
d PL (U14 CreateInfo) cias
cis IO (PL (U11 CreateInfo) (MiddleArgs cias))
-> (PL (U11 CreateInfo) (MiddleArgs cias) -> IO [G]) -> IO [G]
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \PL (U11 CreateInfo) (MiddleArgs cias)
cis' -> D
-> Maybe P
-> PL (U11 CreateInfo) (MiddleArgs cias)
-> M A (Snd mac)
-> IO [G]
forall (cias :: [(Maybe (*), [(Maybe (*), ShaderKind, [*])],
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*))])
(mc :: Maybe (*)).
CreateInfoListToCore cias =>
D -> Maybe P -> PL (U11 CreateInfo) cias -> M A mc -> IO [G]
M.createGs D
dvc Maybe P
mc PL (U11 CreateInfo) (MiddleArgs cias)
cis'
(M (U2 A) mac -> M A (Snd mac)
forall (msa :: Maybe (*, *)).
ToMiddle msa =>
M (U2 A) msa -> M A (Snd msa)
AllocationCallbacks.toMiddle M (U2 A) mac
macc)
IO [G] -> IO () -> IO [G]
forall a b. IO a -> IO b -> IO a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* D sd
-> PL (U11 CreateInfo) (MiddleArgs cias)
-> PL2 (M (U2 A)) (TAllocationCallbacksListList cias)
-> IO ()
forall (mvs :: [(Maybe (*), [(Maybe (*), ShaderKind, [*])],
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*))])
(macs :: [[Maybe (*, *)]]) sd.
DestroyShaderStages mvs macs =>
D sd -> PL (U11 CreateInfo) mvs -> PL2 (M (U2 A)) macs -> IO ()
forall sd.
D sd
-> PL (U11 CreateInfo) (MiddleArgs cias)
-> PL2 (M (U2 A)) (TAllocationCallbacksListList cias)
-> IO ()
destroyShaderStages' D sd
d PL (U11 CreateInfo) (MiddleArgs cias)
cis' (PL (U14 CreateInfo) cias
-> PL2 (M (U2 A)) (TAllocationCallbacksListList cias)
forall (cias :: [(Maybe (*),
[(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])],
(Maybe (*), [(*, Rate)], [(Nat, *)]), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
(*, [(*, [BindingType])], [*]), *,
(*, [(*, Rate)], [(Nat, *)], (*, [(*, [BindingType])], [*])))]).
AllocationCallbacksListListFromCreateInfoList cias =>
PL (U14 CreateInfo) cias
-> PL2 (M (U2 A)) (TAllocationCallbacksListList cias)
allocationCallbacksListListFromCreateInfoList PL (U14 CreateInfo) cias
cis))
(\[G]
gs -> D -> [G] -> M A (Snd mac) -> IO ()
forall (md :: Maybe (*)). D -> [G] -> M A md -> IO ()
M.destroyGs D
dvc [G]
gs M A (Snd mac)
macd) (PL (U3 (G Any)) (CreateInfoListArgsToGArgs cias) -> IO a
forall sg. PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias) -> IO a
f (PL (U3 (G Any)) (CreateInfoListArgsToGArgs cias) -> IO a)
-> ([G] -> PL (U3 (G Any)) (CreateInfoListArgsToGArgs cias))
-> [G]
-> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [G] -> PL (U3 (G Any)) (CreateInfoListArgsToGArgs cias)
forall (ss :: [([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))])
sg.
GListFromMiddle ss =>
[G] -> PL (U3 (G sg)) ss
forall sg. [G] -> PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)
gListFromMiddle)
class GListFromMiddle ss where
gListFromMiddle :: [M.G] -> HeteroParList.PL (U3 (G sg)) ss
instance GListFromMiddle '[] where
gListFromMiddle :: forall sg. [G] -> PL (U3 (G sg)) '[]
gListFromMiddle = \case
[] -> PL (U3 (G sg)) '[]
forall {k} (t :: k -> *). PL t '[]
HeteroParList.Nil
G
_ : [G]
_ -> [Char] -> PL (U3 (G sg)) '[]
forall a. HasCallStack => [Char] -> a
error [Char]
"Wrong number of elements"
instance GListFromMiddle ss => GListFromMiddle ('(s, t, foo) ': ss) where
gListFromMiddle :: forall sg. [G] -> PL (U3 (G sg)) ('(s, t, foo) : ss)
gListFromMiddle = \case
G
g : [G]
gs -> G sg s t foo -> U3 (G sg) '(s, t, foo)
forall {k} {k1} {k2} (t :: k -> k1 -> k2 -> *) (s1 :: k) (s2 :: k1)
(s3 :: k2).
t s1 s2 s3 -> U3 t '(s1, s2, s3)
U3 (forall s (vibs :: [(*, Rate)]) (vias :: [(Nat, *)])
(lyta :: (*, [(*, [BindingType])], [*])).
G -> G s vibs vias lyta
G @_ @s @t G
g) U3 (G sg) '(s, t, foo)
-> PL (U3 (G sg)) ss -> PL (U3 (G sg)) ('(s, t, foo) : ss)
forall {k} (t :: k -> *) (s :: k) (ss1 :: [k]).
t s -> PL t ss1 -> PL t (s : ss1)
:** forall (ss :: [([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))])
sg.
GListFromMiddle ss =>
[G] -> PL (U3 (G sg)) ss
gListFromMiddle @ss [G]
gs
[] -> [Char] -> PL (U3 (G sg)) ('(s, t, foo) : ss)
forall a. HasCallStack => [Char] -> a
error [Char]
"Wrong number of elements"
unsafeRecreateGs :: (CreateInfoListToMiddle cias, AllocationCallbacks.ToMiddle mac) =>
Device.D sd -> Maybe (Cache.P s) -> HeteroParList.PL (U14 CreateInfo) cias ->
TPMaybe.M (U2 AllocationCallbacks.A) mac ->
HeteroParList.PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias) -> IO ()
unsafeRecreateGs :: forall (cias :: [(Maybe (*),
[(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])],
(Maybe (*), [(*, Rate)], [(Nat, *)]), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
(*, [(*, [BindingType])], [*]), *,
(*, [(*, Rate)], [(Nat, *)], (*, [(*, [BindingType])], [*])))])
(mac :: Maybe (*, *)) sd s sg.
(CreateInfoListToMiddle cias, ToMiddle mac) =>
D sd
-> Maybe (P s)
-> PL (U14 CreateInfo) cias
-> M (U2 A) mac
-> PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)
-> IO ()
unsafeRecreateGs d :: D sd
d@(Device.D D
dvc) ((P s -> P
forall s. P s -> P
Cache.pToMiddle (P s -> P) -> Maybe (P s) -> Maybe P
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) -> Maybe P
mc) PL (U14 CreateInfo) cias
cis M (U2 A) mac
macc PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)
gpls = do
cis' <- D sd
-> PL (U14 CreateInfo) cias
-> IO (PL (U11 CreateInfo) (MiddleArgs cias))
forall (cias :: [(Maybe (*),
[(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])],
(Maybe (*), [(*, Rate)], [(Nat, *)]), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
(*, [(*, [BindingType])], [*]), *,
(*, [(*, Rate)], [(Nat, *)], (*, [(*, [BindingType])], [*])))])
sd.
CreateInfoListToMiddle cias =>
D sd
-> PL (U14 CreateInfo) cias
-> IO (PL (U11 CreateInfo) (MiddleArgs cias))
forall sd.
D sd
-> PL (U14 CreateInfo) cias
-> IO (PL (U11 CreateInfo) (MiddleArgs cias))
createInfoListToMiddle D sd
d PL (U14 CreateInfo) cias
cis
M.recreateGs dvc mc cis'
(AllocationCallbacks.toMiddle macc) $ gListToMiddle gpls
destroyShaderStages' d cis' $ allocationCallbacksListListFromCreateInfoList cis
gListToMiddle :: HeteroParList.PL (U3 (G sg)) ss -> [M.G]
gListToMiddle :: forall sg
(ss :: [([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))]).
PL (U3 (G sg)) ss -> [G]
gListToMiddle = (forall (s :: ([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
U3 (G sg) s -> G)
-> PL (U3 (G sg)) ss -> [G]
forall k (t :: k -> *) a (ss :: [k]).
(forall (s :: k). t s -> a) -> PL t ss -> [a]
HeteroParList.toList ((forall (s :: ([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
U3 (G sg) s -> G)
-> PL (U3 (G sg)) ss -> [G])
-> (forall (s :: ([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
U3 (G sg) s -> G)
-> PL (U3 (G sg)) ss
-> [G]
forall a b. (a -> b) -> a -> b
$ \(U3 (G G
g)) -> G
g
data CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha =
CreateInfo {
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> M mn
createInfoNext :: TMaybe.M mn,
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> CreateFlags
createInfoFlags :: CreateFlags,
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> PL (U5 CreateInfo) ssas
createInfoStages ::
HeteroParList.PL (U5 ShaderStage.CreateInfo) ssas,
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (U3 CreateInfo visa)
createInfoVertexInputState ::
Maybe (U3 VertexInputState.CreateInfo visa),
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo iasa)
createInfoInputAssemblyState ::
Maybe (InputAssemblyState.CreateInfo iasa),
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo tsssa)
createInfoTessellationState ::
Maybe (TessellationState.CreateInfo tsssa),
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo vpsa)
createInfoViewportState :: Maybe (ViewportState.CreateInfo vpsa),
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo rstsa)
createInfoRasterizationState ::
Maybe (RasterizationState.CreateInfo rstsa),
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo mssa)
createInfoMultisampleState ::
Maybe (MultisampleState.CreateInfo mssa),
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo dssa)
createInfoDepthStencilState ::
Maybe (DepthStencilState.CreateInfo dssa),
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo cbsa)
createInfoColorBlendState ::
Maybe (ColorBlendState.CreateInfo cbsa),
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo dsa)
createInfoDynamicState :: Maybe (DynamicState.CreateInfo dsa),
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> U3 P lyta
createInfoLayout :: U3 Layout.P lyta,
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> R rpa
createInfoRenderPass :: RenderPass.R rpa,
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Word32
createInfoSubpass :: Word32,
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (U4 G bpha)
createInfoBasePipelineHandle :: Maybe (U4 G bpha),
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Int32
createInfoBasePipelineIndex :: Int32 }
type family CreateInfoListArgsToGArgs cias where
CreateInfoListArgsToGArgs '[] = '[]
CreateInfoListArgsToGArgs (cia ': cias) =
CreateInfoArgsToGArgs cia ': CreateInfoListArgsToGArgs cias
type family CreateInfoArgsToGArgs cia where
CreateInfoArgsToGArgs '(
n, ssas, '(nv, vibs, vias), iasa, tsssa, vpsa, rstsa, mssa, dssa, cbsa, dsa,
slbtss, rpa, bpha ) = '(vibs, vias, slbtss)
class ( GListFromMiddle (CreateInfoListArgsToGArgs cias),
DestroyShaderStages
(MiddleArgs cias) (TAllocationCallbacksListList cias),
AllocationCallbacksListListFromCreateInfoList cias,
M.CreateInfoListToCore (MiddleArgs cias) ) =>
CreateInfoListToMiddle cias where
type MiddleArgs cias :: [(
Maybe Type, [(Maybe Type, ShaderKind, [Type])], Maybe Type,
Maybe Type, Maybe Type, Maybe Type, Maybe Type, Maybe Type,
Maybe Type, Maybe Type, Maybe Type)]
createInfoListToMiddle ::
Device.D sd -> HeteroParList.PL (U14 CreateInfo) cias ->
IO (HeteroParList.PL (U11 M.CreateInfo) (MiddleArgs cias))
instance CreateInfoListToMiddle '[] where
type MiddleArgs '[] = '[]
createInfoListToMiddle :: forall sd.
D sd
-> PL (U14 CreateInfo) '[]
-> IO (PL (U11 CreateInfo) (MiddleArgs '[]))
createInfoListToMiddle D sd
_ PL (U14 CreateInfo) '[]
HeteroParList.Nil = PL (U11 CreateInfo) '[] -> IO (PL (U11 CreateInfo) '[])
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure PL (U11 CreateInfo) '[]
forall {k} (t :: k -> *). PL t '[]
HeteroParList.Nil
instance (
HeteroParList.Map3_5 ssas,
ShaderStage.CreateInfoListToMiddle ssas,
ShaderStage.M.CreateInfoListToCore (ShaderStage.MiddleArgs ssas),
VertexInputState.BindingStrideList vibs VertexInput.Rate,
VertexInputState.AttributeDescriptions vibs vias,
WithPoked (TMaybe.M mn), WithPoked (TMaybe.M nvis),
WithPoked (TMaybe.M iasa), WithPoked (TMaybe.M tsssa),
WithPoked (TMaybe.M vpsa), WithPoked (TMaybe.M rstsa),
WithPoked (TMaybe.M mssa), WithPoked (TMaybe.M dssa),
WithPoked (TMaybe.M cbsa), WithPoked (TMaybe.M dsa),
CreateInfoListToMiddle ss ) =>
CreateInfoListToMiddle ('(
mn, ssas, '(nvis, vibs, vias), iasa, tsssa, vpsa, rstsa, mssa, dssa, cbsa, dsa,
'(sl, sbtss, pcl), rpa, '(sb, vibs', vias', slbtss') ) ': ss) where
type MiddleArgs ('(
mn, ssas, '(nvis, vibs, vias), iasa, tsssa, vpsa, rstsa, mssa, dssa, cbsa, dsa,
'(sl, sbtss, pcl), rpa, '(sb, vibs', vias', slbtss') ) ': ss) =
'(mn, ShaderStage.MiddleArgs ssas, nvis, iasa, tsssa, vpsa, rstsa,
mssa, dssa, cbsa, dsa) ': MiddleArgs ss
createInfoListToMiddle :: forall sd.
D sd
-> PL
(U14 CreateInfo)
('(mn, ssas, '(nvis, vibs, vias), iasa, tsssa, vpsa, rstsa, mssa,
dssa, cbsa, dsa, '(sl, sbtss, pcl), rpa,
'(sb, vibs', vias', slbtss'))
: ss)
-> IO
(PL
(U11 CreateInfo)
(MiddleArgs
('(mn, ssas, '(nvis, vibs, vias), iasa, tsssa, vpsa, rstsa, mssa,
dssa, cbsa, dsa, '(sl, sbtss, pcl), rpa,
'(sb, vibs', vias', slbtss'))
: ss)))
createInfoListToMiddle D sd
dvc (U14 CreateInfo s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14
ci :** PL (U14 CreateInfo) ss1
cis) = U11
CreateInfo
'(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11)
-> PL (U11 CreateInfo) (MiddleArgs ss)
-> PL
(U11 CreateInfo)
('(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11)
: MiddleArgs ss)
forall {k} (t :: k -> *) (s :: k) (ss1 :: [k]).
t s -> PL t ss1 -> PL t (s : ss1)
(:**)
(U11
CreateInfo
'(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11)
-> PL (U11 CreateInfo) (MiddleArgs ss)
-> PL
(U11 CreateInfo)
('(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11)
: MiddleArgs ss))
-> IO
(U11
CreateInfo
'(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11))
-> IO
(PL (U11 CreateInfo) (MiddleArgs ss)
-> PL
(U11 CreateInfo)
('(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11)
: MiddleArgs ss))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (CreateInfo s1 (MiddleArgs ssas) nvis s4 s5 s6 s7 s8 s9 s10 s11
-> U11
CreateInfo
'(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11)
forall {k} {k1} {k2} {k3} {k4} {k5} {k6} {k7} {k8} {k9} {k10}
(t :: k
-> k1 -> k2 -> k3 -> k4 -> k5 -> k6 -> k7 -> k8 -> k9 -> k10 -> *)
(s1 :: k) (s2 :: k1) (s3 :: k2) (s4 :: k3) (s5 :: k4) (s6 :: k5)
(s7 :: k6) (s8 :: k7) (s9 :: k8) (s10 :: k9) (s11 :: k10).
t s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11
-> U11 t '(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11)
U11 (CreateInfo s1 (MiddleArgs ssas) nvis s4 s5 s6 s7 s8 s9 s10 s11
-> U11
CreateInfo
'(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11))
-> IO
(CreateInfo s1 (MiddleArgs ssas) nvis s4 s5 s6 s7 s8 s9 s10 s11)
-> IO
(U11
CreateInfo
'(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> D sd
-> CreateInfo
s1
s2
'(nvis, vibs, vias)
s4
s5
s6
s7
s8
s9
s10
s11
s12
s13
'(sb, vibs', vias', slbtss')
-> IO
(CreateInfo s1 (MiddleArgs s2) nvis s4 s5 s6 s7 s8 s9 s10 s11)
forall (ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *),
[*])])
(vibs :: [(*, Rate)]) (vias :: [(Nat, *)]) sd (n :: Maybe (*))
(nvis :: Maybe (*)) (iasa :: Maybe (*)) (tsssa :: Maybe (*))
(vpsa :: Maybe (*)) (rstsa :: Maybe (*)) (mssa :: Maybe (*))
(dssa :: Maybe (*)) (cbsa :: Maybe (*)) (dsa :: Maybe (*))
(sl :: (*, [(*, [BindingType])], [*])) rpa sb
(vibs' :: [(*, Rate)]) (vias' :: [(Nat, *)])
(slbtss' :: (*, [(*, [BindingType])], [*])).
(CreateInfoListToMiddle ssas, BindingStrideList vibs Rate,
AttributeDescriptions vibs vias) =>
D sd
-> CreateInfo
n
ssas
'(nvis, vibs, vias)
iasa
tsssa
vpsa
rstsa
mssa
dssa
cbsa
dsa
sl
rpa
'(sb, vibs', vias', slbtss')
-> IO
(CreateInfo
n (MiddleArgs ssas) nvis iasa tsssa vpsa rstsa mssa dssa cbsa dsa)
createInfoToMiddle D sd
dvc CreateInfo s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14
CreateInfo
s1
s2
'(nvis, vibs, vias)
s4
s5
s6
s7
s8
s9
s10
s11
s12
s13
'(sb, vibs', vias', slbtss')
ci)
IO
(PL (U11 CreateInfo) (MiddleArgs ss)
-> PL
(U11 CreateInfo)
('(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11)
: MiddleArgs ss))
-> IO (PL (U11 CreateInfo) (MiddleArgs ss))
-> IO
(PL
(U11 CreateInfo)
('(s1, MiddleArgs ssas, nvis, s4, s5, s6, s7, s8, s9, s10, s11)
: MiddleArgs ss))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> D sd
-> PL (U14 CreateInfo) ss1
-> IO (PL (U11 CreateInfo) (MiddleArgs ss1))
forall (cias :: [(Maybe (*),
[(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])],
(Maybe (*), [(*, Rate)], [(Nat, *)]), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
(*, [(*, [BindingType])], [*]), *,
(*, [(*, Rate)], [(Nat, *)], (*, [(*, [BindingType])], [*])))])
sd.
CreateInfoListToMiddle cias =>
D sd
-> PL (U14 CreateInfo) cias
-> IO (PL (U11 CreateInfo) (MiddleArgs cias))
forall sd.
D sd
-> PL (U14 CreateInfo) ss1
-> IO (PL (U11 CreateInfo) (MiddleArgs ss1))
createInfoListToMiddle D sd
dvc PL (U14 CreateInfo) ss1
cis
createInfoToMiddle :: (
ShaderStage.CreateInfoListToMiddle ssas,
VertexInputState.BindingStrideList vibs VertexInput.Rate,
VertexInputState.AttributeDescriptions vibs vias ) =>
Device.D sd ->
CreateInfo n ssas '(nvis, vibs, vias)
iasa tsssa vpsa rstsa mssa dssa cbsa dsa sl rpa '(sb, vibs', vias', slbtss') ->
IO (M.CreateInfo n (ShaderStage.MiddleArgs ssas)
nvis iasa tsssa vpsa rstsa mssa dssa cbsa dsa)
createInfoToMiddle :: forall (ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *),
[*])])
(vibs :: [(*, Rate)]) (vias :: [(Nat, *)]) sd (n :: Maybe (*))
(nvis :: Maybe (*)) (iasa :: Maybe (*)) (tsssa :: Maybe (*))
(vpsa :: Maybe (*)) (rstsa :: Maybe (*)) (mssa :: Maybe (*))
(dssa :: Maybe (*)) (cbsa :: Maybe (*)) (dsa :: Maybe (*))
(sl :: (*, [(*, [BindingType])], [*])) rpa sb
(vibs' :: [(*, Rate)]) (vias' :: [(Nat, *)])
(slbtss' :: (*, [(*, [BindingType])], [*])).
(CreateInfoListToMiddle ssas, BindingStrideList vibs Rate,
AttributeDescriptions vibs vias) =>
D sd
-> CreateInfo
n
ssas
'(nvis, vibs, vias)
iasa
tsssa
vpsa
rstsa
mssa
dssa
cbsa
dsa
sl
rpa
'(sb, vibs', vias', slbtss')
-> IO
(CreateInfo
n (MiddleArgs ssas) nvis iasa tsssa vpsa rstsa mssa dssa cbsa dsa)
createInfoToMiddle D sd
dvc CreateInfo {
createInfoNext :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> M mn
createInfoNext = M n
mnxt,
createInfoFlags :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> CreateFlags
createInfoFlags = CreateFlags
flgs,
createInfoStages :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> PL (U5 CreateInfo) ssas
createInfoStages = PL (U5 CreateInfo) ssas
stgs,
createInfoVertexInputState :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (U3 CreateInfo visa)
createInfoVertexInputState = Maybe (U3 CreateInfo '(nvis, vibs, vias))
vis,
createInfoInputAssemblyState :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo iasa)
createInfoInputAssemblyState = Maybe (CreateInfo iasa)
ias,
createInfoTessellationState :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo tsssa)
createInfoTessellationState = Maybe (CreateInfo tsssa)
ts,
createInfoViewportState :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo vpsa)
createInfoViewportState = Maybe (CreateInfo vpsa)
vs,
createInfoRasterizationState :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo rstsa)
createInfoRasterizationState = Maybe (CreateInfo rstsa)
rs,
createInfoMultisampleState :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo mssa)
createInfoMultisampleState = Maybe (CreateInfo mssa)
ms,
createInfoDepthStencilState :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo dssa)
createInfoDepthStencilState = Maybe (CreateInfo dssa)
dss,
createInfoColorBlendState :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo cbsa)
createInfoColorBlendState = Maybe (CreateInfo cbsa)
cbs,
createInfoDynamicState :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (CreateInfo dsa)
createInfoDynamicState = Maybe (CreateInfo dsa)
ds,
createInfoLayout :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> U3 P lyta
createInfoLayout = U3 (Layout.P P
lyt),
createInfoRenderPass :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> R rpa
createInfoRenderPass = RenderPass.R R
rp,
createInfoSubpass :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Word32
createInfoSubpass = Word32
sp,
createInfoBasePipelineHandle :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Maybe (U4 G bpha)
createInfoBasePipelineHandle = Maybe (U4 G '(sb, vibs', vias', slbtss'))
bph,
createInfoBasePipelineIndex :: forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> Int32
createInfoBasePipelineIndex = Int32
bpi } = do
stgs' <- D sd
-> PL (U5 CreateInfo) ssas
-> IO (PL (U3 CreateInfo) (MiddleArgs ssas))
forall (cias :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *),
[*])])
ds.
CreateInfoListToMiddle cias =>
D ds
-> PL (U5 CreateInfo) cias
-> IO (PL (U3 CreateInfo) (MiddleArgs cias))
forall ds.
D ds
-> PL (U5 CreateInfo) ssas
-> IO (PL (U3 CreateInfo) (MiddleArgs ssas))
ShaderStage.createInfoListToMiddle D sd
dvc PL (U5 CreateInfo) ssas
stgs
bph' <- maybe M.gNull (\(U4 (G G
g)) -> G -> IO G
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure G
g) bph
pure M.CreateInfo {
M.createInfoNext = mnxt,
M.createInfoFlags = flgs,
M.createInfoStages = stgs',
M.createInfoVertexInputState =
VertexInputState.createInfoToMiddle . unU3 <$> vis,
M.createInfoInputAssemblyState = ias,
M.createInfoTessellationState = ts,
M.createInfoViewportState = vs,
M.createInfoRasterizationState = rs,
M.createInfoMultisampleState = ms,
M.createInfoDepthStencilState = dss,
M.createInfoColorBlendState = cbs,
M.createInfoDynamicState = ds,
M.createInfoLayout = lyt,
M.createInfoRenderPass = rp,
M.createInfoSubpass = sp,
M.createInfoBasePipelineHandle = bph',
M.createInfoBasePipelineIndex = bpi }
class DestroyShaderStages mvs macs where
destroyShaderStages' :: Device.D sd ->
HeteroParList.PL (U11 M.CreateInfo) mvs ->
HeteroParList.PL2
(TPMaybe.M (U2 AllocationCallbacks.A)) macs -> IO ()
instance DestroyShaderStages '[] '[] where
destroyShaderStages' :: forall sd.
D sd -> PL (U11 CreateInfo) '[] -> PL2 (M (U2 A)) '[] -> IO ()
destroyShaderStages' D sd
_ PL (U11 CreateInfo) '[]
HeteroParList.Nil PL2 (M (U2 A)) '[]
HeteroParList.Nil = () -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
instance (ShaderStage.DestroyShaderModuleList a2 mac, DestroyShaderStages ss macs) =>
DestroyShaderStages ('(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) ': ss) (mac ': macs) where
destroyShaderStages' :: forall sd.
D sd
-> PL
(U11 CreateInfo)
('(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) : ss)
-> PL2 (M (U2 A)) (mac : macs)
-> IO ()
destroyShaderStages' D sd
dvc (U11 CreateInfo s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11
cim :** PL (U11 CreateInfo) ss1
cims) (PL (M (U2 A)) s
mac :** PL (PL (M (U2 A))) ss1
macs) = do
D sd -> PL (U3 CreateInfo) s2 -> PL (M (U2 A)) s -> IO ()
forall (cias :: [(Maybe (*), ShaderKind, [*])])
(macs :: [Maybe (*, *)]) sd.
DestroyShaderModuleList cias macs =>
D sd -> PL (U3 CreateInfo) cias -> PL (M (U2 A)) macs -> IO ()
forall sd.
D sd -> PL (U3 CreateInfo) s2 -> PL (M (U2 A)) s -> IO ()
ShaderStage.destroyShaderModuleList D sd
dvc (CreateInfo s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11
-> PL (U3 CreateInfo) s2
forall (mn :: Maybe (*)) (stg :: [(Maybe (*), ShaderKind, [*])])
(vis :: Maybe (*)) (ias :: Maybe (*)) (ts :: Maybe (*))
(vs :: Maybe (*)) (rs :: Maybe (*)) (ms :: Maybe (*))
(dss :: Maybe (*)) (cbs :: Maybe (*)) (ds :: Maybe (*)).
CreateInfo mn stg vis ias ts vs rs ms dss cbs ds
-> PL (U3 CreateInfo) stg
M.createInfoStages CreateInfo s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11
cim) PL (M (U2 A)) s
mac
D sd -> PL (U11 CreateInfo) ss1 -> PL (PL (M (U2 A))) ss1 -> IO ()
forall (mvs :: [(Maybe (*), [(Maybe (*), ShaderKind, [*])],
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*))])
(macs :: [[Maybe (*, *)]]) sd.
DestroyShaderStages mvs macs =>
D sd -> PL (U11 CreateInfo) mvs -> PL2 (M (U2 A)) macs -> IO ()
forall sd.
D sd -> PL (U11 CreateInfo) ss1 -> PL (PL (M (U2 A))) ss1 -> IO ()
destroyShaderStages' D sd
dvc PL (U11 CreateInfo) ss1
cims PL (PL (M (U2 A))) ss1
macs
class AllocationCallbacksListListFromCreateInfoList cias where
type TAllocationCallbacksListList cias :: [[Maybe (Type, Type)]]
allocationCallbacksListListFromCreateInfoList ::
HeteroParList.PL (U14 CreateInfo) cias ->
HeteroParList.PL2
(TPMaybe.M (U2 AllocationCallbacks.A))
(TAllocationCallbacksListList cias)
instance AllocationCallbacksListListFromCreateInfoList '[] where
type TAllocationCallbacksListList '[] = '[]
allocationCallbacksListListFromCreateInfoList :: PL (U14 CreateInfo) '[]
-> PL2 (M (U2 A)) (TAllocationCallbacksListList '[])
allocationCallbacksListListFromCreateInfoList
PL (U14 CreateInfo) '[]
HeteroParList.Nil = PL2 (M (U2 A)) '[]
PL2 (M (U2 A)) (TAllocationCallbacksListList '[])
forall {k} (t :: k -> *). PL t '[]
HeteroParList.Nil
instance (
HeteroParList.Map3_5 (TIndex.I1_14 cia),
AllocationCallbacksListListFromCreateInfoList cias ) =>
AllocationCallbacksListListFromCreateInfoList (cia ': cias) where
type TAllocationCallbacksListList (cia ': cias) =
TMapIndex.M3_5 (TIndex.I1_14 cia) ':
TAllocationCallbacksListList cias
allocationCallbacksListListFromCreateInfoList :: PL (U14 CreateInfo) (cia : cias)
-> PL2 (M (U2 A)) (TAllocationCallbacksListList (cia : cias))
allocationCallbacksListListFromCreateInfoList (U14 CreateInfo s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14
ci :** PL (U14 CreateInfo) ss1
cis) =
CreateInfo s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14
-> PL (M (U2 A)) (M3_5 s2)
forall (ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *),
[*])])
(mn :: Maybe (*)) (visa :: (Maybe (*), [(*, Rate)], [(Nat, *)]))
(iasa :: Maybe (*)) (tsssa :: Maybe (*)) (vpsa :: Maybe (*))
(rstsa :: Maybe (*)) (mssa :: Maybe (*)) (dssa :: Maybe (*))
(cbsa :: Maybe (*)) (dsa :: Maybe (*))
(lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
Map3_5 ssas =>
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> PL (M (U2 A)) (M3_5 ssas)
allocationCallbacksListFromCreateInfo CreateInfo s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14
ci PL (M (U2 A)) (M3_5 s2)
-> PL (PL (M (U2 A))) (TAllocationCallbacksListList cias)
-> PL (PL (M (U2 A))) (M3_5 s2 : TAllocationCallbacksListList cias)
forall {k} (t :: k -> *) (s :: k) (ss1 :: [k]).
t s -> PL t ss1 -> PL t (s : ss1)
:**
PL (U14 CreateInfo) ss1
-> PL2 (M (U2 A)) (TAllocationCallbacksListList ss1)
forall (cias :: [(Maybe (*),
[(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])],
(Maybe (*), [(*, Rate)], [(Nat, *)]), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
(*, [(*, [BindingType])], [*]), *,
(*, [(*, Rate)], [(Nat, *)], (*, [(*, [BindingType])], [*])))]).
AllocationCallbacksListListFromCreateInfoList cias =>
PL (U14 CreateInfo) cias
-> PL2 (M (U2 A)) (TAllocationCallbacksListList cias)
allocationCallbacksListListFromCreateInfoList PL (U14 CreateInfo) ss1
cis
allocationCallbacksListFromCreateInfo :: HeteroParList.Map3_5 ssas =>
CreateInfo mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha ->
HeteroParList.PL (TPMaybe.M (U2 AllocationCallbacks.A)) (TMapIndex.M3_5 ssas)
allocationCallbacksListFromCreateInfo :: forall (ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *),
[*])])
(mn :: Maybe (*)) (visa :: (Maybe (*), [(*, Rate)], [(Nat, *)]))
(iasa :: Maybe (*)) (tsssa :: Maybe (*)) (vpsa :: Maybe (*))
(rstsa :: Maybe (*)) (mssa :: Maybe (*)) (dssa :: Maybe (*))
(cbsa :: Maybe (*)) (dsa :: Maybe (*))
(lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
Map3_5 ssas =>
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> PL (M (U2 A)) (M3_5 ssas)
allocationCallbacksListFromCreateInfo =
PL (U5 CreateInfo) ssas -> PL (M (U2 A)) (M3_5 ssas)
forall (cias :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *),
[*])]).
Map3_5 cias =>
PL (U5 CreateInfo) cias -> PL (M (U2 A)) (M3_5 cias)
ShaderStage.allocationCallbacksListFromCreateInfoList (PL (U5 CreateInfo) ssas -> PL (M (U2 A)) (M3_5 ssas))
-> (CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> PL (U5 CreateInfo) ssas)
-> CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> PL (M (U2 A)) (M3_5 ssas)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> PL (U5 CreateInfo) ssas
forall (mn :: Maybe (*))
(ssas :: [(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])])
(visa :: (Maybe (*), [(*, Rate)], [(Nat, *)])) (iasa :: Maybe (*))
(tsssa :: Maybe (*)) (vpsa :: Maybe (*)) (rstsa :: Maybe (*))
(mssa :: Maybe (*)) (dssa :: Maybe (*)) (cbsa :: Maybe (*))
(dsa :: Maybe (*)) (lyta :: (*, [(*, [BindingType])], [*])) rpa
(bpha :: (*, [(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))).
CreateInfo
mn ssas visa iasa tsssa vpsa rstsa mssa dssa cbsa dsa lyta rpa bpha
-> PL (U5 CreateInfo) ssas
createInfoStages
data Group sd ma sg k gas = Group (Device.D sd)
(TPMaybe.M (U2 AllocationCallbacks.A) ma)
TSem (TVar (Map.Map k ( HeteroParList.PL (U3 (G sg)) gas)))
group :: AllocationCallbacks.ToMiddle ma =>
Device.D sd -> TPMaybe.M (U2 AllocationCallbacks.A) ma ->
(forall sg . Group sd ma sg k gas -> IO a) -> IO a
group :: forall (ma :: Maybe (*, *)) sd k
(gas :: [([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))])
a.
ToMiddle ma =>
D sd
-> M (U2 A) ma -> (forall sg. Group sd ma sg k gas -> IO a) -> IO a
group dvc :: D sd
dvc@(Device.D D
mdvc) mac :: M (U2 A) ma
mac@(M (U2 A) ma -> M A (Snd ma)
forall (msa :: Maybe (*, *)).
ToMiddle msa =>
M (U2 A) msa -> M A (Snd msa)
AllocationCallbacks.toMiddle -> M A (Snd ma)
mmac) forall sg. Group sd ma sg k gas -> IO a
f = do
(sem, m) <- STM (TSem, TVar (Map k (PL (U3 (G Any)) gas)))
-> IO (TSem, TVar (Map k (PL (U3 (G Any)) gas)))
forall a. STM a -> IO a
atomically (STM (TSem, TVar (Map k (PL (U3 (G Any)) gas)))
-> IO (TSem, TVar (Map k (PL (U3 (G Any)) gas))))
-> STM (TSem, TVar (Map k (PL (U3 (G Any)) gas)))
-> IO (TSem, TVar (Map k (PL (U3 (G Any)) gas)))
forall a b. (a -> b) -> a -> b
$ (,) (TSem
-> TVar (Map k (PL (U3 (G Any)) gas))
-> (TSem, TVar (Map k (PL (U3 (G Any)) gas))))
-> STM TSem
-> STM
(TVar (Map k (PL (U3 (G Any)) gas))
-> (TSem, TVar (Map k (PL (U3 (G Any)) gas))))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Integer -> STM TSem
newTSem Integer
1 STM
(TVar (Map k (PL (U3 (G Any)) gas))
-> (TSem, TVar (Map k (PL (U3 (G Any)) gas))))
-> STM (TVar (Map k (PL (U3 (G Any)) gas)))
-> STM (TSem, TVar (Map k (PL (U3 (G Any)) gas)))
forall a b. STM (a -> b) -> STM a -> STM b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Map k (PL (U3 (G Any)) gas)
-> STM (TVar (Map k (PL (U3 (G Any)) gas)))
forall a. a -> STM (TVar a)
newTVar Map k (PL (U3 (G Any)) gas)
forall k a. Map k a
Map.empty
rtn <- f $ Group dvc mac sem m
((\PL (U3 (G Any)) gas
gs -> D -> [G] -> M A (Snd ma) -> IO ()
forall (md :: Maybe (*)). D -> [G] -> M A md -> IO ()
M.destroyGs D
mdvc (PL (U3 (G Any)) gas -> [G]
forall sg
(ss :: [([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))]).
PL (U3 (G sg)) ss -> [G]
gListToMiddle PL (U3 (G Any)) gas
gs) M A (Snd ma)
mmac) `mapM_`)
=<< atomically (readTVar m)
pure rtn
createGs' :: (
Ord k,
CreateInfoListToMiddle cias, AllocationCallbacks.ToMiddle mac ) =>
Group sd mac sg k (CreateInfoListArgsToGArgs cias) -> k ->
Maybe (Cache.P sc) ->
HeteroParList.PL (U14 CreateInfo) cias ->
IO (Either String
(HeteroParList.PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)))
createGs' :: forall k
(cias :: [(Maybe (*),
[(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])],
(Maybe (*), [(*, Rate)], [(Nat, *)]), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
(*, [(*, [BindingType])], [*]), *,
(*, [(*, Rate)], [(Nat, *)], (*, [(*, [BindingType])], [*])))])
(mac :: Maybe (*, *)) sd sg sc.
(Ord k, CreateInfoListToMiddle cias, ToMiddle mac) =>
Group sd mac sg k (CreateInfoListArgsToGArgs cias)
-> k
-> Maybe (P sc)
-> PL (U14 CreateInfo) cias
-> IO
(Either [Char] (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)))
createGs' (Group d :: D sd
d@(Device.D D
dvc)
(M (U2 A) mac -> M A (Snd mac)
forall (msa :: Maybe (*, *)).
ToMiddle msa =>
M (U2 A) msa -> M A (Snd msa)
AllocationCallbacks.toMiddle -> M A (Snd mac)
mmac) TSem
sem TVar (Map k (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)))
gss) k
k
((P sc -> P
forall s. P s -> P
Cache.pToMiddle (P sc -> P) -> Maybe (P sc) -> Maybe P
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) -> Maybe P
mc) PL (U14 CreateInfo) cias
cis = do
ok <- STM Bool -> IO Bool
forall a. STM a -> IO a
atomically do
mx <- k
-> Map k (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias))
-> Maybe (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias))
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup k
k (Map k (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias))
-> Maybe (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)))
-> STM (Map k (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)))
-> STM (Maybe (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TVar (Map k (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)))
-> STM (Map k (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)))
forall a. TVar a -> STM a
readTVar TVar (Map k (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)))
gss
case mx of
Maybe (PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias))
Nothing -> TSem -> STM ()
waitTSem TSem
sem STM () -> STM Bool -> STM Bool
forall a b. STM a -> STM b -> STM b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Bool -> STM Bool
forall a. a -> STM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
True
Just PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)
_ -> Bool -> STM Bool
forall a. a -> STM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
if ok
then do gs <- createInfoListToMiddle d cis >>= \PL (U11 CreateInfo) (MiddleArgs cias)
cis' -> D
-> Maybe P
-> PL (U11 CreateInfo) (MiddleArgs cias)
-> M A (Snd mac)
-> IO [G]
forall (cias :: [(Maybe (*), [(Maybe (*), ShaderKind, [*])],
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*))])
(mc :: Maybe (*)).
CreateInfoListToCore cias =>
D -> Maybe P -> PL (U11 CreateInfo) cias -> M A mc -> IO [G]
M.createGs D
dvc Maybe P
mc PL (U11 CreateInfo) (MiddleArgs cias)
cis' M A (Snd mac)
mmac
IO [G] -> IO () -> IO [G]
forall a b. IO a -> IO b -> IO a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* D sd
-> PL (U11 CreateInfo) (MiddleArgs cias)
-> PL2 (M (U2 A)) (TAllocationCallbacksListList cias)
-> IO ()
forall (mvs :: [(Maybe (*), [(Maybe (*), ShaderKind, [*])],
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*))])
(macs :: [[Maybe (*, *)]]) sd.
DestroyShaderStages mvs macs =>
D sd -> PL (U11 CreateInfo) mvs -> PL2 (M (U2 A)) macs -> IO ()
forall sd.
D sd
-> PL (U11 CreateInfo) (MiddleArgs cias)
-> PL2 (M (U2 A)) (TAllocationCallbacksListList cias)
-> IO ()
destroyShaderStages' D sd
d PL (U11 CreateInfo) (MiddleArgs cias)
cis'
(PL (U14 CreateInfo) cias
-> PL2 (M (U2 A)) (TAllocationCallbacksListList cias)
forall (cias :: [(Maybe (*),
[(Maybe (*), Maybe (*), ShaderKind, Maybe (*, *), [*])],
(Maybe (*), [(*, Rate)], [(Nat, *)]), Maybe (*), Maybe (*),
Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*), Maybe (*),
(*, [(*, [BindingType])], [*]), *,
(*, [(*, Rate)], [(Nat, *)], (*, [(*, [BindingType])], [*])))]).
AllocationCallbacksListListFromCreateInfoList cias =>
PL (U14 CreateInfo) cias
-> PL2 (M (U2 A)) (TAllocationCallbacksListList cias)
allocationCallbacksListListFromCreateInfoList PL (U14 CreateInfo) cias
cis)
let gs' = [G] -> PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)
forall (ss :: [([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))])
sg.
GListFromMiddle ss =>
[G] -> PL (U3 (G sg)) ss
forall sg. [G] -> PL (U3 (G sg)) (CreateInfoListArgsToGArgs cias)
gListFromMiddle [G]
gs
atomically $ modifyTVar gss (Map.insert k gs') >> signalTSem sem
pure $ Right gs'
else pure . Left $
"Gpu.Vulkan.Pipeline.Graphics.create' :: The key already exist"
unsafeDestroyGs :: (Ord k, AllocationCallbacks.ToMiddle ma) =>
Group sd ma sg k gas -> k -> IO (Either String ())
unsafeDestroyGs :: forall k (ma :: Maybe (*, *)) sd sg
(gas :: [([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))]).
(Ord k, ToMiddle ma) =>
Group sd ma sg k gas -> k -> IO (Either [Char] ())
unsafeDestroyGs (Group (Device.D D
mdvc)
(M (U2 A) ma -> M A (Snd ma)
forall (msa :: Maybe (*, *)).
ToMiddle msa =>
M (U2 A) msa -> M A (Snd msa)
AllocationCallbacks.toMiddle -> M A (Snd ma)
mma) TSem
sem TVar (Map k (PL (U3 (G sg)) gas))
gss) k
k = do
mgs <- STM (Maybe (PL (U3 (G sg)) gas)) -> IO (Maybe (PL (U3 (G sg)) gas))
forall a. STM a -> IO a
atomically do
mx <- k -> Map k (PL (U3 (G sg)) gas) -> Maybe (PL (U3 (G sg)) gas)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup k
k (Map k (PL (U3 (G sg)) gas) -> Maybe (PL (U3 (G sg)) gas))
-> STM (Map k (PL (U3 (G sg)) gas))
-> STM (Maybe (PL (U3 (G sg)) gas))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TVar (Map k (PL (U3 (G sg)) gas))
-> STM (Map k (PL (U3 (G sg)) gas))
forall a. TVar a -> STM a
readTVar TVar (Map k (PL (U3 (G sg)) gas))
gss
case mx of
Maybe (PL (U3 (G sg)) gas)
Nothing -> Maybe (PL (U3 (G sg)) gas) -> STM (Maybe (PL (U3 (G sg)) gas))
forall a. a -> STM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (PL (U3 (G sg)) gas)
forall a. Maybe a
Nothing
Just PL (U3 (G sg)) gas
_ -> TSem -> STM ()
waitTSem TSem
sem STM ()
-> STM (Maybe (PL (U3 (G sg)) gas))
-> STM (Maybe (PL (U3 (G sg)) gas))
forall a b. STM a -> STM b -> STM b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Maybe (PL (U3 (G sg)) gas) -> STM (Maybe (PL (U3 (G sg)) gas))
forall a. a -> STM a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (PL (U3 (G sg)) gas)
mx
case mgs of
Maybe (PL (U3 (G sg)) gas)
Nothing -> Either [Char] () -> IO (Either [Char] ())
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either [Char] () -> IO (Either [Char] ()))
-> Either [Char] () -> IO (Either [Char] ())
forall a b. (a -> b) -> a -> b
$ [Char] -> Either [Char] ()
forall a b. a -> Either a b
Left
[Char]
"Gpu.Vulkan.Pipeline.Graphics.unsafeDestroyGs: No such key"
Just PL (U3 (G sg)) gas
gs -> do
STM () -> IO ()
forall a. STM a -> IO a
atomically (STM () -> IO ())
-> ((Map k (PL (U3 (G sg)) gas) -> Map k (PL (U3 (G sg)) gas))
-> STM ())
-> (Map k (PL (U3 (G sg)) gas) -> Map k (PL (U3 (G sg)) gas))
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TVar (Map k (PL (U3 (G sg)) gas))
-> (Map k (PL (U3 (G sg)) gas) -> Map k (PL (U3 (G sg)) gas))
-> STM ()
forall a. TVar a -> (a -> a) -> STM ()
modifyTVar TVar (Map k (PL (U3 (G sg)) gas))
gss ((Map k (PL (U3 (G sg)) gas) -> Map k (PL (U3 (G sg)) gas))
-> IO ())
-> (Map k (PL (U3 (G sg)) gas) -> Map k (PL (U3 (G sg)) gas))
-> IO ()
forall a b. (a -> b) -> a -> b
$ k -> Map k (PL (U3 (G sg)) gas) -> Map k (PL (U3 (G sg)) gas)
forall k a. Ord k => k -> Map k a -> Map k a
Map.delete k
k
D -> [G] -> M A (Snd ma) -> IO ()
forall (md :: Maybe (*)). D -> [G] -> M A md -> IO ()
M.destroyGs D
mdvc (PL (U3 (G sg)) gas -> [G]
forall sg
(ss :: [([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))]).
PL (U3 (G sg)) ss -> [G]
gListToMiddle PL (U3 (G sg)) gas
gs) M A (Snd ma)
mma
() -> Either [Char] ()
forall a b. b -> Either a b
Right (() -> Either [Char] ()) -> IO () -> IO (Either [Char] ())
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> STM () -> IO ()
forall a. STM a -> IO a
atomically (TSem -> STM ()
signalTSem TSem
sem)
lookup :: Ord k =>
Group sd ma sg k gas -> k -> IO (Maybe (HeteroParList.PL (U3 (G sg)) gas))
lookup :: forall k sd (ma :: Maybe (*, *)) sg
(gas :: [([(*, Rate)], [(Nat, *)],
(*, [(*, [BindingType])], [*]))]).
Ord k =>
Group sd ma sg k gas -> k -> IO (Maybe (PL (U3 (G sg)) gas))
lookup (Group D sd
_ M (U2 A) ma
_ TSem
_sem TVar (Map k (PL (U3 (G sg)) gas))
gss) k
k = STM (Maybe (PL (U3 (G sg)) gas)) -> IO (Maybe (PL (U3 (G sg)) gas))
forall a. STM a -> IO a
atomically (STM (Maybe (PL (U3 (G sg)) gas))
-> IO (Maybe (PL (U3 (G sg)) gas)))
-> STM (Maybe (PL (U3 (G sg)) gas))
-> IO (Maybe (PL (U3 (G sg)) gas))
forall a b. (a -> b) -> a -> b
$ k -> Map k (PL (U3 (G sg)) gas) -> Maybe (PL (U3 (G sg)) gas)
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup k
k (Map k (PL (U3 (G sg)) gas) -> Maybe (PL (U3 (G sg)) gas))
-> STM (Map k (PL (U3 (G sg)) gas))
-> STM (Maybe (PL (U3 (G sg)) gas))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TVar (Map k (PL (U3 (G sg)) gas))
-> STM (Map k (PL (U3 (G sg)) gas))
forall a. TVar a -> STM a
readTVar TVar (Map k (PL (U3 (G sg)) gas))
gss