After seeing Dave's series to add support GL_ARB_shader_gpu_int64 and thinking about adding support for 8- and 16-bit integers, I decided that something had to be done about the cut-and-paste madness that is ir_constant_expression.cpp. I decided to take a page from Jason's book and generate it from a machine description of the expressions. The result is this series.
You may notice from some of the earlier patches in this series that I started this work over a year ago. The previous work was an attempt to generate opt_algebraic.cpp which was ultimately abandonded. It may be worth picking that up again. I haven't done *anything* for SCons, so hopefully Jose or someone can help out there. All of this is available at: https://cgit.freedesktop.org/~idr/mesa/log/?h=generated-glsl-ir Other possible follow-up work: - A few expressions don't have constant evaluation support. I don't think I've seen a real shader use any of these, so there's a reason we haven't "missed" them. - frexp_sig - frexp_exp - vote_any - vote_all - vote_eq - imul_high - carry - borrow - Generate validation code for expressions. A few times while developing this series I had questions about what the IR actually supported. In quite a few cases the IR support is different from what GLSL supports. I would often look to ir_validate.cpp to answer these questions, and I was almost always disappointed. I would really like to see missing type information added to ir_expression_operation.py and generate a much more complete set of validations for ir_expression. Then the assertions remaining in ir_expression_operation_constant.h could be removed. - Generate ir_expression constructors. - Generate ir_builder. We don't support every possible expression in ir_builder, so this may not be worth the effort. src/compiler/Android.glsl.gen.mk | 2 +- src/compiler/Makefile.glsl.am | 24 +- src/compiler/Makefile.sources | 8 +- src/compiler/glsl/.gitignore | 2 + src/compiler/glsl/ir.cpp | 133 +- src/compiler/glsl/ir.h | 329 +---- src/compiler/glsl/ir_constant_expression.cpp | 1332 ++---------------- src/compiler/glsl/ir_expression_operation.py | 738 ++++++++++ src/compiler/glsl/ir_print_visitor.cpp | 2 +- src/compiler/glsl/ir_validate.cpp | 11 + src/compiler/glsl/lower_mat_op_to_vec.cpp | 2 +- src/mesa/Makefile.sources | 1 + src/mesa/drivers/dri/i965/Makefile.am | 1 + 13 files changed, 901 insertions(+), 1684 deletions(-) _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev