This was causing infinite recursive calls w/ software drivers.
All vertex/fragment shaders should be allocated by calling
ctx->Driver.NewProgram(), not by calling _mesa_new_program().
struct gl_program *
_mesa_new_program(GLcontext *ctx, GLenum target, GLuint id)
{
+#if 0
+ /* This was added by Nan hai Zou but disabled by BrianP since it
+ * causes infinite recursive calls.
+ */
if (ctx->Driver.NewProgram)
return ctx->Driver.NewProgram(ctx, target, id);
+#endif
switch (target) {
case GL_VERTEX_PROGRAM_ARB: /* == GL_VERTEX_PROGRAM_NV */
return _mesa_init_vertex_program(ctx, CALLOC_STRUCT(gl_vertex_program),