[Mesa-dev] [PATCH] nir: Look into uniform structs for samplers when counting num_textures.
Eric Anholt
eric at anholt.net
Mon Apr 2 18:13:33 UTC 2018
mesa/st decides whether to update samplers after a program change based on
whether num_textures is nonzero. By not counting samplers in a uniform
struct, we would segfault in
KHR-GLES3.shaders.struct.uniform.sampler_vertex if it was run in the same
context after a non-vertex-shader-uniform testcase (as is the case during
a full conformance run).
---
src/compiler/nir/nir_gather_info.c | 32 ++++++++++++++++++++------------
1 file changed, 20 insertions(+), 12 deletions(-)
diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c
index 5530009255d7..63783f9bc6a2 100644
--- a/src/compiler/nir/nir_gather_info.c
+++ b/src/compiler/nir/nir_gather_info.c
@@ -350,24 +350,32 @@ gather_info_block(nir_block *block, nir_shader *shader)
}
}
+static void
+nir_gather_uniform_info(nir_shader *shader, const struct glsl_type *type,
+ int count)
+{
+ if (glsl_type_is_array(type)) {
+ nir_gather_uniform_info(shader, glsl_without_array(type),
+ count * glsl_get_aoa_size(type));
+ } else if (glsl_type_is_struct(type)) {
+ for (int i = 0; i < glsl_get_length(type); i++) {
+ nir_gather_uniform_info(shader, glsl_get_struct_field(type, i),
+ count);
+ }
+ } else if (glsl_type_is_image(type)) {
+ shader->info.num_images += count;
+ } else if (glsl_type_is_sampler(type)) {
+ shader->info.num_textures += count;
+ }
+}
+
void
nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint)
{
shader->info.num_textures = 0;
shader->info.num_images = 0;
nir_foreach_variable(var, &shader->uniforms) {
- const struct glsl_type *type = var->type;
- unsigned count = 1;
- if (glsl_type_is_array(type)) {
- count = glsl_get_aoa_size(type);
- type = glsl_without_array(type);
- }
-
- if (glsl_type_is_image(type)) {
- shader->info.num_images += count;
- } else if (glsl_type_is_sampler(type)) {
- shader->info.num_textures += count;
- }
+ nir_gather_uniform_info(shader, var->type, 1);
}
shader->info.inputs_read = 0;
--
2.16.2
More information about the mesa-dev
mailing list