summaryrefslogtreecommitdiffstats
path: root/src/mesa/state_tracker/st_extensions.c
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2019-03-21 09:29:58 -0400
committerRob Clark <[email protected]>2019-03-22 16:39:13 -0400
commit6cd987604771b446b7d96209ffb5ec24d3d94276 (patch)
treec696fdfb9d8ee0d5fa089ccbe277187f4421e7f5 /src/mesa/state_tracker/st_extensions.c
parentde481947d975496b274cf0e0300383d932dcaea5 (diff)
mesa/st: use ESSL cap top enable gpu_shader5
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 <[email protected]> Reviewed-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/mesa/state_tracker/st_extensions.c')
-rw-r--r--src/mesa/state_tracker/st_extensions.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index c953bfd9f7a..405fc21b3ad 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -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 =