Commit d6781dce by jchen10 Committed by Commit Bot

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: 's avatarGeoff Lang <geofflang@chromium.org>
parent 221fa261
...@@ -19,14 +19,23 @@ using namespace angle; ...@@ -19,14 +19,23 @@ using namespace angle;
namespace namespace
{ {
enum class LinkProgramOption
{
CompileOnly,
CompileAndLink,
Unspecified
};
struct LinkProgramParams final : public RenderTestParams struct LinkProgramParams final : public RenderTestParams
{ {
LinkProgramParams() LinkProgramParams(LinkProgramOption optionIn)
{ {
majorVersion = 2; majorVersion = 2;
minorVersion = 0; minorVersion = 0;
windowWidth = 256; windowWidth = 256;
windowHeight = 256; windowHeight = 256;
option = optionIn;
} }
std::string suffix() const override std::string suffix() const override
...@@ -34,6 +43,11 @@ struct LinkProgramParams final : public RenderTestParams ...@@ -34,6 +43,11 @@ struct LinkProgramParams final : public RenderTestParams
std::stringstream strstr; std::stringstream strstr;
strstr << RenderTestParams::suffix(); strstr << RenderTestParams::suffix();
if (option == LinkProgramOption::CompileOnly)
{
strstr << "_compile_only";
}
if (eglParameters.deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE) if (eglParameters.deviceType == EGL_PLATFORM_ANGLE_DEVICE_TYPE_NULL_ANGLE)
{ {
strstr << "_null"; strstr << "_null";
...@@ -41,6 +55,8 @@ struct LinkProgramParams final : public RenderTestParams ...@@ -41,6 +55,8 @@ struct LinkProgramParams final : public RenderTestParams
return strstr.str(); return strstr.str();
} }
LinkProgramOption option;
}; };
std::ostream &operator<<(std::ostream &os, const LinkProgramParams &params) std::ostream &operator<<(std::ostream &os, const LinkProgramParams &params)
...@@ -96,10 +112,26 @@ void LinkProgramBenchmark::drawBenchmark() ...@@ -96,10 +112,26 @@ void LinkProgramBenchmark::drawBenchmark()
"void main() {\n" "void main() {\n"
" gl_FragColor = vec4(1, 0, 0, 1);\n" " gl_FragColor = vec4(1, 0, 0, 1);\n"
"}"; "}";
GLuint vs = CompileShader(GL_VERTEX_SHADER, vertexShader);
GLuint fs = CompileShader(GL_FRAGMENT_SHADER, fragmentShader);
ASSERT_NE(0u, vs);
ASSERT_NE(0u, fs);
if (GetParam().option == LinkProgramOption::CompileOnly)
{
glDeleteShader(vs);
glDeleteShader(fs);
return;
}
GLuint program = CompileProgram(vertexShader, fragmentShader); GLuint program = glCreateProgram();
ASSERT_NE(0u, program); ASSERT_NE(0u, program);
glAttachShader(program, vs);
glDeleteShader(vs);
glAttachShader(program, fs);
glDeleteShader(fs);
glLinkProgram(program);
glUseProgram(program); glUseProgram(program);
GLint positionLoc = glGetAttribLocation(program, "position"); GLint positionLoc = glGetAttribLocation(program, "position");
...@@ -114,30 +146,30 @@ void LinkProgramBenchmark::drawBenchmark() ...@@ -114,30 +146,30 @@ void LinkProgramBenchmark::drawBenchmark()
using namespace egl_platform; using namespace egl_platform;
LinkProgramParams LinkProgramD3D11Params() LinkProgramParams LinkProgramD3D11Params(LinkProgramOption option)
{ {
LinkProgramParams params; LinkProgramParams params(option);
params.eglParameters = D3D11(); params.eglParameters = D3D11();
return params; return params;
} }
LinkProgramParams LinkProgramD3D9Params() LinkProgramParams LinkProgramD3D9Params(LinkProgramOption option)
{ {
LinkProgramParams params; LinkProgramParams params(option);
params.eglParameters = D3D9(); params.eglParameters = D3D9();
return params; return params;
} }
LinkProgramParams LinkProgramOpenGLOrGLESParams() LinkProgramParams LinkProgramOpenGLOrGLESParams(LinkProgramOption option)
{ {
LinkProgramParams params; LinkProgramParams params(option);
params.eglParameters = OPENGL_OR_GLES(false); params.eglParameters = OPENGL_OR_GLES(false);
return params; return params;
} }
LinkProgramParams LinkProgramVulkanParams() LinkProgramParams LinkProgramVulkanParams(LinkProgramOption option)
{ {
LinkProgramParams params; LinkProgramParams params(option);
params.eglParameters = VULKAN(); params.eglParameters = VULKAN();
return params; return params;
} }
...@@ -148,9 +180,13 @@ TEST_P(LinkProgramBenchmark, Run) ...@@ -148,9 +180,13 @@ TEST_P(LinkProgramBenchmark, Run)
} }
ANGLE_INSTANTIATE_TEST(LinkProgramBenchmark, ANGLE_INSTANTIATE_TEST(LinkProgramBenchmark,
LinkProgramD3D11Params(), LinkProgramD3D11Params(LinkProgramOption::CompileOnly),
LinkProgramD3D9Params(), LinkProgramD3D9Params(LinkProgramOption::CompileOnly),
LinkProgramOpenGLOrGLESParams(), LinkProgramOpenGLOrGLESParams(LinkProgramOption::CompileOnly),
LinkProgramVulkanParams()); LinkProgramVulkanParams(LinkProgramOption::CompileOnly),
LinkProgramD3D11Params(LinkProgramOption::CompileAndLink),
LinkProgramD3D9Params(LinkProgramOption::CompileAndLink),
LinkProgramOpenGLOrGLESParams(LinkProgramOption::CompileAndLink),
LinkProgramVulkanParams(LinkProgramOption::CompileAndLink));
} // anonymous namespace } // anonymous namespace
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