Home | History | Annotate | Download | only in referencerenderer
      1 Reference Renderer Design Notes
      2 -------------------------------
      3 
      4 Requirements:
      5  - must support arbitrary VA arrays
      6  - must support primitive setup reference
      7  - must support lines, points
      8  - must support instancing
      9  - must support vertex shading -> custom position transformations
     10  - flat, noperspective shading
     11  - multiple render targets
     12  - faster shading? move packet loop inside shader
     13    (helper class can make shader implementation easier)
     14  - can be extended for tessellation and geometry shading
     15 
     16 Integrate with:
     17  - sglr
     18  - random shader generator
     19 
     20 Uniforms:
     21  - shader objects can contain parameters, renderer doesn't care about them
     22  - can contain simple data or references to resources (textures for example)
     23 
     24 Pipeline:
     25 
     26 Vertex cache:
     27  - based on indices setup transformed vertex buffer
     28  - in:
     29    + index list
     30    + VS generic output count
     31  - out:
     32    + VS execution queue
     33    + index remap information?
     34  - trivial implementation:
     35    + run VS for all vertices at once
     36 
     37 VertexShader:
     38  - provides position & point size
     39  - transforms other vertices
     40  - in:
     41    + VertexAttrib array
     42    + packet list:
     43      + VertexID, InstanceID (pack into some accessor?)
     44    + uniform ptr
     45  - out:
     46    + position
     47    + point size
     48    + array of generic transformed attributes (float/int/uint)
     49 
     50 Tessellation:
     51  - \todo [pyry] Define
     52  - replaces primitive assembly?
     53 
     54 Primitive assembly:
     55  - sets up primitives
     56  - gl3: triangles, points, lines (adjecency?)
     57  - in:
     58    + full primitive type
     59    + index list
     60    + position & point size from VS
     61  - out:
     62    + primitive list for rasterization / geometry shading
     63      + positions
     64 	 + provoking vertex for flatshading
     65 
     66 GeometryShader:
     67  - in:
     68    + primitive list
     69  - out:
     70    + changed primitive list
     71 
     72 Coordinate transform:
     73  - in:
     74    + primitive list
     75  - out:
     76    + coordinates after viewport transform
     77    + z-clipping bits
     78 
     79 Rasterizer:
     80  - pretty much as it is currently
     81 
     82 FragmentShader:
     83  - in:
     84    + packet list:
     85      + base coordinates
     86 	 + barycentrics, both perspective and non-perspective
     87 	 + generic attribute accessor (2 or 3 vertices)
     88 	 + provoking vertex index
     89    + uniform ptr
     90  - out:
     91    + shaded packet list:
     92      + colors per render target
     93 	 + modified live mask - for discard
     94  - utils:
     95    + compute derivatives from data in SoA form
     96    + compute lod for texturing
     97