[Mesa-dev] [PATCH v4] glsl: update the extensions that are enabled for 460

Samuel Pitoiset samuel.pitoiset at gmail.com
Fri Aug 4 14:49:07 UTC 2017



On 08/04/2017 04:27 PM, Ilia Mirkin wrote:
> 
> 
> On Aug 4, 2017 02:02, "Samuel Pitoiset" <samuel.pitoiset at gmail.com 
> <mailto:samuel.pitoiset at gmail.com>> wrote:
> 
> 
> 
>     On 08/03/2017 07:36 PM, Ilia Mirkin wrote:
> 
>         On Thu, Aug 3, 2017 at 5:24 AM, Samuel Pitoiset
>         <samuel.pitoiset at gmail.com <mailto:samuel.pitoiset at 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.pitoiset at gmail.com
>             <mailto:samuel.pitoiset at 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.
> 
> 
>     Yes, but it's already adjusted in this patch:
> 
> 
>     @@ -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;
>       }
> 
> 
> Will that not make the suffixed functions available in plain #version 
> 460 then?

Yeah, but does this really matter?

> 
> 
> 
>                   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 at lists.freedesktop.org
>             <mailto:mesa-dev at lists.freedesktop.org>
>             https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>             <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>
> 
> 


More information about the mesa-dev mailing list