cleanups for t_vb_program.c
use VertexProgram._Current instead of VertexProgram.Current in a few more places. Only fixup fogc and psiz in case this is really a nv program (others are fine if undefined), and fix this case up so the values actually get written.
This commit is contained in:
@@ -84,7 +84,7 @@ init_machine(GLcontext *ctx, struct gl_program_machine *machine)
|
|||||||
MEMCPY(machine->VertAttribs, ctx->Current.Attrib,
|
MEMCPY(machine->VertAttribs, ctx->Current.Attrib,
|
||||||
MAX_VERTEX_PROGRAM_ATTRIBS * 4 * sizeof(GLfloat));
|
MAX_VERTEX_PROGRAM_ATTRIBS * 4 * sizeof(GLfloat));
|
||||||
|
|
||||||
if (ctx->VertexProgram.Current->IsNVProgram) {
|
if (ctx->VertexProgram._Current->IsNVProgram) {
|
||||||
GLuint i;
|
GLuint i;
|
||||||
/* Output/result regs are initialized to [0,0,0,1] */
|
/* Output/result regs are initialized to [0,0,0,1] */
|
||||||
for (i = 0; i < MAX_NV_VERTEX_PROGRAM_OUTPUTS; i++) {
|
for (i = 0; i < MAX_NV_VERTEX_PROGRAM_OUTPUTS; i++) {
|
||||||
@@ -225,7 +225,7 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )
|
|||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ctx->VertexProgram.Current->IsNVProgram) {
|
if (program->IsNVProgram) {
|
||||||
_mesa_load_tracked_matrices(ctx);
|
_mesa_load_tracked_matrices(ctx);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -276,17 +276,6 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )
|
|||||||
/* execute the program */
|
/* execute the program */
|
||||||
_mesa_execute_program(ctx, &program->Base, &machine);
|
_mesa_execute_program(ctx, &program->Base, &machine);
|
||||||
|
|
||||||
/* Fixup fog an point size results if needed */
|
|
||||||
if (ctx->Fog.Enabled &&
|
|
||||||
(program->Base.OutputsWritten & (1 << VERT_RESULT_FOGC)) == 0) {
|
|
||||||
machine.Outputs[VERT_RESULT_FOGC][0] = 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->VertexProgram.PointSizeEnabled &&
|
|
||||||
(program->Base.OutputsWritten & (1 << VERT_RESULT_PSIZ)) == 0) {
|
|
||||||
machine.Outputs[VERT_RESULT_PSIZ][0] = ctx->Point.Size;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* copy the output registers into the VB->attribs arrays */
|
/* copy the output registers into the VB->attribs arrays */
|
||||||
for (j = 0; j < numOutputs; j++) {
|
for (j = 0; j < numOutputs; j++) {
|
||||||
const GLuint attr = outputs[j];
|
const GLuint attr = outputs[j];
|
||||||
@@ -301,6 +290,23 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Fixup fog and point size results if needed */
|
||||||
|
if (program->IsNVProgram) {
|
||||||
|
if (ctx->Fog.Enabled &&
|
||||||
|
(program->Base.OutputsWritten & (1 << VERT_RESULT_FOGC)) == 0) {
|
||||||
|
for (i = 0; i < VB->Count; i++) {
|
||||||
|
store->results[VERT_RESULT_FOGC].data[i][0] = 1.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->VertexProgram.PointSizeEnabled &&
|
||||||
|
(program->Base.OutputsWritten & (1 << VERT_RESULT_PSIZ)) == 0) {
|
||||||
|
for (i = 0; i < VB->Count; i++) {
|
||||||
|
store->results[VERT_RESULT_PSIZ].data[i][0] = ctx->Point.Size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Setup the VB pointers so that the next pipeline stages get
|
/* Setup the VB pointers so that the next pipeline stages get
|
||||||
* their data from the right place (the program output arrays).
|
* their data from the right place (the program output arrays).
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user