On Thu, Jun 25, 2015 at 4:26 PM, Dave Airlie <airl...@gmail.com> wrote: > From: Dave Airlie <airl...@redhat.com> > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/gallium/drivers/radeonsi/si_shader.c | 5 +++++ > src/gallium/drivers/radeonsi/si_shader.h | 1 + > src/gallium/drivers/radeonsi/si_state.c | 1 - > src/gallium/drivers/radeonsi/si_state_shaders.c | 7 +++++++ > 4 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/drivers/radeonsi/si_shader.c > b/src/gallium/drivers/radeonsi/si_shader.c > index 87608a1..665ce83 100644 > --- a/src/gallium/drivers/radeonsi/si_shader.c > +++ b/src/gallium/drivers/radeonsi/si_shader.c > @@ -630,6 +630,11 @@ static void declare_system_value( > SI_PARAM_BASE_VERTEX); > break; > > + case TGSI_SEMANTIC_INVOCATIONID: > + value = LLVMGetParam(radeon_bld->main_fn, > + SI_PARAM_GS_INSTANCE_ID); > + break; > + > case TGSI_SEMANTIC_SAMPLEID: > value = get_sample_id(radeon_bld); > break; > diff --git a/src/gallium/drivers/radeonsi/si_shader.h > b/src/gallium/drivers/radeonsi/si_shader.h > index 51055af..b4339ae 100644 > --- a/src/gallium/drivers/radeonsi/si_shader.h > +++ b/src/gallium/drivers/radeonsi/si_shader.h > @@ -115,6 +115,7 @@ struct si_shader_selector { > > unsigned gs_output_prim; > unsigned gs_max_out_vertices; > + unsigned gs_num_invocations; > uint64_t gs_used_inputs; /* mask of "get_unique_index" bits */ > }; > > diff --git a/src/gallium/drivers/radeonsi/si_state.c > b/src/gallium/drivers/radeonsi/si_state.c > index 752467b..0dd08a2 100644 > --- a/src/gallium/drivers/radeonsi/si_state.c > +++ b/src/gallium/drivers/radeonsi/si_state.c > @@ -3078,7 +3078,6 @@ void si_init_config(struct si_context *sctx) > si_pm4_set_reg(pm4, R_028B60_VGT_GS_VERT_ITEMSIZE_1, 0); > si_pm4_set_reg(pm4, R_028B64_VGT_GS_VERT_ITEMSIZE_2, 0); > si_pm4_set_reg(pm4, R_028B68_VGT_GS_VERT_ITEMSIZE_3, 0); > - si_pm4_set_reg(pm4, R_028B90_VGT_GS_INSTANCE_CNT, 0); > > si_pm4_set_reg(pm4, R_028B98_VGT_STRMOUT_BUFFER_CONFIG, 0x0); > si_pm4_set_reg(pm4, R_028AB4_VGT_REUSE_OFF, 0); > diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c > b/src/gallium/drivers/radeonsi/si_state_shaders.c > index 48128fa..eef3baa 100644 > --- a/src/gallium/drivers/radeonsi/si_state_shaders.c > +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c > @@ -76,6 +76,7 @@ static void si_shader_gs(struct si_shader *shader) > unsigned gs_vert_itemsize = shader->selector->info.num_outputs * (16 > >> 2); > unsigned gs_max_vert_out = shader->selector->gs_max_out_vertices; > unsigned gsvs_itemsize = gs_vert_itemsize * gs_max_vert_out; > + unsigned gs_num_invocations = shader->selector->gs_num_invocations; > unsigned cut_mode; > struct si_pm4_state *pm4; > unsigned num_sgprs, num_user_sgprs; > @@ -118,6 +119,10 @@ static void si_shader_gs(struct si_shader *shader) > > si_pm4_set_reg(pm4, R_028B5C_VGT_GS_VERT_ITEMSIZE, gs_vert_itemsize); > > + si_pm4_set_reg(pm4, R_028B90_VGT_GS_INSTANCE_CNT, > + S_028B90_CNT(MIN2(gs_num_invocations, 127)) | > + S_028B90_ENABLE(gs_num_invocations > 0));
Without knowing how radeonsi works, just want to point out that previously GS_INSTANCE_CNT was being always set to 0, even though a single invocation was still being run. Perhaps this really needs to be gs_num_invocations_minus_one? GS_INVOCATIONS will always be at least 1. > + > va = shader->bo->gpu_address; > si_pm4_add_bo(pm4, shader->bo, RADEON_USAGE_READ, > RADEON_PRIO_SHADER_DATA); > si_pm4_set_reg(pm4, R_00B220_SPI_SHADER_PGM_LO_GS, va >> 8); > @@ -490,6 +495,8 @@ static void *si_create_shader_state(struct pipe_context > *ctx, > sel->info.properties[TGSI_PROPERTY_GS_OUTPUT_PRIM]; > sel->gs_max_out_vertices = > > sel->info.properties[TGSI_PROPERTY_GS_MAX_OUTPUT_VERTICES]; > + sel->gs_num_invocations = > + sel->info.properties[TGSI_PROPERTY_GS_INVOCATIONS]; > > for (i = 0; i < sel->info.num_inputs; i++) { > unsigned name = sel->info.input_semantic_name[i]; > -- > 2.4.3 > > _______________________________________________ > 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