diff options
author | Brian Paul <brian.paul@tungstengraphics.com> | 2003-03-29 16:04:31 +0000 |
---|---|---|
committer | Brian Paul <brian.paul@tungstengraphics.com> | 2003-03-29 16:04:31 +0000 |
commit | a8d4963fbcfe370a571671a250a1ae8dd894a94a (patch) | |
tree | 36aec1d557f113ef5793427b5fbcec932a91b239 | |
parent | 8856cece54df5183853aaebc1af8c60436d699c0 (diff) |
fix EXP instruction and ARL-relative addressing
-rw-r--r-- | src/mesa/main/nvvertexec.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/src/mesa/main/nvvertexec.c b/src/mesa/main/nvvertexec.c index 6ef6cce1d7..dcf385d0e3 100644 --- a/src/mesa/main/nvvertexec.c +++ b/src/mesa/main/nvvertexec.c @@ -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; |