On Thu, Jun 25, 2015 at 4:29 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote: > 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.
OK, I looked at the docs. Looks like the enable is for instance id generation, and if invocations == 0, that's also treated as a disable. This may end up generating the instanceid unnecessarily, but that's probably OK. I might try changing that enable to be > 1, but probably not a big deal either way. -ilia > >> + >> 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