Merge commit 'origin/gallium-master-merge'
This is the big merge of the gallium-0.2 branch into master. gallium-master-merge was just the staging area for it. Both gallium-0.2 and gallium-master-merge are considered closed now. Conflicts: progs/demos/Makefile src/mesa/main/state.c src/mesa/main/texenvprogram.c
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 7.1
|
||||
* Version: 7.3
|
||||
*
|
||||
* Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
|
||||
*
|
||||
@@ -448,6 +448,9 @@ _mesa_update_state_locked( GLcontext *ctx )
|
||||
GLbitfield new_state = ctx->NewState;
|
||||
GLbitfield prog_flags = _NEW_PROGRAM;
|
||||
|
||||
if (new_state == _NEW_CURRENT_ATTRIB)
|
||||
goto out;
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_STATE)
|
||||
_mesa_print_state("_mesa_update_state", new_state);
|
||||
|
||||
@@ -475,7 +478,7 @@ _mesa_update_state_locked( GLcontext *ctx )
|
||||
if (new_state & (_NEW_PROGRAM|_NEW_TEXTURE|_NEW_TEXTURE_MATRIX))
|
||||
_mesa_update_texture( ctx, new_state );
|
||||
|
||||
if (new_state & (_NEW_BUFFERS | _NEW_COLOR | _NEW_PIXEL))
|
||||
if (new_state & _NEW_BUFFERS)
|
||||
_mesa_update_framebuffer(ctx);
|
||||
|
||||
if (new_state & (_NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT))
|
||||
@@ -540,6 +543,7 @@ _mesa_update_state_locked( GLcontext *ctx )
|
||||
* Set ctx->NewState to zero to avoid recursion if
|
||||
* Driver.UpdateState() has to call FLUSH_VERTICES(). (fixed?)
|
||||
*/
|
||||
out:
|
||||
new_state = ctx->NewState;
|
||||
ctx->NewState = 0;
|
||||
ctx->Driver.UpdateState(ctx, new_state);
|
||||
@@ -556,3 +560,59 @@ _mesa_update_state( GLcontext *ctx )
|
||||
_mesa_update_state_locked(ctx);
|
||||
_mesa_unlock_context_textures(ctx);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Want to figure out which fragment program inputs are actually
|
||||
* constant/current values from ctx->Current. These should be
|
||||
* referenced as a tracked state variable rather than a fragment
|
||||
* program input, to save the overhead of putting a constant value in
|
||||
* every submitted vertex, transferring it to hardware, interpolating
|
||||
* it across the triangle, etc...
|
||||
*
|
||||
* When there is a VP bound, just use vp->outputs. But when we're
|
||||
* generating vp from fixed function state, basically want to
|
||||
* calculate:
|
||||
*
|
||||
* vp_out_2_fp_in( vp_in_2_vp_out( varying_inputs ) |
|
||||
* potential_vp_outputs )
|
||||
*
|
||||
* Where potential_vp_outputs is calculated by looking at enabled
|
||||
* texgen, etc.
|
||||
*
|
||||
* The generated fragment program should then only declare inputs that
|
||||
* may vary or otherwise differ from the ctx->Current values.
|
||||
* Otherwise, the fp should track them as state values instead.
|
||||
*/
|
||||
void
|
||||
_mesa_set_varying_vp_inputs( GLcontext *ctx,
|
||||
GLbitfield varying_inputs )
|
||||
{
|
||||
if (ctx->varying_vp_inputs != varying_inputs) {
|
||||
ctx->varying_vp_inputs = varying_inputs;
|
||||
ctx->NewState |= _NEW_ARRAY;
|
||||
/*_mesa_printf("%s %x\n", __FUNCTION__, varying_inputs);*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Used by drivers to tell core Mesa that the driver is going to
|
||||
* install/ use its own vertex program. In particular, this will
|
||||
* prevent generated fragment programs from using state vars instead
|
||||
* of ordinary varyings/inputs.
|
||||
*/
|
||||
void
|
||||
_mesa_set_vp_override(GLcontext *ctx, GLboolean flag)
|
||||
{
|
||||
if (ctx->VertexProgram._Overriden != flag) {
|
||||
ctx->VertexProgram._Overriden = flag;
|
||||
|
||||
/* Set one of the bits which will trigger fragment program
|
||||
* regeneration:
|
||||
*/
|
||||
ctx->NewState |= _NEW_ARRAY;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user