Commit 32749b94 by Lingfeng Yang Committed by Commit Bot

GLES1: Alpha test

- Update test expectations BUG=angleproject:2306 Change-Id: Ib49900c7c4d6b808ebfab9483d42d3fd98644f9e Reviewed-on: https://chromium-review.googlesource.com/1079991 Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 0c4e08e9
...@@ -146,6 +146,15 @@ Error GLES1Renderer::prepareForDraw(Context *context, State *glState) ...@@ -146,6 +146,15 @@ Error GLES1Renderer::prepareForDraw(Context *context, State *glState)
texCubeEnables.data()); texCubeEnables.data());
} }
// Alpha test
{
setUniform1i(programObject, mProgramState.enableAlphaTestLoc,
glState->getEnableFeature(GL_ALPHA_TEST));
setUniform1i(programObject, mProgramState.alphaFuncLoc,
ToGLenum(gles1State.mAlphaTestFunc));
setUniform1f(programObject, mProgramState.alphaTestRefLoc, gles1State.mAlphaTestRef);
}
// Shading, materials, and lighting // Shading, materials, and lighting
{ {
setUniform1i(programObject, mProgramState.shadeModelFlatLoc, setUniform1i(programObject, mProgramState.shadeModelFlatLoc,
...@@ -434,6 +443,10 @@ Error GLES1Renderer::initializeRendererProgram(Context *context, State *glState) ...@@ -434,6 +443,10 @@ Error GLES1Renderer::initializeRendererProgram(Context *context, State *glState)
mProgramState.enableTextureCubeMapLoc = mProgramState.enableTextureCubeMapLoc =
programObject->getUniformLocation("enable_texture_cube_map"); programObject->getUniformLocation("enable_texture_cube_map");
mProgramState.enableAlphaTestLoc = programObject->getUniformLocation("enable_alpha_test");
mProgramState.alphaFuncLoc = programObject->getUniformLocation("alpha_func");
mProgramState.alphaTestRefLoc = programObject->getUniformLocation("alpha_test_ref");
mProgramState.shadeModelFlatLoc = programObject->getUniformLocation("shade_model_flat"); mProgramState.shadeModelFlatLoc = programObject->getUniformLocation("shade_model_flat");
mProgramState.enableLightingLoc = programObject->getUniformLocation("enable_lighting"); mProgramState.enableLightingLoc = programObject->getUniformLocation("enable_lighting");
mProgramState.enableRescaleNormalLoc = mProgramState.enableRescaleNormalLoc =
......
...@@ -94,6 +94,11 @@ class GLES1Renderer final : angle::NonCopyable ...@@ -94,6 +94,11 @@ class GLES1Renderer final : angle::NonCopyable
GLint textureMatrixLoc; GLint textureMatrixLoc;
GLint modelviewInvTrLoc; GLint modelviewInvTrLoc;
// Alpha test
GLint enableAlphaTestLoc;
GLint alphaFuncLoc;
GLint alphaTestRefLoc;
// Shading, materials, and lighting // Shading, materials, and lighting
GLint shadeModelFlatLoc; GLint shadeModelFlatLoc;
GLint enableLightingLoc; GLint enableLightingLoc;
......
...@@ -174,6 +174,12 @@ in vec4 texcoord1_varying; ...@@ -174,6 +174,12 @@ in vec4 texcoord1_varying;
in vec4 texcoord2_varying; in vec4 texcoord2_varying;
in vec4 texcoord3_varying; in vec4 texcoord3_varying;
// Alpha test///////////////////////////////////////////////////////////////////
uniform bool enable_alpha_test;
uniform int alpha_func;
uniform float alpha_test_ref;
// Shading: flat shading, lighting, and materials/////////////////////////////// // Shading: flat shading, lighting, and materials///////////////////////////////
uniform bool shade_model_flat; uniform bool shade_model_flat;
...@@ -371,6 +377,43 @@ vec4 doLighting(vec4 currentFragment) { ...@@ -371,6 +377,43 @@ vec4 doLighting(vec4 currentFragment) {
return lightingResult; return lightingResult;
} }
bool doAlphaTest(vec4 currentFragment)
{
bool shouldPassAlpha = false;
float incAlpha = currentFragment.a;
switch (alpha_func)
{
case kNever:
shouldPassAlpha = false;
break;
case kLess:
shouldPassAlpha = incAlpha < alpha_test_ref;
break;
case kLequal:
shouldPassAlpha = incAlpha <= alpha_test_ref;
break;
case kEqual:
shouldPassAlpha = incAlpha == alpha_test_ref;
break;
case kGequal:
shouldPassAlpha = incAlpha >= alpha_test_ref;
break;
case kGreater:
shouldPassAlpha = incAlpha > alpha_test_ref;
break;
case kNotequal:
shouldPassAlpha = incAlpha != alpha_test_ref;
break;
case kAlways:
default:
shouldPassAlpha = true;
break;
}
return shouldPassAlpha;
}
)"; )";
constexpr char kGLES1DrawFShaderMain[] = R"( constexpr char kGLES1DrawFShaderMain[] = R"(
...@@ -395,6 +438,11 @@ void main() ...@@ -395,6 +438,11 @@ void main()
currentFragment = doLighting(currentFragment); currentFragment = doLighting(currentFragment);
} }
if (enable_alpha_test && !doAlphaTest(currentFragment))
{
discard;
}
frag_color = currentFragment; frag_color = currentFragment;
} }
)"; )";
...@@ -152,7 +152,6 @@ TEST_P(GLES1ConformanceTest, AmbScene) ...@@ -152,7 +152,6 @@ TEST_P(GLES1ConformanceTest, AmbScene)
TEST_P(GLES1ConformanceTest, APFunc) TEST_P(GLES1ConformanceTest, APFunc)
{ {
ANGLE_SKIP_TEST_IF(true);
ASSERT_NE(CONFORMANCE_TEST_ERROR, APFuncExec()); ASSERT_NE(CONFORMANCE_TEST_ERROR, APFuncExec());
} }
...@@ -320,7 +319,6 @@ TEST_P(GLES1ConformanceTest, MustPass) ...@@ -320,7 +319,6 @@ TEST_P(GLES1ConformanceTest, MustPass)
TEST_P(GLES1ConformanceTest, PackedPixels) TEST_P(GLES1ConformanceTest, PackedPixels)
{ {
ANGLE_SKIP_TEST_IF(true);
ASSERT_NE(CONFORMANCE_TEST_ERROR, PackedPixelsExec()); ASSERT_NE(CONFORMANCE_TEST_ERROR, PackedPixelsExec());
} }
......
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