Reference Renderer Design Notes
-------------------------------
Requirements:
- must support arbitrary VA arrays
- must support primitive setup reference
- must support lines, points
- must support instancing
- must support vertex shading -> custom position transformations
- flat, noperspective shading
- multiple render targets
- faster shading? move packet loop inside shader
(helper class can make shader implementation easier)
- can be extended for tessellation and geometry shading
Integrate with:
- sglr
- random shader generator
Uniforms:
- shader objects can contain parameters, renderer doesn't care about them
- can contain simple data or references to resources (textures for example)
Pipeline:
Vertex cache:
- based on indices setup transformed vertex buffer
- in:
+ index list
+ VS generic output count
- out:
+ VS execution queue
+ index remap information?
- trivial implementation:
+ run VS for all vertices at once
VertexShader:
- provides position & point size
- transforms other vertices
- in:
+ VertexAttrib array
+ packet list:
+ VertexID, InstanceID (pack into some accessor?)
+ uniform ptr
- out:
+ position
+ point size
+ array of generic transformed attributes (float/int/uint)
Tessellation:
- \todo [pyry] Define
- replaces primitive assembly?
Primitive assembly:
- sets up primitives
- gl3: triangles, points, lines (adjecency?)
- in:
+ full primitive type
+ index list
+ position & point size from VS
- out:
+ primitive list for rasterization / geometry shading
+ positions
+ provoking vertex for flatshading
GeometryShader:
- in:
+ primitive list
- out:
+ changed primitive list
Coordinate transform:
- in:
+ primitive list
- out:
+ coordinates after viewport transform
+ z-clipping bits
Rasterizer:
- pretty much as it is currently
FragmentShader:
- in:
+ packet list:
+ base coordinates
+ barycentrics, both perspective and non-perspective
+ generic attribute accessor (2 or 3 vertices)
+ provoking vertex index
+ uniform ptr
- out:
+ shaded packet list:
+ colors per render target
+ modified live mask - for discard
- utils:
+ compute derivatives from data in SoA form
+ compute lod for texturing