#ifndef _TGL45TESTPACKAGE_HPP
#define _TGL45TESTPACKAGE_HPP
/*-------------------------------------------------------------------------
 * OpenGL Conformance Test Suite
 * -----------------------------
 *
 * Copyright (c) 2019 The Khronos Group Inc.
 *
 * 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 OpenGL ES 3.1 Test Package that runs on GL4.5 context
 *//*--------------------------------------------------------------------*/

#include "tcuDefs.hpp"
#include "tcuTestPackage.hpp"
#include "tes31Context.hpp"
#include "tcuResource.hpp"
#include "deSharedPtr.hpp"

namespace tcu
{
    class WaiverUtil;
};

namespace deqp
{
namespace gles31
{

class TestPackageGL45 : public tcu::TestPackage
{
public:
									TestPackageGL45			(tcu::TestContext& testCtx);
	virtual							~TestPackageGL45		(void);

	virtual void					init					(void);
	virtual void					deinit					(void);

	tcu::TestCaseExecutor*			createExecutor			(void) const;

	tcu::Archive*					getArchive				(void) { return &m_archive; }
	Context*						getContext				(void) { return m_context; }

private:
	tcu::ResourcePrefix				m_archive;
	Context*						m_context;
    de::SharedPtr<tcu::WaiverUtil>	m_waiverMechanism;
};

} // gles31
} // deqp

#endif // _TGL45TESTPACKAGE_HPP
