radeonsi/nir: fix number of used samplers
authorTimothy Arceri <tarceri@itsqueeze.com>
Mon, 16 Sep 2019 09:39:40 +0000 (19:39 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Mon, 16 Sep 2019 10:14:48 +0000 (10:14 +0000)
Commit f3e978db incorrectly assumed the maximum number of
samplers was equal to the max number of defined samplers
e.g. where bindings skip slots.

This fixes an assert in si_nir_load_sampler_desc() for an
enemy territory quake wars shader. And fixes potential bugs with
incorrect bounds limiting in the same code for production builds
of mesa.

Fixes: f3e978db ("radeonsi/nir: Remove uniform variable scanning")
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/gallium/drivers/radeonsi/si_shader_nir.c

index 4970b01fd733caeeff1a2cb1b5fc078d533ed238..85cf53848e66cd5ba807445a9c7a8df5bbd4f408 100644 (file)
@@ -783,7 +783,7 @@ void si_nir_scan_shader(const struct nir_shader *nir,
        if (nir->num_uniforms > 0)
                info->const_buffers_declared |= 1;
        info->images_declared = u_bit_consecutive(0, nir->info.num_images);
-       info->samplers_declared = u_bit_consecutive(0, nir->info.num_textures);
+       info->samplers_declared = nir->info.textures_used;
 
        info->num_written_clipdistance = nir->info.clip_distance_array_size;
        info->num_written_culldistance = nir->info.cull_distance_array_size;