module Data.SpirV.Reflect.Module
  ( Module(..)
  ) where

import Data.Text (Text)
import Data.Vector (Vector)
import GHC.Generics (Generic)

import Data.SpirV.Reflect.BlockVariable (BlockVariable)
import Data.SpirV.Reflect.DescriptorBinding (DescriptorBinding)
import Data.SpirV.Reflect.DescriptorSet (DescriptorSet)
import Data.SpirV.Reflect.Enums qualified as Enums
import Data.SpirV.Reflect.InterfaceVariable (InterfaceVariable)
import Data.SpirV.Reflect.SpecializationConstant (SpecializationConstant)

data Module = Module
  { Module -> Generator
generator               :: Enums.Generator
  , Module -> Text
entry_point_name        :: Text
  , Module -> Int
entry_point_id          :: Int
  , Module -> Int
source_language         :: Int
  , Module -> Int
source_language_version :: Int
  , Module -> Int
spirv_execution_model   :: Int
  , Module -> Int
shader_stage            :: Int
  , Module -> Vector DescriptorBinding
descriptor_bindings     :: Vector DescriptorBinding
  , Module -> Vector DescriptorSet
descriptor_sets         :: Vector DescriptorSet
  , Module -> Vector InterfaceVariable
input_variables         :: Vector InterfaceVariable
  , Module -> Vector InterfaceVariable
output_variables        :: Vector InterfaceVariable
  , Module -> Vector BlockVariable
push_constants          :: Vector BlockVariable
  , Module -> Vector SpecializationConstant
spec_constants          :: Vector SpecializationConstant
  }
  deriving (Module -> Module -> Bool
(Module -> Module -> Bool)
-> (Module -> Module -> Bool) -> Eq Module
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Module -> Module -> Bool
== :: Module -> Module -> Bool
$c/= :: Module -> Module -> Bool
/= :: Module -> Module -> Bool
Eq, Int -> Module -> ShowS
[Module] -> ShowS
Module -> String
(Int -> Module -> ShowS)
-> (Module -> String) -> ([Module] -> ShowS) -> Show Module
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Module -> ShowS
showsPrec :: Int -> Module -> ShowS
$cshow :: Module -> String
show :: Module -> String
$cshowList :: [Module] -> ShowS
showList :: [Module] -> ShowS
Show, (forall x. Module -> Rep Module x)
-> (forall x. Rep Module x -> Module) -> Generic Module
forall x. Rep Module x -> Module
forall x. Module -> Rep Module x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Module -> Rep Module x
from :: forall x. Module -> Rep Module x
$cto :: forall x. Rep Module x -> Module
to :: forall x. Rep Module x -> Module
Generic)