Commit 50cac57a by Geoff Lang Committed by Commit Bot

Make GL_EXT_blend_minmax enableable.

BUG=angleproject:1523 Change-Id: I73df8d9a23c3d22792abde44b495be7478abfc22 Reviewed-on: https://chromium-review.googlesource.com/685648 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 8c7133ca
...@@ -653,7 +653,7 @@ const ExtensionInfoMap &GetExtensionInfoMap() ...@@ -653,7 +653,7 @@ const ExtensionInfoMap &GetExtensionInfoMap()
map["GL_EXT_disjoint_timer_query"] = esOnlyExtension(&Extensions::disjointTimerQuery); map["GL_EXT_disjoint_timer_query"] = esOnlyExtension(&Extensions::disjointTimerQuery);
map["GL_EXT_robustness"] = esOnlyExtension(&Extensions::robustness); map["GL_EXT_robustness"] = esOnlyExtension(&Extensions::robustness);
map["GL_KHR_robust_buffer_access_behavior"] = esOnlyExtension(&Extensions::robustBufferAccessBehavior); map["GL_KHR_robust_buffer_access_behavior"] = esOnlyExtension(&Extensions::robustBufferAccessBehavior);
map["GL_EXT_blend_minmax"] = esOnlyExtension(&Extensions::blendMinMax); map["GL_EXT_blend_minmax"] = enableableExtension(&Extensions::blendMinMax);
map["GL_ANGLE_framebuffer_blit"] = esOnlyExtension(&Extensions::framebufferBlit); map["GL_ANGLE_framebuffer_blit"] = esOnlyExtension(&Extensions::framebufferBlit);
map["GL_ANGLE_framebuffer_multisample"] = esOnlyExtension(&Extensions::framebufferMultisample); map["GL_ANGLE_framebuffer_multisample"] = esOnlyExtension(&Extensions::framebufferMultisample);
map["GL_ANGLE_instanced_arrays"] = esOnlyExtension(&Extensions::instancedArrays); map["GL_ANGLE_instanced_arrays"] = esOnlyExtension(&Extensions::instancedArrays);
......
...@@ -4398,16 +4398,18 @@ bool ValidateBindRenderbuffer(ValidationContext *context, GLenum target, GLuint ...@@ -4398,16 +4398,18 @@ bool ValidateBindRenderbuffer(ValidationContext *context, GLenum target, GLuint
return true; return true;
} }
static bool ValidBlendEquationMode(GLenum mode) static bool ValidBlendEquationMode(const ValidationContext *context, GLenum mode)
{ {
switch (mode) switch (mode)
{ {
case GL_FUNC_ADD: case GL_FUNC_ADD:
case GL_FUNC_SUBTRACT: case GL_FUNC_SUBTRACT:
case GL_FUNC_REVERSE_SUBTRACT: case GL_FUNC_REVERSE_SUBTRACT:
return true;
case GL_MIN: case GL_MIN:
case GL_MAX: case GL_MAX:
return true; return context->getClientVersion() >= ES_3_0 || context->getExtensions().blendMinMax;
default: default:
return false; return false;
...@@ -4425,7 +4427,7 @@ bool ValidateBlendColor(ValidationContext *context, ...@@ -4425,7 +4427,7 @@ bool ValidateBlendColor(ValidationContext *context,
bool ValidateBlendEquation(ValidationContext *context, GLenum mode) bool ValidateBlendEquation(ValidationContext *context, GLenum mode)
{ {
if (!ValidBlendEquationMode(mode)) if (!ValidBlendEquationMode(context, mode))
{ {
ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidBlendEquation); ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidBlendEquation);
return false; return false;
...@@ -4436,13 +4438,13 @@ bool ValidateBlendEquation(ValidationContext *context, GLenum mode) ...@@ -4436,13 +4438,13 @@ bool ValidateBlendEquation(ValidationContext *context, GLenum mode)
bool ValidateBlendEquationSeparate(ValidationContext *context, GLenum modeRGB, GLenum modeAlpha) bool ValidateBlendEquationSeparate(ValidationContext *context, GLenum modeRGB, GLenum modeAlpha)
{ {
if (!ValidBlendEquationMode(modeRGB)) if (!ValidBlendEquationMode(context, modeRGB))
{ {
ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidBlendEquation); ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidBlendEquation);
return false; return false;
} }
if (!ValidBlendEquationMode(modeAlpha)) if (!ValidBlendEquationMode(context, modeAlpha))
{ {
ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidBlendEquation); ANGLE_VALIDATION_ERR(context, InvalidEnum(), InvalidBlendEquation);
return false; return false;
......
...@@ -552,6 +552,31 @@ TEST_P(WebGLCompatibilityTest, EnableRenderMipmapExtension) ...@@ -552,6 +552,31 @@ TEST_P(WebGLCompatibilityTest, EnableRenderMipmapExtension)
} }
} }
// Test enabling the GL_EXT_blend_minmax extension
TEST_P(WebGLCompatibilityTest, EnableBlendMinMaxExtension)
{
EXPECT_FALSE(extensionEnabled("GL_EXT_blend_minmax"));
// This extensions become core in in ES3/WebGL2.
ANGLE_SKIP_TEST_IF(getClientMajorVersion() >= 3);
glBlendEquation(GL_MIN);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
glBlendEquation(GL_MAX);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
if (extensionRequestable("GL_EXT_blend_minmax"))
{
glRequestExtensionANGLE("GL_EXT_blend_minmax");
EXPECT_GL_NO_ERROR();
glBlendEquation(GL_MIN);
glBlendEquation(GL_MAX);
EXPECT_GL_NO_ERROR();
}
}
// Verify that the context generates the correct error when the framebuffer attachments are // Verify that the context generates the correct error when the framebuffer attachments are
// different sizes // different sizes
TEST_P(WebGLCompatibilityTest, FramebufferAttachmentSizeMissmatch) TEST_P(WebGLCompatibilityTest, FramebufferAttachmentSizeMissmatch)
......
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