1 /*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL ES 2.0 Module 3 * ------------------------------------------------- 4 * 5 * Copyright 2014 The Android Open Source Project 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 Capability Tests. 22 *//*--------------------------------------------------------------------*/ 23 24 #include "tes2CapabilityTests.hpp" 25 #include "gluStrUtil.hpp" 26 #include "tcuTestLog.hpp" 27 #include "deStringUtil.hpp" 28 #include "gluContextInfo.hpp" 29 30 #include <algorithm> 31 #include <iterator> 32 33 #include "glw.h" 34 35 using tcu::TestLog; 36 using std::vector; 37 using std::string; 38 39 namespace deqp 40 { 41 namespace gles2 42 { 43 44 class GetIntCase : public tcu::TestCase 45 { 46 public: 47 GetIntCase (Context& context, const char* name, const char* description, GLenum param) 48 : tcu::TestCase (context.getTestContext(), tcu::NODETYPE_CAPABILITY, name, description) 49 , m_param (param) 50 { 51 } 52 53 IterateResult iterate (void) 54 { 55 GLint value; 56 GLU_CHECK_CALL(glGetIntegerv(m_param, &value)); 57 58 m_testCtx.getLog() << TestLog::Message << glu::getParamQueryStr(m_param) << " = " << value << TestLog::EndMessage; 59 60 m_testCtx.setTestResult(QP_TEST_RESULT_PASS, de::toString(value).c_str()); 61 return STOP; 62 } 63 64 private: 65 GLenum m_param; 66 }; 67 68 class LimitTests : public TestCaseGroup 69 { 70 public: 71 LimitTests (Context& context) 72 : TestCaseGroup(context, "limits", "Implementation-defined limits") 73 { 74 } 75 76 void init (void) 77 { 78 static const struct 79 { 80 const char* name; 81 const char* description; 82 GLenum param; 83 } getIntCases[] = 84 { 85 { "vertex_attribs", "Number of vertex attributes supported", GL_MAX_VERTEX_ATTRIBS }, 86 { "varying_vectors", "Number of varying vectors supported", GL_MAX_VARYING_VECTORS }, 87 { "vertex_uniform_vectors", "Number of vertex uniform vectors supported", GL_MAX_VERTEX_UNIFORM_VECTORS }, 88 { "fragment_uniform_vectors", "Number of fragment uniform vectors supported", GL_MAX_FRAGMENT_UNIFORM_VECTORS }, 89 { "texture_image_units", "Number of fragment texture units supported", GL_MAX_TEXTURE_IMAGE_UNITS }, 90 { "vertex_texture_image_units", "Number of vertex texture units supported", GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS }, 91 { "combined_texture_image_units", "Number of vertex and fragment combined texture units supported", GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS }, 92 { "texture_2d_size", "Maximum 2D texture size", GL_MAX_TEXTURE_SIZE }, 93 { "texture_cube_size", "Maximum cubemap texture size", GL_MAX_CUBE_MAP_TEXTURE_SIZE }, 94 { "renderbuffer_size", "Maximum renderbuffer size", GL_MAX_RENDERBUFFER_SIZE }, 95 }; 96 97 for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(getIntCases); ndx++) 98 addChild(new GetIntCase(m_context, getIntCases[ndx].name, getIntCases[ndx].description, getIntCases[ndx].param)); 99 } 100 }; 101 102 class ExtensionCase : public tcu::TestCase 103 { 104 public: 105 ExtensionCase (tcu::TestContext& testCtx, const glu::ContextInfo& ctxInfo, const char* name, const char* desc, const char* extName); 106 107 IterateResult iterate (void); 108 109 private: 110 const glu::ContextInfo& m_ctxInfo; 111 std::string m_extName; 112 }; 113 114 ExtensionCase::ExtensionCase (tcu::TestContext& testCtx, const glu::ContextInfo& ctxInfo, const char* name, const char* desc, const char* extName) 115 : tcu::TestCase (testCtx, tcu::NODETYPE_CAPABILITY, name, desc) 116 , m_ctxInfo (ctxInfo) 117 , m_extName (extName) 118 { 119 } 120 121 ExtensionCase::IterateResult ExtensionCase::iterate (void) 122 { 123 bool isSupported = std::find(m_ctxInfo.getExtensions().begin(), m_ctxInfo.getExtensions().end(), m_extName) != m_ctxInfo.getExtensions().end(); 124 m_testCtx.setTestResult(isSupported ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_NOT_SUPPORTED, 125 isSupported ? "Supported" : "Not supported"); 126 return STOP; 127 } 128 129 class ExtensionTests : public TestCaseGroup 130 { 131 public: 132 ExtensionTests (Context& context) 133 : TestCaseGroup(context, "extensions", "Supported extensions") 134 { 135 } 136 137 void init (void) 138 { 139 struct ExtGroup 140 { 141 tcu::TestCaseGroup* group; 142 const glu::ContextInfo& ctxInfo; 143 144 ExtGroup (TestCaseGroup* parent, const char* name, const char* desc) 145 : group (DE_NULL) 146 , ctxInfo (parent->getContext().getContextInfo()) 147 { 148 group = new tcu::TestCaseGroup(parent->getTestContext(), name, desc); 149 parent->addChild(group); 150 } 151 152 ExtGroup& operator<< (const char* extName) 153 { 154 group->addChild(new ExtensionCase(group->getTestContext(), ctxInfo, extName, "", extName)); 155 return *this; 156 } 157 }; 158 159 // Uncompressed formats. 160 ExtGroup(this, "uncompressed_texture_formats", "Uncompressed texture formats") 161 << "GL_OES_texture_float_linear" 162 << "GL_OES_texture_half_float_linear" 163 << "GL_OES_texture_float" 164 << "GL_OES_texture_half_float" 165 << "GL_OES_texture_npot" 166 << "GL_EXT_texture_format_BGRA8888" 167 << "GL_EXT_texture_rg" 168 << "GL_EXT_texture_type_2_10_10_10_REV" 169 << "GL_EXT_sRGB" 170 << "GL_APPLE_rgb_422" 171 << "GL_APPLE_texture_format_BGRA8888"; 172 173 // Compressed formats. 174 ExtGroup(this, "compressed_texture_formats", "Compressed texture formats") 175 << "GL_OES_compressed_ETC1_RGB8_texture" 176 << "GL_OES_compressed_paletted_texture" 177 << "GL_EXT_texture_compression_dxt1" 178 << "GL_AMD_compressed_3DC_texture" 179 << "GL_AMD_compressed_ATC_texture" 180 << "GL_IMG_texture_compression_pvrtc" 181 << "GL_NV_texture_compression_s3tc_update"; 182 183 // Texture features. 184 ExtGroup(this, "texture", "Texturing features") 185 << "GL_OES_texture_3D" 186 << "GL_OES_depth_texture" 187 << "GL_EXT_texture_filter_anisotropic" 188 << "GL_EXT_texture_lod_bias" 189 << "GL_EXT_shadow_samplers" 190 << "GL_EXT_texture_storage" 191 << "GL_NV_texture_npot_2D_mipmap" 192 << "GL_APPLE_texture_max_level"; 193 194 // FBO features 195 ExtGroup(this, "fbo", "FBO features") 196 << "GL_OES_depth24" 197 << "GL_OES_depth32" 198 << "GL_OES_packed_depth_stencil" 199 << "GL_OES_fbo_render_mipmap" 200 << "GL_OES_rgb8_rgba8" 201 << "GL_OES_stencil1" 202 << "GL_OES_stencil4" 203 << "GL_OES_stencil8" 204 << "GL_EXT_color_buffer_half_float" 205 << "GL_EXT_multisampled_render_to_texture" 206 << "GL_IMG_multisampled_render_to_texture" 207 << "GL_ARM_rgba8" 208 << "GL_NV_depth_nonlinear" 209 << "GL_NV_draw_buffers" 210 << "GL_NV_fbo_color_attachments" 211 << "GL_NV_read_buffer" 212 << "GL_APPLE_framebuffer_multisample"; 213 214 // Vertex data formats. 215 ExtGroup(this, "vertex_data_formats", "Vertex data formats") 216 << "GL_OES_element_index_uint" 217 << "GL_OES_vertex_half_float" 218 << "GL_OES_vertex_type_10_10_10_2"; 219 220 // Shader functionality. 221 ExtGroup(this, "shaders", "Shader features") 222 << "GL_OES_fragment_precision_high" 223 << "GL_OES_standard_derivatives" 224 << "GL_EXT_shader_texture_lod" 225 << "GL_EXT_frag_depth" 226 << "GL_EXT_separate_shader_objects"; 227 228 // Shader binary formats. 229 ExtGroup(this, "shader_binary_formats", "Shader binary formats") 230 << "GL_OES_get_program_binary" 231 << "GL_AMD_program_binary_Z400" 232 << "GL_IMG_shader_binary" 233 << "GL_IMG_program_binary" 234 << "GL_ARM_mali_shader_binary" 235 << "GL_VIV_shader_binary" 236 << "GL_DMP_shader_binary"; 237 238 // Development features. 239 ExtGroup(this, "development", "Development aids") 240 << "GL_EXT_debug_label" 241 << "GL_EXT_debug_marker" 242 << "GL_AMD_performance_monitor" 243 << "GL_QCOM_performance_monitor_global_mode" 244 << "GL_QCOM_extended_get" 245 << "GL_QCOM_extended_get2"; 246 247 // Other extensions. 248 ExtGroup(this, "other", "Other extensions") 249 << "GL_OES_draw_texture" 250 << "GL_OES_mapbuffer" 251 << "GL_OES_vertex_array_object" 252 << "GL_EXT_occlusion_query_boolean" 253 << "GL_EXT_robustness" 254 << "GL_EXT_discard_framebuffer" 255 << "GL_EXT_read_format_bgra" 256 << "GL_EXT_multi_draw_arrays" 257 << "GL_EXT_unpack_subimage" 258 << "GL_EXT_blend_minmax" 259 << "GL_IMG_read_format" 260 << "GL_NV_coverage_sample" 261 << "GL_NV_read_depth_stencil" 262 << "GL_SUN_multi_draw_arrays"; 263 } 264 }; 265 266 CapabilityTests::CapabilityTests (Context& context) 267 : TestCaseGroup(context, "capability", "Capability Tests") 268 { 269 } 270 271 CapabilityTests::~CapabilityTests (void) 272 { 273 } 274 275 void CapabilityTests::init (void) 276 { 277 addChild(new LimitTests (m_context)); 278 addChild(new ExtensionTests (m_context)); 279 } 280 281 } // gles2 282 } // deqp 283