summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2003-03-29 16:04:31 +0000
committerBrian Paul <brian.paul@tungstengraphics.com>2003-03-29 16:04:31 +0000
commita8d4963fbcfe370a571671a250a1ae8dd894a94a (patch)
tree36aec1d557f113ef5793427b5fbcec932a91b239
parent8856cece54df5183853aaebc1af8c60436d699c0 (diff)
fix EXP instruction and ARL-relative addressing
-rw-r--r--src/mesa/main/nvvertexec.c26
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;