summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r--src/mesa/drivers/dri/r300/Makefile2
-rw-r--r--src/mesa/drivers/dri/r300/r300_context.c2
-rw-r--r--src/mesa/drivers/dri/r300/r300_context.h3
-rw-r--r--src/mesa/drivers/dri/r300/r300_shader.c99
-rw-r--r--src/mesa/drivers/dri/r300/r300_vertexprog.c114
5 files changed, 105 insertions, 115 deletions
diff --git a/src/mesa/drivers/dri/r300/Makefile b/src/mesa/drivers/dri/r300/Makefile
index 8fd361bee3..3e21af6af8 100644
--- a/src/mesa/drivers/dri/r300/Makefile
+++ b/src/mesa/drivers/dri/r300/Makefile
@@ -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 \
diff --git a/src/mesa/drivers/dri/r300/r300_context.c b/src/mesa/drivers/dri/r300/r300_context.c
index 429a795ffa..143cd22eb2 100644
--- a/src/mesa/drivers/dri/r300/r300_context.c
+++ b/src/mesa/drivers/dri/r300/r300_context.c
@@ -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)) {
diff --git a/src/mesa/drivers/dri/r300/r300_context.h b/src/mesa/drivers/dri/r300/r300_context.h
index 3ec5a72a1a..5bade861e7 100644
--- a/src/mesa/drivers/dri/r300/r300_context.h
+++ b/src/mesa/drivers/dri/r300/r300_context.h
@@ -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
index 0000000000..d8fd7fd07d
--- /dev/null
+++ b/src/mesa/drivers/dri/r300/r300_shader.c
@@ -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;
+}
diff --git a/src/mesa/drivers/dri/r300/r300_vertexprog.c b/src/mesa/drivers/dri/r300/r300_vertexprog.c
index 360680bf8f..ec0ec0c47d 100644
--- a/src/mesa/drivers/dri/r300/r300_vertexprog.c
+++ b/src/mesa/drivers/dri/r300/r300_vertexprog.c
@@ -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;
-}