1e5c31af7Sopenharmony_ci/*-------------------------------------------------------------------------
2e5c31af7Sopenharmony_ci * OpenGL Conformance Test Suite
3e5c31af7Sopenharmony_ci * -----------------------------
4e5c31af7Sopenharmony_ci *
5e5c31af7Sopenharmony_ci * Copyright (c) 2016 Google Inc.
6e5c31af7Sopenharmony_ci * Copyright (c) 2016 The Khronos Group Inc.
7e5c31af7Sopenharmony_ci *
8e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
9e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License.
10e5c31af7Sopenharmony_ci * You may obtain a copy of the License at
11e5c31af7Sopenharmony_ci *
12e5c31af7Sopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
13e5c31af7Sopenharmony_ci *
14e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
15e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
16e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and
18e5c31af7Sopenharmony_ci * limitations under the License.
19e5c31af7Sopenharmony_ci *
20e5c31af7Sopenharmony_ci */ /*!
21e5c31af7Sopenharmony_ci * \file
22e5c31af7Sopenharmony_ci * \brief OpenGL Conformance Test Package Base Class
23e5c31af7Sopenharmony_ci */ /*-------------------------------------------------------------------*/
24e5c31af7Sopenharmony_ci
25e5c31af7Sopenharmony_ci#include "glcTestPackage.hpp"
26e5c31af7Sopenharmony_ci#include "gluContextInfo.hpp"
27e5c31af7Sopenharmony_ci#include "tcuTestLog.hpp"
28e5c31af7Sopenharmony_ci#include "tcuCommandLine.hpp"
29e5c31af7Sopenharmony_ci#include "tcuWaiverUtil.hpp"
30e5c31af7Sopenharmony_ci#include "glwEnums.hpp"
31e5c31af7Sopenharmony_ci
32e5c31af7Sopenharmony_cinamespace deqp
33e5c31af7Sopenharmony_ci{
34e5c31af7Sopenharmony_ci
35e5c31af7Sopenharmony_ciPackageContext::PackageContext(tcu::TestContext& testCtx, glu::ContextType renderContextType)
36e5c31af7Sopenharmony_ci	: m_context			(testCtx, renderContextType)
37e5c31af7Sopenharmony_ci	, m_caseWrapper		(m_context)
38e5c31af7Sopenharmony_ci{
39e5c31af7Sopenharmony_ci}
40e5c31af7Sopenharmony_ci
41e5c31af7Sopenharmony_ciPackageContext::~PackageContext(void)
42e5c31af7Sopenharmony_ci{
43e5c31af7Sopenharmony_ci}
44e5c31af7Sopenharmony_ci
45e5c31af7Sopenharmony_ciTestPackage::TestPackage(tcu::TestContext& testCtx, const char* name, const char* description,
46e5c31af7Sopenharmony_ci						 glu::ContextType renderContextType, const char* resourcesPath)
47e5c31af7Sopenharmony_ci	: tcu::TestPackage		(testCtx, name, description)
48e5c31af7Sopenharmony_ci	, m_waiverMechanism		(new tcu::WaiverUtil)
49e5c31af7Sopenharmony_ci	, m_renderContextType	(renderContextType)
50e5c31af7Sopenharmony_ci	, m_packageCtx			(DE_NULL)
51e5c31af7Sopenharmony_ci	, m_archive				(testCtx.getRootArchive(), resourcesPath)
52e5c31af7Sopenharmony_ci{
53e5c31af7Sopenharmony_ci}
54e5c31af7Sopenharmony_ci
55e5c31af7Sopenharmony_ciTestPackage::~TestPackage(void)
56e5c31af7Sopenharmony_ci{
57e5c31af7Sopenharmony_ci	// Destroy all children before destroying context since destructors may access context.
58e5c31af7Sopenharmony_ci	tcu::TestNode::deinit();
59e5c31af7Sopenharmony_ci	delete m_packageCtx;
60e5c31af7Sopenharmony_ci}
61e5c31af7Sopenharmony_ci
62e5c31af7Sopenharmony_civoid TestPackage::init(void)
63e5c31af7Sopenharmony_ci{
64e5c31af7Sopenharmony_ci	try
65e5c31af7Sopenharmony_ci	{
66e5c31af7Sopenharmony_ci		// Create context
67e5c31af7Sopenharmony_ci		m_packageCtx = new PackageContext(m_testCtx, m_renderContextType);
68e5c31af7Sopenharmony_ci
69e5c31af7Sopenharmony_ci		// Setup waiver mechanism
70e5c31af7Sopenharmony_ci		if (m_testCtx.getCommandLine().getRunMode() == tcu::RUNMODE_EXECUTE)
71e5c31af7Sopenharmony_ci		{
72e5c31af7Sopenharmony_ci			Context&				context		= m_packageCtx->getContext();
73e5c31af7Sopenharmony_ci			const glu::ContextInfo&	contextInfo = context.getContextInfo();
74e5c31af7Sopenharmony_ci			std::string				vendor		= contextInfo.getString(GL_VENDOR);
75e5c31af7Sopenharmony_ci			std::string				renderer	= contextInfo.getString(GL_RENDERER);
76e5c31af7Sopenharmony_ci			const tcu::CommandLine&	commandLine	= context.getTestContext().getCommandLine();
77e5c31af7Sopenharmony_ci			tcu::SessionInfo		sessionInfo	(vendor, renderer, commandLine.getInitialCmdLine());
78e5c31af7Sopenharmony_ci			m_waiverMechanism->setup(commandLine.getWaiverFileName(), m_name, vendor, renderer, sessionInfo);
79e5c31af7Sopenharmony_ci			context.getTestContext().getLog().writeSessionInfo(sessionInfo.get());
80e5c31af7Sopenharmony_ci		}
81e5c31af7Sopenharmony_ci	}
82e5c31af7Sopenharmony_ci	catch (...)
83e5c31af7Sopenharmony_ci	{
84e5c31af7Sopenharmony_ci		delete m_packageCtx;
85e5c31af7Sopenharmony_ci		m_packageCtx = DE_NULL;
86e5c31af7Sopenharmony_ci
87e5c31af7Sopenharmony_ci		throw;
88e5c31af7Sopenharmony_ci	}
89e5c31af7Sopenharmony_ci}
90e5c31af7Sopenharmony_ci
91e5c31af7Sopenharmony_civoid TestPackage::deinit(void)
92e5c31af7Sopenharmony_ci{
93e5c31af7Sopenharmony_ci	tcu::TestNode::deinit();
94e5c31af7Sopenharmony_ci	delete m_packageCtx;
95e5c31af7Sopenharmony_ci	m_packageCtx = DE_NULL;
96e5c31af7Sopenharmony_ci}
97e5c31af7Sopenharmony_ci
98e5c31af7Sopenharmony_ci} // deqp
99