On Fri, Oct 14, 2016 at 8:08 PM, Kenneth Graunke <kenn...@whitecape.org> wrote: > dEQP-GLES31.functional.geometry_shading.instanced.geometry_1_invocations > draws using a geometry shader that specifies > > layout(points, invocations = 1) in; > > and then uses gl_InvocationID. According to the Haswell PRM, the > "GS Instance ID 0" (and 1) thread payload fields are undefined in > dual object mode: > > "If 'dispatch mode' is DUAL_OBJECT this field is not valid." > > But there's no point in using them - if there's only one invocation, > the ID will be 0. So just load a constant. > > Cc: mesa-sta...@lists.freedesktop.org > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp > b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp > index c5886d4..59c7d21 100644 > --- a/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp > +++ b/src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp > @@ -59,7 +59,10 @@ vec4_gs_visitor::make_reg_for_system_value(int location) > switch (location) { > case SYSTEM_VALUE_INVOCATION_ID: > this->current_annotation = "initialize gl_InvocationID"; > - emit(GS_OPCODE_GET_INSTANCE_ID, *reg); > + if (gs_prog_data->invocations > 1) > + emit(GS_OPCODE_GET_INSTANCE_ID, *reg); > + else > + emit(MOV(*reg, brw_imm_ud(0))); > break; > default: > unreachable("not reached"); > -- > 2.10.0 > > _______________________________________________ > mesa-stable mailing list > mesa-sta...@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-stable
LGTM. Verified the recommendation in PRM: Reviewed-by: Anuj Phogat <anuj.pho...@gmail.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev