mesa: Branch 'glsl-compiler-1' - 3 commits

Brian Paul brianp at kemper.freedesktop.org
Sat Feb 24 22:51:56 UTC 2007


 src/mesa/main/mtypes.h         |   16 +++++++++-------
 src/mesa/main/texenvprogram.c  |   12 +++++++++---
 src/mesa/shader/prog_execute.c |    5 +++--
 src/mesa/shader/prog_execute.h |    6 +++++-
 src/mesa/shader/shader_api.c   |    3 +--
 src/mesa/swrast/s_context.c    |    4 ----
 6 files changed, 27 insertions(+), 19 deletions(-)

New commits:
diff-tree efcfdbd4d16071088e60a59cb966abd730d9d111 (from 292a80466d3e0b1cec998f2dc1b0abe25dc10fb8)
Author: Brian <brian at yutani.localnet.net>
Date:   Sat Feb 24 15:51:41 2007 -0700

    Undo some changes to _mesa_UpdateTexEnvProgram().  Fixes broken i915 texturing.

diff --git a/src/mesa/main/texenvprogram.c b/src/mesa/main/texenvprogram.c
index 917acf0..54ae7ce 100644
--- a/src/mesa/main/texenvprogram.c
+++ b/src/mesa/main/texenvprogram.c
@@ -1239,10 +1239,12 @@ _mesa_UpdateTexEnvProgram( GLcontext *ct
    ASSERT(ctx->FragmentProgram._MaintainTexEnvProgram);
 
    /* If a conventional fragment program/shader isn't in effect... */
-   if (!ctx->FragmentProgram._Current) {
+   if (!ctx->FragmentProgram._Enabled &&
+       !ctx->Shader.CurrentProgram) {
       make_state_key(ctx, &key);
       hash = hash_key(&key);
       
+      ctx->FragmentProgram._Current =
       ctx->FragmentProgram._TexEnvProgram =
          search_cache(&ctx->Texture.env_fp_cache, hash, &key, sizeof(key));
 
@@ -1251,7 +1253,9 @@ _mesa_UpdateTexEnvProgram( GLcontext *ct
             _mesa_printf("Building new texenv proggy for key %x\n", hash);
 
          /* create new tex env program */
-         ctx->FragmentProgram._TexEnvProgram = (struct gl_fragment_program *) 
+	 ctx->FragmentProgram._Current =
+         ctx->FragmentProgram._TexEnvProgram =
+            (struct gl_fragment_program *) 
             ctx->Driver.NewProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, 0);
 
          create_new_program(ctx, &key, ctx->FragmentProgram._TexEnvProgram);
@@ -1263,8 +1267,10 @@ _mesa_UpdateTexEnvProgram( GLcontext *ct
          if (0)
             _mesa_printf("Found existing texenv program for key %x\n", hash);
       }
-      ctx->FragmentProgram._Current = ctx->FragmentProgram._TexEnvProgram;
    } 
+   else {
+      ctx->FragmentProgram._Current = ctx->FragmentProgram.Current;
+   }
 
    /* Tell the driver about the change.  Could define a new target for
     * this?
diff-tree 292a80466d3e0b1cec998f2dc1b0abe25dc10fb8 (from 5e80c62f3178a65bebca942aa0b1e5d16c34b2a9)
Author: Brian <brian at yutani.localnet.net>
Date:   Sat Feb 24 15:49:54 2007 -0700

    Outputs[] array wasn't large enough, define MAX_PROGRAM_OUTPUTS, new assertions.

diff --git a/src/mesa/shader/prog_execute.c b/src/mesa/shader/prog_execute.c
index 6417a88..063d572 100644
--- a/src/mesa/shader/prog_execute.c
+++ b/src/mesa/shader/prog_execute.c
@@ -153,8 +153,7 @@ get_register_pointer(GLcontext * ctx,
       }
 
    case PROGRAM_OUTPUT:
-      /* This is only for PRINT */
-      ASSERT(source->Index < FRAG_RESULT_MAX);
+      ASSERT(source->Index < MAX_PROGRAM_OUTPUTS);
       return machine->Outputs[source->Index];
 
    case PROGRAM_LOCAL_PARAM:
@@ -453,9 +452,11 @@ store_vector4(const struct prog_instruct
 
    switch (dest->File) {
    case PROGRAM_OUTPUT:
+      ASSERT(dest->Index < MAX_PROGRAM_OUTPUTS);
       dstReg = machine->Outputs[dest->Index];
       break;
    case PROGRAM_TEMPORARY:
+      ASSERT(dest->Index < MAX_PROGRAM_TEMPS);
       dstReg = machine->Temporaries[dest->Index];
       break;
    case PROGRAM_WRITE_ONLY:
diff --git a/src/mesa/shader/prog_execute.h b/src/mesa/shader/prog_execute.h
index 0e73765..1eb9e73 100644
--- a/src/mesa/shader/prog_execute.h
+++ b/src/mesa/shader/prog_execute.h
@@ -35,6 +35,10 @@ typedef void (*FetchTexelDerivFunc)(GLco
                                     GLuint unit, GLfloat color[4]);
 
 
+/** The larger of VERT_RESULT_MAX, FRAG_RESULT_MAX */
+#define MAX_PROGRAM_OUTPUTS VERT_RESULT_MAX
+
+
 /**
  * Virtual machine state used during execution of vertex/fragment programs.
  */
@@ -50,7 +54,7 @@ struct gl_program_machine
    GLfloat VertAttribs[VERT_ATTRIB_MAX][4];
 
    GLfloat Temporaries[MAX_PROGRAM_TEMPS][4];
-   GLfloat Outputs[FRAG_RESULT_MAX][4];
+   GLfloat Outputs[MAX_PROGRAM_OUTPUTS][4];
    GLuint CondCodes[4];  /**< COND_* value for x/y/z/w */
 
    GLint AddressReg[MAX_VERTEX_PROGRAM_ADDRESS_REGS][4];
diff-tree 5e80c62f3178a65bebca942aa0b1e5d16c34b2a9 (from 197af3dc3242af4cac5213e095ac6639f6c782cd)
Author: Brian <brian at yutani.localnet.net>
Date:   Sat Feb 24 15:39:37 2007 -0700

    Remove unneeded _Fragment/VertexShaderPresent fields, update comments.

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index b83beb8..bd9198e 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -1929,9 +1929,11 @@ struct gl_vertex_program_state
    GLboolean _Enabled;              /**< Enabled and valid program? */
    GLboolean PointSizeEnabled;      /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */
    GLboolean TwoSideEnabled;        /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */
-   struct gl_vertex_program *Current;  /**< ptr to currently bound program */
+   struct gl_vertex_program *Current;  /**< user-bound vertex program */
 
-   /** Currently enabled and valid program (including internal programs) */
+   /** Currently enabled and valid program (including internal programs
+    * and compiled shader programs).
+    */
    struct gl_vertex_program *_Current;
 
    GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */
@@ -1962,9 +1964,11 @@ struct gl_fragment_program_state
 {
    GLboolean Enabled;     /**< User-set fragment program enable flag */
    GLboolean _Enabled;    /**< Fragment program enabled and valid? */
-   struct gl_fragment_program *Current;  /**< User-bound program */
+   struct gl_fragment_program *Current;  /**< User-bound fragment program */
 
-   /** Currently enabled and valid program (including internal programs) */
+   /** Currently enabled and valid program (including internal programs
+    * and compiled shader programs).
+    */
    struct gl_fragment_program *_Current;
 
    GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */
@@ -2099,9 +2103,7 @@ struct gl_shader_program
  */
 struct gl_shader_state
 {
-   GLboolean _VertexShaderPresent;
-   GLboolean _FragmentShaderPresent;
-   struct gl_shader_program *CurrentProgram;
+   struct gl_shader_program *CurrentProgram; /**< The user-bound program */
 };
 
 
diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c
index c439f71..70ceb70 100644
--- a/src/mesa/shader/shader_api.c
+++ b/src/mesa/shader/shader_api.c
@@ -199,8 +199,7 @@ _mesa_lookup_shader(GLcontext *ctx, GLui
 void
 _mesa_init_shader_state(GLcontext * ctx)
 {
-   ctx->Shader._FragmentShaderPresent = GL_FALSE;
-   ctx->Shader._VertexShaderPresent = GL_FALSE;
+   /* no-op */
 }
 
 
diff --git a/src/mesa/swrast/s_context.c b/src/mesa/swrast/s_context.c
index 5e174f8..031d74f 100644
--- a/src/mesa/swrast/s_context.c
+++ b/src/mesa/swrast/s_context.c
@@ -102,10 +102,6 @@ _swrast_update_rasterflags( GLcontext *c
       rasterMask |= FRAGPROG_BIT;
    }
 
-   if (ctx->Shader._FragmentShaderPresent) {
-      rasterMask |= FRAGPROG_BIT;
-   }
-
    if (ctx->ATIFragmentShader._Enabled) {
       rasterMask |= ATIFRAGSHADER_BIT;
    }



More information about the mesa-commit mailing list