<div dir="ltr"><div>First off, thank you very much for cleaning this up!<br></div><div><br></div><div class="gmail_quote"><div dir="ltr">On Tue, Dec 4, 2018 at 12:27 PM Karol Herbst <<a href="mailto:kherbst@redhat.com">kherbst@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Signed-off-by: Karol Herbst <<a href="mailto:kherbst@redhat.com" target="_blank">kherbst@redhat.com</a>><br>
---<br>
 src/compiler/nir/nir_builder_opcodes_h.py     | 14 ++++++++++++--<br>
 src/compiler/nir/nir_lower_system_values.c    |  4 ++--<br>
 src/gallium/drivers/vc4/vc4_nir_lower_blend.c |  4 ++--<br>
 3 files changed, 16 insertions(+), 6 deletions(-)<br>
<br>
diff --git a/src/compiler/nir/nir_builder_opcodes_h.py b/src/compiler/nir/nir_builder_opcodes_h.py<br>
index 34b8c4371e1..f2e33071c6d 100644<br>
--- a/src/compiler/nir/nir_builder_opcodes_h.py<br>
+++ b/src/compiler/nir/nir_builder_opcodes_h.py<br>
@@ -44,13 +44,14 @@ nir_${name}(nir_builder *build, ${src_decl_list(opcode.num_inputs)})<br>
<br>
 /* Generic builder for system values. */<br>
 static inline nir_ssa_def *<br>
-nir_load_system_value(nir_builder *build, nir_intrinsic_op op, int index)<br>
+nir_load_system_value(nir_builder *build, nir_intrinsic_op op, int index,<br>
+                      unsigned bit_size)<br>
 {<br>
    nir_intrinsic_instr *load = nir_intrinsic_instr_create(build->shader, op);<br>
    load->num_components = nir_intrinsic_infos[op].dest_components;<br>
    load->const_index[0] = index;<br>
    nir_ssa_dest_init(&load->instr, &load->dest,<br>
-                     nir_intrinsic_infos[op].dest_components, 32, NULL);<br>
+                     nir_intrinsic_infos[op].dest_components, bit_size, NULL);<br>
    nir_builder_instr_insert(build, &load->instr);<br>
    return &load->dest.ssa;<br>
 }<br>
@@ -60,6 +61,8 @@ def sysval_decl_list(opcode):<br>
    res = ''<br>
    if opcode.indices:<br>
       res += ', unsigned ' + opcode.indices[0].lower()<br>
+   if len(opcode.bit_sizes) > 1:<br>
+      res += ', unsigned bit_size'<br></blockquote><div><br></div><div>This if statement is out-of-sync with the one below.  Perhaps "len(opcodes.bit_sizes) != 1" instead?  It may also be good to add "assert len(opcode.bit_sizes) > 0" somewhere to make it clear what our assumptions are.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
    return res<br>
<br>
 def sysval_arg_list(opcode):<br>
@@ -68,6 +71,13 @@ def sysval_arg_list(opcode):<br>
       args.append(opcode.indices[0].lower())<br>
    else:<br>
       args.append('0')<br>
+<br>
+   if len(opcode.bit_sizes) == 1:<br>
+      bit_size = opcode.bit_sizes[0]<br>
+      args.append(str(bit_size))<br>
+   else:<br>
+      args.append('bit_size')<br>
+<br>
    return ', '.join(args)<br>
 %><br>
<br>
diff --git a/src/compiler/nir/nir_lower_system_values.c b/src/compiler/nir/nir_lower_system_values.c<br>
index 08a9e8be44a..68b0ea89c8d 100644<br>
--- a/src/compiler/nir/nir_lower_system_values.c<br>
+++ b/src/compiler/nir/nir_lower_system_values.c<br>
@@ -261,8 +261,8 @@ convert_block(nir_block *block, nir_builder *b)<br>
       if (sysval == NULL) {<br>
          nir_intrinsic_op sysval_op =<br>
             nir_intrinsic_from_system_value(var->data.location);<br>
-         sysval = nir_load_system_value(b, sysval_op, 0);<br>
-         sysval->bit_size = load_deref->dest.ssa.bit_size;<br>
+         sysval = nir_load_system_value(b, sysval_op, 0,<br>
+                                        load_deref->dest.ssa.bit_size);<br></blockquote><div><br></div><div>This is so gross.... I'm happy to see it gone!<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
       }<br>
<br>
       nir_ssa_def_rewrite_uses(&load_deref->dest.ssa, nir_src_for_ssa(sysval));<br>
diff --git a/src/gallium/drivers/vc4/vc4_nir_lower_blend.c b/src/gallium/drivers/vc4/vc4_nir_lower_blend.c<br>
index 60eccb4fc00..f80558722a1 100644<br>
--- a/src/gallium/drivers/vc4/vc4_nir_lower_blend.c<br>
+++ b/src/gallium/drivers/vc4/vc4_nir_lower_blend.c<br>
@@ -130,7 +130,7 @@ vc4_blend_channel_f(nir_builder *b,<br>
                 return nir_load_system_value(b,<br>
                                              nir_intrinsic_load_blend_const_color_r_float +<br>
                                              channel,<br>
-                                             0);<br>
+                                             0, 32);<br>
         case PIPE_BLENDFACTOR_CONST_ALPHA:<br>
                 return nir_load_blend_const_color_a_float(b);<br>
         case PIPE_BLENDFACTOR_ZERO:<br>
@@ -148,7 +148,7 @@ vc4_blend_channel_f(nir_builder *b,<br>
                                 nir_load_system_value(b,<br>
                                                       nir_intrinsic_load_blend_const_color_r_float +<br>
                                                       channel,<br>
-                                                      0));<br>
+                                                      0, 32));<br>
         case PIPE_BLENDFACTOR_INV_CONST_ALPHA:<br>
                 return nir_fsub(b, nir_imm_float(b, 1.0),<br>
                                 nir_load_blend_const_color_a_float(b));<br>
-- <br>
2.19.2<br>
<br>
</blockquote></div></div>