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