fix EXP instruction and ARL-relative addressing
authorBrian Paul <brian.paul@tungstengraphics.com>
Sat, 29 Mar 2003 16:04:31 +0000 (16:04 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sat, 29 Mar 2003 16:04:31 +0000 (16:04 +0000)
src/mesa/main/nvvertexec.c

index 6ef6cce..dcf385d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: nvvertexec.c,v 1.4 2003/03/25 00:00:29 brianp Exp $ */
+/* $Id: nvvertexec.c,v 1.5 2003/03/29 16:04:31 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -231,11 +231,11 @@ fetch_vector4( const struct vp_src_register *source,
    const GLfloat *src;
 
    if (source->RelAddr) {
-      GLint reg = source->Register + machine->AddressReg;
-      if (reg < VP_PROG_REG_START || reg > VP_PROG_REG_END)
+      const GLint reg = source->Register + machine->AddressReg;
+      if (reg < 0 || reg > MAX_NV_VERTEX_PROGRAM_PARAMS)
          src = zero;
       else
-         src = machine->Registers[reg];
+         src = machine->Registers[VP_PROG_REG_START + reg];
    }
    else {
       src = machine->Registers[source->Register];
@@ -268,11 +268,11 @@ fetch_vector1( const struct vp_src_register *source,
    const GLfloat *src;
 
    if (source->RelAddr) {
-      GLint reg = source->Register + machine->AddressReg;
-      if (reg < VP_PROG_REG_START || reg > VP_PROG_REG_END)
+      const GLint reg = source->Register + machine->AddressReg;
+      if (reg < 0 || reg > MAX_NV_VERTEX_PROGRAM_PARAMS)
          src = zero;
       else
-         src = machine->Registers[reg];
+         src = machine->Registers[VP_PROG_REG_START + reg];
    }
    else {
       src = machine->Registers[source->Register];
@@ -333,10 +333,6 @@ _mesa_exec_vertex_program(GLcontext *ctx, const struct vertex_program *program)
    struct vp_machine *machine = &ctx->VertexProgram.Machine;
    const struct vp_instruction *inst;
 
-   /* XXX load vertex fields into input registers */
-   /* and do other initialization */
-
-
    for (inst = program->Instructions; inst->Opcode != VP_OPCODE_END; inst++) {
       switch (inst->Opcode) {
          case VP_OPCODE_MOV:
@@ -392,15 +388,11 @@ _mesa_exec_vertex_program(GLcontext *ctx, const struct vertex_program *program)
                floor_t0 = (float) floor(t[0]);
                if (floor_t0 > FLT_MAX_EXP) {
                   SET_POS_INFINITY(q[0]);
-                  q[1] = 0.0F;
                   SET_POS_INFINITY(q[2]);
-                  q[3] = 1.0F;
                }
                else if (floor_t0 < FLT_MIN_EXP) {
                   q[0] = 0.0F;
-                  q[1] = 0.0F;
                   q[2] = 0.0F;
-                  q[3] = 0.0F;
                }
                else {
 #ifdef USE_IEEE
@@ -411,10 +403,10 @@ _mesa_exec_vertex_program(GLcontext *ctx, const struct vertex_program *program)
 #else
                   q[0] = (GLfloat) pow(2.0, floor_t0);
 #endif
-                  q[1] = t[0] - floor_t0;
                   q[2] = (GLfloat) (q[0] * LOG2(q[1]));
-                  q[3] = 1.0F;
                }
+               q[1] = t[0] - floor_t0;
+               q[3] = 1.0F;
                store_vector4( &inst->DstReg, machine, q );
             }
             break;