diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-14 14:46:09 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-14 14:46:09 -0700 |
commit | 61d4aa041f800429127aab3263c50cbc6e69ae50 (patch) | |
tree | 94e026fd92bd8fd1b63917522f6fd7df8d7f59b7 /glsl_parser_extras.cpp | |
parent | 824b659d917a5f14a1f66b891d25036ef9f9adc6 (diff) |
Move stand-alone compiler main routine to main.cpp
Diffstat (limited to 'glsl_parser_extras.cpp')
-rw-r--r-- | glsl_parser_extras.cpp | 148 |
1 files changed, 0 insertions, 148 deletions
diff --git a/glsl_parser_extras.cpp b/glsl_parser_extras.cpp index 5ebbc27..8cf765f 100644 --- a/glsl_parser_extras.cpp +++ b/glsl_parser_extras.cpp @@ -22,21 +22,12 @@ */ #include <stdio.h> #include <stdarg.h> -#include <stdlib.h> #include <string.h> #include <assert.h> - -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> #include "ast.h" #include "glsl_parser_extras.h" #include "glsl_parser.h" -#include "ir_optimization.h" -#include "ir_print_visitor.h" -#include "ir_reader.h" const char * _mesa_glsl_shader_target_name(enum _mesa_glsl_parser_targets target) @@ -639,142 +630,3 @@ ast_struct_specifier::ast_struct_specifier(char *identifier, name = identifier; this->declarations.push_degenerate_list_at_head(&declarator_list->link); } - - -static char * -load_text_file(const char *file_name, size_t *size) -{ - char *text = NULL; - struct stat st; - ssize_t total_read = 0; - int fd = open(file_name, O_RDONLY); - - *size = 0; - if (fd < 0) { - return NULL; - } - - if (fstat(fd, & st) == 0) { - text = (char *) malloc(st.st_size + 1); - if (text != NULL) { - do { - ssize_t bytes = read(fd, text + total_read, - st.st_size - total_read); - if (bytes < 0) { - free(text); - text = NULL; - break; - } - - if (bytes == 0) { - break; - } - - total_read += bytes; - } while (total_read < st.st_size); - - text[total_read] = '\0'; - *size = total_read; - } - } - - close(fd); - - return text; -} - - -int -main(int argc, char **argv) -{ - struct _mesa_glsl_parse_state state; - char *shader; - size_t shader_len; - exec_list instructions; - - if (argc < 3) { - printf("Usage: %s [v|g|f|i] <shader_file>\n", argv[0]); - return EXIT_FAILURE; - } - - memset(& state, 0, sizeof(state)); - - switch (argv[1][0]) { - case 'v': - state.target = vertex_shader; - break; - case 'g': - state.target = geometry_shader; - break; - case 'f': - state.target = fragment_shader; - break; - case 'i': - state.target = ir_shader; - break; - default: - printf("Usage: %s [v|g|f|i] <shader_file>\n", argv[0]); - return EXIT_FAILURE; - } - - shader = load_text_file(argv[2], & shader_len); - - state.scanner = NULL; - state.translation_unit.make_empty(); - state.symbols = new glsl_symbol_table; - state.error = false; - state.temp_index = 0; - state.loop_or_switch_nesting = NULL; - state.ARB_texture_rectangle_enable = true; - - if (state.target != ir_shader) { - _mesa_glsl_lexer_ctor(& state, shader, shader_len); - _mesa_glsl_parse(& state); - _mesa_glsl_lexer_dtor(& state); - - foreach_list_const(n, &state.translation_unit) { - ast_node *ast = exec_node_data(ast_node, n, link); - ast->print(); - } - - if (!state.error && !state.translation_unit.is_empty()) - _mesa_ast_to_hir(&instructions, &state); - } else { - /* FINISHME: We should initialize this to the max GLSL version supported - * FINISHME: by the driver. At the moment, we don't know what that is. - */ - state.language_version = 130; - _mesa_glsl_initialize_types(&state); - - _mesa_glsl_read_ir(&state, &instructions, shader); - } - - /* Optimization passes */ - if (!state.error && !instructions.is_empty()) { - bool progress; - do { - progress = false; - - progress = do_function_inlining(&instructions) || progress; - progress = do_if_simplification(&instructions) || progress; - progress = do_copy_propagation(&instructions) || progress; - progress = do_dead_code_local(&instructions) || progress; - progress = do_dead_code_unlinked(&instructions) || progress; - progress = do_constant_variable_unlinked(&instructions) || progress; - progress = do_constant_folding(&instructions) || progress; - progress = do_vec_index_to_swizzle(&instructions) || progress; - progress = do_swizzle_swizzle(&instructions) || progress; - } while (progress); - } - - /* Print out the resulting IR */ - printf("\n\n"); - - if (!state.error) { - _mesa_print_ir(&instructions, &state); - } - - delete state.symbols; - - return state.error != 0; -} |