/*-------------------------------------------------------------------------
 * drawElements Quality Program OpenGL ES 2.0 Module
 * -------------------------------------------------
 *
 * Copyright 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *//*!
 * \file
 * \brief Shader compiler-related performance tests.
 *//*--------------------------------------------------------------------*/

#include "es2pShaderCompilerTests.hpp"
#include "es2pShaderCompilationCases.hpp"
#include "es2pShaderOptimizationTests.hpp"

namespace deqp
{
namespace gles2
{
namespace Performance
{

ShaderCompilerTests::ShaderCompilerTests (Context& context)
	: TestCaseGroup(context, "compiler", "Shader Compiler Performance Tests")
{
}

ShaderCompilerTests::~ShaderCompilerTests (void)
{
}

void ShaderCompilerTests::init (void)
{
	addShaderCompilationPerformanceCases(*this);

	addChild(new ShaderOptimizationTests(m_context));
}

} // Performance
} // gles2
} // deqp
