Module: Mesa
Branch: arb_geometry_shader4
Commit: 189b1753f023db648ad11496599f28bed39205c0
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=189b1753f023db648ad11496599f28bed39205c0

Author: Zack Rusin <[email protected]>
Date:   Sat Feb 14 14:06:45 2009 -0500

gs: stop abusing GL_GEOMETRY_SHADER_ARB for cases where program is wanted

this will have to be exported as an extension at some point, for now create
a dummy MESA_GEOMETRY_PROGRAM define.

---

 src/mesa/main/mtypes.h                 |    7 +++++++
 src/mesa/shader/program.c              |   13 +++++++++++++
 src/mesa/shader/program.h              |    5 +++++
 src/mesa/shader/slang/slang_codegen.c  |    4 ++--
 src/mesa/shader/slang/slang_compile.c  |    2 +-
 src/mesa/state_tracker/st_cb_program.c |    8 ++++----
 6 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 1057dd9..0820313 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -47,6 +47,13 @@
  */
 #define GL_SHADER_PROGRAM_MESA 0x9999
 
+/**
+ * Internal token
+ *  Must be simply different than GL_VERTEX_PROGRAM
+ *    and GL_FRAGMENT_PROGRAM_ARB
+ *  FIXME: this will have to be a real GL extension
+ */
+#define MESA_GEOMETRY_PROGRAM 0x9999
 
 /**
  * Color channel data type.
diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c
index 7a3b827..70de235 100644
--- a/src/mesa/shader/program.c
+++ b/src/mesa/shader/program.c
@@ -268,6 +268,19 @@ _mesa_init_vertex_program( GLcontext *ctx, struct 
gl_vertex_program *prog,
       return NULL;
 }
 
+/**
+ * Initialize a new geometry program object.
+ */
+struct gl_program *
+_mesa_init_geometry_program( GLcontext *ctx, struct gl_geometry_program *prog,
+                             GLenum target, GLuint id)
+{
+   if (prog)
+      return _mesa_init_program_struct( ctx, &prog->Base, target, id );
+   else
+      return NULL;
+}
+
 
 /**
  * Allocate and initialize a new fragment/vertex program object but
diff --git a/src/mesa/shader/program.h b/src/mesa/shader/program.h
index 4817616..9721a3b 100644
--- a/src/mesa/shader/program.h
+++ b/src/mesa/shader/program.h
@@ -74,6 +74,11 @@ _mesa_init_fragment_program(GLcontext *ctx,
                             GLenum target, GLuint id);
 
 extern struct gl_program *
+_mesa_init_geometry_program(GLcontext *ctx,
+                            struct gl_geometry_program *prog,
+                            GLenum target, GLuint id);
+
+extern struct gl_program *
 _mesa_new_program(GLcontext *ctx, GLenum target, GLuint id);
 
 extern void
diff --git a/src/mesa/shader/slang/slang_codegen.c 
b/src/mesa/shader/slang/slang_codegen.c
index 0fbe3be..06987c3 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -4471,7 +4471,7 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, 
slang_variable *var,
                                               size, swizzle);
          } else {
             /* geometry program output */
-            GLint index = _slang_output_index(varName, GL_GEOMETRY_SHADER_ARB);
+            GLint index = _slang_output_index(varName, MESA_GEOMETRY_PROGRAM);
             GLuint swizzle = _slang_var_swizzle(size, 0);
             assert(index >= 0);
             assert(index < GEOM_RESULT_MAX);
@@ -4528,7 +4528,7 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, 
slang_variable *var,
          assert(type == SLANG_UNIT_FRAGMENT_BUILTIN);
          store = _slang_new_ir_storage(PROGRAM_OUTPUT, index, specialSize);
       } else {
-         GLint index = _slang_output_index(varName, GL_GEOMETRY_SHADER_ARB);
+         GLint index = _slang_output_index(varName, MESA_GEOMETRY_PROGRAM);
          GLint specialSize = 4; /* treat all fragment outputs as float[4] */
          assert(type == SLANG_UNIT_GEOMETRY_BUILTIN);
          store = _slang_new_ir_storage(PROGRAM_OUTPUT, index, specialSize);
diff --git a/src/mesa/shader/slang/slang_compile.c 
b/src/mesa/shader/slang/slang_compile.c
index 15c4b9b..dd08108 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -2753,7 +2753,7 @@ _slang_compile(GLcontext *ctx, struct gl_shader *shader)
       else if (shader->Type == GL_FRAGMENT_SHADER)
          progTarget = GL_FRAGMENT_PROGRAM_ARB;
       else
-         progTarget = GL_GEOMETRY_SHADER_ARB;
+         progTarget = MESA_GEOMETRY_PROGRAM;
       shader->Program = ctx->Driver.NewProgram(ctx, progTarget, 1);
       shader->Program->Parameters = _mesa_new_parameter_list();
       shader->Program->Varying = _mesa_new_parameter_list();
diff --git a/src/mesa/state_tracker/st_cb_program.c 
b/src/mesa/state_tracker/st_cb_program.c
index 1c623eb..1235a86 100644
--- a/src/mesa/state_tracker/st_cb_program.c
+++ b/src/mesa/state_tracker/st_cb_program.c
@@ -68,7 +68,7 @@ static void st_bind_program( GLcontext *ctx,
    case GL_FRAGMENT_PROGRAM_ARB:
       st->dirty.st |= ST_NEW_FRAGMENT_PROGRAM;
       break;
-   case GL_GEOMETRY_SHADER_ARB:
+   case MESA_GEOMETRY_PROGRAM:
       st->dirty.st |= ST_NEW_GEOMETRY_PROGRAM;
       break;
    }
@@ -124,12 +124,12 @@ static struct gl_program *st_new_program( GLcontext *ctx,
                                          target, 
                                          id );
    }
-   case GL_GEOMETRY_SHADER_ARB: {
+   case MESA_GEOMETRY_PROGRAM: {
       struct st_geometry_program *prog = CALLOC_STRUCT(st_geometry_program);
 
       prog->serialNo = SerialNo++;
 
-      return _mesa_init_fragment_program(ctx, &prog->Base,
+      return _mesa_init_geometry_program(ctx, &prog->Base,
                                          target, id);
    }
 
@@ -192,7 +192,7 @@ st_delete_program(GLcontext *ctx, struct gl_program *prog)
          st_free_translated_vertex_programs(st, stfp->vertex_programs);
       }
       break;
-   case GL_GEOMETRY_SHADER_ARB:
+   case MESA_GEOMETRY_PROGRAM:
       {
          struct st_geometry_program *stgp = (struct st_geometry_program *) 
prog;
 

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to