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 esextcTextureBorderClampGetTexParameterIErrors.cpp 26 * \brief Texture Border Clamp glGetTexParameterIivEXT(), glGetTexParameterIuivEXT() Errors (Test 3) 27 */ /*-------------------------------------------------------------------*/ 28 29 #include "esextcTextureBorderClampGetTexParameterIErrors.hpp" 30 #include "gluContextInfo.hpp" 31 #include "gluDefs.hpp" 32 #include "gluStrUtil.hpp" 33 #include "glwEnums.hpp" 34 #include "glwFunctions.hpp" 35 #include "tcuTestLog.hpp" 36 #include <vector> 37 38 namespace glcts 39 { 40 41 /* Amount of entries to pre-allocate for vectors which will be used by 42 * glGetTexParameterIivEXT() and glGetTexParameterIuivEXT() functions. 43 */ 44 const glw::GLuint TextureBorderClampGetTexParameterIErrorsTest::m_buffer_size = 32; 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 TextureBorderClampGetTexParameterIErrorsTest::TextureBorderClampGetTexParameterIErrorsTest( 53 Context& context, const ExtParameters& extParams, const char* name, const char* description) 54 : TextureBorderClampBase(context, extParams, name, description), m_test_passed(true) 55 { 56 /* Left blank on purpose */ 57 } 58 59 /** Initializes GLES objects used during the test. */ 60 void TextureBorderClampGetTexParameterIErrorsTest::initTest(void) 61 { 62 if (!m_is_texture_border_clamp_supported) 63 { 64 throw tcu::NotSupportedError(TEXTURE_BORDER_CLAMP_NOT_SUPPORTED, "", __FILE__, __LINE__); 65 } 66 67 /* Initialize base class */ 68 TextureBorderClampBase::initTest(); 69 70 m_pname_list.push_back(GL_DEPTH_STENCIL_TEXTURE_MODE); 71 m_pname_list.push_back(GL_TEXTURE_BASE_LEVEL); 72 m_pname_list.push_back(m_glExtTokens.TEXTURE_BORDER_COLOR); 73 m_pname_list.push_back(GL_TEXTURE_COMPARE_FUNC); 74 m_pname_list.push_back(GL_TEXTURE_IMMUTABLE_FORMAT); 75 m_pname_list.push_back(GL_TEXTURE_IMMUTABLE_LEVELS); 76 m_pname_list.push_back(GL_TEXTURE_MAG_FILTER); 77 m_pname_list.push_back(GL_TEXTURE_MAX_LEVEL); 78 m_pname_list.push_back(GL_TEXTURE_MAX_LOD); 79 m_pname_list.push_back(GL_TEXTURE_MIN_FILTER); 80 m_pname_list.push_back(GL_TEXTURE_MIN_LOD); 81 m_pname_list.push_back(GL_TEXTURE_SWIZZLE_R); 82 m_pname_list.push_back(GL_TEXTURE_SWIZZLE_G); 83 m_pname_list.push_back(GL_TEXTURE_SWIZZLE_B); 84 m_pname_list.push_back(GL_TEXTURE_SWIZZLE_A); 85 m_pname_list.push_back(GL_TEXTURE_WRAP_S); 86 m_pname_list.push_back(GL_TEXTURE_WRAP_T); 87 m_pname_list.push_back(GL_TEXTURE_WRAP_R); 88 } 89 90 /** Executes the test. 91 * 92 * Sets the test result to QP_TEST_RESULT_FAIL if the test failed, QP_TEST_RESULT_PASS otherwise. 93 * 94 * Note the function throws exception should an error occur! 95 * 96 * @return STOP if the test has finished, CONTINUE to indicate iterate should be called once again. 97 **/ 98 tcu::TestNode::IterateResult TextureBorderClampGetTexParameterIErrorsTest::iterate(void) 99 { 100 initTest(); 101 102 /* Make sure the tested functions report GL_NO_ERROR if used with 103 * cube map texture target. */ 104 CheckAllNames(GL_TEXTURE_CUBE_MAP, GL_NO_ERROR); 105 106 /* Make sure the tested functions report GL_INVALID_ENUM error 107 * if used for cube-map face texture targets. */ 108 CheckAllNames(GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_INVALID_ENUM); 109 110 if (m_is_texture_buffer_supported) 111 { 112 /* Make sure the tested functions report GL_INVALID_ENUM error 113 * if used for GL_TEXTURE_BUFFER_EXT texture target. */ 114 CheckAllNames(GL_TEXTURE_BUFFER_EXT, GL_INVALID_ENUM); 115 } 116 117 if (m_test_passed) 118 { 119 m_testCtx.setTestResult(QP_TEST_RESULT_PASS, "Pass"); 120 } 121 else 122 { 123 m_testCtx.setTestResult(QP_TEST_RESULT_FAIL, "Fail"); 124 } 125 126 return STOP; 127 } 128 129 /** 130 * Verifies that all pnames are correctly handled by glGetTexParameterIivEXT() and 131 * glGetTexParameterIuivEXT() functions for a particular texture target. 132 * 133 * @param target texture target to be used for the calls; 134 * @param expected_error GL error code to expect; 135 */ 136 void TextureBorderClampGetTexParameterIErrorsTest::CheckAllNames(glw::GLenum target, glw::GLenum expected_error) 137 { 138 for (glw::GLuint i = 0; i < m_pname_list.size(); ++i) 139 { 140 /* Check glGetTexParameterIivEXT() */ 141 VerifyGLGetTexParameterIiv(target, m_pname_list[i] /* pname*/, expected_error); 142 /* Check glGetTexParameterIuivEXT() */ 143 VerifyGLGetTexParameterIuiv(target, m_pname_list[i] /* pname*/, expected_error); 144 } 145 } 146 147 /** Verifies that calling glGetTexParameterIivEXT() with user-specified arguments 148 * generates user-defined error code. 149 * 150 * @param target texture target to be used for the call; 151 * @param pname pname to be used for the call; 152 * @param expected_error anticipated GL error code; 153 */ 154 void TextureBorderClampGetTexParameterIErrorsTest::VerifyGLGetTexParameterIiv(glw::GLenum target, glw::GLenum pname, 155 glw::GLenum expected_error) 156 { 157 glw::GLenum error_code = GL_NO_ERROR; 158 const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 159 std::vector<glw::GLint> params(m_buffer_size); 160 161 gl.getTexParameterIiv(target, pname, ¶ms[0]); 162 163 error_code = gl.getError(); 164 if (expected_error != error_code) 165 { 166 m_test_passed = false; 167 168 m_testCtx.getLog() << tcu::TestLog::Message << "glGetTexParameterIivEXT() failed:[" 169 << "target:" << getTexTargetString(target) << ", pname:" << getPNameString(pname) 170 << "] reported error code:[" << glu::getErrorStr(error_code) << "] expected error code:[" 171 << glu::getErrorStr(expected_error) << "]\n" 172 << tcu::TestLog::EndMessage; 173 } 174 } 175 176 /** Verifies that calling glGetTexParameterIuivEXT() with user-specified arguments 177 * generates user-defined error code. 178 * 179 * @param target texture target to be used for the call; 180 * @param pname pname to be used for the call; 181 * @param expected_error anticipated GL error code; 182 */ 183 void TextureBorderClampGetTexParameterIErrorsTest::VerifyGLGetTexParameterIuiv(glw::GLenum target, glw::GLenum pname, 184 glw::GLenum expected_error) 185 { 186 glw::GLenum error_code = GL_NO_ERROR; 187 const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 188 std::vector<glw::GLuint> params(m_buffer_size); 189 190 gl.getTexParameterIuiv(target, pname, ¶ms[0]); 191 192 error_code = gl.getError(); 193 if (expected_error != error_code) 194 { 195 m_test_passed = false; 196 197 m_testCtx.getLog() << tcu::TestLog::Message << "glGetTexParameterIuivEXT() failed:[" 198 << "target:" << getTexTargetString(target) << ", pname:" << getPNameString(pname) 199 << "] reported error code:[" << glu::getErrorStr(error_code) << "] expected error code:[" 200 << glu::getErrorStr(expected_error) << "]\n" 201 << tcu::TestLog::EndMessage; 202 } 203 } 204 205 } // namespace glcts 206