On Thu, Aug 3, 2017 at 5:24 AM, Samuel Pitoiset <samuel.pitoi...@gmail.com> wrote: > Other ones are either unsupported or don't have any helper > function checks. > > v4: - drop ARB suffix for shader_group_vote/arb_shader_atomic_counter_ops > v3: - always add gl_BaseVertex & co when 460 is enabled > v2: - fix ARB_shader_draw_parameters system value names > > Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> > --- > src/compiler/glsl/builtin_functions.cpp | 81 > +++++++++++++++++++++++++++++---- > src/compiler/glsl/builtin_variables.cpp | 5 ++ > 2 files changed, 78 insertions(+), 8 deletions(-) > > diff --git a/src/compiler/glsl/builtin_functions.cpp > b/src/compiler/glsl/builtin_functions.cpp > index 84833bdd7d..bbb60b4e64 100644 > --- a/src/compiler/glsl/builtin_functions.cpp > +++ b/src/compiler/glsl/builtin_functions.cpp > @@ -151,6 +151,12 @@ v130_desktop(const _mesa_glsl_parse_state *state) > } > > static bool > +v460_desktop(const _mesa_glsl_parse_state *state) > +{ > + return state->is_version(460, 0); > +} > + > +static bool > v130_fs_only(const _mesa_glsl_parse_state *state) > { > return state->is_version(130, 300) && > @@ -483,7 +489,7 @@ shader_atomic_counters(const _mesa_glsl_parse_state > *state) > static bool > shader_atomic_counter_ops(const _mesa_glsl_parse_state *state) > { > - return state->ARB_shader_atomic_counter_ops_enable; > + return v460_desktop(state) || state->ARB_shader_atomic_counter_ops_enable; > } > > static bool > @@ -606,7 +612,7 @@ barrier_supported(const _mesa_glsl_parse_state *state) > static bool > vote(const _mesa_glsl_parse_state *state) > { > - return state->ARB_shader_group_vote_enable; > + return v460_desktop(state) || state->ARB_shader_group_vote_enable; > } > > static bool > @@ -962,7 +968,8 @@ private: > > ir_function_signature *_vote_intrinsic(builtin_available_predicate avail, > enum ir_intrinsic_id id); > - ir_function_signature *_vote(const char *intrinsic_name); > + ir_function_signature *_vote(const char *intrinsic_name, > + builtin_available_predicate avail); > > #undef B0 > #undef B1 > @@ -3031,6 +3038,43 @@ builtin_builder::create_builtins() > shader_atomic_counter_ops), > NULL); > > + add_function("atomicCounterAdd", > + _atomic_counter_op1("__intrinsic_atomic_add", > + v460_desktop), > + NULL); > + add_function("atomicCounterSubtract", > + _atomic_counter_op1("__intrinsic_atomic_sub", > + v460_desktop), > + NULL); > + add_function("atomicCounterMin", > + _atomic_counter_op1("__intrinsic_atomic_min", > + v460_desktop), > + NULL); > + add_function("atomicCounterMax", > + _atomic_counter_op1("__intrinsic_atomic_max", > + v460_desktop), > + NULL); > + add_function("atomicCounterAnd", > + _atomic_counter_op1("__intrinsic_atomic_and", > + v460_desktop), > + NULL); > + add_function("atomicCounterOr", > + _atomic_counter_op1("__intrinsic_atomic_or", > + v460_desktop), > + NULL); > + add_function("atomicCounterXor", > + _atomic_counter_op1("__intrinsic_atomic_xor", > + v460_desktop), > + NULL); > + add_function("atomicCounterExchange", > + _atomic_counter_op1("__intrinsic_atomic_exchange", > + v460_desktop), > + NULL); > + add_function("atomicCounterCompSwap", > + _atomic_counter_op2("__intrinsic_atomic_comp_swap", > + v460_desktop), > + NULL); > +
So all of these reference the __intrinsic_atomic_max functions. Do those ned to be fixed up too? Specifically, add_function("__intrinsic_atomic_max", _atomic_intrinsic2(buffer_atomics_supported, glsl_type::uint_type, ir_intrinsic_generic_atomic_max), _atomic_intrinsic2(buffer_atomics_supported, glsl_type::int_type, ir_intrinsic_generic_atomic_max), _atomic_counter_intrinsic1(shader_atomic_counter_ops, ir_intrinsic_atomic_counter_max), NULL); I believe the latter one needs to have its availability function adjusted to be a||b. > add_function("atomicAdd", > _atomic_op2("__intrinsic_atomic_add", > buffer_atomics_supported, > @@ -3220,9 +3264,29 @@ builtin_builder::create_builtins() > glsl_type::uint64_t_type), > NULL); > > - add_function("anyInvocationARB", _vote("__intrinsic_vote_any"), NULL); > - add_function("allInvocationsARB", _vote("__intrinsic_vote_all"), NULL); > - add_function("allInvocationsEqualARB", _vote("__intrinsic_vote_eq"), > NULL); > + add_function("anyInvocationARB", > + _vote("__intrinsic_vote_any", vote), > + NULL); > + > + add_function("allInvocationsARB", > + _vote("__intrinsic_vote_all", vote), > + NULL); > + > + add_function("allInvocationsEqualARB", > + _vote("__intrinsic_vote_eq", vote), > + NULL); > + > + add_function("anyInvocation", > + _vote("__intrinsic_vote_any", v460_desktop), > + NULL); > + > + add_function("allInvocations", > + _vote("__intrinsic_vote_all", v460_desktop), > + NULL); > + > + add_function("allInvocationsEqual", > + _vote("__intrinsic_vote_eq", v460_desktop), > + NULL); > > add_function("__builtin_idiv64", > generate_ir::idiv64(mem_ctx, integer_functions_supported), > @@ -6163,11 +6227,12 @@ > builtin_builder::_vote_intrinsic(builtin_available_predicate avail, > } > > ir_function_signature * > -builtin_builder::_vote(const char *intrinsic_name) > +builtin_builder::_vote(const char *intrinsic_name, > + builtin_available_predicate avail) > { > ir_variable *value = in_var(glsl_type::bool_type, "value"); > > - MAKE_SIG(glsl_type::bool_type, vote, 1, value); > + MAKE_SIG(glsl_type::bool_type, avail, 1, value); > > ir_variable *retval = body.make_temp(glsl_type::bool_type, "retval"); > > diff --git a/src/compiler/glsl/builtin_variables.cpp > b/src/compiler/glsl/builtin_variables.cpp > index 19d427e4bc..ea2d897cc8 100644 > --- a/src/compiler/glsl/builtin_variables.cpp > +++ b/src/compiler/glsl/builtin_variables.cpp > @@ -1017,6 +1017,11 @@ builtin_variable_generator::generate_vs_special_vars() > > if (state->is_version(130, 300)) > add_system_value(SYSTEM_VALUE_VERTEX_ID, int_t, "gl_VertexID"); > + if (state->is_version(460, 0)) { > + add_system_value(SYSTEM_VALUE_BASE_VERTEX, int_t, "gl_BaseVertex"); > + add_system_value(SYSTEM_VALUE_BASE_INSTANCE, int_t, "gl_BaseInstance"); > + add_system_value(SYSTEM_VALUE_DRAW_ID, int_t, "gl_DrawID"); > + } > if (state->ARB_draw_instanced_enable) > add_system_value(SYSTEM_VALUE_INSTANCE_ID, int_t, "gl_InstanceIDARB"); > if (state->ARB_draw_instanced_enable || state->is_version(140, 300)) > -- > 2.13.3 > > _______________________________________________ > 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