{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE ScopedTypeVariables, RankNTypes, TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds, PolyKinds #-}
{-# LANGUAGE KindSignatures, TypeOperators #-}
{-# LANGUAGE FlexibleContexts, FlexibleInstances, UndecidableInstances #-}
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Gpu.Vulkan.Image.Internal (
create, unsafeRecreate, unsafeRecreate',
I(..), Binded(..), CreateInfo(..),
Group, group, create', unsafeDestroy, lookup,
getMemoryRequirements, getMemoryRequirementsBinded,
MemoryBarrier(..), MemoryBarrierListToMiddle(..),
MemoryBarrier2(..), MemoryBarrier2ListToMiddle(..),
M.SubresourceRange(..),
M.Blit(..), M.Blit2(..), M.SubresourceLayers(..),
M.Subresource(..), unsafeToBinded
) where
import Prelude hiding (lookup)
import GHC.TypeLits
import Foreign.Storable.PeekPoke
import Control.Exception
import Data.Kind
import Data.TypeLevel.Tuple.Uncurry
import Data.TypeLevel.Tuple.MapIndex qualified as TMapIndex
import Data.TypeLevel.Maybe qualified as TMaybe
import Data.TypeLevel.ParMaybe qualified as TPMaybe
import qualified Data.HeteroParList as HPList
import qualified Data.HeteroParList as HeteroParList
import Data.HeteroParList (pattern (:**))
import Data.Word
import Gpu.Vulkan.Middle
import Gpu.Vulkan.Enum
import Gpu.Vulkan.Image.Type
import Gpu.Vulkan.Image.Enum hiding (Type)
import qualified Gpu.Vulkan.TypeEnum as T
import qualified Gpu.Vulkan.AllocationCallbacks as AllocationCallbacks
import qualified Gpu.Vulkan.AllocationCallbacks.Type as AllocationCallbacks
import qualified Gpu.Vulkan.QueueFamily.Middle as QueueFamily
import qualified Gpu.Vulkan.Device.Type as Device
import qualified Gpu.Vulkan.Memory.Middle as Memory
import qualified Gpu.Vulkan.Image.Middle as M
import qualified Gpu.Vulkan.Sample.Enum as Sample
import qualified Gpu.Vulkan.Image.Enum as I
import qualified Gpu.Vulkan.Pipeline as Pipeline
create :: (
WithPoked (TMaybe.M mn), T.FormatToValue fmt,
AllocationCallbacks.ToMiddle mac ) =>
Device.D sd -> CreateInfo mn fmt ->
TPMaybe.M (U2 AllocationCallbacks.A) mac ->
(forall s . I s nm fmt -> IO a) -> IO a
create :: forall (mn :: Maybe (*)) (fmt :: Format) (mac :: Maybe (*, *)) sd
(nm :: Symbol) a.
(WithPoked (M mn), FormatToValue fmt, ToMiddle mac) =>
D sd
-> CreateInfo mn fmt
-> M (U2 A) mac
-> (forall s. I s nm fmt -> IO a)
-> IO a
create (Device.D D
mdvc) CreateInfo mn fmt
ci (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 s. I s nm fmt -> IO a
f = IO I -> (I -> IO ()) -> (I -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket
(D -> CreateInfo mn -> M A (Snd mac) -> IO I
forall (mn :: Maybe (*)) (mc :: Maybe (*)).
WithPoked (M mn) =>
D -> CreateInfo mn -> M A mc -> IO I
M.create D
mdvc (CreateInfo mn fmt -> CreateInfo mn
forall (n :: Maybe (*)) (fmt :: Format).
FormatToValue fmt =>
CreateInfo n fmt -> CreateInfo n
createInfoToMiddle CreateInfo mn fmt
ci) M A (Snd mac)
macd)
(\I
i -> D -> I -> M A (Snd mac) -> IO ()
forall (md :: Maybe (*)). D -> I -> M A md -> IO ()
M.destroy D
mdvc I
i M A (Snd mac)
macd)
(I Any nm fmt -> IO a
forall s. I s nm fmt -> IO a
f (I Any nm fmt -> IO a) -> (I -> I Any nm fmt) -> I -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
.I -> I Any nm fmt
forall s (nm :: Symbol) (fmt :: Format). I -> I s nm fmt
I)
data Group sd ma s k nm fmt = Group
(Device.D sd) (TPMaybe.M (U2 AllocationCallbacks.A) ma) (M.Group s k)
group :: AllocationCallbacks.ToMiddle mac =>
Device.D sd -> TPMaybe.M (U2 AllocationCallbacks.A) mac ->
(forall s . Group sd mac s k nm fmt -> IO a) -> IO a
group :: forall {k} {k} (mac :: Maybe (*, *)) sd k (nm :: k) (fmt :: k) a.
ToMiddle mac =>
D sd
-> M (U2 A) mac
-> (forall s. Group sd mac s k nm fmt -> IO a)
-> IO a
group dvc :: D sd
dvc@(Device.D D
mdvc) ma :: M (U2 A) mac
ma@(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)
mac) forall s. Group sd mac s k nm fmt -> IO a
f =
D -> M A (Snd mac) -> (forall s. Group s k -> IO a) -> IO a
forall (md :: Maybe (*)) k a.
D -> M A md -> (forall s. Group s k -> IO a) -> IO a
M.group D
mdvc M A (Snd mac)
mac (Group sd mac s k nm fmt -> IO a
forall s. Group sd mac s k nm fmt -> IO a
f (Group sd mac s k nm fmt -> IO a)
-> (Group s k -> Group sd mac s k nm fmt) -> Group s k -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D sd -> M (U2 A) mac -> Group s k -> Group sd mac s k nm fmt
forall {k} {k} sd (ma :: Maybe (*, *)) s k (nm :: k) (fmt :: k).
D sd -> M (U2 A) ma -> Group s k -> Group sd ma s k nm fmt
Group D sd
dvc M (U2 A) mac
ma)
create' :: (
Ord k, WithPoked (TMaybe.M mn), T.FormatToValue fmt,
AllocationCallbacks.ToMiddle mac ) =>
Group sd mac sm k nm fmt -> k -> CreateInfo mn fmt ->
IO (Either String (I sm nm fmt))
create' :: forall k (mn :: Maybe (*)) (fmt :: Format) (mac :: Maybe (*, *)) sd
sm (nm :: Symbol).
(Ord k, WithPoked (M mn), FormatToValue fmt, ToMiddle mac) =>
Group sd mac sm k nm fmt
-> k -> CreateInfo mn fmt -> IO (Either String (I sm nm fmt))
create' (Group (Device.D D
mdvc) (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) Group sm k
mngr) k
k CreateInfo mn fmt
ci =
(I -> I sm nm fmt
forall s (nm :: Symbol) (fmt :: Format). I -> I s nm fmt
I (I -> I sm nm fmt)
-> Either String I -> Either String (I sm nm fmt)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (Either String I -> Either String (I sm nm fmt))
-> IO (Either String I) -> IO (Either String (I sm nm fmt))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> D
-> Group sm k
-> k
-> CreateInfo mn
-> M A (Snd mac)
-> IO (Either String I)
forall k (mn :: Maybe (*)) sm (mc :: Maybe (*)).
(Ord k, WithPoked (M mn)) =>
D
-> Group sm k
-> k
-> CreateInfo mn
-> M A mc
-> IO (Either String I)
M.create' D
mdvc Group sm k
mngr k
k (CreateInfo mn fmt -> CreateInfo mn
forall (n :: Maybe (*)) (fmt :: Format).
FormatToValue fmt =>
CreateInfo n fmt -> CreateInfo n
createInfoToMiddle CreateInfo mn fmt
ci) M A (Snd mac)
macd
unsafeDestroy :: (Ord k, AllocationCallbacks.ToMiddle mac) =>
Group sd mac sm k nm fmt -> k -> IO (Either String ())
unsafeDestroy :: forall {k} {k} k (mac :: Maybe (*, *)) sd sm (nm :: k) (fmt :: k).
(Ord k, ToMiddle mac) =>
Group sd mac sm k nm fmt -> k -> IO (Either String ())
unsafeDestroy (Group (Device.D D
mdvc) (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)
mac) Group sm k
mngr) k
k =
D -> Group sm k -> k -> M A (Snd mac) -> IO (Either String ())
forall k sm (mc :: Maybe (*)).
Ord k =>
D -> Group sm k -> k -> M A mc -> IO (Either String ())
M.destroy' D
mdvc Group sm k
mngr k
k M A (Snd mac)
mac
lookup :: Ord k => Group sd ma smng k nm fmt -> k -> IO (Maybe (I smng nm fmt))
lookup :: forall k sd (ma :: Maybe (*, *)) smng (nm :: Symbol)
(fmt :: Format).
Ord k =>
Group sd ma smng k nm fmt -> k -> IO (Maybe (I smng nm fmt))
lookup (Group D sd
_ M (U2 A) ma
_ Group smng k
mng) k
k = (I -> I smng nm fmt
forall s (nm :: Symbol) (fmt :: Format). I -> I s nm fmt
I (I -> I smng nm fmt) -> Maybe I -> Maybe (I smng nm fmt)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (Maybe I -> Maybe (I smng nm fmt))
-> IO (Maybe I) -> IO (Maybe (I smng nm fmt))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Group smng k -> k -> IO (Maybe I)
forall k sm. Ord k => Group sm k -> k -> IO (Maybe I)
M.lookup Group smng k
mng k
k
unsafeRecreate :: (
WithPoked (TMaybe.M mn), AllocationCallbacks.ToMiddle mac,
T.FormatToValue fmt ) =>
Device.D sd -> CreateInfo mn fmt ->
TPMaybe.M (U2 AllocationCallbacks.A) mac ->
Binded sm si nm fmt -> IO ()
unsafeRecreate :: forall (mn :: Maybe (*)) (mac :: Maybe (*, *)) (fmt :: Format) sd
sm si (nm :: Symbol).
(WithPoked (M mn), ToMiddle mac, FormatToValue fmt) =>
D sd
-> CreateInfo mn fmt
-> M (U2 A) mac
-> Binded sm si nm fmt
-> IO ()
unsafeRecreate (Device.D D
mdvc) CreateInfo mn fmt
ci
(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)
macc) (Binded I
i) =
D -> CreateInfo mn -> M A (Snd mac) -> M A (Snd mac) -> I -> IO ()
forall (mn :: Maybe (*)) (mc :: Maybe (*)) (md :: Maybe (*)).
WithPoked (M mn) =>
D -> CreateInfo mn -> M A mc -> M A md -> I -> IO ()
M.recreate D
mdvc (CreateInfo mn fmt -> CreateInfo mn
forall (n :: Maybe (*)) (fmt :: Format).
FormatToValue fmt =>
CreateInfo n fmt -> CreateInfo n
createInfoToMiddle CreateInfo mn fmt
ci) M A (Snd mac)
macc M A (Snd mac)
macc I
i
unsafeRecreate' :: (
WithPoked (TMaybe.M mn), AllocationCallbacks.ToMiddle mac,
T.FormatToValue fmt ) =>
Device.D sd -> CreateInfo mn fmt ->
TPMaybe.M (U2 AllocationCallbacks.A) mac ->
Binded sm si nm fmt -> IO a -> IO ()
unsafeRecreate' :: forall (mn :: Maybe (*)) (mac :: Maybe (*, *)) (fmt :: Format) sd
sm si (nm :: Symbol) a.
(WithPoked (M mn), ToMiddle mac, FormatToValue fmt) =>
D sd
-> CreateInfo mn fmt
-> M (U2 A) mac
-> Binded sm si nm fmt
-> IO a
-> IO ()
unsafeRecreate' (Device.D D
mdvc) CreateInfo mn fmt
ci
(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)
macc) (Binded I
i) =
D
-> CreateInfo mn
-> M A (Snd mac)
-> M A (Snd mac)
-> I
-> IO a
-> IO ()
forall (mn :: Maybe (*)) (mc :: Maybe (*)) (md :: Maybe (*)) a.
WithPoked (M mn) =>
D -> CreateInfo mn -> M A mc -> M A md -> I -> IO a -> IO ()
M.recreate' D
mdvc (CreateInfo mn fmt -> CreateInfo mn
forall (n :: Maybe (*)) (fmt :: Format).
FormatToValue fmt =>
CreateInfo n fmt -> CreateInfo n
createInfoToMiddle CreateInfo mn fmt
ci) M A (Snd mac)
macc M A (Snd mac)
macc I
i
getMemoryRequirements :: Device.D sd -> I si nm fmt -> IO Memory.Requirements
getMemoryRequirements :: forall sd si (nm :: Symbol) (fmt :: Format).
D sd -> I si nm fmt -> IO Requirements
getMemoryRequirements (Device.D D
dvc) (I I
img) =
D -> I -> IO Requirements
M.getMemoryRequirements D
dvc I
img
getMemoryRequirementsBinded :: Device.D sd -> Binded sm si nm fmt -> IO Memory.Requirements
getMemoryRequirementsBinded :: forall sd sm si (nm :: Symbol) (fmt :: Format).
D sd -> Binded sm si nm fmt -> IO Requirements
getMemoryRequirementsBinded (Device.D D
dvc) (Binded I
img) =
D -> I -> IO Requirements
M.getMemoryRequirements D
dvc I
img
data MemoryBarrier mn sm si nm fmt = MemoryBarrier {
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> M mn
memoryBarrierNext :: TMaybe.M mn,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> AccessFlags
memoryBarrierSrcAccessMask :: AccessFlags,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> AccessFlags
memoryBarrierDstAccessMask :: AccessFlags,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> Layout
memoryBarrierOldLayout :: Layout,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> Layout
memoryBarrierNewLayout :: Layout,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> Index
memoryBarrierSrcQueueFamilyIndex :: QueueFamily.Index,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> Index
memoryBarrierDstQueueFamilyIndex :: QueueFamily.Index,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> Binded sm si nm fmt
memoryBarrierImage :: Binded sm si nm fmt,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> SubresourceRange
memoryBarrierSubresourceRange :: M.SubresourceRange }
memoryBarrierToMiddle :: MemoryBarrier n si sm nm fmt -> M.MemoryBarrier n
memoryBarrierToMiddle :: forall (n :: Maybe (*)) si sm (nm :: Symbol) (fmt :: Format).
MemoryBarrier n si sm nm fmt -> MemoryBarrier n
memoryBarrierToMiddle MemoryBarrier {
memoryBarrierNext :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> M mn
memoryBarrierNext = M n
mnxt,
memoryBarrierSrcAccessMask :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> AccessFlags
memoryBarrierSrcAccessMask = AccessFlags
sam,
memoryBarrierDstAccessMask :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> AccessFlags
memoryBarrierDstAccessMask = AccessFlags
dam,
memoryBarrierOldLayout :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> Layout
memoryBarrierOldLayout = Layout
olyt,
memoryBarrierNewLayout :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> Layout
memoryBarrierNewLayout = Layout
nlyt,
memoryBarrierSrcQueueFamilyIndex :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> Index
memoryBarrierSrcQueueFamilyIndex = Index
sqfi,
memoryBarrierDstQueueFamilyIndex :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> Index
memoryBarrierDstQueueFamilyIndex = Index
dqfi,
memoryBarrierImage :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> Binded sm si nm fmt
memoryBarrierImage = Binded I
img,
memoryBarrierSubresourceRange :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier mn sm si nm fmt -> SubresourceRange
memoryBarrierSubresourceRange = SubresourceRange
srr } = M.MemoryBarrier {
memoryBarrierNext :: M n
M.memoryBarrierNext = M n
mnxt,
memoryBarrierSrcAccessMask :: AccessFlags
M.memoryBarrierSrcAccessMask = AccessFlags
sam,
memoryBarrierDstAccessMask :: AccessFlags
M.memoryBarrierDstAccessMask = AccessFlags
dam,
memoryBarrierOldLayout :: Layout
M.memoryBarrierOldLayout = Layout
olyt,
memoryBarrierNewLayout :: Layout
M.memoryBarrierNewLayout = Layout
nlyt,
memoryBarrierSrcQueueFamilyIndex :: Index
M.memoryBarrierSrcQueueFamilyIndex = Index
sqfi,
memoryBarrierDstQueueFamilyIndex :: Index
M.memoryBarrierDstQueueFamilyIndex = Index
dqfi,
memoryBarrierImage :: I
M.memoryBarrierImage = I
img,
memoryBarrierSubresourceRange :: SubresourceRange
M.memoryBarrierSubresourceRange = SubresourceRange
srr }
class MemoryBarrierListToMiddle
(mbargs :: [(Maybe Type, Type, Type, Symbol, T.Format)]) where
memoryBarrierListToMiddle ::
HeteroParList.PL (U5 MemoryBarrier) mbargs ->
HeteroParList.PL M.MemoryBarrier (TMapIndex.M0_5 mbargs)
instance MemoryBarrierListToMiddle '[] where
memoryBarrierListToMiddle :: PL (U5 MemoryBarrier) '[] -> PL MemoryBarrier (M0_5 '[])
memoryBarrierListToMiddle PL (U5 MemoryBarrier) '[]
HeteroParList.Nil = PL MemoryBarrier '[]
PL MemoryBarrier (M0_5 '[])
forall {k} (t :: k -> *). PL t '[]
HeteroParList.Nil
instance MemoryBarrierListToMiddle mbargs =>
MemoryBarrierListToMiddle ('(mn, si, sm, nm, fmt) ': mbargs) where
memoryBarrierListToMiddle :: PL (U5 MemoryBarrier) ('(mn, si, sm, nm, fmt) : mbargs)
-> PL MemoryBarrier (M0_5 ('(mn, si, sm, nm, fmt) : mbargs))
memoryBarrierListToMiddle (U5 MemoryBarrier s1 s2 s3 s4 s5
mb :** PL (U5 MemoryBarrier) ss1
mbs) =
MemoryBarrier s1 s2 s3 s4 s5 -> MemoryBarrier s1
forall (n :: Maybe (*)) si sm (nm :: Symbol) (fmt :: Format).
MemoryBarrier n si sm nm fmt -> MemoryBarrier n
memoryBarrierToMiddle MemoryBarrier s1 s2 s3 s4 s5
mb MemoryBarrier s1
-> PL MemoryBarrier (M0_5 mbargs)
-> PL MemoryBarrier (s1 : M0_5 mbargs)
forall {k} (t :: k -> *) (s :: k) (ss1 :: [k]).
t s -> PL t ss1 -> PL t (s : ss1)
:** PL (U5 MemoryBarrier) ss1 -> PL MemoryBarrier (M0_5 ss1)
forall (mbargs :: [(Maybe (*), *, *, Symbol, Format)]).
MemoryBarrierListToMiddle mbargs =>
PL (U5 MemoryBarrier) mbargs -> PL MemoryBarrier (M0_5 mbargs)
memoryBarrierListToMiddle PL (U5 MemoryBarrier) ss1
mbs
data MemoryBarrier2 mn sm si nm fmt = MemoryBarrier2 {
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> M mn
memoryBarrier2Next :: TMaybe.M mn,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> StageFlags2
memoryBarrier2SrcStageMask :: Pipeline.StageFlags2,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> AccessFlags2
memoryBarrier2SrcAccessMask :: AccessFlags2,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> StageFlags2
memoryBarrier2DstStageMask :: Pipeline.StageFlags2,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> AccessFlags2
memoryBarrier2DstAccessMask :: AccessFlags2,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> Layout
memoryBarrier2OldLayout :: Layout, forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> Layout
memoryBarrier2NewLayout :: Layout,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> Index
memoryBarrier2SrcQueueFamilyIndex :: QueueFamily.Index,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> Index
memoryBarrier2DstQueueFamilyIndex :: QueueFamily.Index,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> Binded sm si nm fmt
memoryBarrier2Image :: Binded sm si nm fmt,
forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> SubresourceRange
memoryBarrier2SubresourceRange :: M.SubresourceRange }
memoryBarrier2ToMiddle :: MemoryBarrier2 mn si sm nm fmt -> M.MemoryBarrier2 mn
memoryBarrier2ToMiddle :: forall (mn :: Maybe (*)) si sm (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn si sm nm fmt -> MemoryBarrier2 mn
memoryBarrier2ToMiddle MemoryBarrier2 {
memoryBarrier2Next :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> M mn
memoryBarrier2Next = M mn
mnxt,
memoryBarrier2SrcStageMask :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> StageFlags2
memoryBarrier2SrcStageMask = StageFlags2
ssm,
memoryBarrier2SrcAccessMask :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> AccessFlags2
memoryBarrier2SrcAccessMask = AccessFlags2
sam,
memoryBarrier2DstStageMask :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> StageFlags2
memoryBarrier2DstStageMask = StageFlags2
dsm,
memoryBarrier2DstAccessMask :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> AccessFlags2
memoryBarrier2DstAccessMask = AccessFlags2
dam,
memoryBarrier2OldLayout :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> Layout
memoryBarrier2OldLayout = Layout
ol,
memoryBarrier2NewLayout :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> Layout
memoryBarrier2NewLayout = Layout
nl,
memoryBarrier2SrcQueueFamilyIndex :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> Index
memoryBarrier2SrcQueueFamilyIndex = Index
sqfi,
memoryBarrier2DstQueueFamilyIndex :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> Index
memoryBarrier2DstQueueFamilyIndex = Index
dqfi,
memoryBarrier2Image :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> Binded sm si nm fmt
memoryBarrier2Image = Binded I
img,
memoryBarrier2SubresourceRange :: forall (mn :: Maybe (*)) sm si (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn sm si nm fmt -> SubresourceRange
memoryBarrier2SubresourceRange = SubresourceRange
srr } = M.MemoryBarrier2 {
memoryBarrier2Next :: M mn
M.memoryBarrier2Next = M mn
mnxt,
memoryBarrier2SrcStageMask :: StageFlags2
M.memoryBarrier2SrcStageMask = StageFlags2
ssm,
memoryBarrier2SrcAccessMask :: AccessFlags2
M.memoryBarrier2SrcAccessMask = AccessFlags2
sam,
memoryBarrier2DstStageMask :: StageFlags2
M.memoryBarrier2DstStageMask = StageFlags2
dsm,
memoryBarrier2DstAccessMask :: AccessFlags2
M.memoryBarrier2DstAccessMask = AccessFlags2
dam,
memoryBarrier2OldLayout :: Layout
M.memoryBarrier2OldLayout = Layout
ol,
memoryBarrier2NewLayout :: Layout
M.memoryBarrier2NewLayout = Layout
nl,
memoryBarrier2SrcQueueFamilyIndex :: Index
M.memoryBarrier2SrcQueueFamilyIndex = Index
sqfi,
memoryBarrier2DstQueueFamilyIndex :: Index
M.memoryBarrier2DstQueueFamilyIndex = Index
dqfi,
memoryBarrier2Image :: I
M.memoryBarrier2Image = I
img,
memoryBarrier2SubresourceRange :: SubresourceRange
M.memoryBarrier2SubresourceRange = SubresourceRange
srr }
class MemoryBarrier2ListToMiddle
(mbargs :: [(Maybe Type, Type, Type, Symbol, T.Format)]) where
memoryBarrier2ListToMiddle ::
HeteroParList.PL (U5 MemoryBarrier2) mbargs ->
HeteroParList.PL M.MemoryBarrier2 (TMapIndex.M0_5 mbargs)
instance MemoryBarrier2ListToMiddle '[] where
memoryBarrier2ListToMiddle :: PL (U5 MemoryBarrier2) '[] -> PL MemoryBarrier2 (M0_5 '[])
memoryBarrier2ListToMiddle PL (U5 MemoryBarrier2) '[]
HPList.Nil = PL MemoryBarrier2 '[]
PL MemoryBarrier2 (M0_5 '[])
forall {k} (t :: k -> *). PL t '[]
HPList.Nil
instance MemoryBarrier2ListToMiddle mbargs =>
MemoryBarrier2ListToMiddle ('(mn, si, sm, nm, fmt) ': mbargs) where
memoryBarrier2ListToMiddle :: PL (U5 MemoryBarrier2) ('(mn, si, sm, nm, fmt) : mbargs)
-> PL MemoryBarrier2 (M0_5 ('(mn, si, sm, nm, fmt) : mbargs))
memoryBarrier2ListToMiddle (U5 MemoryBarrier2 s1 s2 s3 s4 s5
mb :** PL (U5 MemoryBarrier2) ss1
mbs) =
MemoryBarrier2 s1 s2 s3 s4 s5 -> MemoryBarrier2 s1
forall (mn :: Maybe (*)) si sm (nm :: Symbol) (fmt :: Format).
MemoryBarrier2 mn si sm nm fmt -> MemoryBarrier2 mn
memoryBarrier2ToMiddle MemoryBarrier2 s1 s2 s3 s4 s5
mb MemoryBarrier2 s1
-> PL MemoryBarrier2 (M0_5 mbargs)
-> PL MemoryBarrier2 (s1 : M0_5 mbargs)
forall {k} (t :: k -> *) (s :: k) (ss1 :: [k]).
t s -> PL t ss1 -> PL t (s : ss1)
:** PL (U5 MemoryBarrier2) ss1 -> PL MemoryBarrier2 (M0_5 ss1)
forall (mbargs :: [(Maybe (*), *, *, Symbol, Format)]).
MemoryBarrier2ListToMiddle mbargs =>
PL (U5 MemoryBarrier2) mbargs -> PL MemoryBarrier2 (M0_5 mbargs)
memoryBarrier2ListToMiddle PL (U5 MemoryBarrier2) ss1
mbs
data CreateInfo mn (fmt :: T.Format) = CreateInfo {
forall (mn :: Maybe (*)) (fmt :: Format). CreateInfo mn fmt -> M mn
createInfoNext :: TMaybe.M mn,
forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> CreateFlags
createInfoFlags :: CreateFlags,
forall (mn :: Maybe (*)) (fmt :: Format). CreateInfo mn fmt -> Type
createInfoImageType :: I.Type,
forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> Extent3d
createInfoExtent :: Extent3d,
forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> Word32
createInfoMipLevels :: Word32,
forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> Word32
createInfoArrayLayers :: Word32,
forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> CountFlagBits
createInfoSamples :: Sample.CountFlagBits,
forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> Tiling
createInfoTiling :: Tiling,
forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> UsageFlags
createInfoUsage :: UsageFlags,
forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> SharingMode
createInfoSharingMode :: SharingMode,
forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> [Index]
createInfoQueueFamilyIndices :: [QueueFamily.Index],
forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> Layout
createInfoInitialLayout :: Layout }
deriving instance Show (TMaybe.M mn) => Show (CreateInfo mn fmt)
createInfoToMiddle :: forall n fmt .
T.FormatToValue fmt => CreateInfo n fmt -> M.CreateInfo n
createInfoToMiddle :: forall (n :: Maybe (*)) (fmt :: Format).
FormatToValue fmt =>
CreateInfo n fmt -> CreateInfo n
createInfoToMiddle CreateInfo {
createInfoNext :: forall (mn :: Maybe (*)) (fmt :: Format). CreateInfo mn fmt -> M mn
createInfoNext = M n
mnxt,
createInfoFlags :: forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> CreateFlags
createInfoFlags = CreateFlags
flgs,
createInfoImageType :: forall (mn :: Maybe (*)) (fmt :: Format). CreateInfo mn fmt -> Type
createInfoImageType = Type
itp,
createInfoExtent :: forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> Extent3d
createInfoExtent = Extent3d
ext,
createInfoMipLevels :: forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> Word32
createInfoMipLevels = Word32
mls,
createInfoArrayLayers :: forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> Word32
createInfoArrayLayers = Word32
als,
createInfoSamples :: forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> CountFlagBits
createInfoSamples = CountFlagBits
smps,
createInfoTiling :: forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> Tiling
createInfoTiling = Tiling
tl,
createInfoUsage :: forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> UsageFlags
createInfoUsage = UsageFlags
usg,
createInfoSharingMode :: forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> SharingMode
createInfoSharingMode = SharingMode
sm,
createInfoQueueFamilyIndices :: forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> [Index]
createInfoQueueFamilyIndices = [Index]
qfis,
createInfoInitialLayout :: forall (mn :: Maybe (*)) (fmt :: Format).
CreateInfo mn fmt -> Layout
createInfoInitialLayout =Layout
ilyt } = M.CreateInfo {
createInfoNext :: M n
M.createInfoNext = M n
mnxt,
createInfoFlags :: CreateFlags
M.createInfoFlags = CreateFlags
flgs,
createInfoImageType :: Type
M.createInfoImageType = Type
itp,
createInfoFormat :: Format
M.createInfoFormat = forall (t :: Format). FormatToValue t => Format
T.formatToValue @fmt,
createInfoExtent :: Extent3d
M.createInfoExtent = Extent3d
ext,
createInfoMipLevels :: Word32
M.createInfoMipLevels = Word32
mls,
createInfoArrayLayers :: Word32
M.createInfoArrayLayers = Word32
als,
createInfoSamples :: CountFlagBits
M.createInfoSamples = CountFlagBits
smps,
createInfoTiling :: Tiling
M.createInfoTiling = Tiling
tl,
createInfoUsage :: UsageFlags
M.createInfoUsage = UsageFlags
usg,
createInfoSharingMode :: SharingMode
M.createInfoSharingMode = SharingMode
sm,
createInfoQueueFamilyIndices :: [Index]
M.createInfoQueueFamilyIndices = [Index]
qfis,
createInfoInitialLayout :: Layout
M.createInfoInitialLayout = Layout
ilyt }