[Mesa-dev] [PATCH 2/6] glsl: Implement any(v) as any_nequal(v, false).
Matt Turner
mattst88 at gmail.com
Mon Nov 30 15:38:11 PST 2015
On Mon, Nov 30, 2015 at 3:34 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> On Mon, Nov 30, 2015 at 6:32 PM, Matt Turner <mattst88 at 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.
More information about the mesa-dev
mailing list