diff options
author | Kenneth Graunke <[email protected]> | 2018-08-24 16:40:19 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2018-10-14 23:35:47 -0700 |
commit | 1c0f92d8a8c480a5803c3ce45b2a6d46bfcd280f (patch) | |
tree | 6d5eb8ffc14287fa5583490fc898bfa161663444 | |
parent | ed169c9ad2121429aaf0cb99cdf9e298b284a753 (diff) |
nir: Create sampler variables in prog_to_nir.
This is needed for nir_gather_info to actually count the textures,
since it operates solely on variables.
Reviewed-by: Jason Ekstrand <[email protected]>
Reviewed-by: Dave Airlie <[email protected]>
-rw-r--r-- | src/mesa/program/prog_to_nir.c | 15 |
1 files 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; + } + 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: |