Reorganized shader stuff.
authorAapo Tahkola <aet@rasterburn.org>
Tue, 19 Apr 2005 18:49:44 +0000 (18:49 +0000)
committerAapo Tahkola <aet@rasterburn.org>
Tue, 19 Apr 2005 18:49:44 +0000 (18:49 +0000)
src/mesa/drivers/dri/r300/Makefile
src/mesa/drivers/dri/r300/r300_context.c
src/mesa/drivers/dri/r300/r300_context.h
src/mesa/drivers/dri/r300/r300_shader.c [new file with mode: 0644]
src/mesa/drivers/dri/r300/r300_vertexprog.c

index 8fd361bee38b7fc22b7e25a1282911675930cf71..3e21af6af892df3bc1dc562c590f349918b564fc 100644 (file)
@@ -37,6 +37,8 @@ DRIVER_SOURCES = \
                 r300_texstate.c \
                 r300_texprog.c \
                 r300_vertexprog.c \
+                r300_shader.c \
+                r300_ffp.c \
                 r300_maos.c \
                 \
                 r200_context.c \
index 429a795ffafbada8dfe10ba1473c3f7fac305295..143cd22eb2f9916ca656810651d5f7bd80139c7b 100644 (file)
@@ -174,7 +174,7 @@ GLboolean r300CreateContext(const __GLcontextModes * glVisual,
        r300InitIoctlFuncs(&functions);
        r300InitStateFuncs(&functions);
        r300InitTextureFuncs(&functions);
-       r300InitVertexProgFuncs(&functions);
+       r300InitShaderFuncs(&functions);
        
        if (!radeonInitContext(&r300->radeon, &functions,
                               glVisual, driContextPriv, sharedContextPrivate)) {
index 3ec5a72a1ae2acc78551b3c50f6b5c7025067357..5bade861e7c4a763963b8346ca254f0007568a23 100644 (file)
@@ -762,7 +762,8 @@ extern GLboolean r300CreateContext(const __GLcontextModes * glVisual,
                                   __DRIcontextPrivate * driContextPriv,
                                   void *sharedContextPrivate);
 
-extern void r300InitVertexProgFuncs(struct dd_function_table *functions);
+void translate_vertex_shader(struct r300_vertex_program *vp);
+extern void r300InitShaderFuncs(struct dd_function_table *functions);
 extern void r300VertexProgUpdateParams(GLcontext *ctx, struct r300_vertex_program *vp);
 
 #endif                         /* __R300_CONTEXT_H__ */
diff --git a/src/mesa/drivers/dri/r300/r300_shader.c b/src/mesa/drivers/dri/r300/r300_shader.c
new file mode 100644 (file)
index 0000000..d8fd7fd
--- /dev/null
@@ -0,0 +1,99 @@
+#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;
+}
index 360680bf8ff71f765be5e59ff7c7d033f981865f..ec0ec0c47dd59e8b286e77172a112c06e8e42718 100644 (file)
@@ -467,7 +467,7 @@ static unsigned long op_operands(enum vp_opcode opcode)
                         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;
@@ -885,115 +885,3 @@ static void translate_program(struct r300_vertex_program *vp)
                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;
-}