packages feed

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

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

module Data.SpirV.Enum.MemoryAccess where

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

type MemoryAccess = MemoryAccessBits

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

instance Semigroup MemoryAccess where
  (MemoryAccessBits a) <> (MemoryAccessBits b) = MemoryAccessBits (a .|. b)

instance Monoid MemoryAccess where
  mempty = MemoryAccessBits 0

pattern Volatile :: MemoryAccessBits
pattern Volatile = MemoryAccessBits 0x00000001

pattern Aligned :: MemoryAccessBits
pattern Aligned = MemoryAccessBits 0x00000002

pattern Nontemporal :: MemoryAccessBits
pattern Nontemporal = MemoryAccessBits 0x00000004

pattern MakePointerAvailable :: MemoryAccessBits
pattern MakePointerAvailable = MemoryAccessBits 0x00000008

pattern MakePointerAvailableKHR :: MemoryAccessBits
pattern MakePointerAvailableKHR = MemoryAccessBits 0x00000008

pattern MakePointerVisible :: MemoryAccessBits
pattern MakePointerVisible = MemoryAccessBits 0x00000010

pattern MakePointerVisibleKHR :: MemoryAccessBits
pattern MakePointerVisibleKHR = MemoryAccessBits 0x00000010

pattern NonPrivatePointer :: MemoryAccessBits
pattern NonPrivatePointer = MemoryAccessBits 0x00000020

pattern NonPrivatePointerKHR :: MemoryAccessBits
pattern NonPrivatePointerKHR = MemoryAccessBits 0x00000020

pattern AliasScopeINTELMask :: MemoryAccessBits
pattern AliasScopeINTELMask = MemoryAccessBits 0x00010000

pattern NoAliasINTELMask :: MemoryAccessBits
pattern NoAliasINTELMask = MemoryAccessBits 0x00020000