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

{-# LINE 2 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
module Graphics.Vulkan.Types.Struct.Validation
       (VkValidationCacheCreateInfoEXT(..), VkValidationFlagsEXT(..))
       where
import           Foreign.Storable                                (Storable (..))
import           GHC.Base                                        (Addr#,
                                                                  ByteArray#,
                                                                  byteArrayContents#,
                                                                  plusAddr#)
import           Graphics.Vulkan.Marshal
import           Graphics.Vulkan.Marshal.Internal
import           Graphics.Vulkan.Types.Bitmasks                  (VkValidationCacheCreateFlagsEXT)
import           Graphics.Vulkan.Types.Enum.StructureType        (VkStructureType)
import           Graphics.Vulkan.Types.Enum.ValidationC          (VkValidationCheckEXT)
import           Graphics.Vulkan.Types.Struct.InstanceCreateInfo (VkInstanceCreateInfo)
import           System.IO.Unsafe                                (unsafeDupablePerformIO)

-- | > typedef struct VkValidationCacheCreateInfoEXT {
--   >     VkStructureType sType;
--   >     const void*            pNext;
--   >     VkValidationCacheCreateFlagsEXT    flags;
--   >     size_t                 initialDataSize;
--   >     const void*            pInitialData;
--   > } VkValidationCacheCreateInfoEXT;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkValidationCacheCreateInfoEXT VkValidationCacheCreateInfoEXT registry at www.khronos.org>
data VkValidationCacheCreateInfoEXT = VkValidationCacheCreateInfoEXT# Addr#
                                                                      ByteArray#

instance Eq VkValidationCacheCreateInfoEXT where
        (VkValidationCacheCreateInfoEXT# a _) ==
          x@(VkValidationCacheCreateInfoEXT# b _)
          = EQ == cmpBytes# (sizeOf x) a b

        {-# INLINE (==) #-}

instance Ord VkValidationCacheCreateInfoEXT where
        (VkValidationCacheCreateInfoEXT# a _) `compare`
          x@(VkValidationCacheCreateInfoEXT# b _) = cmpBytes# (sizeOf x) a b

        {-# INLINE compare #-}

instance Storable VkValidationCacheCreateInfoEXT where
        sizeOf ~_ = (40)
{-# LINE 53 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE sizeOf #-}
        alignment ~_
          = (8)
{-# LINE 57 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE alignment #-}
        peek = peekVkData#

        {-# INLINE peek #-}
        poke = pokeVkData#

        {-# INLINE poke #-}

instance VulkanMarshalPrim VkValidationCacheCreateInfoEXT where
        unsafeAddr (VkValidationCacheCreateInfoEXT# a _) = a

        {-# INLINE unsafeAddr #-}
        unsafeByteArray (VkValidationCacheCreateInfoEXT# _ b) = b

        {-# INLINE unsafeByteArray #-}
        unsafeFromByteArrayOffset off b
          = VkValidationCacheCreateInfoEXT#
              (plusAddr# (byteArrayContents# b) off)
              b

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkValidationCacheCreateInfoEXT where
        type StructFields VkValidationCacheCreateInfoEXT =
             '["sType", "pNext", "flags", "initialDataSize", "pInitialData"] -- ' closing tick for hsc2hs
        type CUnionType VkValidationCacheCreateInfoEXT = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkValidationCacheCreateInfoEXT = 'False -- ' closing tick for hsc2hs
        type StructExtends VkValidationCacheCreateInfoEXT = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "sType" VkValidationCacheCreateInfoEXT where
        type FieldType "sType" VkValidationCacheCreateInfoEXT =
             VkStructureType
        type FieldOptional "sType" VkValidationCacheCreateInfoEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "sType" VkValidationCacheCreateInfoEXT =
             (0)
{-# LINE 94 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}
        type FieldIsArray "sType" VkValidationCacheCreateInfoEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (0)
{-# LINE 102 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "sType" VkValidationCacheCreateInfoEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 109 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (0)
{-# LINE 113 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "sType" VkValidationCacheCreateInfoEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 119 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pNext" VkValidationCacheCreateInfoEXT where
        type FieldType "pNext" VkValidationCacheCreateInfoEXT = Ptr Void
        type FieldOptional "pNext" VkValidationCacheCreateInfoEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pNext" VkValidationCacheCreateInfoEXT =
             (8)
{-# LINE 126 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}
        type FieldIsArray "pNext" VkValidationCacheCreateInfoEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (8)
{-# LINE 134 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "pNext" VkValidationCacheCreateInfoEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 141 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (8)
{-# LINE 145 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "pNext" VkValidationCacheCreateInfoEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 151 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "flags" VkValidationCacheCreateInfoEXT where
        type FieldType "flags" VkValidationCacheCreateInfoEXT =
             VkValidationCacheCreateFlagsEXT
        type FieldOptional "flags" VkValidationCacheCreateInfoEXT = 'True -- ' closing tick for hsc2hs
        type FieldOffset "flags" VkValidationCacheCreateInfoEXT =
             (16)
{-# LINE 159 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}
        type FieldIsArray "flags" VkValidationCacheCreateInfoEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (16)
{-# LINE 167 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "flags" VkValidationCacheCreateInfoEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 174 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (16)
{-# LINE 178 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "flags" VkValidationCacheCreateInfoEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 184 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "initialDataSize" VkValidationCacheCreateInfoEXT where
        type FieldType "initialDataSize" VkValidationCacheCreateInfoEXT =
             CSize
        type FieldOptional "initialDataSize" VkValidationCacheCreateInfoEXT
             = 'True -- ' closing tick for hsc2hs
        type FieldOffset "initialDataSize" VkValidationCacheCreateInfoEXT =
             (24)
{-# LINE 193 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}
        type FieldIsArray "initialDataSize" VkValidationCacheCreateInfoEXT
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = True

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (24)
{-# LINE 202 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "initialDataSize" VkValidationCacheCreateInfoEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 209 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (24)
{-# LINE 213 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "initialDataSize" VkValidationCacheCreateInfoEXT
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 220 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pInitialData" VkValidationCacheCreateInfoEXT where
        type FieldType "pInitialData" VkValidationCacheCreateInfoEXT =
             Ptr Void
        type FieldOptional "pInitialData" VkValidationCacheCreateInfoEXT =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "pInitialData" VkValidationCacheCreateInfoEXT =
             (32)
{-# LINE 229 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}
        type FieldIsArray "pInitialData" VkValidationCacheCreateInfoEXT =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (32)
{-# LINE 238 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "pInitialData" VkValidationCacheCreateInfoEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 245 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (32)
{-# LINE 249 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "pInitialData" VkValidationCacheCreateInfoEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 255 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance Show VkValidationCacheCreateInfoEXT where
        showsPrec d x
          = showString "VkValidationCacheCreateInfoEXT {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "flags = " .
                            showsPrec d (getField @"flags" x) .
                              showString ", " .
                                showString "initialDataSize = " .
                                  showsPrec d (getField @"initialDataSize" x) .
                                    showString ", " .
                                      showString "pInitialData = " .
                                        showsPrec d (getField @"pInitialData" x) . showChar '}'

-- | > typedef struct VkValidationFlagsEXT {
--   >     VkStructureType                  sType;
--   >     const void*                      pNext;
--   >     uint32_t                         disabledValidationCheckCount;
--   >     VkValidationCheckEXT* pDisabledValidationChecks;
--   > } VkValidationFlagsEXT;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkValidationFlagsEXT VkValidationFlagsEXT registry at www.khronos.org>
data VkValidationFlagsEXT = VkValidationFlagsEXT# Addr# ByteArray#

instance Eq VkValidationFlagsEXT where
        (VkValidationFlagsEXT# a _) == x@(VkValidationFlagsEXT# b _)
          = EQ == cmpBytes# (sizeOf x) a b

        {-# INLINE (==) #-}

instance Ord VkValidationFlagsEXT where
        (VkValidationFlagsEXT# a _) `compare` x@(VkValidationFlagsEXT# b _)
          = cmpBytes# (sizeOf x) a b

        {-# INLINE compare #-}

instance Storable VkValidationFlagsEXT where
        sizeOf ~_ = (32)
{-# LINE 298 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE sizeOf #-}
        alignment ~_ = (8)
{-# LINE 301 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE alignment #-}
        peek = peekVkData#

        {-# INLINE peek #-}
        poke = pokeVkData#

        {-# INLINE poke #-}

instance VulkanMarshalPrim VkValidationFlagsEXT where
        unsafeAddr (VkValidationFlagsEXT# a _) = a

        {-# INLINE unsafeAddr #-}
        unsafeByteArray (VkValidationFlagsEXT# _ b) = b

        {-# INLINE unsafeByteArray #-}
        unsafeFromByteArrayOffset off b
          = VkValidationFlagsEXT# (plusAddr# (byteArrayContents# b) off) b

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkValidationFlagsEXT where
        type StructFields VkValidationFlagsEXT =
             '["sType", "pNext", "disabledValidationCheckCount", -- ' closing tick for hsc2hs
               "pDisabledValidationChecks"]
        type CUnionType VkValidationFlagsEXT = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkValidationFlagsEXT = 'False -- ' closing tick for hsc2hs
        type StructExtends VkValidationFlagsEXT = '[VkInstanceCreateInfo] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-} HasField "sType" VkValidationFlagsEXT
         where
        type FieldType "sType" VkValidationFlagsEXT = VkStructureType
        type FieldOptional "sType" VkValidationFlagsEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "sType" VkValidationFlagsEXT =
             (0)
{-# LINE 336 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}
        type FieldIsArray "sType" VkValidationFlagsEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (0)
{-# LINE 343 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "sType" VkValidationFlagsEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 350 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (0)
{-# LINE 354 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "sType" VkValidationFlagsEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 360 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-} HasField "pNext" VkValidationFlagsEXT
         where
        type FieldType "pNext" VkValidationFlagsEXT = Ptr Void
        type FieldOptional "pNext" VkValidationFlagsEXT = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pNext" VkValidationFlagsEXT =
             (8)
{-# LINE 367 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}
        type FieldIsArray "pNext" VkValidationFlagsEXT = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset = (8)
{-# LINE 374 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "pNext" VkValidationFlagsEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 381 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (8)
{-# LINE 385 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "pNext" VkValidationFlagsEXT where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 391 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "disabledValidationCheckCount" VkValidationFlagsEXT where
        type FieldType "disabledValidationCheckCount" VkValidationFlagsEXT
             = Word32
        type FieldOptional "disabledValidationCheckCount"
               VkValidationFlagsEXT
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "disabledValidationCheckCount"
               VkValidationFlagsEXT
             =
             (16)
{-# LINE 403 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}
        type FieldIsArray "disabledValidationCheckCount"
               VkValidationFlagsEXT
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (16)
{-# LINE 413 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "disabledValidationCheckCount" VkValidationFlagsEXT
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 421 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (16)
{-# LINE 425 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "disabledValidationCheckCount" VkValidationFlagsEXT
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 432 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pDisabledValidationChecks" VkValidationFlagsEXT where
        type FieldType "pDisabledValidationChecks" VkValidationFlagsEXT =
             Ptr VkValidationCheckEXT
        type FieldOptional "pDisabledValidationChecks" VkValidationFlagsEXT
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pDisabledValidationChecks" VkValidationFlagsEXT =
             (24)
{-# LINE 441 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}
        type FieldIsArray "pDisabledValidationChecks" VkValidationFlagsEXT
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (24)
{-# LINE 450 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "pDisabledValidationChecks" VkValidationFlagsEXT where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 457 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (24)
{-# LINE 461 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "pDisabledValidationChecks" VkValidationFlagsEXT
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 468 "src-gen/Graphics/Vulkan/Types/Struct/Validation.hsc" #-}

instance Show VkValidationFlagsEXT where
        showsPrec d x
          = showString "VkValidationFlagsEXT {" .
              showString "sType = " .
                showsPrec d (getField @"sType" x) .
                  showString ", " .
                    showString "pNext = " .
                      showsPrec d (getField @"pNext" x) .
                        showString ", " .
                          showString "disabledValidationCheckCount = " .
                            showsPrec d (getField @"disabledValidationCheckCount" x) .
                              showString ", " .
                                showString "pDisabledValidationChecks = " .
                                  showsPrec d (getField @"pDisabledValidationChecks" x) .
                                    showChar '}'