Temporary fix - delete and recreate texenvprogram so that drivers
authorKeith Whitwell <keith@tungstengraphics.com>
Tue, 10 May 2005 10:25:16 +0000 (10:25 +0000)
committerKeith Whitwell <keith@tungstengraphics.com>
Tue, 10 May 2005 10:25:16 +0000 (10:25 +0000)
notice when it changes.

src/mesa/main/texenvprogram.c

index 1f9d7ae1c507dc4642b857704ac5ff5ae0f5beea..1618287af6dfba3138c9bfa9d400b7786969fe25 100644 (file)
@@ -37,7 +37,7 @@
 #include "shader/arbfragparse.h"
 
 
-#define DISASSEM 0
+#define DISASSEM 1
 
 /* Use uregs to represent registers internally, translate to Mesa's
  * expected formats on emit.  
@@ -172,8 +172,10 @@ static struct ureg get_tex_temp( struct texenv_fragment_program *p )
 
    /* Then any unused temporary:
     */
-   if (!bit)
+   if (!bit) {
       bit = ffs( ~p->temp_flag );
+      p->program->NumTexIndirections++;
+   }
 
    if (!bit) {
       fprintf(stderr, "%s: out of temporaries\n", __FILE__);
@@ -689,9 +691,12 @@ void _mesa_UpdateTexEnvProgram( GLcontext *ctx )
    if (ctx->FragmentProgram._Enabled)
       return;
 
-   if (!ctx->_TexEnvProgram)
-      ctx->_TexEnvProgram = (struct fragment_program *)
-        ctx->Driver.NewProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, 0);
+   if (ctx->_TexEnvProgram)
+      ctx->Driver.DeleteProgram(ctx, ctx->_TexEnvProgram);
+   
+   ctx->FragmentProgram._Current = ctx->_TexEnvProgram = 
+      (struct fragment_program *)
+      ctx->Driver.NewProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, 0);
 
    p.ctx = ctx;
    p.program = ctx->_TexEnvProgram;