content: {-# language CPP #-}
  -- No documentation found for Chapter "SubgroupFeatureFlagBits"
  module Vulkan.Core11.Enums.SubgroupFeatureFlagBits  ( SubgroupFeatureFlags
                                                      , SubgroupFeatureFlagBits( SUBGROUP_FEATURE_BASIC_BIT
                                                                               , SUBGROUP_FEATURE_VOTE_BIT
                                                                               , SUBGROUP_FEATURE_ARITHMETIC_BIT
                                                                               , SUBGROUP_FEATURE_BALLOT_BIT
                                                                               , SUBGROUP_FEATURE_SHUFFLE_BIT
                                                                               , SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
                                                                               , SUBGROUP_FEATURE_CLUSTERED_BIT
                                                                               , SUBGROUP_FEATURE_QUAD_BIT
                                                                               , SUBGROUP_FEATURE_PARTITIONED_BIT_NV
                                                                               , ..
                                                                               )
                                                      ) where
  
  import Data.Bits (Bits)
  import Data.Bits (FiniteBits)
  import Vulkan.Internal.Utils (enumReadPrec)
  import Vulkan.Internal.Utils (enumShowsPrec)
  import GHC.Show (showString)
  import Numeric (showHex)
  import Vulkan.Zero (Zero)
  import Foreign.Storable (Storable)
  import GHC.Read (Read(readPrec))
  import GHC.Show (Show(showsPrec))
  import Vulkan.Core10.FundamentalTypes (Flags)
  type SubgroupFeatureFlags = SubgroupFeatureFlagBits
  
  -- | VkSubgroupFeatureFlagBits - Bitmask describing what group operations are
  -- supported with subgroup scope
  --
  -- = See Also
  --
  -- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_1 VK_VERSION_1_1>,
  -- 'SubgroupFeatureFlags'
  newtype SubgroupFeatureFlagBits = SubgroupFeatureFlagBits Flags
    deriving newtype (Eq, Ord, Storable, Zero, Bits, FiniteBits)
  
  -- | #features-subgroup-basic# 'SUBGROUP_FEATURE_BASIC_BIT' specifies the
  -- device will accept SPIR-V shader modules containing the
  -- @GroupNonUniform@ capability.
  pattern SUBGROUP_FEATURE_BASIC_BIT = SubgroupFeatureFlagBits 0x00000001
  
  -- | #features-subgroup-vote# 'SUBGROUP_FEATURE_VOTE_BIT' specifies the
  -- device will accept SPIR-V shader modules containing the
  -- @GroupNonUniformVote@ capability.
  pattern SUBGROUP_FEATURE_VOTE_BIT = SubgroupFeatureFlagBits 0x00000002
  
  -- | #features-subgroup-arithmetic# 'SUBGROUP_FEATURE_ARITHMETIC_BIT'
  -- specifies the device will accept SPIR-V shader modules containing the
  -- @GroupNonUniformArithmetic@ capability.
  pattern SUBGROUP_FEATURE_ARITHMETIC_BIT = SubgroupFeatureFlagBits 0x00000004
  
  -- | #features-subgroup-ballot# 'SUBGROUP_FEATURE_BALLOT_BIT' specifies the
  -- device will accept SPIR-V shader modules containing the
  -- @GroupNonUniformBallot@ capability.
  pattern SUBGROUP_FEATURE_BALLOT_BIT = SubgroupFeatureFlagBits 0x00000008
  
  -- | #features-subgroup-shuffle# 'SUBGROUP_FEATURE_SHUFFLE_BIT' specifies the
  -- device will accept SPIR-V shader modules containing the
  -- @GroupNonUniformShuffle@ capability.
  pattern SUBGROUP_FEATURE_SHUFFLE_BIT = SubgroupFeatureFlagBits 0x00000010
  
  -- | #features-subgroup-shuffle-relative#
  -- 'SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT' specifies the device will accept
  -- SPIR-V shader modules containing the @GroupNonUniformShuffleRelative@
  -- capability.
  pattern SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = SubgroupFeatureFlagBits 0x00000020
  
  -- | #features-subgroup-clustered# 'SUBGROUP_FEATURE_CLUSTERED_BIT' specifies
  -- the device will accept SPIR-V shader modules containing the
  -- @GroupNonUniformClustered@ capability.
  pattern SUBGROUP_FEATURE_CLUSTERED_BIT = SubgroupFeatureFlagBits 0x00000040
  
  -- | #features-subgroup-quad# 'SUBGROUP_FEATURE_QUAD_BIT' specifies the
  -- device will accept SPIR-V shader modules containing the
  -- @GroupNonUniformQuad@ capability.
  pattern SUBGROUP_FEATURE_QUAD_BIT = SubgroupFeatureFlagBits 0x00000080
  
  -- | #features-subgroup-partitioned# 'SUBGROUP_FEATURE_PARTITIONED_BIT_NV'
  -- specifies the device will accept SPIR-V shader modules containing the
  -- @GroupNonUniformPartitionedNV@ capability.
  pattern SUBGROUP_FEATURE_PARTITIONED_BIT_NV = SubgroupFeatureFlagBits 0x00000100
  
  conNameSubgroupFeatureFlagBits :: String
  conNameSubgroupFeatureFlagBits = "SubgroupFeatureFlagBits"
  
  enumPrefixSubgroupFeatureFlagBits :: String
  enumPrefixSubgroupFeatureFlagBits = "SUBGROUP_FEATURE_"
  
  showTableSubgroupFeatureFlagBits :: [(SubgroupFeatureFlagBits, String)]
  showTableSubgroupFeatureFlagBits =
    [ (SUBGROUP_FEATURE_BASIC_BIT, "BASIC_BIT")
    , (SUBGROUP_FEATURE_VOTE_BIT, "VOTE_BIT")
    ,
      ( SUBGROUP_FEATURE_ARITHMETIC_BIT
      , "ARITHMETIC_BIT"
      )
    , (SUBGROUP_FEATURE_BALLOT_BIT, "BALLOT_BIT")
    ,
      ( SUBGROUP_FEATURE_SHUFFLE_BIT
      , "SHUFFLE_BIT"
      )
    ,
      ( SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
      , "SHUFFLE_RELATIVE_BIT"
      )
    ,
      ( SUBGROUP_FEATURE_CLUSTERED_BIT
      , "CLUSTERED_BIT"
      )
    , (SUBGROUP_FEATURE_QUAD_BIT, "QUAD_BIT")
    ,
      ( SUBGROUP_FEATURE_PARTITIONED_BIT_NV
      , "PARTITIONED_BIT_NV"
      )
    ]
  
  instance Show SubgroupFeatureFlagBits where
    showsPrec =
      enumShowsPrec
        enumPrefixSubgroupFeatureFlagBits
        showTableSubgroupFeatureFlagBits
        conNameSubgroupFeatureFlagBits
        (\(SubgroupFeatureFlagBits x) -> x)
        (\x -> showString "0x" . showHex x)
  
  instance Read SubgroupFeatureFlagBits where
    readPrec =
      enumReadPrec
        enumPrefixSubgroupFeatureFlagBits
        showTableSubgroupFeatureFlagBits
        conNameSubgroupFeatureFlagBits
        SubgroupFeatureFlagBits
  