Add QuadX,Y fields to tgsi_exec_machine to pass quad's position to tgsi interpreter.
authorBrian <brian.paul@tungstengraphics.com>
Thu, 13 Dec 2007 16:05:15 +0000 (09:05 -0700)
committerBrian <brian.paul@tungstengraphics.com>
Thu, 13 Dec 2007 16:05:15 +0000 (09:05 -0700)
The tgsi linear/perspective attribute code now uses these values rather than
input[0].  Need to update SSE path to take quad x,y as function params.
Then, we can remove additional code.

src/mesa/pipe/softpipe/sp_quad_fs.c
src/mesa/pipe/tgsi/exec/tgsi_exec.c
src/mesa/pipe/tgsi/exec/tgsi_exec.h

index 251b47341a2dd94d131dc494d81ea5994b82b758..da590b256aa4c70a5bb7cead27218731fd006045 100644 (file)
@@ -100,6 +100,7 @@ shade_quad(
 
    machine->InterpCoefs = quad->coef;
 
+#if 1 /* XXX only do this if the fp really reads fragment.position */
    machine->Inputs[0].xyzw[0].f[0] = fx;
    machine->Inputs[0].xyzw[0].f[1] = fx + 1.0f;
    machine->Inputs[0].xyzw[0].f[2] = fx;
@@ -113,6 +114,10 @@ shade_quad(
    machine->Inputs[0].xyzw[1].f[1] = fy;
    machine->Inputs[0].xyzw[1].f[2] = fy + 1.0f;
    machine->Inputs[0].xyzw[1].f[3] = fy + 1.0f;
+#endif
+
+   machine->QuadX = quad->x0;
+   machine->QuadY = quad->y0;
 
    /* run shader */
 #if defined(__i386__) || defined(__386__)
@@ -123,7 +128,11 @@ shade_quad(
          machine->Outputs,
          machine->Consts,
          machine->Temps,
-         machine->InterpCoefs );
+         machine->InterpCoefs
+#if 0
+         ,quad->x0, quad->y0
+#endif
+ );
       quad->mask &= ~(machine->Temps[TGSI_EXEC_TEMP_KILMASK_I].xyzw[TGSI_EXEC_TEMP_KILMASK_C].u[0]);
    }
    else
index 8636271a346e16db90405298636b54a8d7b3f638..03997f909968496a3c567b08bfb51722954918e5 100644 (file)
@@ -1352,8 +1352,7 @@ linear_interpolation(
    unsigned attrib,
    unsigned chan )
 {
-   const float x = mach->Inputs[0].xyzw[0].f[0];
-   const float y = mach->Inputs[0].xyzw[1].f[0];
+   const float x = mach->QuadX, y = mach->QuadY;
    const float dadx = mach->InterpCoefs[attrib].dadx[chan];
    const float dady = mach->InterpCoefs[attrib].dady[chan];
    const float a0 = mach->InterpCoefs[attrib].a0[chan] + dadx * x + dady * y;
@@ -1369,8 +1368,7 @@ perspective_interpolation(
    unsigned attrib,
    unsigned chan )
 {
-   const float x = mach->Inputs[0].xyzw[0].f[0];
-   const float y = mach->Inputs[0].xyzw[1].f[0];
+   const float x = mach->QuadX, y = mach->QuadY;
    const float dadx = mach->InterpCoefs[attrib].dadx[chan];
    const float dady = mach->InterpCoefs[attrib].dady[chan];
    const float a0 = mach->InterpCoefs[attrib].a0[chan] + dadx * x + dady * y;
index e7952a08e3a7cc1136da295927d4ab8e3e812881..8d166bb5f42092e302794390bafb8a13fbe3cc85 100644 (file)
@@ -170,6 +170,7 @@ struct tgsi_exec_machine
    struct tgsi_exec_vector       *Inputs;
    struct tgsi_exec_vector       *Outputs;
    const struct tgsi_token       *Tokens;
+   float                         QuadX, QuadY; /**< for frag progs only */
    unsigned                      Processor;
 
    /* GEOMETRY processor only. */