Home | History | Annotate | Download | only in draw_buffers_indexed
      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  **/
     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 
     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 
     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 
    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