packages feed

vulkan 0.2.0.0 → 1.0.0.0

raw patch · 38 files changed

+7151/−6653 lines, 38 files

Files

+ changelog.md view
@@ -0,0 +1,10 @@+# Change Log++## [1.0.0.0] - 2016-02-25+Split the interface up into many modules.++## [0.2.0.0] - 2016-02-22+Make wildcard matches lazy for `sizeof` and `alignment`++## [0.1.0.0] - 2016-02-21+Initial release targeting Vulkan 1.0.3 Core
readme.md view
@@ -8,14 +8,14 @@ `DuplicateRecordFields` and `Strict` language extensions.  I highly recommend compiling with `-O0` at the moment as compiling with-optimizations leads to huge compile times. It's likely that the library will be-split into a few smaller modules in the future to alleviate this.+optimizations leads to huge compile times.  + ## Current Status  All the core Vulkan functionality is here.  This is currently a 64 bit only library, 32 bit support is on the roadmap. -Examples are on the way!+Examples can be found [here](https://github.com/expipiplus1/vulkan-examples) 
src/Graphics/Vulkan.hs view
@@ -1,6647 +1,67 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE ForeignFunctionInterface #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE PatternSynonyms #-}-{-# LANGUAGE Strict #-}--module Graphics.Vulkan where--import Data.Bits (Bits, FiniteBits)-import Data.Int (Int32)-import Data.Vector.Fixed.Storable (Vec)-import Data.Vector.Fixed.Cont (ToPeano)-import Data.Void (Void)-import Data.Word (Word8, Word32, Word64)-import Foreign.C.Types (CChar, CFloat(..), CSize(..))-import Foreign.Ptr (Ptr, FunPtr, plusPtr, castPtr)-import Foreign.Storable (Storable(..))----- * Constants---pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256-type VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256--pattern VK_UUID_SIZE = 16-type VK_UUID_SIZE = 16--pattern VK_MAX_EXTENSION_NAME_SIZE = 256-type VK_MAX_EXTENSION_NAME_SIZE = 256--pattern VK_MAX_DESCRIPTION_SIZE = 256-type VK_MAX_DESCRIPTION_SIZE = 256--pattern VK_MAX_MEMORY_TYPES = 32-type VK_MAX_MEMORY_TYPES = 32--pattern VK_MAX_MEMORY_HEAPS = 16-type VK_MAX_MEMORY_HEAPS = 16--pattern VK_LOD_CLAMP_NONE = 1000.0--pattern VK_REMAINING_MIP_LEVELS = 0xffffffff :: Word32--pattern VK_REMAINING_ARRAY_LAYERS = 0xffffffff :: Word32--pattern VK_WHOLE_SIZE = 0xffffffffffffffff :: Word64--pattern VK_ATTACHMENT_UNUSED = 0xffffffff :: Word32--pattern VK_TRUE = 1-type VK_TRUE = 1--pattern VK_FALSE = 0-type VK_FALSE = 0--pattern VK_QUEUE_FAMILY_IGNORED = 0xffffffff :: Word32--pattern VK_SUBPASS_EXTERNAL = 0xffffffff :: Word32--- * Base Types--newtype VkSampleMask = VkSampleMask Word32-  deriving (Eq, Storable)--newtype VkBool32 = VkBool32 Word32-  deriving (Eq, Storable)--type VkFlags = Word32--newtype VkDeviceSize = VkDeviceSize Word64-  deriving (Eq, Storable)---- * Handle Types--data VkInstance_T-type VkInstance = Ptr VkInstance_T--data VkPhysicalDevice_T-type VkPhysicalDevice = Ptr VkPhysicalDevice_T--data VkDevice_T-type VkDevice = Ptr VkDevice_T--data VkQueue_T-type VkQueue = Ptr VkQueue_T--data VkCommandBuffer_T-type VkCommandBuffer = Ptr VkCommandBuffer_T--newtype VkDeviceMemory = VkDeviceMemory Word64-  deriving (Eq, Storable)--newtype VkCommandPool = VkCommandPool Word64-  deriving (Eq, Storable)--newtype VkBuffer = VkBuffer Word64-  deriving (Eq, Storable)--newtype VkBufferView = VkBufferView Word64-  deriving (Eq, Storable)--newtype VkImage = VkImage Word64-  deriving (Eq, Storable)--newtype VkImageView = VkImageView Word64-  deriving (Eq, Storable)--newtype VkShaderModule = VkShaderModule Word64-  deriving (Eq, Storable)--newtype VkPipeline = VkPipeline Word64-  deriving (Eq, Storable)--newtype VkPipelineLayout = VkPipelineLayout Word64-  deriving (Eq, Storable)--newtype VkSampler = VkSampler Word64-  deriving (Eq, Storable)--newtype VkDescriptorSet = VkDescriptorSet Word64-  deriving (Eq, Storable)--newtype VkDescriptorSetLayout = VkDescriptorSetLayout Word64-  deriving (Eq, Storable)--newtype VkDescriptorPool = VkDescriptorPool Word64-  deriving (Eq, Storable)--newtype VkFence = VkFence Word64-  deriving (Eq, Storable)--newtype VkSemaphore = VkSemaphore Word64-  deriving (Eq, Storable)--newtype VkEvent = VkEvent Word64-  deriving (Eq, Storable)--newtype VkQueryPool = VkQueryPool Word64-  deriving (Eq, Storable)--newtype VkFramebuffer = VkFramebuffer Word64-  deriving (Eq, Storable)--newtype VkRenderPass = VkRenderPass Word64-  deriving (Eq, Storable)--newtype VkPipelineCache = VkPipelineCache Word64-  deriving (Eq, Storable)--newtype VkDisplayKHR = VkDisplayKHR Word64-  deriving (Eq, Storable)--newtype VkDisplayModeKHR = VkDisplayModeKHR Word64-  deriving (Eq, Storable)--newtype VkSurfaceKHR = VkSurfaceKHR Word64-  deriving (Eq, Storable)--newtype VkSwapchainKHR = VkSwapchainKHR Word64-  deriving (Eq, Storable)--newtype VkDebugReportCallbackEXT = VkDebugReportCallbackEXT Word64-  deriving (Eq, Storable)---- * FuncPointer Types--type PFN_vkInternalAllocationNotification = FunPtr-  (Ptr Void ->-     CSize ->-       VkInternalAllocationType -> VkSystemAllocationScope -> IO ())--type PFN_vkInternalFreeNotification = FunPtr-  (Ptr Void ->-     CSize ->-       VkInternalAllocationType -> VkSystemAllocationScope -> IO ())--type PFN_vkReallocationFunction = FunPtr-  (Ptr Void ->-     Ptr Void ->-       CSize -> CSize -> VkSystemAllocationScope -> IO (Ptr Void))--type PFN_vkAllocationFunction = FunPtr-  (Ptr Void ->-     CSize -> CSize -> VkSystemAllocationScope -> IO (Ptr Void))--type PFN_vkFreeFunction = FunPtr (Ptr Void -> Ptr Void -> IO ())--type PFN_vkVoidFunction = FunPtr (IO ())--type PFN_vkDebugReportCallbackEXT = FunPtr-  (VkDebugReportFlagsEXT ->-     VkDebugReportObjectTypeEXT ->-       Word64 ->-         CSize ->-           Int32 -> Ptr CChar -> Ptr CChar -> Ptr Void -> IO VkBool32)---- * Flags---- ** VkFramebufferCreateFlags--- | Opaque flag-newtype VkFramebufferCreateFlags = VkFramebufferCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkQueryPoolCreateFlags--- | Opaque flag-newtype VkQueryPoolCreateFlags = VkQueryPoolCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkRenderPassCreateFlags--- | Opaque flag-newtype VkRenderPassCreateFlags = VkRenderPassCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkSamplerCreateFlags--- | Opaque flag-newtype VkSamplerCreateFlags = VkSamplerCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineLayoutCreateFlags--- | Opaque flag-newtype VkPipelineLayoutCreateFlags = VkPipelineLayoutCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineCacheCreateFlags--- | Opaque flag-newtype VkPipelineCacheCreateFlags = VkPipelineCacheCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineDepthStencilStateCreateFlags--- | Opaque flag-newtype VkPipelineDepthStencilStateCreateFlags = VkPipelineDepthStencilStateCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineDynamicStateCreateFlags--- | Opaque flag-newtype VkPipelineDynamicStateCreateFlags = VkPipelineDynamicStateCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineColorBlendStateCreateFlags--- | Opaque flag-newtype VkPipelineColorBlendStateCreateFlags = VkPipelineColorBlendStateCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineMultisampleStateCreateFlags--- | Opaque flag-newtype VkPipelineMultisampleStateCreateFlags = VkPipelineMultisampleStateCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineRasterizationStateCreateFlags--- | Opaque flag-newtype VkPipelineRasterizationStateCreateFlags = VkPipelineRasterizationStateCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineViewportStateCreateFlags--- | Opaque flag-newtype VkPipelineViewportStateCreateFlags = VkPipelineViewportStateCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineTessellationStateCreateFlags--- | Opaque flag-newtype VkPipelineTessellationStateCreateFlags = VkPipelineTessellationStateCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineInputAssemblyStateCreateFlags--- | Opaque flag-newtype VkPipelineInputAssemblyStateCreateFlags = VkPipelineInputAssemblyStateCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineVertexInputStateCreateFlags--- | Opaque flag-newtype VkPipelineVertexInputStateCreateFlags = VkPipelineVertexInputStateCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineShaderStageCreateFlags--- | Opaque flag-newtype VkPipelineShaderStageCreateFlags = VkPipelineShaderStageCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkDescriptorSetLayoutCreateFlags--- | Opaque flag-newtype VkDescriptorSetLayoutCreateFlags = VkDescriptorSetLayoutCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkBufferViewCreateFlags--- | Opaque flag-newtype VkBufferViewCreateFlags = VkBufferViewCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkInstanceCreateFlags--- | Opaque flag-newtype VkInstanceCreateFlags = VkInstanceCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkDeviceCreateFlags--- | Opaque flag-newtype VkDeviceCreateFlags = VkDeviceCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkDeviceQueueCreateFlags--- | Opaque flag-newtype VkDeviceQueueCreateFlags = VkDeviceQueueCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkQueueFlags--newtype VkQueueFlagBits = VkQueueFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkQueueFlagBits-type VkQueueFlags = VkQueueFlagBits--- | Queue supports graphics operations-pattern VK_QUEUE_GRAPHICS_BIT = VkQueueFlagBits 0x1--- | Queue supports compute operations-pattern VK_QUEUE_COMPUTE_BIT = VkQueueFlagBits 0x2--- | Queue supports transfer operations-pattern VK_QUEUE_TRANSFER_BIT = VkQueueFlagBits 0x4--- | Queue supports sparse resource memory management operations-pattern VK_QUEUE_SPARSE_BINDING_BIT = VkQueueFlagBits 0x8----- ** VkMemoryPropertyFlags--newtype VkMemoryPropertyFlagBits = VkMemoryPropertyFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkMemoryPropertyFlagBits-type VkMemoryPropertyFlags = VkMemoryPropertyFlagBits--- | If otherwise stated, then allocate memory on device-pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = VkMemoryPropertyFlagBits 0x1--- | Memory is mappable by host-pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = VkMemoryPropertyFlagBits 0x2--- | Memory will have i/o coherency. If not set, application may need to use vkFlushMappedMemoryRanges and vkInvalidateMappedMemoryRanges to flush/invalidate host cache-pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = VkMemoryPropertyFlagBits 0x4--- | Memory will be cached by the host-pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT = VkMemoryPropertyFlagBits 0x8--- | Memory may be allocated by the driver when it is required-pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = VkMemoryPropertyFlagBits 0x10----- ** VkMemoryHeapFlags--newtype VkMemoryHeapFlagBits = VkMemoryHeapFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkMemoryHeapFlagBits-type VkMemoryHeapFlags = VkMemoryHeapFlagBits--- | If set, heap represents device memory-pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = VkMemoryHeapFlagBits 0x1----- ** VkAccessFlags--newtype VkAccessFlagBits = VkAccessFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkAccessFlagBits-type VkAccessFlags = VkAccessFlagBits--- | Controls coherency of indirect command reads-pattern VK_ACCESS_INDIRECT_COMMAND_READ_BIT = VkAccessFlagBits 0x1--- | Controls coherency of index reads-pattern VK_ACCESS_INDEX_READ_BIT = VkAccessFlagBits 0x2--- | Controls coherency of vertex attribute reads-pattern VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = VkAccessFlagBits 0x4--- | Controls coherency of uniform buffer reads-pattern VK_ACCESS_UNIFORM_READ_BIT = VkAccessFlagBits 0x8--- | Controls coherency of input attachment reads-pattern VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x10--- | Controls coherency of shader reads-pattern VK_ACCESS_SHADER_READ_BIT = VkAccessFlagBits 0x20--- | Controls coherency of shader writes-pattern VK_ACCESS_SHADER_WRITE_BIT = VkAccessFlagBits 0x40--- | Controls coherency of color attachment reads-pattern VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x80--- | Controls coherency of color attachment writes-pattern VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = VkAccessFlagBits 0x100--- | Controls coherency of depth/stencil attachment reads-pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x200--- | Controls coherency of depth/stencil attachment writes-pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = VkAccessFlagBits 0x400--- | Controls coherency of transfer reads-pattern VK_ACCESS_TRANSFER_READ_BIT = VkAccessFlagBits 0x800--- | Controls coherency of transfer writes-pattern VK_ACCESS_TRANSFER_WRITE_BIT = VkAccessFlagBits 0x1000--- | Controls coherency of host reads-pattern VK_ACCESS_HOST_READ_BIT = VkAccessFlagBits 0x2000--- | Controls coherency of host writes-pattern VK_ACCESS_HOST_WRITE_BIT = VkAccessFlagBits 0x4000--- | Controls coherency of memory reads-pattern VK_ACCESS_MEMORY_READ_BIT = VkAccessFlagBits 0x8000--- | Controls coherency of memory writes-pattern VK_ACCESS_MEMORY_WRITE_BIT = VkAccessFlagBits 0x10000----- ** VkBufferUsageFlags--newtype VkBufferUsageFlagBits = VkBufferUsageFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkBufferUsageFlagBits-type VkBufferUsageFlags = VkBufferUsageFlagBits--- | Can be used as a source of transfer operations-pattern VK_BUFFER_USAGE_TRANSFER_SRC_BIT = VkBufferUsageFlagBits 0x1--- | Can be used as a destination of transfer operations-pattern VK_BUFFER_USAGE_TRANSFER_DST_BIT = VkBufferUsageFlagBits 0x2--- | Can be used as TBO-pattern VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = VkBufferUsageFlagBits 0x4--- | Can be used as IBO-pattern VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = VkBufferUsageFlagBits 0x8--- | Can be used as UBO-pattern VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = VkBufferUsageFlagBits 0x10--- | Can be used as SSBO-pattern VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = VkBufferUsageFlagBits 0x20--- | Can be used as source of fixed-function index fetch (index buffer)-pattern VK_BUFFER_USAGE_INDEX_BUFFER_BIT = VkBufferUsageFlagBits 0x40--- | Can be used as source of fixed-function vertex fetch (VBO)-pattern VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = VkBufferUsageFlagBits 0x80--- | Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)-pattern VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = VkBufferUsageFlagBits 0x100----- ** VkBufferCreateFlags--newtype VkBufferCreateFlagBits = VkBufferCreateFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkBufferCreateFlagBits-type VkBufferCreateFlags = VkBufferCreateFlagBits--- | Buffer should support sparse backing-pattern VK_BUFFER_CREATE_SPARSE_BINDING_BIT = VkBufferCreateFlagBits 0x1--- | Buffer should support sparse backing with partial residency-pattern VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = VkBufferCreateFlagBits 0x2--- | Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers-pattern VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = VkBufferCreateFlagBits 0x4----- ** VkShaderStageFlags--newtype VkShaderStageFlagBits = VkShaderStageFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkShaderStageFlagBits-type VkShaderStageFlags = VkShaderStageFlagBits--pattern VK_SHADER_STAGE_VERTEX_BIT = VkShaderStageFlagBits 0x1--pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = VkShaderStageFlagBits 0x2--pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = VkShaderStageFlagBits 0x4--pattern VK_SHADER_STAGE_GEOMETRY_BIT = VkShaderStageFlagBits 0x8--pattern VK_SHADER_STAGE_FRAGMENT_BIT = VkShaderStageFlagBits 0x10--pattern VK_SHADER_STAGE_COMPUTE_BIT = VkShaderStageFlagBits 0x20--pattern VK_SHADER_STAGE_ALL_GRAPHICS = VkShaderStageFlagBits 0x1f--pattern VK_SHADER_STAGE_ALL = VkShaderStageFlagBits 0x7fffffff---- ** VkImageUsageFlags--newtype VkImageUsageFlagBits = VkImageUsageFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkImageUsageFlagBits-type VkImageUsageFlags = VkImageUsageFlagBits--- | Can be used as a source of transfer operations-pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT = VkImageUsageFlagBits 0x1--- | Can be used as a destination of transfer operations-pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT = VkImageUsageFlagBits 0x2--- | Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)-pattern VK_IMAGE_USAGE_SAMPLED_BIT = VkImageUsageFlagBits 0x4--- | Can be used as storage image (STORAGE_IMAGE descriptor type)-pattern VK_IMAGE_USAGE_STORAGE_BIT = VkImageUsageFlagBits 0x8--- | Can be used as framebuffer color attachment-pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = VkImageUsageFlagBits 0x10--- | Can be used as framebuffer depth/stencil attachment-pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = VkImageUsageFlagBits 0x20--- | Image data not needed outside of rendering-pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x40--- | Can be used as framebuffer input attachment-pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x80----- ** VkImageCreateFlags--newtype VkImageCreateFlagBits = VkImageCreateFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkImageCreateFlagBits-type VkImageCreateFlags = VkImageCreateFlagBits--- | Image should support sparse backing-pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT = VkImageCreateFlagBits 0x1--- | Image should support sparse backing with partial residency-pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = VkImageCreateFlagBits 0x2--- | Image should support constent data access to physical memory blocks mapped into multiple locations of sparse images-pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = VkImageCreateFlagBits 0x4--- | Allows image views to have different format than the base image-pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = VkImageCreateFlagBits 0x8--- | Allows creating image views with cube type from the created image-pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = VkImageCreateFlagBits 0x10----- ** VkImageViewCreateFlags--- | Opaque flag-newtype VkImageViewCreateFlags = VkImageViewCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineCreateFlags--newtype VkPipelineCreateFlagBits = VkPipelineCreateFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkPipelineCreateFlagBits-type VkPipelineCreateFlags = VkPipelineCreateFlagBits--pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = VkPipelineCreateFlagBits 0x1--pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = VkPipelineCreateFlagBits 0x2--pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT = VkPipelineCreateFlagBits 0x4----- ** VkColorComponentFlags--newtype VkColorComponentFlagBits = VkColorComponentFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkColorComponentFlagBits-type VkColorComponentFlags = VkColorComponentFlagBits--pattern VK_COLOR_COMPONENT_R_BIT = VkColorComponentFlagBits 0x1--pattern VK_COLOR_COMPONENT_G_BIT = VkColorComponentFlagBits 0x2--pattern VK_COLOR_COMPONENT_B_BIT = VkColorComponentFlagBits 0x4--pattern VK_COLOR_COMPONENT_A_BIT = VkColorComponentFlagBits 0x8----- ** VkFenceCreateFlags--newtype VkFenceCreateFlagBits = VkFenceCreateFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkFenceCreateFlagBits-type VkFenceCreateFlags = VkFenceCreateFlagBits--pattern VK_FENCE_CREATE_SIGNALED_BIT = VkFenceCreateFlagBits 0x1----- ** VkSemaphoreCreateFlags--- | Opaque flag-newtype VkSemaphoreCreateFlags = VkSemaphoreCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkFormatFeatureFlags--newtype VkFormatFeatureFlagBits = VkFormatFeatureFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkFormatFeatureFlagBits-type VkFormatFeatureFlags = VkFormatFeatureFlagBits--- | Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)-pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = VkFormatFeatureFlagBits 0x1--- | Format can be used for storage images (STORAGE_IMAGE descriptor type)-pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = VkFormatFeatureFlagBits 0x2--- | Format supports atomic operations in case it's used for storage images-pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = VkFormatFeatureFlagBits 0x4--- | Format can be used for uniform texel buffers (TBOs)-pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x8--- | Format can be used for storage texel buffers (IBOs)-pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x10--- | Format supports atomic operations in case it's used for storage texel buffers-pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = VkFormatFeatureFlagBits 0x20--- | Format can be used for vertex buffers (VBOs)-pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = VkFormatFeatureFlagBits 0x40--- | Format can be used for color attachment images-pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x80--- | Format supports blending in case it's used for color attachment images-pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = VkFormatFeatureFlagBits 0x100--- | Format can be used for depth/stencil attachment images-pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x200--- | Format can be used as the source image of blits with vkCmdBlitImage-pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT = VkFormatFeatureFlagBits 0x400--- | Format can be used as the destination image of blits with vkCmdBlitImage-pattern VK_FORMAT_FEATURE_BLIT_DST_BIT = VkFormatFeatureFlagBits 0x800--- | Format can be filtered with VK_FILTER_LINEAR when being sampled-pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = VkFormatFeatureFlagBits 0x1000----- ** VkQueryControlFlags--newtype VkQueryControlFlagBits = VkQueryControlFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkQueryControlFlagBits-type VkQueryControlFlags = VkQueryControlFlagBits--- | Require precise results to be collected by the query-pattern VK_QUERY_CONTROL_PRECISE_BIT = VkQueryControlFlagBits 0x1----- ** VkQueryResultFlags--newtype VkQueryResultFlagBits = VkQueryResultFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkQueryResultFlagBits-type VkQueryResultFlags = VkQueryResultFlagBits--- | Results of the queries are written to the destination buffer as 64-bit values-pattern VK_QUERY_RESULT_64_BIT = VkQueryResultFlagBits 0x1--- | Results of the queries are waited on before proceeding with the result copy-pattern VK_QUERY_RESULT_WAIT_BIT = VkQueryResultFlagBits 0x2--- | Besides the results of the query, the availability of the results is also written-pattern VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = VkQueryResultFlagBits 0x4--- | Copy the partial results of the query even if the final results aren't available-pattern VK_QUERY_RESULT_PARTIAL_BIT = VkQueryResultFlagBits 0x8----- ** VkShaderModuleCreateFlags--- | Opaque flag-newtype VkShaderModuleCreateFlags = VkShaderModuleCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkEventCreateFlags--- | Opaque flag-newtype VkEventCreateFlags = VkEventCreateFlags VkFlags-  deriving (Eq, Storable)---- ** VkCommandPoolCreateFlags--newtype VkCommandPoolCreateFlagBits = VkCommandPoolCreateFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkCommandPoolCreateFlagBits-type VkCommandPoolCreateFlags = VkCommandPoolCreateFlagBits--- | Command buffers have a short lifetime-pattern VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = VkCommandPoolCreateFlagBits 0x1--- | Command buffers may release their memory individually-pattern VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = VkCommandPoolCreateFlagBits 0x2----- ** VkCommandPoolResetFlags--newtype VkCommandPoolResetFlagBits = VkCommandPoolResetFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkCommandPoolResetFlagBits-type VkCommandPoolResetFlags = VkCommandPoolResetFlagBits--- | Release resources owned by the pool-pattern VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = VkCommandPoolResetFlagBits 0x1----- ** VkCommandBufferResetFlags--newtype VkCommandBufferResetFlagBits = VkCommandBufferResetFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkCommandBufferResetFlagBits-type VkCommandBufferResetFlags = VkCommandBufferResetFlagBits--- | Release resources owned by the buffer-pattern VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = VkCommandBufferResetFlagBits 0x1----- ** VkCommandBufferUsageFlags--newtype VkCommandBufferUsageFlagBits = VkCommandBufferUsageFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkCommandBufferUsageFlagBits-type VkCommandBufferUsageFlags = VkCommandBufferUsageFlagBits--pattern VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = VkCommandBufferUsageFlagBits 0x1--pattern VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = VkCommandBufferUsageFlagBits 0x2--- | Command buffer may be submitted/executed more than once simultaneously-pattern VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = VkCommandBufferUsageFlagBits 0x4----- ** VkQueryPipelineStatisticFlags--newtype VkQueryPipelineStatisticFlagBits = VkQueryPipelineStatisticFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkQueryPipelineStatisticFlagBits-type VkQueryPipelineStatisticFlags = VkQueryPipelineStatisticFlagBits--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = VkQueryPipelineStatisticFlagBits 0x1--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x2--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x4--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x8--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x10--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x20--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x40--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x80--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = VkQueryPipelineStatisticFlagBits 0x100--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x200--- | Optional-pattern VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x400----- ** VkMemoryMapFlags--- | Opaque flag-newtype VkMemoryMapFlags = VkMemoryMapFlags VkFlags-  deriving (Eq, Storable)---- ** VkImageAspectFlags--newtype VkImageAspectFlagBits = VkImageAspectFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkImageAspectFlagBits-type VkImageAspectFlags = VkImageAspectFlagBits--pattern VK_IMAGE_ASPECT_COLOR_BIT = VkImageAspectFlagBits 0x1--pattern VK_IMAGE_ASPECT_DEPTH_BIT = VkImageAspectFlagBits 0x2--pattern VK_IMAGE_ASPECT_STENCIL_BIT = VkImageAspectFlagBits 0x4--pattern VK_IMAGE_ASPECT_METADATA_BIT = VkImageAspectFlagBits 0x8----- ** VkSparseMemoryBindFlags--newtype VkSparseMemoryBindFlagBits = VkSparseMemoryBindFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkSparseMemoryBindFlagBits-type VkSparseMemoryBindFlags = VkSparseMemoryBindFlagBits--- | Operation binds resource metadata to memory-pattern VK_SPARSE_MEMORY_BIND_METADATA_BIT = VkSparseMemoryBindFlagBits 0x1----- ** VkSparseImageFormatFlags--newtype VkSparseImageFormatFlagBits = VkSparseImageFormatFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkSparseImageFormatFlagBits-type VkSparseImageFormatFlags = VkSparseImageFormatFlagBits--- | Image uses a single miptail region for all array layers-pattern VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = VkSparseImageFormatFlagBits 0x1--- | Image requires mip levels to be an exact multiple of the sparse image block size for non-miptail levels.-pattern VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = VkSparseImageFormatFlagBits 0x2--- | Image uses a non-standard sparse block size-pattern VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = VkSparseImageFormatFlagBits 0x4----- ** VkSubpassDescriptionFlags--- | Opaque flag-newtype VkSubpassDescriptionFlags = VkSubpassDescriptionFlags VkFlags-  deriving (Eq, Storable)---- ** VkPipelineStageFlags--newtype VkPipelineStageFlagBits = VkPipelineStageFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkPipelineStageFlagBits-type VkPipelineStageFlags = VkPipelineStageFlagBits--- | Before subsequent commands are processed-pattern VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = VkPipelineStageFlagBits 0x1--- | Draw/DispatchIndirect command fetch-pattern VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = VkPipelineStageFlagBits 0x2--- | Vertex/index fetch-pattern VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = VkPipelineStageFlagBits 0x4--- | Vertex shading-pattern VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = VkPipelineStageFlagBits 0x8--- | Tessellation control shading-pattern VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = VkPipelineStageFlagBits 0x10--- | Tessellation evaluation shading-pattern VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = VkPipelineStageFlagBits 0x20--- | Geometry shading-pattern VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = VkPipelineStageFlagBits 0x40--- | Fragment shading-pattern VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = VkPipelineStageFlagBits 0x80--- | Early fragment (depth and stencil) tests-pattern VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = VkPipelineStageFlagBits 0x100--- | Late fragment (depth and stencil) tests-pattern VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = VkPipelineStageFlagBits 0x200--- | Color attachment writes-pattern VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = VkPipelineStageFlagBits 0x400--- | Compute shading-pattern VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = VkPipelineStageFlagBits 0x800--- | Transfer/copy operations-pattern VK_PIPELINE_STAGE_TRANSFER_BIT = VkPipelineStageFlagBits 0x1000--- | After previous commands have completed-pattern VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = VkPipelineStageFlagBits 0x2000--- | Indicates host (CPU) is a source/sink of the dependency-pattern VK_PIPELINE_STAGE_HOST_BIT = VkPipelineStageFlagBits 0x4000--- | All stages of the graphics pipeline-pattern VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = VkPipelineStageFlagBits 0x8000--- | All stages supported on the queue-pattern VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = VkPipelineStageFlagBits 0x10000----- ** VkSampleCountFlags--newtype VkSampleCountFlagBits = VkSampleCountFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkSampleCountFlagBits-type VkSampleCountFlags = VkSampleCountFlagBits--- | Sample count 1 supported-pattern VK_SAMPLE_COUNT_1_BIT = VkSampleCountFlagBits 0x1--- | Sample count 2 supported-pattern VK_SAMPLE_COUNT_2_BIT = VkSampleCountFlagBits 0x2--- | Sample count 4 supported-pattern VK_SAMPLE_COUNT_4_BIT = VkSampleCountFlagBits 0x4--- | Sample count 8 supported-pattern VK_SAMPLE_COUNT_8_BIT = VkSampleCountFlagBits 0x8--- | Sample count 16 supported-pattern VK_SAMPLE_COUNT_16_BIT = VkSampleCountFlagBits 0x10--- | Sample count 32 supported-pattern VK_SAMPLE_COUNT_32_BIT = VkSampleCountFlagBits 0x20--- | Sample count 64 supported-pattern VK_SAMPLE_COUNT_64_BIT = VkSampleCountFlagBits 0x40----- ** VkAttachmentDescriptionFlags--newtype VkAttachmentDescriptionFlagBits = VkAttachmentDescriptionFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkAttachmentDescriptionFlagBits-type VkAttachmentDescriptionFlags = VkAttachmentDescriptionFlagBits--- | The attachment may alias physical memory of another attachment in the same render pass-pattern VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = VkAttachmentDescriptionFlagBits 0x1----- ** VkStencilFaceFlags--newtype VkStencilFaceFlagBits = VkStencilFaceFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkStencilFaceFlagBits-type VkStencilFaceFlags = VkStencilFaceFlagBits--- | Front face-pattern VK_STENCIL_FACE_FRONT_BIT = VkStencilFaceFlagBits 0x1--- | Back face-pattern VK_STENCIL_FACE_BACK_BIT = VkStencilFaceFlagBits 0x2--- | Front and back faces-pattern VK_STENCIL_FRONT_AND_BACK = VkStencilFaceFlagBits 0x3---- ** VkCullModeFlags--newtype VkCullModeFlagBits = VkCullModeFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkCullModeFlagBits-type VkCullModeFlags = VkCullModeFlagBits--pattern VK_CULL_MODE_FRONT_BIT = VkCullModeFlagBits 0x1--pattern VK_CULL_MODE_BACK_BIT = VkCullModeFlagBits 0x2--pattern VK_CULL_MODE_NONE = VkCullModeFlagBits 0x0--pattern VK_CULL_MODE_FRONT_AND_BACK = VkCullModeFlagBits 0x3---- ** VkDescriptorPoolCreateFlags--newtype VkDescriptorPoolCreateFlagBits = VkDescriptorPoolCreateFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkDescriptorPoolCreateFlagBits-type VkDescriptorPoolCreateFlags = VkDescriptorPoolCreateFlagBits--- | Descriptor sets may be freed individually-pattern VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = VkDescriptorPoolCreateFlagBits 0x1----- ** VkDescriptorPoolResetFlags--- | Opaque flag-newtype VkDescriptorPoolResetFlags = VkDescriptorPoolResetFlags VkFlags-  deriving (Eq, Storable)---- ** VkDependencyFlags--newtype VkDependencyFlagBits = VkDependencyFlagBits VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkDependencyFlagBits-type VkDependencyFlags = VkDependencyFlagBits--- | Dependency is per pixel region -pattern VK_DEPENDENCY_BY_REGION_BIT = VkDependencyFlagBits 0x1----- ** VkCompositeAlphaFlagsKHR--newtype VkCompositeAlphaFlagBitsKHR = VkCompositeAlphaFlagBitsKHR VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkCompositeAlphaFlagBitsKHR-type VkCompositeAlphaFlagsKHR = VkCompositeAlphaFlagBitsKHR--pattern VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x1--pattern VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x2--pattern VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x4--pattern VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x8----- ** VkDisplayPlaneAlphaFlagsKHR--newtype VkDisplayPlaneAlphaFlagBitsKHR = VkDisplayPlaneAlphaFlagBitsKHR VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkDisplayPlaneAlphaFlagBitsKHR-type VkDisplayPlaneAlphaFlagsKHR = VkDisplayPlaneAlphaFlagBitsKHR--pattern VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x1--pattern VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x2--pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x4--pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x8----- ** VkSurfaceTransformFlagsKHR--newtype VkSurfaceTransformFlagBitsKHR = VkSurfaceTransformFlagBitsKHR VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkSurfaceTransformFlagBitsKHR-type VkSurfaceTransformFlagsKHR = VkSurfaceTransformFlagBitsKHR--pattern VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x1--pattern VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x2--pattern VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x4--pattern VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x8--pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x10--pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x20--pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x40--pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x80--pattern VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x100----- ** VkSwapchainCreateFlagsKHR--- | Opaque flag-newtype VkSwapchainCreateFlagsKHR = VkSwapchainCreateFlagsKHR VkFlags-  deriving (Eq, Storable)---- ** VkDisplayModeCreateFlagsKHR--- | Opaque flag-newtype VkDisplayModeCreateFlagsKHR = VkDisplayModeCreateFlagsKHR VkFlags-  deriving (Eq, Storable)---- ** VkDisplaySurfaceCreateFlagsKHR--- | Opaque flag-newtype VkDisplaySurfaceCreateFlagsKHR = VkDisplaySurfaceCreateFlagsKHR VkFlags-  deriving (Eq, Storable)---- ** VkAndroidSurfaceCreateFlagsKHR--- | Opaque flag-newtype VkAndroidSurfaceCreateFlagsKHR = VkAndroidSurfaceCreateFlagsKHR VkFlags-  deriving (Eq, Storable)---- ** VkMirSurfaceCreateFlagsKHR--- | Opaque flag-newtype VkMirSurfaceCreateFlagsKHR = VkMirSurfaceCreateFlagsKHR VkFlags-  deriving (Eq, Storable)---- ** VkWaylandSurfaceCreateFlagsKHR--- | Opaque flag-newtype VkWaylandSurfaceCreateFlagsKHR = VkWaylandSurfaceCreateFlagsKHR VkFlags-  deriving (Eq, Storable)---- ** VkWin32SurfaceCreateFlagsKHR--- | Opaque flag-newtype VkWin32SurfaceCreateFlagsKHR = VkWin32SurfaceCreateFlagsKHR VkFlags-  deriving (Eq, Storable)---- ** VkXlibSurfaceCreateFlagsKHR--- | Opaque flag-newtype VkXlibSurfaceCreateFlagsKHR = VkXlibSurfaceCreateFlagsKHR VkFlags-  deriving (Eq, Storable)---- ** VkXcbSurfaceCreateFlagsKHR--- | Opaque flag-newtype VkXcbSurfaceCreateFlagsKHR = VkXcbSurfaceCreateFlagsKHR VkFlags-  deriving (Eq, Storable)---- ** VkDebugReportFlagsEXT--newtype VkDebugReportFlagBitsEXT = VkDebugReportFlagBitsEXT VkFlags-  deriving (Eq, Storable, Bits, FiniteBits)--- | Alias for VkDebugReportFlagBitsEXT-type VkDebugReportFlagsEXT = VkDebugReportFlagBitsEXT--pattern VK_DEBUG_REPORT_INFORMATION_BIT_EXT = VkDebugReportFlagBitsEXT 0x1--pattern VK_DEBUG_REPORT_WARNING_BIT_EXT = VkDebugReportFlagBitsEXT 0x2--pattern VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = VkDebugReportFlagBitsEXT 0x4--pattern VK_DEBUG_REPORT_ERROR_BIT_EXT = VkDebugReportFlagBitsEXT 0x8--pattern VK_DEBUG_REPORT_DEBUG_BIT_EXT = VkDebugReportFlagBitsEXT 0x10----- * Enumerations---- ** VkImageLayout--newtype VkImageLayout = VkImageLayout Int32-  deriving (Eq, Storable)--- | Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)-pattern VK_IMAGE_LAYOUT_UNDEFINED = VkImageLayout 0--- | General layout when image can be used for any kind of access-pattern VK_IMAGE_LAYOUT_GENERAL = VkImageLayout 1--- | Optimal layout when image is only used for color attachment read/write-pattern VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = VkImageLayout 2--- | Optimal layout when image is only used for depth/stencil attachment read/write-pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = VkImageLayout 3--- | Optimal layout when image is used for read only depth/stencil attachment and shader access-pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = VkImageLayout 4--- | Optimal layout when image is used for read only shader access-pattern VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = VkImageLayout 5--- | Optimal layout when image is used only as source of transfer operations-pattern VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = VkImageLayout 6--- | Optimal layout when image is used only as destination of transfer operations-pattern VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = VkImageLayout 7--- | Initial layout used when the data is populated by the CPU-pattern VK_IMAGE_LAYOUT_PREINITIALIZED = VkImageLayout 8---- ** VkAttachmentLoadOp--newtype VkAttachmentLoadOp = VkAttachmentLoadOp Int32-  deriving (Eq, Storable)--pattern VK_ATTACHMENT_LOAD_OP_LOAD = VkAttachmentLoadOp 0--pattern VK_ATTACHMENT_LOAD_OP_CLEAR = VkAttachmentLoadOp 1--pattern VK_ATTACHMENT_LOAD_OP_DONT_CARE = VkAttachmentLoadOp 2---- ** VkAttachmentStoreOp--newtype VkAttachmentStoreOp = VkAttachmentStoreOp Int32-  deriving (Eq, Storable)--pattern VK_ATTACHMENT_STORE_OP_STORE = VkAttachmentStoreOp 0--pattern VK_ATTACHMENT_STORE_OP_DONT_CARE = VkAttachmentStoreOp 1---- ** VkImageType--newtype VkImageType = VkImageType Int32-  deriving (Eq, Storable)--pattern VK_IMAGE_TYPE_1D = VkImageType 0--pattern VK_IMAGE_TYPE_2D = VkImageType 1--pattern VK_IMAGE_TYPE_3D = VkImageType 2---- ** VkImageTiling--newtype VkImageTiling = VkImageTiling Int32-  deriving (Eq, Storable)--pattern VK_IMAGE_TILING_OPTIMAL = VkImageTiling 0--pattern VK_IMAGE_TILING_LINEAR = VkImageTiling 1---- ** VkImageViewType--newtype VkImageViewType = VkImageViewType Int32-  deriving (Eq, Storable)--pattern VK_IMAGE_VIEW_TYPE_1D = VkImageViewType 0--pattern VK_IMAGE_VIEW_TYPE_2D = VkImageViewType 1--pattern VK_IMAGE_VIEW_TYPE_3D = VkImageViewType 2--pattern VK_IMAGE_VIEW_TYPE_CUBE = VkImageViewType 3--pattern VK_IMAGE_VIEW_TYPE_1D_ARRAY = VkImageViewType 4--pattern VK_IMAGE_VIEW_TYPE_2D_ARRAY = VkImageViewType 5--pattern VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = VkImageViewType 6---- ** VkCommandBufferLevel--newtype VkCommandBufferLevel = VkCommandBufferLevel Int32-  deriving (Eq, Storable)--pattern VK_COMMAND_BUFFER_LEVEL_PRIMARY = VkCommandBufferLevel 0--pattern VK_COMMAND_BUFFER_LEVEL_SECONDARY = VkCommandBufferLevel 1---- ** VkComponentSwizzle--newtype VkComponentSwizzle = VkComponentSwizzle Int32-  deriving (Eq, Storable)--pattern VK_COMPONENT_SWIZZLE_IDENTITY = VkComponentSwizzle 0--pattern VK_COMPONENT_SWIZZLE_ZERO = VkComponentSwizzle 1--pattern VK_COMPONENT_SWIZZLE_ONE = VkComponentSwizzle 2--pattern VK_COMPONENT_SWIZZLE_R = VkComponentSwizzle 3--pattern VK_COMPONENT_SWIZZLE_G = VkComponentSwizzle 4--pattern VK_COMPONENT_SWIZZLE_B = VkComponentSwizzle 5--pattern VK_COMPONENT_SWIZZLE_A = VkComponentSwizzle 6---- ** VkDescriptorType--newtype VkDescriptorType = VkDescriptorType Int32-  deriving (Eq, Storable)--pattern VK_DESCRIPTOR_TYPE_SAMPLER = VkDescriptorType 0--pattern VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = VkDescriptorType 1--pattern VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = VkDescriptorType 2--pattern VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = VkDescriptorType 3--pattern VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = VkDescriptorType 4--pattern VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = VkDescriptorType 5--pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = VkDescriptorType 6--pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = VkDescriptorType 7--pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = VkDescriptorType 8--pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = VkDescriptorType 9--pattern VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = VkDescriptorType 10---- ** VkQueryType--newtype VkQueryType = VkQueryType Int32-  deriving (Eq, Storable)--pattern VK_QUERY_TYPE_OCCLUSION = VkQueryType 0--- | Optional-pattern VK_QUERY_TYPE_PIPELINE_STATISTICS = VkQueryType 1--pattern VK_QUERY_TYPE_TIMESTAMP = VkQueryType 2---- ** VkBorderColor--newtype VkBorderColor = VkBorderColor Int32-  deriving (Eq, Storable)--pattern VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = VkBorderColor 0--pattern VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = VkBorderColor 1--pattern VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = VkBorderColor 2--pattern VK_BORDER_COLOR_INT_OPAQUE_BLACK = VkBorderColor 3--pattern VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = VkBorderColor 4--pattern VK_BORDER_COLOR_INT_OPAQUE_WHITE = VkBorderColor 5---- ** VkPipelineBindPoint--newtype VkPipelineBindPoint = VkPipelineBindPoint Int32-  deriving (Eq, Storable)--pattern VK_PIPELINE_BIND_POINT_GRAPHICS = VkPipelineBindPoint 0--pattern VK_PIPELINE_BIND_POINT_COMPUTE = VkPipelineBindPoint 1---- ** VkPipelineCacheHeaderVersion--newtype VkPipelineCacheHeaderVersion = VkPipelineCacheHeaderVersion Int32-  deriving (Eq, Storable)--pattern VK_PIPELINE_CACHE_HEADER_VERSION_ONE = VkPipelineCacheHeaderVersion 1---- ** VkPrimitiveTopology--newtype VkPrimitiveTopology = VkPrimitiveTopology Int32-  deriving (Eq, Storable)--pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST = VkPrimitiveTopology 0--pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST = VkPrimitiveTopology 1--pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = VkPrimitiveTopology 2--pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = VkPrimitiveTopology 3--pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = VkPrimitiveTopology 4--pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = VkPrimitiveTopology 5--pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 6--pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 7--pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 8--pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 9--pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = VkPrimitiveTopology 10---- ** VkSharingMode--newtype VkSharingMode = VkSharingMode Int32-  deriving (Eq, Storable)--pattern VK_SHARING_MODE_EXCLUSIVE = VkSharingMode 0--pattern VK_SHARING_MODE_CONCURRENT = VkSharingMode 1---- ** VkIndexType--newtype VkIndexType = VkIndexType Int32-  deriving (Eq, Storable)--pattern VK_INDEX_TYPE_UINT16 = VkIndexType 0--pattern VK_INDEX_TYPE_UINT32 = VkIndexType 1---- ** VkFilter--newtype VkFilter = VkFilter Int32-  deriving (Eq, Storable)--pattern VK_FILTER_NEAREST = VkFilter 0--pattern VK_FILTER_LINEAR = VkFilter 1---- ** VkSamplerMipmapMode--newtype VkSamplerMipmapMode = VkSamplerMipmapMode Int32-  deriving (Eq, Storable)--- | Choose nearest mip level-pattern VK_SAMPLER_MIPMAP_MODE_NEAREST = VkSamplerMipmapMode 0--- | Linear filter between mip levels-pattern VK_SAMPLER_MIPMAP_MODE_LINEAR = VkSamplerMipmapMode 1---- ** VkSamplerAddressMode--newtype VkSamplerAddressMode = VkSamplerAddressMode Int32-  deriving (Eq, Storable)--pattern VK_SAMPLER_ADDRESS_MODE_REPEAT = VkSamplerAddressMode 0--pattern VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = VkSamplerAddressMode 1--pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = VkSamplerAddressMode 2--pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = VkSamplerAddressMode 3--pattern VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = VkSamplerAddressMode 4---- ** VkCompareOp--newtype VkCompareOp = VkCompareOp Int32-  deriving (Eq, Storable)--pattern VK_COMPARE_OP_NEVER = VkCompareOp 0--pattern VK_COMPARE_OP_LESS = VkCompareOp 1--pattern VK_COMPARE_OP_EQUAL = VkCompareOp 2--pattern VK_COMPARE_OP_LESS_OR_EQUAL = VkCompareOp 3--pattern VK_COMPARE_OP_GREATER = VkCompareOp 4--pattern VK_COMPARE_OP_NOT_EQUAL = VkCompareOp 5--pattern VK_COMPARE_OP_GREATER_OR_EQUAL = VkCompareOp 6--pattern VK_COMPARE_OP_ALWAYS = VkCompareOp 7---- ** VkPolygonMode--newtype VkPolygonMode = VkPolygonMode Int32-  deriving (Eq, Storable)--pattern VK_POLYGON_MODE_FILL = VkPolygonMode 0--pattern VK_POLYGON_MODE_LINE = VkPolygonMode 1--pattern VK_POLYGON_MODE_POINT = VkPolygonMode 2---- ** VkFrontFace--newtype VkFrontFace = VkFrontFace Int32-  deriving (Eq, Storable)--pattern VK_FRONT_FACE_COUNTER_CLOCKWISE = VkFrontFace 0--pattern VK_FRONT_FACE_CLOCKWISE = VkFrontFace 1---- ** VkBlendFactor--newtype VkBlendFactor = VkBlendFactor Int32-  deriving (Eq, Storable)--pattern VK_BLEND_FACTOR_ZERO = VkBlendFactor 0--pattern VK_BLEND_FACTOR_ONE = VkBlendFactor 1--pattern VK_BLEND_FACTOR_SRC_COLOR = VkBlendFactor 2--pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = VkBlendFactor 3--pattern VK_BLEND_FACTOR_DST_COLOR = VkBlendFactor 4--pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = VkBlendFactor 5--pattern VK_BLEND_FACTOR_SRC_ALPHA = VkBlendFactor 6--pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = VkBlendFactor 7--pattern VK_BLEND_FACTOR_DST_ALPHA = VkBlendFactor 8--pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = VkBlendFactor 9--pattern VK_BLEND_FACTOR_CONSTANT_COLOR = VkBlendFactor 10--pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = VkBlendFactor 11--pattern VK_BLEND_FACTOR_CONSTANT_ALPHA = VkBlendFactor 12--pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = VkBlendFactor 13--pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = VkBlendFactor 14--pattern VK_BLEND_FACTOR_SRC1_COLOR = VkBlendFactor 15--pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = VkBlendFactor 16--pattern VK_BLEND_FACTOR_SRC1_ALPHA = VkBlendFactor 17--pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = VkBlendFactor 18---- ** VkBlendOp--newtype VkBlendOp = VkBlendOp Int32-  deriving (Eq, Storable)--pattern VK_BLEND_OP_ADD = VkBlendOp 0--pattern VK_BLEND_OP_SUBTRACT = VkBlendOp 1--pattern VK_BLEND_OP_REVERSE_SUBTRACT = VkBlendOp 2--pattern VK_BLEND_OP_MIN = VkBlendOp 3--pattern VK_BLEND_OP_MAX = VkBlendOp 4---- ** VkStencilOp--newtype VkStencilOp = VkStencilOp Int32-  deriving (Eq, Storable)--pattern VK_STENCIL_OP_KEEP = VkStencilOp 0--pattern VK_STENCIL_OP_ZERO = VkStencilOp 1--pattern VK_STENCIL_OP_REPLACE = VkStencilOp 2--pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP = VkStencilOp 3--pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP = VkStencilOp 4--pattern VK_STENCIL_OP_INVERT = VkStencilOp 5--pattern VK_STENCIL_OP_INCREMENT_AND_WRAP = VkStencilOp 6--pattern VK_STENCIL_OP_DECREMENT_AND_WRAP = VkStencilOp 7---- ** VkLogicOp--newtype VkLogicOp = VkLogicOp Int32-  deriving (Eq, Storable)--pattern VK_LOGIC_OP_CLEAR = VkLogicOp 0--pattern VK_LOGIC_OP_AND = VkLogicOp 1--pattern VK_LOGIC_OP_AND_REVERSE = VkLogicOp 2--pattern VK_LOGIC_OP_COPY = VkLogicOp 3--pattern VK_LOGIC_OP_AND_INVERTED = VkLogicOp 4--pattern VK_LOGIC_OP_NO_OP = VkLogicOp 5--pattern VK_LOGIC_OP_XOR = VkLogicOp 6--pattern VK_LOGIC_OP_OR = VkLogicOp 7--pattern VK_LOGIC_OP_NOR = VkLogicOp 8--pattern VK_LOGIC_OP_EQUIVALENT = VkLogicOp 9--pattern VK_LOGIC_OP_INVERT = VkLogicOp 10--pattern VK_LOGIC_OP_OR_REVERSE = VkLogicOp 11--pattern VK_LOGIC_OP_COPY_INVERTED = VkLogicOp 12--pattern VK_LOGIC_OP_OR_INVERTED = VkLogicOp 13--pattern VK_LOGIC_OP_NAND = VkLogicOp 14--pattern VK_LOGIC_OP_SET = VkLogicOp 15---- ** VkInternalAllocationType--newtype VkInternalAllocationType = VkInternalAllocationType Int32-  deriving (Eq, Storable)--pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = VkInternalAllocationType 0---- ** VkSystemAllocationScope--newtype VkSystemAllocationScope = VkSystemAllocationScope Int32-  deriving (Eq, Storable)--pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = VkSystemAllocationScope 0--pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = VkSystemAllocationScope 1--pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE = VkSystemAllocationScope 2--pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = VkSystemAllocationScope 3--pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = VkSystemAllocationScope 4---- ** VkPhysicalDeviceType--newtype VkPhysicalDeviceType = VkPhysicalDeviceType Int32-  deriving (Eq, Storable)--pattern VK_PHYSICAL_DEVICE_TYPE_OTHER = VkPhysicalDeviceType 0--pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = VkPhysicalDeviceType 1--pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = VkPhysicalDeviceType 2--pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = VkPhysicalDeviceType 3--pattern VK_PHYSICAL_DEVICE_TYPE_CPU = VkPhysicalDeviceType 4---- ** VkVertexInputRate--newtype VkVertexInputRate = VkVertexInputRate Int32-  deriving (Eq, Storable)--pattern VK_VERTEX_INPUT_RATE_VERTEX = VkVertexInputRate 0--pattern VK_VERTEX_INPUT_RATE_INSTANCE = VkVertexInputRate 1---- ** VkFormat--- | Vulkan format definitions-newtype VkFormat = VkFormat Int32-  deriving (Eq, Storable)--pattern VK_FORMAT_UNDEFINED = VkFormat 0--pattern VK_FORMAT_R4G4_UNORM_PACK8 = VkFormat 1--pattern VK_FORMAT_R4G4B4A4_UNORM_PACK16 = VkFormat 2--pattern VK_FORMAT_B4G4R4A4_UNORM_PACK16 = VkFormat 3--pattern VK_FORMAT_R5G6B5_UNORM_PACK16 = VkFormat 4--pattern VK_FORMAT_B5G6R5_UNORM_PACK16 = VkFormat 5--pattern VK_FORMAT_R5G5B5A1_UNORM_PACK16 = VkFormat 6--pattern VK_FORMAT_B5G5R5A1_UNORM_PACK16 = VkFormat 7--pattern VK_FORMAT_A1R5G5B5_UNORM_PACK16 = VkFormat 8--pattern VK_FORMAT_R8_UNORM = VkFormat 9--pattern VK_FORMAT_R8_SNORM = VkFormat 10--pattern VK_FORMAT_R8_USCALED = VkFormat 11--pattern VK_FORMAT_R8_SSCALED = VkFormat 12--pattern VK_FORMAT_R8_UINT = VkFormat 13--pattern VK_FORMAT_R8_SINT = VkFormat 14--pattern VK_FORMAT_R8_SRGB = VkFormat 15--pattern VK_FORMAT_R8G8_UNORM = VkFormat 16--pattern VK_FORMAT_R8G8_SNORM = VkFormat 17--pattern VK_FORMAT_R8G8_USCALED = VkFormat 18--pattern VK_FORMAT_R8G8_SSCALED = VkFormat 19--pattern VK_FORMAT_R8G8_UINT = VkFormat 20--pattern VK_FORMAT_R8G8_SINT = VkFormat 21--pattern VK_FORMAT_R8G8_SRGB = VkFormat 22--pattern VK_FORMAT_R8G8B8_UNORM = VkFormat 23--pattern VK_FORMAT_R8G8B8_SNORM = VkFormat 24--pattern VK_FORMAT_R8G8B8_USCALED = VkFormat 25--pattern VK_FORMAT_R8G8B8_SSCALED = VkFormat 26--pattern VK_FORMAT_R8G8B8_UINT = VkFormat 27--pattern VK_FORMAT_R8G8B8_SINT = VkFormat 28--pattern VK_FORMAT_R8G8B8_SRGB = VkFormat 29--pattern VK_FORMAT_B8G8R8_UNORM = VkFormat 30--pattern VK_FORMAT_B8G8R8_SNORM = VkFormat 31--pattern VK_FORMAT_B8G8R8_USCALED = VkFormat 32--pattern VK_FORMAT_B8G8R8_SSCALED = VkFormat 33--pattern VK_FORMAT_B8G8R8_UINT = VkFormat 34--pattern VK_FORMAT_B8G8R8_SINT = VkFormat 35--pattern VK_FORMAT_B8G8R8_SRGB = VkFormat 36--pattern VK_FORMAT_R8G8B8A8_UNORM = VkFormat 37--pattern VK_FORMAT_R8G8B8A8_SNORM = VkFormat 38--pattern VK_FORMAT_R8G8B8A8_USCALED = VkFormat 39--pattern VK_FORMAT_R8G8B8A8_SSCALED = VkFormat 40--pattern VK_FORMAT_R8G8B8A8_UINT = VkFormat 41--pattern VK_FORMAT_R8G8B8A8_SINT = VkFormat 42--pattern VK_FORMAT_R8G8B8A8_SRGB = VkFormat 43--pattern VK_FORMAT_B8G8R8A8_UNORM = VkFormat 44--pattern VK_FORMAT_B8G8R8A8_SNORM = VkFormat 45--pattern VK_FORMAT_B8G8R8A8_USCALED = VkFormat 46--pattern VK_FORMAT_B8G8R8A8_SSCALED = VkFormat 47--pattern VK_FORMAT_B8G8R8A8_UINT = VkFormat 48--pattern VK_FORMAT_B8G8R8A8_SINT = VkFormat 49--pattern VK_FORMAT_B8G8R8A8_SRGB = VkFormat 50--pattern VK_FORMAT_A8B8G8R8_UNORM_PACK32 = VkFormat 51--pattern VK_FORMAT_A8B8G8R8_SNORM_PACK32 = VkFormat 52--pattern VK_FORMAT_A8B8G8R8_USCALED_PACK32 = VkFormat 53--pattern VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = VkFormat 54--pattern VK_FORMAT_A8B8G8R8_UINT_PACK32 = VkFormat 55--pattern VK_FORMAT_A8B8G8R8_SINT_PACK32 = VkFormat 56--pattern VK_FORMAT_A8B8G8R8_SRGB_PACK32 = VkFormat 57--pattern VK_FORMAT_A2R10G10B10_UNORM_PACK32 = VkFormat 58--pattern VK_FORMAT_A2R10G10B10_SNORM_PACK32 = VkFormat 59--pattern VK_FORMAT_A2R10G10B10_USCALED_PACK32 = VkFormat 60--pattern VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = VkFormat 61--pattern VK_FORMAT_A2R10G10B10_UINT_PACK32 = VkFormat 62--pattern VK_FORMAT_A2R10G10B10_SINT_PACK32 = VkFormat 63--pattern VK_FORMAT_A2B10G10R10_UNORM_PACK32 = VkFormat 64--pattern VK_FORMAT_A2B10G10R10_SNORM_PACK32 = VkFormat 65--pattern VK_FORMAT_A2B10G10R10_USCALED_PACK32 = VkFormat 66--pattern VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = VkFormat 67--pattern VK_FORMAT_A2B10G10R10_UINT_PACK32 = VkFormat 68--pattern VK_FORMAT_A2B10G10R10_SINT_PACK32 = VkFormat 69--pattern VK_FORMAT_R16_UNORM = VkFormat 70--pattern VK_FORMAT_R16_SNORM = VkFormat 71--pattern VK_FORMAT_R16_USCALED = VkFormat 72--pattern VK_FORMAT_R16_SSCALED = VkFormat 73--pattern VK_FORMAT_R16_UINT = VkFormat 74--pattern VK_FORMAT_R16_SINT = VkFormat 75--pattern VK_FORMAT_R16_SFLOAT = VkFormat 76--pattern VK_FORMAT_R16G16_UNORM = VkFormat 77--pattern VK_FORMAT_R16G16_SNORM = VkFormat 78--pattern VK_FORMAT_R16G16_USCALED = VkFormat 79--pattern VK_FORMAT_R16G16_SSCALED = VkFormat 80--pattern VK_FORMAT_R16G16_UINT = VkFormat 81--pattern VK_FORMAT_R16G16_SINT = VkFormat 82--pattern VK_FORMAT_R16G16_SFLOAT = VkFormat 83--pattern VK_FORMAT_R16G16B16_UNORM = VkFormat 84--pattern VK_FORMAT_R16G16B16_SNORM = VkFormat 85--pattern VK_FORMAT_R16G16B16_USCALED = VkFormat 86--pattern VK_FORMAT_R16G16B16_SSCALED = VkFormat 87--pattern VK_FORMAT_R16G16B16_UINT = VkFormat 88--pattern VK_FORMAT_R16G16B16_SINT = VkFormat 89--pattern VK_FORMAT_R16G16B16_SFLOAT = VkFormat 90--pattern VK_FORMAT_R16G16B16A16_UNORM = VkFormat 91--pattern VK_FORMAT_R16G16B16A16_SNORM = VkFormat 92--pattern VK_FORMAT_R16G16B16A16_USCALED = VkFormat 93--pattern VK_FORMAT_R16G16B16A16_SSCALED = VkFormat 94--pattern VK_FORMAT_R16G16B16A16_UINT = VkFormat 95--pattern VK_FORMAT_R16G16B16A16_SINT = VkFormat 96--pattern VK_FORMAT_R16G16B16A16_SFLOAT = VkFormat 97--pattern VK_FORMAT_R32_UINT = VkFormat 98--pattern VK_FORMAT_R32_SINT = VkFormat 99--pattern VK_FORMAT_R32_SFLOAT = VkFormat 100--pattern VK_FORMAT_R32G32_UINT = VkFormat 101--pattern VK_FORMAT_R32G32_SINT = VkFormat 102--pattern VK_FORMAT_R32G32_SFLOAT = VkFormat 103--pattern VK_FORMAT_R32G32B32_UINT = VkFormat 104--pattern VK_FORMAT_R32G32B32_SINT = VkFormat 105--pattern VK_FORMAT_R32G32B32_SFLOAT = VkFormat 106--pattern VK_FORMAT_R32G32B32A32_UINT = VkFormat 107--pattern VK_FORMAT_R32G32B32A32_SINT = VkFormat 108--pattern VK_FORMAT_R32G32B32A32_SFLOAT = VkFormat 109--pattern VK_FORMAT_R64_UINT = VkFormat 110--pattern VK_FORMAT_R64_SINT = VkFormat 111--pattern VK_FORMAT_R64_SFLOAT = VkFormat 112--pattern VK_FORMAT_R64G64_UINT = VkFormat 113--pattern VK_FORMAT_R64G64_SINT = VkFormat 114--pattern VK_FORMAT_R64G64_SFLOAT = VkFormat 115--pattern VK_FORMAT_R64G64B64_UINT = VkFormat 116--pattern VK_FORMAT_R64G64B64_SINT = VkFormat 117--pattern VK_FORMAT_R64G64B64_SFLOAT = VkFormat 118--pattern VK_FORMAT_R64G64B64A64_UINT = VkFormat 119--pattern VK_FORMAT_R64G64B64A64_SINT = VkFormat 120--pattern VK_FORMAT_R64G64B64A64_SFLOAT = VkFormat 121--pattern VK_FORMAT_B10G11R11_UFLOAT_PACK32 = VkFormat 122--pattern VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = VkFormat 123--pattern VK_FORMAT_D16_UNORM = VkFormat 124--pattern VK_FORMAT_X8_D24_UNORM_PACK32 = VkFormat 125--pattern VK_FORMAT_D32_SFLOAT = VkFormat 126--pattern VK_FORMAT_S8_UINT = VkFormat 127--pattern VK_FORMAT_D16_UNORM_S8_UINT = VkFormat 128--pattern VK_FORMAT_D24_UNORM_S8_UINT = VkFormat 129--pattern VK_FORMAT_D32_SFLOAT_S8_UINT = VkFormat 130--pattern VK_FORMAT_BC1_RGB_UNORM_BLOCK = VkFormat 131--pattern VK_FORMAT_BC1_RGB_SRGB_BLOCK = VkFormat 132--pattern VK_FORMAT_BC1_RGBA_UNORM_BLOCK = VkFormat 133--pattern VK_FORMAT_BC1_RGBA_SRGB_BLOCK = VkFormat 134--pattern VK_FORMAT_BC2_UNORM_BLOCK = VkFormat 135--pattern VK_FORMAT_BC2_SRGB_BLOCK = VkFormat 136--pattern VK_FORMAT_BC3_UNORM_BLOCK = VkFormat 137--pattern VK_FORMAT_BC3_SRGB_BLOCK = VkFormat 138--pattern VK_FORMAT_BC4_UNORM_BLOCK = VkFormat 139--pattern VK_FORMAT_BC4_SNORM_BLOCK = VkFormat 140--pattern VK_FORMAT_BC5_UNORM_BLOCK = VkFormat 141--pattern VK_FORMAT_BC5_SNORM_BLOCK = VkFormat 142--pattern VK_FORMAT_BC6H_UFLOAT_BLOCK = VkFormat 143--pattern VK_FORMAT_BC6H_SFLOAT_BLOCK = VkFormat 144--pattern VK_FORMAT_BC7_UNORM_BLOCK = VkFormat 145--pattern VK_FORMAT_BC7_SRGB_BLOCK = VkFormat 146--pattern VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = VkFormat 147--pattern VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = VkFormat 148--pattern VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = VkFormat 149--pattern VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = VkFormat 150--pattern VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = VkFormat 151--pattern VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = VkFormat 152--pattern VK_FORMAT_EAC_R11_UNORM_BLOCK = VkFormat 153--pattern VK_FORMAT_EAC_R11_SNORM_BLOCK = VkFormat 154--pattern VK_FORMAT_EAC_R11G11_UNORM_BLOCK = VkFormat 155--pattern VK_FORMAT_EAC_R11G11_SNORM_BLOCK = VkFormat 156--pattern VK_FORMAT_ASTC_4x4_UNORM_BLOCK = VkFormat 157--pattern VK_FORMAT_ASTC_4x4_SRGB_BLOCK = VkFormat 158--pattern VK_FORMAT_ASTC_5x4_UNORM_BLOCK = VkFormat 159--pattern VK_FORMAT_ASTC_5x4_SRGB_BLOCK = VkFormat 160--pattern VK_FORMAT_ASTC_5x5_UNORM_BLOCK = VkFormat 161--pattern VK_FORMAT_ASTC_5x5_SRGB_BLOCK = VkFormat 162--pattern VK_FORMAT_ASTC_6x5_UNORM_BLOCK = VkFormat 163--pattern VK_FORMAT_ASTC_6x5_SRGB_BLOCK = VkFormat 164--pattern VK_FORMAT_ASTC_6x6_UNORM_BLOCK = VkFormat 165--pattern VK_FORMAT_ASTC_6x6_SRGB_BLOCK = VkFormat 166--pattern VK_FORMAT_ASTC_8x5_UNORM_BLOCK = VkFormat 167--pattern VK_FORMAT_ASTC_8x5_SRGB_BLOCK = VkFormat 168--pattern VK_FORMAT_ASTC_8x6_UNORM_BLOCK = VkFormat 169--pattern VK_FORMAT_ASTC_8x6_SRGB_BLOCK = VkFormat 170--pattern VK_FORMAT_ASTC_8x8_UNORM_BLOCK = VkFormat 171--pattern VK_FORMAT_ASTC_8x8_SRGB_BLOCK = VkFormat 172--pattern VK_FORMAT_ASTC_10x5_UNORM_BLOCK = VkFormat 173--pattern VK_FORMAT_ASTC_10x5_SRGB_BLOCK = VkFormat 174--pattern VK_FORMAT_ASTC_10x6_UNORM_BLOCK = VkFormat 175--pattern VK_FORMAT_ASTC_10x6_SRGB_BLOCK = VkFormat 176--pattern VK_FORMAT_ASTC_10x8_UNORM_BLOCK = VkFormat 177--pattern VK_FORMAT_ASTC_10x8_SRGB_BLOCK = VkFormat 178--pattern VK_FORMAT_ASTC_10x10_UNORM_BLOCK = VkFormat 179--pattern VK_FORMAT_ASTC_10x10_SRGB_BLOCK = VkFormat 180--pattern VK_FORMAT_ASTC_12x10_UNORM_BLOCK = VkFormat 181--pattern VK_FORMAT_ASTC_12x10_SRGB_BLOCK = VkFormat 182--pattern VK_FORMAT_ASTC_12x12_UNORM_BLOCK = VkFormat 183--pattern VK_FORMAT_ASTC_12x12_SRGB_BLOCK = VkFormat 184---- ** VkStructureType--- | Structure type enumerant-newtype VkStructureType = VkStructureType Int32-  deriving (Eq, Storable)--pattern VK_STRUCTURE_TYPE_APPLICATION_INFO = VkStructureType 0--pattern VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = VkStructureType 1--pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = VkStructureType 2--pattern VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = VkStructureType 3--pattern VK_STRUCTURE_TYPE_SUBMIT_INFO = VkStructureType 4--pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = VkStructureType 5--pattern VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = VkStructureType 6--pattern VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = VkStructureType 7--pattern VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = VkStructureType 8--pattern VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = VkStructureType 9--pattern VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = VkStructureType 10--pattern VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = VkStructureType 11--pattern VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = VkStructureType 12--pattern VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = VkStructureType 13--pattern VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = VkStructureType 14--pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = VkStructureType 15--pattern VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = VkStructureType 16--pattern VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = VkStructureType 17--pattern VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = VkStructureType 18--pattern VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = VkStructureType 19--pattern VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = VkStructureType 20--pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = VkStructureType 21--pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = VkStructureType 22--pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = VkStructureType 23--pattern VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = VkStructureType 24--pattern VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = VkStructureType 25--pattern VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = VkStructureType 26--pattern VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = VkStructureType 27--pattern VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = VkStructureType 28--pattern VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = VkStructureType 29--pattern VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = VkStructureType 30--pattern VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = VkStructureType 31--pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = VkStructureType 32--pattern VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = VkStructureType 33--pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = VkStructureType 34--pattern VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = VkStructureType 35--pattern VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = VkStructureType 36--pattern VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = VkStructureType 37--pattern VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = VkStructureType 38--pattern VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = VkStructureType 39--pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = VkStructureType 40--pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = VkStructureType 41--pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = VkStructureType 42--pattern VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = VkStructureType 43--pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = VkStructureType 44--pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = VkStructureType 45--pattern VK_STRUCTURE_TYPE_MEMORY_BARRIER = VkStructureType 46--pattern VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = VkStructureType 47--pattern VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = VkStructureType 48---- ** VkSubpassContents--newtype VkSubpassContents = VkSubpassContents Int32-  deriving (Eq, Storable)--pattern VK_SUBPASS_CONTENTS_INLINE = VkSubpassContents 0--pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = VkSubpassContents 1---- ** VkResult--- | Error and return codes-newtype VkResult = VkResult Int32-  deriving (Eq, Storable)--- | Command completed successfully-pattern VK_SUCCESS = VkResult 0--- | A fence or query has not yet completed-pattern VK_NOT_READY = VkResult 1--- | A wait operation has not completed in the specified time-pattern VK_TIMEOUT = VkResult 2--- | An event is signaled-pattern VK_EVENT_SET = VkResult 3--- | An event is unsignalled-pattern VK_EVENT_RESET = VkResult 4--- | A return array was too small for the resul-pattern VK_INCOMPLETE = VkResult 5--- | A host memory allocation has failed-pattern VK_ERROR_OUT_OF_HOST_MEMORY = VkResult (-1)--- | A device memory allocation has failed-pattern VK_ERROR_OUT_OF_DEVICE_MEMORY = VkResult (-2)--- | The logical device has been lost. See <<devsandqueues-lost-device>>-pattern VK_ERROR_INITIALIZATION_FAILED = VkResult (-3)--- | Initialization of a object has failed-pattern VK_ERROR_DEVICE_LOST = VkResult (-4)--- | Mapping of a memory object has failed-pattern VK_ERROR_MEMORY_MAP_FAILED = VkResult (-5)--- | Layer specified does not exist-pattern VK_ERROR_LAYER_NOT_PRESENT = VkResult (-6)--- | Extension specified does not exist-pattern VK_ERROR_EXTENSION_NOT_PRESENT = VkResult (-7)--- | Requested feature is not available on this device-pattern VK_ERROR_FEATURE_NOT_PRESENT = VkResult (-8)--- | Unable to find a Vulkan driver-pattern VK_ERROR_INCOMPATIBLE_DRIVER = VkResult (-9)--- | Too many objects of the type have already been created-pattern VK_ERROR_TOO_MANY_OBJECTS = VkResult (-10)--- | Requested format is not supported on this device-pattern VK_ERROR_FORMAT_NOT_SUPPORTED = VkResult (-11)---- ** VkDynamicState--newtype VkDynamicState = VkDynamicState Int32-  deriving (Eq, Storable)--pattern VK_DYNAMIC_STATE_VIEWPORT = VkDynamicState 0--pattern VK_DYNAMIC_STATE_SCISSOR = VkDynamicState 1--pattern VK_DYNAMIC_STATE_LINE_WIDTH = VkDynamicState 2--pattern VK_DYNAMIC_STATE_DEPTH_BIAS = VkDynamicState 3--pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS = VkDynamicState 4--pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS = VkDynamicState 5--pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = VkDynamicState 6--pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = VkDynamicState 7--pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE = VkDynamicState 8---- ** VkPresentModeKHR--newtype VkPresentModeKHR = VkPresentModeKHR Int32-  deriving (Eq, Storable)--pattern VK_PRESENT_MODE_IMMEDIATE_KHR = VkPresentModeKHR 0--pattern VK_PRESENT_MODE_MAILBOX_KHR = VkPresentModeKHR 1--pattern VK_PRESENT_MODE_FIFO_KHR = VkPresentModeKHR 2--pattern VK_PRESENT_MODE_FIFO_RELAXED_KHR = VkPresentModeKHR 3---- ** VkColorSpaceKHR--newtype VkColorSpaceKHR = VkColorSpaceKHR Int32-  deriving (Eq, Storable)--pattern VK_COLORSPACE_SRGB_NONLINEAR_KHR = VkColorSpaceKHR 0---- ** VkDebugReportObjectTypeEXT--newtype VkDebugReportObjectTypeEXT = VkDebugReportObjectTypeEXT Int32-  deriving (Eq, Storable)--pattern VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = VkDebugReportObjectTypeEXT 0--pattern VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = VkDebugReportObjectTypeEXT 1--pattern VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = VkDebugReportObjectTypeEXT 2--pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = VkDebugReportObjectTypeEXT 3--pattern VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = VkDebugReportObjectTypeEXT 4--pattern VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = VkDebugReportObjectTypeEXT 5--pattern VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = VkDebugReportObjectTypeEXT 6--pattern VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = VkDebugReportObjectTypeEXT 7--pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = VkDebugReportObjectTypeEXT 8--pattern VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = VkDebugReportObjectTypeEXT 9--pattern VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = VkDebugReportObjectTypeEXT 10--pattern VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = VkDebugReportObjectTypeEXT 11--pattern VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = VkDebugReportObjectTypeEXT 12--pattern VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = VkDebugReportObjectTypeEXT 13--pattern VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = VkDebugReportObjectTypeEXT 14--pattern VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = VkDebugReportObjectTypeEXT 15--pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = VkDebugReportObjectTypeEXT 16--pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = VkDebugReportObjectTypeEXT 17--pattern VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = VkDebugReportObjectTypeEXT 18--pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = VkDebugReportObjectTypeEXT 19--pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = VkDebugReportObjectTypeEXT 20--pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = VkDebugReportObjectTypeEXT 21--pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = VkDebugReportObjectTypeEXT 22--pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = VkDebugReportObjectTypeEXT 23--pattern VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = VkDebugReportObjectTypeEXT 24--pattern VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = VkDebugReportObjectTypeEXT 25--pattern VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = VkDebugReportObjectTypeEXT 26--pattern VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = VkDebugReportObjectTypeEXT 27--pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VkDebugReportObjectTypeEXT 28---- ** VkDebugReportErrorEXT--newtype VkDebugReportErrorEXT = VkDebugReportErrorEXT Int32-  deriving (Eq, Storable)--pattern VK_DEBUG_REPORT_ERROR_NONE_EXT = VkDebugReportErrorEXT 0--pattern VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT = VkDebugReportErrorEXT 1---- * Struct Types---data VkOffset2D =-  VkOffset2D{ vkX :: Int32 -            , vkY :: Int32 -            }-  deriving (Eq)--instance Storable VkOffset2D where-  sizeOf ~_ = 8-  alignment ~_ = 4-  peek ptr = VkOffset2D <$> peek (ptr `plusPtr` 0)-                        <*> peek (ptr `plusPtr` 4)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkOffset2D))-                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkOffset2D))----data VkOffset3D =-  VkOffset3D{ vkX :: Int32 -            , vkY :: Int32 -            , vkZ :: Int32 -            }-  deriving (Eq)--instance Storable VkOffset3D where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek ptr = VkOffset3D <$> peek (ptr `plusPtr` 0)-                        <*> peek (ptr `plusPtr` 4)-                        <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkOffset3D))-                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkOffset3D))-                *> poke (ptr `plusPtr` 8) (vkZ (poked :: VkOffset3D))----data VkExtent2D =-  VkExtent2D{ vkWidth :: Word32 -            , vkHeight :: Word32 -            }-  deriving (Eq)--instance Storable VkExtent2D where-  sizeOf ~_ = 8-  alignment ~_ = 4-  peek ptr = VkExtent2D <$> peek (ptr `plusPtr` 0)-                        <*> peek (ptr `plusPtr` 4)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkWidth (poked :: VkExtent2D))-                *> poke (ptr `plusPtr` 4) (vkHeight (poked :: VkExtent2D))----data VkExtent3D =-  VkExtent3D{ vkWidth :: Word32 -            , vkHeight :: Word32 -            , vkDepth :: Word32 -            }-  deriving (Eq)--instance Storable VkExtent3D where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek ptr = VkExtent3D <$> peek (ptr `plusPtr` 0)-                        <*> peek (ptr `plusPtr` 4)-                        <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkWidth (poked :: VkExtent3D))-                *> poke (ptr `plusPtr` 4) (vkHeight (poked :: VkExtent3D))-                *> poke (ptr `plusPtr` 8) (vkDepth (poked :: VkExtent3D))----data VkViewport =-  VkViewport{ vkX :: CFloat -            , vkY :: CFloat -            , vkWidth :: CFloat -            , vkHeight :: CFloat -            , vkMinDepth :: CFloat -            , vkMaxDepth :: CFloat -            }-  deriving (Eq)--instance Storable VkViewport where-  sizeOf ~_ = 24-  alignment ~_ = 4-  peek ptr = VkViewport <$> peek (ptr `plusPtr` 0)-                        <*> peek (ptr `plusPtr` 4)-                        <*> peek (ptr `plusPtr` 8)-                        <*> peek (ptr `plusPtr` 12)-                        <*> peek (ptr `plusPtr` 16)-                        <*> peek (ptr `plusPtr` 20)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkViewport))-                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkViewport))-                *> poke (ptr `plusPtr` 8) (vkWidth (poked :: VkViewport))-                *> poke (ptr `plusPtr` 12) (vkHeight (poked :: VkViewport))-                *> poke (ptr `plusPtr` 16) (vkMinDepth (poked :: VkViewport))-                *> poke (ptr `plusPtr` 20) (vkMaxDepth (poked :: VkViewport))----data VkRect2D =-  VkRect2D{ vkOffset :: VkOffset2D -          , vkExtent :: VkExtent2D -          }-  deriving (Eq)--instance Storable VkRect2D where-  sizeOf ~_ = 16-  alignment ~_ = 4-  peek ptr = VkRect2D <$> peek (ptr `plusPtr` 0)-                      <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkRect2D))-                *> poke (ptr `plusPtr` 8) (vkExtent (poked :: VkRect2D))----data VkRect3D =-  VkRect3D{ vkOffset :: VkOffset3D -          , vkExtent :: VkExtent3D -          }-  deriving (Eq)--instance Storable VkRect3D where-  sizeOf ~_ = 24-  alignment ~_ = 4-  peek ptr = VkRect3D <$> peek (ptr `plusPtr` 0)-                      <*> peek (ptr `plusPtr` 12)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkRect3D))-                *> poke (ptr `plusPtr` 12) (vkExtent (poked :: VkRect3D))----data VkClearRect =-  VkClearRect{ vkRect :: VkRect2D -             , vkBaseArrayLayer :: Word32 -             , vkLayerCount :: Word32 -             }-  deriving (Eq)--instance Storable VkClearRect where-  sizeOf ~_ = 24-  alignment ~_ = 4-  peek ptr = VkClearRect <$> peek (ptr `plusPtr` 0)-                         <*> peek (ptr `plusPtr` 16)-                         <*> peek (ptr `plusPtr` 20)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkRect (poked :: VkClearRect))-                *> poke (ptr `plusPtr` 16) (vkBaseArrayLayer (poked :: VkClearRect))-                *> poke (ptr `plusPtr` 20) (vkLayerCount (poked :: VkClearRect))----data VkComponentMapping =-  VkComponentMapping{ vkR :: VkComponentSwizzle -                    , vkG :: VkComponentSwizzle -                    , vkB :: VkComponentSwizzle -                    , vkA :: VkComponentSwizzle -                    }-  deriving (Eq)--instance Storable VkComponentMapping where-  sizeOf ~_ = 16-  alignment ~_ = 4-  peek ptr = VkComponentMapping <$> peek (ptr `plusPtr` 0)-                                <*> peek (ptr `plusPtr` 4)-                                <*> peek (ptr `plusPtr` 8)-                                <*> peek (ptr `plusPtr` 12)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkR (poked :: VkComponentMapping))-                *> poke (ptr `plusPtr` 4) (vkG (poked :: VkComponentMapping))-                *> poke (ptr `plusPtr` 8) (vkB (poked :: VkComponentMapping))-                *> poke (ptr `plusPtr` 12) (vkA (poked :: VkComponentMapping))----data VkPhysicalDeviceProperties =-  VkPhysicalDeviceProperties{ vkApiVersion :: Word32 -                            , vkDriverVersion :: Word32 -                            , vkVendorID :: Word32 -                            , vkDeviceID :: Word32 -                            , vkDeviceType :: VkPhysicalDeviceType -                            , vkDeviceName :: Vec (ToPeano VK_MAX_PHYSICAL_DEVICE_NAME_SIZE) CChar -                            , vkPipelineCacheUUID :: Vec (ToPeano VK_UUID_SIZE) Word8 -                            , vkLimits :: VkPhysicalDeviceLimits -                            , vkSparseProperties :: VkPhysicalDeviceSparseProperties -                            }-  deriving (Eq)--instance Storable VkPhysicalDeviceProperties where-  sizeOf ~_ = 824-  alignment ~_ = 8-  peek ptr = VkPhysicalDeviceProperties <$> peek (ptr `plusPtr` 0)-                                        <*> peek (ptr `plusPtr` 4)-                                        <*> peek (ptr `plusPtr` 8)-                                        <*> peek (ptr `plusPtr` 12)-                                        <*> peek (ptr `plusPtr` 16)-                                        <*> peek (ptr `plusPtr` 20)-                                        <*> peek (ptr `plusPtr` 276)-                                        <*> peek (ptr `plusPtr` 296)-                                        <*> peek (ptr `plusPtr` 800)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkApiVersion (poked :: VkPhysicalDeviceProperties))-                *> poke (ptr `plusPtr` 4) (vkDriverVersion (poked :: VkPhysicalDeviceProperties))-                *> poke (ptr `plusPtr` 8) (vkVendorID (poked :: VkPhysicalDeviceProperties))-                *> poke (ptr `plusPtr` 12) (vkDeviceID (poked :: VkPhysicalDeviceProperties))-                *> poke (ptr `plusPtr` 16) (vkDeviceType (poked :: VkPhysicalDeviceProperties))-                *> poke (ptr `plusPtr` 20) (vkDeviceName (poked :: VkPhysicalDeviceProperties))-                *> poke (ptr `plusPtr` 276) (vkPipelineCacheUUID (poked :: VkPhysicalDeviceProperties))-                *> poke (ptr `plusPtr` 296) (vkLimits (poked :: VkPhysicalDeviceProperties))-                *> poke (ptr `plusPtr` 800) (vkSparseProperties (poked :: VkPhysicalDeviceProperties))----data VkExtensionProperties =-  VkExtensionProperties{ vkExtensionName :: Vec (ToPeano VK_MAX_EXTENSION_NAME_SIZE) CChar -                       , vkSpecVersion :: Word32 -                       }-  deriving (Eq)--instance Storable VkExtensionProperties where-  sizeOf ~_ = 260-  alignment ~_ = 4-  peek ptr = VkExtensionProperties <$> peek (ptr `plusPtr` 0)-                                   <*> peek (ptr `plusPtr` 256)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkExtensionName (poked :: VkExtensionProperties))-                *> poke (ptr `plusPtr` 256) (vkSpecVersion (poked :: VkExtensionProperties))----data VkLayerProperties =-  VkLayerProperties{ vkLayerName :: Vec (ToPeano VK_MAX_EXTENSION_NAME_SIZE) CChar -                   , vkSpecVersion :: Word32 -                   , vkImplementationVersion :: Word32 -                   , vkDescription :: Vec (ToPeano VK_MAX_DESCRIPTION_SIZE) CChar -                   }-  deriving (Eq)--instance Storable VkLayerProperties where-  sizeOf ~_ = 520-  alignment ~_ = 4-  peek ptr = VkLayerProperties <$> peek (ptr `plusPtr` 0)-                               <*> peek (ptr `plusPtr` 256)-                               <*> peek (ptr `plusPtr` 260)-                               <*> peek (ptr `plusPtr` 264)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkLayerName (poked :: VkLayerProperties))-                *> poke (ptr `plusPtr` 256) (vkSpecVersion (poked :: VkLayerProperties))-                *> poke (ptr `plusPtr` 260) (vkImplementationVersion (poked :: VkLayerProperties))-                *> poke (ptr `plusPtr` 264) (vkDescription (poked :: VkLayerProperties))----data VkApplicationInfo =-  VkApplicationInfo{ vkSType :: VkStructureType -                   , vkPNext :: Ptr Void -                   , vkPApplicationName :: Ptr CChar -                   , vkApplicationVersion :: Word32 -                   , vkPEngineName :: Ptr CChar -                   , vkEngineVersion :: Word32 -                   , vkApiVersion :: Word32 -                   }-  deriving (Eq)--instance Storable VkApplicationInfo where-  sizeOf ~_ = 48-  alignment ~_ = 8-  peek ptr = VkApplicationInfo <$> 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)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkApplicationInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkApplicationInfo))-                *> poke (ptr `plusPtr` 16) (vkPApplicationName (poked :: VkApplicationInfo))-                *> poke (ptr `plusPtr` 24) (vkApplicationVersion (poked :: VkApplicationInfo))-                *> poke (ptr `plusPtr` 32) (vkPEngineName (poked :: VkApplicationInfo))-                *> poke (ptr `plusPtr` 40) (vkEngineVersion (poked :: VkApplicationInfo))-                *> poke (ptr `plusPtr` 44) (vkApiVersion (poked :: VkApplicationInfo))----data VkAllocationCallbacks =-  VkAllocationCallbacks{ vkPUserData :: Ptr Void -                       , vkPfnAllocation :: PFN_vkAllocationFunction -                       , vkPfnReallocation :: PFN_vkReallocationFunction -                       , vkPfnFree :: PFN_vkFreeFunction -                       , vkPfnInternalAllocation :: PFN_vkInternalAllocationNotification -                       , vkPfnInternalFree :: PFN_vkInternalFreeNotification -                       }-  deriving (Eq)--instance Storable VkAllocationCallbacks where-  sizeOf ~_ = 48-  alignment ~_ = 8-  peek ptr = VkAllocationCallbacks <$> peek (ptr `plusPtr` 0)-                                   <*> peek (ptr `plusPtr` 8)-                                   <*> peek (ptr `plusPtr` 16)-                                   <*> peek (ptr `plusPtr` 24)-                                   <*> peek (ptr `plusPtr` 32)-                                   <*> peek (ptr `plusPtr` 40)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkPUserData (poked :: VkAllocationCallbacks))-                *> poke (ptr `plusPtr` 8) (vkPfnAllocation (poked :: VkAllocationCallbacks))-                *> poke (ptr `plusPtr` 16) (vkPfnReallocation (poked :: VkAllocationCallbacks))-                *> poke (ptr `plusPtr` 24) (vkPfnFree (poked :: VkAllocationCallbacks))-                *> poke (ptr `plusPtr` 32) (vkPfnInternalAllocation (poked :: VkAllocationCallbacks))-                *> poke (ptr `plusPtr` 40) (vkPfnInternalFree (poked :: VkAllocationCallbacks))----data VkDeviceQueueCreateInfo =-  VkDeviceQueueCreateInfo{ vkSType :: VkStructureType -                         , vkPNext :: Ptr Void -                         , vkFlags :: VkDeviceQueueCreateFlags -                         , vkQueueFamilyIndex :: Word32 -                         , vkQueueCount :: Word32 -                         , vkPQueuePriorities :: Ptr CFloat -                         }-  deriving (Eq)--instance Storable VkDeviceQueueCreateInfo where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek ptr = VkDeviceQueueCreateInfo <$> peek (ptr `plusPtr` 0)-                                     <*> peek (ptr `plusPtr` 8)-                                     <*> peek (ptr `plusPtr` 16)-                                     <*> peek (ptr `plusPtr` 20)-                                     <*> peek (ptr `plusPtr` 24)-                                     <*> peek (ptr `plusPtr` 32)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceQueueCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceQueueCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceQueueCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkQueueFamilyIndex (poked :: VkDeviceQueueCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkQueueCount (poked :: VkDeviceQueueCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkPQueuePriorities (poked :: VkDeviceQueueCreateInfo))----data VkDeviceCreateInfo =-  VkDeviceCreateInfo{ vkSType :: VkStructureType -                    , vkPNext :: Ptr Void -                    , vkFlags :: VkDeviceCreateFlags -                    , vkQueueCreateInfoCount :: Word32 -                    , vkPQueueCreateInfos :: Ptr VkDeviceQueueCreateInfo -                    , vkEnabledLayerCount :: Word32 -                    , vkPpEnabledLayerNames :: Ptr (Ptr CChar) -                    , vkEnabledExtensionCount :: Word32 -                    , vkPpEnabledExtensionNames :: Ptr (Ptr CChar) -                    , vkPEnabledFeatures :: Ptr VkPhysicalDeviceFeatures -                    }-  deriving (Eq)--instance Storable VkDeviceCreateInfo where-  sizeOf ~_ = 72-  alignment ~_ = 8-  peek ptr = VkDeviceCreateInfo <$> peek (ptr `plusPtr` 0)-                                <*> peek (ptr `plusPtr` 8)-                                <*> peek (ptr `plusPtr` 16)-                                <*> peek (ptr `plusPtr` 20)-                                <*> peek (ptr `plusPtr` 24)-                                <*> peek (ptr `plusPtr` 32)-                                <*> peek (ptr `plusPtr` 40)-                                <*> peek (ptr `plusPtr` 48)-                                <*> peek (ptr `plusPtr` 56)-                                <*> peek (ptr `plusPtr` 64)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkQueueCreateInfoCount (poked :: VkDeviceCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPQueueCreateInfos (poked :: VkDeviceCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkDeviceCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkPpEnabledLayerNames (poked :: VkDeviceCreateInfo))-                *> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkDeviceCreateInfo))-                *> poke (ptr `plusPtr` 56) (vkPpEnabledExtensionNames (poked :: VkDeviceCreateInfo))-                *> poke (ptr `plusPtr` 64) (vkPEnabledFeatures (poked :: VkDeviceCreateInfo))----data VkInstanceCreateInfo =-  VkInstanceCreateInfo{ vkSType :: VkStructureType -                      , vkPNext :: Ptr Void -                      , vkFlags :: VkInstanceCreateFlags -                      , vkPApplicationInfo :: Ptr VkApplicationInfo -                      , vkEnabledLayerCount :: Word32 -                      , vkPpEnabledLayerNames :: Ptr (Ptr CChar) -                      , vkEnabledExtensionCount :: Word32 -                      , vkPpEnabledExtensionNames :: Ptr (Ptr CChar) -                      }-  deriving (Eq)--instance Storable VkInstanceCreateInfo where-  sizeOf ~_ = 64-  alignment ~_ = 8-  peek ptr = VkInstanceCreateInfo <$> 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` 48)-                                  <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkInstanceCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkInstanceCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkInstanceCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPApplicationInfo (poked :: VkInstanceCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkInstanceCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkPpEnabledLayerNames (poked :: VkInstanceCreateInfo))-                *> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkInstanceCreateInfo))-                *> poke (ptr `plusPtr` 56) (vkPpEnabledExtensionNames (poked :: VkInstanceCreateInfo))----data VkQueueFamilyProperties =-  VkQueueFamilyProperties{ vkQueueFlags :: VkQueueFlags -                         , vkQueueCount :: Word32 -                         , vkTimestampValidBits :: Word32 -                         , vkMinImageTransferGranularity :: VkExtent3D -                         }-  deriving (Eq)--instance Storable VkQueueFamilyProperties where-  sizeOf ~_ = 24-  alignment ~_ = 4-  peek ptr = VkQueueFamilyProperties <$> peek (ptr `plusPtr` 0)-                                     <*> peek (ptr `plusPtr` 4)-                                     <*> peek (ptr `plusPtr` 8)-                                     <*> peek (ptr `plusPtr` 12)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkQueueFlags (poked :: VkQueueFamilyProperties))-                *> poke (ptr `plusPtr` 4) (vkQueueCount (poked :: VkQueueFamilyProperties))-                *> poke (ptr `plusPtr` 8) (vkTimestampValidBits (poked :: VkQueueFamilyProperties))-                *> poke (ptr `plusPtr` 12) (vkMinImageTransferGranularity (poked :: VkQueueFamilyProperties))----data VkPhysicalDeviceMemoryProperties =-  VkPhysicalDeviceMemoryProperties{ vkMemoryTypeCount :: Word32 -                                  , vkMemoryTypes :: Vec (ToPeano VK_MAX_MEMORY_TYPES) VkMemoryType -                                  , vkMemoryHeapCount :: Word32 -                                  , vkMemoryHeaps :: Vec (ToPeano VK_MAX_MEMORY_HEAPS) VkMemoryHeap -                                  }-  deriving (Eq)--instance Storable VkPhysicalDeviceMemoryProperties where-  sizeOf ~_ = 520-  alignment ~_ = 8-  peek ptr = VkPhysicalDeviceMemoryProperties <$> peek (ptr `plusPtr` 0)-                                              <*> peek (ptr `plusPtr` 4)-                                              <*> peek (ptr `plusPtr` 260)-                                              <*> peek (ptr `plusPtr` 264)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkMemoryTypeCount (poked :: VkPhysicalDeviceMemoryProperties))-                *> poke (ptr `plusPtr` 4) (vkMemoryTypes (poked :: VkPhysicalDeviceMemoryProperties))-                *> poke (ptr `plusPtr` 260) (vkMemoryHeapCount (poked :: VkPhysicalDeviceMemoryProperties))-                *> poke (ptr `plusPtr` 264) (vkMemoryHeaps (poked :: VkPhysicalDeviceMemoryProperties))----data VkMemoryAllocateInfo =-  VkMemoryAllocateInfo{ vkSType :: VkStructureType -                      , vkPNext :: Ptr Void -                      , vkAllocationSize :: VkDeviceSize -                      , vkMemoryTypeIndex :: Word32 -                      }-  deriving (Eq)--instance Storable VkMemoryAllocateInfo where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek ptr = VkMemoryAllocateInfo <$> 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 :: VkMemoryAllocateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryAllocateInfo))-                *> poke (ptr `plusPtr` 16) (vkAllocationSize (poked :: VkMemoryAllocateInfo))-                *> poke (ptr `plusPtr` 24) (vkMemoryTypeIndex (poked :: VkMemoryAllocateInfo))----data VkMemoryRequirements =-  VkMemoryRequirements{ vkSize :: VkDeviceSize -                      , vkAlignment :: VkDeviceSize -                      , vkMemoryTypeBits :: Word32 -                      }-  deriving (Eq)--instance Storable VkMemoryRequirements where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkMemoryRequirements <$> peek (ptr `plusPtr` 0)-                                  <*> peek (ptr `plusPtr` 8)-                                  <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryRequirements))-                *> poke (ptr `plusPtr` 8) (vkAlignment (poked :: VkMemoryRequirements))-                *> poke (ptr `plusPtr` 16) (vkMemoryTypeBits (poked :: VkMemoryRequirements))----data VkSparseImageFormatProperties =-  VkSparseImageFormatProperties{ vkAspectMask :: VkImageAspectFlags -                               , vkImageGranularity :: VkExtent3D -                               , vkFlags :: VkSparseImageFormatFlags -                               }-  deriving (Eq)--instance Storable VkSparseImageFormatProperties where-  sizeOf ~_ = 20-  alignment ~_ = 4-  peek ptr = VkSparseImageFormatProperties <$> peek (ptr `plusPtr` 0)-                                           <*> peek (ptr `plusPtr` 4)-                                           <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkSparseImageFormatProperties))-                *> poke (ptr `plusPtr` 4) (vkImageGranularity (poked :: VkSparseImageFormatProperties))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSparseImageFormatProperties))----data VkSparseImageMemoryRequirements =-  VkSparseImageMemoryRequirements{ vkFormatProperties :: VkSparseImageFormatProperties -                                 , vkImageMipTailFirstLod :: Word32 -                                 , vkImageMipTailSize :: VkDeviceSize -                                 , vkImageMipTailOffset :: VkDeviceSize -                                 , vkImageMipTailStride :: VkDeviceSize -                                 }-  deriving (Eq)--instance Storable VkSparseImageMemoryRequirements where-  sizeOf ~_ = 48-  alignment ~_ = 8-  peek ptr = VkSparseImageMemoryRequirements <$> peek (ptr `plusPtr` 0)-                                             <*> peek (ptr `plusPtr` 20)-                                             <*> peek (ptr `plusPtr` 24)-                                             <*> peek (ptr `plusPtr` 32)-                                             <*> peek (ptr `plusPtr` 40)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkFormatProperties (poked :: VkSparseImageMemoryRequirements))-                *> poke (ptr `plusPtr` 20) (vkImageMipTailFirstLod (poked :: VkSparseImageMemoryRequirements))-                *> poke (ptr `plusPtr` 24) (vkImageMipTailSize (poked :: VkSparseImageMemoryRequirements))-                *> poke (ptr `plusPtr` 32) (vkImageMipTailOffset (poked :: VkSparseImageMemoryRequirements))-                *> poke (ptr `plusPtr` 40) (vkImageMipTailStride (poked :: VkSparseImageMemoryRequirements))----data VkMemoryType =-  VkMemoryType{ vkPropertyFlags :: VkMemoryPropertyFlags -              , vkHeapIndex :: Word32 -              }-  deriving (Eq)--instance Storable VkMemoryType where-  sizeOf ~_ = 8-  alignment ~_ = 4-  peek ptr = VkMemoryType <$> peek (ptr `plusPtr` 0)-                          <*> peek (ptr `plusPtr` 4)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkPropertyFlags (poked :: VkMemoryType))-                *> poke (ptr `plusPtr` 4) (vkHeapIndex (poked :: VkMemoryType))----data VkMemoryHeap =-  VkMemoryHeap{ vkSize :: VkDeviceSize -              , vkFlags :: VkMemoryHeapFlags -              }-  deriving (Eq)--instance Storable VkMemoryHeap where-  sizeOf ~_ = 16-  alignment ~_ = 8-  peek ptr = VkMemoryHeap <$> peek (ptr `plusPtr` 0)-                          <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryHeap))-                *> poke (ptr `plusPtr` 8) (vkFlags (poked :: VkMemoryHeap))----data VkMappedMemoryRange =-  VkMappedMemoryRange{ vkSType :: VkStructureType -                     , vkPNext :: Ptr Void -                     , vkMemory :: VkDeviceMemory -                     , vkOffset :: VkDeviceSize -                     , vkSize :: VkDeviceSize -                     }-  deriving (Eq)--instance Storable VkMappedMemoryRange where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek ptr = VkMappedMemoryRange <$> peek (ptr `plusPtr` 0)-                                 <*> peek (ptr `plusPtr` 8)-                                 <*> peek (ptr `plusPtr` 16)-                                 <*> peek (ptr `plusPtr` 24)-                                 <*> peek (ptr `plusPtr` 32)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMappedMemoryRange))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMappedMemoryRange))-                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkMappedMemoryRange))-                *> poke (ptr `plusPtr` 24) (vkOffset (poked :: VkMappedMemoryRange))-                *> poke (ptr `plusPtr` 32) (vkSize (poked :: VkMappedMemoryRange))----data VkFormatProperties =-  VkFormatProperties{ vkLinearTilingFeatures :: VkFormatFeatureFlags -                    , vkOptimalTilingFeatures :: VkFormatFeatureFlags -                    , vkBufferFeatures :: VkFormatFeatureFlags -                    }-  deriving (Eq)--instance Storable VkFormatProperties where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek ptr = VkFormatProperties <$> peek (ptr `plusPtr` 0)-                                <*> peek (ptr `plusPtr` 4)-                                <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkLinearTilingFeatures (poked :: VkFormatProperties))-                *> poke (ptr `plusPtr` 4) (vkOptimalTilingFeatures (poked :: VkFormatProperties))-                *> poke (ptr `plusPtr` 8) (vkBufferFeatures (poked :: VkFormatProperties))----data VkImageFormatProperties =-  VkImageFormatProperties{ vkMaxExtent :: VkExtent3D -                         , vkMaxMipLevels :: Word32 -                         , vkMaxArrayLayers :: Word32 -                         , vkSampleCounts :: VkSampleCountFlags -                         , vkMaxResourceSize :: VkDeviceSize -                         }-  deriving (Eq)--instance Storable VkImageFormatProperties where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek ptr = VkImageFormatProperties <$> peek (ptr `plusPtr` 0)-                                     <*> peek (ptr `plusPtr` 12)-                                     <*> peek (ptr `plusPtr` 16)-                                     <*> peek (ptr `plusPtr` 20)-                                     <*> peek (ptr `plusPtr` 24)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxExtent (poked :: VkImageFormatProperties))-                *> poke (ptr `plusPtr` 12) (vkMaxMipLevels (poked :: VkImageFormatProperties))-                *> poke (ptr `plusPtr` 16) (vkMaxArrayLayers (poked :: VkImageFormatProperties))-                *> poke (ptr `plusPtr` 20) (vkSampleCounts (poked :: VkImageFormatProperties))-                *> poke (ptr `plusPtr` 24) (vkMaxResourceSize (poked :: VkImageFormatProperties))----data VkDescriptorBufferInfo =-  VkDescriptorBufferInfo{ vkBuffer :: VkBuffer -                        , vkOffset :: VkDeviceSize -                        , vkRange :: VkDeviceSize -                        }-  deriving (Eq)--instance Storable VkDescriptorBufferInfo where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkDescriptorBufferInfo <$> peek (ptr `plusPtr` 0)-                                    <*> peek (ptr `plusPtr` 8)-                                    <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBuffer (poked :: VkDescriptorBufferInfo))-                *> poke (ptr `plusPtr` 8) (vkOffset (poked :: VkDescriptorBufferInfo))-                *> poke (ptr `plusPtr` 16) (vkRange (poked :: VkDescriptorBufferInfo))----data VkDescriptorImageInfo =-  VkDescriptorImageInfo{ vkSampler :: VkSampler -                       , vkImageView :: VkImageView -                       , vkImageLayout :: VkImageLayout -                       }-  deriving (Eq)--instance Storable VkDescriptorImageInfo where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkDescriptorImageInfo <$> peek (ptr `plusPtr` 0)-                                   <*> peek (ptr `plusPtr` 8)-                                   <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSampler (poked :: VkDescriptorImageInfo))-                *> poke (ptr `plusPtr` 8) (vkImageView (poked :: VkDescriptorImageInfo))-                *> poke (ptr `plusPtr` 16) (vkImageLayout (poked :: VkDescriptorImageInfo))----data VkWriteDescriptorSet =-  VkWriteDescriptorSet{ vkSType :: VkStructureType -                      , vkPNext :: Ptr Void -                      , vkDstSet :: VkDescriptorSet -                      , vkDstBinding :: Word32 -                      , vkDstArrayElement :: Word32 -                      , vkDescriptorCount :: Word32 -                      , vkDescriptorType :: VkDescriptorType -                      , vkPImageInfo :: Ptr VkDescriptorImageInfo -                      , vkPBufferInfo :: Ptr VkDescriptorBufferInfo -                      , vkPTexelBufferView :: Ptr VkBufferView -                      }-  deriving (Eq)--instance Storable VkWriteDescriptorSet where-  sizeOf ~_ = 64-  alignment ~_ = 8-  peek ptr = VkWriteDescriptorSet <$> peek (ptr `plusPtr` 0)-                                  <*> peek (ptr `plusPtr` 8)-                                  <*> peek (ptr `plusPtr` 16)-                                  <*> peek (ptr `plusPtr` 24)-                                  <*> peek (ptr `plusPtr` 28)-                                  <*> peek (ptr `plusPtr` 32)-                                  <*> peek (ptr `plusPtr` 36)-                                  <*> peek (ptr `plusPtr` 40)-                                  <*> peek (ptr `plusPtr` 48)-                                  <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkWriteDescriptorSet))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkWriteDescriptorSet))-                *> poke (ptr `plusPtr` 16) (vkDstSet (poked :: VkWriteDescriptorSet))-                *> poke (ptr `plusPtr` 24) (vkDstBinding (poked :: VkWriteDescriptorSet))-                *> poke (ptr `plusPtr` 28) (vkDstArrayElement (poked :: VkWriteDescriptorSet))-                *> poke (ptr `plusPtr` 32) (vkDescriptorCount (poked :: VkWriteDescriptorSet))-                *> poke (ptr `plusPtr` 36) (vkDescriptorType (poked :: VkWriteDescriptorSet))-                *> poke (ptr `plusPtr` 40) (vkPImageInfo (poked :: VkWriteDescriptorSet))-                *> poke (ptr `plusPtr` 48) (vkPBufferInfo (poked :: VkWriteDescriptorSet))-                *> poke (ptr `plusPtr` 56) (vkPTexelBufferView (poked :: VkWriteDescriptorSet))----data VkCopyDescriptorSet =-  VkCopyDescriptorSet{ vkSType :: VkStructureType -                     , vkPNext :: Ptr Void -                     , vkSrcSet :: VkDescriptorSet -                     , vkSrcBinding :: Word32 -                     , vkSrcArrayElement :: Word32 -                     , vkDstSet :: VkDescriptorSet -                     , vkDstBinding :: Word32 -                     , vkDstArrayElement :: Word32 -                     , vkDescriptorCount :: Word32 -                     }-  deriving (Eq)--instance Storable VkCopyDescriptorSet where-  sizeOf ~_ = 56-  alignment ~_ = 8-  peek ptr = VkCopyDescriptorSet <$> peek (ptr `plusPtr` 0)-                                 <*> peek (ptr `plusPtr` 8)-                                 <*> peek (ptr `plusPtr` 16)-                                 <*> peek (ptr `plusPtr` 24)-                                 <*> peek (ptr `plusPtr` 28)-                                 <*> 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 :: VkCopyDescriptorSet))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCopyDescriptorSet))-                *> poke (ptr `plusPtr` 16) (vkSrcSet (poked :: VkCopyDescriptorSet))-                *> poke (ptr `plusPtr` 24) (vkSrcBinding (poked :: VkCopyDescriptorSet))-                *> poke (ptr `plusPtr` 28) (vkSrcArrayElement (poked :: VkCopyDescriptorSet))-                *> poke (ptr `plusPtr` 32) (vkDstSet (poked :: VkCopyDescriptorSet))-                *> poke (ptr `plusPtr` 40) (vkDstBinding (poked :: VkCopyDescriptorSet))-                *> poke (ptr `plusPtr` 44) (vkDstArrayElement (poked :: VkCopyDescriptorSet))-                *> poke (ptr `plusPtr` 48) (vkDescriptorCount (poked :: VkCopyDescriptorSet))----data VkBufferCreateInfo =-  VkBufferCreateInfo{ vkSType :: VkStructureType -                    , vkPNext :: Ptr Void -                    , vkFlags :: VkBufferCreateFlags -                    , vkSize :: VkDeviceSize -                    , vkUsage :: VkBufferUsageFlags -                    , vkSharingMode :: VkSharingMode -                    , vkQueueFamilyIndexCount :: Word32 -                    , vkPQueueFamilyIndices :: Ptr Word32 -                    }-  deriving (Eq)--instance Storable VkBufferCreateInfo where-  sizeOf ~_ = 56-  alignment ~_ = 8-  peek ptr = VkBufferCreateInfo <$> peek (ptr `plusPtr` 0)-                                <*> peek (ptr `plusPtr` 8)-                                <*> peek (ptr `plusPtr` 16)-                                <*> peek (ptr `plusPtr` 24)-                                <*> peek (ptr `plusPtr` 32)-                                <*> peek (ptr `plusPtr` 36)-                                <*> peek (ptr `plusPtr` 40)-                                <*> peek (ptr `plusPtr` 48)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkBufferCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkSize (poked :: VkBufferCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkUsage (poked :: VkBufferCreateInfo))-                *> poke (ptr `plusPtr` 36) (vkSharingMode (poked :: VkBufferCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkQueueFamilyIndexCount (poked :: VkBufferCreateInfo))-                *> poke (ptr `plusPtr` 48) (vkPQueueFamilyIndices (poked :: VkBufferCreateInfo))----data VkBufferViewCreateInfo =-  VkBufferViewCreateInfo{ vkSType :: VkStructureType -                        , vkPNext :: Ptr Void -                        , vkFlags :: VkBufferViewCreateFlags -                        , vkBuffer :: VkBuffer -                        , vkFormat :: VkFormat -                        , vkOffset :: VkDeviceSize -                        , vkRange :: VkDeviceSize -                        }-  deriving (Eq)--instance Storable VkBufferViewCreateInfo where-  sizeOf ~_ = 56-  alignment ~_ = 8-  peek ptr = VkBufferViewCreateInfo <$> 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` 48)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferViewCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferViewCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkBufferViewCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkBuffer (poked :: VkBufferViewCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkFormat (poked :: VkBufferViewCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkOffset (poked :: VkBufferViewCreateInfo))-                *> poke (ptr `plusPtr` 48) (vkRange (poked :: VkBufferViewCreateInfo))----data VkImageSubresource =-  VkImageSubresource{ vkAspectMask :: VkImageAspectFlags -                    , vkMipLevel :: Word32 -                    , vkArrayLayer :: Word32 -                    }-  deriving (Eq)--instance Storable VkImageSubresource where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek ptr = VkImageSubresource <$> peek (ptr `plusPtr` 0)-                                <*> peek (ptr `plusPtr` 4)-                                <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresource))-                *> poke (ptr `plusPtr` 4) (vkMipLevel (poked :: VkImageSubresource))-                *> poke (ptr `plusPtr` 8) (vkArrayLayer (poked :: VkImageSubresource))----data VkImageSubresourceLayers =-  VkImageSubresourceLayers{ vkAspectMask :: VkImageAspectFlags -                          , vkMipLevel :: Word32 -                          , vkBaseArrayLayer :: Word32 -                          , vkLayerCount :: Word32 -                          }-  deriving (Eq)--instance Storable VkImageSubresourceLayers where-  sizeOf ~_ = 16-  alignment ~_ = 4-  peek ptr = VkImageSubresourceLayers <$> peek (ptr `plusPtr` 0)-                                      <*> peek (ptr `plusPtr` 4)-                                      <*> peek (ptr `plusPtr` 8)-                                      <*> peek (ptr `plusPtr` 12)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresourceLayers))-                *> poke (ptr `plusPtr` 4) (vkMipLevel (poked :: VkImageSubresourceLayers))-                *> poke (ptr `plusPtr` 8) (vkBaseArrayLayer (poked :: VkImageSubresourceLayers))-                *> poke (ptr `plusPtr` 12) (vkLayerCount (poked :: VkImageSubresourceLayers))----data VkImageSubresourceRange =-  VkImageSubresourceRange{ vkAspectMask :: VkImageAspectFlags -                         , vkBaseMipLevel :: Word32 -                         , vkLevelCount :: Word32 -                         , vkBaseArrayLayer :: Word32 -                         , vkLayerCount :: Word32 -                         }-  deriving (Eq)--instance Storable VkImageSubresourceRange where-  sizeOf ~_ = 20-  alignment ~_ = 4-  peek ptr = VkImageSubresourceRange <$> peek (ptr `plusPtr` 0)-                                     <*> peek (ptr `plusPtr` 4)-                                     <*> peek (ptr `plusPtr` 8)-                                     <*> peek (ptr `plusPtr` 12)-                                     <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresourceRange))-                *> poke (ptr `plusPtr` 4) (vkBaseMipLevel (poked :: VkImageSubresourceRange))-                *> poke (ptr `plusPtr` 8) (vkLevelCount (poked :: VkImageSubresourceRange))-                *> poke (ptr `plusPtr` 12) (vkBaseArrayLayer (poked :: VkImageSubresourceRange))-                *> poke (ptr `plusPtr` 16) (vkLayerCount (poked :: VkImageSubresourceRange))----data VkMemoryBarrier =-  VkMemoryBarrier{ vkSType :: VkStructureType -                 , vkPNext :: Ptr Void -                 , vkSrcAccessMask :: VkAccessFlags -                 , vkDstAccessMask :: VkAccessFlags -                 }-  deriving (Eq)--instance Storable VkMemoryBarrier where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkMemoryBarrier <$> peek (ptr `plusPtr` 0)-                             <*> peek (ptr `plusPtr` 8)-                             <*> peek (ptr `plusPtr` 16)-                             <*> peek (ptr `plusPtr` 20)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryBarrier))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryBarrier))-                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkMemoryBarrier))-                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkMemoryBarrier))----data VkBufferMemoryBarrier =-  VkBufferMemoryBarrier{ vkSType :: VkStructureType -                       , vkPNext :: Ptr Void -                       , vkSrcAccessMask :: VkAccessFlags -                       , vkDstAccessMask :: VkAccessFlags -                       , vkSrcQueueFamilyIndex :: Word32 -                       , vkDstQueueFamilyIndex :: Word32 -                       , vkBuffer :: VkBuffer -                       , vkOffset :: VkDeviceSize -                       , vkSize :: VkDeviceSize -                       }-  deriving (Eq)--instance Storable VkBufferMemoryBarrier where-  sizeOf ~_ = 56-  alignment ~_ = 8-  peek ptr = VkBufferMemoryBarrier <$> peek (ptr `plusPtr` 0)-                                   <*> peek (ptr `plusPtr` 8)-                                   <*> peek (ptr `plusPtr` 16)-                                   <*> peek (ptr `plusPtr` 20)-                                   <*> peek (ptr `plusPtr` 24)-                                   <*> peek (ptr `plusPtr` 28)-                                   <*> peek (ptr `plusPtr` 32)-                                   <*> peek (ptr `plusPtr` 40)-                                   <*> peek (ptr `plusPtr` 48)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferMemoryBarrier))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferMemoryBarrier))-                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkBufferMemoryBarrier))-                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkBufferMemoryBarrier))-                *> poke (ptr `plusPtr` 24) (vkSrcQueueFamilyIndex (poked :: VkBufferMemoryBarrier))-                *> poke (ptr `plusPtr` 28) (vkDstQueueFamilyIndex (poked :: VkBufferMemoryBarrier))-                *> poke (ptr `plusPtr` 32) (vkBuffer (poked :: VkBufferMemoryBarrier))-                *> poke (ptr `plusPtr` 40) (vkOffset (poked :: VkBufferMemoryBarrier))-                *> poke (ptr `plusPtr` 48) (vkSize (poked :: VkBufferMemoryBarrier))----data VkImageMemoryBarrier =-  VkImageMemoryBarrier{ vkSType :: VkStructureType -                      , vkPNext :: Ptr Void -                      , vkSrcAccessMask :: VkAccessFlags -                      , vkDstAccessMask :: VkAccessFlags -                      , vkOldLayout :: VkImageLayout -                      , vkNewLayout :: VkImageLayout -                      , vkSrcQueueFamilyIndex :: Word32 -                      , vkDstQueueFamilyIndex :: Word32 -                      , vkImage :: VkImage -                      , vkSubresourceRange :: VkImageSubresourceRange -                      }-  deriving (Eq)--instance Storable VkImageMemoryBarrier where-  sizeOf ~_ = 72-  alignment ~_ = 8-  peek ptr = VkImageMemoryBarrier <$> peek (ptr `plusPtr` 0)-                                  <*> peek (ptr `plusPtr` 8)-                                  <*> peek (ptr `plusPtr` 16)-                                  <*> peek (ptr `plusPtr` 20)-                                  <*> peek (ptr `plusPtr` 24)-                                  <*> peek (ptr `plusPtr` 28)-                                  <*> peek (ptr `plusPtr` 32)-                                  <*> peek (ptr `plusPtr` 36)-                                  <*> peek (ptr `plusPtr` 40)-                                  <*> peek (ptr `plusPtr` 48)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageMemoryBarrier))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageMemoryBarrier))-                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkImageMemoryBarrier))-                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkImageMemoryBarrier))-                *> poke (ptr `plusPtr` 24) (vkOldLayout (poked :: VkImageMemoryBarrier))-                *> poke (ptr `plusPtr` 28) (vkNewLayout (poked :: VkImageMemoryBarrier))-                *> poke (ptr `plusPtr` 32) (vkSrcQueueFamilyIndex (poked :: VkImageMemoryBarrier))-                *> poke (ptr `plusPtr` 36) (vkDstQueueFamilyIndex (poked :: VkImageMemoryBarrier))-                *> poke (ptr `plusPtr` 40) (vkImage (poked :: VkImageMemoryBarrier))-                *> poke (ptr `plusPtr` 48) (vkSubresourceRange (poked :: VkImageMemoryBarrier))----data VkImageCreateInfo =-  VkImageCreateInfo{ vkSType :: VkStructureType -                   , vkPNext :: Ptr Void -                   , vkFlags :: VkImageCreateFlags -                   , vkImageType :: VkImageType -                   , vkFormat :: VkFormat -                   , vkExtent :: VkExtent3D -                   , vkMipLevels :: Word32 -                   , vkArrayLayers :: Word32 -                   , vkSamples :: VkSampleCountFlagBits -                   , vkTiling :: VkImageTiling -                   , vkUsage :: VkImageUsageFlags -                   , vkSharingMode :: VkSharingMode -                   , vkQueueFamilyIndexCount :: Word32 -                   , vkPQueueFamilyIndices :: Ptr Word32 -                   , vkInitialLayout :: VkImageLayout -                   }-  deriving (Eq)--instance Storable VkImageCreateInfo where-  sizeOf ~_ = 88-  alignment ~_ = 8-  peek ptr = VkImageCreateInfo <$> peek (ptr `plusPtr` 0)-                               <*> peek (ptr `plusPtr` 8)-                               <*> peek (ptr `plusPtr` 16)-                               <*> peek (ptr `plusPtr` 20)-                               <*> peek (ptr `plusPtr` 24)-                               <*> peek (ptr `plusPtr` 28)-                               <*> peek (ptr `plusPtr` 40)-                               <*> peek (ptr `plusPtr` 44)-                               <*> peek (ptr `plusPtr` 48)-                               <*> peek (ptr `plusPtr` 52)-                               <*> peek (ptr `plusPtr` 56)-                               <*> peek (ptr `plusPtr` 60)-                               <*> peek (ptr `plusPtr` 64)-                               <*> peek (ptr `plusPtr` 72)-                               <*> peek (ptr `plusPtr` 80)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkImageType (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkFormat (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 28) (vkExtent (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkMipLevels (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 44) (vkArrayLayers (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 48) (vkSamples (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 52) (vkTiling (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 56) (vkUsage (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 60) (vkSharingMode (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 64) (vkQueueFamilyIndexCount (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 72) (vkPQueueFamilyIndices (poked :: VkImageCreateInfo))-                *> poke (ptr `plusPtr` 80) (vkInitialLayout (poked :: VkImageCreateInfo))----data VkSubresourceLayout =-  VkSubresourceLayout{ vkOffset :: VkDeviceSize -                     , vkSize :: VkDeviceSize -                     , vkRowPitch :: VkDeviceSize -                     , vkArrayPitch :: VkDeviceSize -                     , vkDepthPitch :: VkDeviceSize -                     }-  deriving (Eq)--instance Storable VkSubresourceLayout where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek ptr = VkSubresourceLayout <$> peek (ptr `plusPtr` 0)-                                 <*> peek (ptr `plusPtr` 8)-                                 <*> peek (ptr `plusPtr` 16)-                                 <*> peek (ptr `plusPtr` 24)-                                 <*> peek (ptr `plusPtr` 32)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkSubresourceLayout))-                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSubresourceLayout))-                *> poke (ptr `plusPtr` 16) (vkRowPitch (poked :: VkSubresourceLayout))-                *> poke (ptr `plusPtr` 24) (vkArrayPitch (poked :: VkSubresourceLayout))-                *> poke (ptr `plusPtr` 32) (vkDepthPitch (poked :: VkSubresourceLayout))----data VkImageViewCreateInfo =-  VkImageViewCreateInfo{ vkSType :: VkStructureType -                       , vkPNext :: Ptr Void -                       , vkFlags :: VkImageViewCreateFlags -                       , vkImage :: VkImage -                       , vkViewType :: VkImageViewType -                       , vkFormat :: VkFormat -                       , vkComponents :: VkComponentMapping -                       , vkSubresourceRange :: VkImageSubresourceRange -                       }-  deriving (Eq)--instance Storable VkImageViewCreateInfo where-  sizeOf ~_ = 80-  alignment ~_ = 8-  peek ptr = VkImageViewCreateInfo <$> peek (ptr `plusPtr` 0)-                                   <*> peek (ptr `plusPtr` 8)-                                   <*> peek (ptr `plusPtr` 16)-                                   <*> peek (ptr `plusPtr` 24)-                                   <*> peek (ptr `plusPtr` 32)-                                   <*> peek (ptr `plusPtr` 36)-                                   <*> peek (ptr `plusPtr` 40)-                                   <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageViewCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageViewCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkImageViewCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkImage (poked :: VkImageViewCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkViewType (poked :: VkImageViewCreateInfo))-                *> poke (ptr `plusPtr` 36) (vkFormat (poked :: VkImageViewCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkComponents (poked :: VkImageViewCreateInfo))-                *> poke (ptr `plusPtr` 56) (vkSubresourceRange (poked :: VkImageViewCreateInfo))----data VkBufferCopy =-  VkBufferCopy{ vkSrcOffset :: VkDeviceSize -              , vkDstOffset :: VkDeviceSize -              , vkSize :: VkDeviceSize -              }-  deriving (Eq)--instance Storable VkBufferCopy where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkBufferCopy <$> peek (ptr `plusPtr` 0)-                          <*> peek (ptr `plusPtr` 8)-                          <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcOffset (poked :: VkBufferCopy))-                *> poke (ptr `plusPtr` 8) (vkDstOffset (poked :: VkBufferCopy))-                *> poke (ptr `plusPtr` 16) (vkSize (poked :: VkBufferCopy))----data VkSparseMemoryBind =-  VkSparseMemoryBind{ vkResourceOffset :: VkDeviceSize -                    , vkSize :: VkDeviceSize -                    , vkMemory :: VkDeviceMemory -                    , vkMemoryOffset :: VkDeviceSize -                    , vkFlags :: VkSparseMemoryBindFlags -                    }-  deriving (Eq)--instance Storable VkSparseMemoryBind where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek ptr = VkSparseMemoryBind <$> peek (ptr `plusPtr` 0)-                                <*> peek (ptr `plusPtr` 8)-                                <*> peek (ptr `plusPtr` 16)-                                <*> peek (ptr `plusPtr` 24)-                                <*> peek (ptr `plusPtr` 32)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkResourceOffset (poked :: VkSparseMemoryBind))-                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSparseMemoryBind))-                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkSparseMemoryBind))-                *> poke (ptr `plusPtr` 24) (vkMemoryOffset (poked :: VkSparseMemoryBind))-                *> poke (ptr `plusPtr` 32) (vkFlags (poked :: VkSparseMemoryBind))----data VkSparseImageMemoryBind =-  VkSparseImageMemoryBind{ vkSubresource :: VkImageSubresource -                         , vkOffset :: VkOffset3D -                         , vkExtent :: VkExtent3D -                         , vkMemory :: VkDeviceMemory -                         , vkMemoryOffset :: VkDeviceSize -                         , vkFlags :: VkSparseMemoryBindFlags -                         }-  deriving (Eq)--instance Storable VkSparseImageMemoryBind where-  sizeOf ~_ = 64-  alignment ~_ = 8-  peek ptr = VkSparseImageMemoryBind <$> peek (ptr `plusPtr` 0)-                                     <*> peek (ptr `plusPtr` 12)-                                     <*> peek (ptr `plusPtr` 24)-                                     <*> peek (ptr `plusPtr` 40)-                                     <*> peek (ptr `plusPtr` 48)-                                     <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSubresource (poked :: VkSparseImageMemoryBind))-                *> poke (ptr `plusPtr` 12) (vkOffset (poked :: VkSparseImageMemoryBind))-                *> poke (ptr `plusPtr` 24) (vkExtent (poked :: VkSparseImageMemoryBind))-                *> poke (ptr `plusPtr` 40) (vkMemory (poked :: VkSparseImageMemoryBind))-                *> poke (ptr `plusPtr` 48) (vkMemoryOffset (poked :: VkSparseImageMemoryBind))-                *> poke (ptr `plusPtr` 56) (vkFlags (poked :: VkSparseImageMemoryBind))----data VkSparseBufferMemoryBindInfo =-  VkSparseBufferMemoryBindInfo{ vkBuffer :: VkBuffer -                              , vkBindCount :: Word32 -                              , vkPBinds :: Ptr VkSparseMemoryBind -                              }-  deriving (Eq)--instance Storable VkSparseBufferMemoryBindInfo where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkSparseBufferMemoryBindInfo <$> peek (ptr `plusPtr` 0)-                                          <*> peek (ptr `plusPtr` 8)-                                          <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBuffer (poked :: VkSparseBufferMemoryBindInfo))-                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseBufferMemoryBindInfo))-                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseBufferMemoryBindInfo))----data VkSparseImageOpaqueMemoryBindInfo =-  VkSparseImageOpaqueMemoryBindInfo{ vkImage :: VkImage -                                   , vkBindCount :: Word32 -                                   , vkPBinds :: Ptr VkSparseMemoryBind -                                   }-  deriving (Eq)--instance Storable VkSparseImageOpaqueMemoryBindInfo where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkSparseImageOpaqueMemoryBindInfo <$> peek (ptr `plusPtr` 0)-                                               <*> peek (ptr `plusPtr` 8)-                                               <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkImage (poked :: VkSparseImageOpaqueMemoryBindInfo))-                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseImageOpaqueMemoryBindInfo))-                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseImageOpaqueMemoryBindInfo))----data VkSparseImageMemoryBindInfo =-  VkSparseImageMemoryBindInfo{ vkImage :: VkImage -                             , vkBindCount :: Word32 -                             , vkPBinds :: Ptr VkSparseImageMemoryBind -                             }-  deriving (Eq)--instance Storable VkSparseImageMemoryBindInfo where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkSparseImageMemoryBindInfo <$> peek (ptr `plusPtr` 0)-                                         <*> peek (ptr `plusPtr` 8)-                                         <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkImage (poked :: VkSparseImageMemoryBindInfo))-                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseImageMemoryBindInfo))-                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseImageMemoryBindInfo))----data VkBindSparseInfo =-  VkBindSparseInfo{ vkSType :: VkStructureType -                  , vkPNext :: Ptr Void -                  , vkWaitSemaphoreCount :: Word32 -                  , vkPWaitSemaphores :: Ptr VkSemaphore -                  , vkBufferBindCount :: Word32 -                  , vkPBufferBinds :: Ptr VkSparseBufferMemoryBindInfo -                  , vkImageOpaqueBindCount :: Word32 -                  , vkPImageOpaqueBinds :: Ptr VkSparseImageOpaqueMemoryBindInfo -                  , vkImageBindCount :: Word32 -                  , vkPImageBinds :: Ptr VkSparseImageMemoryBindInfo -                  , vkSignalSemaphoreCount :: Word32 -                  , vkPSignalSemaphores :: Ptr VkSemaphore -                  }-  deriving (Eq)--instance Storable VkBindSparseInfo where-  sizeOf ~_ = 96-  alignment ~_ = 8-  peek ptr = VkBindSparseInfo <$> 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` 48)-                              <*> peek (ptr `plusPtr` 56)-                              <*> peek (ptr `plusPtr` 64)-                              <*> peek (ptr `plusPtr` 72)-                              <*> peek (ptr `plusPtr` 80)-                              <*> peek (ptr `plusPtr` 88)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 32) (vkBufferBindCount (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 40) (vkPBufferBinds (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 48) (vkImageOpaqueBindCount (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 56) (vkPImageOpaqueBinds (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 64) (vkImageBindCount (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 72) (vkPImageBinds (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 80) (vkSignalSemaphoreCount (poked :: VkBindSparseInfo))-                *> poke (ptr `plusPtr` 88) (vkPSignalSemaphores (poked :: VkBindSparseInfo))----data VkImageCopy =-  VkImageCopy{ vkSrcSubresource :: VkImageSubresourceLayers -             , vkSrcOffset :: VkOffset3D -             , vkDstSubresource :: VkImageSubresourceLayers -             , vkDstOffset :: VkOffset3D -             , vkExtent :: VkExtent3D -             }-  deriving (Eq)--instance Storable VkImageCopy where-  sizeOf ~_ = 68-  alignment ~_ = 4-  peek ptr = VkImageCopy <$> peek (ptr `plusPtr` 0)-                         <*> peek (ptr `plusPtr` 16)-                         <*> peek (ptr `plusPtr` 28)-                         <*> peek (ptr `plusPtr` 44)-                         <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageCopy))-                *> poke (ptr `plusPtr` 16) (vkSrcOffset (poked :: VkImageCopy))-                *> poke (ptr `plusPtr` 28) (vkDstSubresource (poked :: VkImageCopy))-                *> poke (ptr `plusPtr` 44) (vkDstOffset (poked :: VkImageCopy))-                *> poke (ptr `plusPtr` 56) (vkExtent (poked :: VkImageCopy))----data VkImageBlit =-  VkImageBlit{ vkSrcSubresource :: VkImageSubresourceLayers -             , vkSrcOffsets :: Vec (ToPeano 2) VkOffset3D -             , vkDstSubresource :: VkImageSubresourceLayers -             , vkDstOffsets :: Vec (ToPeano 2) VkOffset3D -             }-  deriving (Eq)--instance Storable VkImageBlit where-  sizeOf ~_ = 80-  alignment ~_ = 4-  peek ptr = VkImageBlit <$> peek (ptr `plusPtr` 0)-                         <*> peek (ptr `plusPtr` 16)-                         <*> peek (ptr `plusPtr` 40)-                         <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageBlit))-                *> poke (ptr `plusPtr` 16) (vkSrcOffsets (poked :: VkImageBlit))-                *> poke (ptr `plusPtr` 40) (vkDstSubresource (poked :: VkImageBlit))-                *> poke (ptr `plusPtr` 56) (vkDstOffsets (poked :: VkImageBlit))----data VkBufferImageCopy =-  VkBufferImageCopy{ vkBufferOffset :: VkDeviceSize -                   , vkBufferRowLength :: Word32 -                   , vkBufferImageHeight :: Word32 -                   , vkImageSubresource :: VkImageSubresourceLayers -                   , vkImageOffset :: VkOffset3D -                   , vkImageExtent :: VkExtent3D -                   }-  deriving (Eq)--instance Storable VkBufferImageCopy where-  sizeOf ~_ = 56-  alignment ~_ = 8-  peek ptr = VkBufferImageCopy <$> peek (ptr `plusPtr` 0)-                               <*> peek (ptr `plusPtr` 8)-                               <*> peek (ptr `plusPtr` 12)-                               <*> peek (ptr `plusPtr` 16)-                               <*> peek (ptr `plusPtr` 32)-                               <*> peek (ptr `plusPtr` 44)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBufferOffset (poked :: VkBufferImageCopy))-                *> poke (ptr `plusPtr` 8) (vkBufferRowLength (poked :: VkBufferImageCopy))-                *> poke (ptr `plusPtr` 12) (vkBufferImageHeight (poked :: VkBufferImageCopy))-                *> poke (ptr `plusPtr` 16) (vkImageSubresource (poked :: VkBufferImageCopy))-                *> poke (ptr `plusPtr` 32) (vkImageOffset (poked :: VkBufferImageCopy))-                *> poke (ptr `plusPtr` 44) (vkImageExtent (poked :: VkBufferImageCopy))----data VkImageResolve =-  VkImageResolve{ vkSrcSubresource :: VkImageSubresourceLayers -                , vkSrcOffset :: VkOffset3D -                , vkDstSubresource :: VkImageSubresourceLayers -                , vkDstOffset :: VkOffset3D -                , vkExtent :: VkExtent3D -                }-  deriving (Eq)--instance Storable VkImageResolve where-  sizeOf ~_ = 68-  alignment ~_ = 4-  peek ptr = VkImageResolve <$> peek (ptr `plusPtr` 0)-                            <*> peek (ptr `plusPtr` 16)-                            <*> peek (ptr `plusPtr` 28)-                            <*> peek (ptr `plusPtr` 44)-                            <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageResolve))-                *> poke (ptr `plusPtr` 16) (vkSrcOffset (poked :: VkImageResolve))-                *> poke (ptr `plusPtr` 28) (vkDstSubresource (poked :: VkImageResolve))-                *> poke (ptr `plusPtr` 44) (vkDstOffset (poked :: VkImageResolve))-                *> poke (ptr `plusPtr` 56) (vkExtent (poked :: VkImageResolve))----data VkShaderModuleCreateInfo =-  VkShaderModuleCreateInfo{ vkSType :: VkStructureType -                          , vkPNext :: Ptr Void -                          , vkFlags :: VkShaderModuleCreateFlags -                          , vkCodeSize :: CSize -                          , vkPCode :: Ptr Word32 -                          }-  deriving (Eq)--instance Storable VkShaderModuleCreateInfo where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek ptr = VkShaderModuleCreateInfo <$> peek (ptr `plusPtr` 0)-                                      <*> peek (ptr `plusPtr` 8)-                                      <*> peek (ptr `plusPtr` 16)-                                      <*> peek (ptr `plusPtr` 24)-                                      <*> peek (ptr `plusPtr` 32)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkShaderModuleCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkShaderModuleCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkShaderModuleCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkCodeSize (poked :: VkShaderModuleCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkPCode (poked :: VkShaderModuleCreateInfo))----data VkDescriptorSetLayoutBinding =-  VkDescriptorSetLayoutBinding{ vkBinding :: Word32 -                              , vkDescriptorType :: VkDescriptorType -                              , vkDescriptorCount :: Word32 -                              , vkStageFlags :: VkShaderStageFlags -                              , vkPImmutableSamplers :: Ptr VkSampler -                              }-  deriving (Eq)--instance Storable VkDescriptorSetLayoutBinding where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkDescriptorSetLayoutBinding <$> peek (ptr `plusPtr` 0)-                                          <*> peek (ptr `plusPtr` 4)-                                          <*> peek (ptr `plusPtr` 8)-                                          <*> peek (ptr `plusPtr` 12)-                                          <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBinding (poked :: VkDescriptorSetLayoutBinding))-                *> poke (ptr `plusPtr` 4) (vkDescriptorType (poked :: VkDescriptorSetLayoutBinding))-                *> poke (ptr `plusPtr` 8) (vkDescriptorCount (poked :: VkDescriptorSetLayoutBinding))-                *> poke (ptr `plusPtr` 12) (vkStageFlags (poked :: VkDescriptorSetLayoutBinding))-                *> poke (ptr `plusPtr` 16) (vkPImmutableSamplers (poked :: VkDescriptorSetLayoutBinding))----data VkDescriptorSetLayoutCreateInfo =-  VkDescriptorSetLayoutCreateInfo{ vkSType :: VkStructureType -                                 , vkPNext :: Ptr Void -                                 , vkFlags :: VkDescriptorSetLayoutCreateFlags -                                 , vkBindingCount :: Word32 -                                 , vkPBindings :: Ptr VkDescriptorSetLayoutBinding -                                 }-  deriving (Eq)--instance Storable VkDescriptorSetLayoutCreateInfo where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek ptr = VkDescriptorSetLayoutCreateInfo <$> peek (ptr `plusPtr` 0)-                                             <*> peek (ptr `plusPtr` 8)-                                             <*> peek (ptr `plusPtr` 16)-                                             <*> peek (ptr `plusPtr` 20)-                                             <*> peek (ptr `plusPtr` 24)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorSetLayoutCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetLayoutCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDescriptorSetLayoutCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkBindingCount (poked :: VkDescriptorSetLayoutCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPBindings (poked :: VkDescriptorSetLayoutCreateInfo))----data VkDescriptorPoolSize =-  VkDescriptorPoolSize{ vkType :: VkDescriptorType -                      , vkDescriptorCount :: Word32 -                      }-  deriving (Eq)--instance Storable VkDescriptorPoolSize where-  sizeOf ~_ = 8-  alignment ~_ = 4-  peek ptr = VkDescriptorPoolSize <$> peek (ptr `plusPtr` 0)-                                  <*> peek (ptr `plusPtr` 4)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkType (poked :: VkDescriptorPoolSize))-                *> poke (ptr `plusPtr` 4) (vkDescriptorCount (poked :: VkDescriptorPoolSize))----data VkDescriptorPoolCreateInfo =-  VkDescriptorPoolCreateInfo{ vkSType :: VkStructureType -                            , vkPNext :: Ptr Void -                            , vkFlags :: VkDescriptorPoolCreateFlags -                            , vkMaxSets :: Word32 -                            , vkPoolSizeCount :: Word32 -                            , vkPPoolSizes :: Ptr VkDescriptorPoolSize -                            }-  deriving (Eq)--instance Storable VkDescriptorPoolCreateInfo where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek ptr = VkDescriptorPoolCreateInfo <$> peek (ptr `plusPtr` 0)-                                        <*> peek (ptr `plusPtr` 8)-                                        <*> peek (ptr `plusPtr` 16)-                                        <*> peek (ptr `plusPtr` 20)-                                        <*> peek (ptr `plusPtr` 24)-                                        <*> peek (ptr `plusPtr` 32)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorPoolCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorPoolCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDescriptorPoolCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkMaxSets (poked :: VkDescriptorPoolCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPoolSizeCount (poked :: VkDescriptorPoolCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkPPoolSizes (poked :: VkDescriptorPoolCreateInfo))----data VkDescriptorSetAllocateInfo =-  VkDescriptorSetAllocateInfo{ vkSType :: VkStructureType -                             , vkPNext :: Ptr Void -                             , vkDescriptorPool :: VkDescriptorPool -                             , vkDescriptorSetCount :: Word32 -                             , vkPSetLayouts :: Ptr VkDescriptorSetLayout -                             }-  deriving (Eq)--instance Storable VkDescriptorSetAllocateInfo where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek ptr = VkDescriptorSetAllocateInfo <$> peek (ptr `plusPtr` 0)-                                         <*> peek (ptr `plusPtr` 8)-                                         <*> peek (ptr `plusPtr` 16)-                                         <*> peek (ptr `plusPtr` 24)-                                         <*> peek (ptr `plusPtr` 32)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorSetAllocateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetAllocateInfo))-                *> poke (ptr `plusPtr` 16) (vkDescriptorPool (poked :: VkDescriptorSetAllocateInfo))-                *> poke (ptr `plusPtr` 24) (vkDescriptorSetCount (poked :: VkDescriptorSetAllocateInfo))-                *> poke (ptr `plusPtr` 32) (vkPSetLayouts (poked :: VkDescriptorSetAllocateInfo))----data VkSpecializationMapEntry =-  VkSpecializationMapEntry{ vkConstantID :: Word32 -                          , vkOffset :: Word32 -                          , vkSize :: CSize -                          }-  deriving (Eq)--instance Storable VkSpecializationMapEntry where-  sizeOf ~_ = 16-  alignment ~_ = 8-  peek ptr = VkSpecializationMapEntry <$> peek (ptr `plusPtr` 0)-                                      <*> peek (ptr `plusPtr` 4)-                                      <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkConstantID (poked :: VkSpecializationMapEntry))-                *> poke (ptr `plusPtr` 4) (vkOffset (poked :: VkSpecializationMapEntry))-                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSpecializationMapEntry))----data VkSpecializationInfo =-  VkSpecializationInfo{ vkMapEntryCount :: Word32 -                      , vkPMapEntries :: Ptr VkSpecializationMapEntry -                      , vkDataSize :: CSize -                      , vkPData :: Ptr Void -                      }-  deriving (Eq)--instance Storable VkSpecializationInfo where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek ptr = VkSpecializationInfo <$> peek (ptr `plusPtr` 0)-                                  <*> peek (ptr `plusPtr` 8)-                                  <*> peek (ptr `plusPtr` 16)-                                  <*> peek (ptr `plusPtr` 24)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkMapEntryCount (poked :: VkSpecializationInfo))-                *> poke (ptr `plusPtr` 8) (vkPMapEntries (poked :: VkSpecializationInfo))-                *> poke (ptr `plusPtr` 16) (vkDataSize (poked :: VkSpecializationInfo))-                *> poke (ptr `plusPtr` 24) (vkPData (poked :: VkSpecializationInfo))----data VkPipelineShaderStageCreateInfo =-  VkPipelineShaderStageCreateInfo{ vkSType :: VkStructureType -                                 , vkPNext :: Ptr Void -                                 , vkFlags :: VkPipelineShaderStageCreateFlags -                                 , vkStage :: VkShaderStageFlagBits -                                 , vkModule :: VkShaderModule -                                 , vkPName :: Ptr CChar -                                 , vkPSpecializationInfo :: Ptr VkSpecializationInfo -                                 }-  deriving (Eq)--instance Storable VkPipelineShaderStageCreateInfo where-  sizeOf ~_ = 48-  alignment ~_ = 8-  peek ptr = VkPipelineShaderStageCreateInfo <$> peek (ptr `plusPtr` 0)-                                             <*> peek (ptr `plusPtr` 8)-                                             <*> peek (ptr `plusPtr` 16)-                                             <*> peek (ptr `plusPtr` 20)-                                             <*> peek (ptr `plusPtr` 24)-                                             <*> peek (ptr `plusPtr` 32)-                                             <*> peek (ptr `plusPtr` 40)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineShaderStageCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineShaderStageCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineShaderStageCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkStage (poked :: VkPipelineShaderStageCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkModule (poked :: VkPipelineShaderStageCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkPName (poked :: VkPipelineShaderStageCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkPSpecializationInfo (poked :: VkPipelineShaderStageCreateInfo))----data VkComputePipelineCreateInfo =-  VkComputePipelineCreateInfo{ vkSType :: VkStructureType -                             , vkPNext :: Ptr Void -                             , vkFlags :: VkPipelineCreateFlags -                             , vkStage :: VkPipelineShaderStageCreateInfo -                             , vkLayout :: VkPipelineLayout -                             , vkBasePipelineHandle :: VkPipeline -                             , vkBasePipelineIndex :: Int32 -                             }-  deriving (Eq)--instance Storable VkComputePipelineCreateInfo where-  sizeOf ~_ = 96-  alignment ~_ = 8-  peek ptr = VkComputePipelineCreateInfo <$> peek (ptr `plusPtr` 0)-                                         <*> peek (ptr `plusPtr` 8)-                                         <*> peek (ptr `plusPtr` 16)-                                         <*> peek (ptr `plusPtr` 24)-                                         <*> peek (ptr `plusPtr` 72)-                                         <*> peek (ptr `plusPtr` 80)-                                         <*> peek (ptr `plusPtr` 88)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkComputePipelineCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkComputePipelineCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkComputePipelineCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkStage (poked :: VkComputePipelineCreateInfo))-                *> poke (ptr `plusPtr` 72) (vkLayout (poked :: VkComputePipelineCreateInfo))-                *> poke (ptr `plusPtr` 80) (vkBasePipelineHandle (poked :: VkComputePipelineCreateInfo))-                *> poke (ptr `plusPtr` 88) (vkBasePipelineIndex (poked :: VkComputePipelineCreateInfo))----data VkVertexInputBindingDescription =-  VkVertexInputBindingDescription{ vkBinding :: Word32 -                                 , vkStride :: Word32 -                                 , vkInputRate :: VkVertexInputRate -                                 }-  deriving (Eq)--instance Storable VkVertexInputBindingDescription where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek ptr = VkVertexInputBindingDescription <$> peek (ptr `plusPtr` 0)-                                             <*> peek (ptr `plusPtr` 4)-                                             <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBinding (poked :: VkVertexInputBindingDescription))-                *> poke (ptr `plusPtr` 4) (vkStride (poked :: VkVertexInputBindingDescription))-                *> poke (ptr `plusPtr` 8) (vkInputRate (poked :: VkVertexInputBindingDescription))----data VkVertexInputAttributeDescription =-  VkVertexInputAttributeDescription{ vkLocation :: Word32 -                                   , vkBinding :: Word32 -                                   , vkFormat :: VkFormat -                                   , vkOffset :: Word32 -                                   }-  deriving (Eq)--instance Storable VkVertexInputAttributeDescription where-  sizeOf ~_ = 16-  alignment ~_ = 4-  peek ptr = VkVertexInputAttributeDescription <$> peek (ptr `plusPtr` 0)-                                               <*> peek (ptr `plusPtr` 4)-                                               <*> peek (ptr `plusPtr` 8)-                                               <*> peek (ptr `plusPtr` 12)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkLocation (poked :: VkVertexInputAttributeDescription))-                *> poke (ptr `plusPtr` 4) (vkBinding (poked :: VkVertexInputAttributeDescription))-                *> poke (ptr `plusPtr` 8) (vkFormat (poked :: VkVertexInputAttributeDescription))-                *> poke (ptr `plusPtr` 12) (vkOffset (poked :: VkVertexInputAttributeDescription))----data VkPipelineVertexInputStateCreateInfo =-  VkPipelineVertexInputStateCreateInfo{ vkSType :: VkStructureType -                                      , vkPNext :: Ptr Void -                                      , vkFlags :: VkPipelineVertexInputStateCreateFlags -                                      , vkVertexBindingDescriptionCount :: Word32 -                                      , vkPVertexBindingDescriptions :: Ptr VkVertexInputBindingDescription -                                      , vkVertexAttributeDescriptionCount :: Word32 -                                      , vkPVertexAttributeDescriptions :: Ptr VkVertexInputAttributeDescription -                                      }-  deriving (Eq)--instance Storable VkPipelineVertexInputStateCreateInfo where-  sizeOf ~_ = 48-  alignment ~_ = 8-  peek ptr = VkPipelineVertexInputStateCreateInfo <$> peek (ptr `plusPtr` 0)-                                                  <*> peek (ptr `plusPtr` 8)-                                                  <*> peek (ptr `plusPtr` 16)-                                                  <*> peek (ptr `plusPtr` 20)-                                                  <*> peek (ptr `plusPtr` 24)-                                                  <*> peek (ptr `plusPtr` 32)-                                                  <*> peek (ptr `plusPtr` 40)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineVertexInputStateCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineVertexInputStateCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineVertexInputStateCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkVertexBindingDescriptionCount (poked :: VkPipelineVertexInputStateCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPVertexBindingDescriptions (poked :: VkPipelineVertexInputStateCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkVertexAttributeDescriptionCount (poked :: VkPipelineVertexInputStateCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkPVertexAttributeDescriptions (poked :: VkPipelineVertexInputStateCreateInfo))----data VkPipelineInputAssemblyStateCreateInfo =-  VkPipelineInputAssemblyStateCreateInfo{ vkSType :: VkStructureType -                                        , vkPNext :: Ptr Void -                                        , vkFlags :: VkPipelineInputAssemblyStateCreateFlags -                                        , vkTopology :: VkPrimitiveTopology -                                        , vkPrimitiveRestartEnable :: VkBool32 -                                        }-  deriving (Eq)--instance Storable VkPipelineInputAssemblyStateCreateInfo where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek ptr = VkPipelineInputAssemblyStateCreateInfo <$> peek (ptr `plusPtr` 0)-                                                    <*> peek (ptr `plusPtr` 8)-                                                    <*> peek (ptr `plusPtr` 16)-                                                    <*> peek (ptr `plusPtr` 20)-                                                    <*> peek (ptr `plusPtr` 24)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineInputAssemblyStateCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineInputAssemblyStateCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineInputAssemblyStateCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkTopology (poked :: VkPipelineInputAssemblyStateCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPrimitiveRestartEnable (poked :: VkPipelineInputAssemblyStateCreateInfo))----data VkPipelineTessellationStateCreateInfo =-  VkPipelineTessellationStateCreateInfo{ vkSType :: VkStructureType -                                       , vkPNext :: Ptr Void -                                       , vkFlags :: VkPipelineTessellationStateCreateFlags -                                       , vkPatchControlPoints :: Word32 -                                       }-  deriving (Eq)--instance Storable VkPipelineTessellationStateCreateInfo where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkPipelineTessellationStateCreateInfo <$> peek (ptr `plusPtr` 0)-                                                   <*> peek (ptr `plusPtr` 8)-                                                   <*> peek (ptr `plusPtr` 16)-                                                   <*> peek (ptr `plusPtr` 20)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineTessellationStateCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineTessellationStateCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineTessellationStateCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkPatchControlPoints (poked :: VkPipelineTessellationStateCreateInfo))----data VkPipelineViewportStateCreateInfo =-  VkPipelineViewportStateCreateInfo{ vkSType :: VkStructureType -                                   , vkPNext :: Ptr Void -                                   , vkFlags :: VkPipelineViewportStateCreateFlags -                                   , vkViewportCount :: Word32 -                                   , vkPViewports :: Ptr VkViewport -                                   , vkScissorCount :: Word32 -                                   , vkPScissors :: Ptr VkRect2D -                                   }-  deriving (Eq)--instance Storable VkPipelineViewportStateCreateInfo where-  sizeOf ~_ = 48-  alignment ~_ = 8-  peek ptr = VkPipelineViewportStateCreateInfo <$> peek (ptr `plusPtr` 0)-                                               <*> peek (ptr `plusPtr` 8)-                                               <*> peek (ptr `plusPtr` 16)-                                               <*> peek (ptr `plusPtr` 20)-                                               <*> peek (ptr `plusPtr` 24)-                                               <*> peek (ptr `plusPtr` 32)-                                               <*> peek (ptr `plusPtr` 40)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineViewportStateCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineViewportStateCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineViewportStateCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkViewportCount (poked :: VkPipelineViewportStateCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPViewports (poked :: VkPipelineViewportStateCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkScissorCount (poked :: VkPipelineViewportStateCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkPScissors (poked :: VkPipelineViewportStateCreateInfo))----data VkPipelineRasterizationStateCreateInfo =-  VkPipelineRasterizationStateCreateInfo{ vkSType :: VkStructureType -                                        , vkPNext :: Ptr Void -                                        , vkFlags :: VkPipelineRasterizationStateCreateFlags -                                        , vkDepthClampEnable :: VkBool32 -                                        , vkRasterizerDiscardEnable :: VkBool32 -                                        , vkPolygonMode :: VkPolygonMode -                                        , vkCullMode :: VkCullModeFlags -                                        , vkFrontFace :: VkFrontFace -                                        , vkDepthBiasEnable :: VkBool32 -                                        , vkDepthBiasConstantFactor :: CFloat -                                        , vkDepthBiasClamp :: CFloat -                                        , vkDepthBiasSlopeFactor :: CFloat -                                        , vkLineWidth :: CFloat -                                        }-  deriving (Eq)--instance Storable VkPipelineRasterizationStateCreateInfo where-  sizeOf ~_ = 64-  alignment ~_ = 8-  peek ptr = VkPipelineRasterizationStateCreateInfo <$> peek (ptr `plusPtr` 0)-                                                    <*> peek (ptr `plusPtr` 8)-                                                    <*> peek (ptr `plusPtr` 16)-                                                    <*> peek (ptr `plusPtr` 20)-                                                    <*> peek (ptr `plusPtr` 24)-                                                    <*> peek (ptr `plusPtr` 28)-                                                    <*> peek (ptr `plusPtr` 32)-                                                    <*> peek (ptr `plusPtr` 36)-                                                    <*> peek (ptr `plusPtr` 40)-                                                    <*> peek (ptr `plusPtr` 44)-                                                    <*> peek (ptr `plusPtr` 48)-                                                    <*> peek (ptr `plusPtr` 52)-                                                    <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkDepthClampEnable (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkRasterizerDiscardEnable (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 28) (vkPolygonMode (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkCullMode (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 36) (vkFrontFace (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkDepthBiasEnable (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 44) (vkDepthBiasConstantFactor (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 48) (vkDepthBiasClamp (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 52) (vkDepthBiasSlopeFactor (poked :: VkPipelineRasterizationStateCreateInfo))-                *> poke (ptr `plusPtr` 56) (vkLineWidth (poked :: VkPipelineRasterizationStateCreateInfo))----data VkPipelineMultisampleStateCreateInfo =-  VkPipelineMultisampleStateCreateInfo{ vkSType :: VkStructureType -                                      , vkPNext :: Ptr Void -                                      , vkFlags :: VkPipelineMultisampleStateCreateFlags -                                      , vkRasterizationSamples :: VkSampleCountFlagBits -                                      , vkSampleShadingEnable :: VkBool32 -                                      , vkMinSampleShading :: CFloat -                                      , vkPSampleMask :: Ptr VkSampleMask -                                      , vkAlphaToCoverageEnable :: VkBool32 -                                      , vkAlphaToOneEnable :: VkBool32 -                                      }-  deriving (Eq)--instance Storable VkPipelineMultisampleStateCreateInfo where-  sizeOf ~_ = 48-  alignment ~_ = 8-  peek ptr = VkPipelineMultisampleStateCreateInfo <$> peek (ptr `plusPtr` 0)-                                                  <*> peek (ptr `plusPtr` 8)-                                                  <*> peek (ptr `plusPtr` 16)-                                                  <*> peek (ptr `plusPtr` 20)-                                                  <*> peek (ptr `plusPtr` 24)-                                                  <*> peek (ptr `plusPtr` 28)-                                                  <*> peek (ptr `plusPtr` 32)-                                                  <*> peek (ptr `plusPtr` 40)-                                                  <*> peek (ptr `plusPtr` 44)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineMultisampleStateCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineMultisampleStateCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineMultisampleStateCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkRasterizationSamples (poked :: VkPipelineMultisampleStateCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkSampleShadingEnable (poked :: VkPipelineMultisampleStateCreateInfo))-                *> poke (ptr `plusPtr` 28) (vkMinSampleShading (poked :: VkPipelineMultisampleStateCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkPSampleMask (poked :: VkPipelineMultisampleStateCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkAlphaToCoverageEnable (poked :: VkPipelineMultisampleStateCreateInfo))-                *> poke (ptr `plusPtr` 44) (vkAlphaToOneEnable (poked :: VkPipelineMultisampleStateCreateInfo))----data VkPipelineColorBlendAttachmentState =-  VkPipelineColorBlendAttachmentState{ vkBlendEnable :: VkBool32 -                                     , vkSrcColorBlendFactor :: VkBlendFactor -                                     , vkDstColorBlendFactor :: VkBlendFactor -                                     , vkColorBlendOp :: VkBlendOp -                                     , vkSrcAlphaBlendFactor :: VkBlendFactor -                                     , vkDstAlphaBlendFactor :: VkBlendFactor -                                     , vkAlphaBlendOp :: VkBlendOp -                                     , vkColorWriteMask :: VkColorComponentFlags -                                     }-  deriving (Eq)--instance Storable VkPipelineColorBlendAttachmentState where-  sizeOf ~_ = 32-  alignment ~_ = 4-  peek ptr = VkPipelineColorBlendAttachmentState <$> peek (ptr `plusPtr` 0)-                                                 <*> peek (ptr `plusPtr` 4)-                                                 <*> peek (ptr `plusPtr` 8)-                                                 <*> peek (ptr `plusPtr` 12)-                                                 <*> peek (ptr `plusPtr` 16)-                                                 <*> peek (ptr `plusPtr` 20)-                                                 <*> peek (ptr `plusPtr` 24)-                                                 <*> peek (ptr `plusPtr` 28)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBlendEnable (poked :: VkPipelineColorBlendAttachmentState))-                *> poke (ptr `plusPtr` 4) (vkSrcColorBlendFactor (poked :: VkPipelineColorBlendAttachmentState))-                *> poke (ptr `plusPtr` 8) (vkDstColorBlendFactor (poked :: VkPipelineColorBlendAttachmentState))-                *> poke (ptr `plusPtr` 12) (vkColorBlendOp (poked :: VkPipelineColorBlendAttachmentState))-                *> poke (ptr `plusPtr` 16) (vkSrcAlphaBlendFactor (poked :: VkPipelineColorBlendAttachmentState))-                *> poke (ptr `plusPtr` 20) (vkDstAlphaBlendFactor (poked :: VkPipelineColorBlendAttachmentState))-                *> poke (ptr `plusPtr` 24) (vkAlphaBlendOp (poked :: VkPipelineColorBlendAttachmentState))-                *> poke (ptr `plusPtr` 28) (vkColorWriteMask (poked :: VkPipelineColorBlendAttachmentState))----data VkPipelineColorBlendStateCreateInfo =-  VkPipelineColorBlendStateCreateInfo{ vkSType :: VkStructureType -                                     , vkPNext :: Ptr Void -                                     , vkFlags :: VkPipelineColorBlendStateCreateFlags -                                     , vkLogicOpEnable :: VkBool32 -                                     , vkLogicOp :: VkLogicOp -                                     , vkAttachmentCount :: Word32 -                                     , vkPAttachments :: Ptr VkPipelineColorBlendAttachmentState -                                     , vkBlendConstants :: Vec (ToPeano 4) CFloat -                                     }-  deriving (Eq)--instance Storable VkPipelineColorBlendStateCreateInfo where-  sizeOf ~_ = 56-  alignment ~_ = 8-  peek ptr = VkPipelineColorBlendStateCreateInfo <$> peek (ptr `plusPtr` 0)-                                                 <*> peek (ptr `plusPtr` 8)-                                                 <*> peek (ptr `plusPtr` 16)-                                                 <*> peek (ptr `plusPtr` 20)-                                                 <*> peek (ptr `plusPtr` 24)-                                                 <*> peek (ptr `plusPtr` 28)-                                                 <*> peek (ptr `plusPtr` 32)-                                                 <*> peek (ptr `plusPtr` 40)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineColorBlendStateCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineColorBlendStateCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineColorBlendStateCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkLogicOpEnable (poked :: VkPipelineColorBlendStateCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkLogicOp (poked :: VkPipelineColorBlendStateCreateInfo))-                *> poke (ptr `plusPtr` 28) (vkAttachmentCount (poked :: VkPipelineColorBlendStateCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkPAttachments (poked :: VkPipelineColorBlendStateCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkBlendConstants (poked :: VkPipelineColorBlendStateCreateInfo))----data VkPipelineDynamicStateCreateInfo =-  VkPipelineDynamicStateCreateInfo{ vkSType :: VkStructureType -                                  , vkPNext :: Ptr Void -                                  , vkFlags :: VkPipelineDynamicStateCreateFlags -                                  , vkDynamicStateCount :: Word32 -                                  , vkPDynamicStates :: Ptr VkDynamicState -                                  }-  deriving (Eq)--instance Storable VkPipelineDynamicStateCreateInfo where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek ptr = VkPipelineDynamicStateCreateInfo <$> peek (ptr `plusPtr` 0)-                                              <*> peek (ptr `plusPtr` 8)-                                              <*> peek (ptr `plusPtr` 16)-                                              <*> peek (ptr `plusPtr` 20)-                                              <*> peek (ptr `plusPtr` 24)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDynamicStateCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDynamicStateCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDynamicStateCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkDynamicStateCount (poked :: VkPipelineDynamicStateCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPDynamicStates (poked :: VkPipelineDynamicStateCreateInfo))----data VkStencilOpState =-  VkStencilOpState{ vkFailOp :: VkStencilOp -                  , vkPassOp :: VkStencilOp -                  , vkDepthFailOp :: VkStencilOp -                  , vkCompareOp :: VkCompareOp -                  , vkCompareMask :: Word32 -                  , vkWriteMask :: Word32 -                  , vkReference :: Word32 -                  }-  deriving (Eq)--instance Storable VkStencilOpState where-  sizeOf ~_ = 28-  alignment ~_ = 4-  peek ptr = VkStencilOpState <$> peek (ptr `plusPtr` 0)-                              <*> peek (ptr `plusPtr` 4)-                              <*> peek (ptr `plusPtr` 8)-                              <*> peek (ptr `plusPtr` 12)-                              <*> peek (ptr `plusPtr` 16)-                              <*> peek (ptr `plusPtr` 20)-                              <*> peek (ptr `plusPtr` 24)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkFailOp (poked :: VkStencilOpState))-                *> poke (ptr `plusPtr` 4) (vkPassOp (poked :: VkStencilOpState))-                *> poke (ptr `plusPtr` 8) (vkDepthFailOp (poked :: VkStencilOpState))-                *> poke (ptr `plusPtr` 12) (vkCompareOp (poked :: VkStencilOpState))-                *> poke (ptr `plusPtr` 16) (vkCompareMask (poked :: VkStencilOpState))-                *> poke (ptr `plusPtr` 20) (vkWriteMask (poked :: VkStencilOpState))-                *> poke (ptr `plusPtr` 24) (vkReference (poked :: VkStencilOpState))----data VkPipelineDepthStencilStateCreateInfo =-  VkPipelineDepthStencilStateCreateInfo{ vkSType :: VkStructureType -                                       , vkPNext :: Ptr Void -                                       , vkFlags :: VkPipelineDepthStencilStateCreateFlags -                                       , vkDepthTestEnable :: VkBool32 -                                       , vkDepthWriteEnable :: VkBool32 -                                       , vkDepthCompareOp :: VkCompareOp -                                       , vkDepthBoundsTestEnable :: VkBool32 -                                       , vkStencilTestEnable :: VkBool32 -                                       , vkFront :: VkStencilOpState -                                       , vkBack :: VkStencilOpState -                                       , vkMinDepthBounds :: CFloat -                                       , vkMaxDepthBounds :: CFloat -                                       }-  deriving (Eq)--instance Storable VkPipelineDepthStencilStateCreateInfo where-  sizeOf ~_ = 104-  alignment ~_ = 8-  peek ptr = VkPipelineDepthStencilStateCreateInfo <$> peek (ptr `plusPtr` 0)-                                                   <*> peek (ptr `plusPtr` 8)-                                                   <*> peek (ptr `plusPtr` 16)-                                                   <*> peek (ptr `plusPtr` 20)-                                                   <*> peek (ptr `plusPtr` 24)-                                                   <*> peek (ptr `plusPtr` 28)-                                                   <*> peek (ptr `plusPtr` 32)-                                                   <*> peek (ptr `plusPtr` 36)-                                                   <*> peek (ptr `plusPtr` 40)-                                                   <*> peek (ptr `plusPtr` 68)-                                                   <*> peek (ptr `plusPtr` 96)-                                                   <*> peek (ptr `plusPtr` 100)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkDepthTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkDepthWriteEnable (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 28) (vkDepthCompareOp (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkDepthBoundsTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 36) (vkStencilTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkFront (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 68) (vkBack (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 96) (vkMinDepthBounds (poked :: VkPipelineDepthStencilStateCreateInfo))-                *> poke (ptr `plusPtr` 100) (vkMaxDepthBounds (poked :: VkPipelineDepthStencilStateCreateInfo))----data VkGraphicsPipelineCreateInfo =-  VkGraphicsPipelineCreateInfo{ vkSType :: VkStructureType -                              , vkPNext :: Ptr Void -                              , vkFlags :: VkPipelineCreateFlags -                              , vkStageCount :: Word32 -                              , vkPStages :: Ptr VkPipelineShaderStageCreateInfo -                              , vkPVertexInputState :: Ptr VkPipelineVertexInputStateCreateInfo -                              , vkPInputAssemblyState :: Ptr VkPipelineInputAssemblyStateCreateInfo -                              , vkPTessellationState :: Ptr VkPipelineTessellationStateCreateInfo -                              , vkPViewportState :: Ptr VkPipelineViewportStateCreateInfo -                              , vkPRasterizationState :: Ptr VkPipelineRasterizationStateCreateInfo -                              , vkPMultisampleState :: Ptr VkPipelineMultisampleStateCreateInfo -                              , vkPDepthStencilState :: Ptr VkPipelineDepthStencilStateCreateInfo -                              , vkPColorBlendState :: Ptr VkPipelineColorBlendStateCreateInfo -                              , vkPDynamicState :: Ptr VkPipelineDynamicStateCreateInfo -                              , vkLayout :: VkPipelineLayout -                              , vkRenderPass :: VkRenderPass -                              , vkSubpass :: Word32 -                              , vkBasePipelineHandle :: VkPipeline -                              , vkBasePipelineIndex :: Int32 -                              }-  deriving (Eq)--instance Storable VkGraphicsPipelineCreateInfo where-  sizeOf ~_ = 144-  alignment ~_ = 8-  peek ptr = VkGraphicsPipelineCreateInfo <$> peek (ptr `plusPtr` 0)-                                          <*> peek (ptr `plusPtr` 8)-                                          <*> peek (ptr `plusPtr` 16)-                                          <*> peek (ptr `plusPtr` 20)-                                          <*> peek (ptr `plusPtr` 24)-                                          <*> peek (ptr `plusPtr` 32)-                                          <*> peek (ptr `plusPtr` 40)-                                          <*> peek (ptr `plusPtr` 48)-                                          <*> peek (ptr `plusPtr` 56)-                                          <*> peek (ptr `plusPtr` 64)-                                          <*> peek (ptr `plusPtr` 72)-                                          <*> peek (ptr `plusPtr` 80)-                                          <*> peek (ptr `plusPtr` 88)-                                          <*> peek (ptr `plusPtr` 96)-                                          <*> peek (ptr `plusPtr` 104)-                                          <*> peek (ptr `plusPtr` 112)-                                          <*> peek (ptr `plusPtr` 120)-                                          <*> peek (ptr `plusPtr` 128)-                                          <*> peek (ptr `plusPtr` 136)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkStageCount (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPStages (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkPVertexInputState (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkPInputAssemblyState (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 48) (vkPTessellationState (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 56) (vkPViewportState (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 64) (vkPRasterizationState (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 72) (vkPMultisampleState (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 80) (vkPDepthStencilState (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 88) (vkPColorBlendState (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 96) (vkPDynamicState (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 104) (vkLayout (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 112) (vkRenderPass (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 120) (vkSubpass (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 128) (vkBasePipelineHandle (poked :: VkGraphicsPipelineCreateInfo))-                *> poke (ptr `plusPtr` 136) (vkBasePipelineIndex (poked :: VkGraphicsPipelineCreateInfo))----data VkPipelineCacheCreateInfo =-  VkPipelineCacheCreateInfo{ vkSType :: VkStructureType -                           , vkPNext :: Ptr Void -                           , vkFlags :: VkPipelineCacheCreateFlags -                           , vkInitialDataSize :: CSize -                           , vkPInitialData :: Ptr Void -                           }-  deriving (Eq)--instance Storable VkPipelineCacheCreateInfo where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek ptr = VkPipelineCacheCreateInfo <$> peek (ptr `plusPtr` 0)-                                       <*> peek (ptr `plusPtr` 8)-                                       <*> peek (ptr `plusPtr` 16)-                                       <*> peek (ptr `plusPtr` 24)-                                       <*> peek (ptr `plusPtr` 32)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineCacheCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineCacheCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineCacheCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkInitialDataSize (poked :: VkPipelineCacheCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkPInitialData (poked :: VkPipelineCacheCreateInfo))----data VkPushConstantRange =-  VkPushConstantRange{ vkStageFlags :: VkShaderStageFlags -                     , vkOffset :: Word32 -                     , vkSize :: Word32 -                     }-  deriving (Eq)--instance Storable VkPushConstantRange where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek ptr = VkPushConstantRange <$> peek (ptr `plusPtr` 0)-                                 <*> peek (ptr `plusPtr` 4)-                                 <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkStageFlags (poked :: VkPushConstantRange))-                *> poke (ptr `plusPtr` 4) (vkOffset (poked :: VkPushConstantRange))-                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkPushConstantRange))----data VkPipelineLayoutCreateInfo =-  VkPipelineLayoutCreateInfo{ vkSType :: VkStructureType -                            , vkPNext :: Ptr Void -                            , vkFlags :: VkPipelineLayoutCreateFlags -                            , vkSetLayoutCount :: Word32 -                            , vkPSetLayouts :: Ptr VkDescriptorSetLayout -                            , vkPushConstantRangeCount :: Word32 -                            , vkPPushConstantRanges :: Ptr VkPushConstantRange -                            }-  deriving (Eq)--instance Storable VkPipelineLayoutCreateInfo where-  sizeOf ~_ = 48-  alignment ~_ = 8-  peek ptr = VkPipelineLayoutCreateInfo <$> peek (ptr `plusPtr` 0)-                                        <*> peek (ptr `plusPtr` 8)-                                        <*> peek (ptr `plusPtr` 16)-                                        <*> peek (ptr `plusPtr` 20)-                                        <*> peek (ptr `plusPtr` 24)-                                        <*> peek (ptr `plusPtr` 32)-                                        <*> peek (ptr `plusPtr` 40)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineLayoutCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineLayoutCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineLayoutCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkSetLayoutCount (poked :: VkPipelineLayoutCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPSetLayouts (poked :: VkPipelineLayoutCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkPushConstantRangeCount (poked :: VkPipelineLayoutCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkPPushConstantRanges (poked :: VkPipelineLayoutCreateInfo))----data VkSamplerCreateInfo =-  VkSamplerCreateInfo{ vkSType :: VkStructureType -                     , vkPNext :: Ptr Void -                     , vkFlags :: VkSamplerCreateFlags -                     , vkMagFilter :: VkFilter -                     , vkMinFilter :: VkFilter -                     , vkMipmapMode :: VkSamplerMipmapMode -                     , vkAddressModeU :: VkSamplerAddressMode -                     , vkAddressModeV :: VkSamplerAddressMode -                     , vkAddressModeW :: VkSamplerAddressMode -                     , vkMipLodBias :: CFloat -                     , vkAnisotropyEnable :: VkBool32 -                     , vkMaxAnisotropy :: CFloat -                     , vkCompareEnable :: VkBool32 -                     , vkCompareOp :: VkCompareOp -                     , vkMinLod :: CFloat -                     , vkMaxLod :: CFloat -                     , vkBorderColor :: VkBorderColor -                     , vkUnnormalizedCoordinates :: VkBool32 -                     }-  deriving (Eq)--instance Storable VkSamplerCreateInfo where-  sizeOf ~_ = 80-  alignment ~_ = 8-  peek ptr = VkSamplerCreateInfo <$> peek (ptr `plusPtr` 0)-                                 <*> peek (ptr `plusPtr` 8)-                                 <*> peek (ptr `plusPtr` 16)-                                 <*> peek (ptr `plusPtr` 20)-                                 <*> peek (ptr `plusPtr` 24)-                                 <*> peek (ptr `plusPtr` 28)-                                 <*> peek (ptr `plusPtr` 32)-                                 <*> peek (ptr `plusPtr` 36)-                                 <*> peek (ptr `plusPtr` 40)-                                 <*> peek (ptr `plusPtr` 44)-                                 <*> peek (ptr `plusPtr` 48)-                                 <*> peek (ptr `plusPtr` 52)-                                 <*> peek (ptr `plusPtr` 56)-                                 <*> peek (ptr `plusPtr` 60)-                                 <*> peek (ptr `plusPtr` 64)-                                 <*> peek (ptr `plusPtr` 68)-                                 <*> peek (ptr `plusPtr` 72)-                                 <*> peek (ptr `plusPtr` 76)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkMagFilter (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkMinFilter (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 28) (vkMipmapMode (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkAddressModeU (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 36) (vkAddressModeV (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkAddressModeW (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 44) (vkMipLodBias (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 48) (vkAnisotropyEnable (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 52) (vkMaxAnisotropy (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 56) (vkCompareEnable (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 60) (vkCompareOp (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 64) (vkMinLod (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 68) (vkMaxLod (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 72) (vkBorderColor (poked :: VkSamplerCreateInfo))-                *> poke (ptr `plusPtr` 76) (vkUnnormalizedCoordinates (poked :: VkSamplerCreateInfo))----data VkCommandPoolCreateInfo =-  VkCommandPoolCreateInfo{ vkSType :: VkStructureType -                         , vkPNext :: Ptr Void -                         , vkFlags :: VkCommandPoolCreateFlags -                         , vkQueueFamilyIndex :: Word32 -                         }-  deriving (Eq)--instance Storable VkCommandPoolCreateInfo where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkCommandPoolCreateInfo <$> peek (ptr `plusPtr` 0)-                                     <*> peek (ptr `plusPtr` 8)-                                     <*> peek (ptr `plusPtr` 16)-                                     <*> peek (ptr `plusPtr` 20)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandPoolCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandPoolCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkCommandPoolCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkQueueFamilyIndex (poked :: VkCommandPoolCreateInfo))----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))----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 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 VkRenderPassBeginInfo =-  VkRenderPassBeginInfo{ vkSType :: VkStructureType -                       , vkPNext :: Ptr Void -                       , vkRenderPass :: VkRenderPass -                       , vkFramebuffer :: VkFramebuffer -                       , vkRenderArea :: VkRect2D -                       , vkClearValueCount :: Word32 -                       , vkPClearValues :: Ptr VkClearValue -                       }-  deriving (Eq)--instance Storable VkRenderPassBeginInfo where-  sizeOf ~_ = 64-  alignment ~_ = 8-  peek ptr = VkRenderPassBeginInfo <$> peek (ptr `plusPtr` 0)-                                   <*> peek (ptr `plusPtr` 8)-                                   <*> peek (ptr `plusPtr` 16)-                                   <*> peek (ptr `plusPtr` 24)-                                   <*> peek (ptr `plusPtr` 32)-                                   <*> peek (ptr `plusPtr` 48)-                                   <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkRenderPassBeginInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassBeginInfo))-                *> poke (ptr `plusPtr` 16) (vkRenderPass (poked :: VkRenderPassBeginInfo))-                *> poke (ptr `plusPtr` 24) (vkFramebuffer (poked :: VkRenderPassBeginInfo))-                *> poke (ptr `plusPtr` 32) (vkRenderArea (poked :: VkRenderPassBeginInfo))-                *> poke (ptr `plusPtr` 48) (vkClearValueCount (poked :: VkRenderPassBeginInfo))-                *> poke (ptr `plusPtr` 56) (vkPClearValues (poked :: VkRenderPassBeginInfo))----data VkClearDepthStencilValue =-  VkClearDepthStencilValue{ vkDepth :: CFloat -                          , vkStencil :: Word32 -                          }-  deriving (Eq)--instance Storable VkClearDepthStencilValue where-  sizeOf ~_ = 8-  alignment ~_ = 4-  peek ptr = VkClearDepthStencilValue <$> peek (ptr `plusPtr` 0)-                                      <*> peek (ptr `plusPtr` 4)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkDepth (poked :: VkClearDepthStencilValue))-                *> poke (ptr `plusPtr` 4) (vkStencil (poked :: VkClearDepthStencilValue))----data VkClearAttachment =-  VkClearAttachment{ vkAspectMask :: VkImageAspectFlags -                   , vkColorAttachment :: Word32 -                   , vkClearValue :: VkClearValue -                   }-  deriving (Eq)--instance Storable VkClearAttachment where-  sizeOf ~_ = 24-  alignment ~_ = 4-  peek ptr = VkClearAttachment <$> peek (ptr `plusPtr` 0)-                               <*> peek (ptr `plusPtr` 4)-                               <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkClearAttachment))-                *> poke (ptr `plusPtr` 4) (vkColorAttachment (poked :: VkClearAttachment))-                *> poke (ptr `plusPtr` 8) (vkClearValue (poked :: VkClearAttachment))----data VkAttachmentDescription =-  VkAttachmentDescription{ vkFlags :: VkAttachmentDescriptionFlags -                         , vkFormat :: VkFormat -                         , vkSamples :: VkSampleCountFlagBits -                         , vkLoadOp :: VkAttachmentLoadOp -                         , vkStoreOp :: VkAttachmentStoreOp -                         , vkStencilLoadOp :: VkAttachmentLoadOp -                         , vkStencilStoreOp :: VkAttachmentStoreOp -                         , vkInitialLayout :: VkImageLayout -                         , vkFinalLayout :: VkImageLayout -                         }-  deriving (Eq)--instance Storable VkAttachmentDescription where-  sizeOf ~_ = 36-  alignment ~_ = 4-  peek ptr = VkAttachmentDescription <$> peek (ptr `plusPtr` 0)-                                     <*> peek (ptr `plusPtr` 4)-                                     <*> peek (ptr `plusPtr` 8)-                                     <*> peek (ptr `plusPtr` 12)-                                     <*> peek (ptr `plusPtr` 16)-                                     <*> peek (ptr `plusPtr` 20)-                                     <*> peek (ptr `plusPtr` 24)-                                     <*> peek (ptr `plusPtr` 28)-                                     <*> peek (ptr `plusPtr` 32)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkFlags (poked :: VkAttachmentDescription))-                *> poke (ptr `plusPtr` 4) (vkFormat (poked :: VkAttachmentDescription))-                *> poke (ptr `plusPtr` 8) (vkSamples (poked :: VkAttachmentDescription))-                *> poke (ptr `plusPtr` 12) (vkLoadOp (poked :: VkAttachmentDescription))-                *> poke (ptr `plusPtr` 16) (vkStoreOp (poked :: VkAttachmentDescription))-                *> poke (ptr `plusPtr` 20) (vkStencilLoadOp (poked :: VkAttachmentDescription))-                *> poke (ptr `plusPtr` 24) (vkStencilStoreOp (poked :: VkAttachmentDescription))-                *> poke (ptr `plusPtr` 28) (vkInitialLayout (poked :: VkAttachmentDescription))-                *> poke (ptr `plusPtr` 32) (vkFinalLayout (poked :: VkAttachmentDescription))----data VkAttachmentReference =-  VkAttachmentReference{ vkAttachment :: Word32 -                       , vkLayout :: VkImageLayout -                       }-  deriving (Eq)--instance Storable VkAttachmentReference where-  sizeOf ~_ = 8-  alignment ~_ = 4-  peek ptr = VkAttachmentReference <$> peek (ptr `plusPtr` 0)-                                   <*> peek (ptr `plusPtr` 4)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAttachment (poked :: VkAttachmentReference))-                *> poke (ptr `plusPtr` 4) (vkLayout (poked :: VkAttachmentReference))----data VkSubpassDescription =-  VkSubpassDescription{ vkFlags :: VkSubpassDescriptionFlags -                      , vkPipelineBindPoint :: VkPipelineBindPoint -                      , vkInputAttachmentCount :: Word32 -                      , vkPInputAttachments :: Ptr VkAttachmentReference -                      , vkColorAttachmentCount :: Word32 -                      , vkPColorAttachments :: Ptr VkAttachmentReference -                      , vkPResolveAttachments :: Ptr VkAttachmentReference -                      , vkPDepthStencilAttachment :: Ptr VkAttachmentReference -                      , vkPreserveAttachmentCount :: Word32 -                      , vkPPreserveAttachments :: Ptr Word32 -                      }-  deriving (Eq)--instance Storable VkSubpassDescription where-  sizeOf ~_ = 72-  alignment ~_ = 8-  peek ptr = VkSubpassDescription <$> peek (ptr `plusPtr` 0)-                                  <*> peek (ptr `plusPtr` 4)-                                  <*> peek (ptr `plusPtr` 8)-                                  <*> peek (ptr `plusPtr` 16)-                                  <*> peek (ptr `plusPtr` 24)-                                  <*> peek (ptr `plusPtr` 32)-                                  <*> peek (ptr `plusPtr` 40)-                                  <*> peek (ptr `plusPtr` 48)-                                  <*> peek (ptr `plusPtr` 56)-                                  <*> peek (ptr `plusPtr` 64)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkFlags (poked :: VkSubpassDescription))-                *> poke (ptr `plusPtr` 4) (vkPipelineBindPoint (poked :: VkSubpassDescription))-                *> poke (ptr `plusPtr` 8) (vkInputAttachmentCount (poked :: VkSubpassDescription))-                *> poke (ptr `plusPtr` 16) (vkPInputAttachments (poked :: VkSubpassDescription))-                *> poke (ptr `plusPtr` 24) (vkColorAttachmentCount (poked :: VkSubpassDescription))-                *> poke (ptr `plusPtr` 32) (vkPColorAttachments (poked :: VkSubpassDescription))-                *> poke (ptr `plusPtr` 40) (vkPResolveAttachments (poked :: VkSubpassDescription))-                *> poke (ptr `plusPtr` 48) (vkPDepthStencilAttachment (poked :: VkSubpassDescription))-                *> poke (ptr `plusPtr` 56) (vkPreserveAttachmentCount (poked :: VkSubpassDescription))-                *> poke (ptr `plusPtr` 64) (vkPPreserveAttachments (poked :: VkSubpassDescription))----data VkSubpassDependency =-  VkSubpassDependency{ vkSrcSubpass :: Word32 -                     , vkDstSubpass :: Word32 -                     , vkSrcStageMask :: VkPipelineStageFlags -                     , vkDstStageMask :: VkPipelineStageFlags -                     , vkSrcAccessMask :: VkAccessFlags -                     , vkDstAccessMask :: VkAccessFlags -                     , vkDependencyFlags :: VkDependencyFlags -                     }-  deriving (Eq)--instance Storable VkSubpassDependency where-  sizeOf ~_ = 28-  alignment ~_ = 4-  peek ptr = VkSubpassDependency <$> peek (ptr `plusPtr` 0)-                                 <*> peek (ptr `plusPtr` 4)-                                 <*> peek (ptr `plusPtr` 8)-                                 <*> peek (ptr `plusPtr` 12)-                                 <*> peek (ptr `plusPtr` 16)-                                 <*> peek (ptr `plusPtr` 20)-                                 <*> peek (ptr `plusPtr` 24)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubpass (poked :: VkSubpassDependency))-                *> poke (ptr `plusPtr` 4) (vkDstSubpass (poked :: VkSubpassDependency))-                *> poke (ptr `plusPtr` 8) (vkSrcStageMask (poked :: VkSubpassDependency))-                *> poke (ptr `plusPtr` 12) (vkDstStageMask (poked :: VkSubpassDependency))-                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkSubpassDependency))-                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkSubpassDependency))-                *> poke (ptr `plusPtr` 24) (vkDependencyFlags (poked :: VkSubpassDependency))----data VkRenderPassCreateInfo =-  VkRenderPassCreateInfo{ vkSType :: VkStructureType -                        , vkPNext :: Ptr Void -                        , vkFlags :: VkRenderPassCreateFlags -                        , vkAttachmentCount :: Word32 -                        , vkPAttachments :: Ptr VkAttachmentDescription -                        , vkSubpassCount :: Word32 -                        , vkPSubpasses :: Ptr VkSubpassDescription -                        , vkDependencyCount :: Word32 -                        , vkPDependencies :: Ptr VkSubpassDependency -                        }-  deriving (Eq)--instance Storable VkRenderPassCreateInfo where-  sizeOf ~_ = 64-  alignment ~_ = 8-  peek ptr = VkRenderPassCreateInfo <$> peek (ptr `plusPtr` 0)-                                    <*> peek (ptr `plusPtr` 8)-                                    <*> peek (ptr `plusPtr` 16)-                                    <*> peek (ptr `plusPtr` 20)-                                    <*> peek (ptr `plusPtr` 24)-                                    <*> peek (ptr `plusPtr` 32)-                                    <*> peek (ptr `plusPtr` 40)-                                    <*> peek (ptr `plusPtr` 48)-                                    <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkRenderPassCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkRenderPassCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkAttachmentCount (poked :: VkRenderPassCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkPAttachments (poked :: VkRenderPassCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkSubpassCount (poked :: VkRenderPassCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkPSubpasses (poked :: VkRenderPassCreateInfo))-                *> poke (ptr `plusPtr` 48) (vkDependencyCount (poked :: VkRenderPassCreateInfo))-                *> poke (ptr `plusPtr` 56) (vkPDependencies (poked :: VkRenderPassCreateInfo))----data VkEventCreateInfo =-  VkEventCreateInfo{ vkSType :: VkStructureType -                   , vkPNext :: Ptr Void -                   , vkFlags :: VkEventCreateFlags -                   }-  deriving (Eq)--instance Storable VkEventCreateInfo where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkEventCreateInfo <$> peek (ptr `plusPtr` 0)-                               <*> peek (ptr `plusPtr` 8)-                               <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkEventCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkEventCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkEventCreateInfo))----data VkFenceCreateInfo =-  VkFenceCreateInfo{ vkSType :: VkStructureType -                   , vkPNext :: Ptr Void -                   , vkFlags :: VkFenceCreateFlags -                   }-  deriving (Eq)--instance Storable VkFenceCreateInfo where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkFenceCreateInfo <$> peek (ptr `plusPtr` 0)-                               <*> peek (ptr `plusPtr` 8)-                               <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFenceCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFenceCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkFenceCreateInfo))----data VkPhysicalDeviceFeatures =-  VkPhysicalDeviceFeatures{ vkRobustBufferAccess :: VkBool32 -                          , vkFullDrawIndexUint :: VkBool32 -                          , vkImageCubeArray :: VkBool32 -                          , vkIndependentBlend :: VkBool32 -                          , vkGeometryShader :: VkBool32 -                          , vkTessellationShader :: VkBool32 -                          , vkSampleRateShading :: VkBool32 -                          , vkDualSrcBlend :: VkBool32 -                          , vkLogicOp :: VkBool32 -                          , vkMultiDrawIndirect :: VkBool32 -                          , vkDrawIndirectFirstInstance :: VkBool32 -                          , vkDepthClamp :: VkBool32 -                          , vkDepthBiasClamp :: VkBool32 -                          , vkFillModeNonSolid :: VkBool32 -                          , vkDepthBounds :: VkBool32 -                          , vkWideLines :: VkBool32 -                          , vkLargePoints :: VkBool32 -                          , vkAlphaToOne :: VkBool32 -                          , vkMultiViewport :: VkBool32 -                          , vkSamplerAnisotropy :: VkBool32 -                          , vkTextureCompressionETC :: VkBool32 -                          , vkTextureCompressionASTC_LDR :: VkBool32 -                          , vkTextureCompressionBC :: VkBool32 -                          , vkOcclusionQueryPrecise :: VkBool32 -                          , vkPipelineStatisticsQuery :: VkBool32 -                          , vkVertexPipelineStoresAndAtomics :: VkBool32 -                          , vkFragmentStoresAndAtomics :: VkBool32 -                          , vkShaderTessellationAndGeometryPointSize :: VkBool32 -                          , vkShaderImageGatherExtended :: VkBool32 -                          , vkShaderStorageImageExtendedFormats :: VkBool32 -                          , vkShaderStorageImageMultisample :: VkBool32 -                          , vkShaderStorageImageReadWithoutFormat :: VkBool32 -                          , vkShaderStorageImageWriteWithoutFormat :: VkBool32 -                          , vkShaderUniformBufferArrayDynamicIndexing :: VkBool32 -                          , vkShaderSampledImageArrayDynamicIndexing :: VkBool32 -                          , vkShaderStorageBufferArrayDynamicIndexing :: VkBool32 -                          , vkShaderStorageImageArrayDynamicIndexing :: VkBool32 -                          , vkShaderClipDistance :: VkBool32 -                          , vkShaderCullDistance :: VkBool32 -                          , vkShaderFloat :: VkBool32 -                          , vkShaderInt :: VkBool32 -                          , vkShaderInt :: VkBool32 -                          , vkShaderResourceResidency :: VkBool32 -                          , vkShaderResourceMinLod :: VkBool32 -                          , vkSparseBinding :: VkBool32 -                          , vkSparseResidencyBuffer :: VkBool32 -                          , vkSparseResidencyImage :: VkBool32 -                          , vkSparseResidencyImage :: VkBool32 -                          , vkSparseResidency :: VkBool32 -                          , vkSparseResidency :: VkBool32 -                          , vkSparseResidency :: VkBool32 -                          , vkSparseResidency :: VkBool32 -                          , vkSparseResidencyAliased :: VkBool32 -                          , vkVariableMultisampleRate :: VkBool32 -                          , vkInheritedQueries :: VkBool32 -                          }-  deriving (Eq)--instance Storable VkPhysicalDeviceFeatures where-  sizeOf ~_ = 220-  alignment ~_ = 4-  peek ptr = VkPhysicalDeviceFeatures <$> peek (ptr `plusPtr` 0)-                                      <*> peek (ptr `plusPtr` 4)-                                      <*> peek (ptr `plusPtr` 8)-                                      <*> peek (ptr `plusPtr` 12)-                                      <*> peek (ptr `plusPtr` 16)-                                      <*> peek (ptr `plusPtr` 20)-                                      <*> peek (ptr `plusPtr` 24)-                                      <*> peek (ptr `plusPtr` 28)-                                      <*> peek (ptr `plusPtr` 32)-                                      <*> peek (ptr `plusPtr` 36)-                                      <*> peek (ptr `plusPtr` 40)-                                      <*> peek (ptr `plusPtr` 44)-                                      <*> peek (ptr `plusPtr` 48)-                                      <*> peek (ptr `plusPtr` 52)-                                      <*> peek (ptr `plusPtr` 56)-                                      <*> peek (ptr `plusPtr` 60)-                                      <*> peek (ptr `plusPtr` 64)-                                      <*> peek (ptr `plusPtr` 68)-                                      <*> peek (ptr `plusPtr` 72)-                                      <*> peek (ptr `plusPtr` 76)-                                      <*> peek (ptr `plusPtr` 80)-                                      <*> peek (ptr `plusPtr` 84)-                                      <*> peek (ptr `plusPtr` 88)-                                      <*> peek (ptr `plusPtr` 92)-                                      <*> peek (ptr `plusPtr` 96)-                                      <*> peek (ptr `plusPtr` 100)-                                      <*> peek (ptr `plusPtr` 104)-                                      <*> peek (ptr `plusPtr` 108)-                                      <*> peek (ptr `plusPtr` 112)-                                      <*> peek (ptr `plusPtr` 116)-                                      <*> peek (ptr `plusPtr` 120)-                                      <*> peek (ptr `plusPtr` 124)-                                      <*> peek (ptr `plusPtr` 128)-                                      <*> peek (ptr `plusPtr` 132)-                                      <*> peek (ptr `plusPtr` 136)-                                      <*> peek (ptr `plusPtr` 140)-                                      <*> peek (ptr `plusPtr` 144)-                                      <*> peek (ptr `plusPtr` 148)-                                      <*> peek (ptr `plusPtr` 152)-                                      <*> peek (ptr `plusPtr` 156)-                                      <*> peek (ptr `plusPtr` 160)-                                      <*> peek (ptr `plusPtr` 164)-                                      <*> peek (ptr `plusPtr` 168)-                                      <*> peek (ptr `plusPtr` 172)-                                      <*> peek (ptr `plusPtr` 176)-                                      <*> peek (ptr `plusPtr` 180)-                                      <*> peek (ptr `plusPtr` 184)-                                      <*> peek (ptr `plusPtr` 188)-                                      <*> peek (ptr `plusPtr` 192)-                                      <*> peek (ptr `plusPtr` 196)-                                      <*> peek (ptr `plusPtr` 200)-                                      <*> peek (ptr `plusPtr` 204)-                                      <*> peek (ptr `plusPtr` 208)-                                      <*> peek (ptr `plusPtr` 212)-                                      <*> peek (ptr `plusPtr` 216)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkRobustBufferAccess (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 4) (vkFullDrawIndexUint (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 8) (vkImageCubeArray (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 12) (vkIndependentBlend (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 16) (vkGeometryShader (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 20) (vkTessellationShader (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 24) (vkSampleRateShading (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 28) (vkDualSrcBlend (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 32) (vkLogicOp (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 36) (vkMultiDrawIndirect (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 40) (vkDrawIndirectFirstInstance (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 44) (vkDepthClamp (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 48) (vkDepthBiasClamp (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 52) (vkFillModeNonSolid (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 56) (vkDepthBounds (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 60) (vkWideLines (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 64) (vkLargePoints (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 68) (vkAlphaToOne (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 72) (vkMultiViewport (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 76) (vkSamplerAnisotropy (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 80) (vkTextureCompressionETC (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 84) (vkTextureCompressionASTC_LDR (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 88) (vkTextureCompressionBC (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 92) (vkOcclusionQueryPrecise (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 96) (vkPipelineStatisticsQuery (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 100) (vkVertexPipelineStoresAndAtomics (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 104) (vkFragmentStoresAndAtomics (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 108) (vkShaderTessellationAndGeometryPointSize (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 112) (vkShaderImageGatherExtended (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 116) (vkShaderStorageImageExtendedFormats (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 120) (vkShaderStorageImageMultisample (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 124) (vkShaderStorageImageReadWithoutFormat (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 128) (vkShaderStorageImageWriteWithoutFormat (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 132) (vkShaderUniformBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 136) (vkShaderSampledImageArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 140) (vkShaderStorageBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 144) (vkShaderStorageImageArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 148) (vkShaderClipDistance (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 152) (vkShaderCullDistance (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 156) (vkShaderFloat (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 160) (vkShaderInt (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 164) (vkShaderInt (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 168) (vkShaderResourceResidency (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 172) (vkShaderResourceMinLod (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 176) (vkSparseBinding (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 180) (vkSparseResidencyBuffer (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 184) (vkSparseResidencyImage (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 188) (vkSparseResidencyImage (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 192) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 196) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 200) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 204) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 208) (vkSparseResidencyAliased (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 212) (vkVariableMultisampleRate (poked :: VkPhysicalDeviceFeatures))-                *> poke (ptr `plusPtr` 216) (vkInheritedQueries (poked :: VkPhysicalDeviceFeatures))----data VkPhysicalDeviceSparseProperties =-  VkPhysicalDeviceSparseProperties{ vkResidencyStandard :: VkBool32 -                                  , vkResidencyStandard :: VkBool32 -                                  , vkResidencyStandard :: VkBool32 -                                  , vkResidencyAlignedMipSize :: VkBool32 -                                  , vkResidencyNonResidentStrict :: VkBool32 -                                  }-  deriving (Eq)--instance Storable VkPhysicalDeviceSparseProperties where-  sizeOf ~_ = 20-  alignment ~_ = 4-  peek ptr = VkPhysicalDeviceSparseProperties <$> peek (ptr `plusPtr` 0)-                                              <*> peek (ptr `plusPtr` 4)-                                              <*> peek (ptr `plusPtr` 8)-                                              <*> peek (ptr `plusPtr` 12)-                                              <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkResidencyStandard (poked :: VkPhysicalDeviceSparseProperties))-                *> poke (ptr `plusPtr` 4) (vkResidencyStandard (poked :: VkPhysicalDeviceSparseProperties))-                *> poke (ptr `plusPtr` 8) (vkResidencyStandard (poked :: VkPhysicalDeviceSparseProperties))-                *> poke (ptr `plusPtr` 12) (vkResidencyAlignedMipSize (poked :: VkPhysicalDeviceSparseProperties))-                *> poke (ptr `plusPtr` 16) (vkResidencyNonResidentStrict (poked :: VkPhysicalDeviceSparseProperties))----data VkPhysicalDeviceLimits =-  VkPhysicalDeviceLimits{ vkMaxImageDimension :: Word32 -                        , vkMaxImageDimension :: Word32 -                        , vkMaxImageDimension :: Word32 -                        , vkMaxImageDimensionCube :: Word32 -                        , vkMaxImageArrayLayers :: Word32 -                        , vkMaxTexelBufferElements :: Word32 -                        , vkMaxUniformBufferRange :: Word32 -                        , vkMaxStorageBufferRange :: Word32 -                        , vkMaxPushConstantsSize :: Word32 -                        , vkMaxMemoryAllocationCount :: Word32 -                        , vkMaxSamplerAllocationCount :: Word32 -                        , vkBufferImageGranularity :: VkDeviceSize -                        , vkSparseAddressSpaceSize :: VkDeviceSize -                        , vkMaxBoundDescriptorSets :: Word32 -                        , vkMaxPerStageDescriptorSamplers :: Word32 -                        , vkMaxPerStageDescriptorUniformBuffers :: Word32 -                        , vkMaxPerStageDescriptorStorageBuffers :: Word32 -                        , vkMaxPerStageDescriptorSampledImages :: Word32 -                        , vkMaxPerStageDescriptorStorageImages :: Word32 -                        , vkMaxPerStageDescriptorInputAttachments :: Word32 -                        , vkMaxPerStageResources :: Word32 -                        , vkMaxDescriptorSetSamplers :: Word32 -                        , vkMaxDescriptorSetUniformBuffers :: Word32 -                        , vkMaxDescriptorSetUniformBuffersDynamic :: Word32 -                        , vkMaxDescriptorSetStorageBuffers :: Word32 -                        , vkMaxDescriptorSetStorageBuffersDynamic :: Word32 -                        , vkMaxDescriptorSetSampledImages :: Word32 -                        , vkMaxDescriptorSetStorageImages :: Word32 -                        , vkMaxDescriptorSetInputAttachments :: Word32 -                        , vkMaxVertexInputAttributes :: Word32 -                        , vkMaxVertexInputBindings :: Word32 -                        , vkMaxVertexInputAttributeOffset :: Word32 -                        , vkMaxVertexInputBindingStride :: Word32 -                        , vkMaxVertexOutputComponents :: Word32 -                        , vkMaxTessellationGenerationLevel :: Word32 -                        , vkMaxTessellationPatchSize :: Word32 -                        , vkMaxTessellationControlPerVertexInputComponents :: Word32 -                        , vkMaxTessellationControlPerVertexOutputComponents :: Word32 -                        , vkMaxTessellationControlPerPatchOutputComponents :: Word32 -                        , vkMaxTessellationControlTotalOutputComponents :: Word32 -                        , vkMaxTessellationEvaluationInputComponents :: Word32 -                        , vkMaxTessellationEvaluationOutputComponents :: Word32 -                        , vkMaxGeometryShaderInvocations :: Word32 -                        , vkMaxGeometryInputComponents :: Word32 -                        , vkMaxGeometryOutputComponents :: Word32 -                        , vkMaxGeometryOutputVertices :: Word32 -                        , vkMaxGeometryTotalOutputComponents :: Word32 -                        , vkMaxFragmentInputComponents :: Word32 -                        , vkMaxFragmentOutputAttachments :: Word32 -                        , vkMaxFragmentDualSrcAttachments :: Word32 -                        , vkMaxFragmentCombinedOutputResources :: Word32 -                        , vkMaxComputeSharedMemorySize :: Word32 -                        , vkMaxComputeWorkGroupCount :: Vec (ToPeano 3) Word32 -                        , vkMaxComputeWorkGroupInvocations :: Word32 -                        , vkMaxComputeWorkGroupSize :: Vec (ToPeano 3) Word32 -                        , vkSubPixelPrecisionBits :: Word32 -                        , vkSubTexelPrecisionBits :: Word32 -                        , vkMipmapPrecisionBits :: Word32 -                        , vkMaxDrawIndexedIndexValue :: Word32 -                        , vkMaxDrawIndirectCount :: Word32 -                        , vkMaxSamplerLodBias :: CFloat -                        , vkMaxSamplerAnisotropy :: CFloat -                        , vkMaxViewports :: Word32 -                        , vkMaxViewportDimensions :: Vec (ToPeano 2) Word32 -                        , vkViewportBoundsRange :: Vec (ToPeano 2) CFloat -                        , vkViewportSubPixelBits :: Word32 -                        , vkMinMemoryMapAlignment :: CSize -                        , vkMinTexelBufferOffsetAlignment :: VkDeviceSize -                        , vkMinUniformBufferOffsetAlignment :: VkDeviceSize -                        , vkMinStorageBufferOffsetAlignment :: VkDeviceSize -                        , vkMinTexelOffset :: Int32 -                        , vkMaxTexelOffset :: Word32 -                        , vkMinTexelGatherOffset :: Int32 -                        , vkMaxTexelGatherOffset :: Word32 -                        , vkMinInterpolationOffset :: CFloat -                        , vkMaxInterpolationOffset :: CFloat -                        , vkSubPixelInterpolationOffsetBits :: Word32 -                        , vkMaxFramebufferWidth :: Word32 -                        , vkMaxFramebufferHeight :: Word32 -                        , vkMaxFramebufferLayers :: Word32 -                        , vkFramebufferColorSampleCounts :: VkSampleCountFlags -                        , vkFramebufferDepthSampleCounts :: VkSampleCountFlags -                        , vkFramebufferStencilSampleCounts :: VkSampleCountFlags -                        , vkFramebufferNoAttachmentsSampleCounts :: VkSampleCountFlags -                        , vkMaxColorAttachments :: Word32 -                        , vkSampledImageColorSampleCounts :: VkSampleCountFlags -                        , vkSampledImageIntegerSampleCounts :: VkSampleCountFlags -                        , vkSampledImageDepthSampleCounts :: VkSampleCountFlags -                        , vkSampledImageStencilSampleCounts :: VkSampleCountFlags -                        , vkStorageImageSampleCounts :: VkSampleCountFlags -                        , vkMaxSampleMaskWords :: Word32 -                        , vkTimestampComputeAndGraphics :: VkBool32 -                        , vkTimestampPeriod :: CFloat -                        , vkMaxClipDistances :: Word32 -                        , vkMaxCullDistances :: Word32 -                        , vkMaxCombinedClipAndCullDistances :: Word32 -                        , vkDiscreteQueuePriorities :: Word32 -                        , vkPointSizeRange :: Vec (ToPeano 2) CFloat -                        , vkLineWidthRange :: Vec (ToPeano 2) CFloat -                        , vkPointSizeGranularity :: CFloat -                        , vkLineWidthGranularity :: CFloat -                        , vkStrictLines :: VkBool32 -                        , vkStandardSampleLocations :: VkBool32 -                        , vkOptimalBufferCopyOffsetAlignment :: VkDeviceSize -                        , vkOptimalBufferCopyRowPitchAlignment :: VkDeviceSize -                        , vkNonCoherentAtomSize :: VkDeviceSize -                        }-  deriving (Eq)--instance Storable VkPhysicalDeviceLimits where-  sizeOf ~_ = 504-  alignment ~_ = 8-  peek ptr = VkPhysicalDeviceLimits <$> peek (ptr `plusPtr` 0)-                                    <*> peek (ptr `plusPtr` 4)-                                    <*> peek (ptr `plusPtr` 8)-                                    <*> peek (ptr `plusPtr` 12)-                                    <*> peek (ptr `plusPtr` 16)-                                    <*> peek (ptr `plusPtr` 20)-                                    <*> peek (ptr `plusPtr` 24)-                                    <*> peek (ptr `plusPtr` 28)-                                    <*> peek (ptr `plusPtr` 32)-                                    <*> peek (ptr `plusPtr` 36)-                                    <*> peek (ptr `plusPtr` 40)-                                    <*> peek (ptr `plusPtr` 48)-                                    <*> peek (ptr `plusPtr` 56)-                                    <*> peek (ptr `plusPtr` 64)-                                    <*> peek (ptr `plusPtr` 68)-                                    <*> peek (ptr `plusPtr` 72)-                                    <*> peek (ptr `plusPtr` 76)-                                    <*> peek (ptr `plusPtr` 80)-                                    <*> peek (ptr `plusPtr` 84)-                                    <*> peek (ptr `plusPtr` 88)-                                    <*> peek (ptr `plusPtr` 92)-                                    <*> peek (ptr `plusPtr` 96)-                                    <*> peek (ptr `plusPtr` 100)-                                    <*> peek (ptr `plusPtr` 104)-                                    <*> peek (ptr `plusPtr` 108)-                                    <*> peek (ptr `plusPtr` 112)-                                    <*> peek (ptr `plusPtr` 116)-                                    <*> peek (ptr `plusPtr` 120)-                                    <*> peek (ptr `plusPtr` 124)-                                    <*> peek (ptr `plusPtr` 128)-                                    <*> peek (ptr `plusPtr` 132)-                                    <*> peek (ptr `plusPtr` 136)-                                    <*> peek (ptr `plusPtr` 140)-                                    <*> peek (ptr `plusPtr` 144)-                                    <*> peek (ptr `plusPtr` 148)-                                    <*> peek (ptr `plusPtr` 152)-                                    <*> peek (ptr `plusPtr` 156)-                                    <*> peek (ptr `plusPtr` 160)-                                    <*> peek (ptr `plusPtr` 164)-                                    <*> peek (ptr `plusPtr` 168)-                                    <*> peek (ptr `plusPtr` 172)-                                    <*> peek (ptr `plusPtr` 176)-                                    <*> peek (ptr `plusPtr` 180)-                                    <*> peek (ptr `plusPtr` 184)-                                    <*> peek (ptr `plusPtr` 188)-                                    <*> peek (ptr `plusPtr` 192)-                                    <*> peek (ptr `plusPtr` 196)-                                    <*> peek (ptr `plusPtr` 200)-                                    <*> peek (ptr `plusPtr` 204)-                                    <*> peek (ptr `plusPtr` 208)-                                    <*> peek (ptr `plusPtr` 212)-                                    <*> peek (ptr `plusPtr` 216)-                                    <*> peek (ptr `plusPtr` 220)-                                    <*> peek (ptr `plusPtr` 232)-                                    <*> peek (ptr `plusPtr` 236)-                                    <*> peek (ptr `plusPtr` 248)-                                    <*> peek (ptr `plusPtr` 252)-                                    <*> peek (ptr `plusPtr` 256)-                                    <*> peek (ptr `plusPtr` 260)-                                    <*> peek (ptr `plusPtr` 264)-                                    <*> peek (ptr `plusPtr` 268)-                                    <*> peek (ptr `plusPtr` 272)-                                    <*> peek (ptr `plusPtr` 276)-                                    <*> peek (ptr `plusPtr` 280)-                                    <*> peek (ptr `plusPtr` 288)-                                    <*> peek (ptr `plusPtr` 296)-                                    <*> peek (ptr `plusPtr` 304)-                                    <*> peek (ptr `plusPtr` 312)-                                    <*> peek (ptr `plusPtr` 320)-                                    <*> peek (ptr `plusPtr` 328)-                                    <*> peek (ptr `plusPtr` 336)-                                    <*> peek (ptr `plusPtr` 340)-                                    <*> peek (ptr `plusPtr` 344)-                                    <*> peek (ptr `plusPtr` 348)-                                    <*> peek (ptr `plusPtr` 352)-                                    <*> peek (ptr `plusPtr` 356)-                                    <*> peek (ptr `plusPtr` 360)-                                    <*> peek (ptr `plusPtr` 364)-                                    <*> peek (ptr `plusPtr` 368)-                                    <*> peek (ptr `plusPtr` 372)-                                    <*> peek (ptr `plusPtr` 376)-                                    <*> peek (ptr `plusPtr` 380)-                                    <*> peek (ptr `plusPtr` 384)-                                    <*> peek (ptr `plusPtr` 388)-                                    <*> peek (ptr `plusPtr` 392)-                                    <*> peek (ptr `plusPtr` 396)-                                    <*> peek (ptr `plusPtr` 400)-                                    <*> peek (ptr `plusPtr` 404)-                                    <*> peek (ptr `plusPtr` 408)-                                    <*> peek (ptr `plusPtr` 412)-                                    <*> peek (ptr `plusPtr` 416)-                                    <*> peek (ptr `plusPtr` 420)-                                    <*> peek (ptr `plusPtr` 424)-                                    <*> peek (ptr `plusPtr` 428)-                                    <*> peek (ptr `plusPtr` 432)-                                    <*> peek (ptr `plusPtr` 436)-                                    <*> peek (ptr `plusPtr` 440)-                                    <*> peek (ptr `plusPtr` 444)-                                    <*> peek (ptr `plusPtr` 452)-                                    <*> peek (ptr `plusPtr` 460)-                                    <*> peek (ptr `plusPtr` 464)-                                    <*> peek (ptr `plusPtr` 468)-                                    <*> peek (ptr `plusPtr` 472)-                                    <*> peek (ptr `plusPtr` 480)-                                    <*> peek (ptr `plusPtr` 488)-                                    <*> peek (ptr `plusPtr` 496)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxImageDimension (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 4) (vkMaxImageDimension (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 8) (vkMaxImageDimension (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 12) (vkMaxImageDimensionCube (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 16) (vkMaxImageArrayLayers (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 20) (vkMaxTexelBufferElements (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 24) (vkMaxUniformBufferRange (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 28) (vkMaxStorageBufferRange (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 32) (vkMaxPushConstantsSize (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 36) (vkMaxMemoryAllocationCount (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 40) (vkMaxSamplerAllocationCount (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 48) (vkBufferImageGranularity (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 56) (vkSparseAddressSpaceSize (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 64) (vkMaxBoundDescriptorSets (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 68) (vkMaxPerStageDescriptorSamplers (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 72) (vkMaxPerStageDescriptorUniformBuffers (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 76) (vkMaxPerStageDescriptorStorageBuffers (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 80) (vkMaxPerStageDescriptorSampledImages (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 84) (vkMaxPerStageDescriptorStorageImages (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 88) (vkMaxPerStageDescriptorInputAttachments (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 92) (vkMaxPerStageResources (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 96) (vkMaxDescriptorSetSamplers (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 100) (vkMaxDescriptorSetUniformBuffers (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 104) (vkMaxDescriptorSetUniformBuffersDynamic (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 108) (vkMaxDescriptorSetStorageBuffers (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 112) (vkMaxDescriptorSetStorageBuffersDynamic (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 116) (vkMaxDescriptorSetSampledImages (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 120) (vkMaxDescriptorSetStorageImages (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 124) (vkMaxDescriptorSetInputAttachments (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 128) (vkMaxVertexInputAttributes (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 132) (vkMaxVertexInputBindings (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 136) (vkMaxVertexInputAttributeOffset (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 140) (vkMaxVertexInputBindingStride (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 144) (vkMaxVertexOutputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 148) (vkMaxTessellationGenerationLevel (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 152) (vkMaxTessellationPatchSize (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 156) (vkMaxTessellationControlPerVertexInputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 160) (vkMaxTessellationControlPerVertexOutputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 164) (vkMaxTessellationControlPerPatchOutputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 168) (vkMaxTessellationControlTotalOutputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 172) (vkMaxTessellationEvaluationInputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 176) (vkMaxTessellationEvaluationOutputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 180) (vkMaxGeometryShaderInvocations (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 184) (vkMaxGeometryInputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 188) (vkMaxGeometryOutputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 192) (vkMaxGeometryOutputVertices (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 196) (vkMaxGeometryTotalOutputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 200) (vkMaxFragmentInputComponents (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 204) (vkMaxFragmentOutputAttachments (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 208) (vkMaxFragmentDualSrcAttachments (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 212) (vkMaxFragmentCombinedOutputResources (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 216) (vkMaxComputeSharedMemorySize (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 220) (vkMaxComputeWorkGroupCount (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 232) (vkMaxComputeWorkGroupInvocations (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 236) (vkMaxComputeWorkGroupSize (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 248) (vkSubPixelPrecisionBits (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 252) (vkSubTexelPrecisionBits (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 256) (vkMipmapPrecisionBits (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 260) (vkMaxDrawIndexedIndexValue (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 264) (vkMaxDrawIndirectCount (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 268) (vkMaxSamplerLodBias (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 272) (vkMaxSamplerAnisotropy (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 276) (vkMaxViewports (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 280) (vkMaxViewportDimensions (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 288) (vkViewportBoundsRange (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 296) (vkViewportSubPixelBits (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 304) (vkMinMemoryMapAlignment (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 312) (vkMinTexelBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 320) (vkMinUniformBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 328) (vkMinStorageBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 336) (vkMinTexelOffset (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 340) (vkMaxTexelOffset (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 344) (vkMinTexelGatherOffset (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 348) (vkMaxTexelGatherOffset (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 352) (vkMinInterpolationOffset (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 356) (vkMaxInterpolationOffset (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 360) (vkSubPixelInterpolationOffsetBits (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 364) (vkMaxFramebufferWidth (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 368) (vkMaxFramebufferHeight (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 372) (vkMaxFramebufferLayers (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 376) (vkFramebufferColorSampleCounts (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 380) (vkFramebufferDepthSampleCounts (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 384) (vkFramebufferStencilSampleCounts (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 388) (vkFramebufferNoAttachmentsSampleCounts (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 392) (vkMaxColorAttachments (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 396) (vkSampledImageColorSampleCounts (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 400) (vkSampledImageIntegerSampleCounts (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 404) (vkSampledImageDepthSampleCounts (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 408) (vkSampledImageStencilSampleCounts (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 412) (vkStorageImageSampleCounts (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 416) (vkMaxSampleMaskWords (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 420) (vkTimestampComputeAndGraphics (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 424) (vkTimestampPeriod (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 428) (vkMaxClipDistances (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 432) (vkMaxCullDistances (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 436) (vkMaxCombinedClipAndCullDistances (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 440) (vkDiscreteQueuePriorities (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 444) (vkPointSizeRange (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 452) (vkLineWidthRange (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 460) (vkPointSizeGranularity (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 464) (vkLineWidthGranularity (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 468) (vkStrictLines (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 472) (vkStandardSampleLocations (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 480) (vkOptimalBufferCopyOffsetAlignment (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 488) (vkOptimalBufferCopyRowPitchAlignment (poked :: VkPhysicalDeviceLimits))-                *> poke (ptr `plusPtr` 496) (vkNonCoherentAtomSize (poked :: VkPhysicalDeviceLimits))----data VkSemaphoreCreateInfo =-  VkSemaphoreCreateInfo{ vkSType :: VkStructureType -                       , vkPNext :: Ptr Void -                       , vkFlags :: VkSemaphoreCreateFlags -                       }-  deriving (Eq)--instance Storable VkSemaphoreCreateInfo where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkSemaphoreCreateInfo <$> peek (ptr `plusPtr` 0)-                                   <*> peek (ptr `plusPtr` 8)-                                   <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSemaphoreCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSemaphoreCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSemaphoreCreateInfo))----data VkQueryPoolCreateInfo =-  VkQueryPoolCreateInfo{ vkSType :: VkStructureType -                       , vkPNext :: Ptr Void -                       , vkFlags :: VkQueryPoolCreateFlags -                       , vkQueryType :: VkQueryType -                       , vkQueryCount :: Word32 -                       , vkPipelineStatistics :: VkQueryPipelineStatisticFlags -                       }-  deriving (Eq)--instance Storable VkQueryPoolCreateInfo where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek ptr = VkQueryPoolCreateInfo <$> peek (ptr `plusPtr` 0)-                                   <*> peek (ptr `plusPtr` 8)-                                   <*> peek (ptr `plusPtr` 16)-                                   <*> peek (ptr `plusPtr` 20)-                                   <*> peek (ptr `plusPtr` 24)-                                   <*> peek (ptr `plusPtr` 28)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkQueryPoolCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkQueryPoolCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkQueryPoolCreateInfo))-                *> poke (ptr `plusPtr` 20) (vkQueryType (poked :: VkQueryPoolCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkQueryCount (poked :: VkQueryPoolCreateInfo))-                *> poke (ptr `plusPtr` 28) (vkPipelineStatistics (poked :: VkQueryPoolCreateInfo))----data VkFramebufferCreateInfo =-  VkFramebufferCreateInfo{ vkSType :: VkStructureType -                         , vkPNext :: Ptr Void -                         , vkFlags :: VkFramebufferCreateFlags -                         , vkRenderPass :: VkRenderPass -                         , vkAttachmentCount :: Word32 -                         , vkPAttachments :: Ptr VkImageView -                         , vkWidth :: Word32 -                         , vkHeight :: Word32 -                         , vkLayers :: Word32 -                         }-  deriving (Eq)--instance Storable VkFramebufferCreateInfo where-  sizeOf ~_ = 64-  alignment ~_ = 8-  peek ptr = VkFramebufferCreateInfo <$> 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` 48)-                                     <*> peek (ptr `plusPtr` 52)-                                     <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFramebufferCreateInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFramebufferCreateInfo))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkFramebufferCreateInfo))-                *> poke (ptr `plusPtr` 24) (vkRenderPass (poked :: VkFramebufferCreateInfo))-                *> poke (ptr `plusPtr` 32) (vkAttachmentCount (poked :: VkFramebufferCreateInfo))-                *> poke (ptr `plusPtr` 40) (vkPAttachments (poked :: VkFramebufferCreateInfo))-                *> poke (ptr `plusPtr` 48) (vkWidth (poked :: VkFramebufferCreateInfo))-                *> poke (ptr `plusPtr` 52) (vkHeight (poked :: VkFramebufferCreateInfo))-                *> poke (ptr `plusPtr` 56) (vkLayers (poked :: VkFramebufferCreateInfo))----data VkDrawIndirectCommand =-  VkDrawIndirectCommand{ vkVertexCount :: Word32 -                       , vkInstanceCount :: Word32 -                       , vkFirstVertex :: Word32 -                       , vkFirstInstance :: Word32 -                       }-  deriving (Eq)--instance Storable VkDrawIndirectCommand where-  sizeOf ~_ = 16-  alignment ~_ = 4-  peek ptr = VkDrawIndirectCommand <$> peek (ptr `plusPtr` 0)-                                   <*> peek (ptr `plusPtr` 4)-                                   <*> peek (ptr `plusPtr` 8)-                                   <*> peek (ptr `plusPtr` 12)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkVertexCount (poked :: VkDrawIndirectCommand))-                *> poke (ptr `plusPtr` 4) (vkInstanceCount (poked :: VkDrawIndirectCommand))-                *> poke (ptr `plusPtr` 8) (vkFirstVertex (poked :: VkDrawIndirectCommand))-                *> poke (ptr `plusPtr` 12) (vkFirstInstance (poked :: VkDrawIndirectCommand))----data VkDrawIndexedIndirectCommand =-  VkDrawIndexedIndirectCommand{ vkIndexCount :: Word32 -                              , vkInstanceCount :: Word32 -                              , vkFirstIndex :: Word32 -                              , vkVertexOffset :: Int32 -                              , vkFirstInstance :: Word32 -                              }-  deriving (Eq)--instance Storable VkDrawIndexedIndirectCommand where-  sizeOf ~_ = 20-  alignment ~_ = 4-  peek ptr = VkDrawIndexedIndirectCommand <$> peek (ptr `plusPtr` 0)-                                          <*> peek (ptr `plusPtr` 4)-                                          <*> peek (ptr `plusPtr` 8)-                                          <*> peek (ptr `plusPtr` 12)-                                          <*> peek (ptr `plusPtr` 16)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkIndexCount (poked :: VkDrawIndexedIndirectCommand))-                *> poke (ptr `plusPtr` 4) (vkInstanceCount (poked :: VkDrawIndexedIndirectCommand))-                *> poke (ptr `plusPtr` 8) (vkFirstIndex (poked :: VkDrawIndexedIndirectCommand))-                *> poke (ptr `plusPtr` 12) (vkVertexOffset (poked :: VkDrawIndexedIndirectCommand))-                *> poke (ptr `plusPtr` 16) (vkFirstInstance (poked :: VkDrawIndexedIndirectCommand))----data VkDispatchIndirectCommand =-  VkDispatchIndirectCommand{ vkX :: Word32 -                           , vkY :: Word32 -                           , vkZ :: Word32 -                           }-  deriving (Eq)--instance Storable VkDispatchIndirectCommand where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek ptr = VkDispatchIndirectCommand <$> peek (ptr `plusPtr` 0)-                                       <*> peek (ptr `plusPtr` 4)-                                       <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkDispatchIndirectCommand))-                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkDispatchIndirectCommand))-                *> poke (ptr `plusPtr` 8) (vkZ (poked :: VkDispatchIndirectCommand))----data VkSubmitInfo =-  VkSubmitInfo{ vkSType :: VkStructureType -              , vkPNext :: Ptr Void -              , vkWaitSemaphoreCount :: Word32 -              , vkPWaitSemaphores :: Ptr VkSemaphore -              , vkPWaitDstStageMask :: Ptr VkPipelineStageFlags -              , vkCommandBufferCount :: Word32 -              , vkPCommandBuffers :: Ptr VkCommandBuffer -              , vkSignalSemaphoreCount :: Word32 -              , vkPSignalSemaphores :: Ptr VkSemaphore -              }-  deriving (Eq)--instance Storable VkSubmitInfo where-  sizeOf ~_ = 72-  alignment ~_ = 8-  peek ptr = VkSubmitInfo <$> 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` 48)-                          <*> peek (ptr `plusPtr` 56)-                          <*> peek (ptr `plusPtr` 64)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSubmitInfo))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSubmitInfo))-                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkSubmitInfo))-                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkSubmitInfo))-                *> poke (ptr `plusPtr` 32) (vkPWaitDstStageMask (poked :: VkSubmitInfo))-                *> poke (ptr `plusPtr` 40) (vkCommandBufferCount (poked :: VkSubmitInfo))-                *> poke (ptr `plusPtr` 48) (vkPCommandBuffers (poked :: VkSubmitInfo))-                *> poke (ptr `plusPtr` 56) (vkSignalSemaphoreCount (poked :: VkSubmitInfo))-                *> poke (ptr `plusPtr` 64) (vkPSignalSemaphores (poked :: VkSubmitInfo))----data VkDisplayPropertiesKHR =-  VkDisplayPropertiesKHR{ vkDisplay :: VkDisplayKHR -                        , vkDisplayName :: Ptr CChar -                        , vkPhysicalDimensions :: VkExtent2D -                        , vkPhysicalResolution :: VkExtent2D -                        , vkSupportedTransforms :: VkSurfaceTransformFlagsKHR -                        , vkPlaneReorderPossible :: VkBool32 -                        , vkPersistentContent :: VkBool32 -                        }-  deriving (Eq)--instance Storable VkDisplayPropertiesKHR where-  sizeOf ~_ = 48-  alignment ~_ = 8-  peek ptr = VkDisplayPropertiesKHR <$> peek (ptr `plusPtr` 0)-                                    <*> peek (ptr `plusPtr` 8)-                                    <*> peek (ptr `plusPtr` 16)-                                    <*> peek (ptr `plusPtr` 24)-                                    <*> peek (ptr `plusPtr` 32)-                                    <*> peek (ptr `plusPtr` 36)-                                    <*> peek (ptr `plusPtr` 40)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkDisplay (poked :: VkDisplayPropertiesKHR))-                *> poke (ptr `plusPtr` 8) (vkDisplayName (poked :: VkDisplayPropertiesKHR))-                *> poke (ptr `plusPtr` 16) (vkPhysicalDimensions (poked :: VkDisplayPropertiesKHR))-                *> poke (ptr `plusPtr` 24) (vkPhysicalResolution (poked :: VkDisplayPropertiesKHR))-                *> poke (ptr `plusPtr` 32) (vkSupportedTransforms (poked :: VkDisplayPropertiesKHR))-                *> poke (ptr `plusPtr` 36) (vkPlaneReorderPossible (poked :: VkDisplayPropertiesKHR))-                *> poke (ptr `plusPtr` 40) (vkPersistentContent (poked :: VkDisplayPropertiesKHR))----data VkDisplayPlanePropertiesKHR =-  VkDisplayPlanePropertiesKHR{ vkCurrentDisplay :: VkDisplayKHR -                             , vkCurrentStackIndex :: Word32 -                             }-  deriving (Eq)--instance Storable VkDisplayPlanePropertiesKHR where-  sizeOf ~_ = 16-  alignment ~_ = 8-  peek ptr = VkDisplayPlanePropertiesKHR <$> peek (ptr `plusPtr` 0)-                                         <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkCurrentDisplay (poked :: VkDisplayPlanePropertiesKHR))-                *> poke (ptr `plusPtr` 8) (vkCurrentStackIndex (poked :: VkDisplayPlanePropertiesKHR))----data VkDisplayModeParametersKHR =-  VkDisplayModeParametersKHR{ vkVisibleRegion :: VkExtent2D -                            , vkRefreshRate :: Word32 -                            }-  deriving (Eq)--instance Storable VkDisplayModeParametersKHR where-  sizeOf ~_ = 12-  alignment ~_ = 4-  peek ptr = VkDisplayModeParametersKHR <$> peek (ptr `plusPtr` 0)-                                        <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkVisibleRegion (poked :: VkDisplayModeParametersKHR))-                *> poke (ptr `plusPtr` 8) (vkRefreshRate (poked :: VkDisplayModeParametersKHR))----data VkDisplayModePropertiesKHR =-  VkDisplayModePropertiesKHR{ vkDisplayMode :: VkDisplayModeKHR -                            , vkParameters :: VkDisplayModeParametersKHR -                            }-  deriving (Eq)--instance Storable VkDisplayModePropertiesKHR where-  sizeOf ~_ = 24-  alignment ~_ = 8-  peek ptr = VkDisplayModePropertiesKHR <$> peek (ptr `plusPtr` 0)-                                        <*> peek (ptr `plusPtr` 8)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkDisplayMode (poked :: VkDisplayModePropertiesKHR))-                *> poke (ptr `plusPtr` 8) (vkParameters (poked :: VkDisplayModePropertiesKHR))----data VkDisplayModeCreateInfoKHR =-  VkDisplayModeCreateInfoKHR{ vkSType :: VkStructureType -                            , vkPNext :: Ptr Void -                            , vkFlags :: VkDisplayModeCreateFlagsKHR -                            , vkParameters :: VkDisplayModeParametersKHR -                            }-  deriving (Eq)--instance Storable VkDisplayModeCreateInfoKHR where-  sizeOf ~_ = 32-  alignment ~_ = 8-  peek ptr = VkDisplayModeCreateInfoKHR <$> peek (ptr `plusPtr` 0)-                                        <*> peek (ptr `plusPtr` 8)-                                        <*> peek (ptr `plusPtr` 16)-                                        <*> peek (ptr `plusPtr` 20)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplayModeCreateInfoKHR))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplayModeCreateInfoKHR))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDisplayModeCreateInfoKHR))-                *> poke (ptr `plusPtr` 20) (vkParameters (poked :: VkDisplayModeCreateInfoKHR))----data VkDisplayPlaneCapabilitiesKHR =-  VkDisplayPlaneCapabilitiesKHR{ vkSupportedAlpha :: VkDisplayPlaneAlphaFlagsKHR -                               , vkMinSrcPosition :: VkOffset2D -                               , vkMaxSrcPosition :: VkOffset2D -                               , vkMinSrcExtent :: VkExtent2D -                               , vkMaxSrcExtent :: VkExtent2D -                               , vkMinDstPosition :: VkOffset2D -                               , vkMaxDstPosition :: VkOffset2D -                               , vkMinDstExtent :: VkExtent2D -                               , vkMaxDstExtent :: VkExtent2D -                               }-  deriving (Eq)--instance Storable VkDisplayPlaneCapabilitiesKHR where-  sizeOf ~_ = 68-  alignment ~_ = 4-  peek ptr = VkDisplayPlaneCapabilitiesKHR <$> peek (ptr `plusPtr` 0)-                                           <*> peek (ptr `plusPtr` 4)-                                           <*> peek (ptr `plusPtr` 12)-                                           <*> peek (ptr `plusPtr` 20)-                                           <*> peek (ptr `plusPtr` 28)-                                           <*> peek (ptr `plusPtr` 36)-                                           <*> peek (ptr `plusPtr` 44)-                                           <*> peek (ptr `plusPtr` 52)-                                           <*> peek (ptr `plusPtr` 60)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSupportedAlpha (poked :: VkDisplayPlaneCapabilitiesKHR))-                *> poke (ptr `plusPtr` 4) (vkMinSrcPosition (poked :: VkDisplayPlaneCapabilitiesKHR))-                *> poke (ptr `plusPtr` 12) (vkMaxSrcPosition (poked :: VkDisplayPlaneCapabilitiesKHR))-                *> poke (ptr `plusPtr` 20) (vkMinSrcExtent (poked :: VkDisplayPlaneCapabilitiesKHR))-                *> poke (ptr `plusPtr` 28) (vkMaxSrcExtent (poked :: VkDisplayPlaneCapabilitiesKHR))-                *> poke (ptr `plusPtr` 36) (vkMinDstPosition (poked :: VkDisplayPlaneCapabilitiesKHR))-                *> poke (ptr `plusPtr` 44) (vkMaxDstPosition (poked :: VkDisplayPlaneCapabilitiesKHR))-                *> poke (ptr `plusPtr` 52) (vkMinDstExtent (poked :: VkDisplayPlaneCapabilitiesKHR))-                *> poke (ptr `plusPtr` 60) (vkMaxDstExtent (poked :: VkDisplayPlaneCapabilitiesKHR))----data VkDisplaySurfaceCreateInfoKHR =-  VkDisplaySurfaceCreateInfoKHR{ vkSType :: VkStructureType -                               , vkPNext :: Ptr Void -                               , vkFlags :: VkDisplaySurfaceCreateFlagsKHR -                               , vkDisplayMode :: VkDisplayModeKHR -                               , vkPlaneIndex :: Word32 -                               , vkPlaneStackIndex :: Word32 -                               , vkTransform :: VkSurfaceTransformFlagBitsKHR -                               , vkGlobalAlpha :: CFloat -                               , vkAlphaMode :: VkDisplayPlaneAlphaFlagBitsKHR -                               , vkImageExtent :: VkExtent2D -                               }-  deriving (Eq)--instance Storable VkDisplaySurfaceCreateInfoKHR where-  sizeOf ~_ = 64-  alignment ~_ = 8-  peek ptr = VkDisplaySurfaceCreateInfoKHR <$> peek (ptr `plusPtr` 0)-                                           <*> peek (ptr `plusPtr` 8)-                                           <*> peek (ptr `plusPtr` 16)-                                           <*> peek (ptr `plusPtr` 24)-                                           <*> peek (ptr `plusPtr` 32)-                                           <*> peek (ptr `plusPtr` 36)-                                           <*> peek (ptr `plusPtr` 40)-                                           <*> peek (ptr `plusPtr` 44)-                                           <*> peek (ptr `plusPtr` 48)-                                           <*> peek (ptr `plusPtr` 52)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplaySurfaceCreateInfoKHR))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplaySurfaceCreateInfoKHR))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDisplaySurfaceCreateInfoKHR))-                *> poke (ptr `plusPtr` 24) (vkDisplayMode (poked :: VkDisplaySurfaceCreateInfoKHR))-                *> poke (ptr `plusPtr` 32) (vkPlaneIndex (poked :: VkDisplaySurfaceCreateInfoKHR))-                *> poke (ptr `plusPtr` 36) (vkPlaneStackIndex (poked :: VkDisplaySurfaceCreateInfoKHR))-                *> poke (ptr `plusPtr` 40) (vkTransform (poked :: VkDisplaySurfaceCreateInfoKHR))-                *> poke (ptr `plusPtr` 44) (vkGlobalAlpha (poked :: VkDisplaySurfaceCreateInfoKHR))-                *> poke (ptr `plusPtr` 48) (vkAlphaMode (poked :: VkDisplaySurfaceCreateInfoKHR))-                *> poke (ptr `plusPtr` 52) (vkImageExtent (poked :: VkDisplaySurfaceCreateInfoKHR))----data VkDisplayPresentInfoKHR =-  VkDisplayPresentInfoKHR{ vkSType :: VkStructureType -                         , vkPNext :: Ptr Void -                         , vkSrcRect :: VkRect2D -                         , vkDstRect :: VkRect2D -                         , vkPersistent :: VkBool32 -                         }-  deriving (Eq)--instance Storable VkDisplayPresentInfoKHR where-  sizeOf ~_ = 56-  alignment ~_ = 8-  peek ptr = VkDisplayPresentInfoKHR <$> peek (ptr `plusPtr` 0)-                                     <*> peek (ptr `plusPtr` 8)-                                     <*> peek (ptr `plusPtr` 16)-                                     <*> peek (ptr `plusPtr` 32)-                                     <*> peek (ptr `plusPtr` 48)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplayPresentInfoKHR))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplayPresentInfoKHR))-                *> poke (ptr `plusPtr` 16) (vkSrcRect (poked :: VkDisplayPresentInfoKHR))-                *> poke (ptr `plusPtr` 32) (vkDstRect (poked :: VkDisplayPresentInfoKHR))-                *> poke (ptr `plusPtr` 48) (vkPersistent (poked :: VkDisplayPresentInfoKHR))----data VkSurfaceCapabilitiesKHR =-  VkSurfaceCapabilitiesKHR{ vkMinImageCount :: Word32 -                          , vkMaxImageCount :: Word32 -                          , vkCurrentExtent :: VkExtent2D -                          , vkMinImageExtent :: VkExtent2D -                          , vkMaxImageExtent :: VkExtent2D -                          , vkMaxImageArrayLayers :: Word32 -                          , vkSupportedTransforms :: VkSurfaceTransformFlagsKHR -                          , vkCurrentTransform :: VkSurfaceTransformFlagBitsKHR -                          , vkSupportedCompositeAlpha :: VkCompositeAlphaFlagsKHR -                          , vkSupportedUsageFlags :: VkImageUsageFlags -                          }-  deriving (Eq)--instance Storable VkSurfaceCapabilitiesKHR where-  sizeOf ~_ = 52-  alignment ~_ = 4-  peek ptr = VkSurfaceCapabilitiesKHR <$> peek (ptr `plusPtr` 0)-                                      <*> peek (ptr `plusPtr` 4)-                                      <*> peek (ptr `plusPtr` 8)-                                      <*> peek (ptr `plusPtr` 16)-                                      <*> peek (ptr `plusPtr` 24)-                                      <*> peek (ptr `plusPtr` 32)-                                      <*> peek (ptr `plusPtr` 36)-                                      <*> peek (ptr `plusPtr` 40)-                                      <*> peek (ptr `plusPtr` 44)-                                      <*> peek (ptr `plusPtr` 48)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkMinImageCount (poked :: VkSurfaceCapabilitiesKHR))-                *> poke (ptr `plusPtr` 4) (vkMaxImageCount (poked :: VkSurfaceCapabilitiesKHR))-                *> poke (ptr `plusPtr` 8) (vkCurrentExtent (poked :: VkSurfaceCapabilitiesKHR))-                *> poke (ptr `plusPtr` 16) (vkMinImageExtent (poked :: VkSurfaceCapabilitiesKHR))-                *> poke (ptr `plusPtr` 24) (vkMaxImageExtent (poked :: VkSurfaceCapabilitiesKHR))-                *> poke (ptr `plusPtr` 32) (vkMaxImageArrayLayers (poked :: VkSurfaceCapabilitiesKHR))-                *> poke (ptr `plusPtr` 36) (vkSupportedTransforms (poked :: VkSurfaceCapabilitiesKHR))-                *> poke (ptr `plusPtr` 40) (vkCurrentTransform (poked :: VkSurfaceCapabilitiesKHR))-                *> poke (ptr `plusPtr` 44) (vkSupportedCompositeAlpha (poked :: VkSurfaceCapabilitiesKHR))-                *> poke (ptr `plusPtr` 48) (vkSupportedUsageFlags (poked :: VkSurfaceCapabilitiesKHR))----data VkSurfaceFormatKHR =-  VkSurfaceFormatKHR{ vkFormat :: VkFormat -                    , vkColorSpace :: VkColorSpaceKHR -                    }-  deriving (Eq)--instance Storable VkSurfaceFormatKHR where-  sizeOf ~_ = 8-  alignment ~_ = 4-  peek ptr = VkSurfaceFormatKHR <$> peek (ptr `plusPtr` 0)-                                <*> peek (ptr `plusPtr` 4)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkFormat (poked :: VkSurfaceFormatKHR))-                *> poke (ptr `plusPtr` 4) (vkColorSpace (poked :: VkSurfaceFormatKHR))----data VkSwapchainCreateInfoKHR =-  VkSwapchainCreateInfoKHR{ vkSType :: VkStructureType -                          , vkPNext :: Ptr Void -                          , vkFlags :: VkSwapchainCreateFlagsKHR -                          , vkSurface :: VkSurfaceKHR -                          , vkMinImageCount :: Word32 -                          , vkImageFormat :: VkFormat -                          , vkImageColorSpace :: VkColorSpaceKHR -                          , vkImageExtent :: VkExtent2D -                          , vkImageArrayLayers :: Word32 -                          , vkImageUsage :: VkImageUsageFlags -                          , vkImageSharingMode :: VkSharingMode -                          , vkQueueFamilyIndexCount :: Word32 -                          , vkPQueueFamilyIndices :: Ptr Word32 -                          , vkPreTransform :: VkSurfaceTransformFlagBitsKHR -                          , vkCompositeAlpha :: VkCompositeAlphaFlagBitsKHR -                          , vkPresentMode :: VkPresentModeKHR -                          , vkClipped :: VkBool32 -                          , vkOldSwapchain :: VkSwapchainKHR -                          }-  deriving (Eq)--instance Storable VkSwapchainCreateInfoKHR where-  sizeOf ~_ = 104-  alignment ~_ = 8-  peek ptr = VkSwapchainCreateInfoKHR <$> peek (ptr `plusPtr` 0)-                                      <*> peek (ptr `plusPtr` 8)-                                      <*> peek (ptr `plusPtr` 16)-                                      <*> peek (ptr `plusPtr` 24)-                                      <*> peek (ptr `plusPtr` 32)-                                      <*> peek (ptr `plusPtr` 36)-                                      <*> peek (ptr `plusPtr` 40)-                                      <*> peek (ptr `plusPtr` 44)-                                      <*> peek (ptr `plusPtr` 52)-                                      <*> peek (ptr `plusPtr` 56)-                                      <*> peek (ptr `plusPtr` 60)-                                      <*> peek (ptr `plusPtr` 64)-                                      <*> peek (ptr `plusPtr` 72)-                                      <*> peek (ptr `plusPtr` 80)-                                      <*> peek (ptr `plusPtr` 84)-                                      <*> peek (ptr `plusPtr` 88)-                                      <*> peek (ptr `plusPtr` 92)-                                      <*> peek (ptr `plusPtr` 96)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 24) (vkSurface (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 32) (vkMinImageCount (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 36) (vkImageFormat (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 40) (vkImageColorSpace (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 44) (vkImageExtent (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 52) (vkImageArrayLayers (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 56) (vkImageUsage (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 60) (vkImageSharingMode (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 64) (vkQueueFamilyIndexCount (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 72) (vkPQueueFamilyIndices (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 80) (vkPreTransform (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 84) (vkCompositeAlpha (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 88) (vkPresentMode (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 92) (vkClipped (poked :: VkSwapchainCreateInfoKHR))-                *> poke (ptr `plusPtr` 96) (vkOldSwapchain (poked :: VkSwapchainCreateInfoKHR))----data VkPresentInfoKHR =-  VkPresentInfoKHR{ vkSType :: VkStructureType -                  , vkPNext :: Ptr Void -                  , vkWaitSemaphoreCount :: Word32 -                  , vkPWaitSemaphores :: Ptr VkSemaphore -                  , vkSwapchainCount :: Word32 -                  , vkPSwapchains :: Ptr VkSwapchainKHR -                  , vkPImageIndices :: Ptr Word32 -                  , vkPResults :: Ptr VkResult -                  }-  deriving (Eq)--instance Storable VkPresentInfoKHR where-  sizeOf ~_ = 64-  alignment ~_ = 8-  peek ptr = VkPresentInfoKHR <$> 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` 48)-                              <*> peek (ptr `plusPtr` 56)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPresentInfoKHR))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPresentInfoKHR))-                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkPresentInfoKHR))-                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkPresentInfoKHR))-                *> poke (ptr `plusPtr` 32) (vkSwapchainCount (poked :: VkPresentInfoKHR))-                *> poke (ptr `plusPtr` 40) (vkPSwapchains (poked :: VkPresentInfoKHR))-                *> poke (ptr `plusPtr` 48) (vkPImageIndices (poked :: VkPresentInfoKHR))-                *> poke (ptr `plusPtr` 56) (vkPResults (poked :: VkPresentInfoKHR))----data VkDebugReportCallbackCreateInfoEXT =-  VkDebugReportCallbackCreateInfoEXT{ vkSType :: VkStructureType -                                    , vkPNext :: Ptr Void -                                    , vkFlags :: VkDebugReportFlagsEXT -                                    , vkPfnCallback :: PFN_vkDebugReportCallbackEXT -                                    , vkPUserData :: Ptr Void -                                    }-  deriving (Eq)--instance Storable VkDebugReportCallbackCreateInfoEXT where-  sizeOf ~_ = 40-  alignment ~_ = 8-  peek ptr = VkDebugReportCallbackCreateInfoEXT <$> peek (ptr `plusPtr` 0)-                                                <*> peek (ptr `plusPtr` 8)-                                                <*> peek (ptr `plusPtr` 16)-                                                <*> peek (ptr `plusPtr` 24)-                                                <*> peek (ptr `plusPtr` 32)-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDebugReportCallbackCreateInfoEXT))-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugReportCallbackCreateInfoEXT))-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDebugReportCallbackCreateInfoEXT))-                *> poke (ptr `plusPtr` 24) (vkPfnCallback (poked :: VkDebugReportCallbackCreateInfoEXT))-                *> poke (ptr `plusPtr` 32) (vkPUserData (poked :: VkDebugReportCallbackCreateInfoEXT))----- * Union Types---- | // Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.-data VkClearColorValue = VkFloat (Vec (ToPeano 4) CFloat) -                       | VkInt (Vec (ToPeano 4) Int32) -                       | VkUint (Vec (ToPeano 4) Word32) -  deriving (Eq)---- | _Note_: peek is undefined as we wouldn't know which constructor to use-instance Storable VkClearColorValue where-  sizeOf ~_ = 16-  alignment ~_ = 4-  peek ~_ = error "peek@VkClearColorValue"-  poke ptr poked = case poked of-                     VkFloat e -> poke (castPtr ptr) e-                     VkInt e -> poke (castPtr ptr) e-                     VkUint e -> poke (castPtr ptr) e----- | // Union allowing specification of color or depth and stencil values. Actual value selected is based on attachment being cleared.-data VkClearValue = VkColor VkClearColorValue -                  | VkDepthStencil VkClearDepthStencilValue -  deriving (Eq)---- | _Note_: peek is undefined as we wouldn't know which constructor to use-instance Storable VkClearValue where-  sizeOf ~_ = 16-  alignment ~_ = 4-  peek ~_ = error "peek@VkClearValue"-  poke ptr poked = case poked of-                     VkColor e -> poke (castPtr ptr) e-                     VkDepthStencil e -> poke (castPtr ptr) e----- * Commands---- ** vkCreateInstance-foreign import ccall "vkCreateInstance" vkCreateInstance :: -  Ptr VkInstanceCreateInfo ->-  Ptr VkAllocationCallbacks -> Ptr VkInstance -> IO VkResult---- ** vkDestroyInstance-foreign import ccall "vkDestroyInstance" vkDestroyInstance :: -  VkInstance -> Ptr VkAllocationCallbacks -> IO ()---- ** vkEnumeratePhysicalDevices-foreign import ccall "vkEnumeratePhysicalDevices" vkEnumeratePhysicalDevices :: -  VkInstance -> Ptr Word32 -> Ptr VkPhysicalDevice -> IO VkResult---- ** vkGetDeviceProcAddr-foreign import ccall "vkGetDeviceProcAddr" vkGetDeviceProcAddr :: -  VkDevice -> Ptr CChar -> IO PFN_vkVoidFunction---- ** vkGetInstanceProcAddr-foreign import ccall "vkGetInstanceProcAddr" vkGetInstanceProcAddr :: -  VkInstance -> Ptr CChar -> IO PFN_vkVoidFunction---- ** vkGetPhysicalDeviceProperties-foreign import ccall "vkGetPhysicalDeviceProperties" vkGetPhysicalDeviceProperties :: -  VkPhysicalDevice -> Ptr VkPhysicalDeviceProperties -> IO ()---- ** vkGetPhysicalDeviceQueueFamilyProperties-foreign import ccall "vkGetPhysicalDeviceQueueFamilyProperties" vkGetPhysicalDeviceQueueFamilyProperties :: -  VkPhysicalDevice ->-  Ptr Word32 -> Ptr VkQueueFamilyProperties -> IO ()---- ** vkGetPhysicalDeviceMemoryProperties-foreign import ccall "vkGetPhysicalDeviceMemoryProperties" vkGetPhysicalDeviceMemoryProperties :: -  VkPhysicalDevice -> Ptr VkPhysicalDeviceMemoryProperties -> IO ()---- ** vkGetPhysicalDeviceFeatures-foreign import ccall "vkGetPhysicalDeviceFeatures" vkGetPhysicalDeviceFeatures :: -  VkPhysicalDevice -> Ptr VkPhysicalDeviceFeatures -> IO ()---- ** vkGetPhysicalDeviceFormatProperties-foreign import ccall "vkGetPhysicalDeviceFormatProperties" vkGetPhysicalDeviceFormatProperties :: -  VkPhysicalDevice -> VkFormat -> Ptr VkFormatProperties -> IO ()---- ** vkGetPhysicalDeviceImageFormatProperties-foreign import ccall "vkGetPhysicalDeviceImageFormatProperties" vkGetPhysicalDeviceImageFormatProperties :: -  VkPhysicalDevice ->-  VkFormat ->-    VkImageType ->-      VkImageTiling ->-        VkImageUsageFlags ->-          VkImageCreateFlags -> Ptr VkImageFormatProperties -> IO VkResult---- ** vkCreateDevice-foreign import ccall "vkCreateDevice" vkCreateDevice :: -  VkPhysicalDevice ->-  Ptr VkDeviceCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkDevice -> IO VkResult---- ** vkDestroyDevice-foreign import ccall "vkDestroyDevice" vkDestroyDevice :: -  VkDevice -> Ptr VkAllocationCallbacks -> IO ()---- ** vkEnumerateInstanceLayerProperties-foreign import ccall "vkEnumerateInstanceLayerProperties" vkEnumerateInstanceLayerProperties :: -  Ptr Word32 -> Ptr VkLayerProperties -> IO VkResult---- ** vkEnumerateInstanceExtensionProperties-foreign import ccall "vkEnumerateInstanceExtensionProperties" vkEnumerateInstanceExtensionProperties :: -  Ptr CChar -> Ptr Word32 -> Ptr VkExtensionProperties -> IO VkResult---- ** vkEnumerateDeviceLayerProperties-foreign import ccall "vkEnumerateDeviceLayerProperties" vkEnumerateDeviceLayerProperties :: -  VkPhysicalDevice ->-  Ptr Word32 -> Ptr VkLayerProperties -> IO VkResult---- ** vkEnumerateDeviceExtensionProperties-foreign import ccall "vkEnumerateDeviceExtensionProperties" vkEnumerateDeviceExtensionProperties :: -  VkPhysicalDevice ->-  Ptr CChar -> Ptr Word32 -> Ptr VkExtensionProperties -> IO VkResult---- ** vkGetDeviceQueue-foreign import ccall "vkGetDeviceQueue" vkGetDeviceQueue :: -  VkDevice -> Word32 -> Word32 -> Ptr VkQueue -> IO ()---- ** vkQueueSubmit-foreign import ccall "vkQueueSubmit" vkQueueSubmit :: -  VkQueue -> Word32 -> Ptr VkSubmitInfo -> VkFence -> IO VkResult---- ** vkQueueWaitIdle-foreign import ccall "vkQueueWaitIdle" vkQueueWaitIdle :: -  VkQueue -> IO VkResult---- ** vkDeviceWaitIdle-foreign import ccall "vkDeviceWaitIdle" vkDeviceWaitIdle :: -  VkDevice -> IO VkResult---- ** vkAllocateMemory-foreign import ccall "vkAllocateMemory" vkAllocateMemory :: -  VkDevice ->-  Ptr VkMemoryAllocateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkDeviceMemory -> IO VkResult---- ** vkFreeMemory-foreign import ccall "vkFreeMemory" vkFreeMemory :: -  VkDevice -> VkDeviceMemory -> Ptr VkAllocationCallbacks -> IO ()---- ** vkMapMemory-foreign import ccall "vkMapMemory" vkMapMemory :: -  VkDevice ->-  VkDeviceMemory ->-    VkDeviceSize ->-      VkDeviceSize -> VkMemoryMapFlags -> Ptr (Ptr Void) -> IO VkResult---- ** vkUnmapMemory-foreign import ccall "vkUnmapMemory" vkUnmapMemory :: -  VkDevice -> VkDeviceMemory -> IO ()---- ** vkFlushMappedMemoryRanges-foreign import ccall "vkFlushMappedMemoryRanges" vkFlushMappedMemoryRanges :: -  VkDevice -> Word32 -> Ptr VkMappedMemoryRange -> IO VkResult---- ** vkInvalidateMappedMemoryRanges-foreign import ccall "vkInvalidateMappedMemoryRanges" vkInvalidateMappedMemoryRanges :: -  VkDevice -> Word32 -> Ptr VkMappedMemoryRange -> IO VkResult---- ** vkGetDeviceMemoryCommitment-foreign import ccall "vkGetDeviceMemoryCommitment" vkGetDeviceMemoryCommitment :: -  VkDevice -> VkDeviceMemory -> Ptr VkDeviceSize -> IO ()---- ** vkGetBufferMemoryRequirements-foreign import ccall "vkGetBufferMemoryRequirements" vkGetBufferMemoryRequirements :: -  VkDevice -> VkBuffer -> Ptr VkMemoryRequirements -> IO ()---- ** vkBindBufferMemory-foreign import ccall "vkBindBufferMemory" vkBindBufferMemory :: -  VkDevice ->-  VkBuffer -> VkDeviceMemory -> VkDeviceSize -> IO VkResult---- ** vkGetImageMemoryRequirements-foreign import ccall "vkGetImageMemoryRequirements" vkGetImageMemoryRequirements :: -  VkDevice -> VkImage -> Ptr VkMemoryRequirements -> IO ()---- ** vkBindImageMemory-foreign import ccall "vkBindImageMemory" vkBindImageMemory :: -  VkDevice ->-  VkImage -> VkDeviceMemory -> VkDeviceSize -> IO VkResult---- ** vkGetImageSparseMemoryRequirements-foreign import ccall "vkGetImageSparseMemoryRequirements" vkGetImageSparseMemoryRequirements :: -  VkDevice ->-  VkImage ->-    Ptr Word32 -> Ptr VkSparseImageMemoryRequirements -> IO ()---- ** vkGetPhysicalDeviceSparseImageFormatProperties-foreign import ccall "vkGetPhysicalDeviceSparseImageFormatProperties" vkGetPhysicalDeviceSparseImageFormatProperties :: -  VkPhysicalDevice ->-  VkFormat ->-    VkImageType ->-      VkSampleCountFlagBits ->-        VkImageUsageFlags ->-          VkImageTiling ->-            Ptr Word32 -> Ptr VkSparseImageFormatProperties -> IO ()---- ** vkQueueBindSparse-foreign import ccall "vkQueueBindSparse" vkQueueBindSparse :: -  VkQueue -> Word32 -> Ptr VkBindSparseInfo -> VkFence -> IO VkResult---- ** vkCreateFence-foreign import ccall "vkCreateFence" vkCreateFence :: -  VkDevice ->-  Ptr VkFenceCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkFence -> IO VkResult---- ** vkDestroyFence-foreign import ccall "vkDestroyFence" vkDestroyFence :: -  VkDevice -> VkFence -> Ptr VkAllocationCallbacks -> IO ()---- ** vkResetFences-foreign import ccall "vkResetFences" vkResetFences :: -  VkDevice -> Word32 -> Ptr VkFence -> IO VkResult---- ** vkGetFenceStatus-foreign import ccall "vkGetFenceStatus" vkGetFenceStatus :: -  VkDevice -> VkFence -> IO VkResult---- ** vkWaitForFences-foreign import ccall "vkWaitForFences" vkWaitForFences :: -  VkDevice ->-  Word32 -> Ptr VkFence -> VkBool32 -> Word64 -> IO VkResult---- ** vkCreateSemaphore-foreign import ccall "vkCreateSemaphore" vkCreateSemaphore :: -  VkDevice ->-  Ptr VkSemaphoreCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkSemaphore -> IO VkResult---- ** vkDestroySemaphore-foreign import ccall "vkDestroySemaphore" vkDestroySemaphore :: -  VkDevice -> VkSemaphore -> Ptr VkAllocationCallbacks -> IO ()---- ** vkCreateEvent-foreign import ccall "vkCreateEvent" vkCreateEvent :: -  VkDevice ->-  Ptr VkEventCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkEvent -> IO VkResult---- ** vkDestroyEvent-foreign import ccall "vkDestroyEvent" vkDestroyEvent :: -  VkDevice -> VkEvent -> Ptr VkAllocationCallbacks -> IO ()---- ** vkGetEventStatus-foreign import ccall "vkGetEventStatus" vkGetEventStatus :: -  VkDevice -> VkEvent -> IO VkResult---- ** vkSetEvent-foreign import ccall "vkSetEvent" vkSetEvent :: -  VkDevice -> VkEvent -> IO VkResult---- ** vkResetEvent-foreign import ccall "vkResetEvent" vkResetEvent :: -  VkDevice -> VkEvent -> IO VkResult---- ** vkCreateQueryPool-foreign import ccall "vkCreateQueryPool" vkCreateQueryPool :: -  VkDevice ->-  Ptr VkQueryPoolCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkQueryPool -> IO VkResult---- ** vkDestroyQueryPool-foreign import ccall "vkDestroyQueryPool" vkDestroyQueryPool :: -  VkDevice -> VkQueryPool -> Ptr VkAllocationCallbacks -> IO ()---- ** vkGetQueryPoolResults-foreign import ccall "vkGetQueryPoolResults" vkGetQueryPoolResults :: -  VkDevice ->-  VkQueryPool ->-    Word32 ->-      Word32 ->-        CSize ->-          Ptr Void -> VkDeviceSize -> VkQueryResultFlags -> IO VkResult---- ** vkCreateBuffer-foreign import ccall "vkCreateBuffer" vkCreateBuffer :: -  VkDevice ->-  Ptr VkBufferCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkBuffer -> IO VkResult---- ** vkDestroyBuffer-foreign import ccall "vkDestroyBuffer" vkDestroyBuffer :: -  VkDevice -> VkBuffer -> Ptr VkAllocationCallbacks -> IO ()---- ** vkCreateBufferView-foreign import ccall "vkCreateBufferView" vkCreateBufferView :: -  VkDevice ->-  Ptr VkBufferViewCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkBufferView -> IO VkResult---- ** vkDestroyBufferView-foreign import ccall "vkDestroyBufferView" vkDestroyBufferView :: -  VkDevice -> VkBufferView -> Ptr VkAllocationCallbacks -> IO ()---- ** vkCreateImage-foreign import ccall "vkCreateImage" vkCreateImage :: -  VkDevice ->-  Ptr VkImageCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkImage -> IO VkResult---- ** vkDestroyImage-foreign import ccall "vkDestroyImage" vkDestroyImage :: -  VkDevice -> VkImage -> Ptr VkAllocationCallbacks -> IO ()---- ** vkGetImageSubresourceLayout-foreign import ccall "vkGetImageSubresourceLayout" vkGetImageSubresourceLayout :: -  VkDevice ->-  VkImage ->-    Ptr VkImageSubresource -> Ptr VkSubresourceLayout -> IO ()---- ** vkCreateImageView-foreign import ccall "vkCreateImageView" vkCreateImageView :: -  VkDevice ->-  Ptr VkImageViewCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkImageView -> IO VkResult---- ** vkDestroyImageView-foreign import ccall "vkDestroyImageView" vkDestroyImageView :: -  VkDevice -> VkImageView -> Ptr VkAllocationCallbacks -> IO ()---- ** vkCreateShaderModule-foreign import ccall "vkCreateShaderModule" vkCreateShaderModule :: -  VkDevice ->-  Ptr VkShaderModuleCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkShaderModule -> IO VkResult---- ** vkDestroyShaderModule-foreign import ccall "vkDestroyShaderModule" vkDestroyShaderModule :: -  VkDevice -> VkShaderModule -> Ptr VkAllocationCallbacks -> IO ()---- ** vkCreatePipelineCache-foreign import ccall "vkCreatePipelineCache" vkCreatePipelineCache :: -  VkDevice ->-  Ptr VkPipelineCacheCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkPipelineCache -> IO VkResult---- ** vkDestroyPipelineCache-foreign import ccall "vkDestroyPipelineCache" vkDestroyPipelineCache :: -  VkDevice -> VkPipelineCache -> Ptr VkAllocationCallbacks -> IO ()---- ** vkGetPipelineCacheData-foreign import ccall "vkGetPipelineCacheData" vkGetPipelineCacheData :: -  VkDevice -> VkPipelineCache -> Ptr CSize -> Ptr Void -> IO VkResult---- ** vkMergePipelineCaches-foreign import ccall "vkMergePipelineCaches" vkMergePipelineCaches :: -  VkDevice ->-  VkPipelineCache -> Word32 -> Ptr VkPipelineCache -> IO VkResult---- ** vkCreateGraphicsPipelines-foreign import ccall "vkCreateGraphicsPipelines" vkCreateGraphicsPipelines :: -  VkDevice ->-  VkPipelineCache ->-    Word32 ->-      Ptr VkGraphicsPipelineCreateInfo ->-        Ptr VkAllocationCallbacks -> Ptr VkPipeline -> IO VkResult---- ** vkCreateComputePipelines-foreign import ccall "vkCreateComputePipelines" vkCreateComputePipelines :: -  VkDevice ->-  VkPipelineCache ->-    Word32 ->-      Ptr VkComputePipelineCreateInfo ->-        Ptr VkAllocationCallbacks -> Ptr VkPipeline -> IO VkResult---- ** vkDestroyPipeline-foreign import ccall "vkDestroyPipeline" vkDestroyPipeline :: -  VkDevice -> VkPipeline -> Ptr VkAllocationCallbacks -> IO ()---- ** vkCreatePipelineLayout-foreign import ccall "vkCreatePipelineLayout" vkCreatePipelineLayout :: -  VkDevice ->-  Ptr VkPipelineLayoutCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkPipelineLayout -> IO VkResult---- ** vkDestroyPipelineLayout-foreign import ccall "vkDestroyPipelineLayout" vkDestroyPipelineLayout :: -  VkDevice -> VkPipelineLayout -> Ptr VkAllocationCallbacks -> IO ()---- ** vkCreateSampler-foreign import ccall "vkCreateSampler" vkCreateSampler :: -  VkDevice ->-  Ptr VkSamplerCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkSampler -> IO VkResult---- ** vkDestroySampler-foreign import ccall "vkDestroySampler" vkDestroySampler :: -  VkDevice -> VkSampler -> Ptr VkAllocationCallbacks -> IO ()---- ** vkCreateDescriptorSetLayout-foreign import ccall "vkCreateDescriptorSetLayout" vkCreateDescriptorSetLayout :: -  VkDevice ->-  Ptr VkDescriptorSetLayoutCreateInfo ->-    Ptr VkAllocationCallbacks ->-      Ptr VkDescriptorSetLayout -> IO VkResult---- ** vkDestroyDescriptorSetLayout-foreign import ccall "vkDestroyDescriptorSetLayout" vkDestroyDescriptorSetLayout :: -  VkDevice ->-  VkDescriptorSetLayout -> Ptr VkAllocationCallbacks -> IO ()---- ** vkCreateDescriptorPool-foreign import ccall "vkCreateDescriptorPool" vkCreateDescriptorPool :: -  VkDevice ->-  Ptr VkDescriptorPoolCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkDescriptorPool -> IO VkResult---- ** vkDestroyDescriptorPool-foreign import ccall "vkDestroyDescriptorPool" vkDestroyDescriptorPool :: -  VkDevice -> VkDescriptorPool -> Ptr VkAllocationCallbacks -> IO ()---- ** vkResetDescriptorPool-foreign import ccall "vkResetDescriptorPool" vkResetDescriptorPool :: -  VkDevice ->-  VkDescriptorPool -> VkDescriptorPoolResetFlags -> IO VkResult---- ** vkAllocateDescriptorSets-foreign import ccall "vkAllocateDescriptorSets" vkAllocateDescriptorSets :: -  VkDevice ->-  Ptr VkDescriptorSetAllocateInfo ->-    Ptr VkDescriptorSet -> IO VkResult---- ** vkFreeDescriptorSets-foreign import ccall "vkFreeDescriptorSets" vkFreeDescriptorSets :: -  VkDevice ->-  VkDescriptorPool -> Word32 -> Ptr VkDescriptorSet -> IO VkResult---- ** vkUpdateDescriptorSets-foreign import ccall "vkUpdateDescriptorSets" vkUpdateDescriptorSets :: -  VkDevice ->-  Word32 ->-    Ptr VkWriteDescriptorSet ->-      Word32 -> Ptr VkCopyDescriptorSet -> IO ()---- ** vkCreateFramebuffer-foreign import ccall "vkCreateFramebuffer" vkCreateFramebuffer :: -  VkDevice ->-  Ptr VkFramebufferCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkFramebuffer -> IO VkResult---- ** vkDestroyFramebuffer-foreign import ccall "vkDestroyFramebuffer" vkDestroyFramebuffer :: -  VkDevice -> VkFramebuffer -> Ptr VkAllocationCallbacks -> IO ()---- ** vkCreateRenderPass-foreign import ccall "vkCreateRenderPass" vkCreateRenderPass :: -  VkDevice ->-  Ptr VkRenderPassCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkRenderPass -> IO VkResult---- ** vkDestroyRenderPass-foreign import ccall "vkDestroyRenderPass" vkDestroyRenderPass :: -  VkDevice -> VkRenderPass -> Ptr VkAllocationCallbacks -> IO ()---- ** vkGetRenderAreaGranularity-foreign import ccall "vkGetRenderAreaGranularity" vkGetRenderAreaGranularity :: -  VkDevice -> VkRenderPass -> Ptr VkExtent2D -> IO ()---- ** vkCreateCommandPool-foreign import ccall "vkCreateCommandPool" vkCreateCommandPool :: -  VkDevice ->-  Ptr VkCommandPoolCreateInfo ->-    Ptr VkAllocationCallbacks -> Ptr VkCommandPool -> IO VkResult---- ** vkDestroyCommandPool-foreign import ccall "vkDestroyCommandPool" vkDestroyCommandPool :: -  VkDevice -> VkCommandPool -> Ptr VkAllocationCallbacks -> IO ()---- ** vkResetCommandPool-foreign import ccall "vkResetCommandPool" vkResetCommandPool :: -  VkDevice -> VkCommandPool -> VkCommandPoolResetFlags -> IO VkResult---- ** vkAllocateCommandBuffers-foreign import ccall "vkAllocateCommandBuffers" vkAllocateCommandBuffers :: -  VkDevice ->-  Ptr VkCommandBufferAllocateInfo ->-    Ptr VkCommandBuffer -> IO VkResult---- ** vkFreeCommandBuffers-foreign import ccall "vkFreeCommandBuffers" vkFreeCommandBuffers :: -  VkDevice -> VkCommandPool -> Word32 -> Ptr VkCommandBuffer -> IO ()---- ** vkBeginCommandBuffer-foreign import ccall "vkBeginCommandBuffer" vkBeginCommandBuffer :: -  VkCommandBuffer -> Ptr VkCommandBufferBeginInfo -> IO VkResult---- ** vkEndCommandBuffer-foreign import ccall "vkEndCommandBuffer" vkEndCommandBuffer :: -  VkCommandBuffer -> IO VkResult---- ** vkResetCommandBuffer-foreign import ccall "vkResetCommandBuffer" vkResetCommandBuffer :: -  VkCommandBuffer -> VkCommandBufferResetFlags -> IO VkResult---- ** vkCmdBindPipeline-foreign import ccall "vkCmdBindPipeline" vkCmdBindPipeline :: -  VkCommandBuffer -> VkPipelineBindPoint -> VkPipeline -> IO ()---- ** vkCmdSetViewport-foreign import ccall "vkCmdSetViewport" vkCmdSetViewport :: -  VkCommandBuffer -> Word32 -> Word32 -> Ptr VkViewport -> IO ()---- ** vkCmdSetScissor-foreign import ccall "vkCmdSetScissor" vkCmdSetScissor :: -  VkCommandBuffer -> Word32 -> Word32 -> Ptr VkRect2D -> IO ()---- ** vkCmdSetLineWidth-foreign import ccall "vkCmdSetLineWidth" vkCmdSetLineWidth :: -  VkCommandBuffer -> CFloat -> IO ()---- ** vkCmdSetDepthBias-foreign import ccall "vkCmdSetDepthBias" vkCmdSetDepthBias :: -  VkCommandBuffer -> CFloat -> CFloat -> CFloat -> IO ()---- ** vkCmdSetBlendConstants-foreign import ccall "vkCmdSetBlendConstants" vkCmdSetBlendConstants :: -  VkCommandBuffer -> Ptr CFloat -> IO ()---- ** vkCmdSetDepthBounds-foreign import ccall "vkCmdSetDepthBounds" vkCmdSetDepthBounds :: -  VkCommandBuffer -> CFloat -> CFloat -> IO ()---- ** vkCmdSetStencilCompareMask-foreign import ccall "vkCmdSetStencilCompareMask" vkCmdSetStencilCompareMask :: -  VkCommandBuffer -> VkStencilFaceFlags -> Word32 -> IO ()---- ** vkCmdSetStencilWriteMask-foreign import ccall "vkCmdSetStencilWriteMask" vkCmdSetStencilWriteMask :: -  VkCommandBuffer -> VkStencilFaceFlags -> Word32 -> IO ()---- ** vkCmdSetStencilReference-foreign import ccall "vkCmdSetStencilReference" vkCmdSetStencilReference :: -  VkCommandBuffer -> VkStencilFaceFlags -> Word32 -> IO ()---- ** vkCmdBindDescriptorSets-foreign import ccall "vkCmdBindDescriptorSets" vkCmdBindDescriptorSets :: -  VkCommandBuffer ->-  VkPipelineBindPoint ->-    VkPipelineLayout ->-      Word32 ->-        Word32 -> Ptr VkDescriptorSet -> Word32 -> Ptr Word32 -> IO ()---- ** vkCmdBindIndexBuffer-foreign import ccall "vkCmdBindIndexBuffer" vkCmdBindIndexBuffer :: -  VkCommandBuffer -> VkBuffer -> VkDeviceSize -> VkIndexType -> IO ()---- ** vkCmdBindVertexBuffers-foreign import ccall "vkCmdBindVertexBuffers" vkCmdBindVertexBuffers :: -  VkCommandBuffer ->-  Word32 -> Word32 -> Ptr VkBuffer -> Ptr VkDeviceSize -> IO ()---- ** vkCmdDraw-foreign import ccall "vkCmdDraw" vkCmdDraw :: -  VkCommandBuffer -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()---- ** vkCmdDrawIndexed-foreign import ccall "vkCmdDrawIndexed" vkCmdDrawIndexed :: -  VkCommandBuffer ->-  Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()---- ** vkCmdDrawIndirect-foreign import ccall "vkCmdDrawIndirect" vkCmdDrawIndirect :: -  VkCommandBuffer ->-  VkBuffer -> VkDeviceSize -> Word32 -> Word32 -> IO ()---- ** vkCmdDrawIndexedIndirect-foreign import ccall "vkCmdDrawIndexedIndirect" vkCmdDrawIndexedIndirect :: -  VkCommandBuffer ->-  VkBuffer -> VkDeviceSize -> Word32 -> Word32 -> IO ()---- ** vkCmdDispatch-foreign import ccall "vkCmdDispatch" vkCmdDispatch :: -  VkCommandBuffer -> Word32 -> Word32 -> Word32 -> IO ()---- ** vkCmdDispatchIndirect-foreign import ccall "vkCmdDispatchIndirect" vkCmdDispatchIndirect :: -  VkCommandBuffer -> VkBuffer -> VkDeviceSize -> IO ()---- ** vkCmdCopyBuffer-foreign import ccall "vkCmdCopyBuffer" vkCmdCopyBuffer :: -  VkCommandBuffer ->-  VkBuffer -> VkBuffer -> Word32 -> Ptr VkBufferCopy -> IO ()---- ** vkCmdCopyImage-foreign import ccall "vkCmdCopyImage" vkCmdCopyImage :: -  VkCommandBuffer ->-  VkImage ->-    VkImageLayout ->-      VkImage -> VkImageLayout -> Word32 -> Ptr VkImageCopy -> IO ()---- ** vkCmdBlitImage-foreign import ccall "vkCmdBlitImage" vkCmdBlitImage :: -  VkCommandBuffer ->-  VkImage ->-    VkImageLayout ->-      VkImage ->-        VkImageLayout -> Word32 -> Ptr VkImageBlit -> VkFilter -> IO ()---- ** vkCmdCopyBufferToImage-foreign import ccall "vkCmdCopyBufferToImage" vkCmdCopyBufferToImage :: -  VkCommandBuffer ->-  VkBuffer ->-    VkImage ->-      VkImageLayout -> Word32 -> Ptr VkBufferImageCopy -> IO ()---- ** vkCmdCopyImageToBuffer-foreign import ccall "vkCmdCopyImageToBuffer" vkCmdCopyImageToBuffer :: -  VkCommandBuffer ->-  VkImage ->-    VkImageLayout ->-      VkBuffer -> Word32 -> Ptr VkBufferImageCopy -> IO ()---- ** vkCmdUpdateBuffer-foreign import ccall "vkCmdUpdateBuffer" vkCmdUpdateBuffer :: -  VkCommandBuffer ->-  VkBuffer -> VkDeviceSize -> VkDeviceSize -> Ptr Word32 -> IO ()---- ** vkCmdFillBuffer-foreign import ccall "vkCmdFillBuffer" vkCmdFillBuffer :: -  VkCommandBuffer ->-  VkBuffer -> VkDeviceSize -> VkDeviceSize -> Word32 -> IO ()---- ** vkCmdClearColorImage-foreign import ccall "vkCmdClearColorImage" vkCmdClearColorImage :: -  VkCommandBuffer ->-  VkImage ->-    VkImageLayout ->-      Ptr VkClearColorValue ->-        Word32 -> Ptr VkImageSubresourceRange -> IO ()---- ** vkCmdClearDepthStencilImage-foreign import ccall "vkCmdClearDepthStencilImage" vkCmdClearDepthStencilImage :: -  VkCommandBuffer ->-  VkImage ->-    VkImageLayout ->-      Ptr VkClearDepthStencilValue ->-        Word32 -> Ptr VkImageSubresourceRange -> IO ()---- ** vkCmdClearAttachments-foreign import ccall "vkCmdClearAttachments" vkCmdClearAttachments :: -  VkCommandBuffer ->-  Word32 ->-    Ptr VkClearAttachment -> Word32 -> Ptr VkClearRect -> IO ()---- ** vkCmdResolveImage-foreign import ccall "vkCmdResolveImage" vkCmdResolveImage :: -  VkCommandBuffer ->-  VkImage ->-    VkImageLayout ->-      VkImage -> VkImageLayout -> Word32 -> Ptr VkImageResolve -> IO ()---- ** vkCmdSetEvent-foreign import ccall "vkCmdSetEvent" vkCmdSetEvent :: -  VkCommandBuffer -> VkEvent -> VkPipelineStageFlags -> IO ()---- ** vkCmdResetEvent-foreign import ccall "vkCmdResetEvent" vkCmdResetEvent :: -  VkCommandBuffer -> VkEvent -> VkPipelineStageFlags -> IO ()---- ** vkCmdWaitEvents-foreign import ccall "vkCmdWaitEvents" vkCmdWaitEvents :: -  VkCommandBuffer ->-  Word32 ->-    Ptr VkEvent ->-      VkPipelineStageFlags ->-        VkPipelineStageFlags ->-          Word32 ->-            Ptr VkMemoryBarrier ->-              Word32 ->-                Ptr VkBufferMemoryBarrier ->-                  Word32 -> Ptr VkImageMemoryBarrier -> IO ()---- ** vkCmdPipelineBarrier-foreign import ccall "vkCmdPipelineBarrier" vkCmdPipelineBarrier :: -  VkCommandBuffer ->-  VkPipelineStageFlags ->-    VkPipelineStageFlags ->-      VkDependencyFlags ->-        Word32 ->-          Ptr VkMemoryBarrier ->-            Word32 ->-              Ptr VkBufferMemoryBarrier ->-                Word32 -> Ptr VkImageMemoryBarrier -> IO ()---- ** vkCmdBeginQuery-foreign import ccall "vkCmdBeginQuery" vkCmdBeginQuery :: -  VkCommandBuffer ->-  VkQueryPool -> Word32 -> VkQueryControlFlags -> IO ()---- ** vkCmdEndQuery-foreign import ccall "vkCmdEndQuery" vkCmdEndQuery :: -  VkCommandBuffer -> VkQueryPool -> Word32 -> IO ()---- ** vkCmdResetQueryPool-foreign import ccall "vkCmdResetQueryPool" vkCmdResetQueryPool :: -  VkCommandBuffer -> VkQueryPool -> Word32 -> Word32 -> IO ()---- ** vkCmdWriteTimestamp-foreign import ccall "vkCmdWriteTimestamp" vkCmdWriteTimestamp :: -  VkCommandBuffer ->-  VkPipelineStageFlagBits -> VkQueryPool -> Word32 -> IO ()---- ** vkCmdCopyQueryPoolResults-foreign import ccall "vkCmdCopyQueryPoolResults" vkCmdCopyQueryPoolResults :: -  VkCommandBuffer ->-  VkQueryPool ->-    Word32 ->-      Word32 ->-        VkBuffer ->-          VkDeviceSize -> VkDeviceSize -> VkQueryResultFlags -> IO ()---- ** vkCmdPushConstants-foreign import ccall "vkCmdPushConstants" vkCmdPushConstants :: -  VkCommandBuffer ->-  VkPipelineLayout ->-    VkShaderStageFlags -> Word32 -> Word32 -> Ptr Void -> IO ()---- ** vkCmdBeginRenderPass-foreign import ccall "vkCmdBeginRenderPass" vkCmdBeginRenderPass :: -  VkCommandBuffer ->-  Ptr VkRenderPassBeginInfo -> VkSubpassContents -> IO ()---- ** vkCmdNextSubpass-foreign import ccall "vkCmdNextSubpass" vkCmdNextSubpass :: -  VkCommandBuffer -> VkSubpassContents -> IO ()---- ** vkCmdEndRenderPass-foreign import ccall "vkCmdEndRenderPass" vkCmdEndRenderPass :: -  VkCommandBuffer -> IO ()---- ** vkCmdExecuteCommands-foreign import ccall "vkCmdExecuteCommands" vkCmdExecuteCommands :: -  VkCommandBuffer -> Word32 -> Ptr VkCommandBuffer -> IO ()---- ** vkGetPhysicalDeviceDisplayPropertiesKHR-foreign import ccall "vkGetPhysicalDeviceDisplayPropertiesKHR" vkGetPhysicalDeviceDisplayPropertiesKHR :: -  VkPhysicalDevice ->-  Ptr Word32 -> Ptr VkDisplayPropertiesKHR -> IO VkResult---- ** vkGetPhysicalDeviceDisplayPlanePropertiesKHR-foreign import ccall "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" vkGetPhysicalDeviceDisplayPlanePropertiesKHR :: -  VkPhysicalDevice ->-  Ptr Word32 -> Ptr VkDisplayPlanePropertiesKHR -> IO VkResult---- ** vkGetDisplayPlaneSupportedDisplaysKHR-foreign import ccall "vkGetDisplayPlaneSupportedDisplaysKHR" vkGetDisplayPlaneSupportedDisplaysKHR :: -  VkPhysicalDevice ->-  Word32 -> Ptr Word32 -> Ptr VkDisplayKHR -> IO VkResult---- ** vkGetDisplayModePropertiesKHR-foreign import ccall "vkGetDisplayModePropertiesKHR" vkGetDisplayModePropertiesKHR :: -  VkPhysicalDevice ->-  VkDisplayKHR ->-    Ptr Word32 -> Ptr VkDisplayModePropertiesKHR -> IO VkResult---- ** vkCreateDisplayModeKHR-foreign import ccall "vkCreateDisplayModeKHR" vkCreateDisplayModeKHR :: -  VkPhysicalDevice ->-  VkDisplayKHR ->-    Ptr VkDisplayModeCreateInfoKHR ->-      Ptr VkAllocationCallbacks -> Ptr VkDisplayModeKHR -> IO VkResult---- ** vkGetDisplayPlaneCapabilitiesKHR-foreign import ccall "vkGetDisplayPlaneCapabilitiesKHR" vkGetDisplayPlaneCapabilitiesKHR :: -  VkPhysicalDevice ->-  VkDisplayModeKHR ->-    Word32 -> Ptr VkDisplayPlaneCapabilitiesKHR -> IO VkResult---- ** vkCreateDisplayPlaneSurfaceKHR-foreign import ccall "vkCreateDisplayPlaneSurfaceKHR" vkCreateDisplayPlaneSurfaceKHR :: -  VkInstance ->-  Ptr VkDisplaySurfaceCreateInfoKHR ->-    Ptr VkAllocationCallbacks -> Ptr VkSurfaceKHR -> IO VkResult---- ** vkCreateSharedSwapchainsKHR-foreign import ccall "vkCreateSharedSwapchainsKHR" vkCreateSharedSwapchainsKHR :: -  VkDevice ->-  Word32 ->-    Ptr VkSwapchainCreateInfoKHR ->-      Ptr VkAllocationCallbacks -> Ptr VkSwapchainKHR -> IO VkResult---- ** vkDestroySurfaceKHR-foreign import ccall "vkDestroySurfaceKHR" vkDestroySurfaceKHR :: -  VkInstance -> VkSurfaceKHR -> Ptr VkAllocationCallbacks -> IO ()---- ** vkGetPhysicalDeviceSurfaceSupportKHR-foreign import ccall "vkGetPhysicalDeviceSurfaceSupportKHR" vkGetPhysicalDeviceSurfaceSupportKHR :: -  VkPhysicalDevice ->-  Word32 -> VkSurfaceKHR -> Ptr VkBool32 -> IO VkResult---- ** vkGetPhysicalDeviceSurfaceCapabilitiesKHR-foreign import ccall "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" vkGetPhysicalDeviceSurfaceCapabilitiesKHR :: -  VkPhysicalDevice ->-  VkSurfaceKHR -> Ptr VkSurfaceCapabilitiesKHR -> IO VkResult---- ** vkGetPhysicalDeviceSurfaceFormatsKHR-foreign import ccall "vkGetPhysicalDeviceSurfaceFormatsKHR" vkGetPhysicalDeviceSurfaceFormatsKHR :: -  VkPhysicalDevice ->-  VkSurfaceKHR -> Ptr Word32 -> Ptr VkSurfaceFormatKHR -> IO VkResult---- ** vkGetPhysicalDeviceSurfacePresentModesKHR-foreign import ccall "vkGetPhysicalDeviceSurfacePresentModesKHR" vkGetPhysicalDeviceSurfacePresentModesKHR :: -  VkPhysicalDevice ->-  VkSurfaceKHR -> Ptr Word32 -> Ptr VkPresentModeKHR -> IO VkResult---- ** vkCreateSwapchainKHR-foreign import ccall "vkCreateSwapchainKHR" vkCreateSwapchainKHR :: -  VkDevice ->-  Ptr VkSwapchainCreateInfoKHR ->-    Ptr VkAllocationCallbacks -> Ptr VkSwapchainKHR -> IO VkResult---- ** vkDestroySwapchainKHR-foreign import ccall "vkDestroySwapchainKHR" vkDestroySwapchainKHR :: -  VkDevice -> VkSwapchainKHR -> Ptr VkAllocationCallbacks -> IO ()---- ** vkGetSwapchainImagesKHR-foreign import ccall "vkGetSwapchainImagesKHR" vkGetSwapchainImagesKHR :: -  VkDevice ->-  VkSwapchainKHR -> Ptr Word32 -> Ptr VkImage -> IO VkResult---- ** vkAcquireNextImageKHR-foreign import ccall "vkAcquireNextImageKHR" vkAcquireNextImageKHR :: -  VkDevice ->-  VkSwapchainKHR ->-    Word64 -> VkSemaphore -> VkFence -> Ptr Word32 -> IO VkResult---- ** vkQueuePresentKHR-foreign import ccall "vkQueuePresentKHR" vkQueuePresentKHR :: -  VkQueue -> Ptr VkPresentInfoKHR -> IO VkResult---- ** vkGetPhysicalDeviceWin32PresentationSupportKHR-foreign import ccall "vkGetPhysicalDeviceWin32PresentationSupportKHR" vkGetPhysicalDeviceWin32PresentationSupportKHR :: -  VkPhysicalDevice -> Word32 -> IO VkBool32---- ** vkCreateDebugReportCallbackEXT-foreign import ccall "vkCreateDebugReportCallbackEXT" vkCreateDebugReportCallbackEXT :: -  VkInstance ->-  Ptr VkDebugReportCallbackCreateInfoEXT ->-    Ptr VkAllocationCallbacks ->-      Ptr VkDebugReportCallbackEXT -> IO VkResult---- ** vkDestroyDebugReportCallbackEXT-foreign import ccall "vkDestroyDebugReportCallbackEXT" vkDestroyDebugReportCallbackEXT :: -  VkInstance ->-  VkDebugReportCallbackEXT -> Ptr VkAllocationCallbacks -> IO ()---- ** vkDebugReportMessageEXT-foreign import ccall "vkDebugReportMessageEXT" vkDebugReportMessageEXT :: -  VkInstance ->-  VkDebugReportFlagsEXT ->-    VkDebugReportObjectTypeEXT ->-      Word64 -> CSize -> Int32 -> Ptr CChar -> Ptr CChar -> IO ()--+module Graphics.Vulkan+  ( module Graphics.Vulkan.Buffer+  , module Graphics.Vulkan.BufferView+  , module Graphics.Vulkan.CommandBuffer+  , module Graphics.Vulkan.CommandBufferBuilding+  , module Graphics.Vulkan.CommandPool+  , module Graphics.Vulkan.Constants+  , module Graphics.Vulkan.Core+  , module Graphics.Vulkan.DescriptorSet+  , module Graphics.Vulkan.Device+  , module Graphics.Vulkan.DeviceInitialization+  , module Graphics.Vulkan.Event+  , module Graphics.Vulkan.ExtensionDiscovery+  , module Graphics.Vulkan.Fence+  , module Graphics.Vulkan.HeaderBoilerplate+  , module Graphics.Vulkan.Image+  , module Graphics.Vulkan.ImageView+  , module Graphics.Vulkan.KHR.Surface+  , module Graphics.Vulkan.LayerDiscovery+  , module Graphics.Vulkan.Memory+  , module Graphics.Vulkan.MemoryManagement+  , module Graphics.Vulkan.OtherTypes+  , module Graphics.Vulkan.Pass+  , module Graphics.Vulkan.Pipeline+  , module Graphics.Vulkan.PipelineCache+  , module Graphics.Vulkan.PipelineLayout+  , module Graphics.Vulkan.Query+  , module Graphics.Vulkan.Queue+  , module Graphics.Vulkan.QueueSemaphore+  , module Graphics.Vulkan.Sampler+  , module Graphics.Vulkan.Shader+  , module Graphics.Vulkan.SparseResourceMemoryManagement+  , module Graphics.Vulkan.Version+  ) where++import Graphics.Vulkan.Buffer+import Graphics.Vulkan.BufferView+import Graphics.Vulkan.CommandBuffer+import Graphics.Vulkan.CommandBufferBuilding+import Graphics.Vulkan.CommandPool+import Graphics.Vulkan.Constants+import Graphics.Vulkan.Core+import Graphics.Vulkan.DescriptorSet+import Graphics.Vulkan.Device+import Graphics.Vulkan.DeviceInitialization+import Graphics.Vulkan.Event+import Graphics.Vulkan.ExtensionDiscovery+import Graphics.Vulkan.Fence+import Graphics.Vulkan.HeaderBoilerplate+import Graphics.Vulkan.Image+import Graphics.Vulkan.ImageView+import Graphics.Vulkan.KHR.Surface+import Graphics.Vulkan.LayerDiscovery+import Graphics.Vulkan.Memory+import Graphics.Vulkan.MemoryManagement+import Graphics.Vulkan.OtherTypes+import Graphics.Vulkan.Pass+import Graphics.Vulkan.Pipeline+import Graphics.Vulkan.PipelineCache+import Graphics.Vulkan.PipelineLayout+import Graphics.Vulkan.Query+import Graphics.Vulkan.Queue+import Graphics.Vulkan.QueueSemaphore+import Graphics.Vulkan.Sampler+import Graphics.Vulkan.Shader+import Graphics.Vulkan.SparseResourceMemoryManagement+import Graphics.Vulkan.Version
+ src/Graphics/Vulkan/Buffer.hs view
@@ -0,0 +1,124 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Buffer where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkDeviceSize(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           , VkSharingMode(..)+                           )+import Foreign.C.Types( CSize(..)+                      )+-- ** vkCreateBuffer+foreign import ccall "vkCreateBuffer" vkCreateBuffer :: +  VkDevice ->+  Ptr VkBufferCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkBuffer -> IO VkResult++-- ** VkBufferCreateFlags++newtype VkBufferCreateFlagBits = VkBufferCreateFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkBufferCreateFlagBits+type VkBufferCreateFlags = VkBufferCreateFlagBits+-- | Buffer should support sparse backing+pattern VK_BUFFER_CREATE_SPARSE_BINDING_BIT = VkBufferCreateFlagBits 0x1+-- | Buffer should support sparse backing with partial residency+pattern VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = VkBufferCreateFlagBits 0x2+-- | Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers+pattern VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = VkBufferCreateFlagBits 0x4+++-- ** VkBufferUsageFlags++newtype VkBufferUsageFlagBits = VkBufferUsageFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkBufferUsageFlagBits+type VkBufferUsageFlags = VkBufferUsageFlagBits+-- | Can be used as a source of transfer operations+pattern VK_BUFFER_USAGE_TRANSFER_SRC_BIT = VkBufferUsageFlagBits 0x1+-- | Can be used as a destination of transfer operations+pattern VK_BUFFER_USAGE_TRANSFER_DST_BIT = VkBufferUsageFlagBits 0x2+-- | Can be used as TBO+pattern VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = VkBufferUsageFlagBits 0x4+-- | Can be used as IBO+pattern VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = VkBufferUsageFlagBits 0x8+-- | Can be used as UBO+pattern VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = VkBufferUsageFlagBits 0x10+-- | Can be used as SSBO+pattern VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = VkBufferUsageFlagBits 0x20+-- | Can be used as source of fixed-function index fetch (index buffer)+pattern VK_BUFFER_USAGE_INDEX_BUFFER_BIT = VkBufferUsageFlagBits 0x40+-- | Can be used as source of fixed-function vertex fetch (VBO)+pattern VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = VkBufferUsageFlagBits 0x80+-- | Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)+pattern VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = VkBufferUsageFlagBits 0x100+++-- ** vkDestroyBuffer+foreign import ccall "vkDestroyBuffer" vkDestroyBuffer :: +  VkDevice -> VkBuffer -> Ptr VkAllocationCallbacks -> IO ()++newtype VkBuffer = VkBuffer Word64+  deriving (Eq, Storable)+++data VkBufferCreateInfo =+  VkBufferCreateInfo{ vkSType :: VkStructureType +                    , vkPNext :: Ptr Void +                    , vkFlags :: VkBufferCreateFlags +                    , vkSize :: VkDeviceSize +                    , vkUsage :: VkBufferUsageFlags +                    , vkSharingMode :: VkSharingMode +                    , vkQueueFamilyIndexCount :: Word32 +                    , vkPQueueFamilyIndices :: Ptr Word32 +                    }+  deriving (Eq)++instance Storable VkBufferCreateInfo where+  sizeOf ~_ = 56+  alignment ~_ = 8+  peek ptr = VkBufferCreateInfo <$> peek (ptr `plusPtr` 0)+                                <*> peek (ptr `plusPtr` 8)+                                <*> peek (ptr `plusPtr` 16)+                                <*> peek (ptr `plusPtr` 24)+                                <*> peek (ptr `plusPtr` 32)+                                <*> peek (ptr `plusPtr` 36)+                                <*> peek (ptr `plusPtr` 40)+                                <*> peek (ptr `plusPtr` 48)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkBufferCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkSize (poked :: VkBufferCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkUsage (poked :: VkBufferCreateInfo))+                *> poke (ptr `plusPtr` 36) (vkSharingMode (poked :: VkBufferCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkQueueFamilyIndexCount (poked :: VkBufferCreateInfo))+                *> poke (ptr `plusPtr` 48) (vkPQueueFamilyIndices (poked :: VkBufferCreateInfo))++
+ src/Graphics/Vulkan/BufferView.hs view
@@ -0,0 +1,84 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.BufferView where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Graphics.Vulkan.Buffer( VkBuffer(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkDeviceSize(..)+                           , VkFlags(..)+                           , VkFormat(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize(..)+                      )+-- ** vkCreateBufferView+foreign import ccall "vkCreateBufferView" vkCreateBufferView :: +  VkDevice ->+  Ptr VkBufferViewCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkBufferView -> IO VkResult++newtype VkBufferView = VkBufferView Word64+  deriving (Eq, Storable)+++data VkBufferViewCreateInfo =+  VkBufferViewCreateInfo{ vkSType :: VkStructureType +                        , vkPNext :: Ptr Void +                        , vkFlags :: VkBufferViewCreateFlags +                        , vkBuffer :: VkBuffer +                        , vkFormat :: VkFormat +                        , vkOffset :: VkDeviceSize +                        , vkRange :: VkDeviceSize +                        }+  deriving (Eq)++instance Storable VkBufferViewCreateInfo where+  sizeOf ~_ = 56+  alignment ~_ = 8+  peek ptr = VkBufferViewCreateInfo <$> 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` 48)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferViewCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferViewCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkBufferViewCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkBuffer (poked :: VkBufferViewCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkFormat (poked :: VkBufferViewCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkOffset (poked :: VkBufferViewCreateInfo))+                *> poke (ptr `plusPtr` 48) (vkRange (poked :: VkBufferViewCreateInfo))+++-- ** VkBufferViewCreateFlags+-- | Opaque flag+newtype VkBufferViewCreateFlags = VkBufferViewCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** vkDestroyBufferView+foreign import ccall "vkDestroyBufferView" vkDestroyBufferView :: +  VkDevice -> VkBufferView -> Ptr VkAllocationCallbacks -> IO ()+
+ src/Graphics/Vulkan/CommandBuffer.hs view
@@ -0,0 +1,176 @@+{-# 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 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 Graphics.Vulkan.Query( VkQueryPipelineStatisticFlags(..)+                            , VkQueryControlFlagBits(..)+                            , VkQueryControlFlags(..)+                            , VkQueryPipelineStatisticFlagBits(..)+                            )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkBool32(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+-- ** VkCommandBufferLevel++newtype VkCommandBufferLevel = VkCommandBufferLevel Int32+  deriving (Eq, Storable)++pattern VK_COMMAND_BUFFER_LEVEL_PRIMARY = VkCommandBufferLevel 0++pattern VK_COMMAND_BUFFER_LEVEL_SECONDARY = VkCommandBufferLevel 1++-- ** vkAllocateCommandBuffers+foreign import ccall "vkAllocateCommandBuffers" vkAllocateCommandBuffers :: +  VkDevice ->+  Ptr VkCommandBufferAllocateInfo ->+    Ptr VkCommandBuffer -> IO VkResult++-- ** vkResetCommandBuffer+foreign import ccall "vkResetCommandBuffer" vkResetCommandBuffer :: +  VkCommandBuffer -> VkCommandBufferResetFlags -> IO VkResult++-- ** vkFreeCommandBuffers+foreign import ccall "vkFreeCommandBuffers" vkFreeCommandBuffers :: +  VkDevice -> VkCommandPool -> Word32 -> Ptr VkCommandBuffer -> IO ()++-- ** VkCommandBufferUsageFlags++newtype VkCommandBufferUsageFlagBits = VkCommandBufferUsageFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkCommandBufferUsageFlagBits+type VkCommandBufferUsageFlags = VkCommandBufferUsageFlagBits++pattern VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = VkCommandBufferUsageFlagBits 0x1++pattern VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = VkCommandBufferUsageFlagBits 0x2+-- | Command buffer may be submitted/executed more than once simultaneously+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++-- ** VkCommandBufferResetFlags++newtype VkCommandBufferResetFlagBits = VkCommandBufferResetFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkCommandBufferResetFlagBits+type VkCommandBufferResetFlags = VkCommandBufferResetFlagBits+-- | Release resources owned by the buffer+pattern VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = VkCommandBufferResetFlagBits 0x1+++-- ** vkEndCommandBuffer+foreign import ccall "vkEndCommandBuffer" vkEndCommandBuffer :: +  VkCommandBuffer -> IO VkResult++-- ** vkBeginCommandBuffer+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))++
+ src/Graphics/Vulkan/CommandBufferBuilding.hs view
@@ -0,0 +1,611 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.CommandBufferBuilding where+import Graphics.Vulkan.Buffer( VkBuffer(..)+                             )+import Graphics.Vulkan.Pass( VkDependencyFlagBits(..)+                           , VkFramebuffer(..)+                           , VkRenderPass(..)+                           , VkAccessFlags(..)+                           , VkDependencyFlags(..)+                           , VkAccessFlagBits(..)+                           )+import Graphics.Vulkan.Event( VkEvent(..)+                            )+import Graphics.Vulkan.Pipeline( VkPipelineStageFlagBits(..)+                               , VkPipelineStageFlags(..)+                               , VkPipeline(..)+                               , VkPipelineBindPoint(..)+                               )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , castPtr+                  , plusPtr+                  )+import Graphics.Vulkan.DescriptorSet( VkDescriptorSet(..)+                                    )+import Graphics.Vulkan.CommandBuffer( VkCommandBuffer(..)+                                    )+import Data.Int( Int32+               )+import Data.Vector.Fixed.Cont( ToPeano+                             )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.PipelineLayout( VkPipelineLayout(..)+                                     )+import Graphics.Vulkan.Shader( VkShaderStageFlagBits(..)+                             , VkShaderStageFlags(..)+                             )+import Graphics.Vulkan.Sampler( VkFilter(..)+                              )+import Graphics.Vulkan.Image( VkImage(..)+                            , VkImageLayout(..)+                            , VkImageAspectFlagBits(..)+                            , VkImageSubresourceRange(..)+                            , VkImageAspectFlags(..)+                            )+import Graphics.Vulkan.Query( VkQueryResultFlagBits(..)+                            , VkQueryControlFlagBits(..)+                            , VkQueryControlFlags(..)+                            , VkQueryPool(..)+                            , VkQueryResultFlags(..)+                            )+import Data.Vector.Fixed.Storable( Vec+                                 )+import Graphics.Vulkan.OtherTypes( VkImageMemoryBarrier(..)+                                 , VkMemoryBarrier(..)+                                 , VkBufferMemoryBarrier(..)+                                 )+import Graphics.Vulkan.Core( VkExtent3D(..)+                           , VkDeviceSize(..)+                           , VkExtent2D(..)+                           , VkFlags(..)+                           , VkOffset2D(..)+                           , VkOffset3D(..)+                           , VkRect2D(..)+                           , VkViewport(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CFloat+                      , CFloat(..)+                      )+-- ** vkCmdPushConstants+foreign import ccall "vkCmdPushConstants" vkCmdPushConstants :: +  VkCommandBuffer ->+  VkPipelineLayout ->+    VkShaderStageFlags -> Word32 -> Word32 -> Ptr Void -> IO ()++-- ** vkCmdSetStencilWriteMask+foreign import ccall "vkCmdSetStencilWriteMask" vkCmdSetStencilWriteMask :: +  VkCommandBuffer -> VkStencilFaceFlags -> Word32 -> IO ()++-- ** vkCmdBindIndexBuffer+foreign import ccall "vkCmdBindIndexBuffer" vkCmdBindIndexBuffer :: +  VkCommandBuffer -> VkBuffer -> VkDeviceSize -> VkIndexType -> IO ()++-- ** vkCmdResetQueryPool+foreign import ccall "vkCmdResetQueryPool" vkCmdResetQueryPool :: +  VkCommandBuffer -> VkQueryPool -> Word32 -> Word32 -> IO ()++-- ** vkCmdResolveImage+foreign import ccall "vkCmdResolveImage" vkCmdResolveImage :: +  VkCommandBuffer ->+  VkImage ->+    VkImageLayout ->+      VkImage -> VkImageLayout -> Word32 -> Ptr VkImageResolve -> IO ()++-- ** vkCmdBindPipeline+foreign import ccall "vkCmdBindPipeline" vkCmdBindPipeline :: +  VkCommandBuffer -> VkPipelineBindPoint -> VkPipeline -> IO ()++-- ** vkCmdBindVertexBuffers+foreign import ccall "vkCmdBindVertexBuffers" vkCmdBindVertexBuffers :: +  VkCommandBuffer ->+  Word32 -> Word32 -> Ptr VkBuffer -> Ptr VkDeviceSize -> IO ()++-- ** vkCmdDraw+foreign import ccall "vkCmdDraw" vkCmdDraw :: +  VkCommandBuffer -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()+++data VkImageCopy =+  VkImageCopy{ vkSrcSubresource :: VkImageSubresourceLayers +             , vkSrcOffset :: VkOffset3D +             , vkDstSubresource :: VkImageSubresourceLayers +             , vkDstOffset :: VkOffset3D +             , vkExtent :: VkExtent3D +             }+  deriving (Eq)++instance Storable VkImageCopy where+  sizeOf ~_ = 68+  alignment ~_ = 4+  peek ptr = VkImageCopy <$> peek (ptr `plusPtr` 0)+                         <*> peek (ptr `plusPtr` 16)+                         <*> peek (ptr `plusPtr` 28)+                         <*> peek (ptr `plusPtr` 44)+                         <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageCopy))+                *> poke (ptr `plusPtr` 16) (vkSrcOffset (poked :: VkImageCopy))+                *> poke (ptr `plusPtr` 28) (vkDstSubresource (poked :: VkImageCopy))+                *> poke (ptr `plusPtr` 44) (vkDstOffset (poked :: VkImageCopy))+                *> poke (ptr `plusPtr` 56) (vkExtent (poked :: VkImageCopy))+++-- ** vkCmdNextSubpass+foreign import ccall "vkCmdNextSubpass" vkCmdNextSubpass :: +  VkCommandBuffer -> VkSubpassContents -> IO ()++-- ** vkCmdEndQuery+foreign import ccall "vkCmdEndQuery" vkCmdEndQuery :: +  VkCommandBuffer -> VkQueryPool -> Word32 -> IO ()++-- ** vkCmdSetScissor+foreign import ccall "vkCmdSetScissor" vkCmdSetScissor :: +  VkCommandBuffer -> Word32 -> Word32 -> Ptr VkRect2D -> IO ()++-- ** vkCmdSetEvent+foreign import ccall "vkCmdSetEvent" vkCmdSetEvent :: +  VkCommandBuffer -> VkEvent -> VkPipelineStageFlags -> IO ()++-- ** vkCmdCopyImageToBuffer+foreign import ccall "vkCmdCopyImageToBuffer" vkCmdCopyImageToBuffer :: +  VkCommandBuffer ->+  VkImage ->+    VkImageLayout ->+      VkBuffer -> Word32 -> Ptr VkBufferImageCopy -> IO ()++-- ** vkCmdDispatchIndirect+foreign import ccall "vkCmdDispatchIndirect" vkCmdDispatchIndirect :: +  VkCommandBuffer -> VkBuffer -> VkDeviceSize -> IO ()++-- ** vkCmdBeginQuery+foreign import ccall "vkCmdBeginQuery" vkCmdBeginQuery :: +  VkCommandBuffer ->+  VkQueryPool -> Word32 -> VkQueryControlFlags -> IO ()++-- ** vkCmdEndRenderPass+foreign import ccall "vkCmdEndRenderPass" vkCmdEndRenderPass :: +  VkCommandBuffer -> IO ()++-- ** vkCmdFillBuffer+foreign import ccall "vkCmdFillBuffer" vkCmdFillBuffer :: +  VkCommandBuffer ->+  VkBuffer -> VkDeviceSize -> VkDeviceSize -> Word32 -> IO ()+++data VkClearRect =+  VkClearRect{ vkRect :: VkRect2D +             , vkBaseArrayLayer :: Word32 +             , vkLayerCount :: Word32 +             }+  deriving (Eq)++instance Storable VkClearRect where+  sizeOf ~_ = 24+  alignment ~_ = 4+  peek ptr = VkClearRect <$> peek (ptr `plusPtr` 0)+                         <*> peek (ptr `plusPtr` 16)+                         <*> peek (ptr `plusPtr` 20)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkRect (poked :: VkClearRect))+                *> poke (ptr `plusPtr` 16) (vkBaseArrayLayer (poked :: VkClearRect))+                *> poke (ptr `plusPtr` 20) (vkLayerCount (poked :: VkClearRect))+++-- ** vkCmdWaitEvents+foreign import ccall "vkCmdWaitEvents" vkCmdWaitEvents :: +  VkCommandBuffer ->+  Word32 ->+    Ptr VkEvent ->+      VkPipelineStageFlags ->+        VkPipelineStageFlags ->+          Word32 ->+            Ptr VkMemoryBarrier ->+              Word32 ->+                Ptr VkBufferMemoryBarrier ->+                  Word32 -> Ptr VkImageMemoryBarrier -> IO ()++-- ** vkCmdClearColorImage+foreign import ccall "vkCmdClearColorImage" vkCmdClearColorImage :: +  VkCommandBuffer ->+  VkImage ->+    VkImageLayout ->+      Ptr VkClearColorValue ->+        Word32 -> Ptr VkImageSubresourceRange -> IO ()++-- ** VkIndexType++newtype VkIndexType = VkIndexType Int32+  deriving (Eq, Storable)++pattern VK_INDEX_TYPE_UINT16 = VkIndexType 0++pattern VK_INDEX_TYPE_UINT32 = VkIndexType 1+++data VkBufferImageCopy =+  VkBufferImageCopy{ vkBufferOffset :: VkDeviceSize +                   , vkBufferRowLength :: Word32 +                   , vkBufferImageHeight :: Word32 +                   , vkImageSubresource :: VkImageSubresourceLayers +                   , vkImageOffset :: VkOffset3D +                   , vkImageExtent :: VkExtent3D +                   }+  deriving (Eq)++instance Storable VkBufferImageCopy where+  sizeOf ~_ = 56+  alignment ~_ = 8+  peek ptr = VkBufferImageCopy <$> peek (ptr `plusPtr` 0)+                               <*> peek (ptr `plusPtr` 8)+                               <*> peek (ptr `plusPtr` 12)+                               <*> peek (ptr `plusPtr` 16)+                               <*> peek (ptr `plusPtr` 32)+                               <*> peek (ptr `plusPtr` 44)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBufferOffset (poked :: VkBufferImageCopy))+                *> poke (ptr `plusPtr` 8) (vkBufferRowLength (poked :: VkBufferImageCopy))+                *> poke (ptr `plusPtr` 12) (vkBufferImageHeight (poked :: VkBufferImageCopy))+                *> poke (ptr `plusPtr` 16) (vkImageSubresource (poked :: VkBufferImageCopy))+                *> poke (ptr `plusPtr` 32) (vkImageOffset (poked :: VkBufferImageCopy))+                *> poke (ptr `plusPtr` 44) (vkImageExtent (poked :: VkBufferImageCopy))+++-- ** vkCmdSetDepthBounds+foreign import ccall "vkCmdSetDepthBounds" vkCmdSetDepthBounds :: +  VkCommandBuffer -> CFloat -> CFloat -> IO ()++-- ** vkCmdCopyBufferToImage+foreign import ccall "vkCmdCopyBufferToImage" vkCmdCopyBufferToImage :: +  VkCommandBuffer ->+  VkBuffer ->+    VkImage ->+      VkImageLayout -> Word32 -> Ptr VkBufferImageCopy -> IO ()++-- ** vkCmdDrawIndexedIndirect+foreign import ccall "vkCmdDrawIndexedIndirect" vkCmdDrawIndexedIndirect :: +  VkCommandBuffer ->+  VkBuffer -> VkDeviceSize -> Word32 -> Word32 -> IO ()++-- ** vkCmdUpdateBuffer+foreign import ccall "vkCmdUpdateBuffer" vkCmdUpdateBuffer :: +  VkCommandBuffer ->+  VkBuffer -> VkDeviceSize -> VkDeviceSize -> Ptr Word32 -> IO ()++-- ** vkCmdCopyImage+foreign import ccall "vkCmdCopyImage" vkCmdCopyImage :: +  VkCommandBuffer ->+  VkImage ->+    VkImageLayout ->+      VkImage -> VkImageLayout -> Word32 -> Ptr VkImageCopy -> IO ()++-- ** vkCmdWriteTimestamp+foreign import ccall "vkCmdWriteTimestamp" vkCmdWriteTimestamp :: +  VkCommandBuffer ->+  VkPipelineStageFlagBits -> VkQueryPool -> Word32 -> IO ()+++data VkImageSubresourceLayers =+  VkImageSubresourceLayers{ vkAspectMask :: VkImageAspectFlags +                          , vkMipLevel :: Word32 +                          , vkBaseArrayLayer :: Word32 +                          , vkLayerCount :: Word32 +                          }+  deriving (Eq)++instance Storable VkImageSubresourceLayers where+  sizeOf ~_ = 16+  alignment ~_ = 4+  peek ptr = VkImageSubresourceLayers <$> peek (ptr `plusPtr` 0)+                                      <*> peek (ptr `plusPtr` 4)+                                      <*> peek (ptr `plusPtr` 8)+                                      <*> peek (ptr `plusPtr` 12)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresourceLayers))+                *> poke (ptr `plusPtr` 4) (vkMipLevel (poked :: VkImageSubresourceLayers))+                *> poke (ptr `plusPtr` 8) (vkBaseArrayLayer (poked :: VkImageSubresourceLayers))+                *> poke (ptr `plusPtr` 12) (vkLayerCount (poked :: VkImageSubresourceLayers))+++-- ** vkCmdDrawIndexed+foreign import ccall "vkCmdDrawIndexed" vkCmdDrawIndexed :: +  VkCommandBuffer ->+  Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()++-- ** vkCmdSetDepthBias+foreign import ccall "vkCmdSetDepthBias" vkCmdSetDepthBias :: +  VkCommandBuffer -> CFloat -> CFloat -> CFloat -> IO ()++-- ** vkCmdDrawIndirect+foreign import ccall "vkCmdDrawIndirect" vkCmdDrawIndirect :: +  VkCommandBuffer ->+  VkBuffer -> VkDeviceSize -> Word32 -> Word32 -> IO ()+++data VkClearDepthStencilValue =+  VkClearDepthStencilValue{ vkDepth :: CFloat +                          , vkStencil :: Word32 +                          }+  deriving (Eq)++instance Storable VkClearDepthStencilValue where+  sizeOf ~_ = 8+  alignment ~_ = 4+  peek ptr = VkClearDepthStencilValue <$> peek (ptr `plusPtr` 0)+                                      <*> peek (ptr `plusPtr` 4)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkDepth (poked :: VkClearDepthStencilValue))+                *> poke (ptr `plusPtr` 4) (vkStencil (poked :: VkClearDepthStencilValue))++++data VkBufferCopy =+  VkBufferCopy{ vkSrcOffset :: VkDeviceSize +              , vkDstOffset :: VkDeviceSize +              , vkSize :: VkDeviceSize +              }+  deriving (Eq)++instance Storable VkBufferCopy where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkBufferCopy <$> peek (ptr `plusPtr` 0)+                          <*> peek (ptr `plusPtr` 8)+                          <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcOffset (poked :: VkBufferCopy))+                *> poke (ptr `plusPtr` 8) (vkDstOffset (poked :: VkBufferCopy))+                *> poke (ptr `plusPtr` 16) (vkSize (poked :: VkBufferCopy))+++-- ** vkCmdClearAttachments+foreign import ccall "vkCmdClearAttachments" vkCmdClearAttachments :: +  VkCommandBuffer ->+  Word32 ->+    Ptr VkClearAttachment -> Word32 -> Ptr VkClearRect -> IO ()++-- ** vkCmdSetViewport+foreign import ccall "vkCmdSetViewport" vkCmdSetViewport :: +  VkCommandBuffer -> Word32 -> Word32 -> Ptr VkViewport -> IO ()++-- ** vkCmdCopyBuffer+foreign import ccall "vkCmdCopyBuffer" vkCmdCopyBuffer :: +  VkCommandBuffer ->+  VkBuffer -> VkBuffer -> Word32 -> Ptr VkBufferCopy -> IO ()++-- ** vkCmdBindDescriptorSets+foreign import ccall "vkCmdBindDescriptorSets" vkCmdBindDescriptorSets :: +  VkCommandBuffer ->+  VkPipelineBindPoint ->+    VkPipelineLayout ->+      Word32 ->+        Word32 -> Ptr VkDescriptorSet -> Word32 -> Ptr Word32 -> IO ()++-- ** vkCmdSetLineWidth+foreign import ccall "vkCmdSetLineWidth" vkCmdSetLineWidth :: +  VkCommandBuffer -> CFloat -> IO ()++-- ** vkCmdExecuteCommands+foreign import ccall "vkCmdExecuteCommands" vkCmdExecuteCommands :: +  VkCommandBuffer -> Word32 -> Ptr VkCommandBuffer -> IO ()+++data VkRenderPassBeginInfo =+  VkRenderPassBeginInfo{ vkSType :: VkStructureType +                       , vkPNext :: Ptr Void +                       , vkRenderPass :: VkRenderPass +                       , vkFramebuffer :: VkFramebuffer +                       , vkRenderArea :: VkRect2D +                       , vkClearValueCount :: Word32 +                       , vkPClearValues :: Ptr VkClearValue +                       }+  deriving (Eq)++instance Storable VkRenderPassBeginInfo where+  sizeOf ~_ = 64+  alignment ~_ = 8+  peek ptr = VkRenderPassBeginInfo <$> peek (ptr `plusPtr` 0)+                                   <*> peek (ptr `plusPtr` 8)+                                   <*> peek (ptr `plusPtr` 16)+                                   <*> peek (ptr `plusPtr` 24)+                                   <*> peek (ptr `plusPtr` 32)+                                   <*> peek (ptr `plusPtr` 48)+                                   <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkRenderPassBeginInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassBeginInfo))+                *> poke (ptr `plusPtr` 16) (vkRenderPass (poked :: VkRenderPassBeginInfo))+                *> poke (ptr `plusPtr` 24) (vkFramebuffer (poked :: VkRenderPassBeginInfo))+                *> poke (ptr `plusPtr` 32) (vkRenderArea (poked :: VkRenderPassBeginInfo))+                *> poke (ptr `plusPtr` 48) (vkClearValueCount (poked :: VkRenderPassBeginInfo))+                *> poke (ptr `plusPtr` 56) (vkPClearValues (poked :: VkRenderPassBeginInfo))+++-- ** vkCmdSetStencilCompareMask+foreign import ccall "vkCmdSetStencilCompareMask" vkCmdSetStencilCompareMask :: +  VkCommandBuffer -> VkStencilFaceFlags -> Word32 -> IO ()+++data VkImageBlit =+  VkImageBlit{ vkSrcSubresource :: VkImageSubresourceLayers +             , vkSrcOffsets :: Vec (ToPeano 2) VkOffset3D +             , vkDstSubresource :: VkImageSubresourceLayers +             , vkDstOffsets :: Vec (ToPeano 2) VkOffset3D +             }+  deriving (Eq)++instance Storable VkImageBlit where+  sizeOf ~_ = 80+  alignment ~_ = 4+  peek ptr = VkImageBlit <$> peek (ptr `plusPtr` 0)+                         <*> peek (ptr `plusPtr` 16)+                         <*> peek (ptr `plusPtr` 40)+                         <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageBlit))+                *> poke (ptr `plusPtr` 16) (vkSrcOffsets (poked :: VkImageBlit))+                *> poke (ptr `plusPtr` 40) (vkDstSubresource (poked :: VkImageBlit))+                *> poke (ptr `plusPtr` 56) (vkDstOffsets (poked :: VkImageBlit))++++data VkClearAttachment =+  VkClearAttachment{ vkAspectMask :: VkImageAspectFlags +                   , vkColorAttachment :: Word32 +                   , vkClearValue :: VkClearValue +                   }+  deriving (Eq)++instance Storable VkClearAttachment where+  sizeOf ~_ = 24+  alignment ~_ = 4+  peek ptr = VkClearAttachment <$> peek (ptr `plusPtr` 0)+                               <*> peek (ptr `plusPtr` 4)+                               <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkClearAttachment))+                *> poke (ptr `plusPtr` 4) (vkColorAttachment (poked :: VkClearAttachment))+                *> poke (ptr `plusPtr` 8) (vkClearValue (poked :: VkClearAttachment))+++-- | // Union allowing specification of color or depth and stencil values. Actual value selected is based on attachment being cleared.+data VkClearValue = VkColor VkClearColorValue +                  | VkDepthStencil VkClearDepthStencilValue +  deriving (Eq)++-- | _Note_: peek is undefined as we wouldn't know which constructor to use+instance Storable VkClearValue where+  sizeOf ~_ = 16+  alignment ~_ = 4+  peek ~_ = error "peek@VkClearValue"+  poke ptr poked = case poked of+                     VkColor e -> poke (castPtr ptr) e+                     VkDepthStencil e -> poke (castPtr ptr) e+++-- ** VkStencilFaceFlags++newtype VkStencilFaceFlagBits = VkStencilFaceFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkStencilFaceFlagBits+type VkStencilFaceFlags = VkStencilFaceFlagBits+-- | Front face+pattern VK_STENCIL_FACE_FRONT_BIT = VkStencilFaceFlagBits 0x1+-- | Back face+pattern VK_STENCIL_FACE_BACK_BIT = VkStencilFaceFlagBits 0x2+-- | Front and back faces+pattern VK_STENCIL_FRONT_AND_BACK = VkStencilFaceFlagBits 0x3++-- | // Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.+data VkClearColorValue = VkFloat (Vec (ToPeano 4) CFloat) +                       | VkInt (Vec (ToPeano 4) Int32) +                       | VkUint (Vec (ToPeano 4) Word32) +  deriving (Eq)++-- | _Note_: peek is undefined as we wouldn't know which constructor to use+instance Storable VkClearColorValue where+  sizeOf ~_ = 16+  alignment ~_ = 4+  peek ~_ = error "peek@VkClearColorValue"+  poke ptr poked = case poked of+                     VkFloat e -> poke (castPtr ptr) e+                     VkInt e -> poke (castPtr ptr) e+                     VkUint e -> poke (castPtr ptr) e+++-- ** VkSubpassContents++newtype VkSubpassContents = VkSubpassContents Int32+  deriving (Eq, Storable)++pattern VK_SUBPASS_CONTENTS_INLINE = VkSubpassContents 0++pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = VkSubpassContents 1++-- ** vkCmdCopyQueryPoolResults+foreign import ccall "vkCmdCopyQueryPoolResults" vkCmdCopyQueryPoolResults :: +  VkCommandBuffer ->+  VkQueryPool ->+    Word32 ->+      Word32 ->+        VkBuffer ->+          VkDeviceSize -> VkDeviceSize -> VkQueryResultFlags -> IO ()++-- ** vkCmdBlitImage+foreign import ccall "vkCmdBlitImage" vkCmdBlitImage :: +  VkCommandBuffer ->+  VkImage ->+    VkImageLayout ->+      VkImage ->+        VkImageLayout -> Word32 -> Ptr VkImageBlit -> VkFilter -> IO ()++-- ** vkCmdSetBlendConstants+foreign import ccall "vkCmdSetBlendConstants" vkCmdSetBlendConstants :: +  VkCommandBuffer -> Ptr CFloat -> IO ()++-- ** vkCmdClearDepthStencilImage+foreign import ccall "vkCmdClearDepthStencilImage" vkCmdClearDepthStencilImage :: +  VkCommandBuffer ->+  VkImage ->+    VkImageLayout ->+      Ptr VkClearDepthStencilValue ->+        Word32 -> Ptr VkImageSubresourceRange -> IO ()+++data VkImageResolve =+  VkImageResolve{ vkSrcSubresource :: VkImageSubresourceLayers +                , vkSrcOffset :: VkOffset3D +                , vkDstSubresource :: VkImageSubresourceLayers +                , vkDstOffset :: VkOffset3D +                , vkExtent :: VkExtent3D +                }+  deriving (Eq)++instance Storable VkImageResolve where+  sizeOf ~_ = 68+  alignment ~_ = 4+  peek ptr = VkImageResolve <$> peek (ptr `plusPtr` 0)+                            <*> peek (ptr `plusPtr` 16)+                            <*> peek (ptr `plusPtr` 28)+                            <*> peek (ptr `plusPtr` 44)+                            <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageResolve))+                *> poke (ptr `plusPtr` 16) (vkSrcOffset (poked :: VkImageResolve))+                *> poke (ptr `plusPtr` 28) (vkDstSubresource (poked :: VkImageResolve))+                *> poke (ptr `plusPtr` 44) (vkDstOffset (poked :: VkImageResolve))+                *> poke (ptr `plusPtr` 56) (vkExtent (poked :: VkImageResolve))+++-- ** vkCmdDispatch+foreign import ccall "vkCmdDispatch" vkCmdDispatch :: +  VkCommandBuffer -> Word32 -> Word32 -> Word32 -> IO ()++-- ** vkCmdSetStencilReference+foreign import ccall "vkCmdSetStencilReference" vkCmdSetStencilReference :: +  VkCommandBuffer -> VkStencilFaceFlags -> Word32 -> IO ()++-- ** vkCmdPipelineBarrier+foreign import ccall "vkCmdPipelineBarrier" vkCmdPipelineBarrier :: +  VkCommandBuffer ->+  VkPipelineStageFlags ->+    VkPipelineStageFlags ->+      VkDependencyFlags ->+        Word32 ->+          Ptr VkMemoryBarrier ->+            Word32 ->+              Ptr VkBufferMemoryBarrier ->+                Word32 -> Ptr VkImageMemoryBarrier -> IO ()++-- ** vkCmdBeginRenderPass+foreign import ccall "vkCmdBeginRenderPass" vkCmdBeginRenderPass :: +  VkCommandBuffer ->+  Ptr VkRenderPassBeginInfo -> VkSubpassContents -> IO ()++-- ** vkCmdResetEvent+foreign import ccall "vkCmdResetEvent" vkCmdResetEvent :: +  VkCommandBuffer -> VkEvent -> VkPipelineStageFlags -> IO ()+
+ src/Graphics/Vulkan/CommandPool.hs view
@@ -0,0 +1,96 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.CommandPool where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize(..)+                      )++data VkCommandPoolCreateInfo =+  VkCommandPoolCreateInfo{ vkSType :: VkStructureType +                         , vkPNext :: Ptr Void +                         , vkFlags :: VkCommandPoolCreateFlags +                         , vkQueueFamilyIndex :: Word32 +                         }+  deriving (Eq)++instance Storable VkCommandPoolCreateInfo where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkCommandPoolCreateInfo <$> peek (ptr `plusPtr` 0)+                                     <*> peek (ptr `plusPtr` 8)+                                     <*> peek (ptr `plusPtr` 16)+                                     <*> peek (ptr `plusPtr` 20)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandPoolCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandPoolCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkCommandPoolCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkQueueFamilyIndex (poked :: VkCommandPoolCreateInfo))+++-- ** vkDestroyCommandPool+foreign import ccall "vkDestroyCommandPool" vkDestroyCommandPool :: +  VkDevice -> VkCommandPool -> Ptr VkAllocationCallbacks -> IO ()++-- ** vkResetCommandPool+foreign import ccall "vkResetCommandPool" vkResetCommandPool :: +  VkDevice -> VkCommandPool -> VkCommandPoolResetFlags -> IO VkResult++-- ** VkCommandPoolCreateFlags++newtype VkCommandPoolCreateFlagBits = VkCommandPoolCreateFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkCommandPoolCreateFlagBits+type VkCommandPoolCreateFlags = VkCommandPoolCreateFlagBits+-- | Command buffers have a short lifetime+pattern VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = VkCommandPoolCreateFlagBits 0x1+-- | Command buffers may release their memory individually+pattern VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = VkCommandPoolCreateFlagBits 0x2+++-- ** vkCreateCommandPool+foreign import ccall "vkCreateCommandPool" vkCreateCommandPool :: +  VkDevice ->+  Ptr VkCommandPoolCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkCommandPool -> IO VkResult++-- ** VkCommandPoolResetFlags++newtype VkCommandPoolResetFlagBits = VkCommandPoolResetFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkCommandPoolResetFlagBits+type VkCommandPoolResetFlags = VkCommandPoolResetFlagBits+-- | Release resources owned by the pool+pattern VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = VkCommandPoolResetFlagBits 0x1+++newtype VkCommandPool = VkCommandPool Word64+  deriving (Eq, Storable)+
+ src/Graphics/Vulkan/Constants.hs view
@@ -0,0 +1,56 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Constants where+import Data.Word( Word64+                , Word32+                )+import Data.Int( Int32+               )+import Foreign.Storable( Storable(..)+                       )++pattern VK_SUBPASS_EXTERNAL = 0xffffffff :: Word32++pattern VK_UUID_SIZE = 16+type VK_UUID_SIZE = 16++pattern VK_REMAINING_MIP_LEVELS = 0xffffffff :: Word32++pattern VK_LOD_CLAMP_NONE = 1000.0++pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256+type VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256++pattern VK_ATTACHMENT_UNUSED = 0xffffffff :: Word32++pattern VK_MAX_MEMORY_TYPES = 32+type VK_MAX_MEMORY_TYPES = 32++pattern VK_WHOLE_SIZE = 0xffffffffffffffff :: Word64++pattern VK_REMAINING_ARRAY_LAYERS = 0xffffffff :: Word32++pattern VK_QUEUE_FAMILY_IGNORED = 0xffffffff :: Word32++pattern VK_MAX_MEMORY_HEAPS = 16+type VK_MAX_MEMORY_HEAPS = 16++pattern VK_FALSE = 0+type VK_FALSE = 0+-- ** VkPipelineCacheHeaderVersion++newtype VkPipelineCacheHeaderVersion = VkPipelineCacheHeaderVersion Int32+  deriving (Eq, Storable)++pattern VK_PIPELINE_CACHE_HEADER_VERSION_ONE = VkPipelineCacheHeaderVersion 1+++pattern VK_MAX_EXTENSION_NAME_SIZE = 256+type VK_MAX_EXTENSION_NAME_SIZE = 256++pattern VK_MAX_DESCRIPTION_SIZE = 256+type VK_MAX_DESCRIPTION_SIZE = 256++pattern VK_TRUE = 1+type VK_TRUE = 1
+ src/Graphics/Vulkan/Core.hs view
@@ -0,0 +1,681 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Core where+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( plusPtr+                  )+import Data.Int( Int32+               )+import Foreign.Storable( Storable(..)+                       )+import Foreign.C.Types( CFloat+                      , CFloat(..)+                      )+newtype VkDeviceSize = VkDeviceSize Word64+  deriving (Eq, Storable)++-- ** VkFormat+-- | Vulkan format definitions+newtype VkFormat = VkFormat Int32+  deriving (Eq, Storable)++pattern VK_FORMAT_UNDEFINED = VkFormat 0++pattern VK_FORMAT_R4G4_UNORM_PACK8 = VkFormat 1++pattern VK_FORMAT_R4G4B4A4_UNORM_PACK16 = VkFormat 2++pattern VK_FORMAT_B4G4R4A4_UNORM_PACK16 = VkFormat 3++pattern VK_FORMAT_R5G6B5_UNORM_PACK16 = VkFormat 4++pattern VK_FORMAT_B5G6R5_UNORM_PACK16 = VkFormat 5++pattern VK_FORMAT_R5G5B5A1_UNORM_PACK16 = VkFormat 6++pattern VK_FORMAT_B5G5R5A1_UNORM_PACK16 = VkFormat 7++pattern VK_FORMAT_A1R5G5B5_UNORM_PACK16 = VkFormat 8++pattern VK_FORMAT_R8_UNORM = VkFormat 9++pattern VK_FORMAT_R8_SNORM = VkFormat 10++pattern VK_FORMAT_R8_USCALED = VkFormat 11++pattern VK_FORMAT_R8_SSCALED = VkFormat 12++pattern VK_FORMAT_R8_UINT = VkFormat 13++pattern VK_FORMAT_R8_SINT = VkFormat 14++pattern VK_FORMAT_R8_SRGB = VkFormat 15++pattern VK_FORMAT_R8G8_UNORM = VkFormat 16++pattern VK_FORMAT_R8G8_SNORM = VkFormat 17++pattern VK_FORMAT_R8G8_USCALED = VkFormat 18++pattern VK_FORMAT_R8G8_SSCALED = VkFormat 19++pattern VK_FORMAT_R8G8_UINT = VkFormat 20++pattern VK_FORMAT_R8G8_SINT = VkFormat 21++pattern VK_FORMAT_R8G8_SRGB = VkFormat 22++pattern VK_FORMAT_R8G8B8_UNORM = VkFormat 23++pattern VK_FORMAT_R8G8B8_SNORM = VkFormat 24++pattern VK_FORMAT_R8G8B8_USCALED = VkFormat 25++pattern VK_FORMAT_R8G8B8_SSCALED = VkFormat 26++pattern VK_FORMAT_R8G8B8_UINT = VkFormat 27++pattern VK_FORMAT_R8G8B8_SINT = VkFormat 28++pattern VK_FORMAT_R8G8B8_SRGB = VkFormat 29++pattern VK_FORMAT_B8G8R8_UNORM = VkFormat 30++pattern VK_FORMAT_B8G8R8_SNORM = VkFormat 31++pattern VK_FORMAT_B8G8R8_USCALED = VkFormat 32++pattern VK_FORMAT_B8G8R8_SSCALED = VkFormat 33++pattern VK_FORMAT_B8G8R8_UINT = VkFormat 34++pattern VK_FORMAT_B8G8R8_SINT = VkFormat 35++pattern VK_FORMAT_B8G8R8_SRGB = VkFormat 36++pattern VK_FORMAT_R8G8B8A8_UNORM = VkFormat 37++pattern VK_FORMAT_R8G8B8A8_SNORM = VkFormat 38++pattern VK_FORMAT_R8G8B8A8_USCALED = VkFormat 39++pattern VK_FORMAT_R8G8B8A8_SSCALED = VkFormat 40++pattern VK_FORMAT_R8G8B8A8_UINT = VkFormat 41++pattern VK_FORMAT_R8G8B8A8_SINT = VkFormat 42++pattern VK_FORMAT_R8G8B8A8_SRGB = VkFormat 43++pattern VK_FORMAT_B8G8R8A8_UNORM = VkFormat 44++pattern VK_FORMAT_B8G8R8A8_SNORM = VkFormat 45++pattern VK_FORMAT_B8G8R8A8_USCALED = VkFormat 46++pattern VK_FORMAT_B8G8R8A8_SSCALED = VkFormat 47++pattern VK_FORMAT_B8G8R8A8_UINT = VkFormat 48++pattern VK_FORMAT_B8G8R8A8_SINT = VkFormat 49++pattern VK_FORMAT_B8G8R8A8_SRGB = VkFormat 50++pattern VK_FORMAT_A8B8G8R8_UNORM_PACK32 = VkFormat 51++pattern VK_FORMAT_A8B8G8R8_SNORM_PACK32 = VkFormat 52++pattern VK_FORMAT_A8B8G8R8_USCALED_PACK32 = VkFormat 53++pattern VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = VkFormat 54++pattern VK_FORMAT_A8B8G8R8_UINT_PACK32 = VkFormat 55++pattern VK_FORMAT_A8B8G8R8_SINT_PACK32 = VkFormat 56++pattern VK_FORMAT_A8B8G8R8_SRGB_PACK32 = VkFormat 57++pattern VK_FORMAT_A2R10G10B10_UNORM_PACK32 = VkFormat 58++pattern VK_FORMAT_A2R10G10B10_SNORM_PACK32 = VkFormat 59++pattern VK_FORMAT_A2R10G10B10_USCALED_PACK32 = VkFormat 60++pattern VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = VkFormat 61++pattern VK_FORMAT_A2R10G10B10_UINT_PACK32 = VkFormat 62++pattern VK_FORMAT_A2R10G10B10_SINT_PACK32 = VkFormat 63++pattern VK_FORMAT_A2B10G10R10_UNORM_PACK32 = VkFormat 64++pattern VK_FORMAT_A2B10G10R10_SNORM_PACK32 = VkFormat 65++pattern VK_FORMAT_A2B10G10R10_USCALED_PACK32 = VkFormat 66++pattern VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = VkFormat 67++pattern VK_FORMAT_A2B10G10R10_UINT_PACK32 = VkFormat 68++pattern VK_FORMAT_A2B10G10R10_SINT_PACK32 = VkFormat 69++pattern VK_FORMAT_R16_UNORM = VkFormat 70++pattern VK_FORMAT_R16_SNORM = VkFormat 71++pattern VK_FORMAT_R16_USCALED = VkFormat 72++pattern VK_FORMAT_R16_SSCALED = VkFormat 73++pattern VK_FORMAT_R16_UINT = VkFormat 74++pattern VK_FORMAT_R16_SINT = VkFormat 75++pattern VK_FORMAT_R16_SFLOAT = VkFormat 76++pattern VK_FORMAT_R16G16_UNORM = VkFormat 77++pattern VK_FORMAT_R16G16_SNORM = VkFormat 78++pattern VK_FORMAT_R16G16_USCALED = VkFormat 79++pattern VK_FORMAT_R16G16_SSCALED = VkFormat 80++pattern VK_FORMAT_R16G16_UINT = VkFormat 81++pattern VK_FORMAT_R16G16_SINT = VkFormat 82++pattern VK_FORMAT_R16G16_SFLOAT = VkFormat 83++pattern VK_FORMAT_R16G16B16_UNORM = VkFormat 84++pattern VK_FORMAT_R16G16B16_SNORM = VkFormat 85++pattern VK_FORMAT_R16G16B16_USCALED = VkFormat 86++pattern VK_FORMAT_R16G16B16_SSCALED = VkFormat 87++pattern VK_FORMAT_R16G16B16_UINT = VkFormat 88++pattern VK_FORMAT_R16G16B16_SINT = VkFormat 89++pattern VK_FORMAT_R16G16B16_SFLOAT = VkFormat 90++pattern VK_FORMAT_R16G16B16A16_UNORM = VkFormat 91++pattern VK_FORMAT_R16G16B16A16_SNORM = VkFormat 92++pattern VK_FORMAT_R16G16B16A16_USCALED = VkFormat 93++pattern VK_FORMAT_R16G16B16A16_SSCALED = VkFormat 94++pattern VK_FORMAT_R16G16B16A16_UINT = VkFormat 95++pattern VK_FORMAT_R16G16B16A16_SINT = VkFormat 96++pattern VK_FORMAT_R16G16B16A16_SFLOAT = VkFormat 97++pattern VK_FORMAT_R32_UINT = VkFormat 98++pattern VK_FORMAT_R32_SINT = VkFormat 99++pattern VK_FORMAT_R32_SFLOAT = VkFormat 100++pattern VK_FORMAT_R32G32_UINT = VkFormat 101++pattern VK_FORMAT_R32G32_SINT = VkFormat 102++pattern VK_FORMAT_R32G32_SFLOAT = VkFormat 103++pattern VK_FORMAT_R32G32B32_UINT = VkFormat 104++pattern VK_FORMAT_R32G32B32_SINT = VkFormat 105++pattern VK_FORMAT_R32G32B32_SFLOAT = VkFormat 106++pattern VK_FORMAT_R32G32B32A32_UINT = VkFormat 107++pattern VK_FORMAT_R32G32B32A32_SINT = VkFormat 108++pattern VK_FORMAT_R32G32B32A32_SFLOAT = VkFormat 109++pattern VK_FORMAT_R64_UINT = VkFormat 110++pattern VK_FORMAT_R64_SINT = VkFormat 111++pattern VK_FORMAT_R64_SFLOAT = VkFormat 112++pattern VK_FORMAT_R64G64_UINT = VkFormat 113++pattern VK_FORMAT_R64G64_SINT = VkFormat 114++pattern VK_FORMAT_R64G64_SFLOAT = VkFormat 115++pattern VK_FORMAT_R64G64B64_UINT = VkFormat 116++pattern VK_FORMAT_R64G64B64_SINT = VkFormat 117++pattern VK_FORMAT_R64G64B64_SFLOAT = VkFormat 118++pattern VK_FORMAT_R64G64B64A64_UINT = VkFormat 119++pattern VK_FORMAT_R64G64B64A64_SINT = VkFormat 120++pattern VK_FORMAT_R64G64B64A64_SFLOAT = VkFormat 121++pattern VK_FORMAT_B10G11R11_UFLOAT_PACK32 = VkFormat 122++pattern VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = VkFormat 123++pattern VK_FORMAT_D16_UNORM = VkFormat 124++pattern VK_FORMAT_X8_D24_UNORM_PACK32 = VkFormat 125++pattern VK_FORMAT_D32_SFLOAT = VkFormat 126++pattern VK_FORMAT_S8_UINT = VkFormat 127++pattern VK_FORMAT_D16_UNORM_S8_UINT = VkFormat 128++pattern VK_FORMAT_D24_UNORM_S8_UINT = VkFormat 129++pattern VK_FORMAT_D32_SFLOAT_S8_UINT = VkFormat 130++pattern VK_FORMAT_BC1_RGB_UNORM_BLOCK = VkFormat 131++pattern VK_FORMAT_BC1_RGB_SRGB_BLOCK = VkFormat 132++pattern VK_FORMAT_BC1_RGBA_UNORM_BLOCK = VkFormat 133++pattern VK_FORMAT_BC1_RGBA_SRGB_BLOCK = VkFormat 134++pattern VK_FORMAT_BC2_UNORM_BLOCK = VkFormat 135++pattern VK_FORMAT_BC2_SRGB_BLOCK = VkFormat 136++pattern VK_FORMAT_BC3_UNORM_BLOCK = VkFormat 137++pattern VK_FORMAT_BC3_SRGB_BLOCK = VkFormat 138++pattern VK_FORMAT_BC4_UNORM_BLOCK = VkFormat 139++pattern VK_FORMAT_BC4_SNORM_BLOCK = VkFormat 140++pattern VK_FORMAT_BC5_UNORM_BLOCK = VkFormat 141++pattern VK_FORMAT_BC5_SNORM_BLOCK = VkFormat 142++pattern VK_FORMAT_BC6H_UFLOAT_BLOCK = VkFormat 143++pattern VK_FORMAT_BC6H_SFLOAT_BLOCK = VkFormat 144++pattern VK_FORMAT_BC7_UNORM_BLOCK = VkFormat 145++pattern VK_FORMAT_BC7_SRGB_BLOCK = VkFormat 146++pattern VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = VkFormat 147++pattern VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = VkFormat 148++pattern VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = VkFormat 149++pattern VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = VkFormat 150++pattern VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = VkFormat 151++pattern VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = VkFormat 152++pattern VK_FORMAT_EAC_R11_UNORM_BLOCK = VkFormat 153++pattern VK_FORMAT_EAC_R11_SNORM_BLOCK = VkFormat 154++pattern VK_FORMAT_EAC_R11G11_UNORM_BLOCK = VkFormat 155++pattern VK_FORMAT_EAC_R11G11_SNORM_BLOCK = VkFormat 156++pattern VK_FORMAT_ASTC_4x4_UNORM_BLOCK = VkFormat 157++pattern VK_FORMAT_ASTC_4x4_SRGB_BLOCK = VkFormat 158++pattern VK_FORMAT_ASTC_5x4_UNORM_BLOCK = VkFormat 159++pattern VK_FORMAT_ASTC_5x4_SRGB_BLOCK = VkFormat 160++pattern VK_FORMAT_ASTC_5x5_UNORM_BLOCK = VkFormat 161++pattern VK_FORMAT_ASTC_5x5_SRGB_BLOCK = VkFormat 162++pattern VK_FORMAT_ASTC_6x5_UNORM_BLOCK = VkFormat 163++pattern VK_FORMAT_ASTC_6x5_SRGB_BLOCK = VkFormat 164++pattern VK_FORMAT_ASTC_6x6_UNORM_BLOCK = VkFormat 165++pattern VK_FORMAT_ASTC_6x6_SRGB_BLOCK = VkFormat 166++pattern VK_FORMAT_ASTC_8x5_UNORM_BLOCK = VkFormat 167++pattern VK_FORMAT_ASTC_8x5_SRGB_BLOCK = VkFormat 168++pattern VK_FORMAT_ASTC_8x6_UNORM_BLOCK = VkFormat 169++pattern VK_FORMAT_ASTC_8x6_SRGB_BLOCK = VkFormat 170++pattern VK_FORMAT_ASTC_8x8_UNORM_BLOCK = VkFormat 171++pattern VK_FORMAT_ASTC_8x8_SRGB_BLOCK = VkFormat 172++pattern VK_FORMAT_ASTC_10x5_UNORM_BLOCK = VkFormat 173++pattern VK_FORMAT_ASTC_10x5_SRGB_BLOCK = VkFormat 174++pattern VK_FORMAT_ASTC_10x6_UNORM_BLOCK = VkFormat 175++pattern VK_FORMAT_ASTC_10x6_SRGB_BLOCK = VkFormat 176++pattern VK_FORMAT_ASTC_10x8_UNORM_BLOCK = VkFormat 177++pattern VK_FORMAT_ASTC_10x8_SRGB_BLOCK = VkFormat 178++pattern VK_FORMAT_ASTC_10x10_UNORM_BLOCK = VkFormat 179++pattern VK_FORMAT_ASTC_10x10_SRGB_BLOCK = VkFormat 180++pattern VK_FORMAT_ASTC_12x10_UNORM_BLOCK = VkFormat 181++pattern VK_FORMAT_ASTC_12x10_SRGB_BLOCK = VkFormat 182++pattern VK_FORMAT_ASTC_12x12_UNORM_BLOCK = VkFormat 183++pattern VK_FORMAT_ASTC_12x12_SRGB_BLOCK = VkFormat 184++type VkFlags = Word32+++data VkExtent2D =+  VkExtent2D{ vkWidth :: Word32 +            , vkHeight :: Word32 +            }+  deriving (Eq)++instance Storable VkExtent2D where+  sizeOf ~_ = 8+  alignment ~_ = 4+  peek ptr = VkExtent2D <$> peek (ptr `plusPtr` 0)+                        <*> peek (ptr `plusPtr` 4)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkWidth (poked :: VkExtent2D))+                *> poke (ptr `plusPtr` 4) (vkHeight (poked :: VkExtent2D))+++-- ** VkSharingMode++newtype VkSharingMode = VkSharingMode Int32+  deriving (Eq, Storable)++pattern VK_SHARING_MODE_EXCLUSIVE = VkSharingMode 0++pattern VK_SHARING_MODE_CONCURRENT = VkSharingMode 1++-- ** VkStructureType+-- | Structure type enumerant+newtype VkStructureType = VkStructureType Int32+  deriving (Eq, Storable)++pattern VK_STRUCTURE_TYPE_APPLICATION_INFO = VkStructureType 0++pattern VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = VkStructureType 1++pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = VkStructureType 2++pattern VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = VkStructureType 3++pattern VK_STRUCTURE_TYPE_SUBMIT_INFO = VkStructureType 4++pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = VkStructureType 5++pattern VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = VkStructureType 6++pattern VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = VkStructureType 7++pattern VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = VkStructureType 8++pattern VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = VkStructureType 9++pattern VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = VkStructureType 10++pattern VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = VkStructureType 11++pattern VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = VkStructureType 12++pattern VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = VkStructureType 13++pattern VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = VkStructureType 14++pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = VkStructureType 15++pattern VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = VkStructureType 16++pattern VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = VkStructureType 17++pattern VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = VkStructureType 18++pattern VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = VkStructureType 19++pattern VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = VkStructureType 20++pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = VkStructureType 21++pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = VkStructureType 22++pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = VkStructureType 23++pattern VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = VkStructureType 24++pattern VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = VkStructureType 25++pattern VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = VkStructureType 26++pattern VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = VkStructureType 27++pattern VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = VkStructureType 28++pattern VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = VkStructureType 29++pattern VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = VkStructureType 30++pattern VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = VkStructureType 31++pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = VkStructureType 32++pattern VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = VkStructureType 33++pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = VkStructureType 34++pattern VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = VkStructureType 35++pattern VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = VkStructureType 36++pattern VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = VkStructureType 37++pattern VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = VkStructureType 38++pattern VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = VkStructureType 39++pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = VkStructureType 40++pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = VkStructureType 41++pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = VkStructureType 42++pattern VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = VkStructureType 43++pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = VkStructureType 44++pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = VkStructureType 45++pattern VK_STRUCTURE_TYPE_MEMORY_BARRIER = VkStructureType 46++pattern VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = VkStructureType 47++pattern VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = VkStructureType 48++newtype VkBool32 = VkBool32 Word32+  deriving (Eq, Storable)+++data VkOffset2D =+  VkOffset2D{ vkX :: Int32 +            , vkY :: Int32 +            }+  deriving (Eq)++instance Storable VkOffset2D where+  sizeOf ~_ = 8+  alignment ~_ = 4+  peek ptr = VkOffset2D <$> peek (ptr `plusPtr` 0)+                        <*> peek (ptr `plusPtr` 4)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkOffset2D))+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkOffset2D))++++data VkOffset3D =+  VkOffset3D{ vkX :: Int32 +            , vkY :: Int32 +            , vkZ :: Int32 +            }+  deriving (Eq)++instance Storable VkOffset3D where+  sizeOf ~_ = 12+  alignment ~_ = 4+  peek ptr = VkOffset3D <$> peek (ptr `plusPtr` 0)+                        <*> peek (ptr `plusPtr` 4)+                        <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkOffset3D))+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkOffset3D))+                *> poke (ptr `plusPtr` 8) (vkZ (poked :: VkOffset3D))++++data VkExtent3D =+  VkExtent3D{ vkWidth :: Word32 +            , vkHeight :: Word32 +            , vkDepth :: Word32 +            }+  deriving (Eq)++instance Storable VkExtent3D where+  sizeOf ~_ = 12+  alignment ~_ = 4+  peek ptr = VkExtent3D <$> peek (ptr `plusPtr` 0)+                        <*> peek (ptr `plusPtr` 4)+                        <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkWidth (poked :: VkExtent3D))+                *> poke (ptr `plusPtr` 4) (vkHeight (poked :: VkExtent3D))+                *> poke (ptr `plusPtr` 8) (vkDepth (poked :: VkExtent3D))++++data VkRect3D =+  VkRect3D{ vkOffset :: VkOffset3D +          , vkExtent :: VkExtent3D +          }+  deriving (Eq)++instance Storable VkRect3D where+  sizeOf ~_ = 24+  alignment ~_ = 4+  peek ptr = VkRect3D <$> peek (ptr `plusPtr` 0)+                      <*> peek (ptr `plusPtr` 12)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkRect3D))+                *> poke (ptr `plusPtr` 12) (vkExtent (poked :: VkRect3D))+++-- ** VkResult+-- | Error and return codes+newtype VkResult = VkResult Int32+  deriving (Eq, Storable)+-- | Command completed successfully+pattern VK_SUCCESS = VkResult 0+-- | A fence or query has not yet completed+pattern VK_NOT_READY = VkResult 1+-- | A wait operation has not completed in the specified time+pattern VK_TIMEOUT = VkResult 2+-- | An event is signaled+pattern VK_EVENT_SET = VkResult 3+-- | An event is unsignalled+pattern VK_EVENT_RESET = VkResult 4+-- | A return array was too small for the resul+pattern VK_INCOMPLETE = VkResult 5+-- | A host memory allocation has failed+pattern VK_ERROR_OUT_OF_HOST_MEMORY = VkResult (-1)+-- | A device memory allocation has failed+pattern VK_ERROR_OUT_OF_DEVICE_MEMORY = VkResult (-2)+-- | The logical device has been lost. See <<devsandqueues-lost-device>>+pattern VK_ERROR_INITIALIZATION_FAILED = VkResult (-3)+-- | Initialization of a object has failed+pattern VK_ERROR_DEVICE_LOST = VkResult (-4)+-- | Mapping of a memory object has failed+pattern VK_ERROR_MEMORY_MAP_FAILED = VkResult (-5)+-- | Layer specified does not exist+pattern VK_ERROR_LAYER_NOT_PRESENT = VkResult (-6)+-- | Extension specified does not exist+pattern VK_ERROR_EXTENSION_NOT_PRESENT = VkResult (-7)+-- | Requested feature is not available on this device+pattern VK_ERROR_FEATURE_NOT_PRESENT = VkResult (-8)+-- | Unable to find a Vulkan driver+pattern VK_ERROR_INCOMPATIBLE_DRIVER = VkResult (-9)+-- | Too many objects of the type have already been created+pattern VK_ERROR_TOO_MANY_OBJECTS = VkResult (-10)+-- | Requested format is not supported on this device+pattern VK_ERROR_FORMAT_NOT_SUPPORTED = VkResult (-11)+++data VkViewport =+  VkViewport{ vkX :: CFloat +            , vkY :: CFloat +            , vkWidth :: CFloat +            , vkHeight :: CFloat +            , vkMinDepth :: CFloat +            , vkMaxDepth :: CFloat +            }+  deriving (Eq)++instance Storable VkViewport where+  sizeOf ~_ = 24+  alignment ~_ = 4+  peek ptr = VkViewport <$> peek (ptr `plusPtr` 0)+                        <*> peek (ptr `plusPtr` 4)+                        <*> peek (ptr `plusPtr` 8)+                        <*> peek (ptr `plusPtr` 12)+                        <*> peek (ptr `plusPtr` 16)+                        <*> peek (ptr `plusPtr` 20)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkViewport))+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkViewport))+                *> poke (ptr `plusPtr` 8) (vkWidth (poked :: VkViewport))+                *> poke (ptr `plusPtr` 12) (vkHeight (poked :: VkViewport))+                *> poke (ptr `plusPtr` 16) (vkMinDepth (poked :: VkViewport))+                *> poke (ptr `plusPtr` 20) (vkMaxDepth (poked :: VkViewport))++++data VkRect2D =+  VkRect2D{ vkOffset :: VkOffset2D +          , vkExtent :: VkExtent2D +          }+  deriving (Eq)++instance Storable VkRect2D where+  sizeOf ~_ = 16+  alignment ~_ = 4+  peek ptr = VkRect2D <$> peek (ptr `plusPtr` 0)+                      <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkRect2D))+                *> poke (ptr `plusPtr` 8) (vkExtent (poked :: VkRect2D))++
+ src/Graphics/Vulkan/DescriptorSet.hs view
@@ -0,0 +1,386 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.DescriptorSet where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Graphics.Vulkan.Buffer( VkBuffer(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Int( Int32+               )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Shader( VkShaderStageFlagBits(..)+                             , VkShaderStageFlags(..)+                             )+import Graphics.Vulkan.Sampler( VkSampler(..)+                              )+import Graphics.Vulkan.Image( VkImageLayout(..)+                            )+import Graphics.Vulkan.ImageView( VkImageView(..)+                                )+import Graphics.Vulkan.BufferView( VkBufferView(..)+                                 )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkDeviceSize(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize(..)+                      )+-- ** vkUpdateDescriptorSets+foreign import ccall "vkUpdateDescriptorSets" vkUpdateDescriptorSets :: +  VkDevice ->+  Word32 ->+    Ptr VkWriteDescriptorSet ->+      Word32 -> Ptr VkCopyDescriptorSet -> IO ()++-- ** VkDescriptorPoolResetFlags+-- | Opaque flag+newtype VkDescriptorPoolResetFlags = VkDescriptorPoolResetFlags VkFlags+  deriving (Eq, Storable)++-- ** vkAllocateDescriptorSets+foreign import ccall "vkAllocateDescriptorSets" vkAllocateDescriptorSets :: +  VkDevice ->+  Ptr VkDescriptorSetAllocateInfo ->+    Ptr VkDescriptorSet -> IO VkResult+++data VkDescriptorBufferInfo =+  VkDescriptorBufferInfo{ vkBuffer :: VkBuffer +                        , vkOffset :: VkDeviceSize +                        , vkRange :: VkDeviceSize +                        }+  deriving (Eq)++instance Storable VkDescriptorBufferInfo where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkDescriptorBufferInfo <$> peek (ptr `plusPtr` 0)+                                    <*> peek (ptr `plusPtr` 8)+                                    <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBuffer (poked :: VkDescriptorBufferInfo))+                *> poke (ptr `plusPtr` 8) (vkOffset (poked :: VkDescriptorBufferInfo))+                *> poke (ptr `plusPtr` 16) (vkRange (poked :: VkDescriptorBufferInfo))++++data VkDescriptorImageInfo =+  VkDescriptorImageInfo{ vkSampler :: VkSampler +                       , vkImageView :: VkImageView +                       , vkImageLayout :: VkImageLayout +                       }+  deriving (Eq)++instance Storable VkDescriptorImageInfo where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkDescriptorImageInfo <$> peek (ptr `plusPtr` 0)+                                   <*> peek (ptr `plusPtr` 8)+                                   <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSampler (poked :: VkDescriptorImageInfo))+                *> poke (ptr `plusPtr` 8) (vkImageView (poked :: VkDescriptorImageInfo))+                *> poke (ptr `plusPtr` 16) (vkImageLayout (poked :: VkDescriptorImageInfo))++++data VkCopyDescriptorSet =+  VkCopyDescriptorSet{ vkSType :: VkStructureType +                     , vkPNext :: Ptr Void +                     , vkSrcSet :: VkDescriptorSet +                     , vkSrcBinding :: Word32 +                     , vkSrcArrayElement :: Word32 +                     , vkDstSet :: VkDescriptorSet +                     , vkDstBinding :: Word32 +                     , vkDstArrayElement :: Word32 +                     , vkDescriptorCount :: Word32 +                     }+  deriving (Eq)++instance Storable VkCopyDescriptorSet where+  sizeOf ~_ = 56+  alignment ~_ = 8+  peek ptr = VkCopyDescriptorSet <$> peek (ptr `plusPtr` 0)+                                 <*> peek (ptr `plusPtr` 8)+                                 <*> peek (ptr `plusPtr` 16)+                                 <*> peek (ptr `plusPtr` 24)+                                 <*> peek (ptr `plusPtr` 28)+                                 <*> 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 :: VkCopyDescriptorSet))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCopyDescriptorSet))+                *> poke (ptr `plusPtr` 16) (vkSrcSet (poked :: VkCopyDescriptorSet))+                *> poke (ptr `plusPtr` 24) (vkSrcBinding (poked :: VkCopyDescriptorSet))+                *> poke (ptr `plusPtr` 28) (vkSrcArrayElement (poked :: VkCopyDescriptorSet))+                *> poke (ptr `plusPtr` 32) (vkDstSet (poked :: VkCopyDescriptorSet))+                *> poke (ptr `plusPtr` 40) (vkDstBinding (poked :: VkCopyDescriptorSet))+                *> poke (ptr `plusPtr` 44) (vkDstArrayElement (poked :: VkCopyDescriptorSet))+                *> poke (ptr `plusPtr` 48) (vkDescriptorCount (poked :: VkCopyDescriptorSet))+++-- ** vkDestroyDescriptorPool+foreign import ccall "vkDestroyDescriptorPool" vkDestroyDescriptorPool :: +  VkDevice -> VkDescriptorPool -> Ptr VkAllocationCallbacks -> IO ()++-- ** vkCreateDescriptorSetLayout+foreign import ccall "vkCreateDescriptorSetLayout" vkCreateDescriptorSetLayout :: +  VkDevice ->+  Ptr VkDescriptorSetLayoutCreateInfo ->+    Ptr VkAllocationCallbacks ->+      Ptr VkDescriptorSetLayout -> IO VkResult++newtype VkDescriptorPool = VkDescriptorPool Word64+  deriving (Eq, Storable)++-- ** vkResetDescriptorPool+foreign import ccall "vkResetDescriptorPool" vkResetDescriptorPool :: +  VkDevice ->+  VkDescriptorPool -> VkDescriptorPoolResetFlags -> IO VkResult++newtype VkDescriptorSetLayout = VkDescriptorSetLayout Word64+  deriving (Eq, Storable)++-- ** vkFreeDescriptorSets+foreign import ccall "vkFreeDescriptorSets" vkFreeDescriptorSets :: +  VkDevice ->+  VkDescriptorPool -> Word32 -> Ptr VkDescriptorSet -> IO VkResult+++data VkDescriptorPoolCreateInfo =+  VkDescriptorPoolCreateInfo{ vkSType :: VkStructureType +                            , vkPNext :: Ptr Void +                            , vkFlags :: VkDescriptorPoolCreateFlags +                            , vkMaxSets :: Word32 +                            , vkPoolSizeCount :: Word32 +                            , vkPPoolSizes :: Ptr VkDescriptorPoolSize +                            }+  deriving (Eq)++instance Storable VkDescriptorPoolCreateInfo where+  sizeOf ~_ = 40+  alignment ~_ = 8+  peek ptr = VkDescriptorPoolCreateInfo <$> peek (ptr `plusPtr` 0)+                                        <*> peek (ptr `plusPtr` 8)+                                        <*> peek (ptr `plusPtr` 16)+                                        <*> peek (ptr `plusPtr` 20)+                                        <*> peek (ptr `plusPtr` 24)+                                        <*> peek (ptr `plusPtr` 32)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorPoolCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorPoolCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDescriptorPoolCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkMaxSets (poked :: VkDescriptorPoolCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPoolSizeCount (poked :: VkDescriptorPoolCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkPPoolSizes (poked :: VkDescriptorPoolCreateInfo))+++-- ** VkDescriptorSetLayoutCreateFlags+-- | Opaque flag+newtype VkDescriptorSetLayoutCreateFlags = VkDescriptorSetLayoutCreateFlags VkFlags+  deriving (Eq, Storable)+++data VkDescriptorSetLayoutCreateInfo =+  VkDescriptorSetLayoutCreateInfo{ vkSType :: VkStructureType +                                 , vkPNext :: Ptr Void +                                 , vkFlags :: VkDescriptorSetLayoutCreateFlags +                                 , vkBindingCount :: Word32 +                                 , vkPBindings :: Ptr VkDescriptorSetLayoutBinding +                                 }+  deriving (Eq)++instance Storable VkDescriptorSetLayoutCreateInfo where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek ptr = VkDescriptorSetLayoutCreateInfo <$> peek (ptr `plusPtr` 0)+                                             <*> peek (ptr `plusPtr` 8)+                                             <*> peek (ptr `plusPtr` 16)+                                             <*> peek (ptr `plusPtr` 20)+                                             <*> peek (ptr `plusPtr` 24)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorSetLayoutCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetLayoutCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDescriptorSetLayoutCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkBindingCount (poked :: VkDescriptorSetLayoutCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPBindings (poked :: VkDescriptorSetLayoutCreateInfo))+++-- ** VkDescriptorPoolCreateFlags++newtype VkDescriptorPoolCreateFlagBits = VkDescriptorPoolCreateFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkDescriptorPoolCreateFlagBits+type VkDescriptorPoolCreateFlags = VkDescriptorPoolCreateFlagBits+-- | Descriptor sets may be freed individually+pattern VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = VkDescriptorPoolCreateFlagBits 0x1++++data VkDescriptorPoolSize =+  VkDescriptorPoolSize{ vkType :: VkDescriptorType +                      , vkDescriptorCount :: Word32 +                      }+  deriving (Eq)++instance Storable VkDescriptorPoolSize where+  sizeOf ~_ = 8+  alignment ~_ = 4+  peek ptr = VkDescriptorPoolSize <$> peek (ptr `plusPtr` 0)+                                  <*> peek (ptr `plusPtr` 4)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkType (poked :: VkDescriptorPoolSize))+                *> poke (ptr `plusPtr` 4) (vkDescriptorCount (poked :: VkDescriptorPoolSize))+++newtype VkDescriptorSet = VkDescriptorSet Word64+  deriving (Eq, Storable)+++data VkWriteDescriptorSet =+  VkWriteDescriptorSet{ vkSType :: VkStructureType +                      , vkPNext :: Ptr Void +                      , vkDstSet :: VkDescriptorSet +                      , vkDstBinding :: Word32 +                      , vkDstArrayElement :: Word32 +                      , vkDescriptorCount :: Word32 +                      , vkDescriptorType :: VkDescriptorType +                      , vkPImageInfo :: Ptr VkDescriptorImageInfo +                      , vkPBufferInfo :: Ptr VkDescriptorBufferInfo +                      , vkPTexelBufferView :: Ptr VkBufferView +                      }+  deriving (Eq)++instance Storable VkWriteDescriptorSet where+  sizeOf ~_ = 64+  alignment ~_ = 8+  peek ptr = VkWriteDescriptorSet <$> peek (ptr `plusPtr` 0)+                                  <*> peek (ptr `plusPtr` 8)+                                  <*> peek (ptr `plusPtr` 16)+                                  <*> peek (ptr `plusPtr` 24)+                                  <*> peek (ptr `plusPtr` 28)+                                  <*> peek (ptr `plusPtr` 32)+                                  <*> peek (ptr `plusPtr` 36)+                                  <*> peek (ptr `plusPtr` 40)+                                  <*> peek (ptr `plusPtr` 48)+                                  <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkWriteDescriptorSet))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkWriteDescriptorSet))+                *> poke (ptr `plusPtr` 16) (vkDstSet (poked :: VkWriteDescriptorSet))+                *> poke (ptr `plusPtr` 24) (vkDstBinding (poked :: VkWriteDescriptorSet))+                *> poke (ptr `plusPtr` 28) (vkDstArrayElement (poked :: VkWriteDescriptorSet))+                *> poke (ptr `plusPtr` 32) (vkDescriptorCount (poked :: VkWriteDescriptorSet))+                *> poke (ptr `plusPtr` 36) (vkDescriptorType (poked :: VkWriteDescriptorSet))+                *> poke (ptr `plusPtr` 40) (vkPImageInfo (poked :: VkWriteDescriptorSet))+                *> poke (ptr `plusPtr` 48) (vkPBufferInfo (poked :: VkWriteDescriptorSet))+                *> poke (ptr `plusPtr` 56) (vkPTexelBufferView (poked :: VkWriteDescriptorSet))+++-- ** vkCreateDescriptorPool+foreign import ccall "vkCreateDescriptorPool" vkCreateDescriptorPool :: +  VkDevice ->+  Ptr VkDescriptorPoolCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkDescriptorPool -> IO VkResult++-- ** vkDestroyDescriptorSetLayout+foreign import ccall "vkDestroyDescriptorSetLayout" vkDestroyDescriptorSetLayout :: +  VkDevice ->+  VkDescriptorSetLayout -> Ptr VkAllocationCallbacks -> IO ()+++data VkDescriptorSetLayoutBinding =+  VkDescriptorSetLayoutBinding{ vkBinding :: Word32 +                              , vkDescriptorType :: VkDescriptorType +                              , vkDescriptorCount :: Word32 +                              , vkStageFlags :: VkShaderStageFlags +                              , vkPImmutableSamplers :: Ptr VkSampler +                              }+  deriving (Eq)++instance Storable VkDescriptorSetLayoutBinding where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkDescriptorSetLayoutBinding <$> peek (ptr `plusPtr` 0)+                                          <*> peek (ptr `plusPtr` 4)+                                          <*> peek (ptr `plusPtr` 8)+                                          <*> peek (ptr `plusPtr` 12)+                                          <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBinding (poked :: VkDescriptorSetLayoutBinding))+                *> poke (ptr `plusPtr` 4) (vkDescriptorType (poked :: VkDescriptorSetLayoutBinding))+                *> poke (ptr `plusPtr` 8) (vkDescriptorCount (poked :: VkDescriptorSetLayoutBinding))+                *> poke (ptr `plusPtr` 12) (vkStageFlags (poked :: VkDescriptorSetLayoutBinding))+                *> poke (ptr `plusPtr` 16) (vkPImmutableSamplers (poked :: VkDescriptorSetLayoutBinding))+++-- ** VkDescriptorType++newtype VkDescriptorType = VkDescriptorType Int32+  deriving (Eq, Storable)++pattern VK_DESCRIPTOR_TYPE_SAMPLER = VkDescriptorType 0++pattern VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = VkDescriptorType 1++pattern VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = VkDescriptorType 2++pattern VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = VkDescriptorType 3++pattern VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = VkDescriptorType 4++pattern VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = VkDescriptorType 5++pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = VkDescriptorType 6++pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = VkDescriptorType 7++pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = VkDescriptorType 8++pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = VkDescriptorType 9++pattern VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = VkDescriptorType 10+++data VkDescriptorSetAllocateInfo =+  VkDescriptorSetAllocateInfo{ vkSType :: VkStructureType +                             , vkPNext :: Ptr Void +                             , vkDescriptorPool :: VkDescriptorPool +                             , vkDescriptorSetCount :: Word32 +                             , vkPSetLayouts :: Ptr VkDescriptorSetLayout +                             }+  deriving (Eq)++instance Storable VkDescriptorSetAllocateInfo where+  sizeOf ~_ = 40+  alignment ~_ = 8+  peek ptr = VkDescriptorSetAllocateInfo <$> peek (ptr `plusPtr` 0)+                                         <*> peek (ptr `plusPtr` 8)+                                         <*> peek (ptr `plusPtr` 16)+                                         <*> peek (ptr `plusPtr` 24)+                                         <*> peek (ptr `plusPtr` 32)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorSetAllocateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetAllocateInfo))+                *> poke (ptr `plusPtr` 16) (vkDescriptorPool (poked :: VkDescriptorSetAllocateInfo))+                *> poke (ptr `plusPtr` 24) (vkDescriptorSetCount (poked :: VkDescriptorSetAllocateInfo))+                *> poke (ptr `plusPtr` 32) (vkPSetLayouts (poked :: VkDescriptorSetAllocateInfo))++
+ src/Graphics/Vulkan/Device.hs view
@@ -0,0 +1,301 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Device where+import Data.Word( Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkBool32(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CFloat+                      , CFloat(..)+                      , CChar+                      , CSize(..)+                      )+-- ** vkCreateDevice+foreign import ccall "vkCreateDevice" vkCreateDevice :: +  VkPhysicalDevice ->+  Ptr VkDeviceCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkDevice -> IO VkResult+++data VkPhysicalDeviceFeatures =+  VkPhysicalDeviceFeatures{ vkRobustBufferAccess :: VkBool32 +                          , vkFullDrawIndexUint :: VkBool32 +                          , vkImageCubeArray :: VkBool32 +                          , vkIndependentBlend :: VkBool32 +                          , vkGeometryShader :: VkBool32 +                          , vkTessellationShader :: VkBool32 +                          , vkSampleRateShading :: VkBool32 +                          , vkDualSrcBlend :: VkBool32 +                          , vkLogicOp :: VkBool32 +                          , vkMultiDrawIndirect :: VkBool32 +                          , vkDrawIndirectFirstInstance :: VkBool32 +                          , vkDepthClamp :: VkBool32 +                          , vkDepthBiasClamp :: VkBool32 +                          , vkFillModeNonSolid :: VkBool32 +                          , vkDepthBounds :: VkBool32 +                          , vkWideLines :: VkBool32 +                          , vkLargePoints :: VkBool32 +                          , vkAlphaToOne :: VkBool32 +                          , vkMultiViewport :: VkBool32 +                          , vkSamplerAnisotropy :: VkBool32 +                          , vkTextureCompressionETC :: VkBool32 +                          , vkTextureCompressionASTC_LDR :: VkBool32 +                          , vkTextureCompressionBC :: VkBool32 +                          , vkOcclusionQueryPrecise :: VkBool32 +                          , vkPipelineStatisticsQuery :: VkBool32 +                          , vkVertexPipelineStoresAndAtomics :: VkBool32 +                          , vkFragmentStoresAndAtomics :: VkBool32 +                          , vkShaderTessellationAndGeometryPointSize :: VkBool32 +                          , vkShaderImageGatherExtended :: VkBool32 +                          , vkShaderStorageImageExtendedFormats :: VkBool32 +                          , vkShaderStorageImageMultisample :: VkBool32 +                          , vkShaderStorageImageReadWithoutFormat :: VkBool32 +                          , vkShaderStorageImageWriteWithoutFormat :: VkBool32 +                          , vkShaderUniformBufferArrayDynamicIndexing :: VkBool32 +                          , vkShaderSampledImageArrayDynamicIndexing :: VkBool32 +                          , vkShaderStorageBufferArrayDynamicIndexing :: VkBool32 +                          , vkShaderStorageImageArrayDynamicIndexing :: VkBool32 +                          , vkShaderClipDistance :: VkBool32 +                          , vkShaderCullDistance :: VkBool32 +                          , vkShaderFloat :: VkBool32 +                          , vkShaderInt :: VkBool32 +                          , vkShaderInt :: VkBool32 +                          , vkShaderResourceResidency :: VkBool32 +                          , vkShaderResourceMinLod :: VkBool32 +                          , vkSparseBinding :: VkBool32 +                          , vkSparseResidencyBuffer :: VkBool32 +                          , vkSparseResidencyImage :: VkBool32 +                          , vkSparseResidencyImage :: VkBool32 +                          , vkSparseResidency :: VkBool32 +                          , vkSparseResidency :: VkBool32 +                          , vkSparseResidency :: VkBool32 +                          , vkSparseResidency :: VkBool32 +                          , vkSparseResidencyAliased :: VkBool32 +                          , vkVariableMultisampleRate :: VkBool32 +                          , vkInheritedQueries :: VkBool32 +                          }+  deriving (Eq)++instance Storable VkPhysicalDeviceFeatures where+  sizeOf ~_ = 220+  alignment ~_ = 4+  peek ptr = VkPhysicalDeviceFeatures <$> peek (ptr `plusPtr` 0)+                                      <*> peek (ptr `plusPtr` 4)+                                      <*> peek (ptr `plusPtr` 8)+                                      <*> peek (ptr `plusPtr` 12)+                                      <*> peek (ptr `plusPtr` 16)+                                      <*> peek (ptr `plusPtr` 20)+                                      <*> peek (ptr `plusPtr` 24)+                                      <*> peek (ptr `plusPtr` 28)+                                      <*> peek (ptr `plusPtr` 32)+                                      <*> peek (ptr `plusPtr` 36)+                                      <*> peek (ptr `plusPtr` 40)+                                      <*> peek (ptr `plusPtr` 44)+                                      <*> peek (ptr `plusPtr` 48)+                                      <*> peek (ptr `plusPtr` 52)+                                      <*> peek (ptr `plusPtr` 56)+                                      <*> peek (ptr `plusPtr` 60)+                                      <*> peek (ptr `plusPtr` 64)+                                      <*> peek (ptr `plusPtr` 68)+                                      <*> peek (ptr `plusPtr` 72)+                                      <*> peek (ptr `plusPtr` 76)+                                      <*> peek (ptr `plusPtr` 80)+                                      <*> peek (ptr `plusPtr` 84)+                                      <*> peek (ptr `plusPtr` 88)+                                      <*> peek (ptr `plusPtr` 92)+                                      <*> peek (ptr `plusPtr` 96)+                                      <*> peek (ptr `plusPtr` 100)+                                      <*> peek (ptr `plusPtr` 104)+                                      <*> peek (ptr `plusPtr` 108)+                                      <*> peek (ptr `plusPtr` 112)+                                      <*> peek (ptr `plusPtr` 116)+                                      <*> peek (ptr `plusPtr` 120)+                                      <*> peek (ptr `plusPtr` 124)+                                      <*> peek (ptr `plusPtr` 128)+                                      <*> peek (ptr `plusPtr` 132)+                                      <*> peek (ptr `plusPtr` 136)+                                      <*> peek (ptr `plusPtr` 140)+                                      <*> peek (ptr `plusPtr` 144)+                                      <*> peek (ptr `plusPtr` 148)+                                      <*> peek (ptr `plusPtr` 152)+                                      <*> peek (ptr `plusPtr` 156)+                                      <*> peek (ptr `plusPtr` 160)+                                      <*> peek (ptr `plusPtr` 164)+                                      <*> peek (ptr `plusPtr` 168)+                                      <*> peek (ptr `plusPtr` 172)+                                      <*> peek (ptr `plusPtr` 176)+                                      <*> peek (ptr `plusPtr` 180)+                                      <*> peek (ptr `plusPtr` 184)+                                      <*> peek (ptr `plusPtr` 188)+                                      <*> peek (ptr `plusPtr` 192)+                                      <*> peek (ptr `plusPtr` 196)+                                      <*> peek (ptr `plusPtr` 200)+                                      <*> peek (ptr `plusPtr` 204)+                                      <*> peek (ptr `plusPtr` 208)+                                      <*> peek (ptr `plusPtr` 212)+                                      <*> peek (ptr `plusPtr` 216)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkRobustBufferAccess (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 4) (vkFullDrawIndexUint (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 8) (vkImageCubeArray (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 12) (vkIndependentBlend (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 16) (vkGeometryShader (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 20) (vkTessellationShader (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 24) (vkSampleRateShading (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 28) (vkDualSrcBlend (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 32) (vkLogicOp (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 36) (vkMultiDrawIndirect (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 40) (vkDrawIndirectFirstInstance (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 44) (vkDepthClamp (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 48) (vkDepthBiasClamp (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 52) (vkFillModeNonSolid (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 56) (vkDepthBounds (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 60) (vkWideLines (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 64) (vkLargePoints (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 68) (vkAlphaToOne (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 72) (vkMultiViewport (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 76) (vkSamplerAnisotropy (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 80) (vkTextureCompressionETC (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 84) (vkTextureCompressionASTC_LDR (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 88) (vkTextureCompressionBC (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 92) (vkOcclusionQueryPrecise (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 96) (vkPipelineStatisticsQuery (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 100) (vkVertexPipelineStoresAndAtomics (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 104) (vkFragmentStoresAndAtomics (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 108) (vkShaderTessellationAndGeometryPointSize (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 112) (vkShaderImageGatherExtended (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 116) (vkShaderStorageImageExtendedFormats (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 120) (vkShaderStorageImageMultisample (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 124) (vkShaderStorageImageReadWithoutFormat (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 128) (vkShaderStorageImageWriteWithoutFormat (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 132) (vkShaderUniformBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 136) (vkShaderSampledImageArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 140) (vkShaderStorageBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 144) (vkShaderStorageImageArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 148) (vkShaderClipDistance (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 152) (vkShaderCullDistance (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 156) (vkShaderFloat (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 160) (vkShaderInt (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 164) (vkShaderInt (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 168) (vkShaderResourceResidency (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 172) (vkShaderResourceMinLod (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 176) (vkSparseBinding (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 180) (vkSparseResidencyBuffer (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 184) (vkSparseResidencyImage (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 188) (vkSparseResidencyImage (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 192) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 196) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 200) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 204) (vkSparseResidency (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 208) (vkSparseResidencyAliased (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 212) (vkVariableMultisampleRate (poked :: VkPhysicalDeviceFeatures))+                *> poke (ptr `plusPtr` 216) (vkInheritedQueries (poked :: VkPhysicalDeviceFeatures))+++-- ** VkDeviceCreateFlags+-- | Opaque flag+newtype VkDeviceCreateFlags = VkDeviceCreateFlags VkFlags+  deriving (Eq, Storable)+++data VkDeviceQueueCreateInfo =+  VkDeviceQueueCreateInfo{ vkSType :: VkStructureType +                         , vkPNext :: Ptr Void +                         , vkFlags :: VkDeviceQueueCreateFlags +                         , vkQueueFamilyIndex :: Word32 +                         , vkQueueCount :: Word32 +                         , vkPQueuePriorities :: Ptr CFloat +                         }+  deriving (Eq)++instance Storable VkDeviceQueueCreateInfo where+  sizeOf ~_ = 40+  alignment ~_ = 8+  peek ptr = VkDeviceQueueCreateInfo <$> peek (ptr `plusPtr` 0)+                                     <*> peek (ptr `plusPtr` 8)+                                     <*> peek (ptr `plusPtr` 16)+                                     <*> peek (ptr `plusPtr` 20)+                                     <*> peek (ptr `plusPtr` 24)+                                     <*> peek (ptr `plusPtr` 32)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceQueueCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceQueueCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceQueueCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkQueueFamilyIndex (poked :: VkDeviceQueueCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkQueueCount (poked :: VkDeviceQueueCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkPQueuePriorities (poked :: VkDeviceQueueCreateInfo))+++-- ** VkDeviceQueueCreateFlags+-- | Opaque flag+newtype VkDeviceQueueCreateFlags = VkDeviceQueueCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** vkDestroyDevice+foreign import ccall "vkDestroyDevice" vkDestroyDevice :: +  VkDevice -> Ptr VkAllocationCallbacks -> IO ()++data VkPhysicalDevice_T+type VkPhysicalDevice = Ptr VkPhysicalDevice_T++data VkDevice_T+type VkDevice = Ptr VkDevice_T+++data VkDeviceCreateInfo =+  VkDeviceCreateInfo{ vkSType :: VkStructureType +                    , vkPNext :: Ptr Void +                    , vkFlags :: VkDeviceCreateFlags +                    , vkQueueCreateInfoCount :: Word32 +                    , vkPQueueCreateInfos :: Ptr VkDeviceQueueCreateInfo +                    , vkEnabledLayerCount :: Word32 +                    , vkPpEnabledLayerNames :: Ptr (Ptr CChar) +                    , vkEnabledExtensionCount :: Word32 +                    , vkPpEnabledExtensionNames :: Ptr (Ptr CChar) +                    , vkPEnabledFeatures :: Ptr VkPhysicalDeviceFeatures +                    }+  deriving (Eq)++instance Storable VkDeviceCreateInfo where+  sizeOf ~_ = 72+  alignment ~_ = 8+  peek ptr = VkDeviceCreateInfo <$> peek (ptr `plusPtr` 0)+                                <*> peek (ptr `plusPtr` 8)+                                <*> peek (ptr `plusPtr` 16)+                                <*> peek (ptr `plusPtr` 20)+                                <*> peek (ptr `plusPtr` 24)+                                <*> peek (ptr `plusPtr` 32)+                                <*> peek (ptr `plusPtr` 40)+                                <*> peek (ptr `plusPtr` 48)+                                <*> peek (ptr `plusPtr` 56)+                                <*> peek (ptr `plusPtr` 64)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkQueueCreateInfoCount (poked :: VkDeviceCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPQueueCreateInfos (poked :: VkDeviceCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkDeviceCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkPpEnabledLayerNames (poked :: VkDeviceCreateInfo))+                *> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkDeviceCreateInfo))+                *> poke (ptr `plusPtr` 56) (vkPpEnabledExtensionNames (poked :: VkDeviceCreateInfo))+                *> poke (ptr `plusPtr` 64) (vkPEnabledFeatures (poked :: VkDeviceCreateInfo))++
+ src/Graphics/Vulkan/Device.hs-boot view
@@ -0,0 +1,7 @@++module Graphics.Vulkan.Device where+import Foreign.Ptr( Ptr+                  )+data VkDevice_T+type VkDevice = Ptr VkDevice_T+
+ src/Graphics/Vulkan/DeviceInitialization.hs view
@@ -0,0 +1,798 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.DeviceInitialization where+import Graphics.Vulkan.Device( VkPhysicalDeviceFeatures(..)+                             , VkPhysicalDevice(..)+                             , VkDevice(..)+                             )+import Data.Word( Word8+                , Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , FunPtr+                  , plusPtr+                  )+import Data.Int( Int32+               )+import Data.Vector.Fixed.Cont( ToPeano+                             )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Graphics.Vulkan.Constants( VK_MAX_PHYSICAL_DEVICE_NAME_SIZE+                                , VK_MAX_MEMORY_HEAPS+                                , VK_UUID_SIZE+                                , VK_MAX_MEMORY_TYPES+                                )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)+                              , VkSampleCountFlags(..)+                              )+import Graphics.Vulkan.Image( VkImageUsageFlags(..)+                            , VkImageType(..)+                            , VkImageUsageFlagBits(..)+                            , VkImageCreateFlags(..)+                            , VkImageTiling(..)+                            , VkImageCreateFlagBits(..)+                            )+import Data.Vector.Fixed.Storable( Vec+                                 )+import Graphics.Vulkan.Core( VkExtent3D(..)+                           , VkResult(..)+                           , VkDeviceSize(..)+                           , VkBool32(..)+                           , VkFlags(..)+                           , VkFormat(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize+                      , CFloat+                      , CFloat(..)+                      , CChar+                      , CSize(..)+                      )+-- ** VkPhysicalDeviceType++newtype VkPhysicalDeviceType = VkPhysicalDeviceType Int32+  deriving (Eq, Storable)++pattern VK_PHYSICAL_DEVICE_TYPE_OTHER = VkPhysicalDeviceType 0++pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = VkPhysicalDeviceType 1++pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = VkPhysicalDeviceType 2++pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = VkPhysicalDeviceType 3++pattern VK_PHYSICAL_DEVICE_TYPE_CPU = VkPhysicalDeviceType 4+++data VkInstanceCreateInfo =+  VkInstanceCreateInfo{ vkSType :: VkStructureType +                      , vkPNext :: Ptr Void +                      , vkFlags :: VkInstanceCreateFlags +                      , vkPApplicationInfo :: Ptr VkApplicationInfo +                      , vkEnabledLayerCount :: Word32 +                      , vkPpEnabledLayerNames :: Ptr (Ptr CChar) +                      , vkEnabledExtensionCount :: Word32 +                      , vkPpEnabledExtensionNames :: Ptr (Ptr CChar) +                      }+  deriving (Eq)++instance Storable VkInstanceCreateInfo where+  sizeOf ~_ = 64+  alignment ~_ = 8+  peek ptr = VkInstanceCreateInfo <$> 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` 48)+                                  <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkInstanceCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkInstanceCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkInstanceCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPApplicationInfo (poked :: VkInstanceCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkInstanceCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkPpEnabledLayerNames (poked :: VkInstanceCreateInfo))+                *> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkInstanceCreateInfo))+                *> poke (ptr `plusPtr` 56) (vkPpEnabledExtensionNames (poked :: VkInstanceCreateInfo))+++-- ** vkGetPhysicalDeviceImageFormatProperties+foreign import ccall "vkGetPhysicalDeviceImageFormatProperties" vkGetPhysicalDeviceImageFormatProperties :: +  VkPhysicalDevice ->+  VkFormat ->+    VkImageType ->+      VkImageTiling ->+        VkImageUsageFlags ->+          VkImageCreateFlags -> Ptr VkImageFormatProperties -> IO VkResult++type PFN_vkVoidFunction = FunPtr (IO ())+++data VkApplicationInfo =+  VkApplicationInfo{ vkSType :: VkStructureType +                   , vkPNext :: Ptr Void +                   , vkPApplicationName :: Ptr CChar +                   , vkApplicationVersion :: Word32 +                   , vkPEngineName :: Ptr CChar +                   , vkEngineVersion :: Word32 +                   , vkApiVersion :: Word32 +                   }+  deriving (Eq)++instance Storable VkApplicationInfo where+  sizeOf ~_ = 48+  alignment ~_ = 8+  peek ptr = VkApplicationInfo <$> 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)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkApplicationInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkApplicationInfo))+                *> poke (ptr `plusPtr` 16) (vkPApplicationName (poked :: VkApplicationInfo))+                *> poke (ptr `plusPtr` 24) (vkApplicationVersion (poked :: VkApplicationInfo))+                *> poke (ptr `plusPtr` 32) (vkPEngineName (poked :: VkApplicationInfo))+                *> poke (ptr `plusPtr` 40) (vkEngineVersion (poked :: VkApplicationInfo))+                *> poke (ptr `plusPtr` 44) (vkApiVersion (poked :: VkApplicationInfo))++++data VkPhysicalDeviceLimits =+  VkPhysicalDeviceLimits{ vkMaxImageDimension :: Word32 +                        , vkMaxImageDimension :: Word32 +                        , vkMaxImageDimension :: Word32 +                        , vkMaxImageDimensionCube :: Word32 +                        , vkMaxImageArrayLayers :: Word32 +                        , vkMaxTexelBufferElements :: Word32 +                        , vkMaxUniformBufferRange :: Word32 +                        , vkMaxStorageBufferRange :: Word32 +                        , vkMaxPushConstantsSize :: Word32 +                        , vkMaxMemoryAllocationCount :: Word32 +                        , vkMaxSamplerAllocationCount :: Word32 +                        , vkBufferImageGranularity :: VkDeviceSize +                        , vkSparseAddressSpaceSize :: VkDeviceSize +                        , vkMaxBoundDescriptorSets :: Word32 +                        , vkMaxPerStageDescriptorSamplers :: Word32 +                        , vkMaxPerStageDescriptorUniformBuffers :: Word32 +                        , vkMaxPerStageDescriptorStorageBuffers :: Word32 +                        , vkMaxPerStageDescriptorSampledImages :: Word32 +                        , vkMaxPerStageDescriptorStorageImages :: Word32 +                        , vkMaxPerStageDescriptorInputAttachments :: Word32 +                        , vkMaxPerStageResources :: Word32 +                        , vkMaxDescriptorSetSamplers :: Word32 +                        , vkMaxDescriptorSetUniformBuffers :: Word32 +                        , vkMaxDescriptorSetUniformBuffersDynamic :: Word32 +                        , vkMaxDescriptorSetStorageBuffers :: Word32 +                        , vkMaxDescriptorSetStorageBuffersDynamic :: Word32 +                        , vkMaxDescriptorSetSampledImages :: Word32 +                        , vkMaxDescriptorSetStorageImages :: Word32 +                        , vkMaxDescriptorSetInputAttachments :: Word32 +                        , vkMaxVertexInputAttributes :: Word32 +                        , vkMaxVertexInputBindings :: Word32 +                        , vkMaxVertexInputAttributeOffset :: Word32 +                        , vkMaxVertexInputBindingStride :: Word32 +                        , vkMaxVertexOutputComponents :: Word32 +                        , vkMaxTessellationGenerationLevel :: Word32 +                        , vkMaxTessellationPatchSize :: Word32 +                        , vkMaxTessellationControlPerVertexInputComponents :: Word32 +                        , vkMaxTessellationControlPerVertexOutputComponents :: Word32 +                        , vkMaxTessellationControlPerPatchOutputComponents :: Word32 +                        , vkMaxTessellationControlTotalOutputComponents :: Word32 +                        , vkMaxTessellationEvaluationInputComponents :: Word32 +                        , vkMaxTessellationEvaluationOutputComponents :: Word32 +                        , vkMaxGeometryShaderInvocations :: Word32 +                        , vkMaxGeometryInputComponents :: Word32 +                        , vkMaxGeometryOutputComponents :: Word32 +                        , vkMaxGeometryOutputVertices :: Word32 +                        , vkMaxGeometryTotalOutputComponents :: Word32 +                        , vkMaxFragmentInputComponents :: Word32 +                        , vkMaxFragmentOutputAttachments :: Word32 +                        , vkMaxFragmentDualSrcAttachments :: Word32 +                        , vkMaxFragmentCombinedOutputResources :: Word32 +                        , vkMaxComputeSharedMemorySize :: Word32 +                        , vkMaxComputeWorkGroupCount :: Vec (ToPeano 3) Word32 +                        , vkMaxComputeWorkGroupInvocations :: Word32 +                        , vkMaxComputeWorkGroupSize :: Vec (ToPeano 3) Word32 +                        , vkSubPixelPrecisionBits :: Word32 +                        , vkSubTexelPrecisionBits :: Word32 +                        , vkMipmapPrecisionBits :: Word32 +                        , vkMaxDrawIndexedIndexValue :: Word32 +                        , vkMaxDrawIndirectCount :: Word32 +                        , vkMaxSamplerLodBias :: CFloat +                        , vkMaxSamplerAnisotropy :: CFloat +                        , vkMaxViewports :: Word32 +                        , vkMaxViewportDimensions :: Vec (ToPeano 2) Word32 +                        , vkViewportBoundsRange :: Vec (ToPeano 2) CFloat +                        , vkViewportSubPixelBits :: Word32 +                        , vkMinMemoryMapAlignment :: CSize +                        , vkMinTexelBufferOffsetAlignment :: VkDeviceSize +                        , vkMinUniformBufferOffsetAlignment :: VkDeviceSize +                        , vkMinStorageBufferOffsetAlignment :: VkDeviceSize +                        , vkMinTexelOffset :: Int32 +                        , vkMaxTexelOffset :: Word32 +                        , vkMinTexelGatherOffset :: Int32 +                        , vkMaxTexelGatherOffset :: Word32 +                        , vkMinInterpolationOffset :: CFloat +                        , vkMaxInterpolationOffset :: CFloat +                        , vkSubPixelInterpolationOffsetBits :: Word32 +                        , vkMaxFramebufferWidth :: Word32 +                        , vkMaxFramebufferHeight :: Word32 +                        , vkMaxFramebufferLayers :: Word32 +                        , vkFramebufferColorSampleCounts :: VkSampleCountFlags +                        , vkFramebufferDepthSampleCounts :: VkSampleCountFlags +                        , vkFramebufferStencilSampleCounts :: VkSampleCountFlags +                        , vkFramebufferNoAttachmentsSampleCounts :: VkSampleCountFlags +                        , vkMaxColorAttachments :: Word32 +                        , vkSampledImageColorSampleCounts :: VkSampleCountFlags +                        , vkSampledImageIntegerSampleCounts :: VkSampleCountFlags +                        , vkSampledImageDepthSampleCounts :: VkSampleCountFlags +                        , vkSampledImageStencilSampleCounts :: VkSampleCountFlags +                        , vkStorageImageSampleCounts :: VkSampleCountFlags +                        , vkMaxSampleMaskWords :: Word32 +                        , vkTimestampComputeAndGraphics :: VkBool32 +                        , vkTimestampPeriod :: CFloat +                        , vkMaxClipDistances :: Word32 +                        , vkMaxCullDistances :: Word32 +                        , vkMaxCombinedClipAndCullDistances :: Word32 +                        , vkDiscreteQueuePriorities :: Word32 +                        , vkPointSizeRange :: Vec (ToPeano 2) CFloat +                        , vkLineWidthRange :: Vec (ToPeano 2) CFloat +                        , vkPointSizeGranularity :: CFloat +                        , vkLineWidthGranularity :: CFloat +                        , vkStrictLines :: VkBool32 +                        , vkStandardSampleLocations :: VkBool32 +                        , vkOptimalBufferCopyOffsetAlignment :: VkDeviceSize +                        , vkOptimalBufferCopyRowPitchAlignment :: VkDeviceSize +                        , vkNonCoherentAtomSize :: VkDeviceSize +                        }+  deriving (Eq)++instance Storable VkPhysicalDeviceLimits where+  sizeOf ~_ = 504+  alignment ~_ = 8+  peek ptr = VkPhysicalDeviceLimits <$> peek (ptr `plusPtr` 0)+                                    <*> peek (ptr `plusPtr` 4)+                                    <*> peek (ptr `plusPtr` 8)+                                    <*> peek (ptr `plusPtr` 12)+                                    <*> peek (ptr `plusPtr` 16)+                                    <*> peek (ptr `plusPtr` 20)+                                    <*> peek (ptr `plusPtr` 24)+                                    <*> peek (ptr `plusPtr` 28)+                                    <*> peek (ptr `plusPtr` 32)+                                    <*> peek (ptr `plusPtr` 36)+                                    <*> peek (ptr `plusPtr` 40)+                                    <*> peek (ptr `plusPtr` 48)+                                    <*> peek (ptr `plusPtr` 56)+                                    <*> peek (ptr `plusPtr` 64)+                                    <*> peek (ptr `plusPtr` 68)+                                    <*> peek (ptr `plusPtr` 72)+                                    <*> peek (ptr `plusPtr` 76)+                                    <*> peek (ptr `plusPtr` 80)+                                    <*> peek (ptr `plusPtr` 84)+                                    <*> peek (ptr `plusPtr` 88)+                                    <*> peek (ptr `plusPtr` 92)+                                    <*> peek (ptr `plusPtr` 96)+                                    <*> peek (ptr `plusPtr` 100)+                                    <*> peek (ptr `plusPtr` 104)+                                    <*> peek (ptr `plusPtr` 108)+                                    <*> peek (ptr `plusPtr` 112)+                                    <*> peek (ptr `plusPtr` 116)+                                    <*> peek (ptr `plusPtr` 120)+                                    <*> peek (ptr `plusPtr` 124)+                                    <*> peek (ptr `plusPtr` 128)+                                    <*> peek (ptr `plusPtr` 132)+                                    <*> peek (ptr `plusPtr` 136)+                                    <*> peek (ptr `plusPtr` 140)+                                    <*> peek (ptr `plusPtr` 144)+                                    <*> peek (ptr `plusPtr` 148)+                                    <*> peek (ptr `plusPtr` 152)+                                    <*> peek (ptr `plusPtr` 156)+                                    <*> peek (ptr `plusPtr` 160)+                                    <*> peek (ptr `plusPtr` 164)+                                    <*> peek (ptr `plusPtr` 168)+                                    <*> peek (ptr `plusPtr` 172)+                                    <*> peek (ptr `plusPtr` 176)+                                    <*> peek (ptr `plusPtr` 180)+                                    <*> peek (ptr `plusPtr` 184)+                                    <*> peek (ptr `plusPtr` 188)+                                    <*> peek (ptr `plusPtr` 192)+                                    <*> peek (ptr `plusPtr` 196)+                                    <*> peek (ptr `plusPtr` 200)+                                    <*> peek (ptr `plusPtr` 204)+                                    <*> peek (ptr `plusPtr` 208)+                                    <*> peek (ptr `plusPtr` 212)+                                    <*> peek (ptr `plusPtr` 216)+                                    <*> peek (ptr `plusPtr` 220)+                                    <*> peek (ptr `plusPtr` 232)+                                    <*> peek (ptr `plusPtr` 236)+                                    <*> peek (ptr `plusPtr` 248)+                                    <*> peek (ptr `plusPtr` 252)+                                    <*> peek (ptr `plusPtr` 256)+                                    <*> peek (ptr `plusPtr` 260)+                                    <*> peek (ptr `plusPtr` 264)+                                    <*> peek (ptr `plusPtr` 268)+                                    <*> peek (ptr `plusPtr` 272)+                                    <*> peek (ptr `plusPtr` 276)+                                    <*> peek (ptr `plusPtr` 280)+                                    <*> peek (ptr `plusPtr` 288)+                                    <*> peek (ptr `plusPtr` 296)+                                    <*> peek (ptr `plusPtr` 304)+                                    <*> peek (ptr `plusPtr` 312)+                                    <*> peek (ptr `plusPtr` 320)+                                    <*> peek (ptr `plusPtr` 328)+                                    <*> peek (ptr `plusPtr` 336)+                                    <*> peek (ptr `plusPtr` 340)+                                    <*> peek (ptr `plusPtr` 344)+                                    <*> peek (ptr `plusPtr` 348)+                                    <*> peek (ptr `plusPtr` 352)+                                    <*> peek (ptr `plusPtr` 356)+                                    <*> peek (ptr `plusPtr` 360)+                                    <*> peek (ptr `plusPtr` 364)+                                    <*> peek (ptr `plusPtr` 368)+                                    <*> peek (ptr `plusPtr` 372)+                                    <*> peek (ptr `plusPtr` 376)+                                    <*> peek (ptr `plusPtr` 380)+                                    <*> peek (ptr `plusPtr` 384)+                                    <*> peek (ptr `plusPtr` 388)+                                    <*> peek (ptr `plusPtr` 392)+                                    <*> peek (ptr `plusPtr` 396)+                                    <*> peek (ptr `plusPtr` 400)+                                    <*> peek (ptr `plusPtr` 404)+                                    <*> peek (ptr `plusPtr` 408)+                                    <*> peek (ptr `plusPtr` 412)+                                    <*> peek (ptr `plusPtr` 416)+                                    <*> peek (ptr `plusPtr` 420)+                                    <*> peek (ptr `plusPtr` 424)+                                    <*> peek (ptr `plusPtr` 428)+                                    <*> peek (ptr `plusPtr` 432)+                                    <*> peek (ptr `plusPtr` 436)+                                    <*> peek (ptr `plusPtr` 440)+                                    <*> peek (ptr `plusPtr` 444)+                                    <*> peek (ptr `plusPtr` 452)+                                    <*> peek (ptr `plusPtr` 460)+                                    <*> peek (ptr `plusPtr` 464)+                                    <*> peek (ptr `plusPtr` 468)+                                    <*> peek (ptr `plusPtr` 472)+                                    <*> peek (ptr `plusPtr` 480)+                                    <*> peek (ptr `plusPtr` 488)+                                    <*> peek (ptr `plusPtr` 496)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxImageDimension (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 4) (vkMaxImageDimension (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 8) (vkMaxImageDimension (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 12) (vkMaxImageDimensionCube (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 16) (vkMaxImageArrayLayers (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 20) (vkMaxTexelBufferElements (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 24) (vkMaxUniformBufferRange (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 28) (vkMaxStorageBufferRange (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 32) (vkMaxPushConstantsSize (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 36) (vkMaxMemoryAllocationCount (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 40) (vkMaxSamplerAllocationCount (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 48) (vkBufferImageGranularity (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 56) (vkSparseAddressSpaceSize (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 64) (vkMaxBoundDescriptorSets (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 68) (vkMaxPerStageDescriptorSamplers (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 72) (vkMaxPerStageDescriptorUniformBuffers (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 76) (vkMaxPerStageDescriptorStorageBuffers (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 80) (vkMaxPerStageDescriptorSampledImages (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 84) (vkMaxPerStageDescriptorStorageImages (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 88) (vkMaxPerStageDescriptorInputAttachments (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 92) (vkMaxPerStageResources (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 96) (vkMaxDescriptorSetSamplers (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 100) (vkMaxDescriptorSetUniformBuffers (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 104) (vkMaxDescriptorSetUniformBuffersDynamic (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 108) (vkMaxDescriptorSetStorageBuffers (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 112) (vkMaxDescriptorSetStorageBuffersDynamic (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 116) (vkMaxDescriptorSetSampledImages (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 120) (vkMaxDescriptorSetStorageImages (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 124) (vkMaxDescriptorSetInputAttachments (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 128) (vkMaxVertexInputAttributes (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 132) (vkMaxVertexInputBindings (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 136) (vkMaxVertexInputAttributeOffset (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 140) (vkMaxVertexInputBindingStride (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 144) (vkMaxVertexOutputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 148) (vkMaxTessellationGenerationLevel (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 152) (vkMaxTessellationPatchSize (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 156) (vkMaxTessellationControlPerVertexInputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 160) (vkMaxTessellationControlPerVertexOutputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 164) (vkMaxTessellationControlPerPatchOutputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 168) (vkMaxTessellationControlTotalOutputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 172) (vkMaxTessellationEvaluationInputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 176) (vkMaxTessellationEvaluationOutputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 180) (vkMaxGeometryShaderInvocations (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 184) (vkMaxGeometryInputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 188) (vkMaxGeometryOutputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 192) (vkMaxGeometryOutputVertices (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 196) (vkMaxGeometryTotalOutputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 200) (vkMaxFragmentInputComponents (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 204) (vkMaxFragmentOutputAttachments (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 208) (vkMaxFragmentDualSrcAttachments (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 212) (vkMaxFragmentCombinedOutputResources (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 216) (vkMaxComputeSharedMemorySize (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 220) (vkMaxComputeWorkGroupCount (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 232) (vkMaxComputeWorkGroupInvocations (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 236) (vkMaxComputeWorkGroupSize (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 248) (vkSubPixelPrecisionBits (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 252) (vkSubTexelPrecisionBits (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 256) (vkMipmapPrecisionBits (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 260) (vkMaxDrawIndexedIndexValue (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 264) (vkMaxDrawIndirectCount (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 268) (vkMaxSamplerLodBias (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 272) (vkMaxSamplerAnisotropy (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 276) (vkMaxViewports (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 280) (vkMaxViewportDimensions (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 288) (vkViewportBoundsRange (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 296) (vkViewportSubPixelBits (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 304) (vkMinMemoryMapAlignment (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 312) (vkMinTexelBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 320) (vkMinUniformBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 328) (vkMinStorageBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 336) (vkMinTexelOffset (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 340) (vkMaxTexelOffset (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 344) (vkMinTexelGatherOffset (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 348) (vkMaxTexelGatherOffset (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 352) (vkMinInterpolationOffset (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 356) (vkMaxInterpolationOffset (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 360) (vkSubPixelInterpolationOffsetBits (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 364) (vkMaxFramebufferWidth (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 368) (vkMaxFramebufferHeight (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 372) (vkMaxFramebufferLayers (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 376) (vkFramebufferColorSampleCounts (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 380) (vkFramebufferDepthSampleCounts (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 384) (vkFramebufferStencilSampleCounts (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 388) (vkFramebufferNoAttachmentsSampleCounts (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 392) (vkMaxColorAttachments (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 396) (vkSampledImageColorSampleCounts (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 400) (vkSampledImageIntegerSampleCounts (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 404) (vkSampledImageDepthSampleCounts (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 408) (vkSampledImageStencilSampleCounts (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 412) (vkStorageImageSampleCounts (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 416) (vkMaxSampleMaskWords (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 420) (vkTimestampComputeAndGraphics (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 424) (vkTimestampPeriod (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 428) (vkMaxClipDistances (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 432) (vkMaxCullDistances (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 436) (vkMaxCombinedClipAndCullDistances (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 440) (vkDiscreteQueuePriorities (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 444) (vkPointSizeRange (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 452) (vkLineWidthRange (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 460) (vkPointSizeGranularity (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 464) (vkLineWidthGranularity (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 468) (vkStrictLines (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 472) (vkStandardSampleLocations (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 480) (vkOptimalBufferCopyOffsetAlignment (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 488) (vkOptimalBufferCopyRowPitchAlignment (poked :: VkPhysicalDeviceLimits))+                *> poke (ptr `plusPtr` 496) (vkNonCoherentAtomSize (poked :: VkPhysicalDeviceLimits))++++data VkMemoryHeap =+  VkMemoryHeap{ vkSize :: VkDeviceSize +              , vkFlags :: VkMemoryHeapFlags +              }+  deriving (Eq)++instance Storable VkMemoryHeap where+  sizeOf ~_ = 16+  alignment ~_ = 8+  peek ptr = VkMemoryHeap <$> peek (ptr `plusPtr` 0)+                          <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryHeap))+                *> poke (ptr `plusPtr` 8) (vkFlags (poked :: VkMemoryHeap))+++-- ** vkEnumeratePhysicalDevices+foreign import ccall "vkEnumeratePhysicalDevices" vkEnumeratePhysicalDevices :: +  VkInstance -> Ptr Word32 -> Ptr VkPhysicalDevice -> IO VkResult++-- ** vkGetDeviceProcAddr+foreign import ccall "vkGetDeviceProcAddr" vkGetDeviceProcAddr :: +  VkDevice -> Ptr CChar -> IO PFN_vkVoidFunction++-- ** vkCreateInstance+foreign import ccall "vkCreateInstance" vkCreateInstance :: +  Ptr VkInstanceCreateInfo ->+  Ptr VkAllocationCallbacks -> Ptr VkInstance -> IO VkResult++-- ** VkFormatFeatureFlags++newtype VkFormatFeatureFlagBits = VkFormatFeatureFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkFormatFeatureFlagBits+type VkFormatFeatureFlags = VkFormatFeatureFlagBits+-- | Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = VkFormatFeatureFlagBits 0x1+-- | Format can be used for storage images (STORAGE_IMAGE descriptor type)+pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = VkFormatFeatureFlagBits 0x2+-- | Format supports atomic operations in case it's used for storage images+pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = VkFormatFeatureFlagBits 0x4+-- | Format can be used for uniform texel buffers (TBOs)+pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x8+-- | Format can be used for storage texel buffers (IBOs)+pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x10+-- | Format supports atomic operations in case it's used for storage texel buffers+pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = VkFormatFeatureFlagBits 0x20+-- | Format can be used for vertex buffers (VBOs)+pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = VkFormatFeatureFlagBits 0x40+-- | Format can be used for color attachment images+pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x80+-- | Format supports blending in case it's used for color attachment images+pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = VkFormatFeatureFlagBits 0x100+-- | Format can be used for depth/stencil attachment images+pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x200+-- | Format can be used as the source image of blits with vkCmdBlitImage+pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT = VkFormatFeatureFlagBits 0x400+-- | Format can be used as the destination image of blits with vkCmdBlitImage+pattern VK_FORMAT_FEATURE_BLIT_DST_BIT = VkFormatFeatureFlagBits 0x800+-- | Format can be filtered with VK_FILTER_LINEAR when being sampled+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = VkFormatFeatureFlagBits 0x1000++++data VkPhysicalDeviceMemoryProperties =+  VkPhysicalDeviceMemoryProperties{ vkMemoryTypeCount :: Word32 +                                  , vkMemoryTypes :: Vec (ToPeano VK_MAX_MEMORY_TYPES) VkMemoryType +                                  , vkMemoryHeapCount :: Word32 +                                  , vkMemoryHeaps :: Vec (ToPeano VK_MAX_MEMORY_HEAPS) VkMemoryHeap +                                  }+  deriving (Eq)++instance Storable VkPhysicalDeviceMemoryProperties where+  sizeOf ~_ = 520+  alignment ~_ = 8+  peek ptr = VkPhysicalDeviceMemoryProperties <$> peek (ptr `plusPtr` 0)+                                              <*> peek (ptr `plusPtr` 4)+                                              <*> peek (ptr `plusPtr` 260)+                                              <*> peek (ptr `plusPtr` 264)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkMemoryTypeCount (poked :: VkPhysicalDeviceMemoryProperties))+                *> poke (ptr `plusPtr` 4) (vkMemoryTypes (poked :: VkPhysicalDeviceMemoryProperties))+                *> poke (ptr `plusPtr` 260) (vkMemoryHeapCount (poked :: VkPhysicalDeviceMemoryProperties))+                *> poke (ptr `plusPtr` 264) (vkMemoryHeaps (poked :: VkPhysicalDeviceMemoryProperties))+++data VkInstance_T+type VkInstance = Ptr VkInstance_T++-- ** VkMemoryHeapFlags++newtype VkMemoryHeapFlagBits = VkMemoryHeapFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkMemoryHeapFlagBits+type VkMemoryHeapFlags = VkMemoryHeapFlagBits+-- | If set, heap represents device memory+pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = VkMemoryHeapFlagBits 0x1++++data VkQueueFamilyProperties =+  VkQueueFamilyProperties{ vkQueueFlags :: VkQueueFlags +                         , vkQueueCount :: Word32 +                         , vkTimestampValidBits :: Word32 +                         , vkMinImageTransferGranularity :: VkExtent3D +                         }+  deriving (Eq)++instance Storable VkQueueFamilyProperties where+  sizeOf ~_ = 24+  alignment ~_ = 4+  peek ptr = VkQueueFamilyProperties <$> peek (ptr `plusPtr` 0)+                                     <*> peek (ptr `plusPtr` 4)+                                     <*> peek (ptr `plusPtr` 8)+                                     <*> peek (ptr `plusPtr` 12)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkQueueFlags (poked :: VkQueueFamilyProperties))+                *> poke (ptr `plusPtr` 4) (vkQueueCount (poked :: VkQueueFamilyProperties))+                *> poke (ptr `plusPtr` 8) (vkTimestampValidBits (poked :: VkQueueFamilyProperties))+                *> poke (ptr `plusPtr` 12) (vkMinImageTransferGranularity (poked :: VkQueueFamilyProperties))++++data VkImageFormatProperties =+  VkImageFormatProperties{ vkMaxExtent :: VkExtent3D +                         , vkMaxMipLevels :: Word32 +                         , vkMaxArrayLayers :: Word32 +                         , vkSampleCounts :: VkSampleCountFlags +                         , vkMaxResourceSize :: VkDeviceSize +                         }+  deriving (Eq)++instance Storable VkImageFormatProperties where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek ptr = VkImageFormatProperties <$> peek (ptr `plusPtr` 0)+                                     <*> peek (ptr `plusPtr` 12)+                                     <*> peek (ptr `plusPtr` 16)+                                     <*> peek (ptr `plusPtr` 20)+                                     <*> peek (ptr `plusPtr` 24)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxExtent (poked :: VkImageFormatProperties))+                *> poke (ptr `plusPtr` 12) (vkMaxMipLevels (poked :: VkImageFormatProperties))+                *> poke (ptr `plusPtr` 16) (vkMaxArrayLayers (poked :: VkImageFormatProperties))+                *> poke (ptr `plusPtr` 20) (vkSampleCounts (poked :: VkImageFormatProperties))+                *> poke (ptr `plusPtr` 24) (vkMaxResourceSize (poked :: VkImageFormatProperties))++++data VkPhysicalDeviceSparseProperties =+  VkPhysicalDeviceSparseProperties{ vkResidencyStandard :: VkBool32 +                                  , vkResidencyStandard :: VkBool32 +                                  , vkResidencyStandard :: VkBool32 +                                  , vkResidencyAlignedMipSize :: VkBool32 +                                  , vkResidencyNonResidentStrict :: VkBool32 +                                  }+  deriving (Eq)++instance Storable VkPhysicalDeviceSparseProperties where+  sizeOf ~_ = 20+  alignment ~_ = 4+  peek ptr = VkPhysicalDeviceSparseProperties <$> peek (ptr `plusPtr` 0)+                                              <*> peek (ptr `plusPtr` 4)+                                              <*> peek (ptr `plusPtr` 8)+                                              <*> peek (ptr `plusPtr` 12)+                                              <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkResidencyStandard (poked :: VkPhysicalDeviceSparseProperties))+                *> poke (ptr `plusPtr` 4) (vkResidencyStandard (poked :: VkPhysicalDeviceSparseProperties))+                *> poke (ptr `plusPtr` 8) (vkResidencyStandard (poked :: VkPhysicalDeviceSparseProperties))+                *> poke (ptr `plusPtr` 12) (vkResidencyAlignedMipSize (poked :: VkPhysicalDeviceSparseProperties))+                *> poke (ptr `plusPtr` 16) (vkResidencyNonResidentStrict (poked :: VkPhysicalDeviceSparseProperties))+++-- ** vkGetPhysicalDeviceFeatures+foreign import ccall "vkGetPhysicalDeviceFeatures" vkGetPhysicalDeviceFeatures :: +  VkPhysicalDevice -> Ptr VkPhysicalDeviceFeatures -> IO ()++-- ** vkGetPhysicalDeviceMemoryProperties+foreign import ccall "vkGetPhysicalDeviceMemoryProperties" vkGetPhysicalDeviceMemoryProperties :: +  VkPhysicalDevice -> Ptr VkPhysicalDeviceMemoryProperties -> IO ()+++data VkPhysicalDeviceProperties =+  VkPhysicalDeviceProperties{ vkApiVersion :: Word32 +                            , vkDriverVersion :: Word32 +                            , vkVendorID :: Word32 +                            , vkDeviceID :: Word32 +                            , vkDeviceType :: VkPhysicalDeviceType +                            , vkDeviceName :: Vec (ToPeano VK_MAX_PHYSICAL_DEVICE_NAME_SIZE) CChar +                            , vkPipelineCacheUUID :: Vec (ToPeano VK_UUID_SIZE) Word8 +                            , vkLimits :: VkPhysicalDeviceLimits +                            , vkSparseProperties :: VkPhysicalDeviceSparseProperties +                            }+  deriving (Eq)++instance Storable VkPhysicalDeviceProperties where+  sizeOf ~_ = 824+  alignment ~_ = 8+  peek ptr = VkPhysicalDeviceProperties <$> peek (ptr `plusPtr` 0)+                                        <*> peek (ptr `plusPtr` 4)+                                        <*> peek (ptr `plusPtr` 8)+                                        <*> peek (ptr `plusPtr` 12)+                                        <*> peek (ptr `plusPtr` 16)+                                        <*> peek (ptr `plusPtr` 20)+                                        <*> peek (ptr `plusPtr` 276)+                                        <*> peek (ptr `plusPtr` 296)+                                        <*> peek (ptr `plusPtr` 800)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkApiVersion (poked :: VkPhysicalDeviceProperties))+                *> poke (ptr `plusPtr` 4) (vkDriverVersion (poked :: VkPhysicalDeviceProperties))+                *> poke (ptr `plusPtr` 8) (vkVendorID (poked :: VkPhysicalDeviceProperties))+                *> poke (ptr `plusPtr` 12) (vkDeviceID (poked :: VkPhysicalDeviceProperties))+                *> poke (ptr `plusPtr` 16) (vkDeviceType (poked :: VkPhysicalDeviceProperties))+                *> poke (ptr `plusPtr` 20) (vkDeviceName (poked :: VkPhysicalDeviceProperties))+                *> poke (ptr `plusPtr` 276) (vkPipelineCacheUUID (poked :: VkPhysicalDeviceProperties))+                *> poke (ptr `plusPtr` 296) (vkLimits (poked :: VkPhysicalDeviceProperties))+                *> poke (ptr `plusPtr` 800) (vkSparseProperties (poked :: VkPhysicalDeviceProperties))+++-- ** vkGetPhysicalDeviceQueueFamilyProperties+foreign import ccall "vkGetPhysicalDeviceQueueFamilyProperties" vkGetPhysicalDeviceQueueFamilyProperties :: +  VkPhysicalDevice ->+  Ptr Word32 -> Ptr VkQueueFamilyProperties -> IO ()+++data VkMemoryType =+  VkMemoryType{ vkPropertyFlags :: VkMemoryPropertyFlags +              , vkHeapIndex :: Word32 +              }+  deriving (Eq)++instance Storable VkMemoryType where+  sizeOf ~_ = 8+  alignment ~_ = 4+  peek ptr = VkMemoryType <$> peek (ptr `plusPtr` 0)+                          <*> peek (ptr `plusPtr` 4)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkPropertyFlags (poked :: VkMemoryType))+                *> poke (ptr `plusPtr` 4) (vkHeapIndex (poked :: VkMemoryType))+++-- ** vkGetInstanceProcAddr+foreign import ccall "vkGetInstanceProcAddr" vkGetInstanceProcAddr :: +  VkInstance -> Ptr CChar -> IO PFN_vkVoidFunction++-- ** VkMemoryPropertyFlags++newtype VkMemoryPropertyFlagBits = VkMemoryPropertyFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkMemoryPropertyFlagBits+type VkMemoryPropertyFlags = VkMemoryPropertyFlagBits+-- | If otherwise stated, then allocate memory on device+pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = VkMemoryPropertyFlagBits 0x1+-- | Memory is mappable by host+pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = VkMemoryPropertyFlagBits 0x2+-- | Memory will have i/o coherency. If not set, application may need to use vkFlushMappedMemoryRanges and vkInvalidateMappedMemoryRanges to flush/invalidate host cache+pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = VkMemoryPropertyFlagBits 0x4+-- | Memory will be cached by the host+pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT = VkMemoryPropertyFlagBits 0x8+-- | Memory may be allocated by the driver when it is required+pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = VkMemoryPropertyFlagBits 0x10+++-- ** vkDestroyInstance+foreign import ccall "vkDestroyInstance" vkDestroyInstance :: +  VkInstance -> Ptr VkAllocationCallbacks -> IO ()++-- ** VkQueueFlags++newtype VkQueueFlagBits = VkQueueFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkQueueFlagBits+type VkQueueFlags = VkQueueFlagBits+-- | Queue supports graphics operations+pattern VK_QUEUE_GRAPHICS_BIT = VkQueueFlagBits 0x1+-- | Queue supports compute operations+pattern VK_QUEUE_COMPUTE_BIT = VkQueueFlagBits 0x2+-- | Queue supports transfer operations+pattern VK_QUEUE_TRANSFER_BIT = VkQueueFlagBits 0x4+-- | Queue supports sparse resource memory management operations+pattern VK_QUEUE_SPARSE_BINDING_BIT = VkQueueFlagBits 0x8+++-- ** vkGetPhysicalDeviceProperties+foreign import ccall "vkGetPhysicalDeviceProperties" vkGetPhysicalDeviceProperties :: +  VkPhysicalDevice -> Ptr VkPhysicalDeviceProperties -> IO ()++-- ** VkInstanceCreateFlags+-- | Opaque flag+newtype VkInstanceCreateFlags = VkInstanceCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** vkGetPhysicalDeviceFormatProperties+foreign import ccall "vkGetPhysicalDeviceFormatProperties" vkGetPhysicalDeviceFormatProperties :: +  VkPhysicalDevice -> VkFormat -> Ptr VkFormatProperties -> IO ()+++data VkFormatProperties =+  VkFormatProperties{ vkLinearTilingFeatures :: VkFormatFeatureFlags +                    , vkOptimalTilingFeatures :: VkFormatFeatureFlags +                    , vkBufferFeatures :: VkFormatFeatureFlags +                    }+  deriving (Eq)++instance Storable VkFormatProperties where+  sizeOf ~_ = 12+  alignment ~_ = 4+  peek ptr = VkFormatProperties <$> peek (ptr `plusPtr` 0)+                                <*> peek (ptr `plusPtr` 4)+                                <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkLinearTilingFeatures (poked :: VkFormatProperties))+                *> poke (ptr `plusPtr` 4) (vkOptimalTilingFeatures (poked :: VkFormatProperties))+                *> poke (ptr `plusPtr` 8) (vkBufferFeatures (poked :: VkFormatProperties))++
+ src/Graphics/Vulkan/Event.hs view
@@ -0,0 +1,80 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Event where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize(..)+                      )+-- ** vkDestroyEvent+foreign import ccall "vkDestroyEvent" vkDestroyEvent :: +  VkDevice -> VkEvent -> Ptr VkAllocationCallbacks -> IO ()+++data VkEventCreateInfo =+  VkEventCreateInfo{ vkSType :: VkStructureType +                   , vkPNext :: Ptr Void +                   , vkFlags :: VkEventCreateFlags +                   }+  deriving (Eq)++instance Storable VkEventCreateInfo where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkEventCreateInfo <$> peek (ptr `plusPtr` 0)+                               <*> peek (ptr `plusPtr` 8)+                               <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkEventCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkEventCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkEventCreateInfo))+++-- ** vkSetEvent+foreign import ccall "vkSetEvent" vkSetEvent :: +  VkDevice -> VkEvent -> IO VkResult++-- ** vkGetEventStatus+foreign import ccall "vkGetEventStatus" vkGetEventStatus :: +  VkDevice -> VkEvent -> IO VkResult++-- ** vkResetEvent+foreign import ccall "vkResetEvent" vkResetEvent :: +  VkDevice -> VkEvent -> IO VkResult++-- ** vkCreateEvent+foreign import ccall "vkCreateEvent" vkCreateEvent :: +  VkDevice ->+  Ptr VkEventCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkEvent -> IO VkResult++newtype VkEvent = VkEvent Word64+  deriving (Eq, Storable)++-- ** VkEventCreateFlags+-- | Opaque flag+newtype VkEventCreateFlags = VkEventCreateFlags VkFlags+  deriving (Eq, Storable)+
+ src/Graphics/Vulkan/ExtensionDiscovery.hs view
@@ -0,0 +1,48 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE Strict #-}+module Graphics.Vulkan.ExtensionDiscovery where+import Graphics.Vulkan.Device( VkPhysicalDevice(..)+                             )+import Data.Word( Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Vector.Fixed.Cont( ToPeano+                             )+import Foreign.Storable( Storable(..)+                       )+import Graphics.Vulkan.Constants( VK_MAX_EXTENSION_NAME_SIZE+                                )+import Data.Vector.Fixed.Storable( Vec+                                 )+import Graphics.Vulkan.Core( VkResult(..)+                           )+import Foreign.C.Types( CChar+                      )++data VkExtensionProperties =+  VkExtensionProperties{ vkExtensionName :: Vec (ToPeano VK_MAX_EXTENSION_NAME_SIZE) CChar +                       , vkSpecVersion :: Word32 +                       }+  deriving (Eq)++instance Storable VkExtensionProperties where+  sizeOf ~_ = 260+  alignment ~_ = 4+  peek ptr = VkExtensionProperties <$> peek (ptr `plusPtr` 0)+                                   <*> peek (ptr `plusPtr` 256)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkExtensionName (poked :: VkExtensionProperties))+                *> poke (ptr `plusPtr` 256) (vkSpecVersion (poked :: VkExtensionProperties))+++-- ** vkEnumerateInstanceExtensionProperties+foreign import ccall "vkEnumerateInstanceExtensionProperties" vkEnumerateInstanceExtensionProperties :: +  Ptr CChar -> Ptr Word32 -> Ptr VkExtensionProperties -> IO VkResult++-- ** vkEnumerateDeviceExtensionProperties+foreign import ccall "vkEnumerateDeviceExtensionProperties" vkEnumerateDeviceExtensionProperties :: +  VkPhysicalDevice ->+  Ptr CChar -> Ptr Word32 -> Ptr VkExtensionProperties -> IO VkResult+
+ src/Graphics/Vulkan/Fence.hs view
@@ -0,0 +1,91 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Fence where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkBool32(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize(..)+                      )++data VkFenceCreateInfo =+  VkFenceCreateInfo{ vkSType :: VkStructureType +                   , vkPNext :: Ptr Void +                   , vkFlags :: VkFenceCreateFlags +                   }+  deriving (Eq)++instance Storable VkFenceCreateInfo where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkFenceCreateInfo <$> peek (ptr `plusPtr` 0)+                               <*> peek (ptr `plusPtr` 8)+                               <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFenceCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFenceCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkFenceCreateInfo))+++-- ** vkResetFences+foreign import ccall "vkResetFences" vkResetFences :: +  VkDevice -> Word32 -> Ptr VkFence -> IO VkResult++-- ** vkDestroyFence+foreign import ccall "vkDestroyFence" vkDestroyFence :: +  VkDevice -> VkFence -> Ptr VkAllocationCallbacks -> IO ()++-- ** vkWaitForFences+foreign import ccall "vkWaitForFences" vkWaitForFences :: +  VkDevice ->+  Word32 -> Ptr VkFence -> VkBool32 -> Word64 -> IO VkResult++-- ** vkGetFenceStatus+foreign import ccall "vkGetFenceStatus" vkGetFenceStatus :: +  VkDevice -> VkFence -> IO VkResult++-- ** VkFenceCreateFlags++newtype VkFenceCreateFlagBits = VkFenceCreateFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkFenceCreateFlagBits+type VkFenceCreateFlags = VkFenceCreateFlagBits++pattern VK_FENCE_CREATE_SIGNALED_BIT = VkFenceCreateFlagBits 0x1+++-- ** vkCreateFence+foreign import ccall "vkCreateFence" vkCreateFence :: +  VkDevice ->+  Ptr VkFenceCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkFence -> IO VkResult++newtype VkFence = VkFence Word64+  deriving (Eq, Storable)+
+ src/Graphics/Vulkan/HeaderBoilerplate.hs view
@@ -0,0 +1,4 @@++module Graphics.Vulkan.HeaderBoilerplate where++
+ src/Graphics/Vulkan/Image.hs view
@@ -0,0 +1,287 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Image where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Int( Int32+               )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)+                              )+import Graphics.Vulkan.Core( VkExtent3D(..)+                           , VkResult(..)+                           , VkDeviceSize(..)+                           , VkFlags(..)+                           , VkFormat(..)+                           , VkStructureType(..)+                           , VkSharingMode(..)+                           )+import Foreign.C.Types( CSize(..)+                      )+-- ** vkCreateImage+foreign import ccall "vkCreateImage" vkCreateImage :: +  VkDevice ->+  Ptr VkImageCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkImage -> IO VkResult++-- ** VkImageCreateFlags++newtype VkImageCreateFlagBits = VkImageCreateFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkImageCreateFlagBits+type VkImageCreateFlags = VkImageCreateFlagBits+-- | Image should support sparse backing+pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT = VkImageCreateFlagBits 0x1+-- | Image should support sparse backing with partial residency+pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = VkImageCreateFlagBits 0x2+-- | Image should support constent data access to physical memory blocks mapped into multiple locations of sparse images+pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = VkImageCreateFlagBits 0x4+-- | Allows image views to have different format than the base image+pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = VkImageCreateFlagBits 0x8+-- | Allows creating image views with cube type from the created image+pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = VkImageCreateFlagBits 0x10+++-- ** VkImageUsageFlags++newtype VkImageUsageFlagBits = VkImageUsageFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkImageUsageFlagBits+type VkImageUsageFlags = VkImageUsageFlagBits+-- | Can be used as a source of transfer operations+pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT = VkImageUsageFlagBits 0x1+-- | Can be used as a destination of transfer operations+pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT = VkImageUsageFlagBits 0x2+-- | Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)+pattern VK_IMAGE_USAGE_SAMPLED_BIT = VkImageUsageFlagBits 0x4+-- | Can be used as storage image (STORAGE_IMAGE descriptor type)+pattern VK_IMAGE_USAGE_STORAGE_BIT = VkImageUsageFlagBits 0x8+-- | Can be used as framebuffer color attachment+pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = VkImageUsageFlagBits 0x10+-- | Can be used as framebuffer depth/stencil attachment+pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = VkImageUsageFlagBits 0x20+-- | Image data not needed outside of rendering+pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x40+-- | Can be used as framebuffer input attachment+pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x80+++newtype VkImage = VkImage Word64+  deriving (Eq, Storable)++-- ** VkImageAspectFlags++newtype VkImageAspectFlagBits = VkImageAspectFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkImageAspectFlagBits+type VkImageAspectFlags = VkImageAspectFlagBits++pattern VK_IMAGE_ASPECT_COLOR_BIT = VkImageAspectFlagBits 0x1++pattern VK_IMAGE_ASPECT_DEPTH_BIT = VkImageAspectFlagBits 0x2++pattern VK_IMAGE_ASPECT_STENCIL_BIT = VkImageAspectFlagBits 0x4++pattern VK_IMAGE_ASPECT_METADATA_BIT = VkImageAspectFlagBits 0x8++++data VkSubresourceLayout =+  VkSubresourceLayout{ vkOffset :: VkDeviceSize +                     , vkSize :: VkDeviceSize +                     , vkRowPitch :: VkDeviceSize +                     , vkArrayPitch :: VkDeviceSize +                     , vkDepthPitch :: VkDeviceSize +                     }+  deriving (Eq)++instance Storable VkSubresourceLayout where+  sizeOf ~_ = 40+  alignment ~_ = 8+  peek ptr = VkSubresourceLayout <$> peek (ptr `plusPtr` 0)+                                 <*> peek (ptr `plusPtr` 8)+                                 <*> peek (ptr `plusPtr` 16)+                                 <*> peek (ptr `plusPtr` 24)+                                 <*> peek (ptr `plusPtr` 32)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkSubresourceLayout))+                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSubresourceLayout))+                *> poke (ptr `plusPtr` 16) (vkRowPitch (poked :: VkSubresourceLayout))+                *> poke (ptr `plusPtr` 24) (vkArrayPitch (poked :: VkSubresourceLayout))+                *> poke (ptr `plusPtr` 32) (vkDepthPitch (poked :: VkSubresourceLayout))+++-- ** VkImageTiling++newtype VkImageTiling = VkImageTiling Int32+  deriving (Eq, Storable)++pattern VK_IMAGE_TILING_OPTIMAL = VkImageTiling 0++pattern VK_IMAGE_TILING_LINEAR = VkImageTiling 1++-- ** VkImageLayout++newtype VkImageLayout = VkImageLayout Int32+  deriving (Eq, Storable)+-- | Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)+pattern VK_IMAGE_LAYOUT_UNDEFINED = VkImageLayout 0+-- | General layout when image can be used for any kind of access+pattern VK_IMAGE_LAYOUT_GENERAL = VkImageLayout 1+-- | Optimal layout when image is only used for color attachment read/write+pattern VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = VkImageLayout 2+-- | Optimal layout when image is only used for depth/stencil attachment read/write+pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = VkImageLayout 3+-- | Optimal layout when image is used for read only depth/stencil attachment and shader access+pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = VkImageLayout 4+-- | Optimal layout when image is used for read only shader access+pattern VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = VkImageLayout 5+-- | Optimal layout when image is used only as source of transfer operations+pattern VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = VkImageLayout 6+-- | Optimal layout when image is used only as destination of transfer operations+pattern VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = VkImageLayout 7+-- | Initial layout used when the data is populated by the CPU+pattern VK_IMAGE_LAYOUT_PREINITIALIZED = VkImageLayout 8++-- ** VkImageType++newtype VkImageType = VkImageType Int32+  deriving (Eq, Storable)++pattern VK_IMAGE_TYPE_1D = VkImageType 0++pattern VK_IMAGE_TYPE_2D = VkImageType 1++pattern VK_IMAGE_TYPE_3D = VkImageType 2++-- ** vkDestroyImage+foreign import ccall "vkDestroyImage" vkDestroyImage :: +  VkDevice -> VkImage -> Ptr VkAllocationCallbacks -> IO ()+++data VkImageSubresource =+  VkImageSubresource{ vkAspectMask :: VkImageAspectFlags +                    , vkMipLevel :: Word32 +                    , vkArrayLayer :: Word32 +                    }+  deriving (Eq)++instance Storable VkImageSubresource where+  sizeOf ~_ = 12+  alignment ~_ = 4+  peek ptr = VkImageSubresource <$> peek (ptr `plusPtr` 0)+                                <*> peek (ptr `plusPtr` 4)+                                <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresource))+                *> poke (ptr `plusPtr` 4) (vkMipLevel (poked :: VkImageSubresource))+                *> poke (ptr `plusPtr` 8) (vkArrayLayer (poked :: VkImageSubresource))++++data VkImageSubresourceRange =+  VkImageSubresourceRange{ vkAspectMask :: VkImageAspectFlags +                         , vkBaseMipLevel :: Word32 +                         , vkLevelCount :: Word32 +                         , vkBaseArrayLayer :: Word32 +                         , vkLayerCount :: Word32 +                         }+  deriving (Eq)++instance Storable VkImageSubresourceRange where+  sizeOf ~_ = 20+  alignment ~_ = 4+  peek ptr = VkImageSubresourceRange <$> peek (ptr `plusPtr` 0)+                                     <*> peek (ptr `plusPtr` 4)+                                     <*> peek (ptr `plusPtr` 8)+                                     <*> peek (ptr `plusPtr` 12)+                                     <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresourceRange))+                *> poke (ptr `plusPtr` 4) (vkBaseMipLevel (poked :: VkImageSubresourceRange))+                *> poke (ptr `plusPtr` 8) (vkLevelCount (poked :: VkImageSubresourceRange))+                *> poke (ptr `plusPtr` 12) (vkBaseArrayLayer (poked :: VkImageSubresourceRange))+                *> poke (ptr `plusPtr` 16) (vkLayerCount (poked :: VkImageSubresourceRange))+++-- ** vkGetImageSubresourceLayout+foreign import ccall "vkGetImageSubresourceLayout" vkGetImageSubresourceLayout :: +  VkDevice ->+  VkImage ->+    Ptr VkImageSubresource -> Ptr VkSubresourceLayout -> IO ()+++data VkImageCreateInfo =+  VkImageCreateInfo{ vkSType :: VkStructureType +                   , vkPNext :: Ptr Void +                   , vkFlags :: VkImageCreateFlags +                   , vkImageType :: VkImageType +                   , vkFormat :: VkFormat +                   , vkExtent :: VkExtent3D +                   , vkMipLevels :: Word32 +                   , vkArrayLayers :: Word32 +                   , vkSamples :: VkSampleCountFlagBits +                   , vkTiling :: VkImageTiling +                   , vkUsage :: VkImageUsageFlags +                   , vkSharingMode :: VkSharingMode +                   , vkQueueFamilyIndexCount :: Word32 +                   , vkPQueueFamilyIndices :: Ptr Word32 +                   , vkInitialLayout :: VkImageLayout +                   }+  deriving (Eq)++instance Storable VkImageCreateInfo where+  sizeOf ~_ = 88+  alignment ~_ = 8+  peek ptr = VkImageCreateInfo <$> peek (ptr `plusPtr` 0)+                               <*> peek (ptr `plusPtr` 8)+                               <*> peek (ptr `plusPtr` 16)+                               <*> peek (ptr `plusPtr` 20)+                               <*> peek (ptr `plusPtr` 24)+                               <*> peek (ptr `plusPtr` 28)+                               <*> peek (ptr `plusPtr` 40)+                               <*> peek (ptr `plusPtr` 44)+                               <*> peek (ptr `plusPtr` 48)+                               <*> peek (ptr `plusPtr` 52)+                               <*> peek (ptr `plusPtr` 56)+                               <*> peek (ptr `plusPtr` 60)+                               <*> peek (ptr `plusPtr` 64)+                               <*> peek (ptr `plusPtr` 72)+                               <*> peek (ptr `plusPtr` 80)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkImageType (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkFormat (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 28) (vkExtent (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkMipLevels (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 44) (vkArrayLayers (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 48) (vkSamples (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 52) (vkTiling (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 56) (vkUsage (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 60) (vkSharingMode (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 64) (vkQueueFamilyIndexCount (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 72) (vkPQueueFamilyIndices (poked :: VkImageCreateInfo))+                *> poke (ptr `plusPtr` 80) (vkInitialLayout (poked :: VkImageCreateInfo))++
+ src/Graphics/Vulkan/ImageView.hs view
@@ -0,0 +1,152 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.ImageView where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Int( Int32+               )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Image( VkImage(..)+                            , VkImageAspectFlagBits(..)+                            , VkImageSubresourceRange(..)+                            , VkImageAspectFlags(..)+                            )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkFlags(..)+                           , VkFormat(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize(..)+                      )++data VkImageViewCreateInfo =+  VkImageViewCreateInfo{ vkSType :: VkStructureType +                       , vkPNext :: Ptr Void +                       , vkFlags :: VkImageViewCreateFlags +                       , vkImage :: VkImage +                       , vkViewType :: VkImageViewType +                       , vkFormat :: VkFormat +                       , vkComponents :: VkComponentMapping +                       , vkSubresourceRange :: VkImageSubresourceRange +                       }+  deriving (Eq)++instance Storable VkImageViewCreateInfo where+  sizeOf ~_ = 80+  alignment ~_ = 8+  peek ptr = VkImageViewCreateInfo <$> peek (ptr `plusPtr` 0)+                                   <*> peek (ptr `plusPtr` 8)+                                   <*> peek (ptr `plusPtr` 16)+                                   <*> peek (ptr `plusPtr` 24)+                                   <*> peek (ptr `plusPtr` 32)+                                   <*> peek (ptr `plusPtr` 36)+                                   <*> peek (ptr `plusPtr` 40)+                                   <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageViewCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageViewCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkImageViewCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkImage (poked :: VkImageViewCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkViewType (poked :: VkImageViewCreateInfo))+                *> poke (ptr `plusPtr` 36) (vkFormat (poked :: VkImageViewCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkComponents (poked :: VkImageViewCreateInfo))+                *> poke (ptr `plusPtr` 56) (vkSubresourceRange (poked :: VkImageViewCreateInfo))+++-- ** vkCreateImageView+foreign import ccall "vkCreateImageView" vkCreateImageView :: +  VkDevice ->+  Ptr VkImageViewCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkImageView -> IO VkResult++newtype VkImageView = VkImageView Word64+  deriving (Eq, Storable)++-- ** VkImageViewType++newtype VkImageViewType = VkImageViewType Int32+  deriving (Eq, Storable)++pattern VK_IMAGE_VIEW_TYPE_1D = VkImageViewType 0++pattern VK_IMAGE_VIEW_TYPE_2D = VkImageViewType 1++pattern VK_IMAGE_VIEW_TYPE_3D = VkImageViewType 2++pattern VK_IMAGE_VIEW_TYPE_CUBE = VkImageViewType 3++pattern VK_IMAGE_VIEW_TYPE_1D_ARRAY = VkImageViewType 4++pattern VK_IMAGE_VIEW_TYPE_2D_ARRAY = VkImageViewType 5++pattern VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = VkImageViewType 6++-- ** VkImageViewCreateFlags+-- | Opaque flag+newtype VkImageViewCreateFlags = VkImageViewCreateFlags VkFlags+  deriving (Eq, Storable)+++data VkComponentMapping =+  VkComponentMapping{ vkR :: VkComponentSwizzle +                    , vkG :: VkComponentSwizzle +                    , vkB :: VkComponentSwizzle +                    , vkA :: VkComponentSwizzle +                    }+  deriving (Eq)++instance Storable VkComponentMapping where+  sizeOf ~_ = 16+  alignment ~_ = 4+  peek ptr = VkComponentMapping <$> peek (ptr `plusPtr` 0)+                                <*> peek (ptr `plusPtr` 4)+                                <*> peek (ptr `plusPtr` 8)+                                <*> peek (ptr `plusPtr` 12)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkR (poked :: VkComponentMapping))+                *> poke (ptr `plusPtr` 4) (vkG (poked :: VkComponentMapping))+                *> poke (ptr `plusPtr` 8) (vkB (poked :: VkComponentMapping))+                *> poke (ptr `plusPtr` 12) (vkA (poked :: VkComponentMapping))+++-- ** VkComponentSwizzle++newtype VkComponentSwizzle = VkComponentSwizzle Int32+  deriving (Eq, Storable)++pattern VK_COMPONENT_SWIZZLE_IDENTITY = VkComponentSwizzle 0++pattern VK_COMPONENT_SWIZZLE_ZERO = VkComponentSwizzle 1++pattern VK_COMPONENT_SWIZZLE_ONE = VkComponentSwizzle 2++pattern VK_COMPONENT_SWIZZLE_R = VkComponentSwizzle 3++pattern VK_COMPONENT_SWIZZLE_G = VkComponentSwizzle 4++pattern VK_COMPONENT_SWIZZLE_B = VkComponentSwizzle 5++pattern VK_COMPONENT_SWIZZLE_A = VkComponentSwizzle 6++-- ** vkDestroyImageView+foreign import ccall "vkDestroyImageView" vkDestroyImageView :: +  VkDevice -> VkImageView -> Ptr VkAllocationCallbacks -> IO ()+
+ src/Graphics/Vulkan/KHR/Surface.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.KHR.Surface where+import Data.Word( Word64+                , Word32+                )+import Data.Int( Int32+               )+import Foreign.Storable( Storable(..)+                       )+import Graphics.Vulkan.Core( VkFlags(..)+                           )+-- ** VkCompositeAlphaFlagsKHR+-- | Opaque flag+newtype VkCompositeAlphaFlagsKHR = VkCompositeAlphaFlagsKHR VkFlags+  deriving (Eq, Storable)++-- ** VkPresentModeKHR++newtype VkPresentModeKHR = VkPresentModeKHR Int32+  deriving (Eq, Storable)++pattern VK_PRESENT_MODE_IMMEDIATE_KHR = VkPresentModeKHR 0++pattern VK_PRESENT_MODE_MAILBOX_KHR = VkPresentModeKHR 1++pattern VK_PRESENT_MODE_FIFO_KHR = VkPresentModeKHR 2++pattern VK_PRESENT_MODE_FIFO_RELAXED_KHR = VkPresentModeKHR 3++newtype VkSurfaceKHR = VkSurfaceKHR Word64+  deriving (Eq, Storable)++-- ** VkColorSpaceKHR++newtype VkColorSpaceKHR = VkColorSpaceKHR Int32+  deriving (Eq, Storable)++pattern VK_COLORSPACE_SRGB_NONLINEAR_KHR = VkColorSpaceKHR 0++-- ** VkSurfaceTransformFlagsKHR+-- | Opaque flag+newtype VkSurfaceTransformFlagsKHR = VkSurfaceTransformFlagsKHR VkFlags+  deriving (Eq, Storable)+
+ src/Graphics/Vulkan/LayerDiscovery.hs view
@@ -0,0 +1,55 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE Strict #-}+module Graphics.Vulkan.LayerDiscovery where+import Graphics.Vulkan.Device( VkPhysicalDevice(..)+                             )+import Data.Word( Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Vector.Fixed.Cont( ToPeano+                             )+import Foreign.Storable( Storable(..)+                       )+import Graphics.Vulkan.Constants( VK_MAX_EXTENSION_NAME_SIZE+                                , VK_MAX_DESCRIPTION_SIZE+                                )+import Data.Vector.Fixed.Storable( Vec+                                 )+import Graphics.Vulkan.Core( VkResult(..)+                           )+import Foreign.C.Types( CChar+                      )++data VkLayerProperties =+  VkLayerProperties{ vkLayerName :: Vec (ToPeano VK_MAX_EXTENSION_NAME_SIZE) CChar +                   , vkSpecVersion :: Word32 +                   , vkImplementationVersion :: Word32 +                   , vkDescription :: Vec (ToPeano VK_MAX_DESCRIPTION_SIZE) CChar +                   }+  deriving (Eq)++instance Storable VkLayerProperties where+  sizeOf ~_ = 520+  alignment ~_ = 4+  peek ptr = VkLayerProperties <$> peek (ptr `plusPtr` 0)+                               <*> peek (ptr `plusPtr` 256)+                               <*> peek (ptr `plusPtr` 260)+                               <*> peek (ptr `plusPtr` 264)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkLayerName (poked :: VkLayerProperties))+                *> poke (ptr `plusPtr` 256) (vkSpecVersion (poked :: VkLayerProperties))+                *> poke (ptr `plusPtr` 260) (vkImplementationVersion (poked :: VkLayerProperties))+                *> poke (ptr `plusPtr` 264) (vkDescription (poked :: VkLayerProperties))+++-- ** vkEnumerateInstanceLayerProperties+foreign import ccall "vkEnumerateInstanceLayerProperties" vkEnumerateInstanceLayerProperties :: +  Ptr Word32 -> Ptr VkLayerProperties -> IO VkResult++-- ** vkEnumerateDeviceLayerProperties+foreign import ccall "vkEnumerateDeviceLayerProperties" vkEnumerateDeviceLayerProperties :: +  VkPhysicalDevice ->+  Ptr Word32 -> Ptr VkLayerProperties -> IO VkResult+
+ src/Graphics/Vulkan/Memory.hs view
@@ -0,0 +1,187 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Memory where+import {-# SOURCE #-} Graphics.Vulkan.Device( VkDevice(..)+                                            )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , FunPtr+                  , plusPtr+                  )+import Data.Int( Int32+               )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkDeviceSize(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize+                      , CSize(..)+                      )+newtype VkDeviceMemory = VkDeviceMemory Word64+  deriving (Eq, Storable)++-- ** vkMapMemory+foreign import ccall "vkMapMemory" vkMapMemory :: +  VkDevice ->+  VkDeviceMemory ->+    VkDeviceSize ->+      VkDeviceSize -> VkMemoryMapFlags -> Ptr (Ptr Void) -> IO VkResult++type PFN_vkInternalFreeNotification = FunPtr+  (Ptr Void ->+     CSize ->+       VkInternalAllocationType -> VkSystemAllocationScope -> IO ())+++data VkAllocationCallbacks =+  VkAllocationCallbacks{ vkPUserData :: Ptr Void +                       , vkPfnAllocation :: PFN_vkAllocationFunction +                       , vkPfnReallocation :: PFN_vkReallocationFunction +                       , vkPfnFree :: PFN_vkFreeFunction +                       , vkPfnInternalAllocation :: PFN_vkInternalAllocationNotification +                       , vkPfnInternalFree :: PFN_vkInternalFreeNotification +                       }+  deriving (Eq)++instance Storable VkAllocationCallbacks where+  sizeOf ~_ = 48+  alignment ~_ = 8+  peek ptr = VkAllocationCallbacks <$> peek (ptr `plusPtr` 0)+                                   <*> peek (ptr `plusPtr` 8)+                                   <*> peek (ptr `plusPtr` 16)+                                   <*> peek (ptr `plusPtr` 24)+                                   <*> peek (ptr `plusPtr` 32)+                                   <*> peek (ptr `plusPtr` 40)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkPUserData (poked :: VkAllocationCallbacks))+                *> poke (ptr `plusPtr` 8) (vkPfnAllocation (poked :: VkAllocationCallbacks))+                *> poke (ptr `plusPtr` 16) (vkPfnReallocation (poked :: VkAllocationCallbacks))+                *> poke (ptr `plusPtr` 24) (vkPfnFree (poked :: VkAllocationCallbacks))+                *> poke (ptr `plusPtr` 32) (vkPfnInternalAllocation (poked :: VkAllocationCallbacks))+                *> poke (ptr `plusPtr` 40) (vkPfnInternalFree (poked :: VkAllocationCallbacks))+++-- ** vkInvalidateMappedMemoryRanges+foreign import ccall "vkInvalidateMappedMemoryRanges" vkInvalidateMappedMemoryRanges :: +  VkDevice -> Word32 -> Ptr VkMappedMemoryRange -> IO VkResult++-- ** VkSystemAllocationScope++newtype VkSystemAllocationScope = VkSystemAllocationScope Int32+  deriving (Eq, Storable)++pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = VkSystemAllocationScope 0++pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = VkSystemAllocationScope 1++pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE = VkSystemAllocationScope 2++pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = VkSystemAllocationScope 3++pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = VkSystemAllocationScope 4++-- ** vkFlushMappedMemoryRanges+foreign import ccall "vkFlushMappedMemoryRanges" vkFlushMappedMemoryRanges :: +  VkDevice -> Word32 -> Ptr VkMappedMemoryRange -> IO VkResult++-- ** VkMemoryMapFlags+-- | Opaque flag+newtype VkMemoryMapFlags = VkMemoryMapFlags VkFlags+  deriving (Eq, Storable)++type PFN_vkInternalAllocationNotification = FunPtr+  (Ptr Void ->+     CSize ->+       VkInternalAllocationType -> VkSystemAllocationScope -> IO ())++-- ** vkFreeMemory+foreign import ccall "vkFreeMemory" vkFreeMemory :: +  VkDevice -> VkDeviceMemory -> Ptr VkAllocationCallbacks -> IO ()++type PFN_vkReallocationFunction = FunPtr+  (Ptr Void ->+     Ptr Void ->+       CSize -> CSize -> VkSystemAllocationScope -> IO (Ptr Void))++-- ** vkUnmapMemory+foreign import ccall "vkUnmapMemory" vkUnmapMemory :: +  VkDevice -> VkDeviceMemory -> IO ()++type PFN_vkAllocationFunction = FunPtr+  (Ptr Void ->+     CSize -> CSize -> VkSystemAllocationScope -> IO (Ptr Void))++-- ** VkInternalAllocationType++newtype VkInternalAllocationType = VkInternalAllocationType Int32+  deriving (Eq, Storable)++pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = VkInternalAllocationType 0++type PFN_vkFreeFunction = FunPtr (Ptr Void -> Ptr Void -> IO ())++-- ** vkGetDeviceMemoryCommitment+foreign import ccall "vkGetDeviceMemoryCommitment" vkGetDeviceMemoryCommitment :: +  VkDevice -> VkDeviceMemory -> Ptr VkDeviceSize -> IO ()++-- ** vkAllocateMemory+foreign import ccall "vkAllocateMemory" vkAllocateMemory :: +  VkDevice ->+  Ptr VkMemoryAllocateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkDeviceMemory -> IO VkResult+++data VkMappedMemoryRange =+  VkMappedMemoryRange{ vkSType :: VkStructureType +                     , vkPNext :: Ptr Void +                     , vkMemory :: VkDeviceMemory +                     , vkOffset :: VkDeviceSize +                     , vkSize :: VkDeviceSize +                     }+  deriving (Eq)++instance Storable VkMappedMemoryRange where+  sizeOf ~_ = 40+  alignment ~_ = 8+  peek ptr = VkMappedMemoryRange <$> peek (ptr `plusPtr` 0)+                                 <*> peek (ptr `plusPtr` 8)+                                 <*> peek (ptr `plusPtr` 16)+                                 <*> peek (ptr `plusPtr` 24)+                                 <*> peek (ptr `plusPtr` 32)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMappedMemoryRange))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMappedMemoryRange))+                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkMappedMemoryRange))+                *> poke (ptr `plusPtr` 24) (vkOffset (poked :: VkMappedMemoryRange))+                *> poke (ptr `plusPtr` 32) (vkSize (poked :: VkMappedMemoryRange))++++data VkMemoryAllocateInfo =+  VkMemoryAllocateInfo{ vkSType :: VkStructureType +                      , vkPNext :: Ptr Void +                      , vkAllocationSize :: VkDeviceSize +                      , vkMemoryTypeIndex :: Word32 +                      }+  deriving (Eq)++instance Storable VkMemoryAllocateInfo where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek ptr = VkMemoryAllocateInfo <$> 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 :: VkMemoryAllocateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryAllocateInfo))+                *> poke (ptr `plusPtr` 16) (vkAllocationSize (poked :: VkMemoryAllocateInfo))+                *> poke (ptr `plusPtr` 24) (vkMemoryTypeIndex (poked :: VkMemoryAllocateInfo))++
+ src/Graphics/Vulkan/MemoryManagement.hs view
@@ -0,0 +1,61 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+module Graphics.Vulkan.MemoryManagement where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Graphics.Vulkan.Buffer( VkBuffer(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkDeviceMemory(..)+                             )+import Graphics.Vulkan.Image( VkImage(..)+                            )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkDeviceSize(..)+                           )+-- ** vkGetImageMemoryRequirements+foreign import ccall "vkGetImageMemoryRequirements" vkGetImageMemoryRequirements :: +  VkDevice -> VkImage -> Ptr VkMemoryRequirements -> IO ()+++data VkMemoryRequirements =+  VkMemoryRequirements{ vkSize :: VkDeviceSize +                      , vkAlignment :: VkDeviceSize +                      , vkMemoryTypeBits :: Word32 +                      }+  deriving (Eq)++instance Storable VkMemoryRequirements where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkMemoryRequirements <$> peek (ptr `plusPtr` 0)+                                  <*> peek (ptr `plusPtr` 8)+                                  <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryRequirements))+                *> poke (ptr `plusPtr` 8) (vkAlignment (poked :: VkMemoryRequirements))+                *> poke (ptr `plusPtr` 16) (vkMemoryTypeBits (poked :: VkMemoryRequirements))+++-- ** vkGetBufferMemoryRequirements+foreign import ccall "vkGetBufferMemoryRequirements" vkGetBufferMemoryRequirements :: +  VkDevice -> VkBuffer -> Ptr VkMemoryRequirements -> IO ()++-- ** vkBindBufferMemory+foreign import ccall "vkBindBufferMemory" vkBindBufferMemory :: +  VkDevice ->+  VkBuffer -> VkDeviceMemory -> VkDeviceSize -> IO VkResult++-- ** vkBindImageMemory+foreign import ccall "vkBindImageMemory" vkBindImageMemory :: +  VkDevice ->+  VkImage -> VkDeviceMemory -> VkDeviceSize -> IO VkResult+
+ src/Graphics/Vulkan/OtherTypes.hs view
@@ -0,0 +1,195 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+module Graphics.Vulkan.OtherTypes where+import Graphics.Vulkan.Buffer( VkBuffer(..)+                             )+import Graphics.Vulkan.Pass( VkAccessFlags(..)+                           , VkAccessFlagBits(..)+                           )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Int( Int32+               )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Image( VkImage(..)+                            , VkImageLayout(..)+                            , VkImageAspectFlagBits(..)+                            , VkImageSubresourceRange(..)+                            , VkImageAspectFlags(..)+                            )+import Graphics.Vulkan.Core( VkDeviceSize(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )++data VkBufferMemoryBarrier =+  VkBufferMemoryBarrier{ vkSType :: VkStructureType +                       , vkPNext :: Ptr Void +                       , vkSrcAccessMask :: VkAccessFlags +                       , vkDstAccessMask :: VkAccessFlags +                       , vkSrcQueueFamilyIndex :: Word32 +                       , vkDstQueueFamilyIndex :: Word32 +                       , vkBuffer :: VkBuffer +                       , vkOffset :: VkDeviceSize +                       , vkSize :: VkDeviceSize +                       }+  deriving (Eq)++instance Storable VkBufferMemoryBarrier where+  sizeOf ~_ = 56+  alignment ~_ = 8+  peek ptr = VkBufferMemoryBarrier <$> peek (ptr `plusPtr` 0)+                                   <*> peek (ptr `plusPtr` 8)+                                   <*> peek (ptr `plusPtr` 16)+                                   <*> peek (ptr `plusPtr` 20)+                                   <*> peek (ptr `plusPtr` 24)+                                   <*> peek (ptr `plusPtr` 28)+                                   <*> peek (ptr `plusPtr` 32)+                                   <*> peek (ptr `plusPtr` 40)+                                   <*> peek (ptr `plusPtr` 48)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferMemoryBarrier))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferMemoryBarrier))+                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkBufferMemoryBarrier))+                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkBufferMemoryBarrier))+                *> poke (ptr `plusPtr` 24) (vkSrcQueueFamilyIndex (poked :: VkBufferMemoryBarrier))+                *> poke (ptr `plusPtr` 28) (vkDstQueueFamilyIndex (poked :: VkBufferMemoryBarrier))+                *> poke (ptr `plusPtr` 32) (vkBuffer (poked :: VkBufferMemoryBarrier))+                *> poke (ptr `plusPtr` 40) (vkOffset (poked :: VkBufferMemoryBarrier))+                *> poke (ptr `plusPtr` 48) (vkSize (poked :: VkBufferMemoryBarrier))++++data VkDrawIndexedIndirectCommand =+  VkDrawIndexedIndirectCommand{ vkIndexCount :: Word32 +                              , vkInstanceCount :: Word32 +                              , vkFirstIndex :: Word32 +                              , vkVertexOffset :: Int32 +                              , vkFirstInstance :: Word32 +                              }+  deriving (Eq)++instance Storable VkDrawIndexedIndirectCommand where+  sizeOf ~_ = 20+  alignment ~_ = 4+  peek ptr = VkDrawIndexedIndirectCommand <$> peek (ptr `plusPtr` 0)+                                          <*> peek (ptr `plusPtr` 4)+                                          <*> peek (ptr `plusPtr` 8)+                                          <*> peek (ptr `plusPtr` 12)+                                          <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkIndexCount (poked :: VkDrawIndexedIndirectCommand))+                *> poke (ptr `plusPtr` 4) (vkInstanceCount (poked :: VkDrawIndexedIndirectCommand))+                *> poke (ptr `plusPtr` 8) (vkFirstIndex (poked :: VkDrawIndexedIndirectCommand))+                *> poke (ptr `plusPtr` 12) (vkVertexOffset (poked :: VkDrawIndexedIndirectCommand))+                *> poke (ptr `plusPtr` 16) (vkFirstInstance (poked :: VkDrawIndexedIndirectCommand))++++data VkImageMemoryBarrier =+  VkImageMemoryBarrier{ vkSType :: VkStructureType +                      , vkPNext :: Ptr Void +                      , vkSrcAccessMask :: VkAccessFlags +                      , vkDstAccessMask :: VkAccessFlags +                      , vkOldLayout :: VkImageLayout +                      , vkNewLayout :: VkImageLayout +                      , vkSrcQueueFamilyIndex :: Word32 +                      , vkDstQueueFamilyIndex :: Word32 +                      , vkImage :: VkImage +                      , vkSubresourceRange :: VkImageSubresourceRange +                      }+  deriving (Eq)++instance Storable VkImageMemoryBarrier where+  sizeOf ~_ = 72+  alignment ~_ = 8+  peek ptr = VkImageMemoryBarrier <$> peek (ptr `plusPtr` 0)+                                  <*> peek (ptr `plusPtr` 8)+                                  <*> peek (ptr `plusPtr` 16)+                                  <*> peek (ptr `plusPtr` 20)+                                  <*> peek (ptr `plusPtr` 24)+                                  <*> peek (ptr `plusPtr` 28)+                                  <*> peek (ptr `plusPtr` 32)+                                  <*> peek (ptr `plusPtr` 36)+                                  <*> peek (ptr `plusPtr` 40)+                                  <*> peek (ptr `plusPtr` 48)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageMemoryBarrier))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageMemoryBarrier))+                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkImageMemoryBarrier))+                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkImageMemoryBarrier))+                *> poke (ptr `plusPtr` 24) (vkOldLayout (poked :: VkImageMemoryBarrier))+                *> poke (ptr `plusPtr` 28) (vkNewLayout (poked :: VkImageMemoryBarrier))+                *> poke (ptr `plusPtr` 32) (vkSrcQueueFamilyIndex (poked :: VkImageMemoryBarrier))+                *> poke (ptr `plusPtr` 36) (vkDstQueueFamilyIndex (poked :: VkImageMemoryBarrier))+                *> poke (ptr `plusPtr` 40) (vkImage (poked :: VkImageMemoryBarrier))+                *> poke (ptr `plusPtr` 48) (vkSubresourceRange (poked :: VkImageMemoryBarrier))++++data VkMemoryBarrier =+  VkMemoryBarrier{ vkSType :: VkStructureType +                 , vkPNext :: Ptr Void +                 , vkSrcAccessMask :: VkAccessFlags +                 , vkDstAccessMask :: VkAccessFlags +                 }+  deriving (Eq)++instance Storable VkMemoryBarrier where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkMemoryBarrier <$> peek (ptr `plusPtr` 0)+                             <*> peek (ptr `plusPtr` 8)+                             <*> peek (ptr `plusPtr` 16)+                             <*> peek (ptr `plusPtr` 20)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryBarrier))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryBarrier))+                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkMemoryBarrier))+                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkMemoryBarrier))++++data VkDrawIndirectCommand =+  VkDrawIndirectCommand{ vkVertexCount :: Word32 +                       , vkInstanceCount :: Word32 +                       , vkFirstVertex :: Word32 +                       , vkFirstInstance :: Word32 +                       }+  deriving (Eq)++instance Storable VkDrawIndirectCommand where+  sizeOf ~_ = 16+  alignment ~_ = 4+  peek ptr = VkDrawIndirectCommand <$> peek (ptr `plusPtr` 0)+                                   <*> peek (ptr `plusPtr` 4)+                                   <*> peek (ptr `plusPtr` 8)+                                   <*> peek (ptr `plusPtr` 12)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkVertexCount (poked :: VkDrawIndirectCommand))+                *> poke (ptr `plusPtr` 4) (vkInstanceCount (poked :: VkDrawIndirectCommand))+                *> poke (ptr `plusPtr` 8) (vkFirstVertex (poked :: VkDrawIndirectCommand))+                *> poke (ptr `plusPtr` 12) (vkFirstInstance (poked :: VkDrawIndirectCommand))++++data VkDispatchIndirectCommand =+  VkDispatchIndirectCommand{ vkX :: Word32 +                           , vkY :: Word32 +                           , vkZ :: Word32 +                           }+  deriving (Eq)++instance Storable VkDispatchIndirectCommand where+  sizeOf ~_ = 12+  alignment ~_ = 4+  peek ptr = VkDispatchIndirectCommand <$> peek (ptr `plusPtr` 0)+                                       <*> peek (ptr `plusPtr` 4)+                                       <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkDispatchIndirectCommand))+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkDispatchIndirectCommand))+                *> poke (ptr `plusPtr` 8) (vkZ (poked :: VkDispatchIndirectCommand))++
+ src/Graphics/Vulkan/Pass.hs view
@@ -0,0 +1,374 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Pass where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Graphics.Vulkan.Pipeline( VkPipelineStageFlagBits(..)+                               , VkPipelineStageFlags(..)+                               , VkPipelineBindPoint(..)+                               )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Int( Int32+               )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)+                              )+import Graphics.Vulkan.Image( VkImageLayout(..)+                            )+import Graphics.Vulkan.ImageView( VkImageView(..)+                                )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkExtent2D(..)+                           , VkFlags(..)+                           , VkFormat(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize(..)+                      )++data VkSubpassDependency =+  VkSubpassDependency{ vkSrcSubpass :: Word32 +                     , vkDstSubpass :: Word32 +                     , vkSrcStageMask :: VkPipelineStageFlags +                     , vkDstStageMask :: VkPipelineStageFlags +                     , vkSrcAccessMask :: VkAccessFlags +                     , vkDstAccessMask :: VkAccessFlags +                     , vkDependencyFlags :: VkDependencyFlags +                     }+  deriving (Eq)++instance Storable VkSubpassDependency where+  sizeOf ~_ = 28+  alignment ~_ = 4+  peek ptr = VkSubpassDependency <$> peek (ptr `plusPtr` 0)+                                 <*> peek (ptr `plusPtr` 4)+                                 <*> peek (ptr `plusPtr` 8)+                                 <*> peek (ptr `plusPtr` 12)+                                 <*> peek (ptr `plusPtr` 16)+                                 <*> peek (ptr `plusPtr` 20)+                                 <*> peek (ptr `plusPtr` 24)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubpass (poked :: VkSubpassDependency))+                *> poke (ptr `plusPtr` 4) (vkDstSubpass (poked :: VkSubpassDependency))+                *> poke (ptr `plusPtr` 8) (vkSrcStageMask (poked :: VkSubpassDependency))+                *> poke (ptr `plusPtr` 12) (vkDstStageMask (poked :: VkSubpassDependency))+                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkSubpassDependency))+                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkSubpassDependency))+                *> poke (ptr `plusPtr` 24) (vkDependencyFlags (poked :: VkSubpassDependency))+++-- ** VkSubpassDescriptionFlags+-- | Opaque flag+newtype VkSubpassDescriptionFlags = VkSubpassDescriptionFlags VkFlags+  deriving (Eq, Storable)++newtype VkFramebuffer = VkFramebuffer Word64+  deriving (Eq, Storable)++-- ** VkAttachmentDescriptionFlags++newtype VkAttachmentDescriptionFlagBits = VkAttachmentDescriptionFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkAttachmentDescriptionFlagBits+type VkAttachmentDescriptionFlags = VkAttachmentDescriptionFlagBits+-- | The attachment may alias physical memory of another attachment in the same render pass+pattern VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = VkAttachmentDescriptionFlagBits 0x1+++-- ** VkDependencyFlags++newtype VkDependencyFlagBits = VkDependencyFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkDependencyFlagBits+type VkDependencyFlags = VkDependencyFlagBits+-- | Dependency is per pixel region +pattern VK_DEPENDENCY_BY_REGION_BIT = VkDependencyFlagBits 0x1+++-- ** vkDestroyRenderPass+foreign import ccall "vkDestroyRenderPass" vkDestroyRenderPass :: +  VkDevice -> VkRenderPass -> Ptr VkAllocationCallbacks -> IO ()++-- ** vkCreateFramebuffer+foreign import ccall "vkCreateFramebuffer" vkCreateFramebuffer :: +  VkDevice ->+  Ptr VkFramebufferCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkFramebuffer -> IO VkResult+++data VkFramebufferCreateInfo =+  VkFramebufferCreateInfo{ vkSType :: VkStructureType +                         , vkPNext :: Ptr Void +                         , vkFlags :: VkFramebufferCreateFlags +                         , vkRenderPass :: VkRenderPass +                         , vkAttachmentCount :: Word32 +                         , vkPAttachments :: Ptr VkImageView +                         , vkWidth :: Word32 +                         , vkHeight :: Word32 +                         , vkLayers :: Word32 +                         }+  deriving (Eq)++instance Storable VkFramebufferCreateInfo where+  sizeOf ~_ = 64+  alignment ~_ = 8+  peek ptr = VkFramebufferCreateInfo <$> 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` 48)+                                     <*> peek (ptr `plusPtr` 52)+                                     <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFramebufferCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFramebufferCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkFramebufferCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkRenderPass (poked :: VkFramebufferCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkAttachmentCount (poked :: VkFramebufferCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkPAttachments (poked :: VkFramebufferCreateInfo))+                *> poke (ptr `plusPtr` 48) (vkWidth (poked :: VkFramebufferCreateInfo))+                *> poke (ptr `plusPtr` 52) (vkHeight (poked :: VkFramebufferCreateInfo))+                *> poke (ptr `plusPtr` 56) (vkLayers (poked :: VkFramebufferCreateInfo))+++-- ** vkGetRenderAreaGranularity+foreign import ccall "vkGetRenderAreaGranularity" vkGetRenderAreaGranularity :: +  VkDevice -> VkRenderPass -> Ptr VkExtent2D -> IO ()++-- ** VkAttachmentLoadOp++newtype VkAttachmentLoadOp = VkAttachmentLoadOp Int32+  deriving (Eq, Storable)++pattern VK_ATTACHMENT_LOAD_OP_LOAD = VkAttachmentLoadOp 0++pattern VK_ATTACHMENT_LOAD_OP_CLEAR = VkAttachmentLoadOp 1++pattern VK_ATTACHMENT_LOAD_OP_DONT_CARE = VkAttachmentLoadOp 2++-- ** VkAttachmentStoreOp++newtype VkAttachmentStoreOp = VkAttachmentStoreOp Int32+  deriving (Eq, Storable)++pattern VK_ATTACHMENT_STORE_OP_STORE = VkAttachmentStoreOp 0++pattern VK_ATTACHMENT_STORE_OP_DONT_CARE = VkAttachmentStoreOp 1++-- ** VkAccessFlags++newtype VkAccessFlagBits = VkAccessFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkAccessFlagBits+type VkAccessFlags = VkAccessFlagBits+-- | Controls coherency of indirect command reads+pattern VK_ACCESS_INDIRECT_COMMAND_READ_BIT = VkAccessFlagBits 0x1+-- | Controls coherency of index reads+pattern VK_ACCESS_INDEX_READ_BIT = VkAccessFlagBits 0x2+-- | Controls coherency of vertex attribute reads+pattern VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = VkAccessFlagBits 0x4+-- | Controls coherency of uniform buffer reads+pattern VK_ACCESS_UNIFORM_READ_BIT = VkAccessFlagBits 0x8+-- | Controls coherency of input attachment reads+pattern VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x10+-- | Controls coherency of shader reads+pattern VK_ACCESS_SHADER_READ_BIT = VkAccessFlagBits 0x20+-- | Controls coherency of shader writes+pattern VK_ACCESS_SHADER_WRITE_BIT = VkAccessFlagBits 0x40+-- | Controls coherency of color attachment reads+pattern VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x80+-- | Controls coherency of color attachment writes+pattern VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = VkAccessFlagBits 0x100+-- | Controls coherency of depth/stencil attachment reads+pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x200+-- | Controls coherency of depth/stencil attachment writes+pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = VkAccessFlagBits 0x400+-- | Controls coherency of transfer reads+pattern VK_ACCESS_TRANSFER_READ_BIT = VkAccessFlagBits 0x800+-- | Controls coherency of transfer writes+pattern VK_ACCESS_TRANSFER_WRITE_BIT = VkAccessFlagBits 0x1000+-- | Controls coherency of host reads+pattern VK_ACCESS_HOST_READ_BIT = VkAccessFlagBits 0x2000+-- | Controls coherency of host writes+pattern VK_ACCESS_HOST_WRITE_BIT = VkAccessFlagBits 0x4000+-- | Controls coherency of memory reads+pattern VK_ACCESS_MEMORY_READ_BIT = VkAccessFlagBits 0x8000+-- | Controls coherency of memory writes+pattern VK_ACCESS_MEMORY_WRITE_BIT = VkAccessFlagBits 0x10000+++newtype VkRenderPass = VkRenderPass Word64+  deriving (Eq, Storable)++-- ** vkDestroyFramebuffer+foreign import ccall "vkDestroyFramebuffer" vkDestroyFramebuffer :: +  VkDevice -> VkFramebuffer -> Ptr VkAllocationCallbacks -> IO ()+++data VkAttachmentReference =+  VkAttachmentReference{ vkAttachment :: Word32 +                       , vkLayout :: VkImageLayout +                       }+  deriving (Eq)++instance Storable VkAttachmentReference where+  sizeOf ~_ = 8+  alignment ~_ = 4+  peek ptr = VkAttachmentReference <$> peek (ptr `plusPtr` 0)+                                   <*> peek (ptr `plusPtr` 4)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAttachment (poked :: VkAttachmentReference))+                *> poke (ptr `plusPtr` 4) (vkLayout (poked :: VkAttachmentReference))+++-- ** VkRenderPassCreateFlags+-- | Opaque flag+newtype VkRenderPassCreateFlags = VkRenderPassCreateFlags VkFlags+  deriving (Eq, Storable)+++data VkAttachmentDescription =+  VkAttachmentDescription{ vkFlags :: VkAttachmentDescriptionFlags +                         , vkFormat :: VkFormat +                         , vkSamples :: VkSampleCountFlagBits +                         , vkLoadOp :: VkAttachmentLoadOp +                         , vkStoreOp :: VkAttachmentStoreOp +                         , vkStencilLoadOp :: VkAttachmentLoadOp +                         , vkStencilStoreOp :: VkAttachmentStoreOp +                         , vkInitialLayout :: VkImageLayout +                         , vkFinalLayout :: VkImageLayout +                         }+  deriving (Eq)++instance Storable VkAttachmentDescription where+  sizeOf ~_ = 36+  alignment ~_ = 4+  peek ptr = VkAttachmentDescription <$> peek (ptr `plusPtr` 0)+                                     <*> peek (ptr `plusPtr` 4)+                                     <*> peek (ptr `plusPtr` 8)+                                     <*> peek (ptr `plusPtr` 12)+                                     <*> peek (ptr `plusPtr` 16)+                                     <*> peek (ptr `plusPtr` 20)+                                     <*> peek (ptr `plusPtr` 24)+                                     <*> peek (ptr `plusPtr` 28)+                                     <*> peek (ptr `plusPtr` 32)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkFlags (poked :: VkAttachmentDescription))+                *> poke (ptr `plusPtr` 4) (vkFormat (poked :: VkAttachmentDescription))+                *> poke (ptr `plusPtr` 8) (vkSamples (poked :: VkAttachmentDescription))+                *> poke (ptr `plusPtr` 12) (vkLoadOp (poked :: VkAttachmentDescription))+                *> poke (ptr `plusPtr` 16) (vkStoreOp (poked :: VkAttachmentDescription))+                *> poke (ptr `plusPtr` 20) (vkStencilLoadOp (poked :: VkAttachmentDescription))+                *> poke (ptr `plusPtr` 24) (vkStencilStoreOp (poked :: VkAttachmentDescription))+                *> poke (ptr `plusPtr` 28) (vkInitialLayout (poked :: VkAttachmentDescription))+                *> poke (ptr `plusPtr` 32) (vkFinalLayout (poked :: VkAttachmentDescription))++++data VkSubpassDescription =+  VkSubpassDescription{ vkFlags :: VkSubpassDescriptionFlags +                      , vkPipelineBindPoint :: VkPipelineBindPoint +                      , vkInputAttachmentCount :: Word32 +                      , vkPInputAttachments :: Ptr VkAttachmentReference +                      , vkColorAttachmentCount :: Word32 +                      , vkPColorAttachments :: Ptr VkAttachmentReference +                      , vkPResolveAttachments :: Ptr VkAttachmentReference +                      , vkPDepthStencilAttachment :: Ptr VkAttachmentReference +                      , vkPreserveAttachmentCount :: Word32 +                      , vkPPreserveAttachments :: Ptr Word32 +                      }+  deriving (Eq)++instance Storable VkSubpassDescription where+  sizeOf ~_ = 72+  alignment ~_ = 8+  peek ptr = VkSubpassDescription <$> peek (ptr `plusPtr` 0)+                                  <*> peek (ptr `plusPtr` 4)+                                  <*> peek (ptr `plusPtr` 8)+                                  <*> peek (ptr `plusPtr` 16)+                                  <*> peek (ptr `plusPtr` 24)+                                  <*> peek (ptr `plusPtr` 32)+                                  <*> peek (ptr `plusPtr` 40)+                                  <*> peek (ptr `plusPtr` 48)+                                  <*> peek (ptr `plusPtr` 56)+                                  <*> peek (ptr `plusPtr` 64)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkFlags (poked :: VkSubpassDescription))+                *> poke (ptr `plusPtr` 4) (vkPipelineBindPoint (poked :: VkSubpassDescription))+                *> poke (ptr `plusPtr` 8) (vkInputAttachmentCount (poked :: VkSubpassDescription))+                *> poke (ptr `plusPtr` 16) (vkPInputAttachments (poked :: VkSubpassDescription))+                *> poke (ptr `plusPtr` 24) (vkColorAttachmentCount (poked :: VkSubpassDescription))+                *> poke (ptr `plusPtr` 32) (vkPColorAttachments (poked :: VkSubpassDescription))+                *> poke (ptr `plusPtr` 40) (vkPResolveAttachments (poked :: VkSubpassDescription))+                *> poke (ptr `plusPtr` 48) (vkPDepthStencilAttachment (poked :: VkSubpassDescription))+                *> poke (ptr `plusPtr` 56) (vkPreserveAttachmentCount (poked :: VkSubpassDescription))+                *> poke (ptr `plusPtr` 64) (vkPPreserveAttachments (poked :: VkSubpassDescription))+++-- ** vkCreateRenderPass+foreign import ccall "vkCreateRenderPass" vkCreateRenderPass :: +  VkDevice ->+  Ptr VkRenderPassCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkRenderPass -> IO VkResult+++data VkRenderPassCreateInfo =+  VkRenderPassCreateInfo{ vkSType :: VkStructureType +                        , vkPNext :: Ptr Void +                        , vkFlags :: VkRenderPassCreateFlags +                        , vkAttachmentCount :: Word32 +                        , vkPAttachments :: Ptr VkAttachmentDescription +                        , vkSubpassCount :: Word32 +                        , vkPSubpasses :: Ptr VkSubpassDescription +                        , vkDependencyCount :: Word32 +                        , vkPDependencies :: Ptr VkSubpassDependency +                        }+  deriving (Eq)++instance Storable VkRenderPassCreateInfo where+  sizeOf ~_ = 64+  alignment ~_ = 8+  peek ptr = VkRenderPassCreateInfo <$> peek (ptr `plusPtr` 0)+                                    <*> peek (ptr `plusPtr` 8)+                                    <*> peek (ptr `plusPtr` 16)+                                    <*> peek (ptr `plusPtr` 20)+                                    <*> peek (ptr `plusPtr` 24)+                                    <*> peek (ptr `plusPtr` 32)+                                    <*> peek (ptr `plusPtr` 40)+                                    <*> peek (ptr `plusPtr` 48)+                                    <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkRenderPassCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkRenderPassCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkAttachmentCount (poked :: VkRenderPassCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPAttachments (poked :: VkRenderPassCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkSubpassCount (poked :: VkRenderPassCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkPSubpasses (poked :: VkRenderPassCreateInfo))+                *> poke (ptr `plusPtr` 48) (vkDependencyCount (poked :: VkRenderPassCreateInfo))+                *> poke (ptr `plusPtr` 56) (vkPDependencies (poked :: VkRenderPassCreateInfo))+++-- ** VkFramebufferCreateFlags+-- | Opaque flag+newtype VkFramebufferCreateFlags = VkFramebufferCreateFlags VkFlags+  deriving (Eq, Storable)+
+ src/Graphics/Vulkan/Pass.hs-boot view
@@ -0,0 +1,11 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Pass where+import Data.Word( Word64+                )+import Foreign.Storable( Storable(..)+                       )+newtype VkRenderPass = VkRenderPass Word64+  +instance Eq VkRenderPass+instance Storable VkRenderPass+
+ src/Graphics/Vulkan/Pipeline.hs view
@@ -0,0 +1,1007 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Pipeline where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import {-# SOURCE #-} Graphics.Vulkan.Pass( VkRenderPass(..)+                                          )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Graphics.Vulkan.PipelineCache( VkPipelineCache(..)+                                    )+import Data.Int( Int32+               )+import Data.Vector.Fixed.Cont( ToPeano+                             )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.PipelineLayout( VkPipelineLayout(..)+                                     )+import Graphics.Vulkan.Shader( VkShaderStageFlagBits(..)+                             , VkShaderModule(..)+                             )+import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)+                              , VkCompareOp(..)+                              )+import Data.Vector.Fixed.Storable( Vec+                                 )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkBool32(..)+                           , VkExtent2D(..)+                           , VkFlags(..)+                           , VkFormat(..)+                           , VkOffset2D(..)+                           , VkRect2D(..)+                           , VkViewport(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize+                      , CFloat+                      , CFloat(..)+                      , CChar+                      , CSize(..)+                      )++data VkPipelineTessellationStateCreateInfo =+  VkPipelineTessellationStateCreateInfo{ vkSType :: VkStructureType +                                       , vkPNext :: Ptr Void +                                       , vkFlags :: VkPipelineTessellationStateCreateFlags +                                       , vkPatchControlPoints :: Word32 +                                       }+  deriving (Eq)++instance Storable VkPipelineTessellationStateCreateInfo where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkPipelineTessellationStateCreateInfo <$> peek (ptr `plusPtr` 0)+                                                   <*> peek (ptr `plusPtr` 8)+                                                   <*> peek (ptr `plusPtr` 16)+                                                   <*> peek (ptr `plusPtr` 20)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineTessellationStateCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineTessellationStateCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineTessellationStateCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkPatchControlPoints (poked :: VkPipelineTessellationStateCreateInfo))++++data VkVertexInputAttributeDescription =+  VkVertexInputAttributeDescription{ vkLocation :: Word32 +                                   , vkBinding :: Word32 +                                   , vkFormat :: VkFormat +                                   , vkOffset :: Word32 +                                   }+  deriving (Eq)++instance Storable VkVertexInputAttributeDescription where+  sizeOf ~_ = 16+  alignment ~_ = 4+  peek ptr = VkVertexInputAttributeDescription <$> peek (ptr `plusPtr` 0)+                                               <*> peek (ptr `plusPtr` 4)+                                               <*> peek (ptr `plusPtr` 8)+                                               <*> peek (ptr `plusPtr` 12)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkLocation (poked :: VkVertexInputAttributeDescription))+                *> poke (ptr `plusPtr` 4) (vkBinding (poked :: VkVertexInputAttributeDescription))+                *> poke (ptr `plusPtr` 8) (vkFormat (poked :: VkVertexInputAttributeDescription))+                *> poke (ptr `plusPtr` 12) (vkOffset (poked :: VkVertexInputAttributeDescription))++++data VkGraphicsPipelineCreateInfo =+  VkGraphicsPipelineCreateInfo{ vkSType :: VkStructureType +                              , vkPNext :: Ptr Void +                              , vkFlags :: VkPipelineCreateFlags +                              , vkStageCount :: Word32 +                              , vkPStages :: Ptr VkPipelineShaderStageCreateInfo +                              , vkPVertexInputState :: Ptr VkPipelineVertexInputStateCreateInfo +                              , vkPInputAssemblyState :: Ptr VkPipelineInputAssemblyStateCreateInfo +                              , vkPTessellationState :: Ptr VkPipelineTessellationStateCreateInfo +                              , vkPViewportState :: Ptr VkPipelineViewportStateCreateInfo +                              , vkPRasterizationState :: Ptr VkPipelineRasterizationStateCreateInfo +                              , vkPMultisampleState :: Ptr VkPipelineMultisampleStateCreateInfo +                              , vkPDepthStencilState :: Ptr VkPipelineDepthStencilStateCreateInfo +                              , vkPColorBlendState :: Ptr VkPipelineColorBlendStateCreateInfo +                              , vkPDynamicState :: Ptr VkPipelineDynamicStateCreateInfo +                              , vkLayout :: VkPipelineLayout +                              , vkRenderPass :: VkRenderPass +                              , vkSubpass :: Word32 +                              , vkBasePipelineHandle :: VkPipeline +                              , vkBasePipelineIndex :: Int32 +                              }+  deriving (Eq)++instance Storable VkGraphicsPipelineCreateInfo where+  sizeOf ~_ = 144+  alignment ~_ = 8+  peek ptr = VkGraphicsPipelineCreateInfo <$> peek (ptr `plusPtr` 0)+                                          <*> peek (ptr `plusPtr` 8)+                                          <*> peek (ptr `plusPtr` 16)+                                          <*> peek (ptr `plusPtr` 20)+                                          <*> peek (ptr `plusPtr` 24)+                                          <*> peek (ptr `plusPtr` 32)+                                          <*> peek (ptr `plusPtr` 40)+                                          <*> peek (ptr `plusPtr` 48)+                                          <*> peek (ptr `plusPtr` 56)+                                          <*> peek (ptr `plusPtr` 64)+                                          <*> peek (ptr `plusPtr` 72)+                                          <*> peek (ptr `plusPtr` 80)+                                          <*> peek (ptr `plusPtr` 88)+                                          <*> peek (ptr `plusPtr` 96)+                                          <*> peek (ptr `plusPtr` 104)+                                          <*> peek (ptr `plusPtr` 112)+                                          <*> peek (ptr `plusPtr` 120)+                                          <*> peek (ptr `plusPtr` 128)+                                          <*> peek (ptr `plusPtr` 136)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkStageCount (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPStages (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkPVertexInputState (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkPInputAssemblyState (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 48) (vkPTessellationState (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 56) (vkPViewportState (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 64) (vkPRasterizationState (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 72) (vkPMultisampleState (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 80) (vkPDepthStencilState (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 88) (vkPColorBlendState (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 96) (vkPDynamicState (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 104) (vkLayout (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 112) (vkRenderPass (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 120) (vkSubpass (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 128) (vkBasePipelineHandle (poked :: VkGraphicsPipelineCreateInfo))+                *> poke (ptr `plusPtr` 136) (vkBasePipelineIndex (poked :: VkGraphicsPipelineCreateInfo))+++-- ** VkCullModeFlags++newtype VkCullModeFlagBits = VkCullModeFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkCullModeFlagBits+type VkCullModeFlags = VkCullModeFlagBits++pattern VK_CULL_MODE_FRONT_BIT = VkCullModeFlagBits 0x1++pattern VK_CULL_MODE_BACK_BIT = VkCullModeFlagBits 0x2++pattern VK_CULL_MODE_NONE = VkCullModeFlagBits 0x0++pattern VK_CULL_MODE_FRONT_AND_BACK = VkCullModeFlagBits 0x3++-- ** VkPipelineDepthStencilStateCreateFlags+-- | Opaque flag+newtype VkPipelineDepthStencilStateCreateFlags = VkPipelineDepthStencilStateCreateFlags VkFlags+  deriving (Eq, Storable)+++data VkPipelineShaderStageCreateInfo =+  VkPipelineShaderStageCreateInfo{ vkSType :: VkStructureType +                                 , vkPNext :: Ptr Void +                                 , vkFlags :: VkPipelineShaderStageCreateFlags +                                 , vkStage :: VkShaderStageFlagBits +                                 , vkModule :: VkShaderModule +                                 , vkPName :: Ptr CChar +                                 , vkPSpecializationInfo :: Ptr VkSpecializationInfo +                                 }+  deriving (Eq)++instance Storable VkPipelineShaderStageCreateInfo where+  sizeOf ~_ = 48+  alignment ~_ = 8+  peek ptr = VkPipelineShaderStageCreateInfo <$> peek (ptr `plusPtr` 0)+                                             <*> peek (ptr `plusPtr` 8)+                                             <*> peek (ptr `plusPtr` 16)+                                             <*> peek (ptr `plusPtr` 20)+                                             <*> peek (ptr `plusPtr` 24)+                                             <*> peek (ptr `plusPtr` 32)+                                             <*> peek (ptr `plusPtr` 40)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineShaderStageCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineShaderStageCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineShaderStageCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkStage (poked :: VkPipelineShaderStageCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkModule (poked :: VkPipelineShaderStageCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkPName (poked :: VkPipelineShaderStageCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkPSpecializationInfo (poked :: VkPipelineShaderStageCreateInfo))+++-- ** VkColorComponentFlags++newtype VkColorComponentFlagBits = VkColorComponentFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkColorComponentFlagBits+type VkColorComponentFlags = VkColorComponentFlagBits++pattern VK_COLOR_COMPONENT_R_BIT = VkColorComponentFlagBits 0x1++pattern VK_COLOR_COMPONENT_G_BIT = VkColorComponentFlagBits 0x2++pattern VK_COLOR_COMPONENT_B_BIT = VkColorComponentFlagBits 0x4++pattern VK_COLOR_COMPONENT_A_BIT = VkColorComponentFlagBits 0x8++++data VkComputePipelineCreateInfo =+  VkComputePipelineCreateInfo{ vkSType :: VkStructureType +                             , vkPNext :: Ptr Void +                             , vkFlags :: VkPipelineCreateFlags +                             , vkStage :: VkPipelineShaderStageCreateInfo +                             , vkLayout :: VkPipelineLayout +                             , vkBasePipelineHandle :: VkPipeline +                             , vkBasePipelineIndex :: Int32 +                             }+  deriving (Eq)++instance Storable VkComputePipelineCreateInfo where+  sizeOf ~_ = 96+  alignment ~_ = 8+  peek ptr = VkComputePipelineCreateInfo <$> peek (ptr `plusPtr` 0)+                                         <*> peek (ptr `plusPtr` 8)+                                         <*> peek (ptr `plusPtr` 16)+                                         <*> peek (ptr `plusPtr` 24)+                                         <*> peek (ptr `plusPtr` 72)+                                         <*> peek (ptr `plusPtr` 80)+                                         <*> peek (ptr `plusPtr` 88)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkComputePipelineCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkComputePipelineCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkComputePipelineCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkStage (poked :: VkComputePipelineCreateInfo))+                *> poke (ptr `plusPtr` 72) (vkLayout (poked :: VkComputePipelineCreateInfo))+                *> poke (ptr `plusPtr` 80) (vkBasePipelineHandle (poked :: VkComputePipelineCreateInfo))+                *> poke (ptr `plusPtr` 88) (vkBasePipelineIndex (poked :: VkComputePipelineCreateInfo))+++-- ** VkStencilOp++newtype VkStencilOp = VkStencilOp Int32+  deriving (Eq, Storable)++pattern VK_STENCIL_OP_KEEP = VkStencilOp 0++pattern VK_STENCIL_OP_ZERO = VkStencilOp 1++pattern VK_STENCIL_OP_REPLACE = VkStencilOp 2++pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP = VkStencilOp 3++pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP = VkStencilOp 4++pattern VK_STENCIL_OP_INVERT = VkStencilOp 5++pattern VK_STENCIL_OP_INCREMENT_AND_WRAP = VkStencilOp 6++pattern VK_STENCIL_OP_DECREMENT_AND_WRAP = VkStencilOp 7+++data VkSpecializationInfo =+  VkSpecializationInfo{ vkMapEntryCount :: Word32 +                      , vkPMapEntries :: Ptr VkSpecializationMapEntry +                      , vkDataSize :: CSize +                      , vkPData :: Ptr Void +                      }+  deriving (Eq)++instance Storable VkSpecializationInfo where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek ptr = VkSpecializationInfo <$> peek (ptr `plusPtr` 0)+                                  <*> peek (ptr `plusPtr` 8)+                                  <*> peek (ptr `plusPtr` 16)+                                  <*> peek (ptr `plusPtr` 24)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkMapEntryCount (poked :: VkSpecializationInfo))+                *> poke (ptr `plusPtr` 8) (vkPMapEntries (poked :: VkSpecializationInfo))+                *> poke (ptr `plusPtr` 16) (vkDataSize (poked :: VkSpecializationInfo))+                *> poke (ptr `plusPtr` 24) (vkPData (poked :: VkSpecializationInfo))+++-- ** VkPipelineColorBlendStateCreateFlags+-- | Opaque flag+newtype VkPipelineColorBlendStateCreateFlags = VkPipelineColorBlendStateCreateFlags VkFlags+  deriving (Eq, Storable)++newtype VkPipeline = VkPipeline Word64+  deriving (Eq, Storable)++-- ** VkPipelineInputAssemblyStateCreateFlags+-- | Opaque flag+newtype VkPipelineInputAssemblyStateCreateFlags = VkPipelineInputAssemblyStateCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** vkCreateGraphicsPipelines+foreign import ccall "vkCreateGraphicsPipelines" vkCreateGraphicsPipelines :: +  VkDevice ->+  VkPipelineCache ->+    Word32 ->+      Ptr VkGraphicsPipelineCreateInfo ->+        Ptr VkAllocationCallbacks -> Ptr VkPipeline -> IO VkResult++-- ** VkFrontFace++newtype VkFrontFace = VkFrontFace Int32+  deriving (Eq, Storable)++pattern VK_FRONT_FACE_COUNTER_CLOCKWISE = VkFrontFace 0++pattern VK_FRONT_FACE_CLOCKWISE = VkFrontFace 1++-- ** VkPolygonMode++newtype VkPolygonMode = VkPolygonMode Int32+  deriving (Eq, Storable)++pattern VK_POLYGON_MODE_FILL = VkPolygonMode 0++pattern VK_POLYGON_MODE_LINE = VkPolygonMode 1++pattern VK_POLYGON_MODE_POINT = VkPolygonMode 2++-- ** VkPipelineViewportStateCreateFlags+-- | Opaque flag+newtype VkPipelineViewportStateCreateFlags = VkPipelineViewportStateCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** VkLogicOp++newtype VkLogicOp = VkLogicOp Int32+  deriving (Eq, Storable)++pattern VK_LOGIC_OP_CLEAR = VkLogicOp 0++pattern VK_LOGIC_OP_AND = VkLogicOp 1++pattern VK_LOGIC_OP_AND_REVERSE = VkLogicOp 2++pattern VK_LOGIC_OP_COPY = VkLogicOp 3++pattern VK_LOGIC_OP_AND_INVERTED = VkLogicOp 4++pattern VK_LOGIC_OP_NO_OP = VkLogicOp 5++pattern VK_LOGIC_OP_XOR = VkLogicOp 6++pattern VK_LOGIC_OP_OR = VkLogicOp 7++pattern VK_LOGIC_OP_NOR = VkLogicOp 8++pattern VK_LOGIC_OP_EQUIVALENT = VkLogicOp 9++pattern VK_LOGIC_OP_INVERT = VkLogicOp 10++pattern VK_LOGIC_OP_OR_REVERSE = VkLogicOp 11++pattern VK_LOGIC_OP_COPY_INVERTED = VkLogicOp 12++pattern VK_LOGIC_OP_OR_INVERTED = VkLogicOp 13++pattern VK_LOGIC_OP_NAND = VkLogicOp 14++pattern VK_LOGIC_OP_SET = VkLogicOp 15++-- ** VkPipelineCreateFlags++newtype VkPipelineCreateFlagBits = VkPipelineCreateFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkPipelineCreateFlagBits+type VkPipelineCreateFlags = VkPipelineCreateFlagBits++pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = VkPipelineCreateFlagBits 0x1++pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = VkPipelineCreateFlagBits 0x2++pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT = VkPipelineCreateFlagBits 0x4+++-- ** VkPipelineRasterizationStateCreateFlags+-- | Opaque flag+newtype VkPipelineRasterizationStateCreateFlags = VkPipelineRasterizationStateCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** VkDynamicState++newtype VkDynamicState = VkDynamicState Int32+  deriving (Eq, Storable)++pattern VK_DYNAMIC_STATE_VIEWPORT = VkDynamicState 0++pattern VK_DYNAMIC_STATE_SCISSOR = VkDynamicState 1++pattern VK_DYNAMIC_STATE_LINE_WIDTH = VkDynamicState 2++pattern VK_DYNAMIC_STATE_DEPTH_BIAS = VkDynamicState 3++pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS = VkDynamicState 4++pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS = VkDynamicState 5++pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = VkDynamicState 6++pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = VkDynamicState 7++pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE = VkDynamicState 8++-- ** VkPipelineBindPoint++newtype VkPipelineBindPoint = VkPipelineBindPoint Int32+  deriving (Eq, Storable)++pattern VK_PIPELINE_BIND_POINT_GRAPHICS = VkPipelineBindPoint 0++pattern VK_PIPELINE_BIND_POINT_COMPUTE = VkPipelineBindPoint 1++-- ** VkPipelineDynamicStateCreateFlags+-- | Opaque flag+newtype VkPipelineDynamicStateCreateFlags = VkPipelineDynamicStateCreateFlags VkFlags+  deriving (Eq, Storable)+++data VkPipelineRasterizationStateCreateInfo =+  VkPipelineRasterizationStateCreateInfo{ vkSType :: VkStructureType +                                        , vkPNext :: Ptr Void +                                        , vkFlags :: VkPipelineRasterizationStateCreateFlags +                                        , vkDepthClampEnable :: VkBool32 +                                        , vkRasterizerDiscardEnable :: VkBool32 +                                        , vkPolygonMode :: VkPolygonMode +                                        , vkCullMode :: VkCullModeFlags +                                        , vkFrontFace :: VkFrontFace +                                        , vkDepthBiasEnable :: VkBool32 +                                        , vkDepthBiasConstantFactor :: CFloat +                                        , vkDepthBiasClamp :: CFloat +                                        , vkDepthBiasSlopeFactor :: CFloat +                                        , vkLineWidth :: CFloat +                                        }+  deriving (Eq)++instance Storable VkPipelineRasterizationStateCreateInfo where+  sizeOf ~_ = 64+  alignment ~_ = 8+  peek ptr = VkPipelineRasterizationStateCreateInfo <$> peek (ptr `plusPtr` 0)+                                                    <*> peek (ptr `plusPtr` 8)+                                                    <*> peek (ptr `plusPtr` 16)+                                                    <*> peek (ptr `plusPtr` 20)+                                                    <*> peek (ptr `plusPtr` 24)+                                                    <*> peek (ptr `plusPtr` 28)+                                                    <*> peek (ptr `plusPtr` 32)+                                                    <*> peek (ptr `plusPtr` 36)+                                                    <*> peek (ptr `plusPtr` 40)+                                                    <*> peek (ptr `plusPtr` 44)+                                                    <*> peek (ptr `plusPtr` 48)+                                                    <*> peek (ptr `plusPtr` 52)+                                                    <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkDepthClampEnable (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkRasterizerDiscardEnable (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 28) (vkPolygonMode (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkCullMode (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 36) (vkFrontFace (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkDepthBiasEnable (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 44) (vkDepthBiasConstantFactor (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 48) (vkDepthBiasClamp (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 52) (vkDepthBiasSlopeFactor (poked :: VkPipelineRasterizationStateCreateInfo))+                *> poke (ptr `plusPtr` 56) (vkLineWidth (poked :: VkPipelineRasterizationStateCreateInfo))+++-- ** VkBlendOp++newtype VkBlendOp = VkBlendOp Int32+  deriving (Eq, Storable)++pattern VK_BLEND_OP_ADD = VkBlendOp 0++pattern VK_BLEND_OP_SUBTRACT = VkBlendOp 1++pattern VK_BLEND_OP_REVERSE_SUBTRACT = VkBlendOp 2++pattern VK_BLEND_OP_MIN = VkBlendOp 3++pattern VK_BLEND_OP_MAX = VkBlendOp 4++-- ** vkDestroyPipeline+foreign import ccall "vkDestroyPipeline" vkDestroyPipeline :: +  VkDevice -> VkPipeline -> Ptr VkAllocationCallbacks -> IO ()++-- ** VkPipelineShaderStageCreateFlags+-- | Opaque flag+newtype VkPipelineShaderStageCreateFlags = VkPipelineShaderStageCreateFlags VkFlags+  deriving (Eq, Storable)+++data VkPipelineViewportStateCreateInfo =+  VkPipelineViewportStateCreateInfo{ vkSType :: VkStructureType +                                   , vkPNext :: Ptr Void +                                   , vkFlags :: VkPipelineViewportStateCreateFlags +                                   , vkViewportCount :: Word32 +                                   , vkPViewports :: Ptr VkViewport +                                   , vkScissorCount :: Word32 +                                   , vkPScissors :: Ptr VkRect2D +                                   }+  deriving (Eq)++instance Storable VkPipelineViewportStateCreateInfo where+  sizeOf ~_ = 48+  alignment ~_ = 8+  peek ptr = VkPipelineViewportStateCreateInfo <$> peek (ptr `plusPtr` 0)+                                               <*> peek (ptr `plusPtr` 8)+                                               <*> peek (ptr `plusPtr` 16)+                                               <*> peek (ptr `plusPtr` 20)+                                               <*> peek (ptr `plusPtr` 24)+                                               <*> peek (ptr `plusPtr` 32)+                                               <*> peek (ptr `plusPtr` 40)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineViewportStateCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineViewportStateCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineViewportStateCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkViewportCount (poked :: VkPipelineViewportStateCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPViewports (poked :: VkPipelineViewportStateCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkScissorCount (poked :: VkPipelineViewportStateCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkPScissors (poked :: VkPipelineViewportStateCreateInfo))+++-- ** VkPipelineTessellationStateCreateFlags+-- | Opaque flag+newtype VkPipelineTessellationStateCreateFlags = VkPipelineTessellationStateCreateFlags VkFlags+  deriving (Eq, Storable)+++data VkPipelineVertexInputStateCreateInfo =+  VkPipelineVertexInputStateCreateInfo{ vkSType :: VkStructureType +                                      , vkPNext :: Ptr Void +                                      , vkFlags :: VkPipelineVertexInputStateCreateFlags +                                      , vkVertexBindingDescriptionCount :: Word32 +                                      , vkPVertexBindingDescriptions :: Ptr VkVertexInputBindingDescription +                                      , vkVertexAttributeDescriptionCount :: Word32 +                                      , vkPVertexAttributeDescriptions :: Ptr VkVertexInputAttributeDescription +                                      }+  deriving (Eq)++instance Storable VkPipelineVertexInputStateCreateInfo where+  sizeOf ~_ = 48+  alignment ~_ = 8+  peek ptr = VkPipelineVertexInputStateCreateInfo <$> peek (ptr `plusPtr` 0)+                                                  <*> peek (ptr `plusPtr` 8)+                                                  <*> peek (ptr `plusPtr` 16)+                                                  <*> peek (ptr `plusPtr` 20)+                                                  <*> peek (ptr `plusPtr` 24)+                                                  <*> peek (ptr `plusPtr` 32)+                                                  <*> peek (ptr `plusPtr` 40)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineVertexInputStateCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineVertexInputStateCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineVertexInputStateCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkVertexBindingDescriptionCount (poked :: VkPipelineVertexInputStateCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPVertexBindingDescriptions (poked :: VkPipelineVertexInputStateCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkVertexAttributeDescriptionCount (poked :: VkPipelineVertexInputStateCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkPVertexAttributeDescriptions (poked :: VkPipelineVertexInputStateCreateInfo))+++-- ** VkPrimitiveTopology++newtype VkPrimitiveTopology = VkPrimitiveTopology Int32+  deriving (Eq, Storable)++pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST = VkPrimitiveTopology 0++pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST = VkPrimitiveTopology 1++pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = VkPrimitiveTopology 2++pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = VkPrimitiveTopology 3++pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = VkPrimitiveTopology 4++pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = VkPrimitiveTopology 5++pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 6++pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 7++pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 8++pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 9++pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = VkPrimitiveTopology 10+++data VkPipelineInputAssemblyStateCreateInfo =+  VkPipelineInputAssemblyStateCreateInfo{ vkSType :: VkStructureType +                                        , vkPNext :: Ptr Void +                                        , vkFlags :: VkPipelineInputAssemblyStateCreateFlags +                                        , vkTopology :: VkPrimitiveTopology +                                        , vkPrimitiveRestartEnable :: VkBool32 +                                        }+  deriving (Eq)++instance Storable VkPipelineInputAssemblyStateCreateInfo where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek ptr = VkPipelineInputAssemblyStateCreateInfo <$> peek (ptr `plusPtr` 0)+                                                    <*> peek (ptr `plusPtr` 8)+                                                    <*> peek (ptr `plusPtr` 16)+                                                    <*> peek (ptr `plusPtr` 20)+                                                    <*> peek (ptr `plusPtr` 24)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineInputAssemblyStateCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineInputAssemblyStateCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineInputAssemblyStateCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkTopology (poked :: VkPipelineInputAssemblyStateCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPrimitiveRestartEnable (poked :: VkPipelineInputAssemblyStateCreateInfo))++++data VkPipelineColorBlendStateCreateInfo =+  VkPipelineColorBlendStateCreateInfo{ vkSType :: VkStructureType +                                     , vkPNext :: Ptr Void +                                     , vkFlags :: VkPipelineColorBlendStateCreateFlags +                                     , vkLogicOpEnable :: VkBool32 +                                     , vkLogicOp :: VkLogicOp +                                     , vkAttachmentCount :: Word32 +                                     , vkPAttachments :: Ptr VkPipelineColorBlendAttachmentState +                                     , vkBlendConstants :: Vec (ToPeano 4) CFloat +                                     }+  deriving (Eq)++instance Storable VkPipelineColorBlendStateCreateInfo where+  sizeOf ~_ = 56+  alignment ~_ = 8+  peek ptr = VkPipelineColorBlendStateCreateInfo <$> peek (ptr `plusPtr` 0)+                                                 <*> peek (ptr `plusPtr` 8)+                                                 <*> peek (ptr `plusPtr` 16)+                                                 <*> peek (ptr `plusPtr` 20)+                                                 <*> peek (ptr `plusPtr` 24)+                                                 <*> peek (ptr `plusPtr` 28)+                                                 <*> peek (ptr `plusPtr` 32)+                                                 <*> peek (ptr `plusPtr` 40)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineColorBlendStateCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineColorBlendStateCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineColorBlendStateCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkLogicOpEnable (poked :: VkPipelineColorBlendStateCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkLogicOp (poked :: VkPipelineColorBlendStateCreateInfo))+                *> poke (ptr `plusPtr` 28) (vkAttachmentCount (poked :: VkPipelineColorBlendStateCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkPAttachments (poked :: VkPipelineColorBlendStateCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkBlendConstants (poked :: VkPipelineColorBlendStateCreateInfo))++++data VkPipelineDynamicStateCreateInfo =+  VkPipelineDynamicStateCreateInfo{ vkSType :: VkStructureType +                                  , vkPNext :: Ptr Void +                                  , vkFlags :: VkPipelineDynamicStateCreateFlags +                                  , vkDynamicStateCount :: Word32 +                                  , vkPDynamicStates :: Ptr VkDynamicState +                                  }+  deriving (Eq)++instance Storable VkPipelineDynamicStateCreateInfo where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek ptr = VkPipelineDynamicStateCreateInfo <$> peek (ptr `plusPtr` 0)+                                              <*> peek (ptr `plusPtr` 8)+                                              <*> peek (ptr `plusPtr` 16)+                                              <*> peek (ptr `plusPtr` 20)+                                              <*> peek (ptr `plusPtr` 24)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDynamicStateCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDynamicStateCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDynamicStateCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkDynamicStateCount (poked :: VkPipelineDynamicStateCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPDynamicStates (poked :: VkPipelineDynamicStateCreateInfo))++++data VkSpecializationMapEntry =+  VkSpecializationMapEntry{ vkConstantID :: Word32 +                          , vkOffset :: Word32 +                          , vkSize :: CSize +                          }+  deriving (Eq)++instance Storable VkSpecializationMapEntry where+  sizeOf ~_ = 16+  alignment ~_ = 8+  peek ptr = VkSpecializationMapEntry <$> peek (ptr `plusPtr` 0)+                                      <*> peek (ptr `plusPtr` 4)+                                      <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkConstantID (poked :: VkSpecializationMapEntry))+                *> poke (ptr `plusPtr` 4) (vkOffset (poked :: VkSpecializationMapEntry))+                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSpecializationMapEntry))+++-- ** VkPipelineVertexInputStateCreateFlags+-- | Opaque flag+newtype VkPipelineVertexInputStateCreateFlags = VkPipelineVertexInputStateCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** VkVertexInputRate++newtype VkVertexInputRate = VkVertexInputRate Int32+  deriving (Eq, Storable)++pattern VK_VERTEX_INPUT_RATE_VERTEX = VkVertexInputRate 0++pattern VK_VERTEX_INPUT_RATE_INSTANCE = VkVertexInputRate 1++-- ** VkPipelineStageFlags++newtype VkPipelineStageFlagBits = VkPipelineStageFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkPipelineStageFlagBits+type VkPipelineStageFlags = VkPipelineStageFlagBits+-- | Before subsequent commands are processed+pattern VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = VkPipelineStageFlagBits 0x1+-- | Draw/DispatchIndirect command fetch+pattern VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = VkPipelineStageFlagBits 0x2+-- | Vertex/index fetch+pattern VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = VkPipelineStageFlagBits 0x4+-- | Vertex shading+pattern VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = VkPipelineStageFlagBits 0x8+-- | Tessellation control shading+pattern VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = VkPipelineStageFlagBits 0x10+-- | Tessellation evaluation shading+pattern VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = VkPipelineStageFlagBits 0x20+-- | Geometry shading+pattern VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = VkPipelineStageFlagBits 0x40+-- | Fragment shading+pattern VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = VkPipelineStageFlagBits 0x80+-- | Early fragment (depth and stencil) tests+pattern VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = VkPipelineStageFlagBits 0x100+-- | Late fragment (depth and stencil) tests+pattern VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = VkPipelineStageFlagBits 0x200+-- | Color attachment writes+pattern VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = VkPipelineStageFlagBits 0x400+-- | Compute shading+pattern VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = VkPipelineStageFlagBits 0x800+-- | Transfer/copy operations+pattern VK_PIPELINE_STAGE_TRANSFER_BIT = VkPipelineStageFlagBits 0x1000+-- | After previous commands have completed+pattern VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = VkPipelineStageFlagBits 0x2000+-- | Indicates host (CPU) is a source/sink of the dependency+pattern VK_PIPELINE_STAGE_HOST_BIT = VkPipelineStageFlagBits 0x4000+-- | All stages of the graphics pipeline+pattern VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = VkPipelineStageFlagBits 0x8000+-- | All stages supported on the queue+pattern VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = VkPipelineStageFlagBits 0x10000++++data VkPipelineColorBlendAttachmentState =+  VkPipelineColorBlendAttachmentState{ vkBlendEnable :: VkBool32 +                                     , vkSrcColorBlendFactor :: VkBlendFactor +                                     , vkDstColorBlendFactor :: VkBlendFactor +                                     , vkColorBlendOp :: VkBlendOp +                                     , vkSrcAlphaBlendFactor :: VkBlendFactor +                                     , vkDstAlphaBlendFactor :: VkBlendFactor +                                     , vkAlphaBlendOp :: VkBlendOp +                                     , vkColorWriteMask :: VkColorComponentFlags +                                     }+  deriving (Eq)++instance Storable VkPipelineColorBlendAttachmentState where+  sizeOf ~_ = 32+  alignment ~_ = 4+  peek ptr = VkPipelineColorBlendAttachmentState <$> peek (ptr `plusPtr` 0)+                                                 <*> peek (ptr `plusPtr` 4)+                                                 <*> peek (ptr `plusPtr` 8)+                                                 <*> peek (ptr `plusPtr` 12)+                                                 <*> peek (ptr `plusPtr` 16)+                                                 <*> peek (ptr `plusPtr` 20)+                                                 <*> peek (ptr `plusPtr` 24)+                                                 <*> peek (ptr `plusPtr` 28)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBlendEnable (poked :: VkPipelineColorBlendAttachmentState))+                *> poke (ptr `plusPtr` 4) (vkSrcColorBlendFactor (poked :: VkPipelineColorBlendAttachmentState))+                *> poke (ptr `plusPtr` 8) (vkDstColorBlendFactor (poked :: VkPipelineColorBlendAttachmentState))+                *> poke (ptr `plusPtr` 12) (vkColorBlendOp (poked :: VkPipelineColorBlendAttachmentState))+                *> poke (ptr `plusPtr` 16) (vkSrcAlphaBlendFactor (poked :: VkPipelineColorBlendAttachmentState))+                *> poke (ptr `plusPtr` 20) (vkDstAlphaBlendFactor (poked :: VkPipelineColorBlendAttachmentState))+                *> poke (ptr `plusPtr` 24) (vkAlphaBlendOp (poked :: VkPipelineColorBlendAttachmentState))+                *> poke (ptr `plusPtr` 28) (vkColorWriteMask (poked :: VkPipelineColorBlendAttachmentState))+++-- ** VkBlendFactor++newtype VkBlendFactor = VkBlendFactor Int32+  deriving (Eq, Storable)++pattern VK_BLEND_FACTOR_ZERO = VkBlendFactor 0++pattern VK_BLEND_FACTOR_ONE = VkBlendFactor 1++pattern VK_BLEND_FACTOR_SRC_COLOR = VkBlendFactor 2++pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = VkBlendFactor 3++pattern VK_BLEND_FACTOR_DST_COLOR = VkBlendFactor 4++pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = VkBlendFactor 5++pattern VK_BLEND_FACTOR_SRC_ALPHA = VkBlendFactor 6++pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = VkBlendFactor 7++pattern VK_BLEND_FACTOR_DST_ALPHA = VkBlendFactor 8++pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = VkBlendFactor 9++pattern VK_BLEND_FACTOR_CONSTANT_COLOR = VkBlendFactor 10++pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = VkBlendFactor 11++pattern VK_BLEND_FACTOR_CONSTANT_ALPHA = VkBlendFactor 12++pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = VkBlendFactor 13++pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = VkBlendFactor 14++pattern VK_BLEND_FACTOR_SRC1_COLOR = VkBlendFactor 15++pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = VkBlendFactor 16++pattern VK_BLEND_FACTOR_SRC1_ALPHA = VkBlendFactor 17++pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = VkBlendFactor 18++newtype VkSampleMask = VkSampleMask Word32+  deriving (Eq, Storable)++-- ** VkPipelineMultisampleStateCreateFlags+-- | Opaque flag+newtype VkPipelineMultisampleStateCreateFlags = VkPipelineMultisampleStateCreateFlags VkFlags+  deriving (Eq, Storable)+++data VkPipelineMultisampleStateCreateInfo =+  VkPipelineMultisampleStateCreateInfo{ vkSType :: VkStructureType +                                      , vkPNext :: Ptr Void +                                      , vkFlags :: VkPipelineMultisampleStateCreateFlags +                                      , vkRasterizationSamples :: VkSampleCountFlagBits +                                      , vkSampleShadingEnable :: VkBool32 +                                      , vkMinSampleShading :: CFloat +                                      , vkPSampleMask :: Ptr VkSampleMask +                                      , vkAlphaToCoverageEnable :: VkBool32 +                                      , vkAlphaToOneEnable :: VkBool32 +                                      }+  deriving (Eq)++instance Storable VkPipelineMultisampleStateCreateInfo where+  sizeOf ~_ = 48+  alignment ~_ = 8+  peek ptr = VkPipelineMultisampleStateCreateInfo <$> peek (ptr `plusPtr` 0)+                                                  <*> peek (ptr `plusPtr` 8)+                                                  <*> peek (ptr `plusPtr` 16)+                                                  <*> peek (ptr `plusPtr` 20)+                                                  <*> peek (ptr `plusPtr` 24)+                                                  <*> peek (ptr `plusPtr` 28)+                                                  <*> peek (ptr `plusPtr` 32)+                                                  <*> peek (ptr `plusPtr` 40)+                                                  <*> peek (ptr `plusPtr` 44)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineMultisampleStateCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineMultisampleStateCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineMultisampleStateCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkRasterizationSamples (poked :: VkPipelineMultisampleStateCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkSampleShadingEnable (poked :: VkPipelineMultisampleStateCreateInfo))+                *> poke (ptr `plusPtr` 28) (vkMinSampleShading (poked :: VkPipelineMultisampleStateCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkPSampleMask (poked :: VkPipelineMultisampleStateCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkAlphaToCoverageEnable (poked :: VkPipelineMultisampleStateCreateInfo))+                *> poke (ptr `plusPtr` 44) (vkAlphaToOneEnable (poked :: VkPipelineMultisampleStateCreateInfo))++++data VkVertexInputBindingDescription =+  VkVertexInputBindingDescription{ vkBinding :: Word32 +                                 , vkStride :: Word32 +                                 , vkInputRate :: VkVertexInputRate +                                 }+  deriving (Eq)++instance Storable VkVertexInputBindingDescription where+  sizeOf ~_ = 12+  alignment ~_ = 4+  peek ptr = VkVertexInputBindingDescription <$> peek (ptr `plusPtr` 0)+                                             <*> peek (ptr `plusPtr` 4)+                                             <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBinding (poked :: VkVertexInputBindingDescription))+                *> poke (ptr `plusPtr` 4) (vkStride (poked :: VkVertexInputBindingDescription))+                *> poke (ptr `plusPtr` 8) (vkInputRate (poked :: VkVertexInputBindingDescription))++++data VkPipelineDepthStencilStateCreateInfo =+  VkPipelineDepthStencilStateCreateInfo{ vkSType :: VkStructureType +                                       , vkPNext :: Ptr Void +                                       , vkFlags :: VkPipelineDepthStencilStateCreateFlags +                                       , vkDepthTestEnable :: VkBool32 +                                       , vkDepthWriteEnable :: VkBool32 +                                       , vkDepthCompareOp :: VkCompareOp +                                       , vkDepthBoundsTestEnable :: VkBool32 +                                       , vkStencilTestEnable :: VkBool32 +                                       , vkFront :: VkStencilOpState +                                       , vkBack :: VkStencilOpState +                                       , vkMinDepthBounds :: CFloat +                                       , vkMaxDepthBounds :: CFloat +                                       }+  deriving (Eq)++instance Storable VkPipelineDepthStencilStateCreateInfo where+  sizeOf ~_ = 104+  alignment ~_ = 8+  peek ptr = VkPipelineDepthStencilStateCreateInfo <$> peek (ptr `plusPtr` 0)+                                                   <*> peek (ptr `plusPtr` 8)+                                                   <*> peek (ptr `plusPtr` 16)+                                                   <*> peek (ptr `plusPtr` 20)+                                                   <*> peek (ptr `plusPtr` 24)+                                                   <*> peek (ptr `plusPtr` 28)+                                                   <*> peek (ptr `plusPtr` 32)+                                                   <*> peek (ptr `plusPtr` 36)+                                                   <*> peek (ptr `plusPtr` 40)+                                                   <*> peek (ptr `plusPtr` 68)+                                                   <*> peek (ptr `plusPtr` 96)+                                                   <*> peek (ptr `plusPtr` 100)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkDepthTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkDepthWriteEnable (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 28) (vkDepthCompareOp (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkDepthBoundsTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 36) (vkStencilTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkFront (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 68) (vkBack (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 96) (vkMinDepthBounds (poked :: VkPipelineDepthStencilStateCreateInfo))+                *> poke (ptr `plusPtr` 100) (vkMaxDepthBounds (poked :: VkPipelineDepthStencilStateCreateInfo))+++-- ** vkCreateComputePipelines+foreign import ccall "vkCreateComputePipelines" vkCreateComputePipelines :: +  VkDevice ->+  VkPipelineCache ->+    Word32 ->+      Ptr VkComputePipelineCreateInfo ->+        Ptr VkAllocationCallbacks -> Ptr VkPipeline -> IO VkResult+++data VkStencilOpState =+  VkStencilOpState{ vkFailOp :: VkStencilOp +                  , vkPassOp :: VkStencilOp +                  , vkDepthFailOp :: VkStencilOp +                  , vkCompareOp :: VkCompareOp +                  , vkCompareMask :: Word32 +                  , vkWriteMask :: Word32 +                  , vkReference :: Word32 +                  }+  deriving (Eq)++instance Storable VkStencilOpState where+  sizeOf ~_ = 28+  alignment ~_ = 4+  peek ptr = VkStencilOpState <$> peek (ptr `plusPtr` 0)+                              <*> peek (ptr `plusPtr` 4)+                              <*> peek (ptr `plusPtr` 8)+                              <*> peek (ptr `plusPtr` 12)+                              <*> peek (ptr `plusPtr` 16)+                              <*> peek (ptr `plusPtr` 20)+                              <*> peek (ptr `plusPtr` 24)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkFailOp (poked :: VkStencilOpState))+                *> poke (ptr `plusPtr` 4) (vkPassOp (poked :: VkStencilOpState))+                *> poke (ptr `plusPtr` 8) (vkDepthFailOp (poked :: VkStencilOpState))+                *> poke (ptr `plusPtr` 12) (vkCompareOp (poked :: VkStencilOpState))+                *> poke (ptr `plusPtr` 16) (vkCompareMask (poked :: VkStencilOpState))+                *> poke (ptr `plusPtr` 20) (vkWriteMask (poked :: VkStencilOpState))+                *> poke (ptr `plusPtr` 24) (vkReference (poked :: VkStencilOpState))++
+ src/Graphics/Vulkan/PipelineCache.hs view
@@ -0,0 +1,84 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.PipelineCache where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize+                      , CSize(..)+                      )+-- ** vkCreatePipelineCache+foreign import ccall "vkCreatePipelineCache" vkCreatePipelineCache :: +  VkDevice ->+  Ptr VkPipelineCacheCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkPipelineCache -> IO VkResult++-- ** vkGetPipelineCacheData+foreign import ccall "vkGetPipelineCacheData" vkGetPipelineCacheData :: +  VkDevice -> VkPipelineCache -> Ptr CSize -> Ptr Void -> IO VkResult++newtype VkPipelineCache = VkPipelineCache Word64+  deriving (Eq, Storable)+++data VkPipelineCacheCreateInfo =+  VkPipelineCacheCreateInfo{ vkSType :: VkStructureType +                           , vkPNext :: Ptr Void +                           , vkFlags :: VkPipelineCacheCreateFlags +                           , vkInitialDataSize :: CSize +                           , vkPInitialData :: Ptr Void +                           }+  deriving (Eq)++instance Storable VkPipelineCacheCreateInfo where+  sizeOf ~_ = 40+  alignment ~_ = 8+  peek ptr = VkPipelineCacheCreateInfo <$> peek (ptr `plusPtr` 0)+                                       <*> peek (ptr `plusPtr` 8)+                                       <*> peek (ptr `plusPtr` 16)+                                       <*> peek (ptr `plusPtr` 24)+                                       <*> peek (ptr `plusPtr` 32)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineCacheCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineCacheCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineCacheCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkInitialDataSize (poked :: VkPipelineCacheCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkPInitialData (poked :: VkPipelineCacheCreateInfo))+++-- ** vkMergePipelineCaches+foreign import ccall "vkMergePipelineCaches" vkMergePipelineCaches :: +  VkDevice ->+  VkPipelineCache -> Word32 -> Ptr VkPipelineCache -> IO VkResult++-- ** VkPipelineCacheCreateFlags+-- | Opaque flag+newtype VkPipelineCacheCreateFlags = VkPipelineCacheCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** vkDestroyPipelineCache+foreign import ccall "vkDestroyPipelineCache" vkDestroyPipelineCache :: +  VkDevice -> VkPipelineCache -> Ptr VkAllocationCallbacks -> IO ()+
+ src/Graphics/Vulkan/PipelineLayout.hs view
@@ -0,0 +1,104 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.PipelineLayout where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Graphics.Vulkan.DescriptorSet( VkDescriptorSetLayout(..)+                                    )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Shader( VkShaderStageFlagBits(..)+                             , VkShaderStageFlags(..)+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize(..)+                      )+-- ** VkPipelineLayoutCreateFlags+-- | Opaque flag+newtype VkPipelineLayoutCreateFlags = VkPipelineLayoutCreateFlags VkFlags+  deriving (Eq, Storable)++newtype VkPipelineLayout = VkPipelineLayout Word64+  deriving (Eq, Storable)++-- ** vkDestroyPipelineLayout+foreign import ccall "vkDestroyPipelineLayout" vkDestroyPipelineLayout :: +  VkDevice -> VkPipelineLayout -> Ptr VkAllocationCallbacks -> IO ()+++data VkPushConstantRange =+  VkPushConstantRange{ vkStageFlags :: VkShaderStageFlags +                     , vkOffset :: Word32 +                     , vkSize :: Word32 +                     }+  deriving (Eq)++instance Storable VkPushConstantRange where+  sizeOf ~_ = 12+  alignment ~_ = 4+  peek ptr = VkPushConstantRange <$> peek (ptr `plusPtr` 0)+                                 <*> peek (ptr `plusPtr` 4)+                                 <*> peek (ptr `plusPtr` 8)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkStageFlags (poked :: VkPushConstantRange))+                *> poke (ptr `plusPtr` 4) (vkOffset (poked :: VkPushConstantRange))+                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkPushConstantRange))++++data VkPipelineLayoutCreateInfo =+  VkPipelineLayoutCreateInfo{ vkSType :: VkStructureType +                            , vkPNext :: Ptr Void +                            , vkFlags :: VkPipelineLayoutCreateFlags +                            , vkSetLayoutCount :: Word32 +                            , vkPSetLayouts :: Ptr VkDescriptorSetLayout +                            , vkPushConstantRangeCount :: Word32 +                            , vkPPushConstantRanges :: Ptr VkPushConstantRange +                            }+  deriving (Eq)++instance Storable VkPipelineLayoutCreateInfo where+  sizeOf ~_ = 48+  alignment ~_ = 8+  peek ptr = VkPipelineLayoutCreateInfo <$> peek (ptr `plusPtr` 0)+                                        <*> peek (ptr `plusPtr` 8)+                                        <*> peek (ptr `plusPtr` 16)+                                        <*> peek (ptr `plusPtr` 20)+                                        <*> peek (ptr `plusPtr` 24)+                                        <*> peek (ptr `plusPtr` 32)+                                        <*> peek (ptr `plusPtr` 40)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineLayoutCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineLayoutCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineLayoutCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkSetLayoutCount (poked :: VkPipelineLayoutCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkPSetLayouts (poked :: VkPipelineLayoutCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkPushConstantRangeCount (poked :: VkPipelineLayoutCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkPPushConstantRanges (poked :: VkPipelineLayoutCreateInfo))+++-- ** vkCreatePipelineLayout+foreign import ccall "vkCreatePipelineLayout" vkCreatePipelineLayout :: +  VkDevice ->+  Ptr VkPipelineLayoutCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkPipelineLayout -> IO VkResult+
+ src/Graphics/Vulkan/Query.hs view
@@ -0,0 +1,161 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Query where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Int( Int32+               )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkDeviceSize(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize+                      , CSize(..)+                      )+-- ** vkGetQueryPoolResults+foreign import ccall "vkGetQueryPoolResults" vkGetQueryPoolResults :: +  VkDevice ->+  VkQueryPool ->+    Word32 ->+      Word32 ->+        CSize ->+          Ptr Void -> VkDeviceSize -> VkQueryResultFlags -> IO VkResult++-- ** vkDestroyQueryPool+foreign import ccall "vkDestroyQueryPool" vkDestroyQueryPool :: +  VkDevice -> VkQueryPool -> Ptr VkAllocationCallbacks -> IO ()+++data VkQueryPoolCreateInfo =+  VkQueryPoolCreateInfo{ vkSType :: VkStructureType +                       , vkPNext :: Ptr Void +                       , vkFlags :: VkQueryPoolCreateFlags +                       , vkQueryType :: VkQueryType +                       , vkQueryCount :: Word32 +                       , vkPipelineStatistics :: VkQueryPipelineStatisticFlags +                       }+  deriving (Eq)++instance Storable VkQueryPoolCreateInfo where+  sizeOf ~_ = 32+  alignment ~_ = 8+  peek ptr = VkQueryPoolCreateInfo <$> peek (ptr `plusPtr` 0)+                                   <*> peek (ptr `plusPtr` 8)+                                   <*> peek (ptr `plusPtr` 16)+                                   <*> peek (ptr `plusPtr` 20)+                                   <*> peek (ptr `plusPtr` 24)+                                   <*> peek (ptr `plusPtr` 28)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkQueryPoolCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkQueryPoolCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkQueryPoolCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkQueryType (poked :: VkQueryPoolCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkQueryCount (poked :: VkQueryPoolCreateInfo))+                *> poke (ptr `plusPtr` 28) (vkPipelineStatistics (poked :: VkQueryPoolCreateInfo))+++-- ** VkQueryResultFlags++newtype VkQueryResultFlagBits = VkQueryResultFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkQueryResultFlagBits+type VkQueryResultFlags = VkQueryResultFlagBits+-- | Results of the queries are written to the destination buffer as 64-bit values+pattern VK_QUERY_RESULT_64_BIT = VkQueryResultFlagBits 0x1+-- | Results of the queries are waited on before proceeding with the result copy+pattern VK_QUERY_RESULT_WAIT_BIT = VkQueryResultFlagBits 0x2+-- | Besides the results of the query, the availability of the results is also written+pattern VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = VkQueryResultFlagBits 0x4+-- | Copy the partial results of the query even if the final results aren't available+pattern VK_QUERY_RESULT_PARTIAL_BIT = VkQueryResultFlagBits 0x8+++-- ** VkQueryType++newtype VkQueryType = VkQueryType Int32+  deriving (Eq, Storable)++pattern VK_QUERY_TYPE_OCCLUSION = VkQueryType 0+-- | Optional+pattern VK_QUERY_TYPE_PIPELINE_STATISTICS = VkQueryType 1++pattern VK_QUERY_TYPE_TIMESTAMP = VkQueryType 2++newtype VkQueryPool = VkQueryPool Word64+  deriving (Eq, Storable)++-- ** vkCreateQueryPool+foreign import ccall "vkCreateQueryPool" vkCreateQueryPool :: +  VkDevice ->+  Ptr VkQueryPoolCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkQueryPool -> IO VkResult++-- ** VkQueryControlFlags++newtype VkQueryControlFlagBits = VkQueryControlFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkQueryControlFlagBits+type VkQueryControlFlags = VkQueryControlFlagBits+-- | Require precise results to be collected by the query+pattern VK_QUERY_CONTROL_PRECISE_BIT = VkQueryControlFlagBits 0x1+++-- ** VkQueryPoolCreateFlags+-- | Opaque flag+newtype VkQueryPoolCreateFlags = VkQueryPoolCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** VkQueryPipelineStatisticFlags++newtype VkQueryPipelineStatisticFlagBits = VkQueryPipelineStatisticFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkQueryPipelineStatisticFlagBits+type VkQueryPipelineStatisticFlags = VkQueryPipelineStatisticFlagBits+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = VkQueryPipelineStatisticFlagBits 0x1+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x2+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x4+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x8+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x10+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x20+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x40+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x80+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = VkQueryPipelineStatisticFlagBits 0x100+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x200+-- | Optional+pattern VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x400++
+ src/Graphics/Vulkan/Queue.hs view
@@ -0,0 +1,84 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+module Graphics.Vulkan.Queue where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Graphics.Vulkan.Pipeline( VkPipelineStageFlagBits(..)+                               , VkPipelineStageFlags(..)+                               )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Graphics.Vulkan.CommandBuffer( VkCommandBuffer(..)+                                    )+import Foreign.Storable( Storable(..)+                       )+import Graphics.Vulkan.Fence( VkFence(..)+                            )+import Data.Void( Void+                )+import Graphics.Vulkan.QueueSemaphore( VkSemaphore(..)+                                     )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+data VkQueue_T+type VkQueue = Ptr VkQueue_T++-- ** vkDeviceWaitIdle+foreign import ccall "vkDeviceWaitIdle" vkDeviceWaitIdle :: +  VkDevice -> IO VkResult++-- ** vkQueueSubmit+foreign import ccall "vkQueueSubmit" vkQueueSubmit :: +  VkQueue -> Word32 -> Ptr VkSubmitInfo -> VkFence -> IO VkResult++-- ** vkQueueWaitIdle+foreign import ccall "vkQueueWaitIdle" vkQueueWaitIdle :: +  VkQueue -> IO VkResult++-- ** vkGetDeviceQueue+foreign import ccall "vkGetDeviceQueue" vkGetDeviceQueue :: +  VkDevice -> Word32 -> Word32 -> Ptr VkQueue -> IO ()+++data VkSubmitInfo =+  VkSubmitInfo{ vkSType :: VkStructureType +              , vkPNext :: Ptr Void +              , vkWaitSemaphoreCount :: Word32 +              , vkPWaitSemaphores :: Ptr VkSemaphore +              , vkPWaitDstStageMask :: Ptr VkPipelineStageFlags +              , vkCommandBufferCount :: Word32 +              , vkPCommandBuffers :: Ptr VkCommandBuffer +              , vkSignalSemaphoreCount :: Word32 +              , vkPSignalSemaphores :: Ptr VkSemaphore +              }+  deriving (Eq)++instance Storable VkSubmitInfo where+  sizeOf ~_ = 72+  alignment ~_ = 8+  peek ptr = VkSubmitInfo <$> 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` 48)+                          <*> peek (ptr `plusPtr` 56)+                          <*> peek (ptr `plusPtr` 64)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSubmitInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSubmitInfo))+                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkSubmitInfo))+                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkSubmitInfo))+                *> poke (ptr `plusPtr` 32) (vkPWaitDstStageMask (poked :: VkSubmitInfo))+                *> poke (ptr `plusPtr` 40) (vkCommandBufferCount (poked :: VkSubmitInfo))+                *> poke (ptr `plusPtr` 48) (vkPCommandBuffers (poked :: VkSubmitInfo))+                *> poke (ptr `plusPtr` 56) (vkSignalSemaphoreCount (poked :: VkSubmitInfo))+                *> poke (ptr `plusPtr` 64) (vkPSignalSemaphores (poked :: VkSubmitInfo))++
+ src/Graphics/Vulkan/QueueSemaphore.hs view
@@ -0,0 +1,68 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.QueueSemaphore where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize(..)+                      )+-- ** VkSemaphoreCreateFlags+-- | Opaque flag+newtype VkSemaphoreCreateFlags = VkSemaphoreCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** vkDestroySemaphore+foreign import ccall "vkDestroySemaphore" vkDestroySemaphore :: +  VkDevice -> VkSemaphore -> Ptr VkAllocationCallbacks -> IO ()++newtype VkSemaphore = VkSemaphore Word64+  deriving (Eq, Storable)+++data VkSemaphoreCreateInfo =+  VkSemaphoreCreateInfo{ vkSType :: VkStructureType +                       , vkPNext :: Ptr Void +                       , vkFlags :: VkSemaphoreCreateFlags +                       }+  deriving (Eq)++instance Storable VkSemaphoreCreateInfo where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkSemaphoreCreateInfo <$> peek (ptr `plusPtr` 0)+                                   <*> peek (ptr `plusPtr` 8)+                                   <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSemaphoreCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSemaphoreCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSemaphoreCreateInfo))+++-- ** vkCreateSemaphore+foreign import ccall "vkCreateSemaphore" vkCreateSemaphore :: +  VkDevice ->+  Ptr VkSemaphoreCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkSemaphore -> IO VkResult+
+ src/Graphics/Vulkan/Sampler.hs view
@@ -0,0 +1,215 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Sampler where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Int( Int32+               )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkBool32(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CFloat+                      , CFloat(..)+                      , CSize(..)+                      )+-- ** VkSamplerAddressMode++newtype VkSamplerAddressMode = VkSamplerAddressMode Int32+  deriving (Eq, Storable)++pattern VK_SAMPLER_ADDRESS_MODE_REPEAT = VkSamplerAddressMode 0++pattern VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = VkSamplerAddressMode 1++pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = VkSamplerAddressMode 2++pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = VkSamplerAddressMode 3++pattern VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = VkSamplerAddressMode 4++-- ** VkFilter++newtype VkFilter = VkFilter Int32+  deriving (Eq, Storable)++pattern VK_FILTER_NEAREST = VkFilter 0++pattern VK_FILTER_LINEAR = VkFilter 1++-- ** VkBorderColor++newtype VkBorderColor = VkBorderColor Int32+  deriving (Eq, Storable)++pattern VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = VkBorderColor 0++pattern VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = VkBorderColor 1++pattern VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = VkBorderColor 2++pattern VK_BORDER_COLOR_INT_OPAQUE_BLACK = VkBorderColor 3++pattern VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = VkBorderColor 4++pattern VK_BORDER_COLOR_INT_OPAQUE_WHITE = VkBorderColor 5++-- ** VkCompareOp++newtype VkCompareOp = VkCompareOp Int32+  deriving (Eq, Storable)++pattern VK_COMPARE_OP_NEVER = VkCompareOp 0++pattern VK_COMPARE_OP_LESS = VkCompareOp 1++pattern VK_COMPARE_OP_EQUAL = VkCompareOp 2++pattern VK_COMPARE_OP_LESS_OR_EQUAL = VkCompareOp 3++pattern VK_COMPARE_OP_GREATER = VkCompareOp 4++pattern VK_COMPARE_OP_NOT_EQUAL = VkCompareOp 5++pattern VK_COMPARE_OP_GREATER_OR_EQUAL = VkCompareOp 6++pattern VK_COMPARE_OP_ALWAYS = VkCompareOp 7++newtype VkSampler = VkSampler Word64+  deriving (Eq, Storable)+++data VkSamplerCreateInfo =+  VkSamplerCreateInfo{ vkSType :: VkStructureType +                     , vkPNext :: Ptr Void +                     , vkFlags :: VkSamplerCreateFlags +                     , vkMagFilter :: VkFilter +                     , vkMinFilter :: VkFilter +                     , vkMipmapMode :: VkSamplerMipmapMode +                     , vkAddressModeU :: VkSamplerAddressMode +                     , vkAddressModeV :: VkSamplerAddressMode +                     , vkAddressModeW :: VkSamplerAddressMode +                     , vkMipLodBias :: CFloat +                     , vkAnisotropyEnable :: VkBool32 +                     , vkMaxAnisotropy :: CFloat +                     , vkCompareEnable :: VkBool32 +                     , vkCompareOp :: VkCompareOp +                     , vkMinLod :: CFloat +                     , vkMaxLod :: CFloat +                     , vkBorderColor :: VkBorderColor +                     , vkUnnormalizedCoordinates :: VkBool32 +                     }+  deriving (Eq)++instance Storable VkSamplerCreateInfo where+  sizeOf ~_ = 80+  alignment ~_ = 8+  peek ptr = VkSamplerCreateInfo <$> peek (ptr `plusPtr` 0)+                                 <*> peek (ptr `plusPtr` 8)+                                 <*> peek (ptr `plusPtr` 16)+                                 <*> peek (ptr `plusPtr` 20)+                                 <*> peek (ptr `plusPtr` 24)+                                 <*> peek (ptr `plusPtr` 28)+                                 <*> peek (ptr `plusPtr` 32)+                                 <*> peek (ptr `plusPtr` 36)+                                 <*> peek (ptr `plusPtr` 40)+                                 <*> peek (ptr `plusPtr` 44)+                                 <*> peek (ptr `plusPtr` 48)+                                 <*> peek (ptr `plusPtr` 52)+                                 <*> peek (ptr `plusPtr` 56)+                                 <*> peek (ptr `plusPtr` 60)+                                 <*> peek (ptr `plusPtr` 64)+                                 <*> peek (ptr `plusPtr` 68)+                                 <*> peek (ptr `plusPtr` 72)+                                 <*> peek (ptr `plusPtr` 76)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 20) (vkMagFilter (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkMinFilter (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 28) (vkMipmapMode (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkAddressModeU (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 36) (vkAddressModeV (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 40) (vkAddressModeW (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 44) (vkMipLodBias (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 48) (vkAnisotropyEnable (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 52) (vkMaxAnisotropy (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 56) (vkCompareEnable (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 60) (vkCompareOp (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 64) (vkMinLod (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 68) (vkMaxLod (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 72) (vkBorderColor (poked :: VkSamplerCreateInfo))+                *> poke (ptr `plusPtr` 76) (vkUnnormalizedCoordinates (poked :: VkSamplerCreateInfo))+++-- ** VkSamplerCreateFlags+-- | Opaque flag+newtype VkSamplerCreateFlags = VkSamplerCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** VkSamplerMipmapMode++newtype VkSamplerMipmapMode = VkSamplerMipmapMode Int32+  deriving (Eq, Storable)+-- | Choose nearest mip level+pattern VK_SAMPLER_MIPMAP_MODE_NEAREST = VkSamplerMipmapMode 0+-- | Linear filter between mip levels+pattern VK_SAMPLER_MIPMAP_MODE_LINEAR = VkSamplerMipmapMode 1++-- ** vkCreateSampler+foreign import ccall "vkCreateSampler" vkCreateSampler :: +  VkDevice ->+  Ptr VkSamplerCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkSampler -> IO VkResult++-- ** VkSampleCountFlags++newtype VkSampleCountFlagBits = VkSampleCountFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkSampleCountFlagBits+type VkSampleCountFlags = VkSampleCountFlagBits+-- | Sample count 1 supported+pattern VK_SAMPLE_COUNT_1_BIT = VkSampleCountFlagBits 0x1+-- | Sample count 2 supported+pattern VK_SAMPLE_COUNT_2_BIT = VkSampleCountFlagBits 0x2+-- | Sample count 4 supported+pattern VK_SAMPLE_COUNT_4_BIT = VkSampleCountFlagBits 0x4+-- | Sample count 8 supported+pattern VK_SAMPLE_COUNT_8_BIT = VkSampleCountFlagBits 0x8+-- | Sample count 16 supported+pattern VK_SAMPLE_COUNT_16_BIT = VkSampleCountFlagBits 0x10+-- | Sample count 32 supported+pattern VK_SAMPLE_COUNT_32_BIT = VkSampleCountFlagBits 0x20+-- | Sample count 64 supported+pattern VK_SAMPLE_COUNT_64_BIT = VkSampleCountFlagBits 0x40+++-- ** vkDestroySampler+foreign import ccall "vkDestroySampler" vkDestroySampler :: +  VkDevice -> VkSampler -> Ptr VkAllocationCallbacks -> IO ()+
+ src/Graphics/Vulkan/Shader.hs view
@@ -0,0 +1,102 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.Shader where+import Graphics.Vulkan.Device( VkDevice(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkInternalAllocationType(..)+                             , PFN_vkAllocationFunction+                             , PFN_vkReallocationFunction+                             , PFN_vkInternalAllocationNotification+                             , VkAllocationCallbacks(..)+                             , VkSystemAllocationScope(..)+                             , PFN_vkFreeFunction+                             , PFN_vkInternalFreeNotification+                             )+import Graphics.Vulkan.Core( VkResult(..)+                           , VkFlags(..)+                           , VkStructureType(..)+                           )+import Foreign.C.Types( CSize+                      , CSize(..)+                      )++data VkShaderModuleCreateInfo =+  VkShaderModuleCreateInfo{ vkSType :: VkStructureType +                          , vkPNext :: Ptr Void +                          , vkFlags :: VkShaderModuleCreateFlags +                          , vkCodeSize :: CSize +                          , vkPCode :: Ptr Word32 +                          }+  deriving (Eq)++instance Storable VkShaderModuleCreateInfo where+  sizeOf ~_ = 40+  alignment ~_ = 8+  peek ptr = VkShaderModuleCreateInfo <$> peek (ptr `plusPtr` 0)+                                      <*> peek (ptr `plusPtr` 8)+                                      <*> peek (ptr `plusPtr` 16)+                                      <*> peek (ptr `plusPtr` 24)+                                      <*> peek (ptr `plusPtr` 32)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkShaderModuleCreateInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkShaderModuleCreateInfo))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkShaderModuleCreateInfo))+                *> poke (ptr `plusPtr` 24) (vkCodeSize (poked :: VkShaderModuleCreateInfo))+                *> poke (ptr `plusPtr` 32) (vkPCode (poked :: VkShaderModuleCreateInfo))+++-- ** vkDestroyShaderModule+foreign import ccall "vkDestroyShaderModule" vkDestroyShaderModule :: +  VkDevice -> VkShaderModule -> Ptr VkAllocationCallbacks -> IO ()++-- ** VkShaderModuleCreateFlags+-- | Opaque flag+newtype VkShaderModuleCreateFlags = VkShaderModuleCreateFlags VkFlags+  deriving (Eq, Storable)++-- ** VkShaderStageFlags++newtype VkShaderStageFlagBits = VkShaderStageFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkShaderStageFlagBits+type VkShaderStageFlags = VkShaderStageFlagBits++pattern VK_SHADER_STAGE_VERTEX_BIT = VkShaderStageFlagBits 0x1++pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = VkShaderStageFlagBits 0x2++pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = VkShaderStageFlagBits 0x4++pattern VK_SHADER_STAGE_GEOMETRY_BIT = VkShaderStageFlagBits 0x8++pattern VK_SHADER_STAGE_FRAGMENT_BIT = VkShaderStageFlagBits 0x10++pattern VK_SHADER_STAGE_COMPUTE_BIT = VkShaderStageFlagBits 0x20++pattern VK_SHADER_STAGE_ALL_GRAPHICS = VkShaderStageFlagBits 0x1f++pattern VK_SHADER_STAGE_ALL = VkShaderStageFlagBits 0x7fffffff++newtype VkShaderModule = VkShaderModule Word64+  deriving (Eq, Storable)++-- ** vkCreateShaderModule+foreign import ccall "vkCreateShaderModule" vkCreateShaderModule :: +  VkDevice ->+  Ptr VkShaderModuleCreateInfo ->+    Ptr VkAllocationCallbacks -> Ptr VkShaderModule -> IO VkResult+
+ src/Graphics/Vulkan/SparseResourceMemoryManagement.hs view
@@ -0,0 +1,296 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE Strict #-}+{-# LANGUAGE PatternSynonyms #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Graphics.Vulkan.SparseResourceMemoryManagement where+import Graphics.Vulkan.Device( VkPhysicalDevice(..)+                             , VkDevice(..)+                             )+import Graphics.Vulkan.Buffer( VkBuffer(..)+                             )+import Data.Word( Word64+                , Word32+                )+import Foreign.Ptr( Ptr+                  , plusPtr+                  )+import Graphics.Vulkan.Queue( VkQueue(..)+                            )+import Data.Int( Int32+               )+import Data.Bits( Bits+                , FiniteBits+                )+import Foreign.Storable( Storable(..)+                       )+import Graphics.Vulkan.Fence( VkFence(..)+                            )+import Data.Void( Void+                )+import Graphics.Vulkan.Memory( VkDeviceMemory(..)+                             )+import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)+                              )+import Graphics.Vulkan.Image( VkImageUsageFlags(..)+                            , VkImage(..)+                            , VkImageSubresource(..)+                            , VkImageType(..)+                            , VkImageAspectFlagBits(..)+                            , VkImageUsageFlagBits(..)+                            , VkImageTiling(..)+                            , VkImageAspectFlags(..)+                            )+import Graphics.Vulkan.QueueSemaphore( VkSemaphore(..)+                                     )+import Graphics.Vulkan.Core( VkExtent3D(..)+                           , VkResult(..)+                           , VkDeviceSize(..)+                           , VkFlags(..)+                           , VkFormat(..)+                           , VkOffset3D(..)+                           , VkStructureType(..)+                           )++data VkSparseImageMemoryRequirements =+  VkSparseImageMemoryRequirements{ vkFormatProperties :: VkSparseImageFormatProperties +                                 , vkImageMipTailFirstLod :: Word32 +                                 , vkImageMipTailSize :: VkDeviceSize +                                 , vkImageMipTailOffset :: VkDeviceSize +                                 , vkImageMipTailStride :: VkDeviceSize +                                 }+  deriving (Eq)++instance Storable VkSparseImageMemoryRequirements where+  sizeOf ~_ = 48+  alignment ~_ = 8+  peek ptr = VkSparseImageMemoryRequirements <$> peek (ptr `plusPtr` 0)+                                             <*> peek (ptr `plusPtr` 20)+                                             <*> peek (ptr `plusPtr` 24)+                                             <*> peek (ptr `plusPtr` 32)+                                             <*> peek (ptr `plusPtr` 40)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkFormatProperties (poked :: VkSparseImageMemoryRequirements))+                *> poke (ptr `plusPtr` 20) (vkImageMipTailFirstLod (poked :: VkSparseImageMemoryRequirements))+                *> poke (ptr `plusPtr` 24) (vkImageMipTailSize (poked :: VkSparseImageMemoryRequirements))+                *> poke (ptr `plusPtr` 32) (vkImageMipTailOffset (poked :: VkSparseImageMemoryRequirements))+                *> poke (ptr `plusPtr` 40) (vkImageMipTailStride (poked :: VkSparseImageMemoryRequirements))++++data VkSparseMemoryBind =+  VkSparseMemoryBind{ vkResourceOffset :: VkDeviceSize +                    , vkSize :: VkDeviceSize +                    , vkMemory :: VkDeviceMemory +                    , vkMemoryOffset :: VkDeviceSize +                    , vkFlags :: VkSparseMemoryBindFlags +                    }+  deriving (Eq)++instance Storable VkSparseMemoryBind where+  sizeOf ~_ = 40+  alignment ~_ = 8+  peek ptr = VkSparseMemoryBind <$> peek (ptr `plusPtr` 0)+                                <*> peek (ptr `plusPtr` 8)+                                <*> peek (ptr `plusPtr` 16)+                                <*> peek (ptr `plusPtr` 24)+                                <*> peek (ptr `plusPtr` 32)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkResourceOffset (poked :: VkSparseMemoryBind))+                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSparseMemoryBind))+                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkSparseMemoryBind))+                *> poke (ptr `plusPtr` 24) (vkMemoryOffset (poked :: VkSparseMemoryBind))+                *> poke (ptr `plusPtr` 32) (vkFlags (poked :: VkSparseMemoryBind))++++data VkSparseImageMemoryBind =+  VkSparseImageMemoryBind{ vkSubresource :: VkImageSubresource +                         , vkOffset :: VkOffset3D +                         , vkExtent :: VkExtent3D +                         , vkMemory :: VkDeviceMemory +                         , vkMemoryOffset :: VkDeviceSize +                         , vkFlags :: VkSparseMemoryBindFlags +                         }+  deriving (Eq)++instance Storable VkSparseImageMemoryBind where+  sizeOf ~_ = 64+  alignment ~_ = 8+  peek ptr = VkSparseImageMemoryBind <$> peek (ptr `plusPtr` 0)+                                     <*> peek (ptr `plusPtr` 12)+                                     <*> peek (ptr `plusPtr` 24)+                                     <*> peek (ptr `plusPtr` 40)+                                     <*> peek (ptr `plusPtr` 48)+                                     <*> peek (ptr `plusPtr` 56)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSubresource (poked :: VkSparseImageMemoryBind))+                *> poke (ptr `plusPtr` 12) (vkOffset (poked :: VkSparseImageMemoryBind))+                *> poke (ptr `plusPtr` 24) (vkExtent (poked :: VkSparseImageMemoryBind))+                *> poke (ptr `plusPtr` 40) (vkMemory (poked :: VkSparseImageMemoryBind))+                *> poke (ptr `plusPtr` 48) (vkMemoryOffset (poked :: VkSparseImageMemoryBind))+                *> poke (ptr `plusPtr` 56) (vkFlags (poked :: VkSparseImageMemoryBind))++++data VkSparseImageMemoryBindInfo =+  VkSparseImageMemoryBindInfo{ vkImage :: VkImage +                             , vkBindCount :: Word32 +                             , vkPBinds :: Ptr VkSparseImageMemoryBind +                             }+  deriving (Eq)++instance Storable VkSparseImageMemoryBindInfo where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkSparseImageMemoryBindInfo <$> peek (ptr `plusPtr` 0)+                                         <*> peek (ptr `plusPtr` 8)+                                         <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkImage (poked :: VkSparseImageMemoryBindInfo))+                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseImageMemoryBindInfo))+                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseImageMemoryBindInfo))+++-- ** vkGetImageSparseMemoryRequirements+foreign import ccall "vkGetImageSparseMemoryRequirements" vkGetImageSparseMemoryRequirements :: +  VkDevice ->+  VkImage ->+    Ptr Word32 -> Ptr VkSparseImageMemoryRequirements -> IO ()++-- ** vkQueueBindSparse+foreign import ccall "vkQueueBindSparse" vkQueueBindSparse :: +  VkQueue -> Word32 -> Ptr VkBindSparseInfo -> VkFence -> IO VkResult+++data VkBindSparseInfo =+  VkBindSparseInfo{ vkSType :: VkStructureType +                  , vkPNext :: Ptr Void +                  , vkWaitSemaphoreCount :: Word32 +                  , vkPWaitSemaphores :: Ptr VkSemaphore +                  , vkBufferBindCount :: Word32 +                  , vkPBufferBinds :: Ptr VkSparseBufferMemoryBindInfo +                  , vkImageOpaqueBindCount :: Word32 +                  , vkPImageOpaqueBinds :: Ptr VkSparseImageOpaqueMemoryBindInfo +                  , vkImageBindCount :: Word32 +                  , vkPImageBinds :: Ptr VkSparseImageMemoryBindInfo +                  , vkSignalSemaphoreCount :: Word32 +                  , vkPSignalSemaphores :: Ptr VkSemaphore +                  }+  deriving (Eq)++instance Storable VkBindSparseInfo where+  sizeOf ~_ = 96+  alignment ~_ = 8+  peek ptr = VkBindSparseInfo <$> 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` 48)+                              <*> peek (ptr `plusPtr` 56)+                              <*> peek (ptr `plusPtr` 64)+                              <*> peek (ptr `plusPtr` 72)+                              <*> peek (ptr `plusPtr` 80)+                              <*> peek (ptr `plusPtr` 88)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 32) (vkBufferBindCount (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 40) (vkPBufferBinds (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 48) (vkImageOpaqueBindCount (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 56) (vkPImageOpaqueBinds (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 64) (vkImageBindCount (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 72) (vkPImageBinds (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 80) (vkSignalSemaphoreCount (poked :: VkBindSparseInfo))+                *> poke (ptr `plusPtr` 88) (vkPSignalSemaphores (poked :: VkBindSparseInfo))++++data VkSparseBufferMemoryBindInfo =+  VkSparseBufferMemoryBindInfo{ vkBuffer :: VkBuffer +                              , vkBindCount :: Word32 +                              , vkPBinds :: Ptr VkSparseMemoryBind +                              }+  deriving (Eq)++instance Storable VkSparseBufferMemoryBindInfo where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkSparseBufferMemoryBindInfo <$> peek (ptr `plusPtr` 0)+                                          <*> peek (ptr `plusPtr` 8)+                                          <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBuffer (poked :: VkSparseBufferMemoryBindInfo))+                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseBufferMemoryBindInfo))+                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseBufferMemoryBindInfo))+++-- ** VkSparseImageFormatFlags++newtype VkSparseImageFormatFlagBits = VkSparseImageFormatFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkSparseImageFormatFlagBits+type VkSparseImageFormatFlags = VkSparseImageFormatFlagBits+-- | Image uses a single miptail region for all array layers+pattern VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = VkSparseImageFormatFlagBits 0x1+-- | Image requires mip levels to be an exact multiple of the sparse image block size for non-miptail levels.+pattern VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = VkSparseImageFormatFlagBits 0x2+-- | Image uses a non-standard sparse block size+pattern VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = VkSparseImageFormatFlagBits 0x4+++-- ** vkGetPhysicalDeviceSparseImageFormatProperties+foreign import ccall "vkGetPhysicalDeviceSparseImageFormatProperties" vkGetPhysicalDeviceSparseImageFormatProperties :: +  VkPhysicalDevice ->+  VkFormat ->+    VkImageType ->+      VkSampleCountFlagBits ->+        VkImageUsageFlags ->+          VkImageTiling ->+            Ptr Word32 -> Ptr VkSparseImageFormatProperties -> IO ()++-- ** VkSparseMemoryBindFlags++newtype VkSparseMemoryBindFlagBits = VkSparseMemoryBindFlagBits VkFlags+  deriving (Eq, Storable, Bits, FiniteBits)+-- | Alias for VkSparseMemoryBindFlagBits+type VkSparseMemoryBindFlags = VkSparseMemoryBindFlagBits+-- | Operation binds resource metadata to memory+pattern VK_SPARSE_MEMORY_BIND_METADATA_BIT = VkSparseMemoryBindFlagBits 0x1++++data VkSparseImageOpaqueMemoryBindInfo =+  VkSparseImageOpaqueMemoryBindInfo{ vkImage :: VkImage +                                   , vkBindCount :: Word32 +                                   , vkPBinds :: Ptr VkSparseMemoryBind +                                   }+  deriving (Eq)++instance Storable VkSparseImageOpaqueMemoryBindInfo where+  sizeOf ~_ = 24+  alignment ~_ = 8+  peek ptr = VkSparseImageOpaqueMemoryBindInfo <$> peek (ptr `plusPtr` 0)+                                               <*> peek (ptr `plusPtr` 8)+                                               <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkImage (poked :: VkSparseImageOpaqueMemoryBindInfo))+                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseImageOpaqueMemoryBindInfo))+                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseImageOpaqueMemoryBindInfo))++++data VkSparseImageFormatProperties =+  VkSparseImageFormatProperties{ vkAspectMask :: VkImageAspectFlags +                               , vkImageGranularity :: VkExtent3D +                               , vkFlags :: VkSparseImageFormatFlags +                               }+  deriving (Eq)++instance Storable VkSparseImageFormatProperties where+  sizeOf ~_ = 20+  alignment ~_ = 4+  peek ptr = VkSparseImageFormatProperties <$> peek (ptr `plusPtr` 0)+                                           <*> peek (ptr `plusPtr` 4)+                                           <*> peek (ptr `plusPtr` 16)+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkSparseImageFormatProperties))+                *> poke (ptr `plusPtr` 4) (vkImageGranularity (poked :: VkSparseImageFormatProperties))+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSparseImageFormatProperties))++
+ src/Graphics/Vulkan/Version.hs view
@@ -0,0 +1,4 @@++module Graphics.Vulkan.Version where++
vulkan.cabal view
@@ -1,5 +1,5 @@ name:                vulkan-version:             0.2.0.0+version:             1.0.0.0 synopsis:            Bindings to the Vulkan graphics API. description:         Please see readme.md homepage:            http://github.com/expipiplus1/vulkan#readme@@ -10,16 +10,49 @@ copyright:           2016 Joe Hermaszewski category:            Graphics build-type:          Simple-extra-source-files:  readme.md+extra-source-files:  readme.md,+                     changelog.md cabal-version:       >=1.10  library   hs-source-dirs:      src   exposed-modules:     Graphics.Vulkan+                       Graphics.Vulkan.Buffer+                       Graphics.Vulkan.BufferView+                       Graphics.Vulkan.CommandBuffer+                       Graphics.Vulkan.CommandBufferBuilding+                       Graphics.Vulkan.CommandPool+                       Graphics.Vulkan.Constants+                       Graphics.Vulkan.Core+                       Graphics.Vulkan.DescriptorSet+                       Graphics.Vulkan.Device+                       Graphics.Vulkan.DeviceInitialization+                       Graphics.Vulkan.Event+                       Graphics.Vulkan.ExtensionDiscovery+                       Graphics.Vulkan.Fence+                       Graphics.Vulkan.HeaderBoilerplate+                       Graphics.Vulkan.Image+                       Graphics.Vulkan.ImageView+                       Graphics.Vulkan.KHR.Surface+                       Graphics.Vulkan.LayerDiscovery+                       Graphics.Vulkan.Memory+                       Graphics.Vulkan.MemoryManagement+                       Graphics.Vulkan.OtherTypes+                       Graphics.Vulkan.Pass+                       Graphics.Vulkan.Pipeline+                       Graphics.Vulkan.PipelineCache+                       Graphics.Vulkan.PipelineLayout+                       Graphics.Vulkan.Query+                       Graphics.Vulkan.Queue+                       Graphics.Vulkan.QueueSemaphore+                       Graphics.Vulkan.Sampler+                       Graphics.Vulkan.Shader+                       Graphics.Vulkan.SparseResourceMemoryManagement+                       Graphics.Vulkan.Version   build-depends:       base >= 4.9 && < 5                      , fixed-vector >= 0.8 && < 0.9   default-language:    Haskell2010-  ghc-options:         -freduction-depth=0 +  ghc-options:         -freduction-depth=0  source-repository head   type:     git