softpipe: fix Z interpolation invariance bug
We want quad/pixel Z values to be interpolated exactly the same for multi-pass algorithms. Because of how the optimized Z-test code is written, we can't cull the first quad in a run even if it's totally killed. See the comment for more info. NOTE: This is a candidate for the 7.11 branch.
This commit is contained in:
@@ -118,7 +118,16 @@ shade_quads(struct quad_stage *qs,
|
||||
machine->InterpCoefs = quads[0]->coef;
|
||||
|
||||
for (i = 0; i < nr; i++) {
|
||||
if (!shade_quad(qs, quads[i]))
|
||||
/* Only omit this quad from the output list if all the fragments
|
||||
* are killed _AND_ it's not the first quad in the list.
|
||||
* The first quad is special in the (optimized) depth-testing code:
|
||||
* the quads' Z coordinates are step-wise interpolated with respect
|
||||
* to the first quad in the list.
|
||||
* For multi-pass algorithms we need to produce exactly the same
|
||||
* Z values in each pass. If interpolation starts with different quads
|
||||
* we can get different Z values for the same (x,y).
|
||||
*/
|
||||
if (!shade_quad(qs, quads[i]) && i > 0)
|
||||
continue; /* quad totally culled/killed */
|
||||
|
||||
if (/*do_coverage*/ 0)
|
||||
|
||||
Reference in New Issue
Block a user