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)