{-# language CPP #-}
module Vulkan.Extensions.VK_NV_fragment_shading_rate_enums  ( cmdSetFragmentShadingRateEnumNV
                                                            , PhysicalDeviceFragmentShadingRateEnumsFeaturesNV(..)
                                                            , PhysicalDeviceFragmentShadingRateEnumsPropertiesNV(..)
                                                            , PipelineFragmentShadingRateEnumStateCreateInfoNV(..)
                                                            , FragmentShadingRateNV( FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV
                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV
                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV
                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV
                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV
                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV
                                                                                   , FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV
                                                                                   , FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV
                                                                                   , FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV
                                                                                   , FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV
                                                                                   , FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV
                                                                                   , FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV
                                                                                   , ..
                                                                                   )
                                                            , FragmentShadingRateTypeNV( FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV
                                                                                       , FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV
                                                                                       , ..
                                                                                       )
                                                            , NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION
                                                            , pattern NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION
                                                            , NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME
                                                            , pattern NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME
                                                            , FragmentShadingRateCombinerOpKHR(..)
                                                            ) where

import Vulkan.CStruct.Utils (FixedArray)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Foreign.Marshal.Alloc (allocaBytesAligned)
import GHC.IO (throwIO)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Read (choose)
import GHC.Read (expectP)
import GHC.Read (parens)
import GHC.Show (showParen)
import GHC.Show (showString)
import GHC.Show (showsPrec)
import Text.ParserCombinators.ReadPrec ((+++))
import Text.ParserCombinators.ReadPrec (prec)
import Text.ParserCombinators.ReadPrec (step)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Control.Monad.IO.Class (MonadIO)
import Data.String (IsString)
import Data.Typeable (Typeable)
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Data.Int (Int32)
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import Text.Read.Lex (Lexeme(Ident))
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.CStruct.Utils (lowerArrayPtr)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.Handles (CommandBuffer)
import Vulkan.Core10.Handles (CommandBuffer(..))
import Vulkan.Core10.Handles (CommandBuffer_T)
import Vulkan.Dynamic (DeviceCmds(pVkCmdSetFragmentShadingRateEnumNV))
import Vulkan.Extensions.VK_KHR_fragment_shading_rate (FragmentShadingRateCombinerOpKHR)
import Vulkan.Extensions.VK_KHR_fragment_shading_rate (FragmentShadingRateCombinerOpKHR(..))
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.Core10.Enums.SampleCountFlagBits (SampleCountFlagBits)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV))
import Vulkan.Extensions.VK_KHR_fragment_shading_rate (FragmentShadingRateCombinerOpKHR(..))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdSetFragmentShadingRateEnumNV
  :: FunPtr (Ptr CommandBuffer_T -> FragmentShadingRateNV -> Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR) -> IO ()) -> Ptr CommandBuffer_T -> FragmentShadingRateNV -> Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR) -> IO ()

-- | vkCmdSetFragmentShadingRateEnumNV - Set pipeline fragment shading rate
-- dynamically using enums
--
-- == Valid Usage
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04576#
--     If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate>
--     is not enabled, @shadingRate@ /must/ be
--     'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV'
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-supersampleFragmentShadingRates-04577#
--     If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-supersampleFragmentShadingRates supersampleFragmentShadingRates>
--     is not enabled, @shadingRate@ /must/ not be
--     'FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV',
--     'FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV',
--     'FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV', or
--     'FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV'
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-noInvocationFragmentShadingRates-04578#
--     If
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-noInvocationFragmentShadingRates noInvocationFragmentShadingRates>
--     is not enabled, @shadingRate@ /must/ not be
--     'FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV'
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-fragmentShadingRateEnums-04579#
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-fragmentShadingRateEnums fragmentShadingRateEnums>
--     /must/ be enabled
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-pipelineFragmentShadingRate-04580#
--     One of
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate>,
--     or
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>
--     /must/ be enabled
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-primitiveFragmentShadingRate-04581#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-primitiveFragmentShadingRate primitiveFragmentShadingRate feature>
--     is not enabled, @combinerOps@[0] /must/ be
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-attachmentFragmentShadingRate-04582#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#feature-attachmentFragmentShadingRate attachmentFragmentShadingRate feature>
--     is not enabled, @combinerOps@[1] /must/ be
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-fragmentSizeNonTrivialCombinerOps-04583#
--     If the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#limits-fragmentShadingRateNonTrivialCombinerOps fragmentSizeNonTrivialCombinerOps>
--     limit is not supported, elements of @combinerOps@ /must/ be either
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'
--     or
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-shadingRate-parameter#
--     @shadingRate@ /must/ be a valid 'FragmentShadingRateNV' value
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-combinerOps-parameter# Any
--     given element of @combinerOps@ /must/ be a valid
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'
--     value
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-commandBuffer-recording#
--     @commandBuffer@ /must/ be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
--
-- -   #VUID-vkCmdSetFragmentShadingRateEnumNV-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics operations
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-types Pipeline Type> |
-- +============================================================================================================================+========================================================================================================================+=======================================================================================================================+=====================================================================================================================================+
-- | Primary                                                                                                                    | Both                                                                                                                   | Graphics                                                                                                              |                                                                                                                                     |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                       |                                                                                                                                     |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR',
-- 'FragmentShadingRateNV'
cmdSetFragmentShadingRateEnumNV :: forall io
                                 . (MonadIO io)
                                => -- | @commandBuffer@ is the command buffer into which the command will be
                                   -- recorded.
                                   CommandBuffer
                                -> -- | @shadingRate@ specifies a 'FragmentShadingRateNV' enum indicating the
                                   -- pipeline fragment shading rate for subsequent draw commands.
                                   FragmentShadingRateNV
                                -> -- | @combinerOps@ specifies a
                                   -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'
                                   -- determining how the
                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-pipeline pipeline>,
                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-primitive primitive>,
                                   -- and
                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment attachment shading rates>
                                   -- are
                                   -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-combining combined>
                                   -- for fragments generated by subsequent drawing commands.
                                   ("combinerOps" ::: (FragmentShadingRateCombinerOpKHR, FragmentShadingRateCombinerOpKHR))
                                -> io ()
cmdSetFragmentShadingRateEnumNV :: CommandBuffer
-> FragmentShadingRateNV
-> ("combinerOps"
    ::: (FragmentShadingRateCombinerOpKHR,
         FragmentShadingRateCombinerOpKHR))
-> io ()
cmdSetFragmentShadingRateEnumNV commandBuffer :: CommandBuffer
commandBuffer shadingRate :: FragmentShadingRateNV
shadingRate combinerOps :: "combinerOps"
::: (FragmentShadingRateCombinerOpKHR,
     FragmentShadingRateCombinerOpKHR)
combinerOps = IO () -> io ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdSetFragmentShadingRateEnumNVPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> FragmentShadingRateNV
   -> ("combinerOps"
       ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
   -> IO ())
vkCmdSetFragmentShadingRateEnumNVPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> FragmentShadingRateNV
      -> ("combinerOps"
          ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
      -> IO ())
pVkCmdSetFragmentShadingRateEnumNV (CommandBuffer -> DeviceCmds
deviceCmds (CommandBuffer
commandBuffer :: CommandBuffer))
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> FragmentShadingRateNV
   -> ("combinerOps"
       ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
   -> IO ())
vkCmdSetFragmentShadingRateEnumNVPtr FunPtr
  (Ptr CommandBuffer_T
   -> FragmentShadingRateNV
   -> ("combinerOps"
       ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
   -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> FragmentShadingRateNV
      -> ("combinerOps"
          ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> FragmentShadingRateNV
   -> ("combinerOps"
       ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument "" "The function pointer for vkCmdSetFragmentShadingRateEnumNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdSetFragmentShadingRateEnumNV' :: Ptr CommandBuffer_T
-> FragmentShadingRateNV
-> ("combinerOps"
    ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
-> IO ()
vkCmdSetFragmentShadingRateEnumNV' = FunPtr
  (Ptr CommandBuffer_T
   -> FragmentShadingRateNV
   -> ("combinerOps"
       ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
   -> IO ())
-> Ptr CommandBuffer_T
-> FragmentShadingRateNV
-> ("combinerOps"
    ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
-> IO ()
mkVkCmdSetFragmentShadingRateEnumNV FunPtr
  (Ptr CommandBuffer_T
   -> FragmentShadingRateNV
   -> ("combinerOps"
       ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
   -> IO ())
vkCmdSetFragmentShadingRateEnumNVPtr
  "combinerOps"
::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)
pCombinerOps <- ((("combinerOps"
   ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
  -> IO ())
 -> IO ())
-> ContT
     ()
     IO
     ("combinerOps"
      ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("combinerOps"
    ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
   -> IO ())
  -> IO ())
 -> ContT
      ()
      IO
      ("combinerOps"
       ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)))
-> ((("combinerOps"
      ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
     -> IO ())
    -> IO ())
-> ContT
     ()
     IO
     ("combinerOps"
      ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
forall a b. (a -> b) -> a -> b
$ Int
-> Int
-> (("combinerOps"
     ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
    -> IO ())
-> IO ()
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned @(FixedArray 2 FragmentShadingRateCombinerOpKHR) 8 4
  let pCombinerOps' :: Ptr FragmentShadingRateCombinerOpKHR
pCombinerOps' = ("combinerOps"
 ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
-> Ptr FragmentShadingRateCombinerOpKHR
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr "combinerOps"
::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)
pCombinerOps
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ case ("combinerOps"
::: (FragmentShadingRateCombinerOpKHR,
     FragmentShadingRateCombinerOpKHR)
combinerOps) of
    (e0 :: FragmentShadingRateCombinerOpKHR
e0, e1 :: FragmentShadingRateCombinerOpKHR
e1) -> do
      Ptr FragmentShadingRateCombinerOpKHR
-> FragmentShadingRateCombinerOpKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr FragmentShadingRateCombinerOpKHR
pCombinerOps' :: Ptr FragmentShadingRateCombinerOpKHR) (FragmentShadingRateCombinerOpKHR
e0)
      Ptr FragmentShadingRateCombinerOpKHR
-> FragmentShadingRateCombinerOpKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr FragmentShadingRateCombinerOpKHR
pCombinerOps' Ptr FragmentShadingRateCombinerOpKHR
-> Int -> Ptr FragmentShadingRateCombinerOpKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 4 :: Ptr FragmentShadingRateCombinerOpKHR) (FragmentShadingRateCombinerOpKHR
e1)
  IO () -> ContT () IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CommandBuffer_T
-> FragmentShadingRateNV
-> ("combinerOps"
    ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
-> IO ()
vkCmdSetFragmentShadingRateEnumNV' (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer)) (FragmentShadingRateNV
shadingRate) ("combinerOps"
::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)
pCombinerOps)
  () -> ContT () IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


-- | VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV - Structure
-- indicating support for fragment shading rate enums
--
-- = Members
--
-- The members of the 'PhysicalDeviceFragmentShadingRateEnumsFeaturesNV'
-- structure describe the following features:
--
-- = Description
--
-- If the 'PhysicalDeviceFragmentShadingRateEnumsFeaturesNV' structure is
-- included in the @pNext@ chain of
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
-- it is filled with values indicating whether each feature is supported.
-- 'PhysicalDeviceFragmentShadingRateEnumsFeaturesNV' /can/ also be used in
-- the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo' to enable
-- these features.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
  { -- | #features-fragmentShadingRateEnums# @fragmentShadingRateEnums@ indicates
    -- that the implementation supports specifying fragment shading rates using
    -- the 'FragmentShadingRateNV' enumerated type.
    PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Bool
fragmentShadingRateEnums :: Bool
  , -- | #features-supersampleFragmentShadingRates#
    -- @supersampleFragmentShadingRates@ indicates that the implementation
    -- supports fragment shading rate enum values indicating more than one
    -- invocation per fragment.
    PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Bool
supersampleFragmentShadingRates :: Bool
  , -- | #features-noInvocationFragmentShadingRates#
    -- @noInvocationFragmentShadingRates@ indicates that the implementation
    -- supports a fragment shading rate enum value indicating that no fragment
    -- shaders should be invoked when that shading rate is used.
    PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Bool
noInvocationFragmentShadingRates :: Bool
  }
  deriving (Typeable, PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Bool
(PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
 -> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Bool)
-> (PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
    -> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Bool)
-> Eq PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Bool
$c/= :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Bool
== :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Bool
$c== :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceFragmentShadingRateEnumsFeaturesNV)
#endif
deriving instance Show PhysicalDeviceFragmentShadingRateEnumsFeaturesNV

instance ToCStruct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV where
  withCStruct :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> (Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> IO b)
-> IO b
withCStruct x :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
x f :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> IO b
f = Int
-> Int
-> (Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 32 8 ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p -> Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
x (Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> IO b
f Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p)
  pokeCStruct :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> IO b -> IO b
pokeCStruct p :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p PhysicalDeviceFragmentShadingRateEnumsFeaturesNV{..} f :: IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
fragmentShadingRateEnums))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
supersampleFragmentShadingRates))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
noInvocationFragmentShadingRates))
    IO b
f
  cStructSize :: Int
cStructSize = 32
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> IO b -> IO b
pokeZeroCStruct p :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p f :: IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV where
  peekCStruct :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> IO PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
peekCStruct p :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p = do
    Bool32
fragmentShadingRateEnums <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr Bool32))
    Bool32
supersampleFragmentShadingRates <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr Bool32))
    Bool32
noInvocationFragmentShadingRates <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr Bool32))
    PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> IO PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
 -> IO PhysicalDeviceFragmentShadingRateEnumsFeaturesNV)
-> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> IO PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
forall a b. (a -> b) -> a -> b
$ Bool
-> Bool -> Bool -> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
             (Bool32 -> Bool
bool32ToBool Bool32
fragmentShadingRateEnums) (Bool32 -> Bool
bool32ToBool Bool32
supersampleFragmentShadingRates) (Bool32 -> Bool
bool32ToBool Bool32
noInvocationFragmentShadingRates)

instance Storable PhysicalDeviceFragmentShadingRateEnumsFeaturesNV where
  sizeOf :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Int
sizeOf ~PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
_ = 32
  alignment :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> Int
alignment ~PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
_ = 8
  peek :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> IO PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
peek = Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> IO PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV -> IO ()
poke ptr :: Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
ptr poked :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
poked = Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
-> IO ()
-> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
ptr PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero PhysicalDeviceFragmentShadingRateEnumsFeaturesNV where
  zero :: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
zero = Bool
-> Bool -> Bool -> PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
           Bool
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero
           Bool
forall a. Zero a => a
zero


-- | VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV - Structure
-- describing fragment shading rate limits that can be supported by an
-- implementation
--
-- = Members
--
-- The members of the 'PhysicalDeviceFragmentShadingRateEnumsPropertiesNV'
-- structure describe the following implementation-dependent properties
-- related to
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-primsrast-fragment-shading-rate fragment shading rates>:
--
-- = Description
--
-- If the 'PhysicalDeviceFragmentShadingRateEnumsPropertiesNV' structure is
-- included in the @pNext@ chain of
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2',
-- it is filled with the implementation-dependent limits.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceFragmentShadingRateEnumsPropertiesNV = PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
  { -- | #limits-maxFragmentShadingRateInvocationCount#
    -- @maxFragmentShadingRateInvocationCount@ indicates the maximum number of
    -- fragment shader invocations per fragment supported in pipeline,
    -- primitive, and attachment fragment shading rates.
    --
    -- #VUID-VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV-maxFragmentShadingRateInvocationCount-parameter#
    -- @maxFragmentShadingRateInvocationCount@ /must/ be a valid
    -- 'Vulkan.Core10.Enums.SampleCountFlagBits.SampleCountFlagBits' value
    PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> SampleCountFlagBits
maxFragmentShadingRateInvocationCount :: SampleCountFlagBits }
  deriving (Typeable, PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> Bool
(PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
 -> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> Bool)
-> (PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
    -> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> Bool)
-> Eq PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> Bool
$c/= :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> Bool
== :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> Bool
$c== :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceFragmentShadingRateEnumsPropertiesNV)
#endif
deriving instance Show PhysicalDeviceFragmentShadingRateEnumsPropertiesNV

instance ToCStruct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV where
  withCStruct :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> (Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> IO b)
-> IO b
withCStruct x :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
x f :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> IO b
f = Int
-> Int
-> (Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 24 8 ((Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p -> Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
x (Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> IO b
f Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p)
  pokeCStruct :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> IO b
-> IO b
pokeCStruct p :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p PhysicalDeviceFragmentShadingRateEnumsPropertiesNV{..} f :: IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr SampleCountFlagBits -> SampleCountFlagBits -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> Int -> Ptr SampleCountFlagBits
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr SampleCountFlagBits)) (SampleCountFlagBits
maxFragmentShadingRateInvocationCount)
    IO b
f
  cStructSize :: Int
cStructSize = 24
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> IO b -> IO b
pokeZeroCStruct p :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p f :: IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr SampleCountFlagBits -> SampleCountFlagBits -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> Int -> Ptr SampleCountFlagBits
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr SampleCountFlagBits)) (SampleCountFlagBits
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV where
  peekCStruct :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> IO PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
peekCStruct p :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p = do
    SampleCountFlagBits
maxFragmentShadingRateInvocationCount <- Ptr SampleCountFlagBits -> IO SampleCountFlagBits
forall a. Storable a => Ptr a -> IO a
peek @SampleCountFlagBits ((Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
p Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> Int -> Ptr SampleCountFlagBits
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr SampleCountFlagBits))
    PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> IO PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
 -> IO PhysicalDeviceFragmentShadingRateEnumsPropertiesNV)
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> IO PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
forall a b. (a -> b) -> a -> b
$ SampleCountFlagBits
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
             SampleCountFlagBits
maxFragmentShadingRateInvocationCount

instance Storable PhysicalDeviceFragmentShadingRateEnumsPropertiesNV where
  sizeOf :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> Int
sizeOf ~PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
_ = 24
  alignment :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> Int
alignment ~PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
_ = 8
  peek :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> IO PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
peek = Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> IO PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV -> IO ()
poke ptr :: Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
ptr poked :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
poked = Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
-> IO ()
-> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
ptr PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero PhysicalDeviceFragmentShadingRateEnumsPropertiesNV where
  zero :: PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
zero = SampleCountFlagBits
-> PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
           SampleCountFlagBits
forall a. Zero a => a
zero


-- | VkPipelineFragmentShadingRateEnumStateCreateInfoNV - Structure
-- specifying parameters controlling the fragment shading rate using rate
-- enums
--
-- = Description
--
-- If the @pNext@ chain of
-- 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo' includes a
-- 'PipelineFragmentShadingRateEnumStateCreateInfoNV' structure, then that
-- structure includes parameters that control the pipeline fragment shading
-- rate.
--
-- If this structure is not present, @shadingRateType@ is considered to be
-- equal to 'FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV', @shadingRate@ is
-- considered to be equal to
-- 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV', and both elements of
-- @combinerOps@ are considered to be equal to
-- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR'.
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-sType-sType#
--     @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV'
--
-- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-shadingRateType-parameter#
--     @shadingRateType@ /must/ be a valid 'FragmentShadingRateTypeNV'
--     value
--
-- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-shadingRate-parameter#
--     @shadingRate@ /must/ be a valid 'FragmentShadingRateNV' value
--
-- -   #VUID-VkPipelineFragmentShadingRateEnumStateCreateInfoNV-combinerOps-parameter#
--     Any given element of @combinerOps@ /must/ be a valid
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'
--     value
--
-- = See Also
--
-- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR',
-- 'FragmentShadingRateNV', 'FragmentShadingRateTypeNV',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PipelineFragmentShadingRateEnumStateCreateInfoNV = PipelineFragmentShadingRateEnumStateCreateInfoNV
  { -- | @shadingRateType@ specifies a 'FragmentShadingRateTypeNV' value
    -- indicating whether fragment shading rates are specified using fragment
    -- sizes or 'FragmentShadingRateNV' enums.
    PipelineFragmentShadingRateEnumStateCreateInfoNV
-> FragmentShadingRateTypeNV
shadingRateType :: FragmentShadingRateTypeNV
  , -- | @shadingRate@ specifies a 'FragmentShadingRateNV' value indicating the
    -- pipeline fragment shading rate.
    PipelineFragmentShadingRateEnumStateCreateInfoNV
-> FragmentShadingRateNV
shadingRate :: FragmentShadingRateNV
  , -- | @combinerOps@ specifies
    -- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.FragmentShadingRateCombinerOpKHR'
    -- values determining how the
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-pipeline pipeline>,
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-primitive primitive>,
    -- and
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-attachment attachment shading rates>
    -- are
    -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#primsrast-fragment-shading-rate-combining combined>
    -- for fragments generated by drawing commands using the created pipeline.
    PipelineFragmentShadingRateEnumStateCreateInfoNV
-> "combinerOps"
   ::: (FragmentShadingRateCombinerOpKHR,
        FragmentShadingRateCombinerOpKHR)
combinerOps :: (FragmentShadingRateCombinerOpKHR, FragmentShadingRateCombinerOpKHR)
  }
  deriving (Typeable, PipelineFragmentShadingRateEnumStateCreateInfoNV
-> PipelineFragmentShadingRateEnumStateCreateInfoNV -> Bool
(PipelineFragmentShadingRateEnumStateCreateInfoNV
 -> PipelineFragmentShadingRateEnumStateCreateInfoNV -> Bool)
-> (PipelineFragmentShadingRateEnumStateCreateInfoNV
    -> PipelineFragmentShadingRateEnumStateCreateInfoNV -> Bool)
-> Eq PipelineFragmentShadingRateEnumStateCreateInfoNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PipelineFragmentShadingRateEnumStateCreateInfoNV
-> PipelineFragmentShadingRateEnumStateCreateInfoNV -> Bool
$c/= :: PipelineFragmentShadingRateEnumStateCreateInfoNV
-> PipelineFragmentShadingRateEnumStateCreateInfoNV -> Bool
== :: PipelineFragmentShadingRateEnumStateCreateInfoNV
-> PipelineFragmentShadingRateEnumStateCreateInfoNV -> Bool
$c== :: PipelineFragmentShadingRateEnumStateCreateInfoNV
-> PipelineFragmentShadingRateEnumStateCreateInfoNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PipelineFragmentShadingRateEnumStateCreateInfoNV)
#endif
deriving instance Show PipelineFragmentShadingRateEnumStateCreateInfoNV

instance ToCStruct PipelineFragmentShadingRateEnumStateCreateInfoNV where
  withCStruct :: PipelineFragmentShadingRateEnumStateCreateInfoNV
-> (Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV -> IO b)
-> IO b
withCStruct x :: PipelineFragmentShadingRateEnumStateCreateInfoNV
x f :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV -> IO b
f = Int
-> Int
-> (Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV -> IO b)
-> IO b
forall a b. Int -> Int -> (Ptr a -> IO b) -> IO b
allocaBytesAligned 32 8 ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV -> IO b)
 -> IO b)
-> (Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \p :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p -> Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> PipelineFragmentShadingRateEnumStateCreateInfoNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p PipelineFragmentShadingRateEnumStateCreateInfoNV
x (Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV -> IO b
f Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p)
  pokeCStruct :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> PipelineFragmentShadingRateEnumStateCreateInfoNV -> IO b -> IO b
pokeCStruct p :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p PipelineFragmentShadingRateEnumStateCreateInfoNV{..} f :: IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int -> Ptr FragmentShadingRateTypeNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr FragmentShadingRateTypeNV)) (FragmentShadingRateTypeNV
shadingRateType)
    Ptr FragmentShadingRateNV -> FragmentShadingRateNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int -> Ptr FragmentShadingRateNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr FragmentShadingRateNV)) (FragmentShadingRateNV
shadingRate)
    let pCombinerOps' :: Ptr FragmentShadingRateCombinerOpKHR
pCombinerOps' = ("combinerOps"
 ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
-> Ptr FragmentShadingRateCombinerOpKHR
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int
-> "combinerOps"
   ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)))
    case ("combinerOps"
::: (FragmentShadingRateCombinerOpKHR,
     FragmentShadingRateCombinerOpKHR)
combinerOps) of
      (e0 :: FragmentShadingRateCombinerOpKHR
e0, e1 :: FragmentShadingRateCombinerOpKHR
e1) -> do
        Ptr FragmentShadingRateCombinerOpKHR
-> FragmentShadingRateCombinerOpKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr FragmentShadingRateCombinerOpKHR
pCombinerOps' :: Ptr FragmentShadingRateCombinerOpKHR) (FragmentShadingRateCombinerOpKHR
e0)
        Ptr FragmentShadingRateCombinerOpKHR
-> FragmentShadingRateCombinerOpKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr FragmentShadingRateCombinerOpKHR
pCombinerOps' Ptr FragmentShadingRateCombinerOpKHR
-> Int -> Ptr FragmentShadingRateCombinerOpKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 4 :: Ptr FragmentShadingRateCombinerOpKHR) (FragmentShadingRateCombinerOpKHR
e1)
    IO b
f
  cStructSize :: Int
cStructSize = 32
  cStructAlignment :: Int
cStructAlignment = 8
  pokeZeroCStruct :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> IO b -> IO b
pokeZeroCStruct p :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p f :: IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int -> Ptr FragmentShadingRateTypeNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr FragmentShadingRateTypeNV)) (FragmentShadingRateTypeNV
forall a. Zero a => a
zero)
    Ptr FragmentShadingRateNV -> FragmentShadingRateNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int -> Ptr FragmentShadingRateNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr FragmentShadingRateNV)) (FragmentShadingRateNV
forall a. Zero a => a
zero)
    let pCombinerOps' :: Ptr FragmentShadingRateCombinerOpKHR
pCombinerOps' = ("combinerOps"
 ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
-> Ptr FragmentShadingRateCombinerOpKHR
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int
-> "combinerOps"
   ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)))
    case ((FragmentShadingRateCombinerOpKHR
forall a. Zero a => a
zero, FragmentShadingRateCombinerOpKHR
forall a. Zero a => a
zero)) of
      (e0 :: FragmentShadingRateCombinerOpKHR
e0, e1 :: FragmentShadingRateCombinerOpKHR
e1) -> do
        Ptr FragmentShadingRateCombinerOpKHR
-> FragmentShadingRateCombinerOpKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr FragmentShadingRateCombinerOpKHR
pCombinerOps' :: Ptr FragmentShadingRateCombinerOpKHR) (FragmentShadingRateCombinerOpKHR
e0)
        Ptr FragmentShadingRateCombinerOpKHR
-> FragmentShadingRateCombinerOpKHR -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr FragmentShadingRateCombinerOpKHR
pCombinerOps' Ptr FragmentShadingRateCombinerOpKHR
-> Int -> Ptr FragmentShadingRateCombinerOpKHR
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 4 :: Ptr FragmentShadingRateCombinerOpKHR) (FragmentShadingRateCombinerOpKHR
e1)
    IO b
f

instance FromCStruct PipelineFragmentShadingRateEnumStateCreateInfoNV where
  peekCStruct :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> IO PipelineFragmentShadingRateEnumStateCreateInfoNV
peekCStruct p :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p = do
    FragmentShadingRateTypeNV
shadingRateType <- Ptr FragmentShadingRateTypeNV -> IO FragmentShadingRateTypeNV
forall a. Storable a => Ptr a -> IO a
peek @FragmentShadingRateTypeNV ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int -> Ptr FragmentShadingRateTypeNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16 :: Ptr FragmentShadingRateTypeNV))
    FragmentShadingRateNV
shadingRate <- Ptr FragmentShadingRateNV -> IO FragmentShadingRateNV
forall a. Storable a => Ptr a -> IO a
peek @FragmentShadingRateNV ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int -> Ptr FragmentShadingRateNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 20 :: Ptr FragmentShadingRateNV))
    let pcombinerOps :: Ptr FragmentShadingRateCombinerOpKHR
pcombinerOps = ("combinerOps"
 ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR))
-> Ptr FragmentShadingRateCombinerOpKHR
forall a (n :: Nat). Ptr (FixedArray n a) -> Ptr a
lowerArrayPtr @FragmentShadingRateCombinerOpKHR ((Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
p Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> Int
-> "combinerOps"
   ::: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24 :: Ptr (FixedArray 2 FragmentShadingRateCombinerOpKHR)))
    FragmentShadingRateCombinerOpKHR
combinerOps0 <- Ptr FragmentShadingRateCombinerOpKHR
-> IO FragmentShadingRateCombinerOpKHR
forall a. Storable a => Ptr a -> IO a
peek @FragmentShadingRateCombinerOpKHR ((Ptr FragmentShadingRateCombinerOpKHR
pcombinerOps Ptr FragmentShadingRateCombinerOpKHR
-> Int -> Ptr FragmentShadingRateCombinerOpKHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` 0 :: Ptr FragmentShadingRateCombinerOpKHR))
    FragmentShadingRateCombinerOpKHR
combinerOps1 <- Ptr FragmentShadingRateCombinerOpKHR
-> IO FragmentShadingRateCombinerOpKHR
forall a. Storable a => Ptr a -> IO a
peek @FragmentShadingRateCombinerOpKHR ((Ptr FragmentShadingRateCombinerOpKHR
pcombinerOps Ptr FragmentShadingRateCombinerOpKHR
-> Int -> Ptr FragmentShadingRateCombinerOpKHR
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` 4 :: Ptr FragmentShadingRateCombinerOpKHR))
    PipelineFragmentShadingRateEnumStateCreateInfoNV
-> IO PipelineFragmentShadingRateEnumStateCreateInfoNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PipelineFragmentShadingRateEnumStateCreateInfoNV
 -> IO PipelineFragmentShadingRateEnumStateCreateInfoNV)
-> PipelineFragmentShadingRateEnumStateCreateInfoNV
-> IO PipelineFragmentShadingRateEnumStateCreateInfoNV
forall a b. (a -> b) -> a -> b
$ FragmentShadingRateTypeNV
-> FragmentShadingRateNV
-> ("combinerOps"
    ::: (FragmentShadingRateCombinerOpKHR,
         FragmentShadingRateCombinerOpKHR))
-> PipelineFragmentShadingRateEnumStateCreateInfoNV
PipelineFragmentShadingRateEnumStateCreateInfoNV
             FragmentShadingRateTypeNV
shadingRateType FragmentShadingRateNV
shadingRate ((FragmentShadingRateCombinerOpKHR
combinerOps0, FragmentShadingRateCombinerOpKHR
combinerOps1))

instance Storable PipelineFragmentShadingRateEnumStateCreateInfoNV where
  sizeOf :: PipelineFragmentShadingRateEnumStateCreateInfoNV -> Int
sizeOf ~PipelineFragmentShadingRateEnumStateCreateInfoNV
_ = 32
  alignment :: PipelineFragmentShadingRateEnumStateCreateInfoNV -> Int
alignment ~PipelineFragmentShadingRateEnumStateCreateInfoNV
_ = 8
  peek :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> IO PipelineFragmentShadingRateEnumStateCreateInfoNV
peek = Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> IO PipelineFragmentShadingRateEnumStateCreateInfoNV
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> PipelineFragmentShadingRateEnumStateCreateInfoNV -> IO ()
poke ptr :: Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
ptr poked :: PipelineFragmentShadingRateEnumStateCreateInfoNV
poked = Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
-> PipelineFragmentShadingRateEnumStateCreateInfoNV
-> IO ()
-> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
ptr PipelineFragmentShadingRateEnumStateCreateInfoNV
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero PipelineFragmentShadingRateEnumStateCreateInfoNV where
  zero :: PipelineFragmentShadingRateEnumStateCreateInfoNV
zero = FragmentShadingRateTypeNV
-> FragmentShadingRateNV
-> ("combinerOps"
    ::: (FragmentShadingRateCombinerOpKHR,
         FragmentShadingRateCombinerOpKHR))
-> PipelineFragmentShadingRateEnumStateCreateInfoNV
PipelineFragmentShadingRateEnumStateCreateInfoNV
           FragmentShadingRateTypeNV
forall a. Zero a => a
zero
           FragmentShadingRateNV
forall a. Zero a => a
zero
           (FragmentShadingRateCombinerOpKHR
forall a. Zero a => a
zero, FragmentShadingRateCombinerOpKHR
forall a. Zero a => a
zero)


-- | VkFragmentShadingRateNV - Enumeration with fragment shading rates
--
-- = Description
--
-- To use the shading rates
-- 'FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV',
-- 'FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV',
-- 'FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV', and
-- 'FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV' as a pipeline,
-- primitive, or attachment shading rate, the
-- @supersampleFragmentShadingRates@ feature /must/ be enabled. To use the
-- shading rate 'FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV' as a pipeline,
-- primitive, or attachment shading rate, the
-- @noInvocationFragmentShadingRates@ feature /must/ be enabled.
--
-- = See Also
--
-- 'PipelineFragmentShadingRateEnumStateCreateInfoNV',
-- 'cmdSetFragmentShadingRateEnumNV'
newtype FragmentShadingRateNV = FragmentShadingRateNV Int32
  deriving newtype (FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
(FragmentShadingRateNV -> FragmentShadingRateNV -> Bool)
-> (FragmentShadingRateNV -> FragmentShadingRateNV -> Bool)
-> Eq FragmentShadingRateNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
$c/= :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
== :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
$c== :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
Eq, Eq FragmentShadingRateNV
Eq FragmentShadingRateNV =>
(FragmentShadingRateNV -> FragmentShadingRateNV -> Ordering)
-> (FragmentShadingRateNV -> FragmentShadingRateNV -> Bool)
-> (FragmentShadingRateNV -> FragmentShadingRateNV -> Bool)
-> (FragmentShadingRateNV -> FragmentShadingRateNV -> Bool)
-> (FragmentShadingRateNV -> FragmentShadingRateNV -> Bool)
-> (FragmentShadingRateNV
    -> FragmentShadingRateNV -> FragmentShadingRateNV)
-> (FragmentShadingRateNV
    -> FragmentShadingRateNV -> FragmentShadingRateNV)
-> Ord FragmentShadingRateNV
FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
FragmentShadingRateNV -> FragmentShadingRateNV -> Ordering
FragmentShadingRateNV
-> FragmentShadingRateNV -> FragmentShadingRateNV
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: FragmentShadingRateNV
-> FragmentShadingRateNV -> FragmentShadingRateNV
$cmin :: FragmentShadingRateNV
-> FragmentShadingRateNV -> FragmentShadingRateNV
max :: FragmentShadingRateNV
-> FragmentShadingRateNV -> FragmentShadingRateNV
$cmax :: FragmentShadingRateNV
-> FragmentShadingRateNV -> FragmentShadingRateNV
>= :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
$c>= :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
> :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
$c> :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
<= :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
$c<= :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
< :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
$c< :: FragmentShadingRateNV -> FragmentShadingRateNV -> Bool
compare :: FragmentShadingRateNV -> FragmentShadingRateNV -> Ordering
$ccompare :: FragmentShadingRateNV -> FragmentShadingRateNV -> Ordering
$cp1Ord :: Eq FragmentShadingRateNV
Ord, Ptr b -> Int -> IO FragmentShadingRateNV
Ptr b -> Int -> FragmentShadingRateNV -> IO ()
Ptr FragmentShadingRateNV -> IO FragmentShadingRateNV
Ptr FragmentShadingRateNV -> Int -> IO FragmentShadingRateNV
Ptr FragmentShadingRateNV -> Int -> FragmentShadingRateNV -> IO ()
Ptr FragmentShadingRateNV -> FragmentShadingRateNV -> IO ()
FragmentShadingRateNV -> Int
(FragmentShadingRateNV -> Int)
-> (FragmentShadingRateNV -> Int)
-> (Ptr FragmentShadingRateNV -> Int -> IO FragmentShadingRateNV)
-> (Ptr FragmentShadingRateNV
    -> Int -> FragmentShadingRateNV -> IO ())
-> (forall b. Ptr b -> Int -> IO FragmentShadingRateNV)
-> (forall b. Ptr b -> Int -> FragmentShadingRateNV -> IO ())
-> (Ptr FragmentShadingRateNV -> IO FragmentShadingRateNV)
-> (Ptr FragmentShadingRateNV -> FragmentShadingRateNV -> IO ())
-> Storable FragmentShadingRateNV
forall b. Ptr b -> Int -> IO FragmentShadingRateNV
forall b. Ptr b -> Int -> FragmentShadingRateNV -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr FragmentShadingRateNV -> FragmentShadingRateNV -> IO ()
$cpoke :: Ptr FragmentShadingRateNV -> FragmentShadingRateNV -> IO ()
peek :: Ptr FragmentShadingRateNV -> IO FragmentShadingRateNV
$cpeek :: Ptr FragmentShadingRateNV -> IO FragmentShadingRateNV
pokeByteOff :: Ptr b -> Int -> FragmentShadingRateNV -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> FragmentShadingRateNV -> IO ()
peekByteOff :: Ptr b -> Int -> IO FragmentShadingRateNV
$cpeekByteOff :: forall b. Ptr b -> Int -> IO FragmentShadingRateNV
pokeElemOff :: Ptr FragmentShadingRateNV -> Int -> FragmentShadingRateNV -> IO ()
$cpokeElemOff :: Ptr FragmentShadingRateNV -> Int -> FragmentShadingRateNV -> IO ()
peekElemOff :: Ptr FragmentShadingRateNV -> Int -> IO FragmentShadingRateNV
$cpeekElemOff :: Ptr FragmentShadingRateNV -> Int -> IO FragmentShadingRateNV
alignment :: FragmentShadingRateNV -> Int
$calignment :: FragmentShadingRateNV -> Int
sizeOf :: FragmentShadingRateNV -> Int
$csizeOf :: FragmentShadingRateNV -> Int
Storable, FragmentShadingRateNV
FragmentShadingRateNV -> Zero FragmentShadingRateNV
forall a. a -> Zero a
zero :: FragmentShadingRateNV
$czero :: FragmentShadingRateNV
Zero)

-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV' specifies a fragment
-- size of 1x1 pixels.
pattern $bFRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV = FragmentShadingRateNV 0
-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV' specifies a
-- fragment size of 1x2 pixels.
pattern $bFRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV = FragmentShadingRateNV 1
-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV' specifies a
-- fragment size of 2x1 pixels.
pattern $bFRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV = FragmentShadingRateNV 4
-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV' specifies a
-- fragment size of 2x2 pixels.
pattern $bFRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV = FragmentShadingRateNV 5
-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV' specifies a
-- fragment size of 2x4 pixels.
pattern $bFRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV = FragmentShadingRateNV 6
-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV' specifies a
-- fragment size of 4x2 pixels.
pattern $bFRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV = FragmentShadingRateNV 9
-- | 'FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV' specifies a
-- fragment size of 4x4 pixels.
pattern $bFRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV = FragmentShadingRateNV 10
-- | 'FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV' specifies a fragment
-- size of 1x1 pixels, with two fragment shader invocations per fragment.
pattern $bFRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV = FragmentShadingRateNV 11
-- | 'FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV' specifies a fragment
-- size of 1x1 pixels, with four fragment shader invocations per fragment.
pattern $bFRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV = FragmentShadingRateNV 12
-- | 'FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV' specifies a fragment
-- size of 1x1 pixels, with eight fragment shader invocations per fragment.
pattern $bFRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV = FragmentShadingRateNV 13
-- | 'FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV' specifies a fragment
-- size of 1x1 pixels, with sixteen fragment shader invocations per
-- fragment.
pattern $bFRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV = FragmentShadingRateNV 14
-- | 'FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV' specifies that any portions of
-- a primitive that use that shading rate should be discarded without
-- invoking any fragment shader.
pattern $bFRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV :: FragmentShadingRateNV
$mFRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV :: forall r.
FragmentShadingRateNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV = FragmentShadingRateNV 15
{-# complete FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV,
             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV,
             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV,
             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV,
             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV,
             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV,
             FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV,
             FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV,
             FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV,
             FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV,
             FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV,
             FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV :: FragmentShadingRateNV #-}

instance Show FragmentShadingRateNV where
  showsPrec :: Int -> FragmentShadingRateNV -> ShowS
showsPrec p :: Int
p = \case
    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV"
    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV"
    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV"
    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV"
    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV"
    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV"
    FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV"
    FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV"
    FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV"
    FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV"
    FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV"
    FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV"
    FragmentShadingRateNV x :: Int32
x -> Bool -> ShowS -> ShowS
showParen (Int
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= 11) (String -> ShowS
showString "FragmentShadingRateNV " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec 11 Int32
x)

instance Read FragmentShadingRateNV where
  readPrec :: ReadPrec FragmentShadingRateNV
readPrec = ReadPrec FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall a. ReadPrec a -> ReadPrec a
parens ([(String, ReadPrec FragmentShadingRateNV)]
-> ReadPrec FragmentShadingRateNV
forall a. [(String, ReadPrec a)] -> ReadPrec a
choose [("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV)
                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV)
                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV)
                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV)
                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV)
                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV)
                            , ("FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV)
                            , ("FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV)
                            , ("FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV)
                            , ("FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV)
                            , ("FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV)
                            , ("FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV", FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateNV
FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV)]
                     ReadPrec FragmentShadingRateNV
-> ReadPrec FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
+++
                     Int
-> ReadPrec FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall a. Int -> ReadPrec a -> ReadPrec a
prec 10 (do
                       Lexeme -> ReadPrec ()
expectP (String -> Lexeme
Ident "FragmentShadingRateNV")
                       Int32
v <- ReadPrec Int32 -> ReadPrec Int32
forall a. ReadPrec a -> ReadPrec a
step ReadPrec Int32
forall a. Read a => ReadPrec a
readPrec
                       FragmentShadingRateNV -> ReadPrec FragmentShadingRateNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Int32 -> FragmentShadingRateNV
FragmentShadingRateNV Int32
v)))


-- | VkFragmentShadingRateTypeNV - Enumeration with fragment shading rate
-- types
--
-- = See Also
--
-- 'PipelineFragmentShadingRateEnumStateCreateInfoNV'
newtype FragmentShadingRateTypeNV = FragmentShadingRateTypeNV Int32
  deriving newtype (FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
(FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool)
-> (FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool)
-> Eq FragmentShadingRateTypeNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
$c/= :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
== :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
$c== :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
Eq, Eq FragmentShadingRateTypeNV
Eq FragmentShadingRateTypeNV =>
(FragmentShadingRateTypeNV
 -> FragmentShadingRateTypeNV -> Ordering)
-> (FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool)
-> (FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool)
-> (FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool)
-> (FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool)
-> (FragmentShadingRateTypeNV
    -> FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV)
-> (FragmentShadingRateTypeNV
    -> FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV)
-> Ord FragmentShadingRateTypeNV
FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Ordering
FragmentShadingRateTypeNV
-> FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: FragmentShadingRateTypeNV
-> FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV
$cmin :: FragmentShadingRateTypeNV
-> FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV
max :: FragmentShadingRateTypeNV
-> FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV
$cmax :: FragmentShadingRateTypeNV
-> FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV
>= :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
$c>= :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
> :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
$c> :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
<= :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
$c<= :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
< :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
$c< :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Bool
compare :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Ordering
$ccompare :: FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> Ordering
$cp1Ord :: Eq FragmentShadingRateTypeNV
Ord, Ptr b -> Int -> IO FragmentShadingRateTypeNV
Ptr b -> Int -> FragmentShadingRateTypeNV -> IO ()
Ptr FragmentShadingRateTypeNV -> IO FragmentShadingRateTypeNV
Ptr FragmentShadingRateTypeNV
-> Int -> IO FragmentShadingRateTypeNV
Ptr FragmentShadingRateTypeNV
-> Int -> FragmentShadingRateTypeNV -> IO ()
Ptr FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> IO ()
FragmentShadingRateTypeNV -> Int
(FragmentShadingRateTypeNV -> Int)
-> (FragmentShadingRateTypeNV -> Int)
-> (Ptr FragmentShadingRateTypeNV
    -> Int -> IO FragmentShadingRateTypeNV)
-> (Ptr FragmentShadingRateTypeNV
    -> Int -> FragmentShadingRateTypeNV -> IO ())
-> (forall b. Ptr b -> Int -> IO FragmentShadingRateTypeNV)
-> (forall b. Ptr b -> Int -> FragmentShadingRateTypeNV -> IO ())
-> (Ptr FragmentShadingRateTypeNV -> IO FragmentShadingRateTypeNV)
-> (Ptr FragmentShadingRateTypeNV
    -> FragmentShadingRateTypeNV -> IO ())
-> Storable FragmentShadingRateTypeNV
forall b. Ptr b -> Int -> IO FragmentShadingRateTypeNV
forall b. Ptr b -> Int -> FragmentShadingRateTypeNV -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> IO ()
$cpoke :: Ptr FragmentShadingRateTypeNV -> FragmentShadingRateTypeNV -> IO ()
peek :: Ptr FragmentShadingRateTypeNV -> IO FragmentShadingRateTypeNV
$cpeek :: Ptr FragmentShadingRateTypeNV -> IO FragmentShadingRateTypeNV
pokeByteOff :: Ptr b -> Int -> FragmentShadingRateTypeNV -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> FragmentShadingRateTypeNV -> IO ()
peekByteOff :: Ptr b -> Int -> IO FragmentShadingRateTypeNV
$cpeekByteOff :: forall b. Ptr b -> Int -> IO FragmentShadingRateTypeNV
pokeElemOff :: Ptr FragmentShadingRateTypeNV
-> Int -> FragmentShadingRateTypeNV -> IO ()
$cpokeElemOff :: Ptr FragmentShadingRateTypeNV
-> Int -> FragmentShadingRateTypeNV -> IO ()
peekElemOff :: Ptr FragmentShadingRateTypeNV
-> Int -> IO FragmentShadingRateTypeNV
$cpeekElemOff :: Ptr FragmentShadingRateTypeNV
-> Int -> IO FragmentShadingRateTypeNV
alignment :: FragmentShadingRateTypeNV -> Int
$calignment :: FragmentShadingRateTypeNV -> Int
sizeOf :: FragmentShadingRateTypeNV -> Int
$csizeOf :: FragmentShadingRateTypeNV -> Int
Storable, FragmentShadingRateTypeNV
FragmentShadingRateTypeNV -> Zero FragmentShadingRateTypeNV
forall a. a -> Zero a
zero :: FragmentShadingRateTypeNV
$czero :: FragmentShadingRateTypeNV
Zero)

-- | 'FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV' specifies that a graphics
-- pipeline should obtain its pipeline fragment shading rate and shading
-- rate combiner state from the
-- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'
-- structure and that any state specified by the
-- 'PipelineFragmentShadingRateEnumStateCreateInfoNV' structure should be
-- ignored.
pattern $bFRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV :: FragmentShadingRateTypeNV
$mFRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV :: forall r.
FragmentShadingRateTypeNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV = FragmentShadingRateTypeNV 0
-- | 'FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV' specifies that a graphics pipeline
-- should obtain its pipeline fragment shading rate and shading rate
-- combiner state from the
-- 'PipelineFragmentShadingRateEnumStateCreateInfoNV' structure and that
-- any state specified by the
-- 'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PipelineFragmentShadingRateStateCreateInfoKHR'
-- structure should be ignored.
pattern $bFRAGMENT_SHADING_RATE_TYPE_ENUMS_NV :: FragmentShadingRateTypeNV
$mFRAGMENT_SHADING_RATE_TYPE_ENUMS_NV :: forall r.
FragmentShadingRateTypeNV -> (Void# -> r) -> (Void# -> r) -> r
FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV = FragmentShadingRateTypeNV 1
{-# complete FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV,
             FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV :: FragmentShadingRateTypeNV #-}

instance Show FragmentShadingRateTypeNV where
  showsPrec :: Int -> FragmentShadingRateTypeNV -> ShowS
showsPrec p :: Int
p = \case
    FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV"
    FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV -> String -> ShowS
showString "FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV"
    FragmentShadingRateTypeNV x :: Int32
x -> Bool -> ShowS -> ShowS
showParen (Int
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= 11) (String -> ShowS
showString "FragmentShadingRateTypeNV " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec 11 Int32
x)

instance Read FragmentShadingRateTypeNV where
  readPrec :: ReadPrec FragmentShadingRateTypeNV
readPrec = ReadPrec FragmentShadingRateTypeNV
-> ReadPrec FragmentShadingRateTypeNV
forall a. ReadPrec a -> ReadPrec a
parens ([(String, ReadPrec FragmentShadingRateTypeNV)]
-> ReadPrec FragmentShadingRateTypeNV
forall a. [(String, ReadPrec a)] -> ReadPrec a
choose [("FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV", FragmentShadingRateTypeNV -> ReadPrec FragmentShadingRateTypeNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateTypeNV
FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV)
                            , ("FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV", FragmentShadingRateTypeNV -> ReadPrec FragmentShadingRateTypeNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure FragmentShadingRateTypeNV
FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV)]
                     ReadPrec FragmentShadingRateTypeNV
-> ReadPrec FragmentShadingRateTypeNV
-> ReadPrec FragmentShadingRateTypeNV
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
+++
                     Int
-> ReadPrec FragmentShadingRateTypeNV
-> ReadPrec FragmentShadingRateTypeNV
forall a. Int -> ReadPrec a -> ReadPrec a
prec 10 (do
                       Lexeme -> ReadPrec ()
expectP (String -> Lexeme
Ident "FragmentShadingRateTypeNV")
                       Int32
v <- ReadPrec Int32 -> ReadPrec Int32
forall a. ReadPrec a -> ReadPrec a
step ReadPrec Int32
forall a. Read a => ReadPrec a
readPrec
                       FragmentShadingRateTypeNV -> ReadPrec FragmentShadingRateTypeNV
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Int32 -> FragmentShadingRateTypeNV
FragmentShadingRateTypeNV Int32
v)))


type NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION"
pattern NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION :: forall a . Integral a => a
pattern $bNV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION :: a
$mNV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION = 1


type NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME = "VK_NV_fragment_shading_rate_enums"

-- No documentation found for TopLevel "VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME"
pattern NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bNV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME :: a
$mNV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME = "VK_NV_fragment_shading_rate_enums"