Update DRI drivers for new glsl compiler.
[mesa.git] / src / mesa / drivers / dri / r300 / r300_shader.c
1 #include "glheader.h"
2 #include "macros.h"
3 #include "enums.h"
4
5 #include "program.h"
6 #include "tnl/tnl.h"
7 #include "r300_context.h"
8 #include "r300_fragprog.h"
9
10 static void
11 r300BindProgram(GLcontext *ctx, GLenum target, struct gl_program *prog)
12 {
13 switch(target){
14 case GL_VERTEX_PROGRAM_ARB:
15 //rmesa->curr_vp = (struct gl_vertex_program *)vp;
16 //vp->ref_count++;
17 #if 0
18 if((vp->ref_count % 1500) == 0) {
19 fprintf(stderr, "id %p, ref_count %d\n", vp, vp->ref_count);
20 _mesa_print_program(&vp->mesa_program.Base);
21 }
22 #endif
23
24 case GL_FRAGMENT_PROGRAM_ARB:
25 break;
26 default:
27 WARN_ONCE("Target not supported yet!\n");
28 break;
29 }
30 }
31
32 static struct gl_program *
33 r300NewProgram(GLcontext *ctx, GLenum target, GLuint id)
34 {
35 struct r300_vertex_program_cont *vp;
36 struct r300_fragment_program *fp;
37
38 switch(target){
39 case GL_VERTEX_STATE_PROGRAM_NV:
40 case GL_VERTEX_PROGRAM_ARB:
41 vp=CALLOC_STRUCT(r300_vertex_program_cont);
42 return _mesa_init_vertex_program(ctx, &vp->mesa_program, target, id);
43 case GL_FRAGMENT_PROGRAM_ARB:
44 fp=CALLOC_STRUCT(r300_fragment_program);
45 fp->ctx = ctx;
46 return _mesa_init_fragment_program(ctx, &fp->mesa_program, target, id);
47 case GL_FRAGMENT_PROGRAM_NV:
48 fp=CALLOC_STRUCT(r300_fragment_program);
49 return _mesa_init_fragment_program(ctx, &fp->mesa_program, target, id);
50 default:
51 _mesa_problem(ctx, "Bad target in r300NewProgram");
52 }
53
54 return NULL;
55 }
56
57
58 static void
59 r300DeleteProgram(GLcontext *ctx, struct gl_program *prog)
60 {
61 #if 0
62 r300ContextPtr rmesa = R300_CONTEXT(ctx);
63 struct r300_vertex_program *vp=(void *)prog;
64
65 if(rmesa->curr_vp == vp)
66 rmesa->curr_vp = NULL;
67 #endif
68
69 _mesa_delete_program(ctx, prog);
70 }
71
72 static void
73 r300ProgramStringNotify(GLcontext *ctx, GLenum target, struct gl_program *prog)
74 {
75 struct r300_vertex_program_cont *vp=(void *)prog;
76 struct r300_fragment_program *fp = (struct r300_fragment_program *) prog;
77
78 switch(target) {
79 case GL_VERTEX_PROGRAM_ARB:
80 vp->progs = NULL;
81 /*vp->translated = GL_FALSE;
82 memset(&vp->translated, 0, sizeof(struct r300_vertex_program) - sizeof(struct gl_vertex_program));*/
83 /*r300_translate_vertex_shader(vp);*/
84 break;
85 case GL_FRAGMENT_PROGRAM_ARB:
86 fp->translated = GL_FALSE;
87 break;
88 }
89 /* need this for tcl fallbacks */
90 _tnl_program_string(ctx, target, prog);
91 }
92
93 static GLboolean
94 r300IsProgramNative(GLcontext *ctx, GLenum target, struct gl_program *prog)
95 {
96 //struct r300_vertex_program *vp=(void *)prog;
97 //r300ContextPtr rmesa = R300_CONTEXT(ctx);
98
99 return 1;
100 }
101
102 void r300InitShaderFuncs(struct dd_function_table *functions)
103 {
104 functions->NewProgram=r300NewProgram;
105 functions->BindProgram=r300BindProgram;
106 functions->DeleteProgram=r300DeleteProgram;
107 functions->ProgramStringNotify=r300ProgramStringNotify;
108 functions->IsProgramNative=r300IsProgramNative;
109 }