[Mesa-dev] [PATCH 2/2] radeonsi: add load_image_desc()

Marek Olšák maraeo at gmail.com
Fri Mar 31 19:39:39 UTC 2017


For the series:

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Thu, Mar 30, 2017 at 7:58 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> Similar to load_sampler_desc(). Same deal for bindless.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  src/gallium/drivers/radeonsi/si_shader.c | 45 +++++++++++++++++---------------
>  1 file changed, 24 insertions(+), 21 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
> index cf725cebd8..6b02d61e17 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.c
> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> @@ -3230,6 +3230,24 @@ static LLVMTypeRef const_array(LLVMTypeRef elem_type, int num_elements)
>                                CONST_ADDR_SPACE);
>  }
>
> +static LLVMValueRef load_image_desc(struct si_shader_context *ctx,
> +                                   LLVMValueRef list, LLVMValueRef index,
> +                                   unsigned target)
> +{
> +       LLVMBuilderRef builder = ctx->gallivm.builder;
> +
> +       if (target == TGSI_TEXTURE_BUFFER) {
> +               index = LLVMBuildMul(builder, index,
> +                                    LLVMConstInt(ctx->i32, 2, 0), "");
> +               index = LLVMBuildAdd(builder, index,
> +                                    LLVMConstInt(ctx->i32, 1, 0), "");
> +               list = LLVMBuildPointerCast(builder, list,
> +                                           const_array(ctx->v4i32, 0), "");
> +       }
> +
> +       return ac_build_indexed_load_const(&ctx->ac, list, index);
> +}
> +
>  /**
>   * Load the resource descriptor for \p image.
>   */
> @@ -3243,8 +3261,8 @@ image_fetch_rsrc(
>         struct si_shader_context *ctx = si_shader_context(bld_base);
>         LLVMValueRef rsrc_ptr = LLVMGetParam(ctx->main_fn,
>                                              SI_PARAM_IMAGES);
> -       LLVMValueRef index, tmp;
> -       bool dcc_off = target != TGSI_TEXTURE_BUFFER && is_store;
> +       LLVMValueRef index;
> +       bool dcc_off = is_store;
>
>         assert(image->Register.File == TGSI_FILE_IMAGE);
>
> @@ -3255,8 +3273,7 @@ image_fetch_rsrc(
>
>                 index = LLVMConstInt(ctx->i32, image->Register.Index, 0);
>
> -               if (images_writemask & (1 << image->Register.Index) &&
> -                   target != TGSI_TEXTURE_BUFFER)
> +               if (images_writemask & (1 << image->Register.Index))
>                         dcc_off = true;
>         } else {
>                 /* From the GL_ARB_shader_image_load_store extension spec:
> @@ -3273,23 +3290,9 @@ image_fetch_rsrc(
>                                                    SI_NUM_IMAGES);
>         }
>
> -       if (target == TGSI_TEXTURE_BUFFER) {
> -               LLVMBuilderRef builder = ctx->gallivm.builder;
> -
> -               rsrc_ptr = LLVMBuildPointerCast(builder, rsrc_ptr,
> -                                               const_array(ctx->v4i32, 0), "");
> -               index = LLVMBuildMul(builder, index,
> -                                    LLVMConstInt(ctx->i32, 2, 0), "");
> -               index = LLVMBuildAdd(builder, index,
> -                                    LLVMConstInt(ctx->i32, 1, 0), "");
> -               *rsrc = ac_build_indexed_load_const(&ctx->ac, rsrc_ptr, index);
> -               return;
> -       }
> -
> -       tmp = ac_build_indexed_load_const(&ctx->ac, rsrc_ptr, index);
> -       if (dcc_off)
> -               tmp = force_dcc_off(ctx, tmp);
> -       *rsrc = tmp;
> +       *rsrc = load_image_desc(ctx, rsrc_ptr, index, target);
> +       if (dcc_off && target != TGSI_TEXTURE_BUFFER)
> +               *rsrc = force_dcc_off(ctx, *rsrc);
>  }
>
>  static LLVMValueRef image_fetch_coords(
> --
> 2.12.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list