1 /*-------------------------------------------------------------------------
2 * OpenGL Conformance Test Suite
3 * -----------------------------
4 *
5 * Copyright (c) 2015-2016 The Khronos Group Inc.
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
22 */ /*-------------------------------------------------------------------*/
23
24 /*!
25 * \file esextcDrawBuffersIndexedNegative.hpp
26 * \brief Draw Buffers Indexed tests 6. Negative
27 */ /*-------------------------------------------------------------------*/
28
29 #include "esextcDrawBuffersIndexedNegative.hpp"
30 #include "gluDefs.hpp"
31 #include "glwEnums.hpp"
32 #include "tcuTestLog.hpp"
33
34 namespace glcts
35 {
36
37 /** Constructor
38 *
39 * @param context Test context
40 * @param name Test case's name
41 * @param description Test case's description
42 **/
DrawBuffersIndexedNegative(Context & context,const ExtParameters & extParams,const char * name,const char * description)43 DrawBuffersIndexedNegative::DrawBuffersIndexedNegative(Context& context, const ExtParameters& extParams,
44 const char* name, const char* description)
45 : TestCaseBase(context, extParams, name, description)
46 {
47 /* Left blank on purpose */
48 }
49
init()50 void DrawBuffersIndexedNegative::init()
51 {
52 if (!isExtensionSupported("GL_OES_draw_buffers_indexed"))
53 {
54 throw tcu::NotSupportedError(DRAW_BUFFERS_INDEXED_NOT_SUPPORTED);
55 }
56 }
57
iterate()58 tcu::TestNode::IterateResult DrawBuffersIndexedNegative::iterate()
59 {
60 const glw::Functions& gl = m_context.getRenderContext().getFunctions();
61
62 glw::GLint data;
63 glw::GLint64 data64;
64 glw::GLboolean bData;
65 glw::GLint maxDrawBuffers;
66 gl.getIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers);
67
68 bool success = true;
69
70 // INVALID_VALUE
71 gl.blendEquationi(maxDrawBuffers, GL_MIN);
72 success &= ExpectedError(GL_INVALID_VALUE, "glBlendEquationi(0, maxDrawBuffers)");
73
74 gl.blendEquationSeparatei(maxDrawBuffers, GL_MIN, GL_MIN);
75 success &= ExpectedError(GL_INVALID_VALUE, "glBlendEquationSeparatei(0, maxDrawBuffers)");
76
77 gl.blendFuncSeparatei(maxDrawBuffers, GL_CONSTANT_COLOR, GL_DST_ALPHA, GL_SRC_ALPHA, GL_ONE);
78 success &=
79 ExpectedError(GL_INVALID_VALUE,
80 "glBlendFuncSeparatei(maxDrawBuffers, GL_CONSTANT_COLOR, GL_DST_ALPHA, GL_SRC_ALPHA, GL_ONE)");
81
82 gl.blendFunci(maxDrawBuffers, GL_ZERO, GL_SRC_COLOR);
83 success &= ExpectedError(GL_INVALID_VALUE, "glBlendFunci(maxDrawBuffers, GL_ZERO, GL_SRC_COLOR)");
84
85 gl.getIntegeri_v(GL_BLEND_EQUATION_RGB, maxDrawBuffers, &data);
86 success &= ExpectedError(GL_INVALID_VALUE, "glGetIntegeri_v(GL_BLEND_EQUATION_RGB, maxDrawBuffers, &data)");
87
88 gl.getIntegeri_v(GL_BLEND_EQUATION_ALPHA, maxDrawBuffers, &data);
89 success &= ExpectedError(GL_INVALID_VALUE, "glGetIntegeri_v(GL_BLEND_EQUATION_ALPHA, maxDrawBuffers, &data)");
90
91 gl.getIntegeri_v(GL_BLEND_SRC_RGB, maxDrawBuffers, &data);
92 success &= ExpectedError(GL_INVALID_VALUE, "glGetIntegeri_v(GL_BLEND_SRC_RGB, maxDrawBuffers, &data)");
93
94 gl.getIntegeri_v(GL_BLEND_SRC_ALPHA, maxDrawBuffers, &data);
95 success &= ExpectedError(GL_INVALID_VALUE, "glGetIntegeri_v(GL_BLEND_SRC_ALPHA, maxDrawBuffers, &data)");
96
97 gl.getIntegeri_v(GL_BLEND_DST_RGB, maxDrawBuffers, &data);
98 success &= ExpectedError(GL_INVALID_VALUE, "glGetIntegeri_v(GL_BLEND_DST_RGB, maxDrawBuffers, &data)");
99
100 gl.getIntegeri_v(GL_BLEND_DST_ALPHA, maxDrawBuffers, &data);
101 success &= ExpectedError(GL_INVALID_VALUE, "glGetIntegeri_v(GL_BLEND_DST_ALPHA, maxDrawBuffers, &data)");
102
103 gl.getInteger64i_v(GL_BLEND_EQUATION_RGB, maxDrawBuffers, &data64);
104 success &= ExpectedError(GL_INVALID_VALUE, "glGetInteger64i_v(GL_BLEND_EQUATION_RGB, maxDrawBuffers, &data64)");
105
106 gl.getInteger64i_v(GL_BLEND_EQUATION_ALPHA, maxDrawBuffers, &data64);
107 success &= ExpectedError(GL_INVALID_VALUE, "glGetInteger64i_v(GL_BLEND_EQUATION_ALPHA, maxDrawBuffers, &data64)");
108
109 gl.getInteger64i_v(GL_BLEND_SRC_RGB, maxDrawBuffers, &data64);
110 success &= ExpectedError(GL_INVALID_VALUE, "glGetInteger64i_v(GL_BLEND_SRC_RGB, maxDrawBuffers, &data64)");
111
112 gl.getInteger64i_v(GL_BLEND_SRC_ALPHA, maxDrawBuffers, &data64);
113 success &= ExpectedError(GL_INVALID_VALUE, "glGetInteger64i_v(GL_BLEND_SRC_ALPHA, maxDrawBuffers, &data64)");
114
115 gl.getInteger64i_v(GL_BLEND_DST_RGB, maxDrawBuffers, &data64);
116 success &= ExpectedError(GL_INVALID_VALUE, "glGetInteger64i_v(GL_BLEND_DST_RGB, maxDrawBuffers, &data64)");
117
118 gl.getInteger64i_v(GL_BLEND_DST_ALPHA, maxDrawBuffers, &data64);
119 success &= ExpectedError(GL_INVALID_VALUE, "glGetInteger64i_v(GL_BLEND_DST_ALPHA, maxDrawBuffers, &data64)");
120
121 gl.enablei(GL_BLEND, maxDrawBuffers);
122 success &= ExpectedError(GL_INVALID_VALUE, "glEnablei(GL_BLEND, maxDrawBuffers)");
123
124 gl.disablei(GL_BLEND, maxDrawBuffers);
125 success &= ExpectedError(GL_INVALID_VALUE, "glDisablei(GL_BLEND, maxDrawBuffers)");
126
127 gl.isEnabledi(GL_BLEND, maxDrawBuffers);
128 success &= ExpectedError(GL_INVALID_VALUE, "glIsEnabledi(GL_BLEND, maxDrawBuffers)");
129
130 gl.colorMaski(maxDrawBuffers, GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE);
131 success &= ExpectedError(GL_INVALID_VALUE, "glColorMaski(maxDrawBuffers, GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE)");
132
133 gl.getBooleani_v(GL_COLOR_WRITEMASK, maxDrawBuffers, &bData);
134 success &= ExpectedError(GL_INVALID_VALUE, "glGetBooleani_v(GL_COLOR_WRITEMASK, maxDrawBuffers, &bData)");
135
136 // INVALID_ENUM
137 gl.blendFunci(0, GL_MIN, GL_ONE_MINUS_SRC_ALPHA);
138 success &= ExpectedError(GL_INVALID_ENUM, "glBlendFunci(0, GL_MIN, GL_ONE_MINUS_SRC_ALPHA)");
139
140 gl.blendFunci(0, GL_SRC_ALPHA, GL_MIN);
141 success &= ExpectedError(GL_INVALID_ENUM, "glBlendFunci(0, GL_SRC_ALPHA, GL_MIN)");
142
143 gl.blendFuncSeparatei(0, GL_MIN, GL_ONE, GL_ONE, GL_ONE);
144 success &= ExpectedError(GL_INVALID_ENUM, "glBlendFuncSeparatei(0, GL_MIN, GL_ONE, GL_ONE, GL_ONE)");
145
146 gl.blendFuncSeparatei(0, GL_ONE, GL_MIN, GL_ONE, GL_ONE);
147 success &= ExpectedError(GL_INVALID_ENUM, "glBlendFuncSeparatei(0, GL_ONE, GL_MIN, GL_ONE, GL_ONE)");
148
149 gl.blendFuncSeparatei(0, GL_ONE, GL_ONE, GL_MIN, GL_ONE);
150 success &= ExpectedError(GL_INVALID_ENUM, "glBlendFuncSeparatei(0, GL_ONE, GL_ONE, GL_MIN, GL_ONE)");
151
152 gl.blendFuncSeparatei(0, GL_ONE, GL_ONE, GL_ONE, GL_MIN);
153 success &= ExpectedError(GL_INVALID_ENUM, "glBlendFuncSeparatei(0, GL_ONE, GL_ONE, GL_ONE, GL_MIN)");
154
155 gl.blendEquationi(0, GL_SRC_ALPHA);
156 success &= ExpectedError(GL_INVALID_ENUM, "glBlendEquationi(0, GL_SRC_ALPHA)");
157
158 gl.blendEquationSeparatei(0, GL_SRC_ALPHA, GL_MIN);
159 success &= ExpectedError(GL_INVALID_ENUM, "glBlendEquationSeparatei(0, GL_SRC_ALPHA, GL_MIN)");
160
161 gl.blendEquationSeparatei(0, GL_MIN, GL_SRC_ALPHA);
162 success &= ExpectedError(GL_INVALID_ENUM, "glBlendEquationSeparatei(0, GL_MIN, GL_SRC_ALPHA)");
163
164 gl.enablei(GL_FUNC_ADD, 0);
165 success &= ExpectedError(GL_INVALID_ENUM, "glEnablei(GL_FUNC_ADD, 0)");
166
167 gl.disablei(GL_FUNC_ADD, 0);
168 success &= ExpectedError(GL_INVALID_ENUM, "glDisablei(GL_FUNC_ADD, 0)");
169
170 gl.isEnabledi(GL_FUNC_ADD, 0);
171 success &= ExpectedError(GL_INVALID_ENUM, "glIsEnabledi(GL_FUNC_ADD, 0)");
172
173 if (success)
174 {
175 m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
176 }
177 else
178 {
179 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Negative test failed");
180 }
181 return STOP;
182 }
183
ExpectedError(glw::GLenum expectedResult,const char * call)184 bool DrawBuffersIndexedNegative::ExpectedError(glw::GLenum expectedResult, const char* call)
185 {
186 glw::GLenum error = m_context.getRenderContext().getFunctions().getError();
187
188 if (expectedResult != error)
189 {
190 m_testCtx.getLog() << tcu::TestLog::Message << "Error on " << call << " call.\n"
191 << "Expected " << expectedResult << " but found " << error << tcu::TestLog::EndMessage;
192 return false;
193 }
194 return true;
195 }
196
197 } // namespace glcts
198