Lines Matching +full:- +full:- +full:target
2 * Mesa 3-D graphics library
4 * Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
49 flush_vertices_for_program_constants(struct gl_context *ctx, GLenum target) in flush_vertices_for_program_constants() argument
53 if (target == GL_FRAGMENT_PROGRAM_ARB) { in flush_vertices_for_program_constants()
55 ctx->DriverFlags.NewShaderConstants[MESA_SHADER_FRAGMENT]; in flush_vertices_for_program_constants()
58 ctx->DriverFlags.NewShaderConstants[MESA_SHADER_VERTEX]; in flush_vertices_for_program_constants()
62 ctx->NewDriverState |= new_driver_state; in flush_vertices_for_program_constants()
66 lookup_or_create_program(GLuint id, GLenum target, const char* caller) in lookup_or_create_program() argument
73 if (target == GL_VERTEX_PROGRAM_ARB) in lookup_or_create_program()
74 newProg = ctx->Shared->DefaultVertexProgram; in lookup_or_create_program()
76 newProg = ctx->Shared->DefaultFragmentProgram; in lookup_or_create_program()
84 newProg = ctx->Driver.NewProgram(ctx, _mesa_program_enum_to_shader_stage(target), in lookup_or_create_program()
90 _mesa_HashInsert(ctx->Shared->Programs, id, newProg, isGenName); in lookup_or_create_program()
92 else if (newProg->Target != target) { in lookup_or_create_program()
94 "%s(target mismatch)", caller); in lookup_or_create_program()
107 _mesa_BindProgramARB(GLenum target, GLuint id) in _mesa_BindProgramARB() argument
112 /* Error-check target and get curProg */ in _mesa_BindProgramARB()
113 if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { in _mesa_BindProgramARB()
114 curProg = ctx->VertexProgram.Current; in _mesa_BindProgramARB()
116 else if (target == GL_FRAGMENT_PROGRAM_ARB in _mesa_BindProgramARB()
117 && ctx->Extensions.ARB_fragment_program) { in _mesa_BindProgramARB()
118 curProg = ctx->FragmentProgram.Current; in _mesa_BindProgramARB()
121 _mesa_error(ctx, GL_INVALID_ENUM, "glBindProgramARB(target)"); in _mesa_BindProgramARB()
127 * NOTE: binding to a non-existant program is not an error. in _mesa_BindProgramARB()
130 newProg = lookup_or_create_program(id, target, "glBindProgram"); in _mesa_BindProgramARB()
136 if (curProg->Id == id) { in _mesa_BindProgramARB()
137 /* binding same program - no change */ in _mesa_BindProgramARB()
143 flush_vertices_for_program_constants(ctx, target); in _mesa_BindProgramARB()
146 if (target == GL_VERTEX_PROGRAM_ARB) { in _mesa_BindProgramARB()
147 _mesa_reference_program(ctx, &ctx->VertexProgram.Current, newProg); in _mesa_BindProgramARB()
149 else if (target == GL_FRAGMENT_PROGRAM_ARB) { in _mesa_BindProgramARB()
150 _mesa_reference_program(ctx, &ctx->FragmentProgram.Current, newProg); in _mesa_BindProgramARB()
157 assert(ctx->VertexProgram.Current); in _mesa_BindProgramARB()
158 assert(ctx->FragmentProgram.Current); in _mesa_BindProgramARB()
184 _mesa_HashRemove(ctx->Shared->Programs, ids[i]); in _mesa_DeleteProgramsARB()
188 switch (prog->Target) { in _mesa_DeleteProgramsARB()
190 if (ctx->VertexProgram.Current && in _mesa_DeleteProgramsARB()
191 ctx->VertexProgram.Current->Id == ids[i]) { in _mesa_DeleteProgramsARB()
193 _mesa_BindProgramARB(prog->Target, 0); in _mesa_DeleteProgramsARB()
197 if (ctx->FragmentProgram.Current && in _mesa_DeleteProgramsARB()
198 ctx->FragmentProgram.Current->Id == ids[i]) { in _mesa_DeleteProgramsARB()
200 _mesa_BindProgramARB(prog->Target, 0); in _mesa_DeleteProgramsARB()
204 _mesa_problem(ctx, "bad target in glDeleteProgramsNV"); in _mesa_DeleteProgramsARB()
207 /* The ID is immediately available for re-use now */ in _mesa_DeleteProgramsARB()
208 _mesa_HashRemove(ctx->Shared->Programs, ids[i]); in _mesa_DeleteProgramsARB()
235 _mesa_HashLockMutex(ctx->Shared->Programs); in _mesa_GenProgramsARB()
237 _mesa_HashFindFreeKeys(ctx->Shared->Programs, ids, n); in _mesa_GenProgramsARB()
241 _mesa_HashInsertLocked(ctx->Shared->Programs, ids[i], in _mesa_GenProgramsARB()
245 _mesa_HashUnlockMutex(ctx->Shared->Programs); in _mesa_GenProgramsARB()
274 get_current_program(struct gl_context* ctx, GLenum target, const char* caller) in get_current_program() argument
276 if (target == GL_VERTEX_PROGRAM_ARB in get_current_program()
277 && ctx->Extensions.ARB_vertex_program) { in get_current_program()
278 return ctx->VertexProgram.Current; in get_current_program()
280 else if (target == GL_FRAGMENT_PROGRAM_ARB in get_current_program()
281 && ctx->Extensions.ARB_fragment_program) { in get_current_program()
282 return ctx->FragmentProgram.Current; in get_current_program()
286 "%s(target)", caller); in get_current_program()
293 struct gl_program* prog, GLenum target, in get_local_param_pointer() argument
296 if (unlikely(index + count > prog->arb.MaxLocalParams)) { in get_local_param_pointer()
298 if (!prog->arb.MaxLocalParams) { in get_local_param_pointer()
301 if (target == GL_VERTEX_PROGRAM_ARB) in get_local_param_pointer()
302 max = ctx->Const.Program[MESA_SHADER_VERTEX].MaxLocalParams; in get_local_param_pointer()
304 max = ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxLocalParams; in get_local_param_pointer()
307 if (!prog->arb.LocalParams) { in get_local_param_pointer()
308 prog->arb.LocalParams = rzalloc_array_size(prog, sizeof(float[4]), in get_local_param_pointer()
310 if (!prog->arb.LocalParams) { in get_local_param_pointer()
317 prog->arb.MaxLocalParams = max; in get_local_param_pointer()
321 if (index + count > prog->arb.MaxLocalParams) { in get_local_param_pointer()
327 *param = prog->arb.LocalParams[index]; in get_local_param_pointer()
334 GLenum target, GLuint index, GLfloat **param) in get_env_param_pointer() argument
336 if (target == GL_FRAGMENT_PROGRAM_ARB in get_env_param_pointer()
337 && ctx->Extensions.ARB_fragment_program) { in get_env_param_pointer()
338 if (index >= ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxEnvParams) { in get_env_param_pointer()
342 *param = ctx->FragmentProgram.Parameters[index]; in get_env_param_pointer()
345 else if (target == GL_VERTEX_PROGRAM_ARB && in get_env_param_pointer()
346 ctx->Extensions.ARB_vertex_program) { in get_env_param_pointer()
347 if (index >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxEnvParams) { in get_env_param_pointer()
351 *param = ctx->VertexProgram.Parameters[index]; in get_env_param_pointer()
354 _mesa_error(ctx, GL_INVALID_ENUM, "%s(target)", func); in get_env_param_pointer()
360 set_program_string(struct gl_program *prog, GLenum target, GLenum format, GLsizei len, in set_program_string() argument
368 if (!ctx->Extensions.ARB_vertex_program in set_program_string()
369 && !ctx->Extensions.ARB_fragment_program) { in set_program_string()
382 gl_shader_stage stage = _mesa_program_enum_to_shader_stage(target); in set_program_string()
397 if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { in set_program_string()
398 _mesa_parse_arb_vertex_program(ctx, target, string, len, prog); in set_program_string()
400 else if (target == GL_FRAGMENT_PROGRAM_ARB in set_program_string()
401 && ctx->Extensions.ARB_fragment_program) { in set_program_string()
402 _mesa_parse_arb_fragment_program(ctx, target, string, len, prog); in set_program_string()
405 _mesa_error(ctx, GL_INVALID_ENUM, "glProgramStringARB(target)"); in set_program_string()
409 failed = ctx->Program.ErrorPos != -1; in set_program_string()
413 if (!st_program_string_notify(ctx, target, prog)) { in set_program_string()
423 if (ctx->_Shader->Flags & GLSL_DUMP) { in set_program_string()
425 target == GL_FRAGMENT_PROGRAM_ARB ? "fragment" : "vertex"; in set_program_string()
428 shader_type, prog->Id); in set_program_string()
433 shader_type, prog->Id); in set_program_string()
436 shader_type, prog->Id); in set_program_string()
443 /* Capture vp-*.shader_test/fp-*.shader_test files. */ in set_program_string()
448 target == GL_FRAGMENT_PROGRAM_ARB ? "fragment" : "vertex"; in set_program_string()
450 ralloc_asprintf(NULL, "%s/%cp-%u.shader_test", in set_program_string()
451 capture_path, shader_type[0], prog->Id); in set_program_string()
467 _mesa_ProgramStringARB(GLenum target, GLenum format, GLsizei len, in _mesa_ProgramStringARB() argument
471 if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { in _mesa_ProgramStringARB()
472 set_program_string(ctx->VertexProgram.Current, target, format, len, string); in _mesa_ProgramStringARB()
474 else if (target == GL_FRAGMENT_PROGRAM_ARB in _mesa_ProgramStringARB()
475 && ctx->Extensions.ARB_fragment_program) { in _mesa_ProgramStringARB()
476 set_program_string(ctx->FragmentProgram.Current, target, format, len, string); in _mesa_ProgramStringARB()
479 _mesa_error(ctx, GL_INVALID_ENUM, "glProgramStringARB(target)"); in _mesa_ProgramStringARB()
485 _mesa_NamedProgramStringEXT(GLuint program, GLenum target, GLenum format, GLsizei len, in _mesa_NamedProgramStringEXT() argument
488 struct gl_program* prog = lookup_or_create_program(program, target, "glNamedProgramStringEXT"); in _mesa_NamedProgramStringEXT()
493 set_program_string(prog, target, format, len, string); in _mesa_NamedProgramStringEXT()
502 _mesa_ProgramEnvParameter4dARB(GLenum target, GLuint index, in _mesa_ProgramEnvParameter4dARB() argument
505 _mesa_ProgramEnvParameter4fARB(target, index, (GLfloat) x, (GLfloat) y, in _mesa_ProgramEnvParameter4dARB()
515 _mesa_ProgramEnvParameter4dvARB(GLenum target, GLuint index, in _mesa_ProgramEnvParameter4dvARB() argument
518 _mesa_ProgramEnvParameter4fARB(target, index, (GLfloat) params[0], in _mesa_ProgramEnvParameter4dvARB()
529 _mesa_ProgramEnvParameter4fARB(GLenum target, GLuint index, in _mesa_ProgramEnvParameter4fARB() argument
536 flush_vertices_for_program_constants(ctx, target); in _mesa_ProgramEnvParameter4fARB()
539 target, index, ¶m)) { in _mesa_ProgramEnvParameter4fARB()
551 _mesa_ProgramEnvParameter4fvARB(GLenum target, GLuint index, in _mesa_ProgramEnvParameter4fvARB() argument
558 flush_vertices_for_program_constants(ctx, target); in _mesa_ProgramEnvParameter4fvARB()
561 target, index, ¶m)) { in _mesa_ProgramEnvParameter4fvARB()
568 _mesa_ProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, in _mesa_ProgramEnvParameters4fvEXT() argument
574 flush_vertices_for_program_constants(ctx, target); in _mesa_ProgramEnvParameters4fvEXT()
580 if (target == GL_FRAGMENT_PROGRAM_ARB in _mesa_ProgramEnvParameters4fvEXT()
581 && ctx->Extensions.ARB_fragment_program) { in _mesa_ProgramEnvParameters4fvEXT()
582 if ((index + count) > ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxEnvParams) { in _mesa_ProgramEnvParameters4fvEXT()
586 dest = ctx->FragmentProgram.Parameters[index]; in _mesa_ProgramEnvParameters4fvEXT()
588 else if (target == GL_VERTEX_PROGRAM_ARB in _mesa_ProgramEnvParameters4fvEXT()
589 && ctx->Extensions.ARB_vertex_program) { in _mesa_ProgramEnvParameters4fvEXT()
590 if ((index + count) > ctx->Const.Program[MESA_SHADER_VERTEX].MaxEnvParams) { in _mesa_ProgramEnvParameters4fvEXT()
594 dest = ctx->VertexProgram.Parameters[index]; in _mesa_ProgramEnvParameters4fvEXT()
597 _mesa_error(ctx, GL_INVALID_ENUM, "glProgramEnvParameters4fv(target)"); in _mesa_ProgramEnvParameters4fvEXT()
606 _mesa_GetProgramEnvParameterdvARB(GLenum target, GLuint index, in _mesa_GetProgramEnvParameterdvARB() argument
613 target, index, &fparam)) { in _mesa_GetProgramEnvParameterdvARB()
620 _mesa_GetProgramEnvParameterfvARB(GLenum target, GLuint index, in _mesa_GetProgramEnvParameterfvARB() argument
628 target, index, ¶m)) { in _mesa_GetProgramEnvParameterfvARB()
635 _mesa_ProgramLocalParameter4fARB(GLenum target, GLuint index, in _mesa_ProgramLocalParameter4fARB() argument
640 struct gl_program* prog = get_current_program(ctx, target, "glProgramLocalParameterARB"); in _mesa_ProgramLocalParameter4fARB()
645 flush_vertices_for_program_constants(ctx, target); in _mesa_ProgramLocalParameter4fARB()
648 prog, target, index, 1, ¶m)) { in _mesa_ProgramLocalParameter4fARB()
655 _mesa_NamedProgramLocalParameter4fEXT(GLuint program, GLenum target, GLuint index, in _mesa_NamedProgramLocalParameter4fEXT() argument
660 struct gl_program* prog = lookup_or_create_program(program, target, in _mesa_NamedProgramLocalParameter4fEXT()
667 if ((target == GL_VERTEX_PROGRAM_ARB && prog == ctx->VertexProgram.Current) || in _mesa_NamedProgramLocalParameter4fEXT()
668 (target == GL_FRAGMENT_PROGRAM_ARB && prog == ctx->FragmentProgram.Current)) { in _mesa_NamedProgramLocalParameter4fEXT()
669 flush_vertices_for_program_constants(ctx, target); in _mesa_NamedProgramLocalParameter4fEXT()
673 prog, target, index, 1, ¶m)) { in _mesa_NamedProgramLocalParameter4fEXT()
681 _mesa_ProgramLocalParameter4fvARB(GLenum target, GLuint index, in _mesa_ProgramLocalParameter4fvARB() argument
684 _mesa_ProgramLocalParameter4fARB(target, index, params[0], params[1], in _mesa_ProgramLocalParameter4fvARB()
690 _mesa_NamedProgramLocalParameter4fvEXT(GLuint program, GLenum target, GLuint index, in _mesa_NamedProgramLocalParameter4fvEXT() argument
693 _mesa_NamedProgramLocalParameter4fEXT(program, target, index, params[0], in _mesa_NamedProgramLocalParameter4fvEXT()
704 flush_vertices_for_program_constants(ctx, prog->Target); in program_local_parameters4fv()
711 prog, prog->Target, index, count, &dest)) in program_local_parameters4fv()
717 _mesa_ProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, in _mesa_ProgramLocalParameters4fvEXT() argument
721 struct gl_program* prog = get_current_program(ctx, target, in _mesa_ProgramLocalParameters4fvEXT()
732 _mesa_NamedProgramLocalParameters4fvEXT(GLuint program, GLenum target, GLuint index, in _mesa_NamedProgramLocalParameters4fvEXT() argument
736 lookup_or_create_program(program, target, in _mesa_NamedProgramLocalParameters4fvEXT()
748 _mesa_ProgramLocalParameter4dARB(GLenum target, GLuint index, in _mesa_ProgramLocalParameter4dARB() argument
752 _mesa_ProgramLocalParameter4fARB(target, index, (GLfloat) x, (GLfloat) y, in _mesa_ProgramLocalParameter4dARB()
758 _mesa_NamedProgramLocalParameter4dEXT(GLuint program, GLenum target, GLuint index, in _mesa_NamedProgramLocalParameter4dEXT() argument
762 _mesa_NamedProgramLocalParameter4fEXT(program, target, index, (GLfloat) x, (GLfloat) y, in _mesa_NamedProgramLocalParameter4dEXT()
768 _mesa_ProgramLocalParameter4dvARB(GLenum target, GLuint index, in _mesa_ProgramLocalParameter4dvARB() argument
771 _mesa_ProgramLocalParameter4fARB(target, index, in _mesa_ProgramLocalParameter4dvARB()
778 _mesa_NamedProgramLocalParameter4dvEXT(GLuint program, GLenum target, GLuint index, in _mesa_NamedProgramLocalParameter4dvEXT() argument
781 _mesa_NamedProgramLocalParameter4fEXT(program, target, index, in _mesa_NamedProgramLocalParameter4dvEXT()
788 _mesa_GetProgramLocalParameterfvARB(GLenum target, GLuint index, in _mesa_GetProgramLocalParameterfvARB() argument
793 struct gl_program* prog = get_current_program(ctx, target, "glGetProgramLocalParameterfvARB"); in _mesa_GetProgramLocalParameterfvARB()
799 prog, target, index, 1, ¶m)) { in _mesa_GetProgramLocalParameterfvARB()
806 _mesa_GetNamedProgramLocalParameterfvEXT(GLuint program, GLenum target, GLuint index, in _mesa_GetNamedProgramLocalParameterfvEXT() argument
811 struct gl_program* prog = lookup_or_create_program(program, target, in _mesa_GetNamedProgramLocalParameterfvEXT()
818 prog, target, index, 1, ¶m)) { in _mesa_GetNamedProgramLocalParameterfvEXT()
825 _mesa_GetProgramLocalParameterdvARB(GLenum target, GLuint index, in _mesa_GetProgramLocalParameterdvARB() argument
830 struct gl_program* prog = get_current_program(ctx, target, "glGetProgramLocalParameterdvARB"); in _mesa_GetProgramLocalParameterdvARB()
836 prog, target, index, 1, ¶m)) { in _mesa_GetProgramLocalParameterdvARB()
843 _mesa_GetNamedProgramLocalParameterdvEXT(GLuint program, GLenum target, GLuint index, in _mesa_GetNamedProgramLocalParameterdvEXT() argument
848 struct gl_program* prog = lookup_or_create_program(program, target, in _mesa_GetNamedProgramLocalParameterdvEXT()
855 prog, target, index, 1, ¶m)) { in _mesa_GetNamedProgramLocalParameterdvEXT()
862 get_program_iv(struct gl_program *prog, GLenum target, GLenum pname, in get_program_iv() argument
869 if (target == GL_VERTEX_PROGRAM_ARB) { in get_program_iv()
870 limits = &ctx->Const.Program[MESA_SHADER_VERTEX]; in get_program_iv()
873 limits = &ctx->Const.Program[MESA_SHADER_FRAGMENT]; in get_program_iv()
883 = prog->String ? (GLint) strlen((char *) prog->String) : 0; in get_program_iv()
886 *params = prog->Format; in get_program_iv()
889 *params = prog->Id; in get_program_iv()
892 *params = prog->arb.NumInstructions; in get_program_iv()
895 *params = limits->MaxInstructions; in get_program_iv()
898 *params = prog->arb.NumNativeInstructions; in get_program_iv()
901 *params = limits->MaxNativeInstructions; in get_program_iv()
904 *params = prog->arb.NumTemporaries; in get_program_iv()
907 *params = limits->MaxTemps; in get_program_iv()
910 *params = prog->arb.NumNativeTemporaries; in get_program_iv()
913 *params = limits->MaxNativeTemps; in get_program_iv()
916 *params = prog->arb.NumParameters; in get_program_iv()
919 *params = limits->MaxParameters; in get_program_iv()
922 *params = prog->arb.NumNativeParameters; in get_program_iv()
925 *params = limits->MaxNativeParameters; in get_program_iv()
928 *params = prog->arb.NumAttributes; in get_program_iv()
931 *params = limits->MaxAttribs; in get_program_iv()
934 *params = prog->arb.NumNativeAttributes; in get_program_iv()
937 *params = limits->MaxNativeAttribs; in get_program_iv()
940 *params = prog->arb.NumAddressRegs; in get_program_iv()
943 *params = limits->MaxAddressRegs; in get_program_iv()
946 *params = prog->arb.NumNativeAddressRegs; in get_program_iv()
949 *params = limits->MaxNativeAddressRegs; in get_program_iv()
952 *params = limits->MaxLocalParams; in get_program_iv()
955 *params = limits->MaxEnvParams; in get_program_iv()
965 if (prog->Id == 0) { in get_program_iv()
975 /* continue with fragment-program only queries below */ in get_program_iv()
982 if (target == GL_FRAGMENT_PROGRAM_ARB) { in get_program_iv()
983 const struct gl_program *fp = ctx->FragmentProgram.Current; in get_program_iv()
986 *params = fp->arb.NumNativeAluInstructions; in get_program_iv()
989 *params = fp->arb.NumAluInstructions; in get_program_iv()
992 *params = fp->arb.NumTexInstructions; in get_program_iv()
995 *params = fp->arb.NumNativeTexInstructions; in get_program_iv()
998 *params = fp->arb.NumTexIndirections; in get_program_iv()
1001 *params = fp->arb.NumNativeTexIndirections; in get_program_iv()
1004 *params = limits->MaxAluInstructions; in get_program_iv()
1007 *params = limits->MaxNativeAluInstructions; in get_program_iv()
1010 *params = limits->MaxTexInstructions; in get_program_iv()
1013 *params = limits->MaxNativeTexInstructions; in get_program_iv()
1016 *params = limits->MaxTexIndirections; in get_program_iv()
1019 *params = limits->MaxNativeTexIndirections; in get_program_iv()
1033 _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint *params) in _mesa_GetProgramivARB() argument
1036 struct gl_program* prog = get_current_program(ctx, target, in _mesa_GetProgramivARB()
1041 get_program_iv(prog, target, pname, params); in _mesa_GetProgramivARB()
1045 _mesa_GetNamedProgramivEXT(GLuint program, GLenum target, GLenum pname, in _mesa_GetNamedProgramivEXT() argument
1050 _mesa_GetProgramivARB(target, pname, params); in _mesa_GetNamedProgramivEXT()
1053 prog = lookup_or_create_program(program, target, in _mesa_GetNamedProgramivEXT()
1058 get_program_iv(prog, target, pname, params); in _mesa_GetNamedProgramivEXT()
1063 _mesa_GetProgramStringARB(GLenum target, GLenum pname, GLvoid *string) in _mesa_GetProgramStringARB() argument
1069 if (target == GL_VERTEX_PROGRAM_ARB) { in _mesa_GetProgramStringARB()
1070 prog = ctx->VertexProgram.Current; in _mesa_GetProgramStringARB()
1072 else if (target == GL_FRAGMENT_PROGRAM_ARB) { in _mesa_GetProgramStringARB()
1073 prog = ctx->FragmentProgram.Current; in _mesa_GetProgramStringARB()
1076 _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramStringARB(target)"); in _mesa_GetProgramStringARB()
1087 if (prog->String) in _mesa_GetProgramStringARB()
1088 memcpy(dst, prog->String, strlen((char *) prog->String)); in _mesa_GetProgramStringARB()
1095 _mesa_GetNamedProgramStringEXT(GLuint program, GLenum target, in _mesa_GetNamedProgramStringEXT() argument
1099 struct gl_program* prog = lookup_or_create_program(program, target, in _mesa_GetNamedProgramStringEXT()
1109 if (prog->String) in _mesa_GetNamedProgramStringEXT()
1110 memcpy(dst, prog->String, strlen((char *) prog->String)); in _mesa_GetNamedProgramStringEXT()