Commit ff5c63ee by Geoff Lang Committed by Commit Bot

Allow dynamically enabling shading language extensions.

GL_OES_standard_derivatives, GL_EXT_shader_texture_lod and GL_EXT_frag_depth. TEST=conformance2/extensions/promoted-extensions-in-shaders TEST=conformance/glsl/misc/shader-with-dfdx.frag BUG=angleproject:1719 Change-Id: Ic0bd50c6a222940cc8de903f88f19a4f5ee08088 Reviewed-on: https://chromium-review.googlesource.com/476030 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent de32c2e1
......@@ -610,12 +610,12 @@ const ExtensionInfoMap &GetExtensionInfoMap()
map["GL_ANGLE_framebuffer_multisample"] = esOnlyExtension(&Extensions::framebufferMultisample);
map["GL_ANGLE_instanced_arrays"] = esOnlyExtension(&Extensions::instancedArrays);
map["GL_ANGLE_pack_reverse_row_order"] = esOnlyExtension(&Extensions::packReverseRowOrder);
map["GL_OES_standard_derivatives"] = esOnlyExtension(&Extensions::standardDerivatives);
map["GL_EXT_shader_texture_lod"] = esOnlyExtension(&Extensions::shaderTextureLOD);
map["GL_OES_standard_derivatives"] = enableableExtension(&Extensions::standardDerivatives);
map["GL_EXT_shader_texture_lod"] = enableableExtension(&Extensions::shaderTextureLOD);
map["GL_NV_shader_framebuffer_fetch"] = esOnlyExtension(&Extensions::NVshaderFramebufferFetch);
map["GL_ARM_shader_framebuffer_fetch"] = esOnlyExtension(&Extensions::ARMshaderFramebufferFetch);
map["GL_EXT_shader_framebuffer_fetch"] = esOnlyExtension(&Extensions::shaderFramebufferFetch);
map["GL_EXT_frag_depth"] = esOnlyExtension(&Extensions::fragDepth);
map["GL_EXT_frag_depth"] = enableableExtension(&Extensions::fragDepth);
map["GL_ANGLE_texture_usage"] = esOnlyExtension(&Extensions::textureUsage);
map["GL_ANGLE_translated_shader_source"] = esOnlyExtension(&Extensions::translatedShaderSource);
map["GL_OES_fbo_render_mipmap"] = esOnlyExtension(&Extensions::fboRenderMipmap);
......
......@@ -149,6 +149,79 @@ TEST_P(WebGLCompatibilityTest, EnableExtensionUintIndices)
}
}
// Test enabling the GL_OES_standard_derivatives extension
TEST_P(WebGLCompatibilityTest, EnableExtensionStandardDerivitives)
{
EXPECT_FALSE(extensionEnabled("GL_OES_standard_derivatives"));
const std::string source =
"#extension GL_OES_standard_derivatives : require\n"
"void main() { gl_FragColor = vec4(dFdx(vec2(1.0, 1.0)).x, 1, 0, 1); }\n";
ASSERT_EQ(0u, CompileShader(GL_FRAGMENT_SHADER, source));
if (extensionRequestable("GL_OES_standard_derivatives"))
{
glRequestExtensionANGLE("GL_OES_standard_derivatives");
EXPECT_GL_NO_ERROR();
EXPECT_TRUE(extensionEnabled("GL_OES_standard_derivatives"));
GLuint shader = CompileShader(GL_FRAGMENT_SHADER, source);
ASSERT_NE(0u, shader);
glDeleteShader(shader);
}
}
// Test enabling the GL_EXT_shader_texture_lod extension
TEST_P(WebGLCompatibilityTest, EnableExtensionTextureLOD)
{
EXPECT_FALSE(extensionEnabled("GL_EXT_shader_texture_lod"));
const std::string source =
"#extension GL_EXT_shader_texture_lod : require\n"
"uniform sampler2D u_texture;\n"
"void main() {\n"
" gl_FragColor = texture2DGradEXT(u_texture, vec2(0.0, 0.0), vec2(0.0, 0.0), vec2(0.0, "
"0.0));\n"
"}\n";
ASSERT_EQ(0u, CompileShader(GL_FRAGMENT_SHADER, source));
if (extensionRequestable("GL_EXT_shader_texture_lod"))
{
glRequestExtensionANGLE("GL_EXT_shader_texture_lod");
EXPECT_GL_NO_ERROR();
EXPECT_TRUE(extensionEnabled("GL_EXT_shader_texture_lod"));
GLuint shader = CompileShader(GL_FRAGMENT_SHADER, source);
ASSERT_NE(0u, shader);
glDeleteShader(shader);
}
}
// Test enabling the GL_EXT_frag_depth extension
TEST_P(WebGLCompatibilityTest, EnableExtensionFragDepth)
{
EXPECT_FALSE(extensionEnabled("GL_EXT_frag_depth"));
const std::string source =
"#extension GL_EXT_frag_depth : require\n"
"void main() {\n"
" gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n"
" gl_FragDepthEXT = 1.0;\n"
"}\n";
ASSERT_EQ(0u, CompileShader(GL_FRAGMENT_SHADER, source));
if (extensionRequestable("GL_EXT_frag_depth"))
{
glRequestExtensionANGLE("GL_EXT_frag_depth");
EXPECT_GL_NO_ERROR();
EXPECT_TRUE(extensionEnabled("GL_EXT_frag_depth"));
GLuint shader = CompileShader(GL_FRAGMENT_SHADER, source);
ASSERT_NE(0u, shader);
glDeleteShader(shader);
}
}
// Test enabling the GL_EXT_texture_filter_anisotropic extension
TEST_P(WebGLCompatibilityTest, EnableExtensionTextureFilterAnisotropic)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment