Extend LinkProgramPerfTest to support compile only
Add an option for "compie_only" and "compile_and_link".
Bug: chromium:849576
Change-Id: Id796ebb85ad5aff1a5272173f11ce2ff42685dce
Reviewed-on: https://chromium-review.googlesource.com/1186159
Commit-Queue: Jie A Chen <jie.a.chen@intel.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/tests/perf_tests/LinkProgramPerfTest.cpp b/src/tests/perf_tests/LinkProgramPerfTest.cpp
index c050662..a33d734 100644
--- a/src/tests/perf_tests/LinkProgramPerfTest.cpp
+++ b/src/tests/perf_tests/LinkProgramPerfTest.cpp
@@ -19,14 +19,23 @@
namespace
{
+enum class LinkProgramOption
+{
+ CompileOnly,
+ CompileAndLink,
+
+ Unspecified
+};
+
struct LinkProgramParams final : public RenderTestParams
{
- LinkProgramParams()
+ LinkProgramParams(LinkProgramOption optionIn)
{
majorVersion = 2;
minorVersion = 0;
windowWidth = 256;
windowHeight = 256;
+ option = optionIn;
}
std::string suffix() const override
@@ -34,6 +43,11 @@
std::stringstream strstr;
strstr << RenderTestParams::suffix();
+ if (option == LinkProgramOption::CompileOnly)
+ {
+ strstr << "_compile_only";
+ }
+
if (eglParameters.deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE)
{
strstr << "_null";
@@ -41,6 +55,8 @@
return strstr.str();
}
+
+ LinkProgramOption option;
};
std::ostream &operator<<(std::ostream &os, const LinkProgramParams ¶ms)
@@ -96,10 +112,26 @@
"void main() {\n"
" gl_FragColor = vec4(1, 0, 0, 1);\n"
"}";
+ GLuint vs = CompileShader(GL_VERTEX_SHADER, vertexShader);
+ GLuint fs = CompileShader(GL_FRAGMENT_SHADER, fragmentShader);
- GLuint program = CompileProgram(vertexShader, fragmentShader);
+ ASSERT_NE(0u, vs);
+ ASSERT_NE(0u, fs);
+ if (GetParam().option == LinkProgramOption::CompileOnly)
+ {
+ glDeleteShader(vs);
+ glDeleteShader(fs);
+ return;
+ }
+
+ GLuint program = glCreateProgram();
ASSERT_NE(0u, program);
+ glAttachShader(program, vs);
+ glDeleteShader(vs);
+ glAttachShader(program, fs);
+ glDeleteShader(fs);
+ glLinkProgram(program);
glUseProgram(program);
GLint positionLoc = glGetAttribLocation(program, "position");
@@ -114,30 +146,30 @@
using namespace egl_platform;
-LinkProgramParams LinkProgramD3D11Params()
+LinkProgramParams LinkProgramD3D11Params(LinkProgramOption option)
{
- LinkProgramParams params;
+ LinkProgramParams params(option);
params.eglParameters = D3D11();
return params;
}
-LinkProgramParams LinkProgramD3D9Params()
+LinkProgramParams LinkProgramD3D9Params(LinkProgramOption option)
{
- LinkProgramParams params;
+ LinkProgramParams params(option);
params.eglParameters = D3D9();
return params;
}
-LinkProgramParams LinkProgramOpenGLOrGLESParams()
+LinkProgramParams LinkProgramOpenGLOrGLESParams(LinkProgramOption option)
{
- LinkProgramParams params;
+ LinkProgramParams params(option);
params.eglParameters = OPENGL_OR_GLES(false);
return params;
}
-LinkProgramParams LinkProgramVulkanParams()
+LinkProgramParams LinkProgramVulkanParams(LinkProgramOption option)
{
- LinkProgramParams params;
+ LinkProgramParams params(option);
params.eglParameters = VULKAN();
return params;
}
@@ -148,9 +180,13 @@
}
ANGLE_INSTANTIATE_TEST(LinkProgramBenchmark,
- LinkProgramD3D11Params(),
- LinkProgramD3D9Params(),
- LinkProgramOpenGLOrGLESParams(),
- LinkProgramVulkanParams());
+ LinkProgramD3D11Params(LinkProgramOption::CompileOnly),
+ LinkProgramD3D9Params(LinkProgramOption::CompileOnly),
+ LinkProgramOpenGLOrGLESParams(LinkProgramOption::CompileOnly),
+ LinkProgramVulkanParams(LinkProgramOption::CompileOnly),
+ LinkProgramD3D11Params(LinkProgramOption::CompileAndLink),
+ LinkProgramD3D9Params(LinkProgramOption::CompileAndLink),
+ LinkProgramOpenGLOrGLESParams(LinkProgramOption::CompileAndLink),
+ LinkProgramVulkanParams(LinkProgramOption::CompileAndLink));
} // anonymous namespace