- handle IsPositionInvariant

- tweak assertion to allow for relative offets from ARB_vp
This commit is contained in:
Karl Rasche 2003-12-09 18:04:52 +00:00
parent 82efdff66f
commit 057dfcb06c
1 changed files with 16 additions and 1 deletions

View File

@ -234,7 +234,8 @@ get_register_pointer( const struct vp_src_register *source,
{
if (source->RelAddr) {
const GLint reg = source->Index + state->AddressReg[0];
ASSERT(source->File == PROGRAM_ENV_PARAM);
ASSERT( (source->File == PROGRAM_ENV_PARAM) ||
(source->File == PROGRAM_STATE_VAR) );
if (reg < 0 || reg > MAX_NV_VERTEX_PROGRAM_PARAMS)
return zeroVec;
else
@ -369,6 +370,20 @@ _mesa_exec_vertex_program(GLcontext *ctx, const struct vertex_program *program)
ctx->_CurrentProgram = GL_VERTEX_PROGRAM_ARB; /* or NV, doesn't matter */
/* If the program is position invariant, multiply the input
* position and the MVP matrix and stick it into the output pos slot
*/
if (ctx->VertexProgram.Current->IsPositionInvariant) {
TRANSFORM_POINT( ctx->VertexProgram.Outputs[0],
ctx->_ModelProjectMatrix.m,
ctx->VertexProgram.Inputs[0]);
/* XXX: This could go elsewhere */
ctx->VertexProgram.Current->OutputsWritten |= 0x1;
}
for (inst = program->Instructions; inst->Opcode != VP_OPCODE_END; inst++) {
if (ctx->VertexProgram.CallbackEnabled &&