static void i915EmitTextureProgram( struct i915_context *i915 ) { GLcontext *ctx = &i915->intel.ctx; struct i915_fragment_program *p = &i915->tex_program; GLuint unit; if (0) fprintf(stderr, "%s\n", __FUNCTION__); i915_init_program( i915, p ); if (ctx->Texture._EnabledUnits) { for (unit = 0 ; unit < ctx->Const.MaxTextureUnits ; unit++) if (ctx->Texture.Unit[unit]._ReallyEnabled) { p->last_tex_stage = unit; } for (unit = 0 ; unit < ctx->Const.MaxTextureUnits; unit++) if (ctx->Texture.Unit[unit]._ReallyEnabled) { p->src_previous = emit_texenv( p, unit ); p->src_texture = UREG_BAD; p->temp_flag = 0xffff000; p->temp_flag |= 1 << GET_UREG_NR(p->src_previous); } } emit_program_fini( p ); i915_fini_program( p ); i915_upload_program( i915, p ); p->translated = 1; }
static struct gl_program * i915NewProgram(GLcontext * ctx, GLenum target, GLuint id) { switch (target) { case GL_VERTEX_PROGRAM_ARB: return _mesa_init_vertex_program(ctx, CALLOC_STRUCT(gl_vertex_program), target, id); case GL_FRAGMENT_PROGRAM_ARB:{ struct i915_fragment_program *prog = CALLOC_STRUCT(i915_fragment_program); if (prog) { i915_init_program(I915_CONTEXT(ctx), prog); return _mesa_init_fragment_program(ctx, &prog->FragProg, target, id); } else return NULL; } default: /* Just fallback: */ return _mesa_new_program(ctx, target, id); } }
static void translate_program( struct i915_fragment_program *p ) { i915ContextPtr i915 = I915_CONTEXT(p->ctx); i915_init_program( i915, p ); check_wpos( p ); upload_program( p ); fixup_depth_write( p ); i915_fini_program( p ); p->translated = 1; }