summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2018-08-24 16:40:19 -0700
committerKenneth Graunke <[email protected]>2018-10-14 23:35:47 -0700
commit1c0f92d8a8c480a5803c3ce45b2a6d46bfcd280f (patch)
tree6d5eb8ffc14287fa5583490fc898bfa161663444
parented169c9ad2121429aaf0cb99cdf9e298b284a753 (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.c15
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: