abort();
}
+ /* Deref sources */
+ num_srcs += 2;
+
if (prog_inst->TexShadow)
num_srcs++;
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:
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));