On Tue, Jul 19, 2016 at 3:24 PM, Ian Romanick <i...@freedesktop.org> wrote: > 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.
fwiw, I did go down the path of adding half-precision types in IR for a spell, but ended up deciding it was a maddening explosion of builtin-types and builtin-functions.. At some point (ie. might be a month or two or more before I get to it), I was going to go back to my original idea of just keeping things as-is in glsl IR (as type+precision-qualifier for <=32b types), and dealing with it in glsl->nir. Basically just need to add a precision-visitor (which I think I already pushed on a branch somewhere) to infer an expression's precision, and wire that up in a few places (function inlining and various other places where intermediate vars are created in ir), and mapping type+precision to nir type in glsl_to_nir. (Not an argument against autogenerating some of the IR bits.. I think that would be a really good idea, I'm a much bigger fan of how some of that is handled in NIR.. maybe there is some room to autogen some of the builtin-types and builtin-functions, which might make me reconsider..) BR, -R > 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev