packages feed

spirv-enum-0.1.0.0: src/Data/SpirV/Enum/RayFlags.hs

{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE TypeSynonymInstances #-}

module Data.SpirV.Enum.RayFlags where

import Data.Bits (Bits, FiniteBits, (.|.))
import Data.Word (Word32)
import Foreign.Storable (Storable)

type RayFlags = RayFlagsBits

newtype RayFlagsBits = RayFlagsBits Word32
  deriving newtype (Eq, Ord, Storable, Bits, FiniteBits)

instance Semigroup RayFlags where
  (RayFlagsBits a) <> (RayFlagsBits b) = RayFlagsBits (a .|. b)

instance Monoid RayFlags where
  mempty = RayFlagsBits 0

pattern OpaqueKHR :: RayFlagsBits
pattern OpaqueKHR = RayFlagsBits 0x00000001

pattern NoOpaqueKHR :: RayFlagsBits
pattern NoOpaqueKHR = RayFlagsBits 0x00000002

pattern TerminateOnFirstHitKHR :: RayFlagsBits
pattern TerminateOnFirstHitKHR = RayFlagsBits 0x00000004

pattern SkipClosestHitShaderKHR :: RayFlagsBits
pattern SkipClosestHitShaderKHR = RayFlagsBits 0x00000008

pattern CullBackFacingTrianglesKHR :: RayFlagsBits
pattern CullBackFacingTrianglesKHR = RayFlagsBits 0x00000010

pattern CullFrontFacingTrianglesKHR :: RayFlagsBits
pattern CullFrontFacingTrianglesKHR = RayFlagsBits 0x00000020

pattern CullOpaqueKHR :: RayFlagsBits
pattern CullOpaqueKHR = RayFlagsBits 0x00000040

pattern CullNoOpaqueKHR :: RayFlagsBits
pattern CullNoOpaqueKHR = RayFlagsBits 0x00000080

pattern SkipTrianglesKHR :: RayFlagsBits
pattern SkipTrianglesKHR = RayFlagsBits 0x00000100

pattern SkipAABBsKHR :: RayFlagsBits
pattern SkipAABBsKHR = RayFlagsBits 0x00000200

pattern ForceOpacityMicromap2StateEXT :: RayFlagsBits
pattern ForceOpacityMicromap2StateEXT = RayFlagsBits 0x00000400