summaryrefslogtreecommitdiffstats
path: root/src/mesa/program
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/program')
-rw-r--r--src/mesa/program/prog_to_nir.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/mesa/program/prog_to_nir.c b/src/mesa/program/prog_to_nir.c
index afa490cdb36..9d4f6d63dcc 100644
--- a/src/mesa/program/prog_to_nir.c
+++ b/src/mesa/program/prog_to_nir.c
@@ -529,6 +529,9 @@ ptn_tex(struct ptn_compile *c, nir_alu_dest dest, nir_ssa_def **src,
abort();
}
+ /* Deref sources */
+ num_srcs += 2;
+
if (prog_inst->TexShadow)
num_srcs++;
@@ -536,8 +539,6 @@ ptn_tex(struct ptn_compile *c, nir_alu_dest dest, nir_ssa_def **src,
instr->op = op;
instr->dest_type = nir_type_float;
instr->is_shadow = prog_inst->TexShadow;
- instr->texture_index = prog_inst->TexSrcUnit;
- instr->sampler_index = prog_inst->TexSrcUnit;
switch (prog_inst->TexSrcTarget) {
case TEXTURE_1D_INDEX:
@@ -580,17 +581,27 @@ ptn_tex(struct ptn_compile *c, nir_alu_dest dest, nir_ssa_def **src,
unreachable("can't reach");
}
- if (!c->sampler_vars[prog_inst->TexSrcUnit]) {
+ nir_variable *var = c->sampler_vars[prog_inst->TexSrcUnit];
+ if (!var) {
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 = nir_variable_create(b->shader, nir_var_uniform, type, "sampler");
var->data.binding = prog_inst->TexSrcUnit;
+ var->data.explicit_binding = true;
c->sampler_vars[prog_inst->TexSrcUnit] = var;
}
+ nir_deref_instr *deref = nir_build_deref_var(b, var);
+
unsigned src_number = 0;
+ instr->src[src_number].src = nir_src_for_ssa(&deref->dest.ssa);
+ instr->src[src_number].src_type = nir_tex_src_texture_deref;
+ src_number++;
+ instr->src[src_number].src = nir_src_for_ssa(&deref->dest.ssa);
+ instr->src[src_number].src_type = nir_tex_src_sampler_deref;
+ src_number++;
+
instr->src[src_number].src =
nir_src_for_ssa(nir_swizzle(b, src[0], SWIZ(X, Y, Z, W),
instr->coord_components, true));