Home | History | Annotate | Download | only in texture_border_clamp
      1 /*-------------------------------------------------------------------------
      2  * OpenGL Conformance Test Suite
      3  * -----------------------------
      4  *
      5  * Copyright (c) 2014-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  esextcTextureBorderClampSamplerParameterIWithWrongPname.hpp
     26  * \brief Verifies glGetSamplerParameterI*() and glSamplerParameterI*()
     27  *        entry-points generate GL_INVALID_ENUM error if invalid pnames
     28  *        are used. (Test 5)
     29  */ /*-------------------------------------------------------------------*/
     30 
     31 #include "esextcTextureBorderClampSamplerParameterIWithWrongPname.hpp"
     32 #include "esextcTextureBorderClampBase.hpp"
     33 #include "gluContextInfo.hpp"
     34 #include "gluDefs.hpp"
     35 #include "gluStrUtil.hpp"
     36 #include "glwEnums.hpp"
     37 #include "glwFunctions.hpp"
     38 #include "tcuTestLog.hpp"
     39 
     40 namespace glcts
     41 {
     42 
     43 /* Static constants */
     44 const glw::GLuint TextureBorderClampSamplerParameterIWithWrongPnameTest::m_buffer_size		  = 32;
     45 const glw::GLuint TextureBorderClampSamplerParameterIWithWrongPnameTest::m_texture_unit_index = 0;
     46 
     47 /** Constructor
     48  *
     49  *  @param context     Test context
     50  *  @param name        Test case's name
     51  *  @param description Test case's description
     52  **/
     53 TextureBorderClampSamplerParameterIWithWrongPnameTest::TextureBorderClampSamplerParameterIWithWrongPnameTest(
     54 	Context& context, const ExtParameters& extParams, const char* name, const char* description)
     55 	: TextureBorderClampBase(context, extParams, name, description), m_sampler_id(0), m_test_passed(true)
     56 {
     57 	/* No implementation needed */
     58 }
     59 
     60 /** Deinitializes GLES objects created during the test.
     61  *
     62  */
     63 void TextureBorderClampSamplerParameterIWithWrongPnameTest::deinit(void)
     64 {
     65 	/* Retrieve ES entry-points */
     66 	const glw::Functions& gl = m_context.getRenderContext().getFunctions();
     67 
     68 	/* Bind the default sampler object */
     69 	gl.bindSampler(m_texture_unit_index, 0);
     70 
     71 	/* Delete a sampler object, if one was created during test execution */
     72 	if (0 != m_sampler_id)
     73 	{
     74 		gl.deleteSamplers(1, &m_sampler_id);
     75 
     76 		m_sampler_id = 0;
     77 	}
     78 
     79 	/* Deinitialize base class instance */
     80 	TestCaseBase::deinit();
     81 }
     82 
     83 /** Initializes GLES objects used during the test.
     84  *
     85  */
     86 void TextureBorderClampSamplerParameterIWithWrongPnameTest::initTest(void)
     87 {
     88 	/* Check if EXT_texture_border_clamp is supported */
     89 	if (!m_is_texture_border_clamp_supported)
     90 	{
     91 		throw tcu::NotSupportedError(TEXTURE_BORDER_CLAMP_NOT_SUPPORTED, "", __FILE__, __LINE__);
     92 	}
     93 
     94 	/* Retrieve ES entry-points */
     95 	const glw::Functions& gl = m_context.getRenderContext().getFunctions();
     96 
     97 	/* Generate a sampler object */
     98 	gl.genSamplers(1, &m_sampler_id);
     99 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error generating sampler object");
    100 
    101 	/* Bind the sampler object to a texture unit */
    102 	gl.bindSampler(m_texture_unit_index, m_sampler_id);
    103 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error binding sampler object");
    104 
    105 	/* Store all enums that should generate GL_INVALID_ENUM error when used
    106 	 * as parameter names for glGetSamplerParameterI*() and glSamplerParameterI*()
    107 	 * calls.
    108 	 */
    109 	m_pnames_list.push_back(GL_TEXTURE_BASE_LEVEL);
    110 	m_pnames_list.push_back(GL_TEXTURE_IMMUTABLE_FORMAT);
    111 	m_pnames_list.push_back(GL_TEXTURE_MAX_LEVEL);
    112 	m_pnames_list.push_back(GL_TEXTURE_SWIZZLE_R);
    113 	m_pnames_list.push_back(GL_TEXTURE_SWIZZLE_G);
    114 	m_pnames_list.push_back(GL_TEXTURE_SWIZZLE_B);
    115 	m_pnames_list.push_back(GL_TEXTURE_SWIZZLE_A);
    116 }
    117 
    118 /** Executes the test.
    119  *
    120  *  Sets the test result to QP_TEST_RESULT_FAIL if the test failed, QP_TEST_RESULT_PASS otherwise.
    121  *
    122  *  Note the function throws exception should an error occur!
    123  *
    124  *  @return STOP if the test has finished, CONTINUE to indicate iterate should be called once again.
    125  **/
    126 tcu::TestNode::IterateResult TextureBorderClampSamplerParameterIWithWrongPnameTest::iterate(void)
    127 {
    128 	initTest();
    129 
    130 	for (glw::GLuint i = 0; i < m_pnames_list.size(); ++i)
    131 	{
    132 		/* Check glGetSamplerParameterIivEXT() */
    133 		VerifyGLGetSamplerParameterIiv(m_sampler_id, m_pnames_list[i], GL_INVALID_ENUM);
    134 
    135 		/* Check glGetSamplerParameterIuivEXT() */
    136 		VerifyGLGetSamplerParameterIuiv(m_sampler_id, m_pnames_list[i], GL_INVALID_ENUM);
    137 
    138 		/* Check glSamplerParameterIivEXT() */
    139 		VerifyGLSamplerParameterIiv(m_sampler_id, m_pnames_list[i], GL_INVALID_ENUM);
    140 
    141 		/* Check glSamplerParameterIuivEXT() */
    142 		VerifyGLSamplerParameterIuiv(m_sampler_id, m_pnames_list[i], GL_INVALID_ENUM);
    143 	} /* for (all pnames) */
    144 
    145 	if (m_test_passed)
    146 	{
    147 		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
    148 	}
    149 	else
    150 	{
    151 		m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
    152 	}
    153 
    154 	return STOP;
    155 }
    156 
    157 /**
    158  * Checks if glGetSamplerParameterIivEXT() reports an user-specified GL error, if
    159  * called with specific arguments.
    160  *
    161  * Should the check fail, the function will set m_test_passed to false.
    162  *
    163  * @param sampler_id     id of sampler object to use for the call;
    164  * @param pname          pname to use for the call;
    165  * @param expected_error expected GL error code.
    166  */
    167 void TextureBorderClampSamplerParameterIWithWrongPnameTest::VerifyGLGetSamplerParameterIiv(glw::GLuint sampler_id,
    168 																						   glw::GLenum pname,
    169 																						   glw::GLenum expected_error)
    170 {
    171 	glw::GLenum				error_code = GL_NO_ERROR;
    172 	const glw::Functions&   gl		   = m_context.getRenderContext().getFunctions();
    173 	std::vector<glw::GLint> params(m_buffer_size);
    174 
    175 	gl.getSamplerParameterIiv(sampler_id, pname, &params[0]);
    176 
    177 	error_code = gl.getError();
    178 	if (expected_error != error_code)
    179 	{
    180 		m_test_passed = false;
    181 
    182 		m_testCtx.getLog() << tcu::TestLog::Message << "glGetSamplerParameterIivEXT() failed:["
    183 						   << "sampler id:" << sampler_id << ", pname:" << getPNameString(pname)
    184 						   << "] reported error code:[" << glu::getErrorStr(error_code) << "] expected error code:["
    185 						   << glu::getErrorStr(expected_error) << "]\n"
    186 						   << tcu::TestLog::EndMessage;
    187 	}
    188 }
    189 
    190 /**
    191  * Checks if glGetSamplerParameterIuivEXT() reports an user-specified GL error, if
    192  * called with specific arguments.
    193  *
    194  * Should the check fail, the function will set m_test_passed to false.
    195  *
    196  * @param sampler_id     id of sampler object to use for the call;
    197  * @param pname          pname to use for the call;
    198  * @param expected_error expected GL error code.
    199  */
    200 void TextureBorderClampSamplerParameterIWithWrongPnameTest::VerifyGLGetSamplerParameterIuiv(glw::GLuint sampler_id,
    201 																							glw::GLenum pname,
    202 																							glw::GLenum expected_error)
    203 {
    204 	glw::GLenum				 error_code = GL_NO_ERROR;
    205 	const glw::Functions&	gl			= m_context.getRenderContext().getFunctions();
    206 	std::vector<glw::GLuint> params(m_buffer_size);
    207 
    208 	gl.getSamplerParameterIuiv(sampler_id, pname, &params[0]);
    209 
    210 	error_code = gl.getError();
    211 	if (expected_error != error_code)
    212 	{
    213 		m_test_passed = false;
    214 
    215 		m_testCtx.getLog() << tcu::TestLog::Message << "glGetSamplerParameterIuivEXT() failed:["
    216 						   << "sampler id:" << sampler_id << ", pname:" << getPNameString(pname)
    217 						   << "] reported error code:[" << glu::getErrorStr(error_code) << "] expected error code:["
    218 						   << glu::getErrorStr(expected_error) << "]\n"
    219 						   << tcu::TestLog::EndMessage;
    220 	}
    221 }
    222 
    223 /**
    224  * Checks if glSamplerParameterIivEXT() reports an user-specified GL error, if
    225  * called with specific arguments.
    226  *
    227  * Should the check fail, the function will set m_test_passed to false.
    228  *
    229  * @param sampler_id     id of sampler object to use for the call;
    230  * @param pname          pname argument value to use for the call;
    231  * @param expected_error expected GL error code.
    232  */
    233 void TextureBorderClampSamplerParameterIWithWrongPnameTest::VerifyGLSamplerParameterIiv(glw::GLuint sampler_id,
    234 																						glw::GLenum pname,
    235 																						glw::GLenum expected_error)
    236 {
    237 	glw::GLenum				error_code = GL_NO_ERROR;
    238 	const glw::Functions&   gl		   = m_context.getRenderContext().getFunctions();
    239 	std::vector<glw::GLint> params(m_buffer_size);
    240 
    241 	gl.samplerParameterIiv(sampler_id, pname, &params[0]);
    242 
    243 	error_code = gl.getError();
    244 	if (expected_error != error_code)
    245 	{
    246 		m_test_passed = false;
    247 
    248 		m_testCtx.getLog() << tcu::TestLog::Message << "glSamplerParameterIivEXT() failed:["
    249 						   << "sampler id:" << sampler_id << ", pname:" << getPNameString(pname)
    250 						   << "] reported error code:[" << glu::getErrorStr(error_code) << "] expected error code:["
    251 						   << glu::getErrorStr(expected_error) << "]\n"
    252 						   << tcu::TestLog::EndMessage;
    253 	}
    254 }
    255 
    256 /**
    257  * Checks if glSamplerParameterIuivEXT() reports an user-specified GL error, if
    258  * called with specific arguments.
    259  *
    260  * Should the check fail, the function will set m_test_passed to false.
    261  *
    262  * @param sampler_id     id of sampler object to use for the call;
    263  * @param pname          pname argument value to use for the call;
    264  * @param expected_error expected GL error code.
    265  **/
    266 void TextureBorderClampSamplerParameterIWithWrongPnameTest::VerifyGLSamplerParameterIuiv(glw::GLuint sampler_id,
    267 																						 glw::GLenum pname,
    268 																						 glw::GLenum expected_error)
    269 {
    270 	glw::GLenum				 error_code = GL_NO_ERROR;
    271 	const glw::Functions&	gl			= m_context.getRenderContext().getFunctions();
    272 	std::vector<glw::GLuint> params(m_buffer_size);
    273 
    274 	gl.samplerParameterIuiv(sampler_id, pname, &params[0]);
    275 
    276 	error_code = gl.getError();
    277 	if (expected_error != error_code)
    278 	{
    279 		m_test_passed = false;
    280 
    281 		m_testCtx.getLog() << tcu::TestLog::Message << "glSamplerParameterIuivEXT() failed:["
    282 						   << "sampler id:" << sampler_id << ", pname:" << getPNameString(pname)
    283 						   << "] reported error code:[" << glu::getErrorStr(error_code) << "] expected error code:["
    284 						   << glu::getErrorStr(expected_error) << "]\n"
    285 						   << tcu::TestLog::EndMessage;
    286 	}
    287 }
    288 
    289 } // namespace glcts
    290