packages feed

spirv-reflect-types-0.1: lib/Data/SpirV/Reflect/Traits.hs

module Data.SpirV.Reflect.Traits where

import Data.Vector.Storable qualified as Storable
import Data.Word (Word32)
import GHC.Generics (Generic)

import Data.SpirV.Reflect.Enums qualified as Enums

data Numeric = Numeric
  { scalar :: Scalar
  , vector :: Vector
  , matrix :: Matrix
  }
  deriving (Eq, Ord, Show, Generic)

data Scalar = Scalar
  { width      :: Word32
  , signedness :: Word32
  }
  deriving (Eq, Ord, Show, Generic)

data Vector = Vector
  { component_count :: Word32
  }
  deriving (Eq, Ord, Show, Generic)

data Matrix = Matrix
  { column_count :: Word32
  , row_count    :: Word32
  , stride       :: Word32 -- ^ Measured in bytes
  }
  deriving (Eq, Ord, Show, Generic)

data Array = Array
  { dims_count :: Word32
  , dims       :: Storable.Vector Word32
  , stride     :: Maybe Word32
  }
  deriving (Eq, Ord, Show, Generic)

data Image = Image
  { dim          :: Enums.Dim
  , depth        :: Word32
  , arrayed      :: Word32
  , ms           :: Word32 -- ^ 0: single-sampled, 1: multisampled
  , sampled      :: Word32
  , image_format :: Enums.ImageFormat
  }
  deriving (Eq, Ord, Show, Generic)