On Fri, Jun 26, 2015 at 1:06 AM, Eduardo Lima Mitev <el...@igalia.com> wrote: > From: Iago Toral Quiroga <ito...@igalia.com> > > The same we do in the FS NIR backend, only that here we need to consider > the number of components in the condition and adjust the swizzle > accordingly. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89580 > --- > src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 23 ++++++++++++++++++++++- > 1 file changed, 22 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp > b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp > index 1ec75ee..d81b6a7 100644 > --- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp > +++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp > @@ -314,7 +314,28 @@ vec4_visitor::nir_emit_cf_list(exec_list *list) > void > vec4_visitor::nir_emit_if(nir_if *if_stmt) > { > - /* @TODO: Not yet implemented */ > + /* First, put the condition in f0 */ > + src_reg condition = get_nir_src(if_stmt->condition, BRW_REGISTER_TYPE_D); > + > + int num_components = if_stmt->condition.is_ssa ? > + if_stmt->condition.ssa->num_components : > + if_stmt->condition.reg.reg->num_components; > + > + condition.swizzle = brw_swizzle_for_size(num_components); > + > + vec4_instruction *inst = emit(MOV(dst_null_d(), condition)); > + inst->conditional_mod = BRW_CONDITIONAL_NZ;
NIR if statements read only one component by definition. There's no need to do this. > + emit(IF(BRW_PREDICATE_NORMAL)); > + > + nir_emit_cf_list(&if_stmt->then_list); > + > + /* note: if the else is empty, dead CF elimination will remove it */ > + emit(BRW_OPCODE_ELSE); > + > + nir_emit_cf_list(&if_stmt->else_list); > + > + emit(BRW_OPCODE_ENDIF); > } > > void > -- > 2.1.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev