From da7bd6a90e1fee5c16327338fd251c0f6be34e36 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Mon, 28 Jun 2010 17:31:21 -0400 Subject: mesa: initial support for ARB_geometry_shader4 laying down the foundation for everything and implementing most of the stuff. linking, gl_VerticesIn and multidimensional inputs are left. --- src/glsl/apps/compile.c | 4 +++- src/glsl/cl/sl_cl_parse.c | 35 +++++++++++++++++------------------ 2 files changed, 20 insertions(+), 19 deletions(-) (limited to 'src/glsl') diff --git a/src/glsl/apps/compile.c b/src/glsl/apps/compile.c index 21c2b7617e..5073b0da82 100644 --- a/src/glsl/apps/compile.c +++ b/src/glsl/apps/compile.c @@ -37,7 +37,7 @@ static void usage(void) { printf("Usage:\n"); - printf(" compile fragment|vertex \n"); + printf(" compile fragment|vertex|geometry \n"); } int @@ -65,6 +65,8 @@ main(int argc, shader_type = 1; } else if (!strcmp(argv[1], "vertex")) { shader_type = 2; + } else if (!strcmp(argv[1], "geometry")) { + shader_type = 3; } else { usage(); return 1; diff --git a/src/glsl/cl/sl_cl_parse.c b/src/glsl/cl/sl_cl_parse.c index 663436dde9..65df6c38ae 100644 --- a/src/glsl/cl/sl_cl_parse.c +++ b/src/glsl/cl/sl_cl_parse.c @@ -246,6 +246,7 @@ #define PARAM_QUALIFIER_IN 0 #define PARAM_QUALIFIER_OUT 1 #define PARAM_QUALIFIER_INOUT 2 +#define PARAM_QUALIFIER_NONE 3 /* function parameter */ #define PARAMETER_NONE 0 @@ -836,7 +837,6 @@ _parse_storage_qualifier(struct parse_context *ctx, return 0; } - static int _parse_struct_declarator(struct parse_context *ctx, struct parse_state *ps) @@ -1114,6 +1114,21 @@ _parse_type_specifier(struct parse_context *ctx, return 0; } +static int +_parse_parameter_qualifier(struct parse_context *ctx, + struct parse_state *ps) +{ + unsigned int e = _emit(ctx, &ps->out, PARAM_QUALIFIER_NONE); + + if (_parse_id(ctx, ctx->dict.in, ps) == 0) { + _update(ctx, e, PARAM_QUALIFIER_IN); + } else if (_parse_id(ctx, ctx->dict.out, ps) == 0) { + _update(ctx, e, PARAM_QUALIFIER_OUT); + } else if (_parse_id(ctx, ctx->dict.inout, ps) == 0) { + _update(ctx, e, PARAM_QUALIFIER_INOUT); + } + return 0; +} static int _parse_fully_specified_type(struct parse_context *ctx, @@ -1136,6 +1151,7 @@ _parse_fully_specified_type(struct parse_context *ctx, if (_parse_storage_qualifier(ctx, &p)) { _emit(ctx, &p.out, TYPE_QUALIFIER_NONE); } + _parse_parameter_qualifier(ctx, &p); if (_parse_precision(ctx, &p)) { _emit(ctx, &p.out, PRECISION_DEFAULT); } @@ -1167,23 +1183,6 @@ _parse_function_header(struct parse_context *ctx, } -static int -_parse_parameter_qualifier(struct parse_context *ctx, - struct parse_state *ps) -{ - unsigned int e = _emit(ctx, &ps->out, PARAM_QUALIFIER_IN); - - if (_parse_id(ctx, ctx->dict.out, ps) == 0) { - _update(ctx, e, PARAM_QUALIFIER_OUT); - } else if (_parse_id(ctx, ctx->dict.inout, ps) == 0) { - _update(ctx, e, PARAM_QUALIFIER_INOUT); - } else { - _parse_id(ctx, ctx->dict.in, ps); - } - return 0; -} - - static int _parse_function_identifier(struct parse_context *ctx, struct parse_state *ps) -- cgit v1.2.3 From 0d68d01347383a8878c9678706cc3bd212b54bbd Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Tue, 29 Jun 2010 21:45:41 -0400 Subject: mesa: make the arguments in the asm statemants optional geometry shaders emit/end functions don't take any arguments --- src/glsl/cl/sl_cl_parse.c | 5 ++--- src/mesa/state_tracker/st_program.c | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) (limited to 'src/glsl') diff --git a/src/glsl/cl/sl_cl_parse.c b/src/glsl/cl/sl_cl_parse.c index 65df6c38ae..09456f5219 100644 --- a/src/glsl/cl/sl_cl_parse.c +++ b/src/glsl/cl/sl_cl_parse.c @@ -2191,9 +2191,8 @@ _parse_asm_statement(struct parse_context *ctx, if (_parse_identifier(ctx, &p)) { return -1; } - if (_parse_asm_arguments(ctx, &p)) { - return -1; - } + /* optional arguments */ + _parse_asm_arguments(ctx, &p); if (_parse_token(ctx, SL_PP_SEMICOLON, &p)) { return -1; } diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 1b8612d570..172d7dfe90 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -489,7 +489,6 @@ st_translate_geometry_program(struct st_context *st, return; } - assert(0); /* which vertex output goes to the first geometry input */ if (inputsRead & GEOM_BIT_VERTICES) vslot = 0; -- cgit v1.2.3 From 643f5ea1e0402d05e71d4f0340ea8f29042b8c79 Mon Sep 17 00:00:00 2001 From: Vinson Lee Date: Thu, 15 Jul 2010 18:45:20 -0700 Subject: glsl/apps: Handle ftell errors in non-debug builds. --- src/glsl/apps/compile.c | 3 +++ src/glsl/apps/process.c | 3 +++ src/glsl/apps/purify.c | 3 +++ src/glsl/apps/tokenise.c | 3 +++ src/glsl/apps/version.c | 3 +++ 5 files changed, 15 insertions(+) (limited to 'src/glsl') diff --git a/src/glsl/apps/compile.c b/src/glsl/apps/compile.c index 5073b0da82..3aa4fd4d53 100644 --- a/src/glsl/apps/compile.c +++ b/src/glsl/apps/compile.c @@ -82,6 +82,9 @@ main(int argc, fseek(in, 0, SEEK_END); size = ftell(in); assert(size != -1); + if (size == -1) { + return 1; + } fseek(in, 0, SEEK_SET); out = fopen(argv[3], "w"); diff --git a/src/glsl/apps/process.c b/src/glsl/apps/process.c index c8a1a1868c..caf72a71cf 100644 --- a/src/glsl/apps/process.c +++ b/src/glsl/apps/process.c @@ -59,6 +59,9 @@ main(int argc, fseek(in, 0, SEEK_END); size = ftell(in); assert(size != -1); + if (size == -1) { + return 1; + } fseek(in, 0, SEEK_SET); out = fopen(argv[2], "wb"); diff --git a/src/glsl/apps/purify.c b/src/glsl/apps/purify.c index 5ab6bae96d..0f09b157ef 100644 --- a/src/glsl/apps/purify.c +++ b/src/glsl/apps/purify.c @@ -58,6 +58,9 @@ main(int argc, fseek(in, 0, SEEK_END); size = ftell(in); assert(size != -1); + if (size == -1) { + return 1; + } fseek(in, 0, SEEK_SET); out = fopen(argv[2], "wb"); diff --git a/src/glsl/apps/tokenise.c b/src/glsl/apps/tokenise.c index b4c6d60930..f89f47d061 100644 --- a/src/glsl/apps/tokenise.c +++ b/src/glsl/apps/tokenise.c @@ -58,6 +58,9 @@ main(int argc, fseek(in, 0, SEEK_END); size = ftell(in); assert(size != -1); + if (size == -1) { + return 1; + } fseek(in, 0, SEEK_SET); out = fopen(argv[2], "wb"); diff --git a/src/glsl/apps/version.c b/src/glsl/apps/version.c index 9820ad94dc..fa5c226da8 100644 --- a/src/glsl/apps/version.c +++ b/src/glsl/apps/version.c @@ -57,6 +57,9 @@ main(int argc, fseek(in, 0, SEEK_END); size = ftell(in); assert(size != -1); + if (size == -1) { + return 1; + } fseek(in, 0, SEEK_SET); out = fopen(argv[2], "wb"); -- cgit v1.2.3