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