On Monday, September 07, 2015 11:06:54 AM Jason Ekstrand wrote: > On Thu, Sep 3, 2015 at 1:48 AM, Kenneth Graunke <kenn...@whitecape.org> wrote: > > By performing the vertex counting in NIR, we're able to elide a ton of > > useless safety checks around every EmitVertex() call: > > > > total instructions in shared programs: 3952 -> 3720 (-5.87%) > > instructions in affected programs: 3491 -> 3259 (-6.65%) > > helped: 11 > > HURT: 0 > > > > Improves performance in Gl32GSCloth by 0.671742% +/- 0.142202% (n=621) > > on Haswell GT3e at 1024x768. > > > > This should also make it easier to implement Broadwell's "Static Vertex > > Count" feature someday. > > > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > > --- > > src/mesa/drivers/dri/i965/brw_nir.c | 5 ++++ > > src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp | 13 +++++++++-- > > src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp | 28 > > ++++++++++++----------- > > src/mesa/drivers/dri/i965/gen6_gs_visitor.cpp | 28 > > ++++++++++++++--------- > > 4 files changed, 48 insertions(+), 26 deletions(-) > > > > There are a couple regressions left with this patch, which are actually bugs > > in the NIR control flow graph modification code. I wrote a fix, which IIRC > > got this to zero regressions. But I've found even more bugs in the NIR CFG > > code, so I'm working on yet more fixes. I'll sort that out before landing > > this, but figured I may as well send it out for review in the meantime - > > I've > > had these patches a long time. > > > > diff --git a/src/mesa/drivers/dri/i965/brw_nir.c > > b/src/mesa/drivers/dri/i965/brw_nir.c > > index 8f3edc5..15e79ba 100644 > > --- a/src/mesa/drivers/dri/i965/brw_nir.c > > +++ b/src/mesa/drivers/dri/i965/brw_nir.c > > @@ -93,6 +93,11 @@ brw_create_nir(struct brw_context *brw, > > } > > nir_validate_shader(nir); > > > > + if (stage == MESA_SHADER_GEOMETRY) { > > + nir_lower_gs_intrinsics(nir); > > + nir_validate_shader(nir); > > + } > > + > > nir_lower_global_vars_to_local(nir); > > nir_validate_shader(nir); > > > > diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp > > b/src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp > > index 8a8dd57..4f4e1e1 100644 > > --- a/src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp > > +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_nir.cpp > > @@ -92,16 +92,25 @@ vec4_gs_visitor::nir_emit_intrinsic(nir_intrinsic_instr > > *instr) > > src_reg src; > > > > switch (instr->intrinsic) { > > - case nir_intrinsic_emit_vertex: { > > + case nir_intrinsic_emit_vertex_with_counter: { > > + this->vertex_count = > > + retype(get_nir_src(instr->src[0], 1), BRW_REGISTER_TYPE_UD); > > int stream_id = instr->const_index[0]; > > gs_emit_vertex(stream_id); > > break; > > } > > > > - case nir_intrinsic_end_primitive: > > + case nir_intrinsic_end_primitive_with_counter: > > + this->vertex_count = > > + retype(get_nir_src(instr->src[0], 1), BRW_REGISTER_TYPE_UD); > > It seems kind of odd to me that we are seetting a vertex_count state > variable in this case and in the one above. Wouldn't it be better to > pass the vertex count in to end_primitive() and emit_vertex()? That > can be a refactor for another day though; after we delete the old > vec4_visitor code.
Oh, I wholly agree. I just did this because this->vertex_count already existed, and was used in the appropriate places, so it was the simplest path forward. I'm totally in favor of deleting this->vertex_count after we delete the GLSL IR visitor support. > Modulo getting the CF bugs fixed, this series is > > Reviewed-by: Jason Ekstrand <jason.ekstr...@intel.com> Thanks Jason!
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev