summaryrefslogtreecommitdiff
path: root/testdata/accept/Builtins.lc
diff options
context:
space:
mode:
Diffstat (limited to 'testdata/accept/Builtins.lc')
l---------[-rw-r--r--]testdata/accept/Builtins.lc573
1 files changed, 1 insertions, 572 deletions
diff --git a/testdata/accept/Builtins.lc b/testdata/accept/Builtins.lc
index 674335cb..8fdb2f22 100644..120000
--- a/testdata/accept/Builtins.lc
+++ b/testdata/accept/Builtins.lc
@@ -1,572 +1 @@
1{-# LANGUAGE NoImplicitPrelude #-} ../../lc/Builtins.lc \ No newline at end of file
2module Builtins
3 ( module Internals
4 , module Builtins
5 ) where
6
7import Internals
8
9id x = x
10
11---------------------------------------
12
13data Nat = Zero | Succ Nat
14
15data List a = Nil | Cons a (List a)
16
17type family JoinTupleType t1 t2 where
18 -- TODO
19 JoinTupleType () a = a
20 JoinTupleType a () = a
21 JoinTupleType (a, b) c = (a, b, c)
22 JoinTupleType a (b, c) = (a, b, c)
23 JoinTupleType a (b, c, d) = (a, b, c, d)
24 JoinTupleType a (b, c, d, e) = (a, b, c, d, e)
25 JoinTupleType a b = (a, b)
26
27class AttributeTuple a
28instance AttributeTuple a -- TODO
29class ValidOutput a
30instance ValidOutput a -- TODO
31class ValidFrameBuffer a
32instance ValidFrameBuffer a -- TODO
33
34data VecS (a :: Type) :: Nat -> Type where
35 V2 :: a -> a -> VecS a 2
36 V3 :: a -> a -> a -> VecS a 3
37 V4 :: a -> a -> a -> a -> VecS a 4
38
39type family Vec (n :: Nat) t where Vec n t = VecS t n
40
41type family VecScalar (n :: Nat) a where
42 VecScalar 1 a = a
43 VecScalar ('Succ ('Succ n)) a = Vec ('Succ ('Succ n)) a
44
45-- may be a data family?
46type family TFVec (n :: Nat) a where
47 TFVec n a = Vec n a -- TODO: check range: n = 2,3,4; a is Float, Int, Word, Bool
48
49-- todo: use less constructors with more parameters
50data Mat :: Nat -> Nat -> Type -> Type where
51 M22F :: Vec 2 Float -> Vec 2 Float -> Mat 2 2 Float
52 M32F :: Vec 3 Float -> Vec 3 Float -> Mat 3 2 Float
53 M42F :: Vec 4 Float -> Vec 4 Float -> Mat 4 2 Float
54 M23F :: Vec 2 Float -> Vec 2 Float -> Vec 2 Float -> Mat 2 3 Float
55 M33F :: Vec 3 Float -> Vec 3 Float -> Vec 3 Float -> Mat 3 3 Float
56 M43F :: Vec 4 Float -> Vec 4 Float -> Vec 4 Float -> Mat 4 3 Float
57 M24F :: Vec 2 Float -> Vec 2 Float -> Vec 2 Float -> Vec 2 Float -> Mat 2 4 Float
58 M34F :: Vec 3 Float -> Vec 3 Float -> Vec 3 Float -> Vec 3 Float -> Mat 3 4 Float
59 M44F :: Vec 4 Float -> Vec 4 Float -> Vec 4 Float -> Vec 4 Float -> Mat 4 4 Float
60
61type family MatVecElem a where
62 MatVecElem (VecS a n) = a
63 MatVecElem (Mat i j a) = a
64
65type family MatVecScalarElem a where
66 MatVecScalarElem Float = Float
67 MatVecScalarElem Bool = Bool
68 MatVecScalarElem Int = Int
69 MatVecScalarElem (VecS a n) = a
70 MatVecScalarElem (Mat i j a) = a
71
72-- may be a data family?
73type family TFMat i j where
74 TFMat (VecS a i) (VecS a' j) = T2 (a ~ a') (Mat i j a)
75
76--------------------------------------- swizzling
77
78data Swizz = Sx | Sy | Sz | Sw
79
80-- todo: use pattern matching
81mapVec :: forall a b m . (a -> b) -> Vec m a -> Vec m b
82mapVec @a @b @m f v = 'VecSCase (\m _ -> 'Vec m b)
83 (\x y -> V2 (f x) (f y))
84 (\x y z -> V3 (f x) (f y) (f z))
85 (\x y z w -> V4 (f x) (f y) (f z) (f w))
86 @m
87 v
88
89-- todo: make it more type safe
90swizzscalar :: forall n . Vec n a -> Swizz -> a
91swizzscalar (V2 x y) Sx = x
92swizzscalar (V2 x y) Sy = y
93swizzscalar (V3 x y z) Sx = x
94swizzscalar (V3 x y z) Sy = y
95swizzscalar (V3 x y z) Sz = z
96swizzscalar (V4 x y z w) Sx = x
97swizzscalar (V4 x y z w) Sy = y
98swizzscalar (V4 x y z w) Sz = z
99swizzscalar (V4 x y z w) Sw = w
100
101-- used to prevent unfolding of swizzvector on variables (behind GPU lambda)
102definedVec :: forall a m . Vec m a -> Bool
103definedVec (V2 _ _) = True
104definedVec (V3 _ _ _) = True
105definedVec (V4 _ _ _ _) = True
106
107swizzvector :: forall n . forall m . Vec n a -> Vec m Swizz -> Vec m a
108swizzvector v w | definedVec v = mapVec (swizzscalar v) w
109
110
111--------------------------------------- type classes
112
113class CNum a
114
115instance CNum Int
116instance CNum Float
117
118class Signed a
119
120instance Signed Int
121instance Signed Float
122
123class Num a where
124 fromInt :: Int -> a
125 compare :: a -> a -> Ordering
126 negate :: a -> a
127
128instance Num Int where
129 fromInt = id
130 compare = primCompareInt
131 negate = primNegateInt
132instance Num Word where
133 fromInt = primIntToWord
134 compare = primCompareWord
135 negate = primNegateWord
136instance Num Float where
137 fromInt = primIntToFloat
138 compare = primCompareFloat
139 negate = primNegateFloat
140
141class Component a where
142 vec2 :: a -> a -> Vec 2 a
143 vec3 :: a -> a -> a -> Vec 3 a
144 vec4 :: a -> a -> a -> a -> Vec 4 a
145 zeroComp :: a
146 oneComp :: a
147-- PrimZero, PrimOne :: {- (Component a) => -- TODO -} a
148
149instance Component Bool where
150 vec2 = V2
151 vec3 = V3
152 vec4 = V4
153 zeroComp = False
154 oneComp = True
155instance Component Int where
156 vec2 = V2
157 vec3 = V3
158 vec4 = V4
159 zeroComp = 0 :: Int -- todo
160 oneComp = 1 :: Int -- todo
161
162instance Component Word where
163 vec2 = V2
164 vec3 = V3
165 vec4 = V4
166 zeroComp = 0 :: Word
167 oneComp = 1 :: Word
168
169instance Component Float where
170 vec2 = V2
171 vec3 = V3
172 vec4 = V4
173 zeroComp = 0.0 -- todo: 0
174 oneComp = 1.0 -- todo: 1
175instance Component (VecS Float 2) where
176 vec2 = V2
177 vec3 = V3
178 vec4 = V4
179 zeroComp = V2 0.0 0.0
180 oneComp = V2 1.0 1.0
181instance Component (VecS Float 3) where
182 vec2 = V2
183 vec3 = V3
184 vec4 = V4
185 zeroComp = V3 0.0 0.0 0.0
186 oneComp = V3 1.0 1.0 1.0
187instance Component (VecS Float 4) where
188 vec2 = V2
189 vec3 = V3
190 vec4 = V4
191 zeroComp = V4 0.0 0.0 0.0 0.0
192 oneComp = V4 1.0 1.0 1.0 1.0
193instance Component (VecS Bool 2) {-where-}
194instance Component (VecS Bool 3) {-where-}
195instance Component (VecS Bool 4) where
196 vec2 = V2
197 vec3 = V3
198 vec4 = V4
199 zeroComp = V4 False False False False
200 oneComp = V4 True True True True
201
202class Integral a
203
204instance Integral Int
205instance Integral Word
206
207class NumComponent a
208
209instance NumComponent Int
210instance NumComponent Word
211instance NumComponent Float
212instance NumComponent (VecS Float 2)
213instance NumComponent (VecS Float 3)
214instance NumComponent (VecS Float 4)
215
216class Floating a
217
218instance Floating Float
219instance Floating (VecS Float 2) -- todo: use Vec
220instance Floating (VecS Float 3)
221instance Floating (VecS Float 4)
222instance Floating (Mat 2 2 Float)
223instance Floating (Mat 2 3 Float)
224instance Floating (Mat 2 4 Float)
225instance Floating (Mat 3 2 Float)
226instance Floating (Mat 3 3 Float)
227instance Floating (Mat 3 4 Float)
228instance Floating (Mat 4 2 Float)
229instance Floating (Mat 4 3 Float)
230instance Floating (Mat 4 4 Float)
231
232data BlendingFactor
233 = Zero' --- FIXME: modified
234 | One
235 | SrcColor
236 | OneMinusSrcColor
237 | DstColor
238 | OneMinusDstColor
239 | SrcAlpha
240 | OneMinusSrcAlpha
241 | DstAlpha
242 | OneMinusDstAlpha
243 | ConstantColor
244 | OneMinusConstantColor
245 | ConstantAlpha
246 | OneMinusConstantAlpha
247 | SrcAlphaSaturate
248
249data BlendEquation
250 = FuncAdd
251 | FuncSubtract
252 | FuncReverseSubtract
253 | Min
254 | Max
255
256data LogicOperation
257 = Clear
258 | And
259 | AndReverse
260 | Copy
261 | AndInverted
262 | Noop
263 | Xor
264 | Or
265 | Nor
266 | Equiv
267 | Invert
268 | OrReverse
269 | CopyInverted
270 | OrInverted
271 | Nand
272 | Set
273
274data StencilOperation
275 = OpZero
276 | OpKeep
277 | OpReplace
278 | OpIncr
279 | OpIncrWrap
280 | OpDecr
281 | OpDecrWrap
282 | OpInvert
283
284data ComparisonFunction
285 = Never
286 | Less
287 | Equal
288 | Lequal
289 | Greater
290 | Notequal
291 | Gequal
292 | Always
293
294data ProvokingVertex
295 = LastVertex
296 | FirstVertex
297
298data FrontFace
299 = CW
300 | CCW
301
302data CullMode
303 = CullFront FrontFace
304 | CullBack FrontFace
305 | CullNone
306
307data PointSize
308 = PointSize Float
309 | ProgramPointSize
310
311data PolygonMode
312 = PolygonFill
313 | PolygonPoint PointSize
314 | PolygonLine Float
315
316data PolygonOffset
317 = NoOffset
318 | Offset Float Float
319
320data PointSpriteCoordOrigin
321 = LowerLeft
322 | UpperLeft
323
324
325data Depth a where
326data Stencil a where
327data Color a where
328
329type family ColorRepr a where
330 ColorRepr () = ()
331 ColorRepr (a, b) = (Color a, Color b)
332 ColorRepr (a, b, c) = (Color a, Color b, Color c)
333 ColorRepr (a, b, c, d) = (Color a, Color b, Color c, Color d)
334 ColorRepr (a, b, c, d, e) = (Color a, Color b, Color c, Color d, Color e)
335 ColorRepr a = Color a -- TODO
336
337data PrimitiveType
338 = Triangle
339 | Line
340 | Point
341 | TriangleAdjacency
342 | LineAdjacency
343
344-- builtin
345primTexture :: () -> Vec 2 Float -> Vec 4 Float
346
347-- builtins
348Uniform :: String -> t
349Attribute :: String -> t
350
351data FragmentShader :: Type -> Type where
352 FragmentShader :: (a ~ ColorRepr t) => (b -> t) -> FragmentShader (b -> a)
353 FragmentShaderDepth :: (x ~ ColorRepr t, a ~ JoinTupleType (Depth Float) x) => (b -> (Float, t))
354 -> FragmentShader (b -> a)
355 FragmentShaderRastDepth :: (x ~ ColorRepr t, a ~ JoinTupleType (Depth Float) x) => (b -> t)
356 -> FragmentShader (b -> a)
357
358data RasterContext :: PrimitiveType -> Type where
359 TriangleCtx :: CullMode -> PolygonMode -> PolygonOffset -> ProvokingVertex -> RasterContext Triangle
360 PointCtx :: PointSize -> Float -> PointSpriteCoordOrigin -> RasterContext Point
361 LineCtx :: Float -> ProvokingVertex -> RasterContext Line
362
363data Interpolated t where
364 Smooth, NoPerspective
365 :: (Floating t) => t -> Interpolated t
366 Flat :: t -> Interpolated t
367
368type family FTRepr' a where
369 -- TODO
370 FTRepr' [a] = a
371 FTRepr' ([a], [b]) = (a, b)
372 FTRepr' (Interpolated a) = a
373 FTRepr' (Interpolated a, Interpolated b) = (a, b)
374 FTRepr' (Interpolated a, Interpolated b, Interpolated c) = (a, b, c)
375
376data VertexOut a where
377 VertexOut :: (a ~ FTRepr' x) => Vec 4 Float -> Float -> (){-TODO-} -> x -> VertexOut a
378
379data Blending :: Type -> Type where
380 NoBlending :: Blending t
381 BlendLogicOp :: (Integral t) => LogicOperation -> Blending t
382 Blend :: (BlendEquation, BlendEquation)
383 -> ((BlendingFactor, BlendingFactor), (BlendingFactor, BlendingFactor))
384 -> Vec 4 Float -> Blending Float
385
386{- TODO: more precise kinds
387 FragmentOperation :: Semantic -> *
388 FragmentOut :: Semantic -> *
389 VertexOut :: ???
390-}
391
392data StencilTests
393data StencilOps
394data Int32
395
396data FragmentOperation :: Type -> Type where
397 ColorOp :: (mask ~ VecScalar d Bool, color ~ VecScalar d c, Num c) => Blending c -> mask
398 -> FragmentOperation (Color color)
399 DepthOp :: ComparisonFunction -> Bool -> FragmentOperation (Depth Float)
400 StencilOp :: StencilTests -> StencilOps -> StencilOps -> FragmentOperation (Stencil Int32)
401
402type family FragOps a where
403 FragOps (FragmentOperation t) = t
404 FragOps (FragmentOperation t1, FragmentOperation t2) = (t1, t2)
405 FragOps (FragmentOperation t1, FragmentOperation t2, FragmentOperation t3) = (t1, t2, t3)
406 FragOps (FragmentOperation t1, FragmentOperation t2, FragmentOperation t3, FragmentOperation t4) = (t1, t2, t3, t4)
407 FragOps (FragmentOperation t1, FragmentOperation t2, FragmentOperation t3, FragmentOperation t4, FragmentOperation t5) = (t1, t2, t3, t4, t5)
408
409data AccumulationContext a where
410 AccumulationContext :: (a ~ FragOps t) => t -> AccumulationContext a
411
412data FragmentFilter t where
413 PassAll :: FragmentFilter t
414 Filter :: (t -> Bool) -> FragmentFilter t
415
416data VertexStream (a :: PrimitiveType) t where
417 Fetch :: (AttributeTuple t) => String -> t -> VertexStream a t
418 FetchArrays :: (AttributeTuple t, t ~ FTRepr' t') => t' -> VertexStream a t
419
420fetch s a t = Fetch @a s t
421fetchArrays a t = FetchArrays @a t
422
423data PrimitiveStream (p :: PrimitiveType) :: Nat -> Type -> Type where
424 Transform :: (a -> VertexOut b) -> VertexStream p a -> PrimitiveStream p 1 b
425
426 -- Render Operations
427data FragmentStream (n :: Nat) a where
428 Rasterize :: RasterContext x -> PrimitiveStream x n a -> FragmentStream n a
429
430data FilteredFragmentStream (n :: Nat) a where
431 FilteredFragmentStream
432 :: FragmentFilter a -> FragmentStream n a -> FilteredFragmentStream n a
433
434data Fragments (n :: Nat) b where
435 Fragments :: ValidOutput b => FragmentShader (a -> b) -> FilteredFragmentStream n a -> Fragments n b
436
437-- todo: mutually defined with FrameBuffer and Image
438type family TFFrameBuffer a {-where
439 TFFrameBuffer (Image n t) = FrameBuffer n t
440 TFFrameBuffer (Image n1 t1, Image n2 t2) {- TODO | n1 == n2 -} = FrameBuffer n1 (t1, t2)
441 TFFrameBuffer (Image n1 t1, Image n2 t2, Image n2 t3) {- TODO | n1 == n2 && n2 == n3 -} = FrameBuffer n1 (t1, t2, t3)
442-}
443data FrameBuffer (n :: Nat) b where
444 Accumulate :: AccumulationContext b -> Fragments n b -> FrameBuffer n b -> FrameBuffer n b
445 FrameBuffer :: (ValidFrameBuffer b, FrameBuffer n b ~ TFFrameBuffer a) => a -> FrameBuffer n b
446
447accumulate ctx ffilt fshader fstr fb = Accumulate ctx (Fragments fshader (FilteredFragmentStream ffilt fstr)) fb
448
449data Image :: Nat -> Type -> Type where
450 ColorImage :: forall a d t color . (Num t, color ~ VecScalar d t)
451 => color -> Image a (Color color)
452 DepthImage :: forall a . Float -> Image a (Depth Float)
453 StencilImage :: forall a . Int -> Image a (Stencil Int)
454
455 -- texture support
456 PrjImage :: FrameBuffer 1 a -> Image 1 a
457 PrjImageColor :: FrameBuffer 1 (Depth Float, Color (Vec 4 Float)) -> Image 1 (Color (Vec 4 Float))
458
459data Output where
460 ScreenOut :: FrameBuffer a b -> Output
461
462-------------------------------------------------------------------
463-- * Builtin Primitive Functions *
464-- Arithmetic Functions (componentwise)
465
466PrimAdd, PrimSub, PrimMul :: Num (MatVecElem a) => a -> a -> a
467PrimAddS, PrimSubS, PrimMulS :: (t ~ MatVecScalarElem a, Num t) => a -> t -> a
468PrimDiv, PrimMod :: (Num t, a ~ VecScalar d t) => a -> a -> a
469PrimDivS, PrimModS :: (Num t, a ~ VecScalar d t) => a -> t -> a
470PrimNeg :: Signed (MatVecScalarElem a) => a -> a
471-- Bit-wise Functions
472PrimBAnd, PrimBOr, PrimBXor :: (Integral t, a ~ VecScalar d t) => a -> a -> a
473PrimBAndS, PrimBOrS, PrimBXorS:: (Integral t, a ~ VecScalar d t) => a -> t -> a
474PrimBNot :: (Integral t, a ~ VecScalar d t) => a -> a
475PrimBShiftL, PrimBShiftR :: (Integral t, a ~ VecScalar d t, b ~ VecScalar d Word) => a -> b -> a
476PrimBShiftLS, PrimBShiftRS :: (Integral t, a ~ VecScalar d t) => a -> Word -> a
477-- Logic Functions
478PrimAnd, PrimOr, PrimXor :: Bool -> Bool -> Bool
479PrimNot :: (a ~ VecScalar d Bool) => a -> a
480PrimAny, PrimAll :: VecScalar d Bool -> Bool
481
482-- Angle, Trigonometry and Exponential Functions
483PrimACos, PrimACosH, PrimASin, PrimASinH, PrimATan, PrimATanH, PrimCos, PrimCosH, PrimDegrees, PrimRadians, PrimSin, PrimSinH, PrimTan, PrimTanH, PrimExp, PrimLog, PrimExp2, PrimLog2, PrimSqrt, PrimInvSqrt
484 :: (a ~ VecScalar d Float) => a -> a
485PrimPow, PrimATan2 :: (a ~ VecScalar d Float) => a -> a -> a
486-- Common Functions
487PrimFloor, PrimTrunc, PrimRound, PrimRoundEven, PrimCeil, PrimFract
488 :: (a ~ VecScalar d Float) => a -> a
489PrimMin, PrimMax :: (Num t, a ~ VecScalar d t) => a -> a -> a
490PrimMinS, PrimMaxS :: (Num t, a ~ VecScalar d t) => a -> t -> a
491PrimIsNan, PrimIsInf :: (a ~ VecScalar d Float, b ~ VecScalar d Bool) => a -> b
492PrimAbs, PrimSign :: (Signed t, a ~ VecScalar d t) => a -> a
493PrimModF :: (a ~ VecScalar d Float) => a -> (a, a)
494PrimClamp :: (Num t, a ~ VecScalar d t) => a -> a -> a -> a
495PrimClampS :: (Num t, a ~ VecScalar d t) => a -> t -> t -> a
496PrimMix :: (a ~ VecScalar d Float) => a -> a -> a -> a
497PrimMixS :: (a ~ VecScalar d Float) => a -> a -> Float -> a
498PrimMixB :: (a ~ VecScalar d Float, b ~ VecScalar d Bool) => a -> a -> b -> a
499PrimStep :: (a ~ TFVec d Float) => a -> a -> a
500PrimStepS :: (a ~ VecScalar d Float) => Float -> a -> a
501PrimSmoothStep :: (a ~ TFVec d Float) => a -> a -> a -> a
502PrimSmoothStepS :: (a ~ VecScalar d Float) => Float -> Float -> a -> a
503
504-- Integer/Floatonversion Functions
505PrimFloatBitsToInt :: VecScalar d Float -> VecScalar d Int
506PrimFloatBitsToUInt :: VecScalar d Float -> VecScalar d Word
507PrimIntBitsToFloat :: VecScalar d Int -> VecScalar d Float
508PrimUIntBitsToFloat :: VecScalar d Word -> VecScalar d Float
509-- Geometric Functions
510PrimLength :: (a ~ VecScalar d Float) => a -> Float
511PrimDistance, PrimDot :: (a ~ VecScalar d Float) => a -> a -> Float
512PrimCross :: (a ~ VecScalar 3 Float) => a -> a -> a
513PrimNormalize :: (a ~ VecScalar d Float) => a -> a
514PrimFaceForward, PrimRefract :: (a ~ VecScalar d Float) => a -> a -> a -> a
515PrimReflect :: (a ~ VecScalar d Float) => a -> a -> a
516-- Matrix Functions
517PrimTranspose :: TFMat h w -> TFMat w h
518PrimDeterminant :: TFMat s s -> Float
519PrimInverse :: TFMat s s -> TFMat s s
520PrimOuterProduct :: w -> h -> TFMat h w
521PrimMulMatVec :: TFMat h w -> w -> h
522PrimMulVecMat :: h -> TFMat h w -> w
523PrimMulMatMat :: TFMat i j -> TFMat j k -> TFMat i k
524-- Vector and Scalar Relational Functions
525PrimLessThan, PrimLessThanEqual, PrimGreaterThan, PrimGreaterThanEqual, PrimEqualV, PrimNotEqualV
526 :: (Num t, a ~ VecScalar d t, b ~ VecScalar d Bool) => a -> a -> b
527PrimEqual, PrimNotEqual :: (t ~ MatVecScalarElem a) => a -> a -> Bool
528-- Fragment Processing Functions
529PrimDFdx, PrimDFdy, PrimFWidth
530 :: (a ~ VecScalar d Float) => a -> a
531-- Noise Functions
532PrimNoise1 :: VecScalar d Float -> Float
533PrimNoise2 :: VecScalar d Float -> Vec 2 Float
534PrimNoise3 :: VecScalar d Float -> Vec 3 Float
535PrimNoise4 :: VecScalar d Float -> Vec 4 Float
536
537{-
538-- Vec/Mat (de)construction
539PrimTupToV2 :: Component a => PrimFun stage ((a,a) -> V2 a)
540PrimTupToV3 :: Component a => PrimFun stage ((a,a,a) -> V3 a)
541PrimTupToV4 :: Component a => PrimFun stage ((a,a,a,a) -> V4 a)
542PrimV2ToTup :: Component a => PrimFun stage (V2 a -> (a,a))
543PrimV3ToTup :: Component a => PrimFun stage (V3 a -> (a,a,a))
544PrimV4ToTup :: Component a => PrimFun stage (V4 a -> (a,a,a,a))
545-}
546
547--------------------
548-- * Texture support
549-- FIXME: currently only Float RGBA 2D texture is supported
550
551data Texture where
552 Texture2DSlot :: String -- texture slot name
553 -> Texture
554
555 Texture2D :: Vec 2 Int -- FIXME: use Word here
556 -> Image 1 (Color (Vec 4 Float))
557 -> Texture
558
559data Filter
560 = PointFilter
561 | LinearFilter
562
563data EdgeMode
564 = Repeat
565 | MirroredRepeat
566 | ClampToEdge
567
568data Sampler = Sampler Filter EdgeMode Texture
569
570-- builtin
571texture2D :: Sampler -> Vec 2 Float -> Vec 4 Float
572