summaryrefslogtreecommitdiff
path: root/ddl/Definitions.hs
diff options
context:
space:
mode:
authorCsaba Hruska <csaba.hruska@gmail.com>2015-12-21 13:48:22 +0100
committerCsaba Hruska <csaba.hruska@gmail.com>2015-12-21 13:48:22 +0100
commitbefc5afb22b36d744c403d103d591c5d190d394f (patch)
tree05e390bef55b0662a9a919b886322b66b113ff21 /ddl/Definitions.hs
parentdc8e31235fccbe5ea54d94b0ca69e005ca88c7ea (diff)
add lambdacube-ir haskell lib
Diffstat (limited to 'ddl/Definitions.hs')
-rw-r--r--ddl/Definitions.hs479
1 files changed, 479 insertions, 0 deletions
diff --git a/ddl/Definitions.hs b/ddl/Definitions.hs
new file mode 100644
index 0000000..9618407
--- /dev/null
+++ b/ddl/Definitions.hs
@@ -0,0 +1,479 @@
1{-# LANGUAGE OverloadedStrings #-}
2module Definitions (modules) where
3
4import Control.Monad.Writer
5import Language
6
7ir = do
8 -- type aliases
9 "StreamName" #= Int
10 "ProgramName" #= Int
11 "TextureName" #= Int
12 "SamplerName" #= Int
13 "UniformName" #= String
14 "SlotName" #= Int
15 "FrameBufferComponent" #= Int
16 "TextureUnit" #= Int
17 "RenderTargetName" #= Int
18 "TextureUnitMapping" #= Map "UniformName" "TextureUnit"
19
20 -- definitions
21 data_ "ArrayValue" $ do
22 const_ "VBoolArray" [Array Bool]
23 const_ "VIntArray" [Array Int32]
24 const_ "VWordArray" [Array Word32]
25 const_ "VFloatArray" [Array Float]
26
27 -- GPU type value reification, needed for shader codegen
28 data_ "Value" $ do
29 const_ "VBool" [Bool]
30 const_ "VV2B" [v2b]
31 const_ "VV3B" [v3b]
32 const_ "VV4B" [v4b]
33 const_ "VWord" [Word32]
34 const_ "VV2U" [v2u]
35 const_ "VV3U" [v3u]
36 const_ "VV4U" [v4u]
37 const_ "VInt" [Int32]
38 const_ "VV2I" [v2i]
39 const_ "VV3I" [v3i]
40 const_ "VV4I" [v4i]
41 const_ "VFloat" [Float]
42 const_ "VV2F" [v2f]
43 const_ "VV3F" [v3f]
44 const_ "VV4F" [v4f]
45 const_ "VM22F" [m22]
46 const_ "VM23F" [m23]
47 const_ "VM24F" [m24]
48 const_ "VM32F" [m32]
49 const_ "VM33F" [m33]
50 const_ "VM34F" [m34]
51 const_ "VM42F" [m42]
52 const_ "VM43F" [m43]
53 const_ "VM44F" [m44]
54
55 data_ "InputType" $ do
56 enum_ "Bool"
57 enum_ "V2B"
58 enum_ "V3B"
59 enum_ "V4B"
60 enum_ "Word"
61 enum_ "V2U"
62 enum_ "V3U"
63 enum_ "V4U"
64 enum_ "Int"
65 enum_ "V2I"
66 enum_ "V3I"
67 enum_ "V4I"
68 enum_ "Float"
69 enum_ "V2F"
70 enum_ "V3F"
71 enum_ "V4F"
72 enum_ "M22F"
73 enum_ "M23F"
74 enum_ "M24F"
75 enum_ "M32F"
76 enum_ "M33F"
77 enum_ "M34F"
78 enum_ "M42F"
79 enum_ "M43F"
80 enum_ "M44F"
81 -- shadow textures
82 enum_ "STexture1D"
83 enum_ "STexture2D"
84 enum_ "STextureCube"
85 enum_ "STexture1DArray"
86 enum_ "STexture2DArray"
87 enum_ "STexture2DRect"
88 -- float textures
89 enum_ "FTexture1D"
90 enum_ "FTexture2D"
91 enum_ "FTexture3D"
92 enum_ "FTextureCube"
93 enum_ "FTexture1DArray"
94 enum_ "FTexture2DArray"
95 enum_ "FTexture2DMS"
96 enum_ "FTexture2DMSArray"
97 enum_ "FTextureBuffer"
98 enum_ "FTexture2DRect"
99 -- int textures
100 enum_ "ITexture1D"
101 enum_ "ITexture2D"
102 enum_ "ITexture3D"
103 enum_ "ITextureCube"
104 enum_ "ITexture1DArray"
105 enum_ "ITexture2DArray"
106 enum_ "ITexture2DMS"
107 enum_ "ITexture2DMSArray"
108 enum_ "ITextureBuffer"
109 enum_ "ITexture2DRect"
110 -- uint textures
111 enum_ "UTexture1D"
112 enum_ "UTexture2D"
113 enum_ "UTexture3D"
114 enum_ "UTextureCube"
115 enum_ "UTexture1DArray"
116 enum_ "UTexture2DArray"
117 enum_ "UTexture2DMS"
118 enum_ "UTexture2DMSArray"
119 enum_ "UTextureBuffer"
120 enum_ "UTexture2DRect"
121 deriving_ [Haskell] [Eq,Ord]
122
123 data_ "PointSpriteCoordOrigin" $ do
124 enum_ "LowerLeft"
125 enum_ "UpperLeft"
126
127 data_ "PointSize" $ do
128 const_ "PointSize" [Float]
129 enum_ "ProgramPointSize"
130
131 data_ "PolygonOffset" $ do
132 enum_ "NoOffset"
133 const_ "Offset" [Float,Float]
134
135 data_ "FrontFace" $ do
136 enum_ "CCW"
137 enum_ "CW"
138
139 data_ "PolygonMode" $ do
140 const_ "PolygonPoint" ["PointSize"]
141 const_ "PolygonLine" [Float]
142 enum_ "PolygonFill"
143
144 data_ "ProvokingVertex" $ do
145 enum_ "FirstVertex"
146 enum_ "LastVertex"
147
148 data_ "CullMode" $ do
149 enum_ "CullNone"
150 const_ "CullFront" ["FrontFace"]
151 const_ "CullBack" ["FrontFace"]
152
153 data_ "ComparisonFunction" $ do
154 enum_ "Never"
155 enum_ "Less"
156 enum_ "Equal"
157 enum_ "Lequal"
158 enum_ "Greater"
159 enum_ "Notequal"
160 enum_ "Gequal"
161 enum_ "Always"
162
163 "DepthFunction" #= "ComparisonFunction"
164
165 data_ "StencilOperation" $ do
166 enum_ "OpZero"
167 enum_ "OpKeep"
168 enum_ "OpReplace"
169 enum_ "OpIncr"
170 enum_ "OpIncrWrap"
171 enum_ "OpDecr"
172 enum_ "OpDecrWrap"
173 enum_ "OpInvert"
174
175 data_ "BlendEquation" $ do
176 enum_ "FuncAdd"
177 enum_ "FuncSubtract"
178 enum_ "FuncReverseSubtract"
179 enum_ "Min"
180 enum_ "Max"
181
182 data_ "BlendingFactor" $ do
183 enum_ "Zero"
184 enum_ "One"
185 enum_ "SrcColor"
186 enum_ "OneMinusSrcColor"
187 enum_ "DstColor"
188 enum_ "OneMinusDstColor"
189 enum_ "SrcAlpha"
190 enum_ "OneMinusSrcAlpha"
191 enum_ "DstAlpha"
192 enum_ "OneMinusDstAlpha"
193 enum_ "ConstantColor"
194 enum_ "OneMinusConstantColor"
195 enum_ "ConstantAlpha"
196 enum_ "OneMinusConstantAlpha"
197 enum_ "SrcAlphaSaturate"
198
199 data_ "LogicOperation" $ do
200 enum_ "Clear"
201 enum_ "And"
202 enum_ "AndReverse"
203 enum_ "Copy"
204 enum_ "AndInverted"
205 enum_ "Noop"
206 enum_ "Xor"
207 enum_ "Or"
208 enum_ "Nor"
209 enum_ "Equiv"
210 enum_ "Invert"
211 enum_ "OrReverse"
212 enum_ "CopyInverted"
213 enum_ "OrInverted"
214 enum_ "Nand"
215 enum_ "Set"
216
217 data_ "StencilOps" $ do
218 constR_ "StencilOps"
219 [ "frontStencilOp" #:: "StencilOperation" -- Used for front faced triangles and other primitives.
220 , "backStencilOp" #:: "StencilOperation" -- Used for back faced triangles.
221 ]
222
223 data_ "StencilTest" $ do
224 constR_ "StencilTest"
225 [ "stencilComparision" #:: "ComparisonFunction" -- The function used to compare the @stencilReference@ and the stencil buffers value with.
226 , "stencilReference" #:: Int32 -- The value to compare with the stencil buffer's value.
227 , "stencilMask" #:: Word32 -- A bit mask with ones in each position that should be compared and written to the stencil buffer.
228 ]
229
230 data_ "StencilTests" $ do
231 const_ "StencilTests" ["StencilTest", "StencilTest"]
232
233 -- primitive types
234 data_ "FetchPrimitive" $ do
235 enum_ "Points"
236 enum_ "Lines"
237 enum_ "Triangles"
238 enum_ "LinesAdjacency"
239 enum_ "TrianglesAdjacency"
240 deriving_ [PureScript] [Show,Eq]
241
242 data_ "OutputPrimitive" $ do
243 enum_ "TrianglesOutput"
244 enum_ "LinesOutput"
245 enum_ "PointsOutput"
246
247 data_ "ColorArity" $ do
248 enum_ "Red"
249 enum_ "RG"
250 enum_ "RGB"
251 enum_ "RGBA"
252 deriving_ [PureScript] [Show]
253
254 data_ "Blending" $ do
255 enum_ "NoBlending"
256 const_ "BlendLogicOp" ["LogicOperation"]
257 constR_ "Blend"
258 [ "colorEqSrc" #:: "BlendEquation"
259 , "alphaEqSrc" #:: "BlendEquation"
260 , "colorFSrc" #:: "BlendingFactor"
261 , "colorFDst" #:: "BlendingFactor"
262 , "alphaFSrc" #:: "BlendingFactor"
263 , "alphaFDst" #:: "BlendingFactor"
264 , "color" #:: v4f
265 ]
266
267 data_ "RasterContext" $ do
268 const_ "PointCtx" ["PointSize", Float, "PointSpriteCoordOrigin"]
269 const_ "LineCtx" [Float, "ProvokingVertex"]
270 const_ "TriangleCtx" ["CullMode", "PolygonMode", "PolygonOffset", "ProvokingVertex"]
271
272 data_ "FragmentOperation" $ do
273 const_ "DepthOp" ["DepthFunction", Bool]
274 const_ "StencilOp" ["StencilTests", "StencilOps", "StencilOps"]
275 const_ "ColorOp" ["Blending", "Value"]
276
277 data_ "AccumulationContext" $ do
278 constR_ "AccumulationContext"
279 [ "accViewportName" #:: Maybe String
280 , "accOperations" #:: List "FragmentOperation"
281 ]
282
283 data_ "TextureDataType" $ do
284 const_ "FloatT" ["ColorArity"]
285 const_ "IntT" ["ColorArity"]
286 const_ "WordT" ["ColorArity"]
287 enum_ "ShadowT"
288 deriving_ [PureScript] [Show]
289
290 data_ "TextureType" $ do
291 const_ "Texture1D" ["TextureDataType", Int]
292 const_ "Texture2D" ["TextureDataType", Int]
293 const_ "Texture3D" ["TextureDataType"]
294 const_ "TextureCube" ["TextureDataType"]
295 const_ "TextureRect" ["TextureDataType"]
296 const_ "Texture2DMS" ["TextureDataType", Int, Int, Bool]
297 const_ "TextureBuffer" ["TextureDataType"]
298
299 data_ "MipMap" $ do
300 const_ "Mip" [Int,Int] -- Base level, Max level
301 enum_ "NoMip"
302 const_ "AutoMip" [Int,Int] -- Base level, Max level
303
304 data_ "Filter" $ do
305 enum_ "Nearest"
306 enum_ "Linear"
307 enum_ "NearestMipmapNearest"
308 enum_ "NearestMipmapLinear"
309 enum_ "LinearMipmapNearest"
310 enum_ "LinearMipmapLinear"
311
312 data_ "EdgeMode" $ do
313 enum_ "Repeat"
314 enum_ "MirroredRepeat"
315 enum_ "ClampToEdge"
316 enum_ "ClampToBorder"
317
318 data_ "ImageSemantic" $ do
319 enum_ "Depth"
320 enum_ "Stencil"
321 enum_ "Color"
322 deriving_ [Haskell] [Eq]
323
324 data_ "ImageRef" $ do
325 const_ "TextureImage" ["TextureName", Int, Maybe Int] -- Texture name, mip index, array index
326 const_ "Framebuffer" ["ImageSemantic"]
327
328 data_ "ClearImage" $ do
329 constR_ "ClearImage"
330 [ "imageSemantic" #:: "ImageSemantic"
331 , "clearValue" #:: "Value"
332 ]
333
334 data_ "Command" $ do
335 const_ "SetRasterContext" ["RasterContext"]
336 const_ "SetAccumulationContext" ["AccumulationContext"]
337 const_ "SetRenderTarget" ["RenderTargetName"]
338 const_ "SetProgram" ["ProgramName"] --TextureUnitMapping -- adding texture unit map to set program command seems to be better solution than the current one
339 const_ "SetSamplerUniform" ["UniformName", "TextureUnit"] -- hint: currently the texture unit mapping is encoded with this command
340 const_ "SetTexture" ["TextureUnit", "TextureName"] -- binds texture to the specified texture unit
341 const_ "SetSampler" ["TextureUnit", Maybe "SamplerName"] -- binds sampler to the specified texture unit
342 const_ "RenderSlot" ["SlotName"]
343 const_ "RenderStream" ["StreamName"]
344 const_ "ClearRenderTarget" [Array "ClearImage"]
345 const_ "GenerateMipMap" ["TextureUnit"]
346 const_ "SaveImage" ["FrameBufferComponent", "ImageRef"] -- from framebuffer component to texture (image)
347 const_ "LoadImage" ["ImageRef", "FrameBufferComponent"] -- from texture (image) to framebuffer component
348
349 data_ "SamplerDescriptor" $ do
350 constR_ "SamplerDescriptor"
351 [ "samplerWrapS" #:: "EdgeMode"
352 , "samplerWrapT" #:: Maybe "EdgeMode"
353 , "samplerWrapR" #:: Maybe "EdgeMode"
354 , "samplerMinFilter" #:: "Filter"
355 , "samplerMagFilter" #:: "Filter"
356 , "samplerBorderColor" #:: "Value"
357 , "samplerMinLod" #:: Maybe Float
358 , "samplerMaxLod" #:: Maybe Float
359 , "samplerLodBias" #:: Float
360 , "samplerCompareFunc" #:: Maybe "ComparisonFunction"
361 ]
362
363 data_ "TextureDescriptor" $ do -- texture size, type, array, mipmap
364 constR_ "TextureDescriptor"
365 [ "textureType" #:: "TextureType"
366 , "textureSize" #:: "Value"
367 , "textureSemantic" #:: "ImageSemantic"
368 , "textureSampler" #:: "SamplerDescriptor"
369 , "textureBaseLevel" #:: Int
370 , "textureMaxLevel" #:: Int
371 ]
372
373 data_ "Parameter" $ do
374 constR_ "Parameter"
375 [ "name" #:: String
376 , "ty" #:: "InputType"
377 ]
378
379 data_ "Program" $ do -- AST, input
380 constR_ "Program"
381 [ "programUniforms" #:: Map "UniformName" "InputType" -- uniform input (value based uniforms only / no textures)
382 , "programStreams" #:: Map "UniformName" "Parameter" -- vertex shader input attribute name -> (slot attribute name, attribute type)
383 , "programInTextures" #:: Map "UniformName" "InputType" -- all textures (uniform textures and render textures) referenced by the program
384 , "programOutput" #:: Array "Parameter"
385 , "vertexShader" #:: String
386 , "geometryShader" #:: Maybe String
387 , "fragmentShader" #:: String
388 ]
389
390 data_ "Slot" $ do -- input, primitive type
391 constR_ "Slot"
392 [ "slotName" #:: String
393 , "slotStreams" #:: Map String "InputType"
394 , "slotUniforms" #:: Map "UniformName" "InputType"
395 , "slotPrimitive" #:: "FetchPrimitive"
396 , "slotPrograms" #:: Array "ProgramName"
397 ]
398
399 data_ "StreamData" $ do
400 constR_ "StreamData"
401 [ "streamData" #:: Map String "ArrayValue"
402 , "streamType" #:: Map String "InputType"
403 , "streamPrimitive" #:: "FetchPrimitive"
404 , "streamPrograms" #:: Array "ProgramName"
405 ]
406
407 data_ "TargetItem" $ do
408 constR_ "TargetItem"
409 [ "targetSemantic" #:: "ImageSemantic"
410 , "targetRef" #:: Maybe "ImageRef"
411 ]
412
413 data_ "RenderTarget" $ do
414 constR_ "RenderTarget"
415 [ "renderTargets" #:: Array "TargetItem" -- render texture or default framebuffer (semantic, render texture for the program output)
416 ]
417
418 data_ "Backend" $ do
419 enum_ "WebGL1"
420 enum_ "OpenGL33"
421
422 data_ "Pipeline" $ do
423 constR_ "Pipeline"
424 [ "backend" #:: "Backend"
425 , "textures" #:: Array "TextureDescriptor"
426 , "samplers" #:: Array "SamplerDescriptor"
427 , "targets" #:: Array "RenderTarget"
428 , "programs" #:: Array "Program"
429 , "slots" #:: Array "Slot"
430 , "streams" #:: Array "StreamData"
431 , "commands" #:: Array "Command"
432 ]
433 deriving_ [Haskell] [Show]
434
435mesh = do
436 data_ "MeshAttribute" $ do
437 const_ "A_Float" [Array Float]
438 const_ "A_V2F" [Array v2f]
439 const_ "A_V3F" [Array v3f]
440 const_ "A_V4F" [Array v4f]
441 const_ "A_M22F" [Array m22]
442 const_ "A_M33F" [Array m33]
443 const_ "A_M44F" [Array m44]
444 const_ "A_Int" [Array Int32]
445 const_ "A_Word" [Array Word32]
446
447 data_ "MeshPrimitive" $ do
448 enum_ "P_Points"
449 enum_ "P_TriangleStrip"
450 enum_ "P_Triangles"
451 const_ "P_TriangleStripI" [Array Int32]
452 const_ "P_TrianglesI" [Array Int32]
453
454 data_ "Mesh" $ do
455 constR_ "Mesh"
456 [ "mAttributes" #:: Map String "MeshAttribute"
457 , "mPrimitive" #:: "MeshPrimitive"
458 ]
459
460typeInfo = do
461 data_ "TypeInfo" $ do
462 constR_ "TypeInfo"
463 [ "startLine" #:: Int
464 , "startColumn" #:: Int
465 , "endLine" #:: Int
466 , "endColumn" #:: Int
467 , "text" #:: String
468 ]
469
470 data_ "MyEither" $ do
471 const_ "MyLeft" ["TypeInfo", Array "TypeInfo"]
472 const_ "MyRight" ["Pipeline", Array "TypeInfo"]
473
474modules = do
475 module_ "IR" ir
476 module_ "Mesh" mesh
477 module_ "TypeInfo" $ do
478 import_ ["IR"]
479 typeInfo