<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>