- 
                Notifications
    You must be signed in to change notification settings 
- Fork 35
Open
Description
I write a example https://gist.github.com/ukari/6b9d94b04c3c26ff63ffd4663914c7da
and inlined some examples which could easily run by excute test2(for makeShaderInfo), test3(for makeDescriptorInfo), test4(for makeInputInfo)
module SpirV
  ( reflection
  , makeShaderInfo
  , makeDescriptorInfo
  , makeInputInfo
  ) where
import Vulkan.Core10.Shader (ShaderModule)
data Shader = Shader
  { stage :: ShaderStage
  , code :: B.ByteString
  } deriving (Show)
data Reflection = Reflection
  { entryPoints :: Vector EntryPoint
  , inputs :: Maybe (Vector Input)
  , textures :: Maybe (Vector Texture)
  , ubos :: Maybe (Vector Ubo)
  } deriving (Show, Generic, FromJSON, ToJSON)
data ShaderInfo = ShaderInfo
  { shaderModuleCreateInfo:: ShaderModuleCreateInfo '[]
  , pipelineShaderStageCreateInfos :: ShaderModule -> Vector (PipelineShaderStageCreateInfo '[])
  }
reflection :: MonadIO m => ShaderStage -> "code" ::: String -> m (Shader, Reflection)
makeShaderInfo :: (Shader, Reflection) -> ShaderInfo
makeDescriptorInfo :: Vector (Shader, Reflection) -> Vector (DescriptorSetLayoutCreateInfo '[])
makeInputInfo :: Vector (Shader, Reflection) -> Maybe (PipelineVertexInputStateCreateInfo '[])
now this only support single binding for input vertex, which let all input vertex attribute have a default binding = 0.
maybe can provide a binding map parameter to specify individual binding by name, like foo [(1, ["inPos", "inColor"]) (2, ["texCoord"])] speficies that (binding = 1) inPos, (binding = 1) inColor, (binding = 2) texCoord
here is some related references:
expipiplus1
Metadata
Metadata
Assignees
Labels
No labels