{-# language CPP #-}
module Graphics.Vulkan.Core10.Enums.QueryPipelineStatisticFlagBits  ( QueryPipelineStatisticFlagBits( QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT
                                                                                                    , QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT
                                                                                                    , QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT
                                                                                                    , QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT
                                                                                                    , QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT
                                                                                                    , QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT
                                                                                                    , QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT
                                                                                                    , QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT
                                                                                                    , QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT
                                                                                                    , QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT
                                                                                                    , QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
                                                                                                    , ..
                                                                                                    )
                                                                    , QueryPipelineStatisticFlags
                                                                    ) where

import GHC.Read (choose)
import GHC.Read (expectP)
import GHC.Read (parens)
import GHC.Show (showParen)
import GHC.Show (showString)
import Numeric (showHex)
import Text.ParserCombinators.ReadPrec ((+++))
import Text.ParserCombinators.ReadPrec (prec)
import Text.ParserCombinators.ReadPrec (step)
import Data.Bits (Bits)
import Foreign.Storable (Storable)
import GHC.Read (Read(readPrec))
import Text.Read.Lex (Lexeme(Ident))
import Graphics.Vulkan.Core10.BaseType (Flags)
import Graphics.Vulkan.Zero (Zero)
-- | VkQueryPipelineStatisticFlagBits - Bitmask specifying queried pipeline
-- statistics
--
-- = Description
--
-- These values are intended to measure relative statistics on one
-- implementation. Various device architectures will count these values
-- differently. Any or all counters /may/ be affected by the issues
-- described in
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#queries-operation-undefined Query Operation>.
--
-- Note
--
-- For example, tile-based rendering devices /may/ need to replay the scene
-- multiple times, affecting some of the counts.
--
-- If a pipeline has @rasterizerDiscardEnable@ enabled, implementations
-- /may/ discard primitives after the final vertex processing stage. As a
-- result, if @rasterizerDiscardEnable@ is enabled, the clipping input and
-- output primitives counters /may/ not be incremented.
--
-- When a pipeline statistics query finishes, the result for that query is
-- marked as available. The application /can/ copy the result to a buffer
-- (via
-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.cmdCopyQueryPoolResults'),
-- or request it be put into host memory (via
-- 'Graphics.Vulkan.Core10.Query.getQueryPoolResults').
--
-- = See Also
--
-- 'QueryPipelineStatisticFlags'
newtype QueryPipelineStatisticFlagBits = QueryPipelineStatisticFlagBits Flags
  deriving newtype (Eq, Ord, Storable, Zero, Bits)

-- | 'QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT' specifies that
-- queries managed by the pool will count the number of vertices processed
-- by the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing input assembly>
-- stage. Vertices corresponding to incomplete primitives /may/ contribute
-- to the count.
pattern QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = QueryPipelineStatisticFlagBits 0x00000001
-- | 'QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT' specifies that
-- queries managed by the pool will count the number of primitives
-- processed by the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#drawing input assembly>
-- stage. If primitive restart is enabled, restarting the primitive
-- topology has no effect on the count. Incomplete primitives /may/ be
-- counted.
pattern QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = QueryPipelineStatisticFlagBits 0x00000002
-- | 'QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT' specifies that
-- queries managed by the pool will count the number of vertex shader
-- invocations. This counter’s value is incremented each time a vertex
-- shader is
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-vertex-execution invoked>.
pattern QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000004
-- | 'QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT' specifies
-- that queries managed by the pool will count the number of geometry
-- shader invocations. This counter’s value is incremented each time a
-- geometry shader is
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-geometry-execution invoked>.
-- In the case of
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#geometry-invocations instanced geometry shaders>,
-- the geometry shader invocations count is incremented for each separate
-- instanced invocation.
pattern QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000008
-- | 'QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT' specifies that
-- queries managed by the pool will count the number of primitives
-- generated by geometry shader invocations. The counter’s value is
-- incremented each time the geometry shader emits a primitive. Restarting
-- primitive topology using the SPIR-V instructions @OpEndPrimitive@ or
-- @OpEndStreamPrimitive@ has no effect on the geometry shader output
-- primitives count.
pattern QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = QueryPipelineStatisticFlagBits 0x00000010
-- | 'QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT' specifies that
-- queries managed by the pool will count the number of primitives
-- processed by the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>
-- stage of the pipeline. The counter’s value is incremented each time a
-- primitive reaches the primitive clipping stage.
pattern QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000020
-- | 'QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT' specifies that
-- queries managed by the pool will count the number of primitives output
-- by the
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vertexpostproc-clipping Primitive Clipping>
-- stage of the pipeline. The counter’s value is incremented each time a
-- primitive passes the primitive clipping stage. The actual number of
-- primitives output by the primitive clipping stage for a particular input
-- primitive is implementation-dependent but /must/ satisfy the following
-- conditions:
--
-- -   If at least one vertex of the input primitive lies inside the
--     clipping volume, the counter is incremented by one or more.
--
-- -   Otherwise, the counter is incremented by zero or more.
pattern QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = QueryPipelineStatisticFlagBits 0x00000040
-- | 'QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT' specifies
-- that queries managed by the pool will count the number of fragment
-- shader invocations. The counter’s value is incremented each time the
-- fragment shader is
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-fragment-execution invoked>.
pattern QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000080
-- | 'QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT'
-- specifies that queries managed by the pool will count the number of
-- patches processed by the tessellation control shader. The counter’s
-- value is incremented once for each patch for which a tessellation
-- control shader is
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-tessellation-control-execution invoked>.
pattern QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = QueryPipelineStatisticFlagBits 0x00000100
-- | 'QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT'
-- specifies that queries managed by the pool will count the number of
-- invocations of the tessellation evaluation shader. The counter’s value
-- is incremented each time the tessellation evaluation shader is
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#shaders-tessellation-evaluation-execution invoked>.
pattern QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000200
-- | 'QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT' specifies that
-- queries managed by the pool will count the number of compute shader
-- invocations. The counter’s value is incremented every time the compute
-- shader is invoked. Implementations /may/ skip the execution of certain
-- compute shader invocations or execute additional compute shader
-- invocations for implementation-dependent reasons as long as the results
-- of rendering otherwise remain unchanged.
pattern QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = QueryPipelineStatisticFlagBits 0x00000400

type QueryPipelineStatisticFlags = QueryPipelineStatisticFlagBits

instance Show QueryPipelineStatisticFlagBits where
  showsPrec p = \case
    QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT -> showString "QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"
    QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT -> showString "QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"
    QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"
    QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"
    QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT -> showString "QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"
    QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"
    QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT -> showString "QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"
    QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"
    QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT -> showString "QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"
    QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"
    QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT -> showString "QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"
    QueryPipelineStatisticFlagBits x -> showParen (p >= 11) (showString "QueryPipelineStatisticFlagBits 0x" . showHex x)

instance Read QueryPipelineStatisticFlagBits where
  readPrec = parens (choose [("QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT", pure QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
                            , ("QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT", pure QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
                            , ("QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
                            , ("QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
                            , ("QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT", pure QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
                            , ("QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
                            , ("QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT", pure QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
                            , ("QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
                            , ("QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT", pure QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
                            , ("QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
                            , ("QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT", pure QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)]
                     +++
                     prec 10 (do
                       expectP (Ident "QueryPipelineStatisticFlagBits")
                       v <- step readPrec
                       pure (QueryPipelineStatisticFlagBits v)))