diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2010-04-07 14:38:03 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-04-28 18:14:53 -0700 |
commit | 34350be2cdb0cb769657d5ce82bc37d906eb3eb5 (patch) | |
tree | 66620b003703ebdba2ed3f78de78977670709175 | |
parent | 1bfe1c3fdde39235ccbd8fc3da84a1603e919bc3 (diff) |
Add stub ir_reader and new 'i' mode for reading IR rather than GLSL.
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | glsl_parser_extras.cpp | 26 | ||||
-rw-r--r-- | glsl_parser_extras.h | 3 | ||||
-rw-r--r-- | ir_reader.cpp | 47 | ||||
-rw-r--r-- | ir_reader.h | 34 |
5 files changed, 101 insertions, 11 deletions
diff --git a/Makefile.am b/Makefile.am index 4312d41980..4044cc076d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -37,7 +37,7 @@ glsl_SOURCES = \ ir_function_can_inline.cpp \ ir_function_inlining.cpp \ ir_if_simplification.cpp \ - s_expression.cpp + ir_reader.cpp s_expression.cpp BUILT_SOURCES = glsl_parser.h glsl_parser.cpp glsl_lexer.cpp CLEANFILES = $(BUILT_SOURCES) diff --git a/glsl_parser_extras.cpp b/glsl_parser_extras.cpp index 121104f938..88889d59b0 100644 --- a/glsl_parser_extras.cpp +++ b/glsl_parser_extras.cpp @@ -39,6 +39,7 @@ #include "ir_function_inlining.h" #include "ir_if_simplification.h" #include "ir_print_visitor.h" +#include "ir_reader.h" const char * _mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target) @@ -715,7 +716,7 @@ main(int argc, char **argv) exec_list instructions; if (argc < 3) { - printf("Usage: %s [v|g|f] <shader_file>\n", argv[0]); + printf("Usage: %s [v|g|f|i] <shader_file>\n", argv[0]); return EXIT_FAILURE; } @@ -731,8 +732,11 @@ main(int argc, char **argv) case 'f': state.target = fragment_shader; break; + case 'i': + state.target = ir_shader; + break; default: - printf("Usage: %s [v|g|f] <shader_file>\n", argv[0]); + printf("Usage: %s [v|g|f|i] <shader_file>\n", argv[0]); return EXIT_FAILURE; } @@ -746,15 +750,19 @@ main(int argc, char **argv) state.loop_or_switch_nesting = NULL; state.ARB_texture_rectangle_enable = true; - _mesa_glsl_lexer_ctor(& state, shader, shader_len); - _mesa_glsl_parse(& state); - _mesa_glsl_lexer_dtor(& state); + if (state.target != ir_shader) { + _mesa_glsl_lexer_ctor(& state, shader, shader_len); + _mesa_glsl_parse(& state); + _mesa_glsl_lexer_dtor(& state); - foreach (ptr, & state.translation_unit) { - ((ast_node *)ptr)->print(); - } + foreach (ptr, & state.translation_unit) { + ((ast_node *)ptr)->print(); + } - _mesa_ast_to_hir(&instructions, &state); + _mesa_ast_to_hir(&instructions, &state); + } else { + _mesa_glsl_read_ir(&state, &instructions, shader); + } /* Optimization passes */ if (!state.error) { diff --git a/glsl_parser_extras.h b/glsl_parser_extras.h index a79dc75d48..55bcc72e94 100644 --- a/glsl_parser_extras.h +++ b/glsl_parser_extras.h @@ -32,7 +32,8 @@ enum _mesa_glsl_parser_targets { vertex_shader, geometry_shader, - fragment_shader + fragment_shader, + ir_shader }; struct _mesa_glsl_parse_state { diff --git a/ir_reader.cpp b/ir_reader.cpp new file mode 100644 index 0000000000..d6f3f3c117 --- /dev/null +++ b/ir_reader.cpp @@ -0,0 +1,47 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +#include <cstdio> +#include <cstdarg> +#include "ir_reader.h" +#include "glsl_parser_extras.h" +#include "glsl_types.h" +#include "s_expression.h" + +void +_mesa_glsl_read_ir(_mesa_glsl_parse_state *state, exec_list *instructions, + const char *src) +{ + s_expression *expr = s_expression::read_expression(src); + if (expr == NULL) { + printf("couldn't parse S-Expression."); + state->error = true; + return; + } + printf("S-Expression:\n"); + expr->print(); + printf("\n"); + + // FINISHME: actually read the IR. + state->error = true; +} + diff --git a/ir_reader.h b/ir_reader.h new file mode 100644 index 0000000000..b6afdc81ab --- /dev/null +++ b/ir_reader.h @@ -0,0 +1,34 @@ +/* -*- c++ -*- */ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#pragma once +#ifndef IR_READER_H +#define IR_READER_H + +#include "ir.h" + +void _mesa_glsl_read_ir(_mesa_glsl_parse_state *state, exec_list *instructions, + const char *src); + +#endif /* IR_READER_H */ |