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;
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 @@ struct LinkProgramParams final : public RenderTestParams
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 @@ struct LinkProgramParams final : public RenderTestParams
return strstr.str();
}
LinkProgramOption option;
};
std::ostream &operator<<(std::ostream &os, const LinkProgramParams &params)
......@@ -96,10 +112,26 @@ void LinkProgramBenchmark::drawBenchmark()
"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);
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);
glAttachShader(program, vs);
glDeleteShader(vs);
glAttachShader(program, fs);
glDeleteShader(fs);
glLinkProgram(program);
glUseProgram(program);
GLint positionLoc = glGetAttribLocation(program, "position");
......@@ -114,30 +146,30 @@ void LinkProgramBenchmark::drawBenchmark()
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 @@ TEST_P(LinkProgramBenchmark, Run)
}
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
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