Flat shading and bunch of clarifications to r300_reg.h .
[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 "r300_context.h"
7 #include "nvvertprog.h"
8
9 static void r300BindProgram(GLcontext *ctx, GLenum target, struct program *prog)
10 {
11 r300ContextPtr rmesa = R300_CONTEXT(ctx);
12 struct r300_vertex_program *vp=(void *)prog;
13
14 switch(target){
15 case GL_VERTEX_PROGRAM_ARB:
16 //rmesa->current_vp = vp;
17 break;
18 default:
19 WARN_ONCE("Target not supported yet!\n");
20 break;
21 }
22 }
23
24 /* Mesa doesnt seem to have prototype for this */
25 struct program *
26 _mesa_init_ati_fragment_shader( GLcontext *ctx, struct ati_fragment_shader *prog,
27 GLenum target, GLuint id);
28
29 static struct program *r300NewProgram(GLcontext *ctx, GLenum target, GLuint id)
30 {
31 struct r300_vertex_program *vp;
32 struct fragment_program *fp;
33 struct ati_fragment_shader *afs;
34
35 switch(target){
36 case GL_VERTEX_PROGRAM_ARB:
37 vp=CALLOC_STRUCT(r300_vertex_program);
38 return _mesa_init_vertex_program(ctx, &vp->mesa_program, target, id);
39
40 case GL_FRAGMENT_PROGRAM_ARB:
41 fp=CALLOC_STRUCT(fragment_program);
42 return _mesa_init_fragment_program(ctx, fp, target, id);
43
44 case GL_FRAGMENT_PROGRAM_NV:
45 fp=CALLOC_STRUCT(fragment_program);
46 return _mesa_init_fragment_program(ctx, fp, target, id);
47
48 case GL_FRAGMENT_SHADER_ATI:
49 afs=CALLOC_STRUCT(ati_fragment_shader);
50 return _mesa_init_ati_fragment_shader(ctx, afs, target, id);
51 }
52
53 return NULL;
54 }
55
56
57 static void r300DeleteProgram(GLcontext *ctx, struct program *prog)
58 {
59 r300ContextPtr rmesa = R300_CONTEXT(ctx);
60 struct r300_vertex_program *vp=(void *)prog;
61
62 /*if(rmesa->current_vp == vp)
63 rmesa->current_vp = NULL;*/
64
65 _mesa_delete_program(ctx, prog);
66 }
67
68 void r300ProgramStringNotify(GLcontext *ctx, GLenum target,
69 struct program *prog)
70 {
71 struct r300_vertex_program *vp=(void *)prog;
72
73 switch(target) {
74 case GL_VERTEX_PROGRAM_ARB:
75 vp->translated=GL_FALSE;
76 translate_vertex_shader(vp);
77 //debug_vp(ctx, vp);
78 break;
79
80 case GL_FRAGMENT_PROGRAM_ARB:
81 break;
82 }
83 }
84
85 static GLboolean r300IsProgramNative(GLcontext *ctx, GLenum target, struct program *prog)
86 {
87 struct r300_vertex_program *vp=(void *)prog;
88 r300ContextPtr rmesa = R300_CONTEXT(ctx);
89
90 return 1;
91 }
92
93 void r300InitShaderFuncs(struct dd_function_table *functions)
94 {
95 functions->NewProgram=r300NewProgram;
96 functions->BindProgram=r300BindProgram;
97 functions->DeleteProgram=r300DeleteProgram;
98 functions->ProgramStringNotify=r300ProgramStringNotify;
99 functions->IsProgramNative=r300IsProgramNative;
100 }