{-# language CPP #-}
-- | = Name
--
-- VK_NV_representative_fragment_test - device extension
--
-- == VK_NV_representative_fragment_test
--
-- [__Name String__]
--     @VK_NV_representative_fragment_test@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     167
--
-- [__Revision__]
--     2
--
-- [__Extension and Version Dependencies__]
--
--     -   Requires support for Vulkan 1.0
--
-- [__Contact__]
--
--     -   Kedarnath Thangudu
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_NV_representative_fragment_test] @kthangudu%0A*Here describe the issue or question you have about the VK_NV_representative_fragment_test extension* >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2018-09-13
--
-- [__Contributors__]
--
--     -   Kedarnath Thangudu, NVIDIA
--
--     -   Christoph Kubisch, NVIDIA
--
--     -   Pierre Boudier, NVIDIA
--
--     -   Pat Brown, NVIDIA
--
--     -   Jeff Bolz, NVIDIA
--
--     -   Eric Werness, NVIDIA
--
-- == Description
--
-- This extension provides a new representative fragment test that allows
-- implementations to reduce the amount of rasterization and fragment
-- processing work performed for each point, line, or triangle primitive.
-- For any primitive that produces one or more fragments that pass all
-- other early fragment tests, the implementation is permitted to choose
-- one or more “representative” fragments for processing and discard all
-- other fragments. For draw calls rendering multiple points, lines, or
-- triangles arranged in lists, strips, or fans, the representative
-- fragment test is performed independently for each of those primitives.
--
-- This extension is useful for applications that use an early render pass
-- to determine the full set of primitives that would be visible in the
-- final scene. In this render pass, such applications would set up a
-- fragment shader that enables early fragment tests and writes to an image
-- or shader storage buffer to record the ID of the primitive that
-- generated the fragment. Without this extension, the shader would record
-- the ID separately for each visible fragment of each primitive. With this
-- extension, fewer stores will be performed, particularly for large
-- primitives.
--
-- The representative fragment test has no effect if early fragment tests
-- are not enabled via the fragment shader. The set of fragments discarded
-- by the representative fragment test is implementation-dependent and may
-- vary from frame to frame. In some cases, the representative fragment
-- test may not discard any fragments for a given primitive.
--
-- == New Structures
--
-- -   Extending 'Vulkan.Core10.Pipeline.GraphicsPipelineCreateInfo':
--
--     -   'PipelineRepresentativeFragmentTestStateCreateInfoNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceRepresentativeFragmentTestFeaturesNV'
--
-- == New Enum Constants
--
-- -   'NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME'
--
-- -   'NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV'
--
-- == Issues
--
-- (1) Is the representative fragment test guaranteed to have any effect?
--
-- __RESOLVED__: No. As specified, we only guarantee that each primitive
-- with at least one fragment that passes prior tests will have one
-- fragment passing the representative fragment tests. We do not guarantee
-- that any particular fragment will fail the test.
--
-- In the initial implementation of this extension, the representative
-- fragment test is treated as an optimization that may be completely
-- disabled for some pipeline states. This feature was designed for a use
-- case where the fragment shader records information on individual
-- primitives using shader storage buffers or storage images, with no
-- writes to color or depth buffers.
--
-- (2) Will the set of fragments that pass the representative fragment test
-- be repeatable if you draw the same scene over and over again?
--
-- __RESOLVED__: No. The set of fragments that pass the representative
-- fragment test is implementation-dependent and may vary due to the timing
-- of operations performed by the GPU.
--
-- (3) What happens if you enable the representative fragment test with
-- writes to color and\/or depth render targets enabled?
--
-- __RESOLVED__: If writes to the color or depth buffer are enabled, they
-- will be performed for any fragments that survive the relevant tests. Any
-- fragments that fail the representative fragment test will not update
-- color buffers. For the use cases intended for this feature, we do not
-- expect color or depth writes to be enabled.
--
-- (4) How do derivatives and automatic texture level of detail
-- computations work with the representative fragment test enabled?
--
-- __RESOLVED__: If a fragment shader uses derivative functions or texture
-- lookups using automatic level of detail computation, derivatives will be
-- computed identically whether or not the representative fragment test is
-- enabled. For the use cases intended for this feature, we do not expect
-- the use of derivatives in the fragment shader.
--
-- == Version History
--
-- -   Revision 2, 2018-09-13 (pbrown)
--
--     -   Add issues.
--
-- -   Revision 1, 2018-08-22 (Kedarnath Thangudu)
--
--     -   Internal Revisions
--
-- == See Also
--
-- 'PhysicalDeviceRepresentativeFragmentTestFeaturesNV',
-- 'PipelineRepresentativeFragmentTestStateCreateInfoNV'
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_NV_representative_fragment_test Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_NV_representative_fragment_test  ( PhysicalDeviceRepresentativeFragmentTestFeaturesNV(..)
                                                             , PipelineRepresentativeFragmentTestStateCreateInfoNV(..)
                                                             , NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION
                                                             , pattern NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION
                                                             , NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME
                                                             , pattern NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME
                                                             ) where

import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
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 Foreign.Ptr (Ptr)
import Data.Kind (Type)
import Vulkan.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV))
-- | VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV - Structure
-- describing the representative fragment test features that can be
-- supported by an implementation
--
-- = Members
--
-- This structure describes the following feature:
--
-- = Description
--
-- If the 'PhysicalDeviceRepresentativeFragmentTestFeaturesNV' structure is
-- included in the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
-- it is filled in to indicate whether each corresponding feature is
-- supported. 'PhysicalDeviceRepresentativeFragmentTestFeaturesNV' /can/
-- also be used in the @pNext@ chain of
-- 'Vulkan.Core10.Device.DeviceCreateInfo' to selectively enable these
-- features.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_representative_fragment_test VK_NV_representative_fragment_test>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceRepresentativeFragmentTestFeaturesNV = PhysicalDeviceRepresentativeFragmentTestFeaturesNV
  { -- | #features-representativeFragmentTest# @representativeFragmentTest@
    -- indicates whether the implementation supports the representative
    -- fragment test. See
    -- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-rep-frag-test Representative Fragment Test>.
    PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> Bool
representativeFragmentTest :: Bool }
  deriving (Typeable, PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> Bool
(PhysicalDeviceRepresentativeFragmentTestFeaturesNV
 -> PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> Bool)
-> (PhysicalDeviceRepresentativeFragmentTestFeaturesNV
    -> PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> Bool)
-> Eq PhysicalDeviceRepresentativeFragmentTestFeaturesNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> Bool
$c/= :: PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> Bool
== :: PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> Bool
$c== :: PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceRepresentativeFragmentTestFeaturesNV)
#endif
deriving instance Show PhysicalDeviceRepresentativeFragmentTestFeaturesNV

instance ToCStruct PhysicalDeviceRepresentativeFragmentTestFeaturesNV where
  withCStruct :: forall b.
PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> (Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> IO b)
-> IO b
withCStruct PhysicalDeviceRepresentativeFragmentTestFeaturesNV
x Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> IO b
f = Int
-> (Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p -> Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p PhysicalDeviceRepresentativeFragmentTestFeaturesNV
x (Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> IO b
f Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> IO b
-> IO b
pokeCStruct Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p PhysicalDeviceRepresentativeFragmentTestFeaturesNV{Bool
representativeFragmentTest :: Bool
$sel:representativeFragmentTest:PhysicalDeviceRepresentativeFragmentTestFeaturesNV :: PhysicalDeviceRepresentativeFragmentTestFeaturesNV -> Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
representativeFragmentTest))
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
p Ptr PhysicalDeviceRepresentativeFragmentTestFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

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

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

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


-- | VkPipelineRepresentativeFragmentTestStateCreateInfoNV - Structure
-- specifying representative fragment test
--
-- = Description
--
-- If this structure is not included in the @pNext@ chain,
-- @representativeFragmentTestEnable@ is considered to be
-- 'Vulkan.Core10.FundamentalTypes.FALSE', and the representative fragment
-- test is disabled.
--
-- If the active fragment shader does not specify the @EarlyFragmentTests@
-- execution mode, the representative fragment shader test has no effect,
-- even if enabled.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_representative_fragment_test VK_NV_representative_fragment_test>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PipelineRepresentativeFragmentTestStateCreateInfoNV = PipelineRepresentativeFragmentTestStateCreateInfoNV
  { -- | @representativeFragmentTestEnable@ controls whether the representative
    -- fragment test is enabled.
    PipelineRepresentativeFragmentTestStateCreateInfoNV -> Bool
representativeFragmentTestEnable :: Bool }
  deriving (Typeable, PipelineRepresentativeFragmentTestStateCreateInfoNV
-> PipelineRepresentativeFragmentTestStateCreateInfoNV -> Bool
(PipelineRepresentativeFragmentTestStateCreateInfoNV
 -> PipelineRepresentativeFragmentTestStateCreateInfoNV -> Bool)
-> (PipelineRepresentativeFragmentTestStateCreateInfoNV
    -> PipelineRepresentativeFragmentTestStateCreateInfoNV -> Bool)
-> Eq PipelineRepresentativeFragmentTestStateCreateInfoNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PipelineRepresentativeFragmentTestStateCreateInfoNV
-> PipelineRepresentativeFragmentTestStateCreateInfoNV -> Bool
$c/= :: PipelineRepresentativeFragmentTestStateCreateInfoNV
-> PipelineRepresentativeFragmentTestStateCreateInfoNV -> Bool
== :: PipelineRepresentativeFragmentTestStateCreateInfoNV
-> PipelineRepresentativeFragmentTestStateCreateInfoNV -> Bool
$c== :: PipelineRepresentativeFragmentTestStateCreateInfoNV
-> PipelineRepresentativeFragmentTestStateCreateInfoNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PipelineRepresentativeFragmentTestStateCreateInfoNV)
#endif
deriving instance Show PipelineRepresentativeFragmentTestStateCreateInfoNV

instance ToCStruct PipelineRepresentativeFragmentTestStateCreateInfoNV where
  withCStruct :: forall b.
PipelineRepresentativeFragmentTestStateCreateInfoNV
-> (Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
    -> IO b)
-> IO b
withCStruct PipelineRepresentativeFragmentTestStateCreateInfoNV
x Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV -> IO b
f = Int
-> (Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
    -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV -> IO b)
 -> IO b)
-> (Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
    -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p -> Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
-> PipelineRepresentativeFragmentTestStateCreateInfoNV
-> IO b
-> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p PipelineRepresentativeFragmentTestStateCreateInfoNV
x (Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV -> IO b
f Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p)
  pokeCStruct :: forall b.
Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
-> PipelineRepresentativeFragmentTestStateCreateInfoNV
-> IO b
-> IO b
pokeCStruct Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p PipelineRepresentativeFragmentTestStateCreateInfoNV{Bool
representativeFragmentTestEnable :: Bool
$sel:representativeFragmentTestEnable:PipelineRepresentativeFragmentTestStateCreateInfoNV :: PipelineRepresentativeFragmentTestStateCreateInfoNV -> Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
representativeFragmentTestEnable))
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
-> IO b -> IO b
pokeZeroCStruct Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
p Ptr PipelineRepresentativeFragmentTestStateCreateInfoNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

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

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

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


type NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION = 2

-- No documentation found for TopLevel "VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION"
pattern NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION :: forall a . Integral a => a
pattern $bNV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION :: forall a. Integral a => a
$mNV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> (Void# -> r) -> (Void# -> r) -> r
NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION = 2


type NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME = "VK_NV_representative_fragment_test"

-- No documentation found for TopLevel "VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME"
pattern NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bNV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mNV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME = "VK_NV_representative_fragment_test"