}
}
+static void
+record_samplers_used(struct shader_info *info,
+ nir_deref_instr *deref,
+ nir_texop op)
+{
+ nir_variable *var = nir_deref_instr_get_variable(deref);
+
+ /* Structs have been lowered already, so get_aoa_size is sufficient. */
+ const unsigned size =
+ glsl_type_is_array(var->type) ? glsl_get_aoa_size(var->type) : 1;
+
+ BITSET_SET_RANGE(info->samplers_used, var->data.binding,
+ var->data.binding + (MAX2(size, 1) - 1));
+}
+
static bool
lower_sampler(nir_tex_instr *instr, struct lower_samplers_as_deref_state *state,
nir_builder *b)
if (sampler_deref) {
nir_instr_rewrite_src(&instr->instr, &instr->src[sampler_idx].src,
nir_src_for_ssa(&sampler_deref->dest.ssa));
+ record_samplers_used(&b->shader->info, sampler_deref, instr->op);
}
}
/** Bitfield of which textures are used by texelFetch() */
BITSET_DECLARE(textures_used_by_txf, 32);
+ /** Bitfield of which samplers are used */
+ BITSET_DECLARE(samplers_used, 32);
+
/** Bitfield of which images are used */
BITSET_DECLARE(images_used, 32);
/** Bitfield of which images are buffers. */
if (prog) {
BITSET_COPY(prog->info.textures_used, nir->info.textures_used);
BITSET_COPY(prog->info.textures_used_by_txf, nir->info.textures_used_by_txf);
+ BITSET_COPY(prog->info.samplers_used, nir->info.samplers_used);
BITSET_COPY(prog->info.images_used, nir->info.images_used);
BITSET_COPY(prog->info.image_buffers, nir->info.image_buffers);
BITSET_COPY(prog->info.msaa_images, nir->info.msaa_images);