{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE Strict #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Graphics.Vulkan.CommandBuffer where
import Graphics.Vulkan.Device( VkDevice(..)
)
import Graphics.Vulkan.Pass( VkFramebuffer(..)
, VkRenderPass(..)
)
import Text.Read.Lex( Lexeme(Ident)
)
import GHC.Read( expectP
, choose
)
import Data.Word( Word64
, Word32
)
import Foreign.Ptr( Ptr
, plusPtr
)
import Data.Int( Int32
)
import Data.Bits( Bits
, FiniteBits
)
import Foreign.Storable( Storable(..)
)
import Graphics.Vulkan.CommandPool( VkCommandPool(..)
)
import Data.Void( Void
)
import Text.Read( Read(..)
, parens
)
import Text.ParserCombinators.ReadPrec( prec
, (+++)
, step
)
import Graphics.Vulkan.Query( VkQueryPipelineStatisticFlags(..)
, VkQueryControlFlagBits(..)
, VkQueryControlFlags(..)
, VkQueryPipelineStatisticFlagBits(..)
)
import Graphics.Vulkan.Core( VkResult(..)
, VkBool32(..)
, VkFlags(..)
, VkStructureType(..)
)
newtype VkCommandBufferLevel = VkCommandBufferLevel Int32
deriving (Eq, Storable)
instance Show VkCommandBufferLevel where
showsPrec _ VK_COMMAND_BUFFER_LEVEL_PRIMARY = showString "VK_COMMAND_BUFFER_LEVEL_PRIMARY"
showsPrec _ VK_COMMAND_BUFFER_LEVEL_SECONDARY = showString "VK_COMMAND_BUFFER_LEVEL_SECONDARY"
showsPrec p (VkCommandBufferLevel x) = showParen (p >= 11) (showString "VkCommandBufferLevel " . showsPrec 11 x)
instance Read VkCommandBufferLevel where
readPrec = parens ( choose [ ("VK_COMMAND_BUFFER_LEVEL_PRIMARY", pure VK_COMMAND_BUFFER_LEVEL_PRIMARY)
, ("VK_COMMAND_BUFFER_LEVEL_SECONDARY", pure VK_COMMAND_BUFFER_LEVEL_SECONDARY)
] +++
prec 10 (do
expectP (Ident "VkCommandBufferLevel")
v <- step readPrec
pure (VkCommandBufferLevel v)
)
)
pattern VK_COMMAND_BUFFER_LEVEL_PRIMARY = VkCommandBufferLevel 0
pattern VK_COMMAND_BUFFER_LEVEL_SECONDARY = VkCommandBufferLevel 1
foreign import ccall "vkAllocateCommandBuffers" vkAllocateCommandBuffers ::
VkDevice ->
Ptr VkCommandBufferAllocateInfo ->
Ptr VkCommandBuffer -> IO VkResult
foreign import ccall "vkResetCommandBuffer" vkResetCommandBuffer ::
VkCommandBuffer -> VkCommandBufferResetFlags -> IO VkResult
foreign import ccall "vkFreeCommandBuffers" vkFreeCommandBuffers ::
VkDevice -> VkCommandPool -> Word32 -> Ptr VkCommandBuffer -> IO ()
newtype VkCommandBufferUsageFlagBits = VkCommandBufferUsageFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkCommandBufferUsageFlags = VkCommandBufferUsageFlagBits
instance Show VkCommandBufferUsageFlagBits where
showsPrec _ VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = showString "VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"
showsPrec _ VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = showString "VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"
showsPrec _ VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = showString "VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"
showsPrec p (VkCommandBufferUsageFlagBits x) = showParen (p >= 11) (showString "VkCommandBufferUsageFlagBits " . showsPrec 11 x)
instance Read VkCommandBufferUsageFlagBits where
readPrec = parens ( choose [ ("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT", pure VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
, ("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT", pure VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
, ("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT", pure VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
] +++
prec 10 (do
expectP (Ident "VkCommandBufferUsageFlagBits")
v <- step readPrec
pure (VkCommandBufferUsageFlagBits v)
)
)
pattern VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = VkCommandBufferUsageFlagBits 0x1
pattern VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = VkCommandBufferUsageFlagBits 0x2
pattern VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = VkCommandBufferUsageFlagBits 0x4
data VkCommandBufferBeginInfo =
VkCommandBufferBeginInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkFlags :: VkCommandBufferUsageFlags
, vkPInheritanceInfo :: Ptr VkCommandBufferInheritanceInfo
}
deriving (Eq)
instance Storable VkCommandBufferBeginInfo where
sizeOf ~_ = 32
alignment ~_ = 8
peek ptr = VkCommandBufferBeginInfo <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 24)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandBufferBeginInfo))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandBufferBeginInfo))
*> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkCommandBufferBeginInfo))
*> poke (ptr `plusPtr` 24) (vkPInheritanceInfo (poked :: VkCommandBufferBeginInfo))
data VkCommandBufferInheritanceInfo =
VkCommandBufferInheritanceInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkRenderPass :: VkRenderPass
, vkSubpass :: Word32
, vkFramebuffer :: VkFramebuffer
, vkOcclusionQueryEnable :: VkBool32
, vkQueryFlags :: VkQueryControlFlags
, vkPipelineStatistics :: VkQueryPipelineStatisticFlags
}
deriving (Eq)
instance Storable VkCommandBufferInheritanceInfo where
sizeOf ~_ = 56
alignment ~_ = 8
peek ptr = VkCommandBufferInheritanceInfo <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 24)
<*> peek (ptr `plusPtr` 32)
<*> peek (ptr `plusPtr` 40)
<*> peek (ptr `plusPtr` 44)
<*> peek (ptr `plusPtr` 48)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandBufferInheritanceInfo))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandBufferInheritanceInfo))
*> poke (ptr `plusPtr` 16) (vkRenderPass (poked :: VkCommandBufferInheritanceInfo))
*> poke (ptr `plusPtr` 24) (vkSubpass (poked :: VkCommandBufferInheritanceInfo))
*> poke (ptr `plusPtr` 32) (vkFramebuffer (poked :: VkCommandBufferInheritanceInfo))
*> poke (ptr `plusPtr` 40) (vkOcclusionQueryEnable (poked :: VkCommandBufferInheritanceInfo))
*> poke (ptr `plusPtr` 44) (vkQueryFlags (poked :: VkCommandBufferInheritanceInfo))
*> poke (ptr `plusPtr` 48) (vkPipelineStatistics (poked :: VkCommandBufferInheritanceInfo))
data VkCommandBuffer_T
type VkCommandBuffer = Ptr VkCommandBuffer_T
newtype VkCommandBufferResetFlagBits = VkCommandBufferResetFlagBits VkFlags
deriving (Eq, Storable, Bits, FiniteBits)
type VkCommandBufferResetFlags = VkCommandBufferResetFlagBits
instance Show VkCommandBufferResetFlagBits where
showsPrec _ VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = showString "VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"
showsPrec p (VkCommandBufferResetFlagBits x) = showParen (p >= 11) (showString "VkCommandBufferResetFlagBits " . showsPrec 11 x)
instance Read VkCommandBufferResetFlagBits where
readPrec = parens ( choose [ ("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT", pure VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
] +++
prec 10 (do
expectP (Ident "VkCommandBufferResetFlagBits")
v <- step readPrec
pure (VkCommandBufferResetFlagBits v)
)
)
pattern VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = VkCommandBufferResetFlagBits 0x1
foreign import ccall "vkEndCommandBuffer" vkEndCommandBuffer ::
VkCommandBuffer -> IO VkResult
foreign import ccall "vkBeginCommandBuffer" vkBeginCommandBuffer ::
VkCommandBuffer -> Ptr VkCommandBufferBeginInfo -> IO VkResult
data VkCommandBufferAllocateInfo =
VkCommandBufferAllocateInfo{ vkSType :: VkStructureType
, vkPNext :: Ptr Void
, vkCommandPool :: VkCommandPool
, vkLevel :: VkCommandBufferLevel
, vkCommandBufferCount :: Word32
}
deriving (Eq)
instance Storable VkCommandBufferAllocateInfo where
sizeOf ~_ = 32
alignment ~_ = 8
peek ptr = VkCommandBufferAllocateInfo <$> peek (ptr `plusPtr` 0)
<*> peek (ptr `plusPtr` 8)
<*> peek (ptr `plusPtr` 16)
<*> peek (ptr `plusPtr` 24)
<*> peek (ptr `plusPtr` 28)
poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandBufferAllocateInfo))
*> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandBufferAllocateInfo))
*> poke (ptr `plusPtr` 16) (vkCommandPool (poked :: VkCommandBufferAllocateInfo))
*> poke (ptr `plusPtr` 24) (vkLevel (poked :: VkCommandBufferAllocateInfo))
*> poke (ptr `plusPtr` 28) (vkCommandBufferCount (poked :: VkCommandBufferAllocateInfo))