On Tue, Aug 8, 2017 at 6:57 PM, Samuel Pitoiset <samuel.pitoi...@gmail.com> wrote: > A new pair of user SGPR is needed for loading the bindless > descriptors from shaders. Because the descriptors are global for > all stages, there is no need to add separate indices for GFX9. > > v3: - fix merged shaders on GFX9 > v2: - fix declaring new bindless parameter > > Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> > --- > src/gallium/drivers/radeonsi/si_shader.c | 21 +++++++++++++++++---- > src/gallium/drivers/radeonsi/si_shader.h | 4 +++- > src/gallium/drivers/radeonsi/si_shader_internal.h | 1 + > 3 files changed, 21 insertions(+), 5 deletions(-) > > diff --git a/src/gallium/drivers/radeonsi/si_shader.c > b/src/gallium/drivers/radeonsi/si_shader.c > index 09053c355e..035e36fbab 100644 > --- a/src/gallium/drivers/radeonsi/si_shader.c > +++ b/src/gallium/drivers/radeonsi/si_shader.c > @@ -2900,6 +2900,9 @@ static void si_set_ls_return_value_for_tcs(struct > si_shader_context *ctx) > ret = si_insert_input_ret(ctx, ret, ctx->param_merged_wave_info, 3); > ret = si_insert_input_ret(ctx, ret, ctx->param_tcs_factor_offset, 4); > ret = si_insert_input_ret(ctx, ret, ctx->param_merged_scratch_offset, > 5); > + ret = si_insert_input_ptr_as_2xi32(ctx, ret, > + ctx->param_bindless_samplers_and_images, > + 8 + SI_SGPR_BINDLESS_SAMPLERS_AND_IMAGES); > > ret = si_insert_input_ret(ctx, ret, ctx->param_vs_state_bits, > 8 + SI_SGPR_VS_STATE_BITS); > @@ -2938,6 +2941,9 @@ static void si_set_es_return_value_for_gs(struct > si_shader_context *ctx) > ret = si_insert_input_ret(ctx, ret, ctx->param_merged_wave_info, 3); > > ret = si_insert_input_ret(ctx, ret, ctx->param_merged_scratch_offset, > 5); > + ret = si_insert_input_ptr_as_2xi32(ctx, ret, > + ctx->param_bindless_samplers_and_images, > + 8 + SI_SGPR_BINDLESS_SAMPLERS_AND_IMAGES); > > unsigned desc_param = ctx->param_vs_state_bits + 1; > ret = si_insert_input_ptr_as_2xi32(ctx, ret, desc_param, > @@ -4249,6 +4255,8 @@ static void declare_default_desc_pointers(struct > si_shader_context *ctx, > { > ctx->param_rw_buffers = add_arg(fninfo, ARG_SGPR, > si_const_array(ctx->v4i32, SI_NUM_RW_BUFFERS)); > + ctx->param_bindless_samplers_and_images = add_arg(fninfo, ARG_SGPR, > + si_const_array(ctx->v8i32, 0)); > declare_per_stage_desc_pointers(ctx, fninfo, true); > } > > @@ -4388,8 +4396,9 @@ static void create_function(struct si_shader_context > *ctx) > add_arg(&fninfo, ARG_SGPR, ctx->i32); /* unused */ > add_arg(&fninfo, ARG_SGPR, ctx->i32); /* unused */ > > - add_arg(&fninfo, ARG_SGPR, ctx->i32); /* unused */ > - add_arg(&fninfo, ARG_SGPR, ctx->i32); /* unused */
Don't remove these unused inputs. > + ctx->param_bindless_samplers_and_images = > + add_arg(&fninfo, ARG_SGPR, si_const_array(ctx->v8i32, > 0)); > + > declare_per_stage_desc_pointers(ctx, &fninfo, > ctx->type == > PIPE_SHADER_VERTEX); > declare_vs_specific_input_sgprs(ctx, &fninfo); > @@ -4442,8 +4451,9 @@ static void create_function(struct si_shader_context > *ctx) > add_arg(&fninfo, ARG_SGPR, ctx->i32); /* unused > (SPI_SHADER_PGM_LO/HI_GS << 8) */ > add_arg(&fninfo, ARG_SGPR, ctx->i32); /* unused > (SPI_SHADER_PGM_LO/HI_GS >> 24) */ > > - add_arg(&fninfo, ARG_SGPR, ctx->i32); /* unused */ > - add_arg(&fninfo, ARG_SGPR, ctx->i32); /* unused */ Don't remove these unused inputs. With those fixed, the patch is: Reviewed-by: Marek Olšák <marek.ol...@amd.com> Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev