{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE BlockArguments #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE FlexibleContexts, UndecidableInstances #-} {-# LANGUAGE ViewPatterns #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} module Gpu.Vulkan.DescriptorSetLayout.BindingFlags.Middle.Internal ( CreateInfo(..) ) where import Foreign.Ptr import Foreign.Marshal.Alloc import Foreign.Marshal.Array import Foreign.Storable import Foreign.Storable.PeekPoke import Data.TypeLevel.Maybe qualified as TMaybe import Gpu.Vulkan.Descriptor.Enum qualified as Descriptor import Gpu.Vulkan.DescriptorSetLayout.BindingFlags.Core qualified as C data CreateInfo mn = CreateInfo { forall (mn :: Maybe (*)). CreateInfo mn -> M mn createInfoNext :: TMaybe.M mn, forall (mn :: Maybe (*)). CreateInfo mn -> [BindingFlags] createInfoBindingFlagsList :: [Descriptor.BindingFlags] } createInfoToCore :: WithPoked (TMaybe.M mn) => CreateInfo mn -> (C.CreateInfo -> IO a) -> IO () createInfoToCore :: forall (mn :: Maybe (*)) a. WithPoked (M mn) => CreateInfo mn -> (CreateInfo -> IO a) -> IO () createInfoToCore CreateInfo { createInfoNext :: forall (mn :: Maybe (*)). CreateInfo mn -> M mn createInfoNext = M mn mnxt, createInfoBindingFlagsList :: forall (mn :: Maybe (*)). CreateInfo mn -> [BindingFlags] createInfoBindingFlagsList = [BindingFlags] bfsl } CreateInfo -> IO a f = M mn -> (forall s. PtrS s (M mn) -> IO ()) -> IO () forall a b. WithPoked a => a -> (forall s. PtrS s a -> IO b) -> IO b forall b. M mn -> (forall s. PtrS s (M mn) -> IO b) -> IO b withPoked' M mn mnxt \PtrS s (M mn) pnxt -> PtrS s (M mn) -> (Ptr (M mn) -> IO a) -> IO () forall s a b. PtrS s a -> (Ptr a -> IO b) -> IO () withPtrS PtrS s (M mn) pnxt \(Ptr (M mn) -> Ptr () forall a b. Ptr a -> Ptr b castPtr -> Ptr () pnxt') -> let bfsc :: Int bfsc = [BindingFlags] -> Int forall a. [a] -> Int forall (t :: * -> *) a. Foldable t => t a -> Int length [BindingFlags] bfsl in Int -> (Ptr Word32 -> IO a) -> IO a forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b allocaArray Int bfsc \Ptr Word32 pbfs -> Ptr Word32 -> [Word32] -> IO () forall a. Storable a => Ptr a -> [a] -> IO () pokeArray Ptr Word32 pbfs (BindingFlags -> Word32 Descriptor.unBindingFlagBits (BindingFlags -> Word32) -> [BindingFlags] -> [Word32] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> [BindingFlags] bfsl) IO () -> IO a -> IO a forall a b. IO a -> IO b -> IO b forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> CreateInfo -> IO a f C.CreateInfo { createInfoSType :: () C.createInfoSType = (), createInfoPNext :: Ptr () C.createInfoPNext = Ptr () pnxt', createInfoBindingCount :: Word32 C.createInfoBindingCount = Int -> Word32 forall a b. (Integral a, Num b) => a -> b fromIntegral Int bfsc, createInfoPBindingFlags :: Ptr Word32 C.createInfoPBindingFlags = Ptr Word32 pbfs } instance Sizable (CreateInfo mn) where sizeOf' :: Int sizeOf' = forall a. Storable a => a -> Int sizeOf @C.CreateInfo CreateInfo forall a. HasCallStack => a undefined alignment' :: Int alignment' = forall a. Storable a => a -> Int alignment @C.CreateInfo CreateInfo forall a. HasCallStack => a undefined instance WithPoked (TMaybe.M mn) => WithPoked (CreateInfo mn) where withPoked' :: forall b. CreateInfo mn -> (forall s. PtrS s (CreateInfo mn) -> IO b) -> IO b withPoked' CreateInfo mn ci forall s. PtrS s (CreateInfo mn) -> IO b f = (Ptr CreateInfo -> IO b) -> IO b forall a b. Storable a => (Ptr a -> IO b) -> IO b alloca \Ptr CreateInfo pcci -> do CreateInfo mn -> (CreateInfo -> IO ()) -> IO () forall (mn :: Maybe (*)) a. WithPoked (M mn) => CreateInfo mn -> (CreateInfo -> IO a) -> IO () createInfoToCore CreateInfo mn ci \CreateInfo cci -> Ptr CreateInfo -> CreateInfo -> IO () forall a. Storable a => Ptr a -> a -> IO () poke Ptr CreateInfo pcci CreateInfo cci PtrS Any (CreateInfo mn) -> IO b forall s. PtrS s (CreateInfo mn) -> IO b f (PtrS Any (CreateInfo mn) -> IO b) -> (Ptr (CreateInfo mn) -> PtrS Any (CreateInfo mn)) -> Ptr (CreateInfo mn) -> IO b forall b c a. (b -> c) -> (a -> b) -> a -> c . Ptr (CreateInfo mn) -> PtrS Any (CreateInfo mn) forall a s. Ptr a -> PtrS s a ptrS (Ptr (CreateInfo mn) -> IO b) -> Ptr (CreateInfo mn) -> IO b forall a b. (a -> b) -> a -> b $ Ptr CreateInfo -> Ptr (CreateInfo mn) forall a b. Ptr a -> Ptr b castPtr Ptr CreateInfo pcci