[Mesa-dev] [PATCH] radv/ac: add support for multi sample image coords

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Mon Jan 9 20:34:36 UTC 2017


Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

On Fri, Dec 30, 2016 at 6:22 AM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> This just adds the nir->llvm support, enabling
> the extension causes some failures on llvm 3.9 at least,
> but this code seems fine.
>
> NIR passes the sampler in src[1].x, and we LLVM/SI requires
> it as the last parameters in the coords (coord[2] for 2D,
> coord[3] for 2DArray).
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/amd/common/ac_nir_to_llvm.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
> index f214fcd..bc3a345 100644
> --- a/src/amd/common/ac_nir_to_llvm.c
> +++ b/src/amd/common/ac_nir_to_llvm.c
> @@ -2386,12 +2386,16 @@ static int image_type_to_components_count(enum glsl_sampler_dim dim, bool array)
>                 return array ? 2 : 1;
>         case GLSL_SAMPLER_DIM_2D:
>                 return array ? 3 : 2;
> +       case GLSL_SAMPLER_DIM_MS:
> +               return array ? 4 : 3;
>         case GLSL_SAMPLER_DIM_3D:
>         case GLSL_SAMPLER_DIM_CUBE:
>                 return 3;
>         case GLSL_SAMPLER_DIM_RECT:
>         case GLSL_SAMPLER_DIM_SUBPASS:
>                 return 2;
> +       case GLSL_SAMPLER_DIM_SUBPASS_MS:
> +               return 3;
>         default:
>                 break;
>         }
> @@ -2413,7 +2417,11 @@ static LLVMValueRef get_image_coords(struct nir_to_llvm_context *ctx,
>         };
>         LLVMValueRef res;
>         int count;
> -       count = image_type_to_components_count(glsl_get_sampler_dim(type),
> +       enum glsl_sampler_dim dim = glsl_get_sampler_dim(type);
> +       bool is_ms = (dim == GLSL_SAMPLER_DIM_MS ||
> +                     dim == GLSL_SAMPLER_DIM_SUBPASS_MS);
> +
> +       count = image_type_to_components_count(dim,
>                                                glsl_sampler_type_is_array(type));
>
>         if (count == 1) {
> @@ -2423,6 +2431,8 @@ static LLVMValueRef get_image_coords(struct nir_to_llvm_context *ctx,
>                         res = src0;
>         } else {
>                 int chan;
> +               if (is_ms)
> +                       count--;
>                 for (chan = 0; chan < count; ++chan) {
>                         coords[chan] = LLVMBuildExtractElement(ctx->builder, src0, masks[chan], "");
>                 }
> @@ -2431,6 +2441,11 @@ static LLVMValueRef get_image_coords(struct nir_to_llvm_context *ctx,
>                         for (chan = 0; chan < count; ++chan)
>                                 coords[chan] = LLVMBuildAdd(ctx->builder, coords[chan], LLVMBuildFPToUI(ctx->builder, ctx->frag_pos[chan], ctx->i32, ""), "");
>                 }
> +               if (is_ms) {
> +                       coords[count] = llvm_extract_elem(ctx, get_src(ctx, instr->src[1]), 0);
> +                       count++;
> +               }
> +
>                 if (count == 3) {
>                         coords[3] = LLVMGetUndef(ctx->i32);
>                         count = 4;
> --
> 2.9.3
>
> _______________________________________________
> 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