Commit 6c60641d by Lingfeng Yang Committed by Commit Bot

GLES1: Multitexture pipeline

- Update test expectations BUG=angleproject:2306 Change-Id: I4a0376db1d095d7b14e00a5779631dcf2a6c427c Reviewed-on: https://chromium-review.googlesource.com/1093795 Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 071fc3f9
......@@ -115,6 +115,8 @@ Error GLES1Renderer::prepareForDraw(Context *context, State *glState)
std::array<GLint, kTexUnitCount> &tex2DEnables = uniformBuffers.tex2DEnables;
std::array<GLint, kTexUnitCount> &texCubeEnables = uniformBuffers.texCubeEnables;
std::vector<int> tex2DFormats = {GL_RGBA, GL_RGBA, GL_RGBA, GL_RGBA};
for (int i = 0; i < kTexUnitCount; i++)
{
// GL_OES_cube_map allows only one of TEXTURE_2D / TEXTURE_CUBE_MAP
......@@ -138,12 +140,93 @@ Error GLES1Renderer::prepareForDraw(Context *context, State *glState)
texCubeEnables[i] = gles1State.isTextureTargetEnabled(i, TextureType::CubeMap);
tex2DEnables[i] =
!texCubeEnables[i] && (gles1State.isTextureTargetEnabled(i, TextureType::_2D));
Texture *curr2DTexture = glState->getSamplerTexture(i, TextureType::_2D);
if (curr2DTexture)
{
tex2DFormats[i] = gl::GetUnsizedFormat(
curr2DTexture->getFormat(TextureTarget::_2D, 0).info->internalFormat);
}
}
setUniform1iv(programObject, mProgramState.enableTexture2DLoc, kTexUnitCount,
tex2DEnables.data());
setUniform1iv(programObject, mProgramState.enableTextureCubeMapLoc, kTexUnitCount,
texCubeEnables.data());
setUniform1iv(programObject, mProgramState.textureFormatLoc, kTexUnitCount,
tex2DFormats.data());
for (int i = 0; i < kTexUnitCount; i++)
{
const auto &env = gles1State.textureEnvironment(i);
uniformBuffers.texEnvModes[i] = ToGLenum(env.mode);
uniformBuffers.texCombineRgbs[i] = ToGLenum(env.combineRgb);
uniformBuffers.texCombineAlphas[i] = ToGLenum(env.combineAlpha);
uniformBuffers.texCombineSrc0Rgbs[i] = ToGLenum(env.src0Rgb);
uniformBuffers.texCombineSrc0Alphas[i] = ToGLenum(env.src0Alpha);
uniformBuffers.texCombineSrc1Rgbs[i] = ToGLenum(env.src1Rgb);
uniformBuffers.texCombineSrc1Alphas[i] = ToGLenum(env.src1Alpha);
uniformBuffers.texCombineSrc2Rgbs[i] = ToGLenum(env.src2Rgb);
uniformBuffers.texCombineSrc2Alphas[i] = ToGLenum(env.src2Alpha);
uniformBuffers.texCombineOp0Rgbs[i] = ToGLenum(env.op0Rgb);
uniformBuffers.texCombineOp0Alphas[i] = ToGLenum(env.op0Alpha);
uniformBuffers.texCombineOp1Rgbs[i] = ToGLenum(env.op1Rgb);
uniformBuffers.texCombineOp1Alphas[i] = ToGLenum(env.op1Alpha);
uniformBuffers.texCombineOp2Rgbs[i] = ToGLenum(env.op2Rgb);
uniformBuffers.texCombineOp2Alphas[i] = ToGLenum(env.op2Alpha);
uniformBuffers.texEnvColors[i][0] = env.color.red;
uniformBuffers.texEnvColors[i][1] = env.color.green;
uniformBuffers.texEnvColors[i][2] = env.color.blue;
uniformBuffers.texEnvColors[i][3] = env.color.alpha;
uniformBuffers.texEnvRgbScales[i] = env.rgbScale;
uniformBuffers.texEnvAlphaScales[i] = env.alphaScale;
}
setUniform1iv(programObject, mProgramState.textureEnvModeLoc, kTexUnitCount,
uniformBuffers.texEnvModes.data());
setUniform1iv(programObject, mProgramState.combineRgbLoc, kTexUnitCount,
uniformBuffers.texCombineRgbs.data());
setUniform1iv(programObject, mProgramState.combineAlphaLoc, kTexUnitCount,
uniformBuffers.texCombineAlphas.data());
setUniform1iv(programObject, mProgramState.src0rgbLoc, kTexUnitCount,
uniformBuffers.texCombineSrc0Rgbs.data());
setUniform1iv(programObject, mProgramState.src0alphaLoc, kTexUnitCount,
uniformBuffers.texCombineSrc0Alphas.data());
setUniform1iv(programObject, mProgramState.src1rgbLoc, kTexUnitCount,
uniformBuffers.texCombineSrc1Rgbs.data());
setUniform1iv(programObject, mProgramState.src1alphaLoc, kTexUnitCount,
uniformBuffers.texCombineSrc1Alphas.data());
setUniform1iv(programObject, mProgramState.src2rgbLoc, kTexUnitCount,
uniformBuffers.texCombineSrc2Rgbs.data());
setUniform1iv(programObject, mProgramState.src2alphaLoc, kTexUnitCount,
uniformBuffers.texCombineSrc2Alphas.data());
setUniform1iv(programObject, mProgramState.op0rgbLoc, kTexUnitCount,
uniformBuffers.texCombineOp0Rgbs.data());
setUniform1iv(programObject, mProgramState.op0alphaLoc, kTexUnitCount,
uniformBuffers.texCombineOp0Alphas.data());
setUniform1iv(programObject, mProgramState.op1rgbLoc, kTexUnitCount,
uniformBuffers.texCombineOp1Rgbs.data());
setUniform1iv(programObject, mProgramState.op1alphaLoc, kTexUnitCount,
uniformBuffers.texCombineOp1Alphas.data());
setUniform1iv(programObject, mProgramState.op2rgbLoc, kTexUnitCount,
uniformBuffers.texCombineOp2Rgbs.data());
setUniform1iv(programObject, mProgramState.op2alphaLoc, kTexUnitCount,
uniformBuffers.texCombineOp2Alphas.data());
setUniform4fv(programObject, mProgramState.textureEnvColorLoc, kTexUnitCount,
reinterpret_cast<float *>(uniformBuffers.texEnvColors.data()));
setUniform1fv(programObject, mProgramState.rgbScaleLoc, kTexUnitCount,
uniformBuffers.texEnvRgbScales.data());
setUniform1fv(programObject, mProgramState.alphaScaleLoc, kTexUnitCount,
uniformBuffers.texEnvAlphaScales.data());
}
// Alpha test
......@@ -423,6 +506,7 @@ Error GLES1Renderer::initializeRendererProgram(Context *context, State *glState)
fragmentStream << kGLES1DrawFShaderHeader;
fragmentStream << kGLES1DrawFShaderUniformDefs;
fragmentStream << kGLES1DrawFShaderFunctions;
fragmentStream << kGLES1DrawFShaderMultitexturing;
fragmentStream << kGLES1DrawFShaderMain;
ANGLE_TRY(compileShader(context, ShaderType::Fragment, fragmentStream.str().c_str(),
......@@ -472,6 +556,26 @@ Error GLES1Renderer::initializeRendererProgram(Context *context, State *glState)
mProgramState.enableTextureCubeMapLoc =
programObject->getUniformLocation("enable_texture_cube_map");
mProgramState.textureFormatLoc = programObject->getUniformLocation("texture_format");
mProgramState.textureEnvModeLoc = programObject->getUniformLocation("texture_env_mode");
mProgramState.combineRgbLoc = programObject->getUniformLocation("combine_rgb");
mProgramState.combineAlphaLoc = programObject->getUniformLocation("combine_alpha");
mProgramState.src0rgbLoc = programObject->getUniformLocation("src0_rgb");
mProgramState.src0alphaLoc = programObject->getUniformLocation("src0_alpha");
mProgramState.src1rgbLoc = programObject->getUniformLocation("src1_rgb");
mProgramState.src1alphaLoc = programObject->getUniformLocation("src1_alpha");
mProgramState.src2rgbLoc = programObject->getUniformLocation("src2_rgb");
mProgramState.src2alphaLoc = programObject->getUniformLocation("src2_alpha");
mProgramState.op0rgbLoc = programObject->getUniformLocation("op0_rgb");
mProgramState.op0alphaLoc = programObject->getUniformLocation("op0_alpha");
mProgramState.op1rgbLoc = programObject->getUniformLocation("op1_rgb");
mProgramState.op1alphaLoc = programObject->getUniformLocation("op1_alpha");
mProgramState.op2rgbLoc = programObject->getUniformLocation("op2_rgb");
mProgramState.op2alphaLoc = programObject->getUniformLocation("op2_alpha");
mProgramState.textureEnvColorLoc = programObject->getUniformLocation("texture_env_color");
mProgramState.rgbScaleLoc = programObject->getUniformLocation("texture_env_rgb_scale");
mProgramState.alphaScaleLoc = programObject->getUniformLocation("texture_env_alpha_scale");
mProgramState.enableAlphaTestLoc = programObject->getUniformLocation("enable_alpha_test");
mProgramState.alphaFuncLoc = programObject->getUniformLocation("alpha_func");
mProgramState.alphaTestRefLoc = programObject->getUniformLocation("alpha_test_ref");
......
......@@ -101,6 +101,27 @@ class GLES1Renderer final : angle::NonCopyable
std::array<GLint, kTexUnitCount> tex2DSamplerLocs;
std::array<GLint, kTexUnitCount> texCubeSamplerLocs;
GLint textureFormatLoc;
GLint textureEnvModeLoc;
GLint combineRgbLoc;
GLint combineAlphaLoc;
GLint src0rgbLoc;
GLint src0alphaLoc;
GLint src1rgbLoc;
GLint src1alphaLoc;
GLint src2rgbLoc;
GLint src2alphaLoc;
GLint op0rgbLoc;
GLint op0alphaLoc;
GLint op1rgbLoc;
GLint op1alphaLoc;
GLint op2rgbLoc;
GLint op2alphaLoc;
GLint textureEnvColorLoc;
GLint rgbScaleLoc;
GLint alphaScaleLoc;
// Alpha test
GLint enableAlphaTestLoc;
GLint alphaFuncLoc;
......@@ -154,6 +175,26 @@ class GLES1Renderer final : angle::NonCopyable
std::array<GLint, kTexUnitCount> tex2DEnables;
std::array<GLint, kTexUnitCount> texCubeEnables;
std::array<GLint, kTexUnitCount> texEnvModes;
std::array<GLint, kTexUnitCount> texCombineRgbs;
std::array<GLint, kTexUnitCount> texCombineAlphas;
std::array<GLint, kTexUnitCount> texCombineSrc0Rgbs;
std::array<GLint, kTexUnitCount> texCombineSrc0Alphas;
std::array<GLint, kTexUnitCount> texCombineSrc1Rgbs;
std::array<GLint, kTexUnitCount> texCombineSrc1Alphas;
std::array<GLint, kTexUnitCount> texCombineSrc2Rgbs;
std::array<GLint, kTexUnitCount> texCombineSrc2Alphas;
std::array<GLint, kTexUnitCount> texCombineOp0Rgbs;
std::array<GLint, kTexUnitCount> texCombineOp0Alphas;
std::array<GLint, kTexUnitCount> texCombineOp1Rgbs;
std::array<GLint, kTexUnitCount> texCombineOp1Alphas;
std::array<GLint, kTexUnitCount> texCombineOp2Rgbs;
std::array<GLint, kTexUnitCount> texCombineOp2Alphas;
std::array<Vec4Uniform, kTexUnitCount> texEnvColors;
std::array<GLfloat, kTexUnitCount> texEnvRgbScales;
std::array<GLfloat, kTexUnitCount> texEnvAlphaScales;
// Lighting
std::array<GLint, kLightCount> lightEnables;
std::array<Vec4Uniform, kLightCount> lightAmbients;
......
......@@ -69,7 +69,9 @@ TEST_P(BasicDrawTest, EnableDisableTexture)
// Texturing is disabled; still red;
drawRedQuad();
// Texturing enabled; is green.
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
// Texturing enabled; is green (provided modulate w/ white)
glEnable(GL_TEXTURE_2D);
EXPECT_GL_NO_ERROR();
glDrawArrays(GL_TRIANGLES, 0, 6);
......
......@@ -197,7 +197,6 @@ TEST_P(GLES1ConformanceTest, ColRamp)
TEST_P(GLES1ConformanceTest, CopyTex)
{
ANGLE_SKIP_TEST_IF(true);
ASSERT_NE(CONFORMANCE_TEST_ERROR, CopyTexExec());
}
......@@ -304,7 +303,6 @@ TEST_P(GLES1ConformanceTest, MatrixStack)
TEST_P(GLES1ConformanceTest, MultiTex)
{
ANGLE_SKIP_TEST_IF(true);
ASSERT_NE(CONFORMANCE_TEST_ERROR, MultiTexExec());
}
......@@ -414,7 +412,6 @@ TEST_P(GLES1ConformanceTest, SpotExpDir)
TEST_P(GLES1ConformanceTest, TexDecal)
{
ANGLE_SKIP_TEST_IF(true);
ASSERT_NE(CONFORMANCE_TEST_ERROR, TexDecalExec());
}
......@@ -426,7 +423,6 @@ TEST_P(GLES1ConformanceTest, TexPalet)
TEST_P(GLES1ConformanceTest, TextureEdgeClamp)
{
ANGLE_SKIP_TEST_IF(true);
ASSERT_NE(CONFORMANCE_TEST_ERROR, TextureEdgeClampExec());
}
......@@ -531,7 +527,6 @@ TEST_P(GLES1ConformanceTest, Gets)
TEST_P(GLES1ConformanceTest, TexCombine)
{
ANGLE_SKIP_TEST_IF(true);
ASSERT_NE(CONFORMANCE_TEST_ERROR, TexCombineExec());
}
......
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