summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/r300/r300_shader.c
diff options
context:
space:
mode:
authorAapo Tahkola <aet@rasterburn.org>2006-01-27 13:21:47 +0000
committerAapo Tahkola <aet@rasterburn.org>2006-01-27 13:21:47 +0000
commite797bc8bbe23480c3fca3654ce1c980d103520d1 (patch)
tree8616b22f82bbd05d19767d720842588ada4fdaeb /src/mesa/drivers/dri/r300/r300_shader.c
parent7d82d284e3cd8a46dfea8788d090eb58198752ca (diff)
per vp sw fallbacks
Diffstat (limited to 'src/mesa/drivers/dri/r300/r300_shader.c')
-rw-r--r--src/mesa/drivers/dri/r300/r300_shader.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_shader.c b/src/mesa/drivers/dri/r300/r300_shader.c
index f10b40a222..8f60bb3d00 100644
--- a/src/mesa/drivers/dri/r300/r300_shader.c
+++ b/src/mesa/drivers/dri/r300/r300_shader.c
@@ -11,13 +11,22 @@
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->curr_vp = vp;
+ vp->ref_count++;
+#if 0
+ if((vp->ref_count % 1500) == 0) {
+ fprintf(stderr, "id %p, ref_count %d\n", vp, vp->ref_count);
+ _mesa_print_program(&vp->mesa_program.Base);
+ }
+#endif
+
#if USE_ARB_F_P == 1
case GL_FRAGMENT_PROGRAM_ARB:
#endif
@@ -77,8 +86,11 @@ static struct program *r300NewProgram(GLcontext *ctx, GLenum target, GLuint id)
static void r300DeleteProgram(GLcontext *ctx, struct program *prog)
{
- //r300ContextPtr rmesa = R300_CONTEXT(ctx);
- //struct r300_vertex_program *vp=(void *)prog;
+ r300ContextPtr rmesa = R300_CONTEXT(ctx);
+ struct r300_vertex_program *vp=(void *)prog;
+
+ /*if(rmesa->curr_vp == vp)
+ rmesa->curr_vp = NULL;*/
_mesa_delete_program(ctx, prog);
}
@@ -86,16 +98,16 @@ static void r300DeleteProgram(GLcontext *ctx, struct program *prog)
static void r300ProgramStringNotify(GLcontext *ctx, GLenum target,
struct program *prog)
{
- /*struct r300_vertex_program *vp=(void *)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) {
case GL_VERTEX_PROGRAM_ARB:
- /*vp->translated=GL_FALSE;
- translate_vertex_shader(vp);*/
- //debug_vp(ctx, vp);
+ vp->translated = GL_FALSE;
+ memset(&vp->translated, 0, sizeof(struct r300_vertex_program) - sizeof(struct vertex_program));
+ /*translate_vertex_shader(vp);*/
break;
case GL_FRAGMENT_PROGRAM_ARB:
#if USE_ARB_F_P == 1