[Mesa-dev] [PATCH v4] glsl: update the extensions that are enabled for 460
Nicolai Hähnle
nhaehnle at gmail.com
Mon Aug 7 07:25:59 UTC 2017
On 04.08.2017 17:46, Ilia Mirkin wrote:
> On Fri, Aug 4, 2017 at 10:49 AM, Samuel Pitoiset
> <samuel.pitoiset at gmail.com> wrote:
>>
>>
>> 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?
>
> Why not just always use "true" as the availability predicate?
>
> We've been pretty careful about not over-exposing stuff - I think it'd
> be against spec to do so, and I suspect a lot of others would agree.
> If the concensus is otherwise, we should just get rid of the
> availability functions entirely...
Hmm, actually that's a good point. When I read the patch, I was thinking
we always have the extension when we have 460, but a #version 460 shader
that does not request the extension should not be seeing the suffixed
versions of those functions.
Cheers,
Nicolai
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the mesa-dev
mailing list