[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