Browse Source

fix EXP instruction and ARL-relative addressing

tags/vtx-0-2-21112003-freeze
Brian Paul 22 years ago
parent
commit
a8d4963fbc
1 changed files with 9 additions and 17 deletions
  1. 9
    17
      src/mesa/main/nvvertexec.c

+ 9
- 17
src/mesa/main/nvvertexec.c View 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;

Loading…
Cancel
Save