On Wed, 2016-07-06 at 09:28 +0200, Iago Toral wrote: > On Tue, 2016-07-05 at 17:46 -0700, Ian Romanick wrote: > > > > From: Ian Romanick <ian.d.roman...@intel.com> > > > > Right now the generator generates nearly identical code. There is > > no > > change in the binary size. > > > > text data bss dec hex > > > > filename > > 7529283 273096 28584 7830963 777db3 > > > > /tmp/i965_dri-64bit-before.so > > 7529283 273096 28584 7830963 777db3 > > > > /tmp/i965_dri-64bit-after.so > > > > Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> > > --- > > src/compiler/Makefile.glsl.am | 11 ++- > > src/compiler/glsl/glsl_to_nir.cpp | 123 +-------------------- > > ------------ > > src/compiler/glsl/nir_intrinsic_map.py | 95 > > +++++++++++++++++++++++++ > > 3 files changed, 105 insertions(+), 124 deletions(-) > > create mode 100644 src/compiler/glsl/nir_intrinsic_map.py > > > > diff --git a/src/compiler/Makefile.glsl.am > > b/src/compiler/Makefile.glsl.am > > index 1132aae..af80e60 100644 > > --- a/src/compiler/Makefile.glsl.am > > +++ b/src/compiler/Makefile.glsl.am > > @@ -27,6 +27,7 @@ EXTRA_DIST += glsl/tests glsl/glcpp/tests > > glsl/README \ > > glsl/glsl_parser.yy \ > > glsl/glcpp/glcpp-lex.l \ > > glsl/glcpp/glcpp-parse.y \ > > + glsl/nir_intrinsic_map.cpp \ > > SConscript.glsl > > > > TESTS += glsl/glcpp/tests/glcpp-test \ > > @@ -208,6 +209,10 @@ glsl/glcpp/glcpp-lex.c: glsl/glcpp/glcpp-lex.l > > $(MKDIR_GEN) > > $(LEX_GEN) -o $@ $(srcdir)/glsl/glcpp/glcpp-lex.l > > > > +glsl/nir_intrinsic_map.cpp: glsl/nir_intrinsic_map.py > > + $(MKDIR_GEN) > > + $(PYTHON_GEN) $(srcdir)/glsl/nir_intrinsic_map.py > $@ || > > ($(RM) $@; false) > > + > > # Only the parsers (specifically the header files generated at the > > same time) > > # need to be in BUILT_SOURCES. Though if we list the parser > > headers > > YACC is > > # called for the .c/.cpp file and the .h files. By listing the > > .c/.cpp files > > @@ -218,14 +223,16 @@ BUILT_SOURCES += > > \ > > glsl/glsl_parser.cpp \ > > glsl/glsl_lexer.cpp \ > > glsl/glcpp/glcpp-parse.c \ > > - glsl/glcpp/glcpp-lex.c > > + glsl/glcpp/glcpp-lex.c \ > > + glsl/nir_intrinsic_map.cpp > > CLEANFILES += \ > > glsl/glcpp/glcpp-parse.h \ > > glsl/glsl_parser.h \ > > glsl/glsl_parser.cpp \ > > glsl/glsl_lexer.cpp \ > > glsl/glcpp/glcpp-parse.c \ > > - glsl/glcpp/glcpp-lex.c > > + glsl/glcpp/glcpp-lex.c \ > > + glsl/nir_intrinsic_map.cpp > > > > clean-local: > > $(RM) -r subtest-cr subtest-cr-lf subtest-lf subtest-lf-cr > > diff --git a/src/compiler/glsl/glsl_to_nir.cpp > > b/src/compiler/glsl/glsl_to_nir.cpp > > index 266f150..3b8424e 100644 > > --- a/src/compiler/glsl/glsl_to_nir.cpp > > +++ b/src/compiler/glsl/glsl_to_nir.cpp > > @@ -602,128 +602,7 @@ nir_visitor::visit(ir_return *ir) > > nir_builder_instr_insert(&b, &instr->instr); > > } > > > > -namespace _glsl_to_nir { > > - > > -nir_intrinsic_op > > -get_intrinsic_opcode(const char *name, const ir_dereference > > *return_deref) > > -{ > > - nir_intrinsic_op op; > > - > > - if (strcmp(name, "__intrinsic_atomic_read") == 0) { > > - op = nir_intrinsic_atomic_counter_read_var; > > - } else if (strcmp(name, "__intrinsic_atomic_increment") == 0) { > > - op = nir_intrinsic_atomic_counter_inc_var; > > - } else if (strcmp(name, "__intrinsic_atomic_predecrement") == > > 0) > > { > > - op = nir_intrinsic_atomic_counter_dec_var; > > - } else if (strcmp(name, "__intrinsic_image_load") == 0) { > > - op = nir_intrinsic_image_load; > > - } else if (strcmp(name, "__intrinsic_image_store") == 0) { > > - op = nir_intrinsic_image_store; > > - } else if (strcmp(name, "__intrinsic_image_atomic_add") == 0) { > > - op = nir_intrinsic_image_atomic_add; > > - } else if (strcmp(name, "__intrinsic_image_atomic_min") == 0) { > > - op = nir_intrinsic_image_atomic_min; > > - } else if (strcmp(name, "__intrinsic_image_atomic_max") == 0) { > > - op = nir_intrinsic_image_atomic_max; > > - } else if (strcmp(name, "__intrinsic_image_atomic_and") == 0) { > > - op = nir_intrinsic_image_atomic_and; > > - } else if (strcmp(name, "__intrinsic_image_atomic_or") == 0) { > > - op = nir_intrinsic_image_atomic_or; > > - } else if (strcmp(name, "__intrinsic_image_atomic_xor") == 0) { > > - op = nir_intrinsic_image_atomic_xor; > > - } else if (strcmp(name, "__intrinsic_image_atomic_exchange") == > > 0) { > > - op = nir_intrinsic_image_atomic_exchange; > > - } else if (strcmp(name, "__intrinsic_image_atomic_comp_swap") > > == > > 0) { > > - op = nir_intrinsic_image_atomic_comp_swap; > > - } else if (strcmp(name, "__intrinsic_memory_barrier") == 0) { > > - op = nir_intrinsic_memory_barrier; > > - } else if (strcmp(name, "__intrinsic_image_size") == 0) { > > - op = nir_intrinsic_image_size; > > - } else if (strcmp(name, "__intrinsic_image_samples") == 0) { > > - op = nir_intrinsic_image_samples; > > - } else if (strcmp(name, "__intrinsic_store_ssbo") == 0) { > > - op = nir_intrinsic_store_ssbo; > > - } else if (strcmp(name, "__intrinsic_load_ssbo") == 0) { > > - op = nir_intrinsic_load_ssbo; > > - } else if (strcmp(name, "__intrinsic_atomic_add_ssbo") == 0) { > > - op = nir_intrinsic_ssbo_atomic_add; > > - } else if (strcmp(name, "__intrinsic_atomic_and_ssbo") == 0) { > > - op = nir_intrinsic_ssbo_atomic_and; > > - } else if (strcmp(name, "__intrinsic_atomic_or_ssbo") == 0) { > > - op = nir_intrinsic_ssbo_atomic_or; > > - } else if (strcmp(name, "__intrinsic_atomic_xor_ssbo") == 0) { > > - op = nir_intrinsic_ssbo_atomic_xor; > > - } else if (strcmp(name, "__intrinsic_atomic_min_ssbo") == 0) { > > - assert(return_deref); > > - if (return_deref->type == glsl_type::int_type) > > - op = nir_intrinsic_ssbo_atomic_imin; > > - else if (return_deref->type == glsl_type::uint_type) > > - op = nir_intrinsic_ssbo_atomic_umin; > > - else > > - unreachable("Invalid type"); > > - } else if (strcmp(name, "__intrinsic_atomic_max_ssbo") == 0) { > > - assert(return_deref); > > - if (return_deref->type == glsl_type::int_type) > > - op = nir_intrinsic_ssbo_atomic_imax; > > - else if (return_deref->type == glsl_type::uint_type) > > - op = nir_intrinsic_ssbo_atomic_umax; > > - else > > - unreachable("Invalid type"); > > - } else if (strcmp(name, "__intrinsic_atomic_exchange_ssbo") == > > 0) > > { > > - op = nir_intrinsic_ssbo_atomic_exchange; > > - } else if (strcmp(name, "__intrinsic_atomic_comp_swap_ssbo") == > > 0) { > > - op = nir_intrinsic_ssbo_atomic_comp_swap; > > - } else if (strcmp(name, "__intrinsic_shader_clock") == 0) { > > - op = nir_intrinsic_shader_clock; > > - } else if (strcmp(name, "__intrinsic_group_memory_barrier") == > > 0) > > { > > - op = nir_intrinsic_group_memory_barrier; > > - } else if (strcmp(name, > > "__intrinsic_memory_barrier_atomic_counter") == 0) { > > - op = nir_intrinsic_memory_barrier_atomic_counter; > > - } else if (strcmp(name, "__intrinsic_memory_barrier_buffer") == > > 0) { > > - op = nir_intrinsic_memory_barrier_buffer; > > - } else if (strcmp(name, "__intrinsic_memory_barrier_image") == > > 0) > > { > > - op = nir_intrinsic_memory_barrier_image; > > - } else if (strcmp(name, "__intrinsic_memory_barrier_shared") == > > 0) { > > - op = nir_intrinsic_memory_barrier_shared; > > - } else if (strcmp(name, "__intrinsic_load_shared") == 0) { > > - op = nir_intrinsic_load_shared; > > - } else if (strcmp(name, "__intrinsic_store_shared") == 0) { > > - op = nir_intrinsic_store_shared; > > - } else if (strcmp(name, "__intrinsic_atomic_add_shared") == 0) > > { > > - op = nir_intrinsic_shared_atomic_add; > > - } else if (strcmp(name, "__intrinsic_atomic_and_shared") == 0) > > { > > - op = nir_intrinsic_shared_atomic_and; > > - } else if (strcmp(name, "__intrinsic_atomic_or_shared") == 0) { > > - op = nir_intrinsic_shared_atomic_or; > > - } else if (strcmp(name, "__intrinsic_atomic_xor_shared") == 0) > > { > > - op = nir_intrinsic_shared_atomic_xor; > > - } else if (strcmp(name, "__intrinsic_atomic_min_shared") == 0) > > { > > - assert(return_deref); > > - if (return_deref->type == glsl_type::int_type) > > - op = nir_intrinsic_shared_atomic_imin; > > - else if (return_deref->type == glsl_type::uint_type) > > - op = nir_intrinsic_shared_atomic_umin; > > - else > > - unreachable("Invalid type"); > > - } else if (strcmp(name, "__intrinsic_atomic_max_shared") == 0) > > { > > - assert(return_deref); > > - if (return_deref->type == glsl_type::int_type) > > - op = nir_intrinsic_shared_atomic_imax; > > - else if (return_deref->type == glsl_type::uint_type) > > - op = nir_intrinsic_shared_atomic_umax; > > - else > > - unreachable("Invalid type"); > > - } else if (strcmp(name, "__intrinsic_atomic_exchange_shared") > > == > > 0) { > > - op = nir_intrinsic_shared_atomic_exchange; > > - } else if (strcmp(name, "__intrinsic_atomic_comp_swap_shared") > > == > > 0) { > > - op = nir_intrinsic_shared_atomic_comp_swap; > > - } else { > > - unreachable("not reached"); > > - } > > - > > - return op; > > -} > > -} > > +#include "nir_intrinsic_map.cpp" > > > > void > > nir_visitor::visit(ir_call *ir) > > diff --git a/src/compiler/glsl/nir_intrinsic_map.py > > b/src/compiler/glsl/nir_intrinsic_map.py > > new file mode 100644 > > index 0000000..ef13fa3 > > --- /dev/null > > +++ b/src/compiler/glsl/nir_intrinsic_map.py > > @@ -0,0 +1,95 @@ > > +# coding=utf-8 > > +# > > +# Copyright © 2016 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. > > + > > +from mako.template import Template > > + > > +intrinsics = [("__intrinsic_atomic_read", > > ("nir_intrinsic_atomic_counter_read_var", None)), > > + ("__intrinsic_atomic_increment", > > ("nir_intrinsic_atomic_counter_inc_var", None)), > > + ("__intrinsic_atomic_predecrement", > > ("nir_intrinsic_atomic_counter_dec_var", None)), > > + ("__intrinsic_image_load", > > ("nir_intrinsic_image_load", None)), > > + ("__intrinsic_image_store", > > ("nir_intrinsic_image_store", None)), > > + ("__intrinsic_image_atomic_add", > > ("nir_intrinsic_image_atomic_add", None)), > > + ("__intrinsic_image_atomic_min", > > ("nir_intrinsic_image_atomic_min", None)), > > + ("__intrinsic_image_atomic_max", > > ("nir_intrinsic_image_atomic_max", None)), > > + ("__intrinsic_image_atomic_and", > > ("nir_intrinsic_image_atomic_and", None)), > > + ("__intrinsic_image_atomic_or", > > ("nir_intrinsic_image_atomic_or", None)), > > + ("__intrinsic_image_atomic_xor", > > ("nir_intrinsic_image_atomic_xor", None)), > > + ("__intrinsic_image_atomic_exchange", > > ("nir_intrinsic_image_atomic_exchange", None)), > > + ("__intrinsic_image_atomic_comp_swap", > > ("nir_intrinsic_image_atomic_comp_swap", None)), > > + ("__intrinsic_memory_barrier", > > ("nir_intrinsic_memory_barrier", None)), > > + ("__intrinsic_image_size", > > ("nir_intrinsic_image_size", None)), > > + ("__intrinsic_image_samples", > > ("nir_intrinsic_image_samples", None)), > > + ("__intrinsic_store_ssbo", > > ("nir_intrinsic_store_ssbo", None)), > > + ("__intrinsic_load_ssbo", > > ("nir_intrinsic_load_ssbo", > > None)), > > + ("__intrinsic_atomic_add_ssbo", > > ("nir_intrinsic_ssbo_atomic_add", None)), > > + ("__intrinsic_atomic_and_ssbo", > > ("nir_intrinsic_ssbo_atomic_and", None)), > > + ("__intrinsic_atomic_or_ssbo", > > ("nir_intrinsic_ssbo_atomic_or", None)), > > + ("__intrinsic_atomic_xor_ssbo", > > ("nir_intrinsic_ssbo_atomic_xor", None)), > > + ("__intrinsic_atomic_min_ssbo", > > ("nir_intrinsic_ssbo_atomic_imin", > > "nir_intrinsic_ssbo_atomic_umin")), > > + ("__intrinsic_atomic_max_ssbo", > > ("nir_intrinsic_ssbo_atomic_imax", > > "nir_intrinsic_ssbo_atomic_umax")), > > + ("__intrinsic_atomic_exchange_ssbo", > > ("nir_intrinsic_ssbo_atomic_exchange", None)), > > + ("__intrinsic_atomic_comp_swap_ssbo", > > ("nir_intrinsic_ssbo_atomic_comp_swap", None)), > > + ("__intrinsic_shader_clock", > > ("nir_intrinsic_shader_clock", None)), > > + ("__intrinsic_group_memory_barrier", > > ("nir_intrinsic_group_memory_barrier", None)), > > + ("__intrinsic_memory_barrier_atomic_counter", > > ("nir_intrinsic_memory_barrier_atomic_counter", None)), > > + ("__intrinsic_memory_barrier_buffer", > > ("nir_intrinsic_memory_barrier_buffer", None)), > > + ("__intrinsic_memory_barrier_image", > > ("nir_intrinsic_memory_barrier_image", None)), > > + ("__intrinsic_memory_barrier_shared", > > ("nir_intrinsic_memory_barrier_shared", None)), > > + ("__intrinsic_load_shared", > > ("nir_intrinsic_load_shared", None)), > > + ("__intrinsic_store_shared", > > ("nir_intrinsic_store_shared", None)), > > + ("__intrinsic_atomic_add_shared", > > ("nir_intrinsic_shared_atomic_add", None)), > > + ("__intrinsic_atomic_and_shared", > > ("nir_intrinsic_shared_atomic_and", None)), > > + ("__intrinsic_atomic_or_shared", > > ("nir_intrinsic_shared_atomic_or", None)), > > + ("__intrinsic_atomic_xor_shared", > > ("nir_intrinsic_shared_atomic_xor", None)), > > + ("__intrinsic_atomic_min_shared", > > ("nir_intrinsic_shared_atomic_imin", > > "nir_intrinsic_shared_atomic_umin")), > > + ("__intrinsic_atomic_max_shared", > > ("nir_intrinsic_shared_atomic_imax", > > "nir_intrinsic_shared_atomic_umax")), > > + ("__intrinsic_atomic_exchange_shared", > > ("nir_intrinsic_shared_atomic_exchange", None)), > > + ("__intrinsic_atomic_comp_swap_shared", > > ("nir_intrinsic_shared_atomic_comp_swap", None))] > > + > > +template = """ > > +namespace _glsl_to_nir { > > + > > +nir_intrinsic_op > > +get_intrinsic_opcode(const char *name, const ir_dereference > > *return_deref) > > +{ > > + % for (name, ops) in intrinsics: > > + if (strcmp(name, "${name}") == 0) { > > + % if ops[1] is None: > > + return ${ops[0]}; > > + % else: > > + assert(return_deref); > > + if (return_deref->type == glsl_type::int_type) > > + return ${ops[0]}; > > + else if (return_deref->type == glsl_type::uint_type) > > + return ${ops[1]}; > > + else > > + unreachable("Invalid type"); > > + % endif > > + } else > > + % endfor > Shouldn't this '% endfor' go below the next line?
Never mind this, I see now that this it is correct as it is. Iago > > > > + unreachable("Unknown intrinsic name"); > > +} > > +} > > +""" > > + > > +print(Template(template).render(intrinsics=intrinsics)) _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev