[Mesa-dev] [PATCH 2/3] nir: Create sampler variables in prog_to_nir.

Jason Ekstrand jason at jlekstrand.net
Sat Aug 25 13:05:57 UTC 2018


On Fri, Aug 24, 2018 at 8:24 PM Kenneth Graunke <kenneth at whitecape.org>
wrote:

> This is needed for nir_gather_info to actually count the textures,
> since it operates solely on variables.
> ---
>  src/mesa/program/prog_to_nir.c | 15 +++++++++++++--
>  1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/program/prog_to_nir.c
> b/src/mesa/program/prog_to_nir.c
> index 14e57b6c6a1..1f0607542e8 100644
> --- a/src/mesa/program/prog_to_nir.c
> +++ b/src/mesa/program/prog_to_nir.c
> @@ -52,6 +52,7 @@ struct ptn_compile {
>     nir_variable *parameters;
>     nir_variable *input_vars[VARYING_SLOT_MAX];
>     nir_variable *output_vars[VARYING_SLOT_MAX];
> +   nir_variable *sampler_vars[32]; /* matches number of bits in
> TexSrcUnit */
>     nir_register **output_regs;
>     nir_register **temp_regs;
>
> @@ -484,9 +485,10 @@ ptn_kil(nir_builder *b, nir_ssa_def **src)
>  }
>
>  static void
> -ptn_tex(nir_builder *b, nir_alu_dest dest, nir_ssa_def **src,
> +ptn_tex(struct ptn_compile *c, nir_alu_dest dest, nir_ssa_def **src,
>          struct prog_instruction *prog_inst)
>  {
> +   nir_builder *b = &c->build;
>     nir_tex_instr *instr;
>     nir_texop op;
>     unsigned num_srcs;
> @@ -568,6 +570,15 @@ ptn_tex(nir_builder *b, nir_alu_dest dest,
> nir_ssa_def **src,
>        unreachable("can't reach");
>     }
>
> +   if (!c->sampler_vars[prog_inst->TexSrcUnit]) {
> +      const struct glsl_type *type =
> +         glsl_sampler_type(instr->sampler_dim, false, false,
> GLSL_TYPE_FLOAT);
> +      nir_variable *var =
> +         nir_variable_create(b->shader, nir_var_uniform, type, "sampler");
> +      var->data.binding = prog_inst->TexSrcUnit;
> +      c->sampler_vars[prog_inst->TexSrcUnit] = var;
>

Can samplers be indirected?  If so, we probably want an array of samplers
instead 32 distinct samplers.


> +   }
> +
>     unsigned src_number = 0;
>
>     instr->src[src_number].src =
> @@ -784,7 +795,7 @@ ptn_emit_instruction(struct ptn_compile *c, struct
> prog_instruction *prog_inst)
>     case OPCODE_TXD:
>     case OPCODE_TXL:
>     case OPCODE_TXP:
> -      ptn_tex(b, dest, src, prog_inst);
> +      ptn_tex(c, dest, src, prog_inst);
>        break;
>
>     case OPCODE_SWZ:
> --
> 2.18.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180825/6a5f2d4d/attachment.html>


More information about the mesa-dev mailing list