Commit 4836acc5 by Olli Etuaho Committed by Commit Bot

Rename and reorganize MultiviewRenderTestBase

MultiviewRenderTestBase is renamed to MultiviewFramebufferTestBase since the functionality it has is mostly to set up a framebuffer. This cleans up the test class without including functional changes to ease diagnosis of issues with resource init/teardown. BUG=angleproject:2765 TEST=angle_end2end_tests Change-Id: I0debd6a7a53a2e6bff7100d07b29313d66a79cb5 Reviewed-on: https://chromium-review.googlesource.com/1181052Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent d20e80b8
......@@ -65,19 +65,19 @@ std::ostream &operator<<(std::ostream &os, const MultiviewRenderTestParams &para
return os;
}
class MultiviewRenderTestBase : public MultiviewTestBase
class MultiviewFramebufferTestBase : public MultiviewTestBase
{
protected:
MultiviewRenderTestBase(const PlatformParameters &params, GLenum multiviewLayout)
MultiviewFramebufferTestBase(const PlatformParameters &params, GLenum multiviewLayout)
: MultiviewTestBase(params),
mMultiviewLayout(multiviewLayout),
mViewWidth(0),
mViewHeight(0),
mNumViews(0)
mNumViews(0),
mMultiviewLayout(multiviewLayout)
{
}
void RenderTestSetUp() { MultiviewTestBase::MultiviewTestBaseSetUp(); }
void createFBO(int viewWidth, int height, int numViews, int numLayers, int baseViewIndex)
void FramebufferTestSetUp() { MultiviewTestBase::MultiviewTestBaseSetUp(); }
void updateFBOs(int viewWidth, int height, int numViews, int numLayers, int baseViewIndex)
{
ASSERT(numViews + baseViewIndex <= numLayers);
......@@ -204,11 +204,13 @@ class MultiviewRenderTestBase : public MultiviewTestBase
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void createFBO(int viewWidth, int height, int numViews)
void updateFBOs(int viewWidth, int height, int numViews)
{
createFBO(viewWidth, height, numViews, numViews, 0);
updateFBOs(viewWidth, height, numViews, numViews, 0);
}
void bindMemberDrawFramebuffer() { glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mDrawFramebuffer); }
GLColor GetViewColor(int x, int y, int view)
{
switch (mMultiviewLayout)
......@@ -227,20 +229,22 @@ class MultiviewRenderTestBase : public MultiviewTestBase
GLTexture mColorTexture;
GLTexture mDepthTexture;
GLFramebuffer mDrawFramebuffer;
std::vector<GLFramebuffer> mReadFramebuffer;
GLenum mMultiviewLayout;
int mViewWidth;
int mViewHeight;
int mNumViews;
private:
GLFramebuffer mDrawFramebuffer;
std::vector<GLFramebuffer> mReadFramebuffer;
GLenum mMultiviewLayout;
};
class MultiviewRenderTest : public MultiviewRenderTestBase,
class MultiviewRenderTest : public MultiviewFramebufferTestBase,
public ::testing::TestWithParam<MultiviewRenderTestParams>
{
protected:
MultiviewRenderTest() : MultiviewRenderTestBase(GetParam(), GetParam().mMultiviewLayout) {}
void SetUp() override { MultiviewRenderTestBase::RenderTestSetUp(); }
MultiviewRenderTest() : MultiviewFramebufferTestBase(GetParam(), GetParam().mMultiviewLayout) {}
void SetUp() override { MultiviewFramebufferTestBase::FramebufferTestSetUp(); }
void overrideWorkaroundsD3D(WorkaroundsD3D *workarounds) override
{
......@@ -288,7 +292,7 @@ class MultiviewRenderDualViewTest : public MultiviewRenderTest
return;
}
createFBO(2, 1, 2);
updateFBOs(2, 1, 2);
mProgram = CompileProgram(kDualViewVSSource, kDualViewFSSource);
ASSERT_NE(mProgram, 0u);
glUseProgram(mProgram);
......@@ -412,30 +416,30 @@ class MultiviewRenderPrimitiveTest : public MultiviewRenderTest
GLBuffer mVBO;
};
class MultiviewSideBySideRenderTest : public MultiviewRenderTestBase,
class MultiviewSideBySideRenderTest : public MultiviewFramebufferTestBase,
public ::testing::TestWithParam<MultiviewImplementationParams>
{
protected:
MultiviewSideBySideRenderTest()
: MultiviewRenderTestBase(GetParam(), GL_FRAMEBUFFER_MULTIVIEW_SIDE_BY_SIDE_ANGLE)
: MultiviewFramebufferTestBase(GetParam(), GL_FRAMEBUFFER_MULTIVIEW_SIDE_BY_SIDE_ANGLE)
{
}
void SetUp() override { MultiviewRenderTestBase::RenderTestSetUp(); }
void SetUp() override { MultiviewFramebufferTestBase::FramebufferTestSetUp(); }
void overrideWorkaroundsD3D(WorkaroundsD3D *workarounds) override
{
workarounds->selectViewInGeometryShader = GetParam().mForceUseGeometryShaderOnD3D;
}
};
class MultiviewLayeredRenderTest : public MultiviewRenderTestBase,
class MultiviewLayeredRenderTest : public MultiviewFramebufferTestBase,
public ::testing::TestWithParam<MultiviewImplementationParams>
{
protected:
MultiviewLayeredRenderTest()
: MultiviewRenderTestBase(GetParam(), GL_FRAMEBUFFER_MULTIVIEW_LAYERED_ANGLE)
: MultiviewFramebufferTestBase(GetParam(), GL_FRAMEBUFFER_MULTIVIEW_LAYERED_ANGLE)
{
}
void SetUp() override { MultiviewRenderTestBase::RenderTestSetUp(); }
void SetUp() override { MultiviewFramebufferTestBase::FramebufferTestSetUp(); }
void overrideWorkaroundsD3D(WorkaroundsD3D *workarounds) override
{
workarounds->selectViewInGeometryShader = GetParam().mForceUseGeometryShaderOnD3D;
......@@ -859,7 +863,7 @@ TEST_P(MultiviewRenderTest, DrawArraysFourViews)
" col = vec4(0,1,0,1);\n"
"}\n";
createFBO(4, 1, 4);
updateFBOs(4, 1, 4);
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
drawQuad(program, "vPosition", 0.0f, 1.0f, true);
......@@ -920,7 +924,7 @@ TEST_P(MultiviewRenderTest, DrawArraysInstanced)
const int kViewWidth = 2;
const int kViewHeight = 2;
const int kNumViews = 2;
createFBO(kViewWidth, kViewHeight, kNumViews);
updateFBOs(kViewWidth, kViewHeight, kNumViews);
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
drawQuadInstanced(program, "vPosition", 0.0f, 1.0f, true, 2u);
......@@ -984,7 +988,7 @@ TEST_P(MultiviewRenderTest, AttribDivisor)
const int kViewWidth = 4;
const int kViewHeight = 4;
const int kNumViews = 2;
createFBO(kViewWidth, kViewHeight, kNumViews);
updateFBOs(kViewWidth, kViewHeight, kNumViews);
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
GLBuffer xOffsetVBO;
......@@ -1033,7 +1037,7 @@ TEST_P(MultiviewRenderTest, DivisorOrderOfOperation)
return;
}
createFBO(1, 1, 2);
updateFBOs(1, 1, 2);
// Create multiview program.
const std::string &vs =
......@@ -1126,7 +1130,7 @@ TEST_P(MultiviewRenderTest, DivisorOrderOfOperation)
ASSERT_GL_NO_ERROR();
// Check that vertexAttribDivisor uses the number of views to update the divisor.
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mDrawFramebuffer);
bindMemberDrawFramebuffer();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(program);
glVertexAttribDivisor(1, 1);
......@@ -1146,7 +1150,7 @@ TEST_P(MultiviewRenderTest, DivisorOrderOfOperation)
ASSERT_GL_NO_ERROR();
// Check that useProgram uses the number of views to update the divisor.
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mDrawFramebuffer);
bindMemberDrawFramebuffer();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(program);
glDrawArraysInstanced(GL_TRIANGLES, 0, 6, 1);
......@@ -1166,7 +1170,7 @@ TEST_P(MultiviewRenderTest, DivisorOrderOfOperation)
{
// Call useProgram with vao[1] being active to guarantee that useProgram will adjust the
// divisor for vao[1] only.
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mDrawFramebuffer);
bindMemberDrawFramebuffer();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindVertexArray(vao[1]);
glUseProgram(program);
......@@ -1211,7 +1215,7 @@ TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryNothingVisible)
" col = vec4(1,0,0,0);\n"
"}\n";
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
createFBO(1, 1, 2);
updateFBOs(1, 1, 2);
GLuint result = drawAndRetrieveOcclusionQueryResult(program);
ASSERT_GL_NO_ERROR();
......@@ -1246,7 +1250,7 @@ TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryOnlyLeftVisible)
" col = vec4(1,0,0,0);\n"
"}\n";
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
createFBO(1, 1, 2);
updateFBOs(1, 1, 2);
GLuint result = drawAndRetrieveOcclusionQueryResult(program);
ASSERT_GL_NO_ERROR();
......@@ -1281,7 +1285,7 @@ TEST_P(MultiviewOcclusionQueryTest, OcclusionQueryOnlyRightVisible)
" col = vec4(1,0,0,0);\n"
"}\n";
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
createFBO(1, 1, 2);
updateFBOs(1, 1, 2);
GLuint result = drawAndRetrieveOcclusionQueryResult(program);
ASSERT_GL_NO_ERROR();
......@@ -1429,7 +1433,7 @@ TEST_P(MultiviewRenderPrimitiveTest, Points)
const int kViewWidth = 4;
const int kViewHeight = 2;
const int kNumViews = 2;
createFBO(kViewWidth, kViewHeight, kNumViews);
updateFBOs(kViewWidth, kViewHeight, kNumViews);
std::vector<Vector2I> windowCoordinates = {Vector2I(0, 0), Vector2I(3, 1)};
std::vector<Vector2> vertexDataInClipSpace =
......@@ -1464,7 +1468,7 @@ TEST_P(MultiviewRenderPrimitiveTest, Lines)
const int kViewWidth = 4;
const int kViewHeight = 2;
const int kNumViews = 2;
createFBO(kViewWidth, kViewHeight, kNumViews);
updateFBOs(kViewWidth, kViewHeight, kNumViews);
std::vector<Vector2I> windowCoordinates = {Vector2I(0, 0), Vector2I(4, 0)};
std::vector<Vector2> vertexDataInClipSpace =
......@@ -1501,7 +1505,7 @@ TEST_P(MultiviewRenderPrimitiveTest, LineStrip)
const int kViewWidth = 4;
const int kViewHeight = 2;
const int kNumViews = 2;
createFBO(kViewWidth, kViewHeight, kNumViews);
updateFBOs(kViewWidth, kViewHeight, kNumViews);
std::vector<Vector2I> windowCoordinates = {Vector2I(0, 0), Vector2I(3, 0), Vector2I(3, 2)};
std::vector<Vector2> vertexDataInClipSpace =
......@@ -1538,7 +1542,7 @@ TEST_P(MultiviewRenderPrimitiveTest, LineLoop)
const int kViewWidth = 4;
const int kViewHeight = 4;
const int kNumViews = 2;
createFBO(kViewWidth, kViewHeight, kNumViews);
updateFBOs(kViewWidth, kViewHeight, kNumViews);
std::vector<Vector2I> windowCoordinates = {Vector2I(0, 0), Vector2I(3, 0), Vector2I(3, 3),
Vector2I(0, 3)};
......@@ -1576,7 +1580,7 @@ TEST_P(MultiviewRenderPrimitiveTest, TriangleStrip)
const int kViewWidth = 2;
const int kViewHeight = 2;
const int kNumViews = 2;
createFBO(kViewWidth, kViewHeight, kNumViews);
updateFBOs(kViewWidth, kViewHeight, kNumViews);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
......@@ -1607,7 +1611,7 @@ TEST_P(MultiviewRenderPrimitiveTest, TriangleFan)
const int kViewWidth = 2;
const int kViewHeight = 2;
const int kNumViews = 2;
createFBO(kViewWidth, kViewHeight, kNumViews);
updateFBOs(kViewWidth, kViewHeight, kNumViews);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
......@@ -1630,7 +1634,7 @@ TEST_P(MultiviewSideBySideRenderTest, NoLeakingFragments)
return;
}
createFBO(2, 1, 2);
updateFBOs(2, 1, 2);
GLint viewportOffsets[4] = {1, 0, 3, 0};
glFramebufferTextureMultiviewSideBySideANGLE(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
......@@ -1780,7 +1784,7 @@ TEST_P(MultiviewRenderTest, ProgramRelinkUpdatesAttribDivisor)
}
{
createFBO(kViewWidth, kViewHeight, kNumViews);
updateFBOs(kViewWidth, kViewHeight, kNumViews);
drawQuadInstanced(program, "vPosition", 0.0f, 1.0f, true, 4u);
ASSERT_GL_NO_ERROR();
......@@ -1794,7 +1798,7 @@ TEST_P(MultiviewRenderTest, ProgramRelinkUpdatesAttribDivisor)
{
const int kNewNumViews = 3;
vsSource = generateVertexShaderSource(kNewNumViews);
createFBO(kViewWidth, kViewHeight, kNewNumViews);
updateFBOs(kViewWidth, kViewHeight, kNewNumViews);
GLuint vs = CompileShader(GL_VERTEX_SHADER, vsSource);
ASSERT_NE(0u, vs);
......@@ -1867,7 +1871,7 @@ TEST_P(MultiviewRenderTest, DivisorUpdatedOnProgramChange)
// Create a program and fbo with N views and draw N instances of a point horizontally.
for (int numViews = 2; numViews <= 4; ++numViews)
{
createFBO(4, 1, numViews);
updateFBOs(4, 1, numViews);
ASSERT_GL_NO_ERROR();
GLuint program = CreateSimplePassthroughProgram(numViews);
......@@ -1929,7 +1933,7 @@ TEST_P(MultiviewRenderTest, SelectColorBasedOnViewIDOVR)
" }\n"
"}\n";
createFBO(1, 1, 3);
updateFBOs(1, 1, 3);
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
drawQuad(program, "vPosition", 0.0f, 1.0f, true);
......@@ -1969,7 +1973,7 @@ TEST_P(MultiviewLayeredRenderTest, RenderToSubrageOfLayers)
" col = vec4(0,1,0,1);\n"
"}\n";
createFBO(1, 1, 2, 4, 1);
updateFBOs(1, 1, 2, 4, 1);
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
drawQuad(program, "vPosition", 0.0f, 1.0f, true);
......@@ -2024,7 +2028,7 @@ TEST_P(MultiviewRenderTest, FlatInterpolation)
" }\n"
"}\n";
createFBO(1, 1, 2);
updateFBOs(1, 1, 2);
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
drawQuad(program, "vPosition", 0.0f, 1.0f, true);
......@@ -2070,7 +2074,7 @@ TEST_P(MultiviewRenderTest, FlatInterpolation2)
" }\n"
"}\n";
createFBO(1, 1, 2);
updateFBOs(1, 1, 2);
ANGLE_GL_PROGRAM(program, vsSource, fsSource);
drawQuad(program, "vPosition", 0.0f, 1.0f, true);
......@@ -2089,7 +2093,7 @@ TEST_P(MultiviewSideBySideRenderTest, ViewportOffsetsAppliedBugCoverage)
return;
}
createFBO(1, 1, 2);
updateFBOs(1, 1, 2);
// Create multiview program.
const std::string &vs =
......@@ -2125,7 +2129,7 @@ TEST_P(MultiviewSideBySideRenderTest, ViewportOffsetsAppliedBugCoverage)
ASSERT_GL_NO_ERROR();
// Draw and check that both views are rendered to.
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mDrawFramebuffer);
bindMemberDrawFramebuffer();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
drawQuad(program, "vPosition", 0.0f, 1.0f, true);
......
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