swrast: Implement ARB_fragment_coord_conventions but don't enable.
authorEric Anholt <eric@anholt.net>
Tue, 26 Jan 2010 20:43:43 +0000 (12:43 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 26 Jan 2010 21:30:26 +0000 (13:30 -0800)
This brings swrast's support up to the state of gallium, and fixes the
default center behavior of fragment.position.xy in piglit
fp-arb-fragment-coord-conventions-none.

The extension is not enabled currently because the GLSL part of the
extension isn't supported, so piglit
glsl-arb-fragment-coord-conventions-define fails as would any serious
test of the GLSL part.

src/mesa/swrast/s_fragprog.c

index 9ac33a26a65ae982261689d59988dde0ad79700d..1c6492cc8fa81dbe7f926aa50e8c38da7b737892 100644 (file)
@@ -144,12 +144,22 @@ init_machine(GLcontext *ctx, struct gl_program_machine *machine,
              const struct gl_fragment_program *program,
              const SWspan *span, GLuint col)
 {
+   GLfloat *wpos = span->array->attribs[FRAG_ATTRIB_WPOS][col];
+
    if (program->Base.Target == GL_FRAGMENT_PROGRAM_NV) {
       /* Clear temporary registers (undefined for ARB_f_p) */
       _mesa_bzero(machine->Temporaries,
                   MAX_PROGRAM_TEMPS * 4 * sizeof(GLfloat));
    }
 
+   /* ARB_fragment_coord_conventions */
+   if (program->OriginUpperLeft)
+      wpos[1] = ctx->DrawBuffer->Height - 1 - wpos[1];
+   if (!program->PixelCenterInteger) {
+      wpos[0] += 0.5;
+      wpos[1] += 0.5;
+   }
+
    /* Setup pointer to input attributes */
    machine->Attribs = span->array->attribs;