mesa/st: use ESSL cap top enable gpu_shader5
authorRob Clark <robdclark@gmail.com>
Thu, 21 Mar 2019 13:29:58 +0000 (09:29 -0400)
committerRob Clark <robdclark@gmail.com>
Fri, 22 Mar 2019 20:39:13 +0000 (16:39 -0400)
For GLES2+ contexts, enable EXT_gpu_shader5 if the driver exposes a
sufficiently high ESSL feature level, even if the GLSL feature level
isn't high enough.

This allows drivers to support EXT_gpu_shader5 in GLES contexts before
they support all the additional features of ARB_gpu_shader5 in GL
contexts.

Signed-off-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/mesa/state_tracker/st_extensions.c

index c953bfd9f7a6b0ed50768518ab84333f27ee5679..405fc21b3ad3a91ed63b55ad9848e1eb9f822ede 100644 (file)
@@ -1056,6 +1056,8 @@ void st_init_extensions(struct pipe_screen *screen,
    consts->GLSLVersionCompat =
       screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY);
 
+   const unsigned ESSLVersion =
+      screen->get_param(screen, PIPE_CAP_ESSL_FEATURE_LEVEL);
    const unsigned GLSLVersion =
       api == API_OPENGL_COMPAT ? consts->GLSLVersionCompat :
                                  consts->GLSLVersion;
@@ -1077,6 +1079,13 @@ void st_init_extensions(struct pipe_screen *screen,
 
    consts->AllowGLSLCrossStageInterpolationMismatch = options->allow_glsl_cross_stage_interpolation_mismatch;
 
+   /* Technically we are turning on the EXT_gpu_shader5 extension,
+    * ARB_gpu_shader5 does not exist in GLES, but this flag is what
+    * switches on EXT_gpu_shader5:
+    */
+   if (api == API_OPENGLES2 && ESSLVersion >= 320)
+      extensions->ARB_gpu_shader5 = GL_TRUE;
+
    if (GLSLVersion >= 400)
       extensions->ARB_gpu_shader5 = GL_TRUE;
    if (GLSLVersion >= 410)
@@ -1540,16 +1549,18 @@ void st_init_extensions(struct pipe_screen *screen,
       extensions->EXT_shader_integer_mix;
 
    extensions->OES_texture_cube_map_array =
-      extensions->ARB_ES3_1_compatibility &&
+      (extensions->ARB_ES3_1_compatibility || ESSLVersion >= 310) &&
       extensions->OES_geometry_shader &&
       extensions->ARB_texture_cube_map_array;
 
    extensions->OES_viewport_array =
-      extensions->ARB_ES3_1_compatibility &&
+      (extensions->ARB_ES3_1_compatibility || ESSLVersion >= 310) &&
       extensions->OES_geometry_shader &&
       extensions->ARB_viewport_array;
 
-   extensions->OES_primitive_bounding_box = extensions->ARB_ES3_1_compatibility;
+   extensions->OES_primitive_bounding_box =
+      extensions->ARB_ES3_1_compatibility || ESSLVersion >= 310;
+
    consts->NoPrimitiveBoundingBoxOutput = true;
 
    extensions->ANDROID_extension_pack_es31a =