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
