Re: [Mesa-dev] [PATCH 4/7] nir: add shader_clock intrinsic

2015-10-19 Thread Matt Turner
On Mon, Oct 19, 2015 at 7:45 AM, Emil Velikov  wrote:
> v2: Add flags and inline comment/description.
> v3: None of the input/outputs are variables
>
> Signed-off-by: Emil Velikov 
> ---
>  src/glsl/nir/glsl_to_nir.cpp  | 6 ++
>  src/glsl/nir/nir_intrinsics.h | 8 
>  2 files changed, 14 insertions(+)
>
> diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp
> index cf5bb93..9dd3d07 100644
> --- a/src/glsl/nir/glsl_to_nir.cpp
> +++ b/src/glsl/nir/glsl_to_nir.cpp
> @@ -685,6 +685,8 @@ nir_visitor::visit(ir_call *ir)
>   op = nir_intrinsic_ssbo_atomic_exchange;
>} else if (strcmp(ir->callee_name(), 
> "__intrinsic_ssbo_atomic_comp_swap_internal") == 0) {
>   op = nir_intrinsic_ssbo_atomic_comp_swap;
> +  } else if (strcmp(ir->callee_name(), "__intrinsic_shader_clock") == 0) 
> {
> + op = nir_intrinsic_shader_clock;
>} else {
>   unreachable("not reached");
>}
> @@ -789,6 +791,10 @@ nir_visitor::visit(ir_call *ir)
>case nir_intrinsic_memory_barrier:
>   nir_instr_insert_after_cf_list(this->cf_node_list, &instr->instr);
>   break;
> +  case nir_intrinsic_shader_clock:
> + nir_ssa_dest_init(&instr->instr, &instr->dest, 1, NULL);
> + nir_instr_insert_after_cf_list(this->cf_node_list, &instr->instr);
> + break;
>case nir_intrinsic_store_ssbo: {
>   exec_node *param = ir->actual_parameters.get_head();
>   ir_rvalue *block = ((ir_instruction *)param)->as_rvalue();
> diff --git a/src/glsl/nir/nir_intrinsics.h b/src/glsl/nir/nir_intrinsics.h
> index 49bf3b2..0302152 100644
> --- a/src/glsl/nir/nir_intrinsics.h
> +++ b/src/glsl/nir/nir_intrinsics.h
> @@ -83,6 +83,14 @@ BARRIER(discard)
>   */
>  BARRIER(memory_barrier)
>
> +/*
> + * Shader clock intrinsic with semantics analogous to the clock2x32ARB()
> + * clockARB() GLSL intrinsic.
> + * The latter can be used as code motion barrier, which is currently not
> + * feasible with NIR.
> + */

This comment is confusing. I assume it's supposed to read "to the
clock2x32ARB()/clockARB() GLSL intrinsic.", that is, with a / between
the two function names. But then, the next sentence says "The latter
can ...". The latter of those two? That's not what the spec says:

> The clockARB() and clock2x32ARB() functions serve as a code motion barriers. 
> [sic]

I think I'd drop the second sentence entirely.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 4/7] nir: add shader_clock intrinsic

2015-10-19 Thread Emil Velikov
v2: Add flags and inline comment/description.
v3: None of the input/outputs are variables

Signed-off-by: Emil Velikov 
---
 src/glsl/nir/glsl_to_nir.cpp  | 6 ++
 src/glsl/nir/nir_intrinsics.h | 8 
 2 files changed, 14 insertions(+)

diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp
index cf5bb93..9dd3d07 100644
--- a/src/glsl/nir/glsl_to_nir.cpp
+++ b/src/glsl/nir/glsl_to_nir.cpp
@@ -685,6 +685,8 @@ nir_visitor::visit(ir_call *ir)
  op = nir_intrinsic_ssbo_atomic_exchange;
   } else if (strcmp(ir->callee_name(), 
"__intrinsic_ssbo_atomic_comp_swap_internal") == 0) {
  op = nir_intrinsic_ssbo_atomic_comp_swap;
+  } else if (strcmp(ir->callee_name(), "__intrinsic_shader_clock") == 0) {
+ op = nir_intrinsic_shader_clock;
   } else {
  unreachable("not reached");
   }
@@ -789,6 +791,10 @@ nir_visitor::visit(ir_call *ir)
   case nir_intrinsic_memory_barrier:
  nir_instr_insert_after_cf_list(this->cf_node_list, &instr->instr);
  break;
+  case nir_intrinsic_shader_clock:
+ nir_ssa_dest_init(&instr->instr, &instr->dest, 1, NULL);
+ nir_instr_insert_after_cf_list(this->cf_node_list, &instr->instr);
+ break;
   case nir_intrinsic_store_ssbo: {
  exec_node *param = ir->actual_parameters.get_head();
  ir_rvalue *block = ((ir_instruction *)param)->as_rvalue();
diff --git a/src/glsl/nir/nir_intrinsics.h b/src/glsl/nir/nir_intrinsics.h
index 49bf3b2..0302152 100644
--- a/src/glsl/nir/nir_intrinsics.h
+++ b/src/glsl/nir/nir_intrinsics.h
@@ -83,6 +83,14 @@ BARRIER(discard)
  */
 BARRIER(memory_barrier)
 
+/*
+ * Shader clock intrinsic with semantics analogous to the clock2x32ARB()
+ * clockARB() GLSL intrinsic.
+ * The latter can be used as code motion barrier, which is currently not
+ * feasible with NIR.
+ */
+INTRINSIC(shader_clock, 0, ARR(), true, 1, 0, 0, NIR_INTRINSIC_CAN_ELIMINATE)
+
 /** A conditional discard, with a single boolean source. */
 INTRINSIC(discard_if, 1, ARR(1), false, 0, 0, 0, 0)
 
-- 
2.6.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev