summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/r300/r300_shader.c
diff options
context:
space:
mode:
authorBen Skeggs <darktama@iinet.net.au>2005-05-23 14:14:19 +0000
committerBen Skeggs <darktama@iinet.net.au>2005-05-23 14:14:19 +0000
commiteeada484979e9784ebb03f635f207e717a04e311 (patch)
tree54a94ddb1af18e91f5908e035b2e2242ca1d0bc5 /src/mesa/drivers/dri/r300/r300_shader.c
parent0c4731b27ccf5faa1393102107862c28642b3d76 (diff)
Implement enough of ARB_fragment_program for Keith's texenv program
generation in Mesa. Requires most recent Mesa cvs to work correctly. Swizzle code is possibly slow/buggy and will probably be replaced. Old behaviour can be controlled by a #define in r300_context.h, if no-one minds I'll remove the old code later on. Also, disabled cube map extension. AFAIK We don't support it yet, and it causes issues with UT2004.
Diffstat (limited to 'src/mesa/drivers/dri/r300/r300_shader.c')
-rw-r--r--src/mesa/drivers/dri/r300/r300_shader.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_shader.c b/src/mesa/drivers/dri/r300/r300_shader.c
index c1f5914aad..c3e4a041d5 100644
--- a/src/mesa/drivers/dri/r300/r300_shader.c
+++ b/src/mesa/drivers/dri/r300/r300_shader.c
@@ -5,6 +5,9 @@
#include "program.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)
{
@@ -13,6 +16,9 @@ static void r300BindProgram(GLcontext *ctx, GLenum target, struct program *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:
@@ -24,7 +30,11 @@ static void r300BindProgram(GLcontext *ctx, GLenum target, struct program *prog)
static struct program *r300NewProgram(GLcontext *ctx, GLenum target, GLuint id)
{
struct r300_vertex_program *vp;
+#if USE_ARB_F_P == 1
+ struct r300_fragment_program *fp;
+#else
struct fragment_program *fp;
+#endif
struct ati_fragment_shader *afs;
switch(target){
@@ -33,9 +43,14 @@ static struct program *r300NewProgram(GLcontext *ctx, GLenum target, GLuint id)
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:
fp=CALLOC_STRUCT(fragment_program);
return _mesa_init_fragment_program(ctx, fp, target, id);
@@ -64,15 +79,20 @@ void r300ProgramStringNotify(GLcontext *ctx, GLenum target,
struct program *prog)
{
struct r300_vertex_program *vp=(void *)prog;
-
+#if USE_ARB_F_P == 1
+ struct r300_fragment_program *fp=(void *)prog;
+#endif
+
switch(target) {
case GL_VERTEX_PROGRAM_ARB:
/*vp->translated=GL_FALSE;
translate_vertex_shader(vp);*/
//debug_vp(ctx, vp);
break;
-
case GL_FRAGMENT_PROGRAM_ARB:
+#if USE_ARB_F_P == 1
+ fp->translated = GL_FALSE;
+#endif
break;
}
}