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  esextcTextureBorderClampSamplerParameterIError.cpp
     26  * \brief Verifies glGetSamplerParameterI*() and glSamplerParameterI*()
     27  *        entry-points generate errors for non-generated sampler objects
     28  *        as per extension specification. (Test 4)
     29  */ /*-------------------------------------------------------------------*/
     30 
     31 #include "esextcTextureBorderClampSamplerParameterIError.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 /* Static constants */
     43 const glw::GLuint TextureBorderClampSamplerParameterIErrorTest::m_buffer_size		 = 32;
     44 const glw::GLuint TextureBorderClampSamplerParameterIErrorTest::m_texture_unit_index = 0;
     45 
     46 /** Constructor
     47  *
     48  *  @param context     Test context
     49  *  @param name        Test case's name
     50  *  @param description Test case's description
     51  **/
     52 TextureBorderClampSamplerParameterIErrorTest::TextureBorderClampSamplerParameterIErrorTest(
     53 	Context& context, const ExtParameters& extParams, const char* name, const char* description)
     54 	: TextureBorderClampBase(context, extParams, name, description), m_sampler_id(0), m_test_passed(true)
     55 {
     56 	/* No implementation needed */
     57 }
     58 
     59 /** Deinitializes GLES objects created during the test.
     60  *
     61  */
     62 void TextureBorderClampSamplerParameterIErrorTest::deinit(void)
     63 {
     64 	/* Retrieve ES entry-points */
     65 	const glw::Functions& gl = m_context.getRenderContext().getFunctions();
     66 
     67 	/* Bind the default sampler object */
     68 	gl.bindSampler(m_texture_unit_index, 0);
     69 
     70 	/* Delete a sampler object, if one was created during test execution */
     71 	if (0 != m_sampler_id)
     72 	{
     73 		gl.deleteSamplers(1, &m_sampler_id);
     74 
     75 		m_sampler_id = 0;
     76 	}
     77 
     78 	/* Deinitialize base class instance */
     79 	TestCaseBase::deinit();
     80 }
     81 
     82 /** Initializes GLES objects used during the test. */
     83 void TextureBorderClampSamplerParameterIErrorTest::initTest(void)
     84 {
     85 	if (!m_is_texture_border_clamp_supported)
     86 	{
     87 		throw tcu::NotSupportedError(TEXTURE_BORDER_CLAMP_NOT_SUPPORTED, "", __FILE__, __LINE__);
     88 	}
     89 
     90 	/* Retrieve ES entry-points */
     91 	const glw::Functions& gl = m_context.getRenderContext().getFunctions();
     92 
     93 	/* Generate a sampler object */
     94 	gl.genSamplers(1, &m_sampler_id);
     95 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error generating sampler object");
     96 
     97 	/* Bind the sampler object to a texture unit */
     98 	gl.bindSampler(m_texture_unit_index, m_sampler_id);
     99 	GLU_EXPECT_NO_ERROR(gl.getError(), "Error binding sampler object");
    100 
    101 	/* Fill list with property name + property value pairs that should
    102 	 * be used to verify that glGetSamplerParameterI*() and glSamplerParameterI*()
    103 	 * entry-points generate errors for non-generated sampler objects
    104 	 * as per extension specification.
    105 	 */
    106 	m_pnames_list.push_back(PnameParams(GL_TEXTURE_MAG_FILTER, GL_LINEAR));
    107 	m_pnames_list.push_back(PnameParams(GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR));
    108 	m_pnames_list.push_back(PnameParams(GL_TEXTURE_MIN_LOD, 1));
    109 	m_pnames_list.push_back(PnameParams(GL_TEXTURE_MAX_LOD, 1));
    110 	m_pnames_list.push_back(PnameParams(GL_TEXTURE_WRAP_S, GL_REPEAT));
    111 	m_pnames_list.push_back(PnameParams(GL_TEXTURE_WRAP_T, GL_REPEAT));
    112 	m_pnames_list.push_back(PnameParams(GL_TEXTURE_WRAP_R, GL_REPEAT));
    113 	m_pnames_list.push_back(PnameParams(m_glExtTokens.TEXTURE_BORDER_COLOR, 0, 0, 0, 0));
    114 	m_pnames_list.push_back(PnameParams(GL_TEXTURE_COMPARE_MODE, GL_NONE));
    115 	m_pnames_list.push_back(PnameParams(GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL));
    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 TextureBorderClampSamplerParameterIErrorTest::iterate(void)
    127 {
    128 	initTest();
    129 
    130 	/* Verify glGetSamplerParameterIivEXT() and glGetSamplerParameterIuivEXT(),
    131 	 * report GL_NO_ERROR if called for a generated sampler object*/
    132 	VerifyGLGetCallsForAllPNames(m_sampler_id, GL_NO_ERROR);
    133 
    134 	/* Verify glGetSamplerParameterIivEXT() and glGetSamplerParameterIuivEXT(),
    135 	 * report GL_INVALID_OPERATION if called for a non-existent sampler object*/
    136 	VerifyGLGetCallsForAllPNames(m_sampler_id + 1, GL_INVALID_OPERATION);
    137 
    138 	/* Verify glSamplerParameterIivEXT() and glSamplerParameterIuivEXT(),
    139 	 * report GL_NO_ERROR if called for a generated sampler object*/
    140 	VerifyGLSamplerCallsForAllPNames(m_sampler_id, GL_NO_ERROR);
    141 
    142 	/* Verify glSamplerParameterIivEXT() and glSamplerParameterIuivEXT(),
    143 	 * report GL_INVALID_OPERATION if called for a non-existent sampler object*/
    144 	VerifyGLSamplerCallsForAllPNames(m_sampler_id + 2, GL_INVALID_OPERATION);
    145 
    146 	if (m_test_passed)
    147 	{
    148 		m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass");
    149 	}
    150 	else
    151 	{
    152 		m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail");
    153 	}
    154 
    155 	return STOP;
    156 }
    157 
    158 /**
    159  * Checks if glGetSamplerParameterIivEXT() reports an user-specified GL error, if
    160  * called with specific arguments.
    161  *
    162  * Should the check fail, the function will set m_test_passed to false.
    163  *
    164  * @param sampler_id     id of sampler object to use for the call;
    165  * @param pname          pname to use for the call;
    166  * @param expected_error expected GL error code.
    167  */
    168 void TextureBorderClampSamplerParameterIErrorTest::VerifyGLGetSamplerParameterIiv(glw::GLuint sampler_id,
    169 																				  glw::GLenum pname,
    170 																				  glw::GLenum expected_error)
    171 {
    172 	glw::GLenum				error_code = GL_NO_ERROR;
    173 	const glw::Functions&   gl		   = m_context.getRenderContext().getFunctions();
    174 	std::vector<glw::GLint> params(m_buffer_size);
    175 
    176 	gl.getSamplerParameterIiv(sampler_id, pname, &params[0]);
    177 
    178 	error_code = gl.getError();
    179 	if (expected_error != error_code)
    180 	{
    181 		m_test_passed = false;
    182 
    183 		m_testCtx.getLog() << tcu::TestLog::Message << "glGetSamplerParameterIivEXT() failed:["
    184 						   << "sampler id:" << sampler_id << ", pname:" << getPNameString(pname)
    185 						   << "] reported error code:[" << glu::getErrorStr(error_code) << "] expected error code:["
    186 						   << glu::getErrorStr(expected_error) << "]\n"
    187 						   << tcu::TestLog::EndMessage;
    188 	}
    189 }
    190 
    191 /**
    192  * Checks if glGetSamplerParameterIuivEXT() reports an user-specified GL error, if
    193  * called with specific arguments.
    194  *
    195  * Should the check fail, the function will set m_test_passed to false.
    196  *
    197  * @param sampler_id     id of sampler object to use for the call;
    198  * @param pname          pname to use for the call;
    199  * @param expected_error expected GL error code.
    200  */
    201 void TextureBorderClampSamplerParameterIErrorTest::VerifyGLGetSamplerParameterIuiv(glw::GLuint sampler_id,
    202 																				   glw::GLenum pname,
    203 																				   glw::GLenum expected_error)
    204 {
    205 	glw::GLenum				 error_code = GL_NO_ERROR;
    206 	const glw::Functions&	gl			= m_context.getRenderContext().getFunctions();
    207 	std::vector<glw::GLuint> params(m_buffer_size);
    208 
    209 	gl.getSamplerParameterIuiv(sampler_id, pname, &params[0]);
    210 
    211 	error_code = gl.getError();
    212 	if (expected_error != error_code)
    213 	{
    214 		m_test_passed = false;
    215 
    216 		m_testCtx.getLog() << tcu::TestLog::Message << "glGetSamplerParameterIuivEXT() failed:["
    217 						   << "sampler id:" << sampler_id << ", pname:" << getPNameString(pname)
    218 						   << "] reported error code:[" << glu::getErrorStr(error_code) << "] expected error code:["
    219 						   << glu::getErrorStr(expected_error) << "]\n"
    220 						   << tcu::TestLog::EndMessage;
    221 	}
    222 }
    223 
    224 /** Verifies all pnames stored in m_pnames_list generate an user-specified error when used with
    225  *  paired value for glGetSamplerParameterIivEXT() and glGetSamplerParameterIuivEXT() functions.
    226  *
    227  * @param sampler_id     id of a sampler object to use for the calls;
    228  * @param expected_error expected GL error code.
    229  */
    230 void TextureBorderClampSamplerParameterIErrorTest::VerifyGLGetCallsForAllPNames(glw::GLuint sampler_id,
    231 																				glw::GLenum expected_error)
    232 {
    233 	for (glw::GLuint i = 0; i < m_pnames_list.size(); ++i)
    234 	{
    235 		/* Check glGetSamplerParameterIivEXT() */
    236 		VerifyGLGetSamplerParameterIiv(sampler_id, m_pnames_list[i].pname, expected_error);
    237 
    238 		/* Check glGetSamplerParameterIuivEXT() */
    239 		VerifyGLGetSamplerParameterIuiv(sampler_id, m_pnames_list[i].pname, expected_error);
    240 	} /* for (all pname+value pairs) */
    241 }
    242 
    243 /**
    244  * Checks if glSamplerParameterIivEXT() reports an user-specified GL error, if
    245  * called with specific arguments.
    246  *
    247  * Should the check fail, the function will set m_test_passed to false.
    248  *
    249  * @param sampler_id     id of sampler object to use for the call;
    250  * @param pname          pname argument value to use for the call;
    251  * @param params         params argument value to use for the call;
    252  * @param expected_error expected GL error code.
    253  */
    254 void TextureBorderClampSamplerParameterIErrorTest::VerifyGLSamplerParameterIiv(glw::GLuint sampler_id,
    255 																			   glw::GLenum pname, glw::GLint* params,
    256 																			   glw::GLenum expected_error)
    257 {
    258 	glw::GLenum			  error_code = GL_NO_ERROR;
    259 	const glw::Functions& gl		 = m_context.getRenderContext().getFunctions();
    260 
    261 	gl.samplerParameterIiv(sampler_id, pname, params);
    262 
    263 	error_code = gl.getError();
    264 	if (expected_error != error_code)
    265 	{
    266 		m_test_passed = false;
    267 
    268 		m_testCtx.getLog() << tcu::TestLog::Message << "glSamplerParameterIivEXT() failed:["
    269 						   << "sampler id:" << sampler_id << ", pname:" << getPNameString(pname)
    270 						   << "] reported error code:[" << glu::getErrorStr(error_code) << "] expected error code:["
    271 						   << glu::getErrorStr(expected_error) << "]\n"
    272 						   << tcu::TestLog::EndMessage;
    273 	}
    274 }
    275 
    276 /**
    277  * Checks if glSamplerParameterIuivEXT() reports an user-specified GL error, if
    278  * called with specific arguments.
    279  *
    280  * Should the check fail, the function will set m_test_passed to false.
    281  *
    282  * @param sampler_id     id of sampler object to use for the call;
    283  * @param pname          pname argument value to use for the call;
    284  * @param params         params argument value to use for the call;
    285  * @param expected_error expected GL error code.
    286  **/
    287 void TextureBorderClampSamplerParameterIErrorTest::VerifyGLSamplerParameterIuiv(glw::GLuint sampler_id,
    288 																				glw::GLenum pname, glw::GLuint* params,
    289 																				glw::GLenum expected_error)
    290 {
    291 	glw::GLenum			  error_code = GL_NO_ERROR;
    292 	const glw::Functions& gl		 = m_context.getRenderContext().getFunctions();
    293 
    294 	gl.samplerParameterIuiv(sampler_id, pname, params);
    295 
    296 	error_code = gl.getError();
    297 	if (expected_error != error_code)
    298 	{
    299 		m_test_passed = false;
    300 
    301 		m_testCtx.getLog() << tcu::TestLog::Message << "glSamplerParameterIuivEXT() failed:["
    302 						   << "sampler id:" << sampler_id << ", pname:" << getPNameString(pname)
    303 						   << "] reported error code:[" << glu::getErrorStr(error_code) << "] expected error code:["
    304 						   << glu::getErrorStr(expected_error) << "]\n"
    305 						   << tcu::TestLog::EndMessage;
    306 	}
    307 }
    308 
    309 /** Verifies all pnames stored in m_pnames_list generate an user-specified error when used with
    310  *  paired value for glSamplerParameterIivEXT() and glSamplerParameterIuivEXT() functions.
    311  *
    312  * @param sampler_id     id of a sampler object to use for the calls;
    313  * @param expected_error expected GL error code.
    314  */
    315 void TextureBorderClampSamplerParameterIErrorTest::VerifyGLSamplerCallsForAllPNames(glw::GLuint sampler_id,
    316 																					glw::GLenum expected_error)
    317 {
    318 	for (glw::GLuint i = 0; i < m_pnames_list.size(); ++i)
    319 	{
    320 		/* Check glSamplerParameterIivEXT() */
    321 		VerifyGLSamplerParameterIiv(sampler_id, m_pnames_list[i].pname, (glw::GLint*)m_pnames_list[i].params,
    322 									expected_error);
    323 		/* Check glSamplerParameterIuivEXT() */
    324 		VerifyGLSamplerParameterIuiv(sampler_id, m_pnames_list[i].pname, (glw::GLuint*)m_pnames_list[i].params,
    325 									 expected_error);
    326 	} /* for (all pname+value pairs) */
    327 }
    328 
    329 } // namespace glcts
    330