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