glsl: add some error checks to the nir uniform linker
authorTimothy Arceri <tarceri@itsqueeze.com>
Mon, 17 Feb 2020 00:01:50 +0000 (11:01 +1100)
committerMarge Bot <eric+marge@anholt.net>
Fri, 28 Feb 2020 23:48:46 +0000 (23:48 +0000)
These are optional for spirv but it shouldnt hurt to enable them.

Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3992>

src/compiler/glsl/gl_nir_link_uniforms.c

index fc2de8753b198c10c7c9335f4b0c3a64adac60af..375340026a0d02622032a665bdb90f2aed74edc1 100644 (file)
@@ -802,6 +802,22 @@ gl_nir_link_uniforms(struct gl_context *ctx,
             return false;
       }
 
+      if (state.num_shader_samplers >
+          ctx->Const.Program[shader_type].MaxTextureImageUnits) {
+         linker_error(prog, "Too many %s shader texture samplers\n",
+                      _mesa_shader_stage_to_string(shader_type));
+         continue;
+      }
+
+      if (state.num_shader_images >
+          ctx->Const.Program[shader_type].MaxImageUniforms) {
+         linker_error(prog, "Too many %s shader image uniforms (%u > %u)\n",
+                      _mesa_shader_stage_to_string(shader_type),
+                      state.num_shader_images,
+                      ctx->Const.Program[shader_type].MaxImageUniforms);
+         continue;
+      }
+
       sh->Program->SamplersUsed = state.shader_samplers_used;
       sh->shadow_samplers = state.shader_shadow_samplers;
       sh->Program->info.num_textures = state.num_shader_samplers;