summaryrefslogtreecommitdiff
path: root/src/mesa
diff options
context:
space:
mode:
authorKarl Rasche <karlrasche@gmail.com>2003-12-09 18:04:52 +0000
committerKarl Rasche <karlrasche@gmail.com>2003-12-09 18:04:52 +0000
commit057dfcb06c04883f156692633b0d4ca86396eabe (patch)
treebd229ac54250848cb5086079694173edd22ceb14 /src/mesa
parent82efdff66f8ede02e4b673102081e8f794c17f9d (diff)
- handle IsPositionInvariant
- tweak assertion to allow for relative offets from ARB_vp
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/main/nvvertexec.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/mesa/main/nvvertexec.c b/src/mesa/main/nvvertexec.c
index d73f82b973..66b3363365 100644
--- a/src/mesa/main/nvvertexec.c
+++ b/src/mesa/main/nvvertexec.c
@@ -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 &&