diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index c8981ef2765..ee8bc9e2b70 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -3433,7 +3433,8 @@ check_image_resources(const struct gl_constants *consts, unsigned fragment_outputs = 0; unsigned total_shader_storage_blocks = 0; - if (!exts->ARB_shader_image_load_store) + if (!consts->MaxCombinedImageUniforms && + !consts->MaxCombinedShaderStorageBlocks) return; for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { diff --git a/src/mesa/main/shaderimage.c b/src/mesa/main/shaderimage.c index 3067a9af9aa..df0a999dd29 100644 --- a/src/mesa/main/shaderimage.c +++ b/src/mesa/main/shaderimage.c @@ -805,7 +805,8 @@ _mesa_BindImageTextures(GLuint first, GLsizei count, const GLuint *textures) { GET_CURRENT_CONTEXT(ctx); - if (!ctx->Extensions.ARB_shader_image_load_store) { + if (!ctx->Extensions.ARB_shader_image_load_store && + !_mesa_is_gles31(ctx)) { _mesa_error(ctx, GL_INVALID_OPERATION, "glBindImageTextures()"); return; } diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index 7ac49ac73c4..5f8478048f5 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -2451,7 +2451,8 @@ get_tex_parameterfv(struct gl_context *ctx, break; case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: - if (!ctx->Extensions.ARB_shader_image_load_store) + if (!ctx->Extensions.ARB_shader_image_load_store && + !_mesa_is_gles31(ctx)) goto invalid_pname; *params = (GLfloat) obj->Attrib.ImageFormatCompatibilityType; break; @@ -2741,7 +2742,8 @@ get_tex_parameteriv(struct gl_context *ctx, break; case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: - if (!ctx->Extensions.ARB_shader_image_load_store) + if (!ctx->Extensions.ARB_shader_image_load_store && + !_mesa_is_gles31(ctx)) goto invalid_pname; *params = obj->Attrib.ImageFormatCompatibilityType; break; diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index c77378f4b15..a3ade7a8e07 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -583,7 +583,8 @@ void st_init_limits(struct pipe_screen *screen, c->Program[MESA_SHADER_COMPUTE].MaxImageUniforms; c->MaxCombinedShaderOutputResources += c->MaxCombinedImageUniforms; c->MaxImageUnits = MAX_IMAGE_UNITS; - if (c->Program[MESA_SHADER_FRAGMENT].MaxImageUniforms) { + if (c->Program[MESA_SHADER_FRAGMENT].MaxImageUniforms && + screen->get_param(screen, PIPE_CAP_IMAGE_STORE_FORMATTED)) { extensions->ARB_shader_image_load_store = GL_TRUE; extensions->ARB_shader_image_size = GL_TRUE; } @@ -1484,10 +1485,10 @@ void st_init_extensions(struct pipe_screen *screen, } extensions->OES_texture_buffer = + consts->Program[MESA_SHADER_COMPUTE].MaxImageUniforms && extensions->ARB_texture_buffer_object && extensions->ARB_texture_buffer_range && - extensions->ARB_texture_buffer_object_rgb32 && - extensions->ARB_shader_image_load_store; + extensions->ARB_texture_buffer_object_rgb32; extensions->EXT_framebuffer_sRGB = screen->get_param(screen, PIPE_CAP_DEST_SURFACE_SRGB_CONTROL) && @@ -1683,6 +1684,7 @@ void st_init_extensions(struct pipe_screen *screen, * these are redunant, but simpler to just have a (near-)exact copy here. */ extensions->ARB_ES3_1_compatibility = + consts->Program[MESA_SHADER_FRAGMENT].MaxImageUniforms && extensions->ARB_ES3_compatibility && extensions->ARB_arrays_of_arrays && extensions->ARB_compute_shader && @@ -1715,10 +1717,10 @@ void st_init_extensions(struct pipe_screen *screen, consts->NoPrimitiveBoundingBoxOutput = true; extensions->ANDROID_extension_pack_es31a = + consts->Program[MESA_SHADER_FRAGMENT].MaxImageUniforms && extensions->KHR_texture_compression_astc_ldr && extensions->KHR_blend_equation_advanced && extensions->OES_sample_variables && - extensions->ARB_shader_image_load_store && extensions->ARB_texture_stencil8 && extensions->ARB_texture_multisample && extensions->OES_copy_image &&