r300: Fix handling of NV_vertex_program parameters
The handling is a bit inefficient, unfortunately, but I don't want to make any intrusive changes for Mesa 7.6. Signed-off-by: Nicolai Hähnle <nhaehnle@gmail.com>
This commit is contained in:
@@ -150,14 +150,37 @@ void rc_mesa_to_rc_program(struct radeon_compiler * c, struct gl_program * progr
|
||||
c->Program.InputsRead = program->InputsRead;
|
||||
c->Program.OutputsWritten = program->OutputsWritten;
|
||||
|
||||
for(i = 0; i < program->Parameters->NumParameters; ++i) {
|
||||
struct rc_constant constant;
|
||||
int isNVProgram = 0;
|
||||
|
||||
constant.Type = RC_CONSTANT_EXTERNAL;
|
||||
constant.Size = 4;
|
||||
constant.u.External = i;
|
||||
if (program->Target == GL_VERTEX_PROGRAM_ARB) {
|
||||
struct gl_vertex_program * vp = (struct gl_vertex_program *) program;
|
||||
isNVProgram = vp->IsNVProgram;
|
||||
}
|
||||
|
||||
rc_constants_add(&c->Program.Constants, &constant);
|
||||
if (isNVProgram) {
|
||||
/* NV_vertex_program has a fixed-sized constant environment.
|
||||
* This could be handled more efficiently for programs that
|
||||
* do not use relative addressing.
|
||||
*/
|
||||
for(i = 0; i < 96; ++i) {
|
||||
struct rc_constant constant;
|
||||
|
||||
constant.Type = RC_CONSTANT_EXTERNAL;
|
||||
constant.Size = 4;
|
||||
constant.u.External = i;
|
||||
|
||||
rc_constants_add(&c->Program.Constants, &constant);
|
||||
}
|
||||
} else {
|
||||
for(i = 0; i < program->Parameters->NumParameters; ++i) {
|
||||
struct rc_constant constant;
|
||||
|
||||
constant.Type = RC_CONSTANT_EXTERNAL;
|
||||
constant.Size = 4;
|
||||
constant.u.External = i;
|
||||
|
||||
rc_constants_add(&c->Program.Constants, &constant);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -502,6 +502,7 @@ _mesa_clone_program(GLcontext *ctx, const struct gl_program *prog)
|
||||
= (const struct gl_vertex_program *) prog;
|
||||
struct gl_vertex_program *vpc = (struct gl_vertex_program *) clone;
|
||||
vpc->IsPositionInvariant = vp->IsPositionInvariant;
|
||||
vpc->IsNVProgram = vp->IsNVProgram;
|
||||
}
|
||||
break;
|
||||
case GL_FRAGMENT_PROGRAM_ARB:
|
||||
|
Reference in New Issue
Block a user