[Mesa-dev] [PATCH v3 1/6] radeonsi: declare new user SGPR indices for bindless samplers/images

Marek Olšák maraeo at gmail.com
Thu Aug 10 21:17:40 UTC 2017


On Tue, Aug 8, 2017 at 6:57 PM, Samuel Pitoiset
<samuel.pitoiset at 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.pitoiset at 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.olsak at amd.com>

Marek


More information about the mesa-dev mailing list