--- /dev/null
+#include "glheader.h"
+#include "macros.h"
+#include "enums.h"
+
+#include "program.h"
+#include "r300_context.h"
+#include "nvvertprog.h"
+
+static void r300BindProgram(GLcontext *ctx, GLenum target, struct program *prog)
+{
+ r300ContextPtr rmesa = R300_CONTEXT(ctx);
+ struct r300_vertex_program *vp=(void *)prog;
+
+ switch(target){
+ case GL_VERTEX_PROGRAM_ARB:
+ rmesa->current_vp = vp;
+ break;
+ default:
+ WARN_ONCE("Target not supported yet!\n");
+ break;
+ }
+}
+
+/* Mesa doesnt seem to have prototype for this */
+struct program *
+_mesa_init_ati_fragment_shader( GLcontext *ctx, struct ati_fragment_shader *prog,
+ GLenum target, GLuint id);
+
+static struct program *r300NewProgram(GLcontext *ctx, GLenum target, GLuint id)
+{
+ struct r300_vertex_program *vp;
+ struct fragment_program *fp;
+ struct ati_fragment_shader *afs;
+
+ switch(target){
+ case GL_VERTEX_PROGRAM_ARB:
+ vp=CALLOC_STRUCT(r300_vertex_program);
+ return _mesa_init_vertex_program(ctx, &vp->mesa_program, target, id);
+
+ case GL_FRAGMENT_PROGRAM_ARB:
+ fp=CALLOC_STRUCT(fragment_program);
+ return _mesa_init_fragment_program(ctx, fp, target, id);
+
+ case GL_FRAGMENT_PROGRAM_NV:
+ fp=CALLOC_STRUCT(fragment_program);
+ return _mesa_init_fragment_program(ctx, fp, target, id);
+
+ case GL_FRAGMENT_SHADER_ATI:
+ afs=CALLOC_STRUCT(ati_fragment_shader);
+ return _mesa_init_ati_fragment_shader(ctx, afs, target, id);
+ }
+
+ return NULL;
+}
+
+
+static void r300DeleteProgram(GLcontext *ctx, struct program *prog)
+{
+ r300ContextPtr rmesa = R300_CONTEXT(ctx);
+ struct r300_vertex_program *vp=(void *)prog;
+
+ if(rmesa->current_vp == vp)
+ rmesa->current_vp = NULL;
+
+ _mesa_delete_program(ctx, prog);
+}
+
+static void r300ProgramStringNotify(GLcontext *ctx, GLenum target,
+ struct program *prog)
+{
+ struct r300_vertex_program *vp=(void *)prog;
+
+ switch(target) {
+ case GL_VERTEX_PROGRAM_ARB:
+ vp->translated=GL_FALSE;
+ translate_vertex_shader(vp);
+ break;
+
+ case GL_FRAGMENT_PROGRAM_ARB:
+ break;
+ }
+}
+
+static GLboolean r300IsProgramNative(GLcontext *ctx, GLenum target, struct program *prog)
+{
+ struct r300_vertex_program *vp=(void *)prog;
+ r300ContextPtr rmesa = R300_CONTEXT(ctx);
+
+ return 1;
+}
+
+void r300InitShaderFuncs(struct dd_function_table *functions)
+{
+ functions->NewProgram=r300NewProgram;
+ functions->BindProgram=r300BindProgram;
+ functions->DeleteProgram=r300DeleteProgram;
+ functions->ProgramStringNotify=r300ProgramStringNotify;
+ functions->IsProgramNative=r300IsProgramNative;
+}
t_src_class(b.File) == VSF_IN_CLASS_ATTR))) \
#define SRCS_WRITABLE 1
-static void translate_program(struct r300_vertex_program *vp)
+void translate_vertex_shader(struct r300_vertex_program *vp)
{
struct vertex_program *mesa_vp=(void *)vp;
struct vp_instruction *vpi;
vp->translated=GL_TRUE;
}
-static void r300BindProgram(GLcontext *ctx, GLenum target, struct program *prog)
-{
- r300ContextPtr rmesa = R300_CONTEXT(ctx);
- struct r300_vertex_program *vp=(void *)prog;
-#if 0
- fprintf(stderr, "r300BindProgram\n");
-#endif
- if(rmesa->current_vp == vp)
- return ;
-
- rmesa->current_vp = vp;
-}
-
-/* Mesa doesnt seem to have prototype for this */
-struct program *
-_mesa_init_ati_fragment_shader( GLcontext *ctx, struct ati_fragment_shader *prog,
- GLenum target, GLuint id);
-
-static struct program *r300NewProgram(GLcontext *ctx, GLenum target, GLuint id)
-{
- struct r300_vertex_program *vp;
- struct fragment_program *fp;
- struct ati_fragment_shader *afs;
-#if 0
- fprintf(stderr, "r300NewProgram, target=%d, id=%d\n", target, id);
-#endif
- switch(target){
- case GL_VERTEX_PROGRAM_ARB:
- vp=CALLOC_STRUCT(r300_vertex_program);
- return _mesa_init_vertex_program(ctx, &vp->mesa_program, target, id);
-
- case GL_FRAGMENT_PROGRAM_ARB:
- fp=CALLOC_STRUCT(fragment_program);
- return _mesa_init_fragment_program(ctx, fp, target, id);
-
- case GL_FRAGMENT_PROGRAM_NV:
- fp=CALLOC_STRUCT(fragment_program);
- return _mesa_init_fragment_program(ctx, fp, target, id);
-
- case GL_FRAGMENT_SHADER_ATI:
- afs=CALLOC_STRUCT(ati_fragment_shader);
- return _mesa_init_ati_fragment_shader(ctx, afs, target, id);
- }
-
- return NULL;
-}
-
-
-static void r300DeleteProgram(GLcontext *ctx, struct program *prog)
-{
- r300ContextPtr rmesa = R300_CONTEXT(ctx);
- struct r300_vertex_program *vp=(void *)prog;
-#if 0
- fprintf(stderr, "r300DeleteProgram\n");
-#endif
- if(rmesa->current_vp == vp)
- rmesa->current_vp = NULL;
-
- _mesa_delete_program(ctx, prog);
-}
-
-static GLboolean r300IsProgramNative(GLcontext *ctx, GLenum target,
- struct program *prog);
-
-static void r300ProgramStringNotify(GLcontext *ctx, GLenum target,
- struct program *prog)
-{
- struct r300_vertex_program *vp=(void *)prog;
-#if 0
- fprintf(stderr, "r300ProgramStringNotify\n");
-#endif
-
- switch(target) {
- case GL_VERTEX_PROGRAM_ARB:
- vp->translated=GL_FALSE;
- break;
- case GL_FRAGMENT_PROGRAM_ARB:
- return ;
- break;
- }
-
- /* XXX: There is still something wrong as mesa doesnt call r300IsProgramNative at all */
- (void)r300IsProgramNative(ctx, target, prog);
-
-}
-
-static GLboolean r300IsProgramNative(GLcontext *ctx, GLenum target,
- struct program *prog)
-{
- struct r300_vertex_program *vp=(void *)prog;
- r300ContextPtr rmesa = R300_CONTEXT(ctx);
-
-#if 0
- fprintf(stderr, "r300IsProgramNative\n");
- //exit(0);
- debug_vp(ctx, vp);
-#endif
- translate_program(vp);
- //r300VertexProgUpdateParams(ctx, vp);
-
- return 1;
-}
-
-/* This is misnamed and shouldnt be here since fragment programs use these functions too */
-void r300InitVertexProgFuncs(struct dd_function_table *functions)
-{
- functions->NewProgram=r300NewProgram;
- functions->BindProgram=r300BindProgram;
- functions->DeleteProgram=r300DeleteProgram;
- functions->ProgramStringNotify=r300ProgramStringNotify;
- functions->IsProgramNative=r300IsProgramNative;
-}