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

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

{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleContexts      #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MagicHash             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms       #-}
{-# LANGUAGE ScopedTypeVariables   #-}
{-# LANGUAGE Strict                #-}
{-# LANGUAGE TypeApplications      #-}
{-# LANGUAGE TypeFamilies          #-}
{-# LANGUAGE UndecidableInstances  #-}
module Graphics.Vulkan.Types.Struct.Shader
       (VkShaderModuleCreateInfo(..),
        VkShaderModuleValidationCacheCreateInfoEXT(..),
        VkShaderResourceUsageAMD(..), VkShaderStatisticsInfoAMD(..))
       where
import           Foreign.Storable                         (Storable (..))
import           GHC.Base                                 (Addr#, ByteArray#,
                                                           Proxy#,
                                                           byteArrayContents#,
                                                           plusAddr#, proxy#)
import           GHC.TypeLits                             (KnownNat, natVal') -- ' closing tick for hsc2hs
import           Graphics.Vulkan.Marshal
import           Graphics.Vulkan.Marshal.Internal
import           Graphics.Vulkan.Types.Bitmasks           (VkShaderModuleCreateFlags)
import           Graphics.Vulkan.Types.Enum.Shader        (VkShaderStageFlags)
import           Graphics.Vulkan.Types.Enum.StructureType (VkStructureType)
import           Graphics.Vulkan.Types.Handles            (VkValidationCacheEXT)
import           System.IO.Unsafe                         (unsafeDupablePerformIO)

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkShaderModuleCreateInfo where
        type StructFields VkShaderModuleCreateInfo =
             '["sType", "pNext", "flags", "codeSize", "pCode"] -- ' closing tick for hsc2hs
        type CUnionType VkShaderModuleCreateInfo = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkShaderModuleCreateInfo = 'False -- ' closing tick for hsc2hs
        type StructExtends VkShaderModuleCreateInfo = '[] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = True

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "codeSize" VkShaderModuleCreateInfo where
        type FieldType "codeSize" VkShaderModuleCreateInfo = CSize
        type FieldOptional "codeSize" VkShaderModuleCreateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "codeSize" VkShaderModuleCreateInfo =
             (24)
{-# LINE 191 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "codeSize" VkShaderModuleCreateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "codeSize" VkShaderModuleCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 206 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "codeSize" VkShaderModuleCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 216 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "pCode" VkShaderModuleCreateInfo where
        type FieldType "pCode" VkShaderModuleCreateInfo = Ptr Word32
        type FieldOptional "pCode" VkShaderModuleCreateInfo = 'False -- ' closing tick for hsc2hs
        type FieldOffset "pCode" VkShaderModuleCreateInfo =
             (32)
{-# LINE 223 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "pCode" VkShaderModuleCreateInfo = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "pCode" VkShaderModuleCreateInfo where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (32))
{-# LINE 237 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "pCode" VkShaderModuleCreateInfo where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (32)
{-# LINE 247 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance Show VkShaderModuleCreateInfo where
        showsPrec d x
          = showString "VkShaderModuleCreateInfo {" .
              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 "codeSize = " .
                                  showsPrec d (getField @"codeSize" x) .
                                    showString ", " .
                                      showString "pCode = " .
                                        showsPrec d (getField @"pCode" x) . showChar '}'

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

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkShaderModuleValidationCacheCreateInfoEXT where
        sizeOf ~_
          = (24)
{-# LINE 293 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkShaderModuleValidationCacheCreateInfoEXT
         where
        type StructFields VkShaderModuleValidationCacheCreateInfoEXT =
             '["sType", "pNext", "validationCache"] -- ' closing tick for hsc2hs
        type CUnionType VkShaderModuleValidationCacheCreateInfoEXT = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkShaderModuleValidationCacheCreateInfoEXT =
             'False -- ' closing tick for hsc2hs
        type StructExtends VkShaderModuleValidationCacheCreateInfoEXT =
             '[VkShaderModuleCreateInfo] -- ' closing tick for hsc2hs

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

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

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

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

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

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

instance {-# OVERLAPPING #-}
         HasField "validationCache"
           VkShaderModuleValidationCacheCreateInfoEXT
         where
        type FieldType "validationCache"
               VkShaderModuleValidationCacheCreateInfoEXT
             = VkValidationCacheEXT
        type FieldOptional "validationCache"
               VkShaderModuleValidationCacheCreateInfoEXT
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "validationCache"
               VkShaderModuleValidationCacheCreateInfoEXT
             =
             (16)
{-# LINE 427 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "validationCache"
               VkShaderModuleValidationCacheCreateInfoEXT
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "validationCache"
           VkShaderModuleValidationCacheCreateInfoEXT
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 446 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "validationCache"
           VkShaderModuleValidationCacheCreateInfoEXT
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 458 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

-- | > typedef struct VkShaderResourceUsageAMD {
--   >     uint32_t numUsedVgprs;
--   >     uint32_t numUsedSgprs;
--   >     uint32_t ldsSizePerLocalWorkGroup;
--   >     size_t ldsUsageSizeInBytes;
--   >     size_t scratchMemUsageInBytes;
--   > } VkShaderResourceUsageAMD;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkShaderResourceUsageAMD VkShaderResourceUsageAMD registry at www.khronos.org>
data VkShaderResourceUsageAMD = VkShaderResourceUsageAMD# Addr#
                                                          ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

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

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkShaderResourceUsageAMD where
        type StructFields VkShaderResourceUsageAMD =
             '["numUsedVgprs", "numUsedSgprs", "ldsSizePerLocalWorkGroup", -- ' closing tick for hsc2hs
               "ldsUsageSizeInBytes", "scratchMemUsageInBytes"]
        type CUnionType VkShaderResourceUsageAMD = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkShaderResourceUsageAMD = 'True -- ' closing tick for hsc2hs
        type StructExtends VkShaderResourceUsageAMD = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "numUsedVgprs" VkShaderResourceUsageAMD where
        type FieldType "numUsedVgprs" VkShaderResourceUsageAMD = Word32
        type FieldOptional "numUsedVgprs" VkShaderResourceUsageAMD = 'False -- ' closing tick for hsc2hs
        type FieldOffset "numUsedVgprs" VkShaderResourceUsageAMD =
             (0)
{-# LINE 536 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "numUsedVgprs" VkShaderResourceUsageAMD = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "numUsedVgprs" VkShaderResourceUsageAMD where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 551 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "numUsedVgprs" VkShaderResourceUsageAMD where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 561 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "numUsedSgprs" VkShaderResourceUsageAMD where
        type FieldType "numUsedSgprs" VkShaderResourceUsageAMD = Word32
        type FieldOptional "numUsedSgprs" VkShaderResourceUsageAMD = 'False -- ' closing tick for hsc2hs
        type FieldOffset "numUsedSgprs" VkShaderResourceUsageAMD =
             (4)
{-# LINE 568 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "numUsedSgprs" VkShaderResourceUsageAMD = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (4)
{-# LINE 576 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "numUsedSgprs" VkShaderResourceUsageAMD where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (4))
{-# LINE 583 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (4)
{-# LINE 587 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "numUsedSgprs" VkShaderResourceUsageAMD where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (4)
{-# LINE 593 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "ldsSizePerLocalWorkGroup" VkShaderResourceUsageAMD where
        type FieldType "ldsSizePerLocalWorkGroup" VkShaderResourceUsageAMD
             = Word32
        type FieldOptional "ldsSizePerLocalWorkGroup"
               VkShaderResourceUsageAMD
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "ldsSizePerLocalWorkGroup"
               VkShaderResourceUsageAMD
             =
             (8)
{-# LINE 605 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "ldsSizePerLocalWorkGroup"
               VkShaderResourceUsageAMD
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "ldsSizePerLocalWorkGroup" VkShaderResourceUsageAMD
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 623 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "ldsSizePerLocalWorkGroup" VkShaderResourceUsageAMD
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 634 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "ldsUsageSizeInBytes" VkShaderResourceUsageAMD where
        type FieldType "ldsUsageSizeInBytes" VkShaderResourceUsageAMD =
             CSize
        type FieldOptional "ldsUsageSizeInBytes" VkShaderResourceUsageAMD =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "ldsUsageSizeInBytes" VkShaderResourceUsageAMD =
             (16)
{-# LINE 643 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "ldsUsageSizeInBytes" VkShaderResourceUsageAMD =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "ldsUsageSizeInBytes" VkShaderResourceUsageAMD where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (16))
{-# LINE 659 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "ldsUsageSizeInBytes" VkShaderResourceUsageAMD where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (16)
{-# LINE 669 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "scratchMemUsageInBytes" VkShaderResourceUsageAMD where
        type FieldType "scratchMemUsageInBytes" VkShaderResourceUsageAMD =
             CSize
        type FieldOptional "scratchMemUsageInBytes"
               VkShaderResourceUsageAMD
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "scratchMemUsageInBytes" VkShaderResourceUsageAMD
             =
             (24)
{-# LINE 680 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "scratchMemUsageInBytes" VkShaderResourceUsageAMD
             = 'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "scratchMemUsageInBytes" VkShaderResourceUsageAMD
         where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (24))
{-# LINE 697 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "scratchMemUsageInBytes" VkShaderResourceUsageAMD
         where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (24)
{-# LINE 708 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance Show VkShaderResourceUsageAMD where
        showsPrec d x
          = showString "VkShaderResourceUsageAMD {" .
              showString "numUsedVgprs = " .
                showsPrec d (getField @"numUsedVgprs" x) .
                  showString ", " .
                    showString "numUsedSgprs = " .
                      showsPrec d (getField @"numUsedSgprs" x) .
                        showString ", " .
                          showString "ldsSizePerLocalWorkGroup = " .
                            showsPrec d (getField @"ldsSizePerLocalWorkGroup" x) .
                              showString ", " .
                                showString "ldsUsageSizeInBytes = " .
                                  showsPrec d (getField @"ldsUsageSizeInBytes" x) .
                                    showString ", " .
                                      showString "scratchMemUsageInBytes = " .
                                        showsPrec d (getField @"scratchMemUsageInBytes" x) .
                                          showChar '}'

-- | > typedef struct VkShaderStatisticsInfoAMD {
--   >     VkShaderStageFlags shaderStageMask;
--   >     VkShaderResourceUsageAMD resourceUsage;
--   >     uint32_t numPhysicalVgprs;
--   >     uint32_t numPhysicalSgprs;
--   >     uint32_t numAvailableVgprs;
--   >     uint32_t numAvailableSgprs;
--   >     uint32_t computeWorkGroupSize[3];
--   > } VkShaderStatisticsInfoAMD;
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkShaderStatisticsInfoAMD VkShaderStatisticsInfoAMD registry at www.khronos.org>
data VkShaderStatisticsInfoAMD = VkShaderStatisticsInfoAMD# Addr#
                                                            ByteArray#

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

        {-# INLINE (==) #-}

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

        {-# INLINE compare #-}

instance Storable VkShaderStatisticsInfoAMD where
        sizeOf ~_ = (72)
{-# LINE 756 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

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

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

        {-# INLINE poke #-}

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

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

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

        {-# INLINE unsafeFromByteArrayOffset #-}

instance VulkanMarshal VkShaderStatisticsInfoAMD where
        type StructFields VkShaderStatisticsInfoAMD =
             '["shaderStageMask", "resourceUsage", "numPhysicalVgprs", -- ' closing tick for hsc2hs
               "numPhysicalSgprs", "numAvailableVgprs", "numAvailableSgprs",
               "computeWorkGroupSize"]
        type CUnionType VkShaderStatisticsInfoAMD = 'False -- ' closing tick for hsc2hs
        type ReturnedOnly VkShaderStatisticsInfoAMD = 'True -- ' closing tick for hsc2hs
        type StructExtends VkShaderStatisticsInfoAMD = '[] -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         HasField "shaderStageMask" VkShaderStatisticsInfoAMD where
        type FieldType "shaderStageMask" VkShaderStatisticsInfoAMD =
             VkShaderStageFlags
        type FieldOptional "shaderStageMask" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "shaderStageMask" VkShaderStatisticsInfoAMD =
             (0)
{-# LINE 798 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "shaderStageMask" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "shaderStageMask" VkShaderStatisticsInfoAMD where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (0))
{-# LINE 814 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "shaderStageMask" VkShaderStatisticsInfoAMD where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (0)
{-# LINE 824 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "resourceUsage" VkShaderStatisticsInfoAMD where
        type FieldType "resourceUsage" VkShaderStatisticsInfoAMD =
             VkShaderResourceUsageAMD
        type FieldOptional "resourceUsage" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "resourceUsage" VkShaderStatisticsInfoAMD =
             (8)
{-# LINE 833 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "resourceUsage" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

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

instance {-# OVERLAPPING #-}
         CanReadField "resourceUsage" VkShaderStatisticsInfoAMD where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (8))
{-# LINE 849 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

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

instance {-# OVERLAPPING #-}
         CanWriteField "resourceUsage" VkShaderStatisticsInfoAMD where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (8)
{-# LINE 859 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "numPhysicalVgprs" VkShaderStatisticsInfoAMD where
        type FieldType "numPhysicalVgprs" VkShaderStatisticsInfoAMD =
             Word32
        type FieldOptional "numPhysicalVgprs" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "numPhysicalVgprs" VkShaderStatisticsInfoAMD =
             (40)
{-# LINE 868 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "numPhysicalVgprs" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (40)
{-# LINE 877 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "numPhysicalVgprs" VkShaderStatisticsInfoAMD where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (40))
{-# LINE 884 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (40)
{-# LINE 888 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "numPhysicalVgprs" VkShaderStatisticsInfoAMD where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (40)
{-# LINE 894 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "numPhysicalSgprs" VkShaderStatisticsInfoAMD where
        type FieldType "numPhysicalSgprs" VkShaderStatisticsInfoAMD =
             Word32
        type FieldOptional "numPhysicalSgprs" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "numPhysicalSgprs" VkShaderStatisticsInfoAMD =
             (44)
{-# LINE 903 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "numPhysicalSgprs" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (44)
{-# LINE 912 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "numPhysicalSgprs" VkShaderStatisticsInfoAMD where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (44))
{-# LINE 919 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (44)
{-# LINE 923 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "numPhysicalSgprs" VkShaderStatisticsInfoAMD where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (44)
{-# LINE 929 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "numAvailableVgprs" VkShaderStatisticsInfoAMD where
        type FieldType "numAvailableVgprs" VkShaderStatisticsInfoAMD =
             Word32
        type FieldOptional "numAvailableVgprs" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "numAvailableVgprs" VkShaderStatisticsInfoAMD =
             (48)
{-# LINE 938 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "numAvailableVgprs" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (48)
{-# LINE 947 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "numAvailableVgprs" VkShaderStatisticsInfoAMD where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (48))
{-# LINE 954 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (48)
{-# LINE 958 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "numAvailableVgprs" VkShaderStatisticsInfoAMD where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (48)
{-# LINE 964 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "numAvailableSgprs" VkShaderStatisticsInfoAMD where
        type FieldType "numAvailableSgprs" VkShaderStatisticsInfoAMD =
             Word32
        type FieldOptional "numAvailableSgprs" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs
        type FieldOffset "numAvailableSgprs" VkShaderStatisticsInfoAMD =
             (52)
{-# LINE 973 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "numAvailableSgprs" VkShaderStatisticsInfoAMD =
             'False -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (52)
{-# LINE 982 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         CanReadField "numAvailableSgprs" VkShaderStatisticsInfoAMD where
        {-# NOINLINE getField #-}
        getField x
          = unsafeDupablePerformIO
              (peekByteOff (unsafePtr x) (52))
{-# LINE 989 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

        {-# INLINE readField #-}
        readField p
          = peekByteOff p (52)
{-# LINE 993 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         CanWriteField "numAvailableSgprs" VkShaderStatisticsInfoAMD where
        {-# INLINE writeField #-}
        writeField p
          = pokeByteOff p (52)
{-# LINE 999 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         HasField "computeWorkGroupSize" VkShaderStatisticsInfoAMD where
        type FieldType "computeWorkGroupSize" VkShaderStatisticsInfoAMD =
             Word32
        type FieldOptional "computeWorkGroupSize" VkShaderStatisticsInfoAMD
             = 'False -- ' closing tick for hsc2hs
        type FieldOffset "computeWorkGroupSize" VkShaderStatisticsInfoAMD =
             (56)
{-# LINE 1008 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
        type FieldIsArray "computeWorkGroupSize" VkShaderStatisticsInfoAMD
             = 'True -- ' closing tick for hsc2hs

        {-# INLINE fieldOptional #-}
        fieldOptional = False

        {-# INLINE fieldOffset #-}
        fieldOffset
          = (56)
{-# LINE 1017 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}

instance {-# OVERLAPPING #-}
         (KnownNat idx,
          IndexInBounds "computeWorkGroupSize" idx
            VkShaderStatisticsInfoAMD) =>
         CanReadFieldArray "computeWorkGroupSize" idx
           VkShaderStatisticsInfoAMD
         where
        {-# SPECIALISE instance
                       CanReadFieldArray "computeWorkGroupSize" 0
                         VkShaderStatisticsInfoAMD
                       #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "computeWorkGroupSize" 1
                         VkShaderStatisticsInfoAMD
                       #-}

        {-# SPECIALISE instance
                       CanReadFieldArray "computeWorkGroupSize" 2
                         VkShaderStatisticsInfoAMD
                       #-}
        type FieldArrayLength "computeWorkGroupSize"
               VkShaderStatisticsInfoAMD
             = 3

        {-# INLINE fieldArrayLength #-}
        fieldArrayLength = 3

        {-# INLINE getFieldArray #-}
        getFieldArray = f
          where {-# NOINLINE f #-}
                f x = unsafeDupablePerformIO (peekByteOff (unsafePtr x) off)
                off
                  = (56)
{-# LINE 1052 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
                      +
                      sizeOf (undefined :: Word32) *
                        fromInteger (natVal' (proxy# :: Proxy# idx)) -- ' closing tick for hsc2hs

        {-# INLINE readFieldArray #-}
        readFieldArray p
          = peekByteOff p
              ((56)
{-# LINE 1060 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
                 +
                 sizeOf (undefined :: Word32) *
                   fromInteger (natVal' (proxy# :: Proxy# idx))) -- ' closing tick for hsc2hs

instance {-# OVERLAPPING #-}
         (KnownNat idx,
          IndexInBounds "computeWorkGroupSize" idx
            VkShaderStatisticsInfoAMD) =>
         CanWriteFieldArray "computeWorkGroupSize" idx
           VkShaderStatisticsInfoAMD
         where
        {-# SPECIALISE instance
                       CanWriteFieldArray "computeWorkGroupSize" 0
                         VkShaderStatisticsInfoAMD
                       #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "computeWorkGroupSize" 1
                         VkShaderStatisticsInfoAMD
                       #-}

        {-# SPECIALISE instance
                       CanWriteFieldArray "computeWorkGroupSize" 2
                         VkShaderStatisticsInfoAMD
                       #-}

        {-# INLINE writeFieldArray #-}
        writeFieldArray p
          = pokeByteOff p
              ((56)
{-# LINE 1090 "src-gen/Graphics/Vulkan/Types/Struct/Shader.hsc" #-}
                 +
                 sizeOf (undefined :: Word32) *
                   fromInteger (natVal' (proxy# :: Proxy# idx))) -- ' closing tick for hsc2hs

instance Show VkShaderStatisticsInfoAMD where
        showsPrec d x
          = showString "VkShaderStatisticsInfoAMD {" .
              showString "shaderStageMask = " .
                showsPrec d (getField @"shaderStageMask" x) .
                  showString ", " .
                    showString "resourceUsage = " .
                      showsPrec d (getField @"resourceUsage" x) .
                        showString ", " .
                          showString "numPhysicalVgprs = " .
                            showsPrec d (getField @"numPhysicalVgprs" x) .
                              showString ", " .
                                showString "numPhysicalSgprs = " .
                                  showsPrec d (getField @"numPhysicalSgprs" x) .
                                    showString ", " .
                                      showString "numAvailableVgprs = " .
                                        showsPrec d (getField @"numAvailableVgprs" x) .
                                          showString ", " .
                                            showString "numAvailableSgprs = " .
                                              showsPrec d (getField @"numAvailableSgprs" x) .
                                                showString ", " .
                                                  (showString "computeWorkGroupSize = [" .
                                                     showsPrec d
                                                       (let s = sizeOf
                                                                  (undefined ::
                                                                     FieldType
                                                                       "computeWorkGroupSize"
                                                                       VkShaderStatisticsInfoAMD)
                                                            o = fieldOffset @"computeWorkGroupSize"
                                                                  @VkShaderStatisticsInfoAMD
                                                            f i
                                                              = peekByteOff (unsafePtr x) i ::
                                                                  IO
                                                                    (FieldType
                                                                       "computeWorkGroupSize"
                                                                       VkShaderStatisticsInfoAMD)
                                                          in
                                                          unsafeDupablePerformIO . mapM f $
                                                            map (\ i -> o + i * s) [0 .. 3 - 1])
                                                       . showChar ']')
                                                    . showChar '}'