summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brian.paul@tungstengraphics.com>2002-08-08 16:55:56 +0000
committerBrian Paul <brian.paul@tungstengraphics.com>2002-08-08 16:55:56 +0000
commit3efe5beefc9f9665c565f1ec5e74287b12c117e9 (patch)
treef802f1829d3da073779ff4b74511539d6b7ede45
parent352c13f7835918c3d2cb07f8e7dbe33e8319fcab (diff)
fix up resulting FOGC and PSIZ when needed
-rw-r--r--src/mesa/tnl/t_vb_program.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/mesa/tnl/t_vb_program.c b/src/mesa/tnl/t_vb_program.c
index 5790bf79d2..0416766478 100644
--- a/src/mesa/tnl/t_vb_program.c
+++ b/src/mesa/tnl/t_vb_program.c
@@ -1,4 +1,4 @@
-/* $Id: t_vb_program.c,v 1.13 2002/06/23 02:40:48 brianp Exp $ */
+/* $Id: t_vb_program.c,v 1.14 2002/08/08 16:55:56 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -152,14 +152,8 @@ static GLboolean run_vp( GLcontext *ctx, struct gl_pipeline_stage *stage )
struct vp_program *program = ctx->VertexProgram.Current;
GLuint i;
- _mesa_init_tracked_matrices(ctx);
- _mesa_init_vp_registers(ctx); /* init temp and result regs */
- /* XXX if GL_FOG is enabled but the program doesn't write to the
- * o[FOGC] register, set the fog result to 1.0
- */
- /* XXX if GL_VERTEX_PROGRAM_POINT_SIZE_NV is enabled but the program
- * doesn't write the PSIZ variable then use ctx->Point.Size
- */
+ _mesa_init_tracked_matrices(ctx); /* load registers with matrices */
+ _mesa_init_vp_registers(ctx); /* init temp and result regs */
for (i = 0; i < VB->Count; i++) {
GLuint attr;
@@ -209,6 +203,7 @@ static GLboolean run_vp( GLcontext *ctx, struct gl_pipeline_stage *stage )
/* execute the program */
ASSERT(program);
_mesa_exec_program(ctx, program);
+
#if 0
printf("Output %d: %f, %f, %f, %f\n", i,
machine->Registers[VP_OUTPUT_REG_START + 0][0],
@@ -224,6 +219,18 @@ static GLboolean run_vp( GLcontext *ctx, struct gl_pipeline_stage *stage )
machine->Registers[VP_OUTPUT_REG_START + VERT_RESULT_PSIZ][0]);
#endif
+ /* Fixup fog an point size results if needed */
+ if (ctx->Fog.Enabled &&
+ (program->OutputsWritten & (1 << VERT_RESULT_FOGC)) == 0) {
+ machine->Registers[VP_OUTPUT_REG_START + VERT_RESULT_FOGC][0] = 1.0;
+ }
+
+ if (ctx->VertexProgram.PointSizeEnabled &&
+ (program->OutputsWritten & (1 << VERT_RESULT_PSIZ)) == 0) {
+ machine->Registers[VP_OUTPUT_REG_START + VERT_RESULT_PSIZ][0]
+ = ctx->Point.Size;
+ }
+
/* copy the output registers into the VB->attribs arrays */
/* XXX (optimize) could use a conditional and smaller loop limit here */
for (attr = 0; attr < 15; attr++) {