On Tue, 2015-06-30 at 09:30 -0700, Jason Ekstrand wrote: > 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.
I see, we still need to do this explicitly though: condition.swizzle = brw_swizzle_for_size(1); Maybe we should just make get_nir_src() set the swizzle based on the number of components instead so we don't have to do this kind of things after calling that, does that sound better? Iago > > > + 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev