<div dir="ltr"><div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 21, 2015 at 5:26 PM, Eric Anholt <span dir="ltr"><<a href="mailto:eric@anholt.net" target="_blank">eric@anholt.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">There aren't many users yet, but I wanted to do this from my scalarizing<br>
pass.<br>
---<br>
 src/glsl/nir/nir.c                     | 18 ++++++++++++++++++<br>
 src/glsl/nir/nir.h                     |  5 ++++-<br>
 src/glsl/nir/nir_lower_vec_to_movs.c   |  7 ++-----<br>
 src/glsl/nir/nir_opt_peephole_select.c |  5 +----<br>
 4 files changed, 25 insertions(+), 10 deletions(-)<br>
<br>
diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c<br>
index 16ad2da..e414df9 100644<br>
--- a/src/glsl/nir/nir.c<br>
+++ b/src/glsl/nir/nir.c<br>
@@ -175,6 +175,24 @@ nir_dest nir_dest_copy(nir_dest dest, void *mem_ctx)<br>
    return ret;<br>
 }<br>
<br>
+void<br>
+nir_alu_src_copy(nir_alu_src *dest, nir_alu_src *src, void *mem_ctx)<br>
+{<br></blockquote><div><br></div><div>We already have nir_src_copy which returns a nir_src instead of taking a pointer.  TBH, I'm not sure which I prefer, but it would be good to be consistent.  Thoughts?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+   dest->src = nir_src_copy(src->src, mem_ctx);<br>
+   dest->abs = src->abs;<br>
+   dest->negate = src->negate;<br>
+   for (unsigned i = 0; i < 4; i++)<br>
+      dest->swizzle[i] = src->swizzle[i];<br>
+}<br>
+<br>
+void<br>
+nir_alu_dest_copy(nir_alu_dest *dest, nir_alu_dest *src, void *mem_ctx)<br>
+{<br>
+   dest->dest = nir_dest_copy(src->dest, mem_ctx);<br>
+   dest->write_mask = src->write_mask;<br>
+   dest->saturate = src->saturate;<br>
+}<br>
+<br>
 static inline void<br>
 block_add_pred(nir_block *block, nir_block *pred)<br>
 {<br>
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h<br>
index 8dc5222..7f0aa36 100644<br>
--- a/src/glsl/nir/nir.h<br>
+++ b/src/glsl/nir/nir.h<br>
@@ -569,7 +569,10 @@ typedef struct {<br>
    unsigned write_mask : 4; /* ignored if dest.is_ssa is true */<br>
 } nir_alu_dest;<br>
<br>
-#define OPCODE(name, num_inputs, output_size, output_type, \<br>
+void nir_alu_src_copy(nir_alu_src *dest, nir_alu_src *src, void *mem_ctx);<br>
+void nir_alu_dest_copy(nir_alu_dest *dest, nir_alu_dest *src, void *mem_ctx);<br>
+<br>
+#define OPCODE(name, num_inputs, output_size, output_type,      \<br></blockquote><div><br></div><div>Accidental whitespace change?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
                input_sizes, input_types, algebraic_props) \<br>
    nir_op_##name,<br>
<br>
diff --git a/src/glsl/nir/nir_lower_vec_to_movs.c b/src/glsl/nir/nir_lower_vec_to_movs.c<br>
index a3120b6..022889e 100644<br>
--- a/src/glsl/nir/nir_lower_vec_to_movs.c<br>
+++ b/src/glsl/nir/nir_lower_vec_to_movs.c<br>
@@ -57,15 +57,12 @@ lower_vec_to_movs_block(nir_block *block, void *mem_ctx)<br>
          assert(src_idx < nir_op_infos[vec->op].num_inputs);<br>
<br>
          nir_alu_instr *mov = nir_alu_instr_create(mem_ctx, nir_op_imov);<br>
-         mov->src[0].src = nir_src_copy(vec->src[src_idx].src, mem_ctx);<br>
-         mov->src[0].negate = vec->src[src_idx].negate;<br>
-         mov->src[0].abs = vec->src[src_idx].abs;<br>
+         nir_alu_src_copy(&mov->src[0], &vec->src[src_idx], mem_ctx);<br>
<br>
          /* We only care about the one swizzle */<br>
          mov->src[0].swizzle[i] = vec->src[src_idx].swizzle[0];<br>
<br>
-         mov->dest.dest = nir_dest_copy(vec->dest.dest, mem_ctx);<br>
-         mov->dest.saturate = vec->dest.saturate;<br>
+         nir_alu_dest_copy(&mov->dest, &vec->dest, mem_ctx);<br>
          mov->dest.write_mask = (1u << i);<br>
<br>
          nir_instr_insert_before(&vec->instr, &mov->instr);<br>
diff --git a/src/glsl/nir/nir_opt_peephole_select.c b/src/glsl/nir/nir_opt_peephole_select.c<br>
index 023fae5..a5ac11f 100644<br>
--- a/src/glsl/nir/nir_opt_peephole_select.c<br>
+++ b/src/glsl/nir/nir_opt_peephole_select.c<br>
@@ -154,10 +154,7 @@ nir_opt_peephole_select_block(nir_block *block, void *void_state)<br>
             assert(mov->instr.type == nir_instr_type_alu);<br>
             assert(mov->op == nir_op_fmov || mov->op == nir_op_imov);<br>
<br>
-            sel->src[idx].src = nir_src_copy(mov->src[0].src, state->mem_ctx);<br>
-            sel->src[idx].negate = mov->src[0].negate;<br>
-            sel->src[idx].abs = mov->src[0].abs;<br>
-            memcpy(sel->src[idx].swizzle, mov->src[0].swizzle, 4);<br>
+            nir_alu_src_copy(&sel->src[idx], &mov->src[0], state->mem_ctx);<br>
          } else {<br>
             sel->src[idx].src = nir_src_copy(src->src, state->mem_ctx);<br>
          }<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.1.3<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div></div>