1/*-------------------------------------------------------------------------
2 * drawElements Quality Program OpenGL ES 3.1 Module
3 * -------------------------------------------------
4 *
5 * Copyright 2014 The Android Open Source Project
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 *      http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 *//*!
20 * \file
21 * \brief Shared structures for ES 3.1 negative API tests
22 *//*--------------------------------------------------------------------*/
23
24#include "es31fNegativeTestShared.hpp"
25
26#include "tcuResultCollector.hpp"
27
28#include "gluContextInfo.hpp"
29#include "gluRenderContext.hpp"
30#include "glwFunctions.hpp"
31
32namespace deqp
33{
34namespace gles31
35{
36namespace Functional
37{
38namespace NegativeTestShared
39{
40
41using glw::GLenum;
42using tcu::TestLog;
43using std::string;
44
45ErrorCase::ErrorCase (Context& ctx, const char* name, const char* desc)
46	: TestCase(ctx, name, desc)
47{
48}
49
50NegativeTestContext::NegativeTestContext (ErrorCase&				host,
51										  glu::RenderContext&		renderCtx,
52										  const glu::ContextInfo&	ctxInfo,
53										  tcu::TestLog&				log,
54										  tcu::ResultCollector&		results,
55										  bool						enableLogging_)
56	: glu::CallLogWrapper	(renderCtx.getFunctions(), log)
57	, m_host				(host)
58	, m_renderCtx			(renderCtx)
59	, m_ctxInfo				(ctxInfo)
60	, m_results				(results)
61	, m_openSections		(0)
62{
63	enableLogging(enableLogging_);
64}
65
66NegativeTestContext::~NegativeTestContext ()
67{
68	while (m_openSections--)
69		getLog() << TestLog::EndSection;
70}
71
72void NegativeTestContext::fail (const string& msg)
73{
74	m_results.addResult(QP_TEST_RESULT_FAIL, msg);
75}
76
77int NegativeTestContext::getInteger (GLenum pname) const
78{
79	int retval = 0;
80	m_renderCtx.getFunctions().getIntegerv(pname, &retval);
81	return retval;
82}
83
84void NegativeTestContext::beginSection (const string& desc)
85{
86	if (isLoggingEnabled())
87	{
88		getLog() << TestLog::Section("callstream", desc);
89		m_openSections++;
90	}
91}
92
93void NegativeTestContext::endSection (void)
94{
95	if (isLoggingEnabled())
96	{
97		DE_ASSERT (m_openSections > 0);
98		getLog() << TestLog::EndSection;
99		m_openSections--;
100	}
101}
102
103void NegativeTestContext::expectError (GLenum error)
104{
105	m_host.expectError(error, error);
106}
107
108void NegativeTestContext::expectError (GLenum error0, GLenum error1)
109{
110	m_host.expectError(error0, error1);
111}
112
113bool NegativeTestContext::isShaderSupported (glu::ShaderType shaderType)
114{
115	if (contextSupports(getRenderContext().getType(), glu::ApiType::es(3, 2)))
116		return true;
117
118	switch (shaderType)
119	{
120		case glu::SHADERTYPE_GEOMETRY:
121			return getContextInfo().isExtensionSupported("GL_EXT_geometry_shader");
122		case glu::SHADERTYPE_TESSELLATION_CONTROL:
123		case glu::SHADERTYPE_TESSELLATION_EVALUATION:
124			return getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader");
125		default:
126			return true;
127	}
128}
129
130bool NegativeTestContext::isExtensionSupported (std::string extension)
131{
132	return getContextInfo().isExtensionSupported(extension.c_str());
133}
134
135} // NegativeTestShared
136} // Functional
137} // gles31
138} // deqp
139