Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- hlsl :: QuasiQuoter
- comp :: QuasiQuoter
- frag :: QuasiQuoter
- geom :: QuasiQuoter
- tesc :: QuasiQuoter
- tese :: QuasiQuoter
- vert :: QuasiQuoter
- rgen :: QuasiQuoter
- rint :: QuasiQuoter
- rahit :: QuasiQuoter
- rchit :: QuasiQuoter
- rmiss :: QuasiQuoter
- rcall :: QuasiQuoter
- task :: QuasiQuoter
- mesh :: QuasiQuoter
- compileShaderQ :: Maybe String -> String -> Maybe String -> String -> Q Exp
- compileShader :: MonadIO m => Maybe Loc -> Maybe String -> String -> Maybe String -> String -> m ([GlslangWarning], Either [GlslangError] ByteString)
Documentation
hlsl :: QuasiQuoter Source #
hlsl
is a QuasiQuoter which produces HLSL source code with a #line
directive inserted so that error locations point to the correct location in
the Haskell source file. It also permits basic string interpolation.
- Interpolated variables are prefixed with
$
- They can optionally be surrounded with braces like
${foo}
- Interpolated variables are converted to strings with
show
- To escape a
$
use\$
It is intended to be used in concert with compileShaderQ
like so
myConstant = 3.141 -- Note that this will have to be in a different module myFragmentShader = $(compileShaderQ Nothing "frag" (Just "main") [hlsl| static const float myConstant = ${myConstant}; float main (){ return myConstant; } |])
An explicit example (interactive
is from doctest):
>>>
let foo = 450 :: Int in [hlsl|const float foo = $foo|]
"#line ... \"<interactive>\"\nconst float foo = 450"
Note that line number will be thrown off if any of the interpolated variables contain newlines.
comp :: QuasiQuoter Source #
QuasiQuoter for creating a compute shader.
Equivalent to calling $(compileShaderQ Nothing "comp" (Just "main") [hlsl|...|])
without
interpolation support.
frag :: QuasiQuoter Source #
QuasiQuoter for creating a fragment shader.
Equivalent to calling $(compileShaderQ Nothing "frag" (Just "main") [hlsl|...|])
without
interpolation support.
geom :: QuasiQuoter Source #
QuasiQuoter for creating a geometry shader.
Equivalent to calling $(compileShaderQ Nothing "geom" (Just "main") [hlsl|...|])
without
interpolation support.
tesc :: QuasiQuoter Source #
QuasiQuoter for creating a tessellation control shader.
Equivalent to calling $(compileShaderQ Nothing "tesc" (Just "main") [hlsl|...|])
without
interpolation support.
tese :: QuasiQuoter Source #
QuasiQuoter for creating a tessellation evaluation shader.
Equivalent to calling $(compileShaderQ Nothing "tese" (Just "main") [hlsl|...|])
without
interpolation support.
vert :: QuasiQuoter Source #
QuasiQuoter for creating a vertex shader.
Equivalent to calling $(compileShaderQ Nothing "vert" (Just "main") [hlsl|...|])
without
interpolation support.
rgen :: QuasiQuoter Source #
QuasiQuoter for creating a ray generation shader.
Equivalent to calling $(compileShaderQ (Just "spirv1.4") "rgen" (Just "main") [hlsl|...|])
without
interpolation support.
rint :: QuasiQuoter Source #
QuasiQuoter for creating an intersection shader.
Equivalent to calling $(compileShaderQ (Just "spirv1.4") "rint" (Just "main") [hlsl|...|])
without
interpolation support.
rahit :: QuasiQuoter Source #
QuasiQuoter for creating an any-hit shader.
Equivalent to calling $(compileShaderQ (Just "spirv1.4") "rahit" (Just "main") [hlsl|...|])
without
interpolation support.
rchit :: QuasiQuoter Source #
QuasiQuoter for creating a closest hit shader.
Equivalent to calling $(compileShaderQ (Just "spirv1.4") "rchit" (Just "main") [hlsl|...|])
without
interpolation support.
rmiss :: QuasiQuoter Source #
QuasiQuoter for creating a miss shader.
Equivalent to calling $(compileShaderQ (Just "spirv1.4") "rmiss" (Just "main") [hlsl|...|])
without
interpolation support.
rcall :: QuasiQuoter Source #
QuasiQuoter for creating a callable shader.
Equivalent to calling $(compileShaderQ (Just "spirv1.4") "rcall" (Just "main") [hlsl|...|])
without
interpolation support.
task :: QuasiQuoter Source #
QuasiQuoter for creating a task shader.
Equivalent to calling $(compileShaderQ Nothing "task" (Just "main") [hlsl|...|])
without
interpolation support.
mesh :: QuasiQuoter Source #
QuasiQuoter for creating a mesh shader.
Equivalent to calling $(compileShaderQ Nothing "mesh" (Just "main") [hlsl|...|])
without
interpolation support.
:: Maybe String | Argument to pass to `--target-env` |
-> String | stage |
-> Maybe String | Argument name to pass to `-e name` to specify entry-point function name |
-> String | hlsl shader code |
-> Q Exp | Spir-V bytecode |
Compile a HLSL shader to spir-v using glslangValidator.
Messages are converted to GHC warnings or errors depending on compilation success.
:: MonadIO m | |
=> Maybe Loc | Source location |
-> Maybe String | Argument to pass to `--target-env` |
-> String | stage |
-> Maybe String | Argument name to pass to `-e name` to specify entry-point function name |
-> String | hlsl shader code |
-> m ([GlslangWarning], Either [GlslangError] ByteString) | Spir-V bytecode with warnings or errors |
Compile a HLSL shader to spir-v using glslangValidator.