r300: update state parameters only once per rendering operation
authorMaciej Cencora <m.cencora@gmail.com>
Sat, 4 Jul 2009 10:56:31 +0000 (12:56 +0200)
committerMaciej Cencora <m.cencora@gmail.com>
Mon, 13 Jul 2009 17:25:56 +0000 (19:25 +0200)
src/mesa/drivers/dri/r300/r300_fragprog_common.c
src/mesa/drivers/dri/r300/r300_state.c
src/mesa/drivers/dri/r300/r300_state.h

index abc8757ba1fe8a4904ba5b3c88b49bcb0e47bde1..1644e6f42afc3041ff6768af2e127ce15bdb3d65 100644 (file)
 #include "radeon_program.h"
 #include "radeon_program_alu.h"
 
-static void update_params(GLcontext *ctx, struct gl_fragment_program *fp)
-{
-       /* Ask Mesa nicely to fill in ParameterValues for us */
-       if (fp->Base.Parameters)
-               _mesa_load_state_parameters(ctx, fp->Base.Parameters);
-}
-
 static void nqssadce_init(struct nqssadce_state* s)
 {
        s->Outputs[FRAG_RESULT_COLOR].Sourced = WRITEMASK_XYZW;
@@ -281,11 +274,7 @@ void r300TranslateFragmentShader(GLcontext *ctx, struct gl_fragment_program *fp)
 
                r300_fp->translated = GL_TRUE;
 
-               r300UpdateStateParameters(ctx, _NEW_PROGRAM | _NEW_PROGRAM_CONSTANTS);
-
                if (r300_fp->error || (RADEON_DEBUG & DEBUG_PIXEL))
                        r300->vtbl.FragmentProgramDump(&r300_fp->code);
        }
-
-       update_params(ctx, fp);
 }
index c0eda977db83d4848d21017a7bba23c776e1489c..67bd6ec33bef06e9d6bf10c7416978ca21ec9afe 100644 (file)
@@ -1093,7 +1093,7 @@ r300FetchStateParameter(GLcontext * ctx,
  * Update R300's own internal state parameters.
  * For now just STATE_R300_WINDOW_DIMENSION
  */
-void r300UpdateStateParameters(GLcontext * ctx, GLuint new_state)
+static void r300UpdateStateParameters(GLcontext * ctx, GLuint new_state)
 {
        struct r300_fragment_program *fp;
        struct gl_program_parameter_list *paramList;
@@ -1111,6 +1111,8 @@ void r300UpdateStateParameters(GLcontext * ctx, GLuint new_state)
        if (!paramList)
                return;
 
+       _mesa_load_state_parameters(ctx, paramList);
+
        for (i = 0; i < paramList->NumParameters; i++) {
                if (paramList->Parameters[i].Type == PROGRAM_STATE_VAR) {
                        r300FetchStateParameter(ctx,
@@ -2323,8 +2325,6 @@ static void r300InvalidateState(GLcontext * ctx, GLuint new_state)
                R300_STATECHANGE(r300, cb);
        }
 
-       r300UpdateStateParameters(ctx, new_state);
-
        r300->radeon.NewGLState |= new_state;
 }
 
index 23282894202f3ae66e41ff4f40913a02eae793ac..d46bf9f179685b68981c61aa00c28be361754f86 100644 (file)
@@ -52,7 +52,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 void r300UpdateViewportOffset (GLcontext * ctx);
 void r300UpdateDrawBuffer (GLcontext * ctx);
-void r300UpdateStateParameters (GLcontext * ctx, GLuint new_state);
 void r300UpdateShaders (r300ContextPtr rmesa);
 void r300UpdateShaderStates (r300ContextPtr rmesa);
 void r300InitState (r300ContextPtr r300);