{-# LINE 1 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}


{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.Buffer
       (VkBufferCopy, VkBufferCreateInfo, VkBufferImageCopy,
        VkBufferMemoryBarrier, VkBufferMemoryRequirementsInfo2,
        VkBufferMemoryRequirementsInfo2KHR, VkBufferViewCreateInfo)
       where
import Graphics.Vulkan.Marshal
import Graphics.Vulkan.Marshal.Internal
import Graphics.Vulkan.Types.BaseTypes          (VkDeviceSize)
import Graphics.Vulkan.Types.Bitmasks           (VkBufferViewCreateFlags)
import Graphics.Vulkan.Types.Enum.AccessFlags   (VkAccessFlags)
import Graphics.Vulkan.Types.Enum.Buffer        (VkBufferCreateFlags,
                                                 VkBufferUsageFlags)
import Graphics.Vulkan.Types.Enum.Format        (VkFormat)
import Graphics.Vulkan.Types.Enum.SharingMode   (VkSharingMode)
import Graphics.Vulkan.Types.Enum.StructureType (VkStructureType)
import Graphics.Vulkan.Types.Handles            (VkBuffer)
import Graphics.Vulkan.Types.Struct.Extent      (VkExtent3D)
import Graphics.Vulkan.Types.Struct.Image       (VkImageSubresourceLayers)
import Graphics.Vulkan.Types.Struct.Offset      (VkOffset3D)

-- | > typedef struct VkBufferCopy {
--   >     VkDeviceSize           srcOffset;
--   >     VkDeviceSize           dstOffset;
--   >     VkDeviceSize           size;
--   > } VkBufferCopy;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkBufferCopy VkBufferCopy registry at www.khronos.org>
type VkBufferCopy = VkStruct VkBufferCopy' -- ' closing tick for hsc2hs

data VkBufferCopy' -- ' closing tick for hsc2hs

instance VulkanMarshal VkBufferCopy where
    type StructRep VkBufferCopy =
         'StructMeta "VkBufferCopy" VkBufferCopy  -- ' closing tick for hsc2hs
                                                 (24)
{-# LINE 43 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           8
{-# LINE 44 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           '[('FieldMeta "srcOffset" VkDeviceSize 'False  -- ' closing tick for hsc2hs
                                                         (0)
{-# LINE 46 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "dstOffset" VkDeviceSize 'False
                                                         (8)
{-# LINE 51 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "size" VkDeviceSize 'False
                                                    (16)
{-# LINE 56 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True)] -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           '[] -- ' closing tick for hsc2hs

-- | > typedef struct VkBufferCreateInfo {
--   >     VkStructureType sType;
--   >     const void*            pNext;
--   >     VkBufferCreateFlags    flags;
--   >     VkDeviceSize           size;
--   >     VkBufferUsageFlags     usage;
--   >     VkSharingMode          sharingMode;
--   >     uint32_t               queueFamilyIndexCount;
--   >     const uint32_t*        pQueueFamilyIndices;
--   > } VkBufferCreateInfo;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkBufferCreateInfo VkBufferCreateInfo registry at www.khronos.org>
type VkBufferCreateInfo = VkStruct VkBufferCreateInfo' -- ' closing tick for hsc2hs

data VkBufferCreateInfo' -- ' closing tick for hsc2hs

instance VulkanMarshal VkBufferCreateInfo where
    type StructRep VkBufferCreateInfo =
         'StructMeta "VkBufferCreateInfo" VkBufferCreateInfo  -- ' closing tick for hsc2hs
                                                             (56)
{-# LINE 83 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           8
{-# LINE 84 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           '[('FieldMeta "sType" VkStructureType 'False  -- ' closing tick for hsc2hs
                                                        (0)
{-# LINE 86 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "pNext" (Ptr Void) 'False
                                                   (8)
{-# LINE 91 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "flags" VkBufferCreateFlags 'True
                                                           (16)
{-# LINE 96 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "size" VkDeviceSize 'False
                                                    (24)
{-# LINE 101 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "usage" VkBufferUsageFlags 'False
                                                           (32)
{-# LINE 106 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "sharingMode" VkSharingMode 'False
                                                            (36)
{-# LINE 111 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "queueFamilyIndexCount" Word32 'True
                                                              (40)
{-# LINE 116 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "pQueueFamilyIndices" (Ptr Word32) 'False
                                                                   (48)
{-# LINE 121 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True)] -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           '[] -- ' closing tick for hsc2hs

-- | > typedef struct VkBufferImageCopy {
--   >     VkDeviceSize           bufferOffset;
--   >     uint32_t               bufferRowLength;
--   >     uint32_t               bufferImageHeight;
--   >     VkImageSubresourceLayers imageSubresource;
--   >     VkOffset3D             imageOffset;
--   >     VkExtent3D             imageExtent;
--   > } VkBufferImageCopy;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkBufferImageCopy VkBufferImageCopy registry at www.khronos.org>
type VkBufferImageCopy = VkStruct VkBufferImageCopy' -- ' closing tick for hsc2hs

data VkBufferImageCopy' -- ' closing tick for hsc2hs

instance VulkanMarshal VkBufferImageCopy where
    type StructRep VkBufferImageCopy =
         'StructMeta "VkBufferImageCopy" VkBufferImageCopy  -- ' closing tick for hsc2hs
                                                           (56)
{-# LINE 146 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           8
{-# LINE 147 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           '[('FieldMeta "bufferOffset" VkDeviceSize 'False  -- ' closing tick for hsc2hs
                                                            (0)
{-# LINE 149 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "bufferRowLength" Word32 'False
                                                         (8)
{-# LINE 154 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "bufferImageHeight" Word32 'False
                                                           (12)
{-# LINE 159 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "imageSubresource" VkImageSubresourceLayers 'False
                (16)
{-# LINE 164 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "imageOffset" VkOffset3D 'False
                                                         (32)
{-# LINE 169 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "imageExtent" VkExtent3D 'False
                                                         (44)
{-# LINE 174 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True)] -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           '[] -- ' closing tick for hsc2hs

-- | > typedef struct VkBufferMemoryBarrier {
--   >     VkStructureType sType;
--   >     const void*            pNext;
--   >     VkAccessFlags          srcAccessMask;
--   >     VkAccessFlags          dstAccessMask;
--   >     uint32_t               srcQueueFamilyIndex;
--   >     uint32_t               dstQueueFamilyIndex;
--   >     VkBuffer               buffer;
--   >     VkDeviceSize           offset;
--   >     VkDeviceSize           size;
--   > } VkBufferMemoryBarrier;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkBufferMemoryBarrier VkBufferMemoryBarrier registry at www.khronos.org>
type VkBufferMemoryBarrier = VkStruct VkBufferMemoryBarrier' -- ' closing tick for hsc2hs

data VkBufferMemoryBarrier' -- ' closing tick for hsc2hs

instance VulkanMarshal VkBufferMemoryBarrier where
    type StructRep VkBufferMemoryBarrier =
         'StructMeta "VkBufferMemoryBarrier" VkBufferMemoryBarrier  -- ' closing tick for hsc2hs
                                                                   (56)
{-# LINE 202 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           8
{-# LINE 203 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           '[('FieldMeta "sType" VkStructureType 'False  -- ' closing tick for hsc2hs
                                                        (0)
{-# LINE 205 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "pNext" (Ptr Void) 'False
                                                   (8)
{-# LINE 210 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "srcAccessMask" VkAccessFlags 'True
                                                             (16)
{-# LINE 215 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "dstAccessMask" VkAccessFlags 'True
                                                             (20)
{-# LINE 220 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "srcQueueFamilyIndex" Word32 'False
                                                             (24)
{-# LINE 225 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "dstQueueFamilyIndex" Word32 'False
                                                             (28)
{-# LINE 230 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "buffer" VkBuffer 'False
                                                  (32)
{-# LINE 235 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "offset" VkDeviceSize 'False
                                                      (40)
{-# LINE 240 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "size" VkDeviceSize 'False
                                                    (48)
{-# LINE 245 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True)] -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           '[] -- ' closing tick for hsc2hs

-- | > typedef struct VkBufferMemoryRequirementsInfo2 {
--   >     VkStructureType sType;
--   >     const void*                                                          pNext;
--   >     VkBuffer                                                             buffer;
--   > } VkBufferMemoryRequirementsInfo2;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkBufferMemoryRequirementsInfo2 VkBufferMemoryRequirementsInfo2 registry at www.khronos.org>
type VkBufferMemoryRequirementsInfo2 =
     VkStruct VkBufferMemoryRequirementsInfo2' -- ' closing tick for hsc2hs

data VkBufferMemoryRequirementsInfo2' -- ' closing tick for hsc2hs

instance VulkanMarshal VkBufferMemoryRequirementsInfo2 where
    type StructRep VkBufferMemoryRequirementsInfo2 =
         'StructMeta "VkBufferMemoryRequirementsInfo2" -- ' closing tick for hsc2hs
           VkBufferMemoryRequirementsInfo2
           (24)
{-# LINE 269 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           8
{-# LINE 270 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           '[('FieldMeta "sType" VkStructureType 'False  -- ' closing tick for hsc2hs
                                                        (0)
{-# LINE 272 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "pNext" (Ptr Void) 'False
                                                   (8)
{-# LINE 277 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "buffer" VkBuffer 'False
                                                  (16)
{-# LINE 282 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True)] -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           '[] -- ' closing tick for hsc2hs

-- | Alias for `VkBufferMemoryRequirementsInfo2`
type VkBufferMemoryRequirementsInfo2KHR =
     VkBufferMemoryRequirementsInfo2

-- | > typedef struct VkBufferViewCreateInfo {
--   >     VkStructureType sType;
--   >     const void*            pNext;
--   >     VkBufferViewCreateFlagsflags;
--   >     VkBuffer               buffer;
--   >     VkFormat               format;
--   >     VkDeviceSize           offset;
--   >     VkDeviceSize           range;
--   > } VkBufferViewCreateInfo;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkBufferViewCreateInfo VkBufferViewCreateInfo registry at www.khronos.org>
type VkBufferViewCreateInfo = VkStruct VkBufferViewCreateInfo' -- ' closing tick for hsc2hs

data VkBufferViewCreateInfo' -- ' closing tick for hsc2hs

instance VulkanMarshal VkBufferViewCreateInfo where
    type StructRep VkBufferViewCreateInfo =
         'StructMeta "VkBufferViewCreateInfo" VkBufferViewCreateInfo -- ' closing tick for hsc2hs
           (56)
{-# LINE 312 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           8
{-# LINE 313 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
           '[('FieldMeta "sType" VkStructureType 'False  -- ' closing tick for hsc2hs
                                                        (0)
{-# LINE 315 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "pNext" (Ptr Void) 'False
                                                   (8)
{-# LINE 320 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "flags" VkBufferViewCreateFlags 'True
                                                               (16)
{-# LINE 325 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "buffer" VkBuffer 'False
                                                  (24)
{-# LINE 330 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "format" VkFormat 'False
                                                  (32)
{-# LINE 335 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "offset" VkDeviceSize 'False
                                                      (40)
{-# LINE 340 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True), -- ' closing tick for hsc2hs
             ('FieldMeta "range" VkDeviceSize 'False
                                                     (48)
{-# LINE 345 "src-gen/Graphics/Vulkan/Types/Struct/Buffer.hsc" #-}
                1
                'True -- ' closing tick for hsc2hs
                'True)] -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           'False -- ' closing tick for hsc2hs
           '[] -- ' closing tick for hsc2hs