diff options
-rw-r--r-- | src/mesa/main/texenvprogram.c | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/src/mesa/main/texenvprogram.c b/src/mesa/main/texenvprogram.c index 10a6b5f21a..0d536951c9 100644 --- a/src/mesa/main/texenvprogram.c +++ b/src/mesa/main/texenvprogram.c @@ -181,7 +181,12 @@ static GLuint translate_tex_src_bit( GLbitfield bit ) } } -static struct state_key *make_state_key( GLcontext *ctx ) +/** + * Examine current texture environment state and generate a unique + * key to identify it. + */ +static struct state_key * +make_state_key(GLcontext *ctx) { struct state_key *key = CALLOC_STRUCT(state_key); GLuint i, j; @@ -264,10 +269,6 @@ const static struct ureg undef = { 0 }; -#define X 0 -#define Y 1 -#define Z 2 -#define W 3 /* State used to build the fragment program: */ @@ -470,7 +471,7 @@ emit_op(struct texenv_fragment_program *p, enum prog_opcode op, struct ureg dest, GLuint mask, - GLuint saturate, + GLboolean saturate, struct ureg src0, struct ureg src1, struct ureg src2 ) @@ -502,7 +503,7 @@ static struct ureg emit_arith( struct texenv_fragment_program *p, enum prog_opcode op, struct ureg dest, GLuint mask, - GLuint saturate, + GLboolean saturate, struct ureg src0, struct ureg src1, struct ureg src2 ) @@ -537,7 +538,7 @@ static struct ureg emit_texld( struct texenv_fragment_program *p, { struct prog_instruction *inst = emit_op( p, op, dest, destmask, - 0, /* don't saturate? */ + GL_FALSE, /* don't saturate? */ coord, /* arg 0? */ undef, undef); @@ -607,7 +608,6 @@ static struct ureg get_zero( struct texenv_fragment_program *p ) } - static void program_error( struct texenv_fragment_program *p, const char *msg ) { _mesa_problem(NULL, msg); @@ -671,7 +671,7 @@ static struct ureg emit_combine_source( struct texenv_fragment_program *p, if (mask == WRITEMASK_W) return src; else - return swizzle1( src, W ); + return swizzle1( src, SWIZZLE_W ); case OPR_ONE_MINUS_SRC_ALPHA: /* Get unused tmp, * Emit tmp = 1.0 - arg.wwww @@ -679,7 +679,7 @@ static struct ureg emit_combine_source( struct texenv_fragment_program *p, arg = get_temp(p); one = get_one(p); return emit_arith(p, OPCODE_SUB, arg, mask, 0, - one, swizzle1(src, W), undef); + one, swizzle1(src, SWIZZLE_W), undef); case OPR_ZERO: return get_zero(p); case OPR_ONE: @@ -692,7 +692,7 @@ static struct ureg emit_combine_source( struct texenv_fragment_program *p, static GLboolean args_match( struct state_key *key, GLuint unit ) { - int i, nr = key->unit[unit].NumArgsRGB; + GLuint i, nr = key->unit[unit].NumArgsRGB; for (i = 0 ; i < nr ; i++) { if (key->unit[unit].OptA[i].Source != key->unit[unit].OptRGB[i].Source) @@ -728,7 +728,7 @@ static GLboolean args_match( struct state_key *key, GLuint unit ) static struct ureg emit_combine( struct texenv_fragment_program *p, struct ureg dest, GLuint mask, - GLuint saturate, + GLboolean saturate, GLuint unit, GLuint nr, GLuint mode, @@ -736,7 +736,7 @@ static struct ureg emit_combine( struct texenv_fragment_program *p, { struct ureg src[3]; struct ureg tmp, half; - int i; + GLuint i; for (i = 0; i < nr; i++) src[i] = emit_combine_source( p, mask, unit, opt[i].Source, opt[i].Operand ); @@ -816,10 +816,14 @@ static struct ureg emit_combine( struct texenv_fragment_program *p, } -static struct ureg emit_texenv( struct texenv_fragment_program *p, int unit ) +/** + * Generate instructions for one texture unit's env/combiner mode. + */ +static struct ureg +emit_texenv(struct texenv_fragment_program *p, GLuint unit) { struct state_key *key = p->state; - GLuint saturate = (unit < p->last_tex_stage); + GLboolean saturate = (unit < p->last_tex_stage); GLuint rgb_shift, alpha_shift; struct ureg out, shift; struct ureg dest; @@ -909,7 +913,9 @@ static struct ureg emit_texenv( struct texenv_fragment_program *p, int unit ) } - +/** + * Generate instruction for getting a texture source term. + */ static void load_texture( struct texenv_fragment_program *p, GLuint unit ) { if (is_undef(p->src_texture[unit])) { @@ -956,7 +962,12 @@ static GLboolean load_texenv_source( struct texenv_fragment_program *p, return GL_TRUE; } -static GLboolean load_texunit_sources( struct texenv_fragment_program *p, int unit ) + +/** + * Generate instructions for loading all texture source terms. + */ +static GLboolean +load_texunit_sources( struct texenv_fragment_program *p, int unit ) { struct state_key *key = p->state; int i, nr = key->unit[unit].NumArgsRGB; @@ -968,8 +979,14 @@ static GLboolean load_texunit_sources( struct texenv_fragment_program *p, int un return GL_TRUE; } -static void create_new_program(struct state_key *key, GLcontext *ctx, - struct fragment_program *program) + +/** + * Generate a new fragment program which implements the context's + * current texture env/combine mode. + */ +static void +create_new_program(struct state_key *key, GLcontext *ctx, + struct fragment_program *program) { struct texenv_fragment_program p; GLuint unit; @@ -1099,7 +1116,7 @@ static void cache_item( struct texenvprog_cache **cache, void *key, void *data ) { - struct texenvprog_cache *c = MALLOC(sizeof(*c)); + struct texenvprog_cache *c = CALLOC_STRUCT(texenvprog_cache); c->hash = hash; c->key = key; c->data = data; |