On Mon, Nov 30, 2015 at 6:38 PM, Matt Turner <matts...@gmail.com> wrote: > On Mon, Nov 30, 2015 at 3:34 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote: >> On Mon, Nov 30, 2015 at 6:32 PM, Matt Turner <matts...@gmail.com> wrote: >>> --- >>> src/glsl/builtin_functions.cpp | 15 ++++++++++++++- >>> 1 file changed, 14 insertions(+), 1 deletion(-) >>> >>> diff --git a/src/glsl/builtin_functions.cpp b/src/glsl/builtin_functions.cpp >>> index 88f9a71..2f21ffc 100644 >>> --- a/src/glsl/builtin_functions.cpp >>> +++ b/src/glsl/builtin_functions.cpp >>> @@ -538,6 +538,7 @@ private: >>> ir_variable *in_var(const glsl_type *type, const char *name); >>> ir_variable *out_var(const glsl_type *type, const char *name); >>> ir_constant *imm(float f, unsigned vector_elements=1); >>> + ir_constant *imm(bool b, unsigned vector_elements=1); >>> ir_constant *imm(int i, unsigned vector_elements=1); >>> ir_constant *imm(unsigned u, unsigned vector_elements=1); >>> ir_constant *imm(double d, unsigned vector_elements=1); >>> @@ -3000,6 +3001,12 @@ builtin_builder::out_var(const glsl_type *type, >>> const char *name) >>> } >>> >>> ir_constant * >>> +builtin_builder::imm(bool b, unsigned vector_elements) >>> +{ >>> + return new(mem_ctx) ir_constant(b, vector_elements); >>> +} >>> + >>> +ir_constant * >>> builtin_builder::imm(float f, unsigned vector_elements) >>> { >>> return new(mem_ctx) ir_constant(f, vector_elements); >>> @@ -4358,7 +4365,13 @@ >>> builtin_builder::_notEqual(builtin_available_predicate avail, >>> ir_function_signature * >>> builtin_builder::_any(const glsl_type *type) >>> { >>> - return unop(always_available, ir_unop_any, glsl_type::bool_type, type); >>> + ir_variable *v = in_var(type, "v"); >>> + MAKE_SIG(glsl_type::bool_type, always_available, 1, v); >>> + >>> + const unsigned vec_elem = v->type->vector_elements; >>> + body.emit(ret(expr(ir_binop_any_nequal, v, imm(false, vec_elem)))); >> >> This results in an extra comparison generated by the st_glsl_to_tgsi >> code, which can be annoying to get rid of... Why do you need to do >> this? > > Couldn't we fix the st_glsl_to_tgsi to handle that better? I wouldn't > be surprised to find such a thing in the wild.
I guess it could special-case the exact IR generated there? The thing is that it just OR's everything together (when you have native integer support... which everything does outside of r300/nv30), which you can only do in a few select cases. If you'd like to implement that, I wouldn't object. As-is, it's a pessimization though. -ilia _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev