From 34350be2cdb0cb769657d5ce82bc37d906eb3eb5 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 7 Apr 2010 14:38:03 -0700 Subject: [PATCH] Add stub ir_reader and new 'i' mode for reading IR rather than GLSL. --- Makefile.am | 2 +- glsl_parser_extras.cpp | 26 +++++++++++++++-------- glsl_parser_extras.h | 3 ++- ir_reader.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++ ir_reader.h | 34 ++++++++++++++++++++++++++++++ 5 files changed, 101 insertions(+), 11 deletions(-) create mode 100644 ir_reader.cpp create mode 100644 ir_reader.h diff --git a/Makefile.am b/Makefile.am index 4312d41980e..4044cc076d7 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 121104f9386..88889d59b0e 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] \n", argv[0]); + printf("Usage: %s [v|g|f|i] \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] \n", argv[0]); + printf("Usage: %s [v|g|f|i] \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 a79dc75d482..55bcc72e940 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 00000000000..d6f3f3c117c --- /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 +#include +#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 00000000000..b6afdc81ab1 --- /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 */ -- 2.30.2