mesa, st/mesa: fix gl_FragCoord with FBOs in Gallium
authorMarek Olšák <maraeo@gmail.com>
Thu, 2 Dec 2010 19:39:59 +0000 (20:39 +0100)
committerMarek Olšák <maraeo@gmail.com>
Fri, 3 Dec 2010 04:56:40 +0000 (05:56 +0100)
commitd531f9c2f5c78468d913fc509b223760ac1c1124
treecbd023be1ac512982e2fcf8bcb89fcc9f9e5e070
parent6a46fce14f38adf72925842edf9829c00d1ee800
mesa, st/mesa: fix gl_FragCoord with FBOs in Gallium

gl_FragCoord.y needs to be flipped upside down if a FBO is bound.

This fixes:
- piglit/fbo-fragcoord
- https://bugs.freedesktop.org/show_bug.cgi?id=29420

Here I add a new program state STATE_FB_WPOS_Y_TRANSFORM, which is set based
on whether a FBO is bound. The state contains a pair of transformations.
It can be either (XY=identity, ZW=transformY) if a FBO is bound,
or (XY=transformY, ZW=identity) otherwise, where identity = (1, 0),
transformY = (-1, height-1).

A classic driver (or st/mesa) may, based on some other state, choose whether
to use XY or ZW, thus negate the conditional "if (is a FBO bound) ...".
The reason for this is that a Gallium driver is allowed to only support WPOS
relative to either the lower left or the upper left corner, so we must flip
the Y axis accordingly again. (the "invert" parameter in emit_wpos_inversion)

NOTE: This is a candidate for the 7.9 branch.

Signed-off-by: Marek Olšák <maraeo@gmail.com>
Signed-off-by: Brian Paul <brianp@vmware.com>
src/mesa/program/prog_statevars.c
src/mesa/program/prog_statevars.h
src/mesa/state_tracker/st_mesa_to_tgsi.c