diff options
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r-- | src/mesa/drivers/dri/r300/Makefile | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_context.c | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_context.h | 3 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_shader.c | 99 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_vertexprog.c | 114 |
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; -} |