<div dir="ltr"><br><div class="gmail_quote"><div dir="ltr">On Mon, Dec 17, 2018 at 8:18 PM Timothy Arceri <<a href="mailto:tarceri@itsqueeze.com">tarceri@itsqueeze.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">The following patch will use this with the radeonsi NIR backend<br>
but I've added it to ac so we can use it with RADV in future.<br>
<br>
This is a NIR implementation of the tgsi function<br>
tgsi_scan_tess_ctrl().<br>
---<br>
 src/amd/common/ac_nir_to_llvm.c | 161 ++++++++++++++++++++++++++++++++<br>
 src/amd/common/ac_nir_to_llvm.h |   2 +<br>
 2 files changed, 163 insertions(+)<br>
<br>
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c<br>
index 4294956de1..055940b75f 100644<br>
--- a/src/amd/common/ac_nir_to_llvm.c<br>
+++ b/src/amd/common/ac_nir_to_llvm.c<br>
@@ -4063,3 +4063,164 @@ ac_lower_indirect_derefs(struct nir_shader *nir, enum chip_class chip_class)<br>
<br>
        nir_lower_indirect_derefs(nir, indirect_mask);<br>
 }<br>
+<br>
+static unsigned<br>
+get_inst_tessfactor_writemask(nir_intrinsic_instr *intrin)<br>
+{<br>
+       if (intrin->intrinsic != nir_intrinsic_store_deref)<br>
+               return 0;<br>
+<br>
+       nir_variable *var =<br>
+               nir_deref_instr_get_variable(nir_src_as_deref(intrin->src[0]));<br>
+<br>
+       if (var->data.mode != nir_var_shader_out)<br>
+               return 0;<br>
+<br>
+       unsigned writemask = 0;<br>
+       const int location = var->data.location;<br>
+       unsigned first_component = var->data.location_frac;<br>
+       unsigned num_comps = intrin->dest.ssa.num_components;<br>
+<br>
+       if (location == VARYING_SLOT_TESS_LEVEL_INNER)<br>
+               writemask = ((1 << num_comps + 1) - 1) << first_component;<br></blockquote><div><br></div><div><div>Parentheses are missing in "1 << num_comps + 1".<br></div><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">
+       else if (location == VARYING_SLOT_TESS_LEVEL_OUTER)<br>
+               writemask = (((1 << num_comps + 1) - 1) << first_component) << 4;<br></blockquote><div><br></div><div>Same here.<br></div><br><div>Marek</div></div></div>