On 03.08.2017 11:24, Samuel Pitoiset 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>

Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.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);
+
     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))



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to