-#include "glheader.h"
-#include "macros.h"
-#include "enums.h"
-#include "program.h"
+#include "main/glheader.h"
+
+#include "shader/program.h"
+#include "tnl/tnl.h"
#include "r300_context.h"
-#include "nvvertprog.h"
-#if USE_ARB_F_P == 1
#include "r300_fragprog.h"
-#endif
-static void r300BindProgram(GLcontext *ctx, GLenum target, struct program *prog)
+static struct gl_program *r300NewProgram(GLcontext * ctx, GLenum target,
+ GLuint id)
{
- /*
- r300ContextPtr rmesa = R300_CONTEXT(ctx);
- struct r300_vertex_program *vp=(void *)prog;
- */
-
- switch(target){
- case GL_VERTEX_PROGRAM_ARB:
-#if USE_ARB_F_P == 1
- case GL_FRAGMENT_PROGRAM_ARB:
-#endif
- //rmesa->current_vp = vp;
- break;
- default:
- WARN_ONCE("Target not supported yet!\n");
- break;
- }
-}
-
-static struct program *r300NewProgram(GLcontext *ctx, GLenum target, GLuint id)
-{
- struct r300_vertex_program *vp;
-#if USE_ARB_F_P == 1
+ struct r300_vertex_program_cont *vp;
struct r300_fragment_program *fp;
-#else
- struct fragment_program *fp;
-#endif
- 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:
-#if USE_ARB_F_P == 1
- fp=CALLOC_STRUCT(r300_fragment_program);
- fp->ctx = ctx;
- return _mesa_init_fragment_program(ctx, &fp->mesa_program, target, id);
-#else
- fp=CALLOC_STRUCT(fragment_program);
- return _mesa_init_fragment_program(ctx, fp, target, id);
-#endif
- case GL_FRAGMENT_PROGRAM_NV:
-#if USE_ARB_F_P == 1
- fp=CALLOC_STRUCT(r300_fragment_program);
- return _mesa_init_fragment_program(ctx, &fp->mesa_program, target, id);
-#else
- fp=CALLOC_STRUCT(fragment_program);
- return _mesa_init_fragment_program(ctx, fp, target, id);
-#endif
- case GL_FRAGMENT_SHADER_ATI:
- afs=CALLOC_STRUCT(ati_fragment_shader);
- return _mesa_init_ati_fragment_shader(ctx, afs, target, id);
- default:
- _mesa_problem(ctx, "Bad target in r300NewProgram");
+
+ switch (target) {
+ case GL_VERTEX_STATE_PROGRAM_NV:
+ case GL_VERTEX_PROGRAM_ARB:
+ vp = CALLOC_STRUCT(r300_vertex_program_cont);
+ return _mesa_init_vertex_program(ctx, &vp->mesa_program,
+ target, id);
+ case GL_FRAGMENT_PROGRAM_ARB:
+ fp = CALLOC_STRUCT(r300_fragment_program);
+ fp->ctx = ctx;
+ return _mesa_init_fragment_program(ctx, &fp->mesa_program,
+ target, id);
+ case GL_FRAGMENT_PROGRAM_NV:
+ fp = CALLOC_STRUCT(r300_fragment_program);
+ return _mesa_init_fragment_program(ctx, &fp->mesa_program,
+ target, id);
+ default:
+ _mesa_problem(ctx, "Bad target in r300NewProgram");
}
-
- return NULL;
-}
+ return NULL;
+}
-static void r300DeleteProgram(GLcontext *ctx, struct program *prog)
+static void r300DeleteProgram(GLcontext * ctx, struct gl_program *prog)
{
- //r300ContextPtr rmesa = R300_CONTEXT(ctx);
- //struct r300_vertex_program *vp=(void *)prog;
-
_mesa_delete_program(ctx, prog);
}
-static void r300ProgramStringNotify(GLcontext *ctx, GLenum target,
- struct program *prog)
+static void
+r300ProgramStringNotify(GLcontext * ctx, GLenum target, struct gl_program *prog)
{
- /*struct r300_vertex_program *vp=(void *)prog;*/
-#if USE_ARB_F_P == 1
- struct r300_fragment_program *fp = (struct r300_fragment_program *) prog;
-#endif
-
- switch(target) {
+ struct r300_vertex_program_cont *vp = (void *)prog;
+ struct r300_fragment_program *fp = (struct r300_fragment_program *)prog;
+
+ switch (target) {
case GL_VERTEX_PROGRAM_ARB:
- /*vp->translated=GL_FALSE;
- translate_vertex_shader(vp);*/
- //debug_vp(ctx, vp);
- break;
+ vp->progs = NULL;
+ break;
case GL_FRAGMENT_PROGRAM_ARB:
-#if USE_ARB_F_P == 1
fp->translated = GL_FALSE;
-#endif
- break;
+ break;
}
+
+ /* need this for tcl fallbacks */
+ _tnl_program_string(ctx, target, prog);
}
-static GLboolean r300IsProgramNative(GLcontext *ctx, GLenum target, struct program *prog)
+static GLboolean
+r300IsProgramNative(GLcontext * ctx, GLenum target, struct gl_program *prog)
{
- //struct r300_vertex_program *vp=(void *)prog;
- //r300ContextPtr rmesa = R300_CONTEXT(ctx);
-
- return 1;
+ return GL_TRUE;
}
void r300InitShaderFuncs(struct dd_function_table *functions)
{
- functions->NewProgram=r300NewProgram;
- functions->BindProgram=r300BindProgram;
- functions->DeleteProgram=r300DeleteProgram;
- functions->ProgramStringNotify=r300ProgramStringNotify;
- functions->IsProgramNative=r300IsProgramNative;
+ functions->NewProgram = r300NewProgram;
+ functions->DeleteProgram = r300DeleteProgram;
+ functions->ProgramStringNotify = r300ProgramStringNotify;
+ functions->IsProgramNative = r300IsProgramNative;
}