gpu-vulkan-middle 0.1.0.66 → 0.1.0.67
raw patch · 11 files changed
+161/−10 lines, 11 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Gpu.Vulkan.Middle: submitInfoListToCore :: SubmitInfoListToCore ns => PL SubmitInfo ns -> ([SubmitInfo] -> IO a) -> IO ()
+ Gpu.Vulkan.CommandBuffer.Middle: SubmitInfo :: M mn -> C -> Word32 -> SubmitInfo (mn :: Maybe Type)
+ Gpu.Vulkan.CommandBuffer.Middle: [submitInfoCommandBuffer] :: SubmitInfo (mn :: Maybe Type) -> C
+ Gpu.Vulkan.CommandBuffer.Middle: [submitInfoDeviceMask] :: SubmitInfo (mn :: Maybe Type) -> Word32
+ Gpu.Vulkan.CommandBuffer.Middle: [submitInfoNext] :: SubmitInfo (mn :: Maybe Type) -> M mn
+ Gpu.Vulkan.CommandBuffer.Middle: data SubmitInfo (mn :: Maybe Type)
+ Gpu.Vulkan.Enum: SubmitFlagBits :: Word32 -> SubmitFlagBits
+ Gpu.Vulkan.Enum: instance GHC.Classes.Eq Gpu.Vulkan.Enum.SubmitFlagBits
+ Gpu.Vulkan.Enum: instance GHC.Internal.Bits.Bits Gpu.Vulkan.Enum.SubmitFlagBits
+ Gpu.Vulkan.Enum: instance GHC.Internal.Foreign.Storable.Storable Gpu.Vulkan.Enum.SubmitFlagBits
+ Gpu.Vulkan.Enum: instance GHC.Internal.Show.Show Gpu.Vulkan.Enum.SubmitFlagBits
+ Gpu.Vulkan.Enum: newtype SubmitFlagBits
+ Gpu.Vulkan.Enum: pattern SubmitFlagBitsMaxEnum :: SubmitFlagBits
+ Gpu.Vulkan.Enum: pattern SubmitProtectedBit :: SubmitFlagBits
+ Gpu.Vulkan.Enum: pattern SubmitProtectedBitKhr :: SubmitFlagBits
+ Gpu.Vulkan.Enum: type SubmitFlags = SubmitFlagBits
+ Gpu.Vulkan.Enum: unSubmitFlagBits :: SubmitFlagBits -> Word32
+ Gpu.Vulkan.Middle: SubmitInfo2 :: M mn -> SubmitFlags -> PL SubmitInfo wsas -> PL SubmitInfo cbas -> PL SubmitInfo ssas -> SubmitInfo2 (mn :: Maybe Type) (wsas :: [Maybe Type]) (cbas :: [Maybe Type]) (ssas :: [Maybe Type])
+ Gpu.Vulkan.Middle: [submitInfo2CommandBufferInfos] :: SubmitInfo2 (mn :: Maybe Type) (wsas :: [Maybe Type]) (cbas :: [Maybe Type]) (ssas :: [Maybe Type]) -> PL SubmitInfo cbas
+ Gpu.Vulkan.Middle: [submitInfo2Flags] :: SubmitInfo2 (mn :: Maybe Type) (wsas :: [Maybe Type]) (cbas :: [Maybe Type]) (ssas :: [Maybe Type]) -> SubmitFlags
+ Gpu.Vulkan.Middle: [submitInfo2Next] :: SubmitInfo2 (mn :: Maybe Type) (wsas :: [Maybe Type]) (cbas :: [Maybe Type]) (ssas :: [Maybe Type]) -> M mn
+ Gpu.Vulkan.Middle: [submitInfo2SignalSemaphoreInfos] :: SubmitInfo2 (mn :: Maybe Type) (wsas :: [Maybe Type]) (cbas :: [Maybe Type]) (ssas :: [Maybe Type]) -> PL SubmitInfo ssas
+ Gpu.Vulkan.Middle: [submitInfo2WaitSemaphoreInfos] :: SubmitInfo2 (mn :: Maybe Type) (wsas :: [Maybe Type]) (cbas :: [Maybe Type]) (ssas :: [Maybe Type]) -> PL SubmitInfo wsas
+ Gpu.Vulkan.Middle: class SubmitInfo2ListToCore (si2as :: [(Maybe Type, [Maybe Type], [Maybe Type], [Maybe Type])])
+ Gpu.Vulkan.Middle: data SubmitInfo2 (mn :: Maybe Type) (wsas :: [Maybe Type]) (cbas :: [Maybe Type]) (ssas :: [Maybe Type])
+ Gpu.Vulkan.Queue.Middle: submit2 :: forall (sias :: [(Maybe Type, [Maybe Type], [Maybe Type], [Maybe Type])]). SubmitInfo2ListToCore sias => Q -> PL (U4 SubmitInfo2) sias -> Maybe F -> IO ()
+ Gpu.Vulkan.Queue.Middle.Internal: submit2 :: forall (sias :: [(Maybe Type, [Maybe Type], [Maybe Type], [Maybe Type])]). SubmitInfo2ListToCore sias => Q -> PL (U4 SubmitInfo2) sias -> Maybe F -> IO ()
+ Gpu.Vulkan.Semaphore.Middle: SubmitInfo :: M mn -> S -> Word64 -> StageFlags2 -> Word32 -> SubmitInfo (mn :: Maybe Type)
+ Gpu.Vulkan.Semaphore.Middle: [submitInfoDeviceIndex] :: SubmitInfo (mn :: Maybe Type) -> Word32
+ Gpu.Vulkan.Semaphore.Middle: [submitInfoNext] :: SubmitInfo (mn :: Maybe Type) -> M mn
+ Gpu.Vulkan.Semaphore.Middle: [submitInfoSemaphore] :: SubmitInfo (mn :: Maybe Type) -> S
+ Gpu.Vulkan.Semaphore.Middle: [submitInfoStageMask] :: SubmitInfo (mn :: Maybe Type) -> StageFlags2
+ Gpu.Vulkan.Semaphore.Middle: [submitInfoValue] :: SubmitInfo (mn :: Maybe Type) -> Word64
+ Gpu.Vulkan.Semaphore.Middle: data SubmitInfo (mn :: Maybe Type)
+ Gpu.Vulkan.Semaphore.Middle.Internal: SubmitInfo :: M mn -> S -> Word64 -> StageFlags2 -> Word32 -> SubmitInfo (mn :: Maybe Type)
+ Gpu.Vulkan.Semaphore.Middle.Internal: [submitInfoDeviceIndex] :: SubmitInfo (mn :: Maybe Type) -> Word32
+ Gpu.Vulkan.Semaphore.Middle.Internal: [submitInfoNext] :: SubmitInfo (mn :: Maybe Type) -> M mn
+ Gpu.Vulkan.Semaphore.Middle.Internal: [submitInfoSemaphore] :: SubmitInfo (mn :: Maybe Type) -> S
+ Gpu.Vulkan.Semaphore.Middle.Internal: [submitInfoStageMask] :: SubmitInfo (mn :: Maybe Type) -> StageFlags2
+ Gpu.Vulkan.Semaphore.Middle.Internal: [submitInfoValue] :: SubmitInfo (mn :: Maybe Type) -> Word64
+ Gpu.Vulkan.Semaphore.Middle.Internal: data SubmitInfo (mn :: Maybe Type)
+ Gpu.Vulkan.Semaphore.Middle.Internal: submitInfoToCore :: forall (mn :: Maybe Type) r. WithPoked (M mn) => SubmitInfo mn -> (SubmitInfo -> IO r) -> IO ()
Files
- gpu-vulkan-middle.cabal +1/−1
- src/Gpu/Vulkan/CommandBuffer/Middle.hs +4/−0
- src/Gpu/Vulkan/CommandBuffer/Middle/Internal.hs +20/−1
- src/Gpu/Vulkan/CommandBuffer/Middle/Internal.hs-boot +14/−2
- src/Gpu/Vulkan/Enum.hsc +7/−0
- src/Gpu/Vulkan/Middle.hs +2/−1
- src/Gpu/Vulkan/Middle/Internal.hsc +69/−2
- src/Gpu/Vulkan/Queue/Middle.hs +1/−1
- src/Gpu/Vulkan/Queue/Middle/Internal.hs +13/−2
- src/Gpu/Vulkan/Semaphore/Middle.hs +4/−0
- src/Gpu/Vulkan/Semaphore/Middle/Internal.hsc +26/−0
gpu-vulkan-middle.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: gpu-vulkan-middle-version: 0.1.0.66+version: 0.1.0.67 synopsis: Medium wrapper for Vulkan API description: Please see the README on GitHub at <https://github.com/YoshikuniJujo/gpu-vulkan-middle#readme> category: GPU
src/Gpu/Vulkan/CommandBuffer/Middle.hs view
@@ -10,6 +10,10 @@ begin, end, reset, BeginInfo(..), InheritanceInfo(..), + -- * SUBMIT INFO++ SubmitInfo(..)+ ) where import Gpu.Vulkan.CommandBuffer.Middle.Internal
src/Gpu/Vulkan/CommandBuffer/Middle/Internal.hs view
@@ -10,10 +10,14 @@ {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} module Gpu.Vulkan.CommandBuffer.Middle.Internal (+ C(..), AllocateInfo(..), allocateCs, freeCs, - BeginInfo(..), InheritanceInfo(..), begin, end, reset+ BeginInfo(..), InheritanceInfo(..), begin, end, reset,++ SubmitInfo(..), submitInfoToCore+ ) where import Foreign.Ptr@@ -151,3 +155,18 @@ (length &&& ((\(C _ cb) -> cb) <$>) -> (cc, cs)) = allocaArray cc \pcs -> do pokeArray pcs cs C.freeCs dvc cp (fromIntegral cc) pcs++data SubmitInfo mn = SubmitInfo {+ submitInfoNext :: TMaybe.M mn,+ submitInfoCommandBuffer :: C,+ submitInfoDeviceMask :: Word32 }++submitInfoToCore :: WithPoked (TMaybe.M mn) =>+ SubmitInfo mn -> (C.SubmitInfo -> IO r) -> IO ()+submitInfoToCore SubmitInfo {+ submitInfoNext = mnxt,+ submitInfoCommandBuffer = C _ c, submitInfoDeviceMask = dm } f =+ withPoked' mnxt \pnxt -> withPtrS pnxt \(castPtr -> pnxt') ->+ f C.SubmitInfo {+ C.submitInfoSType = (), C.submitInfoPNext = pnxt',+ C.submitInfoCommandBuffer = c, C.submitInfoDeviceMask = dm }
src/Gpu/Vulkan/CommandBuffer/Middle/Internal.hs-boot view
@@ -1,11 +1,17 @@-{-# LANGUAGE DataKinds #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE DataKinds, PolyKinds #-} {-# LANGUAGE KindSignatures #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE RoleAnnotations #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-} module Gpu.Vulkan.CommandBuffer.Middle.Internal (- C(..)+ C(..), SubmitInfo, submitInfoToCore ) where +import Foreign.Storable.PeekPoke+import Data.Kind+import Data.TypeLevel.Maybe qualified as TMaybe import Data.IORef import qualified Gpu.Vulkan.CommandBuffer.Core as C@@ -14,3 +20,9 @@ data C = C { cPipeline :: IORef Pipeline.C.P, unC :: C.C }++type role SubmitInfo nominal+data SubmitInfo (s :: Maybe Type)++submitInfoToCore :: WithPoked (TMaybe.M mn) =>+ SubmitInfo mn -> (C.SubmitInfo -> IO r) -> IO ()
src/Gpu/Vulkan/Enum.hsc view
@@ -3290,6 +3290,12 @@ ("FormatR16g16S105Nv", #{const VK_FORMAT_R16G16_S10_5_NV}), ("FormatMaxEnum", #{const VK_FORMAT_MAX_ENUM}) ] +enum "SubmitFlagBits" ''#{type VkSubmitFlagBits}+ [''Show, ''Eq, ''Storable, ''Bits] [+ ("SubmitProtectedBit", #{const VK_SUBMIT_PROTECTED_BIT}),+ ("SubmitProtectedBitKhr", #{const VK_SUBMIT_PROTECTED_BIT_KHR}),+ ("SubmitFlagBitsMaxEnum", #{const VK_SUBMIT_FLAG_BITS_MAX_ENUM}) ]+ enum "AccessFlagBits" ''#{type VkAccessFlagBits} [''Show, ''Eq, ''Storable, ''Bits] [ ("AccessFlagsZero", 0),@@ -3555,3 +3561,4 @@ type CullModeFlags = CullModeFlagBits type ShaderStageFlags = ShaderStageFlagBits type FormatFeatureFlags = FormatFeatureFlagBits+type SubmitFlags = SubmitFlagBits
src/Gpu/Vulkan/Middle.hs view
@@ -13,7 +13,8 @@ -- ** SubmitInfo - SubmitInfo(..), SubmitInfoListToCore(..),+ SubmitInfo(..), SubmitInfoListToCore,+ SubmitInfo2(..), SubmitInfo2ListToCore, -- * PROPERTIES
src/Gpu/Vulkan/Middle/Internal.hsc view
@@ -5,7 +5,7 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures, TypeOperators #-} {-# LANGUAGE AllowAmbiguousTypes #-}-{-# LANGUAGE FlexibleContexts, UndecidableInstances #-}+{-# LANGUAGE FlexibleContexts, FlexibleInstances, UndecidableInstances #-} {-# LANGUAGE PatternSynonyms, ViewPatterns #-} {-# LANGUAGE StandaloneDeriving, GeneralizedNewtypeDeriving #-} {-# OPTIONS_GHC -Wall -fno-warn-tabs #-}@@ -25,7 +25,8 @@ C.ClearDepthStencilValue, pattern C.ClearDepthStencilValue, C.clearDepthStencilValueDepth, C.clearDepthStencilValueStencil, - SubmitInfo(..), SubmitInfoListToCore(..), submitInfoToCore,+ SubmitInfo(..), SubmitInfoListToCore(..),+ SubmitInfo2(..), SubmitInfo2ListToCore(..), FormatProperties(..), formatPropertiesFromCore, @@ -58,6 +59,7 @@ import Control.Monad import Data.Kind import Data.Default+import Data.TypeLevel.Tuple.Uncurry import Data.TypeLevel.Maybe qualified as TMaybe import Data.TypeLevel.List qualified as TL import Data.HeteroParList qualified as HPList@@ -339,6 +341,71 @@ C.submitInfoPCommandBuffers = pcbs, C.submitInfoSignalSemaphoreCount = fromIntegral ssc, C.submitInfoPSignalSemaphores = psss }++data SubmitInfo2 mn wsas cbas ssas = SubmitInfo2 {+ submitInfo2Next :: TMaybe.M mn,+ submitInfo2Flags :: SubmitFlags,+ submitInfo2WaitSemaphoreInfos :: HPList.PL Semaphore.SubmitInfo wsas,+ submitInfo2CommandBufferInfos ::+ HPList.PL CommandBuffer.SubmitInfo cbas,+ submitInfo2SignalSemaphoreInfos :: HPList.PL Semaphore.SubmitInfo ssas }++class SubmitInfo2ListToCore si2as where+ submitInfo2ListToCore ::+ HeteroParList.PL (U4 SubmitInfo2) si2as ->+ ([C.SubmitInfo2] -> IO a) -> IO ()++instance SubmitInfo2ListToCore '[] where+ submitInfo2ListToCore HPList.Nil f = void $ f []++instance (+ WithPoked (TMaybe.M mn),+ HPList.ToListWithCCpsM' WithPoked TMaybe.M wsas, TL.Length wsas,+ HPList.ToListWithCCpsM' WithPoked TMaybe.M cbas, TL.Length cbas,+ HPList.ToListWithCCpsM' WithPoked TMaybe.M ssas, TL.Length ssas,+ SubmitInfo2ListToCore si2as ) =>+ SubmitInfo2ListToCore ('(mn, wsas, cbas, ssas) ': si2as) where+ submitInfo2ListToCore (U4 si :** sis) f =+ submitInfo2ToCore si \csi ->+ submitInfo2ListToCore sis \csis -> f $ csi : csis++submitInfo2ToCore :: forall mn wsas cbas ssas r . (+ WithPoked (TMaybe.M mn),+ HPList.ToListWithCCpsM' WithPoked TMaybe.M wsas, TL.Length wsas,+ HPList.ToListWithCCpsM' WithPoked TMaybe.M cbas, TL.Length cbas,+ HPList.ToListWithCCpsM' WithPoked TMaybe.M ssas, TL.Length ssas+ ) =>+ SubmitInfo2 mn wsas cbas ssas -> (C.SubmitInfo2 -> IO r) -> IO ()+submitInfo2ToCore SubmitInfo2 {+ submitInfo2Next = mnxt,+ submitInfo2Flags = SubmitFlagBits fs,+ submitInfo2WaitSemaphoreInfos = wss,+ submitInfo2CommandBufferInfos = cbs,+ submitInfo2SignalSemaphoreInfos = sss } f =+ withPoked' mnxt \pnxt -> withPtrS pnxt \(castPtr -> pnxt') ->+ allocaArray wsc \pwss -> allocaArray cbc \pcbs ->+ allocaArray ssc \psss -> do+ HPList.withListWithCCpsM' @_ @WithPoked @TMaybe.M+ wss Semaphore.submitInfoToCore \cwss -> pokeArray pwss cwss+ HPList.withListWithCCpsM' @_ @WithPoked @TMaybe.M+ cbs CommandBuffer.submitInfoToCore \ccbs -> pokeArray pcbs ccbs+ HPList.withListWithCCpsM' @_ @WithPoked @TMaybe.M+ sss Semaphore.submitInfoToCore \csss -> pokeArray psss csss+ f C.SubmitInfo2 {+ C.submitInfo2SType = (),+ C.submitInfo2PNext = pnxt',+ C.submitInfo2Flags = fs,+ C.submitInfo2WaitSemaphoreInfoCount = wsc,+ C.submitInfo2PWaitSemaphoreInfos = pwss,+ C.submitInfo2CommandBufferInfoCount = cbc,+ C.submitInfo2PCommandBufferInfos = pcbs,+ C.submitInfo2SignalSemaphoreInfoCount = ssc,+ C.submitInfo2PSignalSemaphoreInfos = psss }+ where+ wsc, cbc, ssc :: Integral n => n+ wsc = TL.length @_ @wsas+ cbc = TL.length @_ @cbas+ ssc = TL.length @_ @ssas data FormatProperties = FormatProperties { formatPropertiesLinearTilingFeatures :: FormatFeatureFlags,
src/Gpu/Vulkan/Queue/Middle.hs view
@@ -4,7 +4,7 @@ -- * SUBMIT AND WAIT IDLE - submit, waitIdle, Q,+ submit, submit2, waitIdle, Q, -- * SPARSE RESOURCES
src/Gpu/Vulkan/Queue/Middle/Internal.hs view
@@ -13,7 +13,7 @@ -- * SUBMIT AND WAIT IDLE - submit, waitIdle, Q(..),+ submit, submit2, waitIdle, Q(..), -- * SPARSE RESOURCES @@ -26,10 +26,11 @@ import Foreign.Storable.PeekPoke import Control.Arrow import Control.Monad.Cont.MiscYj+import Data.TypeLevel.Tuple.Uncurry import Data.HeteroParList qualified as HeteroParList import Gpu.Vulkan.Base.Middle-import Gpu.Vulkan.Middle+import Gpu.Vulkan.Middle.Internal import Gpu.Vulkan.Exception.Middle.Internal import Gpu.Vulkan.Exception.Enum import Gpu.Vulkan.Fence.Middle.Internal qualified as Fence.M@@ -56,6 +57,16 @@ r <- C.submit q (fromIntegral sic) psis $ Fence.M.maybeFToCore mf throwUnlessSuccess $ Result r++submit2 :: SubmitInfo2ListToCore sias =>+ Q -> HeteroParList.PL (U4 SubmitInfo2) sias -> Maybe Fence.M.F -> IO ()+submit2 (Q q) sis mf =+ submitInfo2ListToCore sis \csis -> let sic = length csis in+ allocaArray sic \psis -> do+ pokeArray psis csis+ r <- C.submit2 q (fromIntegral sic) psis+ $ Fence.M.maybeFToCore mf+ throwUnlessSuccess $ Result r waitIdle :: Q -> IO () waitIdle (Q q) = throwUnlessSuccess . Result =<< C.waitIdle q
src/Gpu/Vulkan/Semaphore/Middle.hs view
@@ -6,6 +6,10 @@ create, destroy, S, CreateInfo(..), CreateFlags, + -- * SUBMIT INFO++ SubmitInfo(..)+ ) where import Gpu.Vulkan.Semaphore.Middle.Internal
src/Gpu/Vulkan/Semaphore/Middle/Internal.hsc view
@@ -14,6 +14,10 @@ create, destroy, S(..), CreateInfo(..), CreateFlags, + -- * SUBMIT INFO++ SubmitInfo(..), submitInfoToCore+ ) where import Foreign.Ptr@@ -34,6 +38,7 @@ import qualified Gpu.Vulkan.Semaphore.Core as C import qualified Gpu.Vulkan.Device.Middle.Types as Device+import qualified Gpu.Vulkan.Pipeline.Enum as Pipeline #include <vulkan/vulkan.h> @@ -72,3 +77,24 @@ destroy :: Device.D -> S -> TPMaybe.M AllocationCallbacks.A md -> IO () destroy (Device.D dvc) (S s) mac = AllocationCallbacks.mToCore mac $ C.destroy dvc s++data SubmitInfo mn = SubmitInfo {+ submitInfoNext :: TMaybe.M mn,+ submitInfoSemaphore :: S,+ submitInfoValue :: Word64,+ submitInfoStageMask :: Pipeline.StageFlags2,+ submitInfoDeviceIndex :: Word32 }++submitInfoToCore :: WithPoked (TMaybe.M mn) =>+ SubmitInfo mn -> (C.SubmitInfo -> IO r) -> IO ()+submitInfoToCore SubmitInfo {+ submitInfoNext = mnxt,+ submitInfoSemaphore = S s, submitInfoValue = v,+ submitInfoStageMask = Pipeline.StageFlagBits2 sm,+ submitInfoDeviceIndex = di+ } f =+ withPoked' mnxt \pnxt -> withPtrS pnxt \(castPtr -> pnxt') ->+ f C.SubmitInfo {+ C.submitInfoSType = (), C.submitInfoPNext = pnxt',+ C.submitInfoSemaphore = s, C.submitInfoValue = v,+ C.submitInfoStageMask = sm, C.submitInfoDeviceIndex = di }