st/mesa: do not init limits when compute shaders are not supported
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 15 Feb 2016 21:40:46 +0000 (22:40 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 16 Feb 2016 19:53:35 +0000 (20:53 +0100)
When the number of uniform blocks is less than 12,
ARB_uniform_buffer_object can't be enabled and the maximum GL version
is not even 3.1...

This fixes a regression introduced in 7c79c1e (st/mesa: add compute
shader state) if the maximum number of uniform blocks allowed for
compute shaders is less than 12. This happens on Kepler but this might
also affect other Gallium drivers.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reported-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Tested-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
src/mesa/state_tracker/st_extensions.c

index 9077added7c1e4556182fad99185f683e1d140f1..24c64447f446f5b88a9b28d9267e472fb374240f 100644 (file)
@@ -75,6 +75,7 @@ static int _clamp(int a, int min, int max)
 void st_init_limits(struct pipe_screen *screen,
                     struct gl_constants *c, struct gl_extensions *extensions)
 {
+   int supported_irs;
    unsigned sh;
    boolean can_ubo = TRUE;
 
@@ -177,6 +178,13 @@ void st_init_limits(struct pipe_screen *screen,
       case PIPE_SHADER_COMPUTE:
          pc = &c->Program[MESA_SHADER_COMPUTE];
          options = &c->ShaderCompilerOptions[MESA_SHADER_COMPUTE];
+
+         if (!screen->get_param(screen, PIPE_CAP_COMPUTE))
+            continue;
+         supported_irs =
+            screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_SUPPORTED_IRS);
+         if (!(supported_irs & (1 << PIPE_SHADER_IR_TGSI)))
+            continue;
          break;
       default:
          assert(0);