[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Public WebGL] Device/Extension statistics



I have done some data sleuthing on mobile GPUs consulting WEBGL_debug_render_info data from http://webglstats.com . I consulted close to a million entries in a 30 day span. These are the major devices/GPUs that WebGL sees (note that android share is adjusted for the fact that not all android browsers support debug renderer info. the iOS devices where determined by user agent).

* 21.9% iPhone
* 20.0% iPad
* 14.5% Adreno (TM) 330
* 13.3% Adreno (TM) 305
* 12.5% Mali-400 MP
* 9.3% Adreno (TM) 320
* 1.2% iPod
* 1.2% NVIDIA Tegra 3

Using weights for OpenGL ES 3.0 support of these devices (see Appendix A), we can arrive at the conclusion that about 51% of devices that have WebGL available, support OpenGL ES 3.0.

This means that for the next 2 years, a substantial population of mobile devices will not be able to run WebGL 2.0

I have previously conducted estimates on extension support. Combining these GPU/device distributions from WEBGL_debug_renderer_info with the common subset of extensions each of the GPUs/devices support yields an estimate on extension support that's probably much better than before. See Appendix B for the full list. Note that GPU vendor specific extensions and extensions with less than 20% support have been purged.

Further eliminating from that list:

* Extensions we already have in WebGL
* EGL extensions
* EXT_robustness because browsers already handle that
* withdrawn extensions
* GL_EXT_discard_framebuffer because the context attribute preserveDrawingBuffer already covers this use-case.
* extensions which are contained in the core of OpenGL ES 2.0
* debug_marker and debug_label because they aren't relevant to WebGL (you can always proxy the API and attach labels and markers)

List of potentially interesting extensions for WebGL

92.5% GL_OES_packed_depth_stencil
92.5% GL_OES_depth24
81.3% GL_OES_fbo_render_mipmap
50.7% GL_EXT_texture_format_BGRA8888
49.5% GL_OES_texture_npot
44.3% GL_OES_mapbuffer
44.3% GL_EXT_occlusion_query_boolean
43.1% GL_EXT_texture_storage
43.1% GL_EXT_texture_rg
43.1% GL_EXT_shadow_samplers
43.1% GL_EXT_shader_framebuffer_fetch
43.1% GL_EXT_separate_shader_objects
43.1% GL_EXT_read_format_bgra
43.1% GL_EXT_pvrtc_sRGB
43.1% GL_EXT_map_buffer_range
38.2% GL_OES_vertex_half_float
37.0% GL_OES_vertex_type_10_10_10_2
37.0% GL_OES_texture_3D
37.0% GL_OES_depth_texture_cube_map
37.0% GL_EXT_texture_type_2_10_10_10_REV

Appendix A - OpenGL ES 3.0 weights.

* Mali-400 MP: 0%
* Adreno (TM) 330: 100%
* Adreno (TM) 305: 100%
* Adreno (TM) 320: 100%
* NVIDIA Tegra 3: 0%
* iPhone: 42.3%
* iPad: 24.5%
* iPod: 0%

These weights where determined consulting GPU specifications and the following sources:

* http://www.nvidia.com/object/tegra-3-processor.html
http://en.wikipedia.org/wiki/Adreno
https://developer.apple.com/library/ios/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/OpenGLESPlatforms/OpenGLESPlatforms.html
http://david-smith.org/iosversionstats/

Appendix B - full extension support estimate.

93.7% GL_OES_standard_derivatives
92.5% GL_OES_packed_depth_stencil
92.5% GL_OES_depth_texture
92.5% GL_OES_depth24
92.5% GL_EXT_discard_framebuffer
81.3% GL_OES_texture_half_float
81.3% GL_OES_texture_float
81.3% GL_OES_rgb8_rgba8
81.3% GL_OES_fbo_render_mipmap
80.1% GL_OES_vertex_array_object
80.1% GL_OES_texture_half_float_linear
80.1% GL_OES_element_index_uint
80.1% GL_EXT_sRGB
80.1% GL_EXT_debug_marker
80.1% GL_EXT_debug_label
80.1% GL_EXT_color_buffer_half_float
58.7% GL_EXT_texture_filter_anisotropic
55.5% GL_EXT_blend_minmax
50.7% GL_OES_compressed_ETC1_RGB8_texture
50.7% GL_OES_EGL_image_external
50.7% GL_OES_EGL_image
50.7% GL_EXT_texture_format_BGRA8888
49.5% GL_OES_texture_npot
44.3% GL_OES_mapbuffer
44.3% GL_EXT_occlusion_query_boolean
43.1% GL_EXT_texture_storage
43.1% GL_EXT_texture_rg
43.1% GL_EXT_shadow_samplers
43.1% GL_EXT_shader_texture_lod
43.1% GL_EXT_shader_framebuffer_fetch
43.1% GL_EXT_separate_shader_objects
43.1% GL_EXT_read_format_bgra
43.1% GL_EXT_pvrtc_sRGB
43.1% GL_EXT_map_buffer_range
43.1% GL_EXT_instanced_arrays
43.1% GL_EXT_draw_instanced
38.2% GL_OES_vertex_half_float
38.2% GL_EXT_robustness
37.0% GL_OES_vertex_type_10_10_10_2
37.0% GL_OES_texture_3D
37.0% GL_OES_get_program_binary
37.0% GL_OES_fragment_precision_high
37.0% GL_OES_depth_texture_cube_map
37.0% GL_EXT_texture_type_2_10_10_10_REV
37.0% GL_EXT_disjoint_timer_query
37.0% GL_EXT_color_buffer_float