1/*-------------------------------------------------------------------------
2 * drawElements Quality Program OpenGL ES 2.0 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 Negative Fragment Pipe API tests.
22 *//*--------------------------------------------------------------------*/
23
24#include "es2fNegativeFragmentApiTests.hpp"
25#include "es2fApiCase.hpp"
26
27#include "glwEnums.hpp"
28#include "glwDefs.hpp"
29
30using namespace glw; // GL types
31
32namespace deqp
33{
34namespace gles2
35{
36namespace Functional
37{
38
39using tcu::TestLog;
40
41NegativeFragmentApiTests::NegativeFragmentApiTests (Context& context)
42	: TestCaseGroup(context, "fragment", "Negative Fragment API Cases")
43{
44}
45
46NegativeFragmentApiTests::~NegativeFragmentApiTests (void)
47{
48}
49
50void NegativeFragmentApiTests::init (void)
51{
52	ES2F_ADD_API_CASE(scissor, "Invalid glScissor() usage",
53		{
54			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if either width or height is negative.");
55			glScissor(0, 0, -1, 0);
56			expectError(GL_INVALID_VALUE);
57			glScissor(0, 0, 0, -1);
58			expectError(GL_INVALID_VALUE);
59			glScissor(0, 0, -1, -1);
60			expectError(GL_INVALID_VALUE);
61			m_log << TestLog::EndSection;
62		});
63	ES2F_ADD_API_CASE(depth_func, "Invalid glDepthFunc() usage",
64		{
65			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if func is not an accepted value.");
66			glDepthFunc(-1);
67			expectError(GL_INVALID_ENUM);
68			m_log << TestLog::EndSection;
69		});
70	ES2F_ADD_API_CASE(viewport, "Invalid glViewport() usage",
71		{
72			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if either width or height is negative.");
73			glViewport(0, 0, -1, 1);
74			expectError(GL_INVALID_VALUE);
75			glViewport(0, 0, 1, -1);
76			expectError(GL_INVALID_VALUE);
77			glViewport(0, 0, -1, -1);
78			expectError(GL_INVALID_VALUE);
79			m_log << TestLog::EndSection;
80		});
81
82	// Stencil functions
83
84	ES2F_ADD_API_CASE(stencil_func, "Invalid glStencilFunc() usage",
85		{
86			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if func is not one of the eight accepted values.");
87			glStencilFunc(-1, 0, 1);
88			expectError(GL_INVALID_ENUM);
89			m_log << TestLog::EndSection;
90		});
91	ES2F_ADD_API_CASE(stencil_func_separate, "Invalid glStencilFuncSeparate() usage",
92		{
93			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if face is not GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK.");
94			glStencilFuncSeparate(-1, GL_NEVER, 0, 1);
95			expectError(GL_INVALID_ENUM);
96			m_log << TestLog::EndSection;
97
98			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if func is not one of the eight accepted values.");
99			glStencilFuncSeparate(GL_FRONT, -1, 0, 1);
100			expectError(GL_INVALID_ENUM);
101			m_log << TestLog::EndSection;
102		});
103	ES2F_ADD_API_CASE(stencil_op, "Invalid glStencilOp() usage",
104		{
105			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if sfail, dpfail, or dppass is any value other than the eight defined symbolic constant values.");
106			glStencilOp(-1, GL_ZERO, GL_REPLACE);
107			expectError(GL_INVALID_ENUM);
108			glStencilOp(GL_KEEP, -1, GL_REPLACE);
109			expectError(GL_INVALID_ENUM);
110			glStencilOp(GL_KEEP, GL_ZERO, -1);
111			expectError(GL_INVALID_ENUM);
112			m_log << TestLog::EndSection;
113		});
114	ES2F_ADD_API_CASE(stencil_op_separate, "Invalid glStencilOpSeparate() usage",
115		{
116			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if face is any value other than GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK.");
117			glStencilOpSeparate(-1, GL_KEEP, GL_ZERO, GL_REPLACE);
118			expectError(GL_INVALID_ENUM);
119			m_log << TestLog::EndSection;
120
121			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if sfail, dpfail, or dppass is any value other than the eight defined symbolic constant values.");
122			glStencilOpSeparate(GL_FRONT, -1, GL_ZERO, GL_REPLACE);
123			expectError(GL_INVALID_ENUM);
124			glStencilOpSeparate(GL_FRONT, GL_KEEP, -1, GL_REPLACE);
125			expectError(GL_INVALID_ENUM);
126			glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_ZERO, -1);
127			expectError(GL_INVALID_ENUM);
128			m_log << TestLog::EndSection;
129		});
130	ES2F_ADD_API_CASE(stencil_mask_separate, "Invalid glStencilMaskSeparate() usage",
131		{
132			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if face is not GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK.");
133			glStencilMaskSeparate(-1, 0);
134			expectError(GL_INVALID_ENUM);
135			m_log << TestLog::EndSection;
136		});
137
138	// Blend functions
139
140	ES2F_ADD_API_CASE(blend_equation, "Invalid glBlendEquation() usage",
141		{
142			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if mode is not one of GL_FUNC_ADD, GL_FUNC_SUBTRACT, or GL_FUNC_REVERSE_SUBTRACT.");
143			glBlendEquation(-1);
144			expectError(GL_INVALID_ENUM);
145			m_log << TestLog::EndSection;
146		});
147	ES2F_ADD_API_CASE(blend_equation_separate, "Invalid glBlendEquationSeparate() usage",
148		{
149			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if either modeRGB or modeAlpha is not one of GL_FUNC_ADD, GL_FUNC_SUBTRACT, or GL_FUNC_REVERSE_SUBTRACT.");
150			glBlendEquationSeparate(-1, GL_FUNC_ADD);
151			expectError(GL_INVALID_ENUM);
152			glBlendEquationSeparate(GL_FUNC_ADD, -1);
153			expectError(GL_INVALID_ENUM);
154			m_log << TestLog::EndSection;
155		});
156	ES2F_ADD_API_CASE(blend_func_separate, "Invalid glBlendFuncSeparate() usage",
157		{
158			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if srcRGB, dstRGB, srcAlpha, or dstAlpha is not an accepted value.");
159			glBlendFuncSeparate(-1, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
160			expectError(GL_INVALID_ENUM);
161			glBlendFuncSeparate(GL_ZERO, -1, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
162			expectError(GL_INVALID_ENUM);
163			glBlendFuncSeparate(GL_ZERO, GL_ONE, -1, GL_ONE_MINUS_SRC_COLOR);
164			expectError(GL_INVALID_ENUM);
165			glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_SRC_COLOR, -1);
166			expectError(GL_INVALID_ENUM);
167			m_log << TestLog::EndSection;
168		});
169	ES2F_ADD_API_CASE(blend_func, "Invalid glBlendFunc() usage",
170		{
171			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if either sfactor or dfactor is not an accepted value.");
172			glBlendFunc(-1, GL_ONE);
173			expectError(GL_INVALID_ENUM);
174			glBlendFunc(GL_ONE, -1);
175			expectError(GL_INVALID_ENUM);
176			m_log << TestLog::EndSection;
177		});
178
179	// Rasterization API functions
180
181	ES2F_ADD_API_CASE(cull_face, "Invalid glCullFace() usage",
182		{
183			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if mode is not an accepted value.");
184			glCullFace(-1);
185			expectError(GL_INVALID_ENUM);
186			m_log << TestLog::EndSection;
187		});
188
189	ES2F_ADD_API_CASE(front_face, "Invalid glFrontFace() usage",
190		{
191			m_log << TestLog::Section("", "GL_INVALID_ENUM is generated if mode is not an accepted value.");
192			glFrontFace(-1);
193			expectError(GL_INVALID_ENUM);
194			m_log << TestLog::EndSection;
195		});
196
197	ES2F_ADD_API_CASE(line_width, "Invalid glLineWidth() usage",
198		{
199			m_log << TestLog::Section("", "GL_INVALID_VALUE is generated if width is less than or equal to 0.");
200			glLineWidth(0);
201			expectError(GL_INVALID_VALUE);
202			glLineWidth(-1);
203			expectError(GL_INVALID_VALUE);
204			m_log << TestLog::EndSection;
205		});
206}
207
208} // Functional
209} // gles2
210} // deqp
211