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

Re: [Public WebGL] The state of MRTs



On Wed, Mar 21, 2012 at 9:21 AM, Benoit Jacob <bjacob@mozilla.com> wrote:
Like for the other extensions that we recently agreed on, what would probably help the most to get multiple render targets accepted would be detailed analysis of what current mobile hardware can't support them, and what is the prospect for the near future. Then we'll be able to see if a compromise with portability makes sense. Sorry if that analysis was already done in this thread, I admit I didn't read all of it.

On desktops the core functionality is provided by the ARB_framebuffer_object that defines gl_FragData[N] to be valid and introduces the enumerants for GL_MAX_COLOR_ATTACHMENTS_EXT as well as COLOR_ATTACHMENT0 trough 15

On OpenGL ES the OES_framebuffer_object specifically excludes MRT (gl_FragData[N] and enumerants) from the extension. They are introduced by NV_draw_buffers and NV_fbo_color_attachments (independently)

On Direct3D the the number of render targets is found in D3DCAPS9.NumSumultaneousRTs.

Desktop support
- ARB_framebuffer_object: 80% (users, source [1])
- GL_MAX_COLOR_ATTACHMENTS_EXT: greater or equal 4 = 99.2%, greater 4 = 95.1% (users, source [2])
- NumSimultaneousRTs via amsnet: 1 = 53%, 4 = 45% (devices, source [3])
- NumSimultaneousRTs via CardCaps.xls in the DxSDK 2010: 1 = 12%, 4=87% (devices, source [4]

Mobile support (505 devices, source [5]):
- NV_draw_buffers  2.3% (12 devices)
- NV_fbo_color_attachment 13.6% (69 devices)
- Both: 13.6% (69 devices)

Sources:
[1] http://feedback.wildfiregames.com/report/opengl/
[2] http://feedback.wildfiregames.com/report/opengl/feature/GL_MAX_COLOR_ATTACHMENTS_EXT
[3] http://zp.amsnet.pl/cdragan/query.php?dxversion=9&feature=capabilities&featuregroup=selected&adaptergroup=all&featureselected%5B%5D=294&orientation=horizontal
[4] http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6812
[5] http://www.glbenchmark.com/

Attachments:
- popular-march-21-2012.txt: A listing of all extensions found on [5] sorted by number of devices and showing the count since the last snapshot as well as differences in counts.
- support_nv_draw_buffers.txt: A list of devices supporting NV_draw_buffers.
- support_nv_fbo_color_attachments.txt: A list of devices supporting NV_fbo_color_attachments 

505 Devices, 132 new since Jan. 27
March 21 | Jan. 27 | abs delta | new | updated | dropped | name
--------------------------------------------------------------------------------------
     494 |     377 |       117 | 129 |       0 |      12 | GL_OES_compressed_ETC1_RGB8_texture
     493 |     377 |       116 | 128 |       0 |      12 | GL_OES_EGL_image
     470 |     358 |       112 | 123 |       1 |      12 | GL_EXT_texture_format_BGRA8888
     460 |     352 |       108 | 116 |       2 |      10 | GL_OES_rgb8_rgba8
     446 |     345 |       101 | 111 |       0 |      10 | GL_OES_vertex_half_float
     434 |     328 |       106 | 118 |       0 |      12 | GL_OES_depth24
     429 |     326 |       103 | 115 |       0 |      12 | GL_OES_packed_depth_stencil
     429 |     326 |       103 | 115 |       0 |      12 | GL_OES_depth_texture
     417 |     321 |        96 | 106 |       0 |      10 | GL_OES_texture_half_float
     417 |     321 |        96 | 106 |       0 |      10 | GL_OES_texture_float
     407 |     301 |       106 | 113 |       5 |      12 | GL_OES_standard_derivatives
     377 |     288 |        89 |  99 |       0 |      10 | GL_OES_fragment_precision_high
     353 |     268 |        85 |  95 |       0 |      10 | GL_OES_element_index_uint
     345 |     262 |        83 |  93 |       0 |      10 | GL_OES_get_program_binary
     297 |     226 |        71 |  77 |       1 |       7 | GL_OES_fbo_render_mipmap
     295 |     224 |        71 |  77 |       1 |       7 | GL_EXT_texture_filter_anisotropic
     288 |     213 |        75 |  84 |       0 |       9 | GL_OES_texture_npot
     240 |     156 |        84 |  80 |       9 |       5 | GL_OES_EGL_image_external
     222 |     166 |        56 |  64 |       0 |       8 | GL_OES_texture_half_float_linear
     220 |     163 |        57 |  64 |       0 |       7 | GL_OES_texture_3D
     219 |     163 |        56 |  63 |       0 |       7 | GL_AMD_program_binary_Z400
     219 |     163 |        56 |  63 |       0 |       7 | GL_NV_fence
     219 |     163 |        56 |  63 |       0 |       7 | GL_AMD_compressed_3DC_texture
     219 |     163 |        56 |  63 |       0 |       7 | GL_OES_vertex_type_10_10_10_2
     219 |     163 |        56 |  63 |       0 |       7 | GL_EXT_texture_type_2_10_10_10_REV
     219 |     163 |        56 |  63 |       0 |       7 | GL_AMD_performance_monitor
     219 |     163 |        56 |  63 |       0 |       7 | GL_AMD_compressed_ATC_texture
     215 |     160 |        55 |  62 |       0 |       7 | GL_QCOM_perfmon_global_mode
     215 |     160 |        55 |  62 |       0 |       7 | GL_QCOM_tiled_rendering
     215 |     160 |        55 |  62 |       0 |       7 | GL_QCOM_writeonly_rendering
     215 |     160 |        55 |  62 |       0 |       7 | GL_QCOM_driver_control
     215 |     160 |        55 |  62 |       0 |       7 | GL_QCOM_extended_get2
     215 |     160 |        55 |  62 |       0 |       7 | GL_QCOM_extended_get
     207 |     164 |        43 |  46 |       1 |       4 | GL_OES_mapbuffer
     199 |     156 |        43 |  50 |       0 |       7 | GL_QCOM_memory_monitor
     175 |     124 |        51 |  56 |       3 |       8 | GL_QCOM_binning_control
     148 |     129 |        19 |  22 |       0 |       3 | GL_OES_compressed_paletted_texture
     146 |      98 |        48 |  43 |       8 |       3 | GL_OES_vertex_array_object
     135 |     105 |        30 |  31 |       2 |       3 | GL_EXT_discard_framebuffer
     134 |     107 |        27 |  30 |       1 |       4 | GL_IMG_texture_format_BGRA8888
     132 |     105 |        27 |  30 |       0 |       3 | GL_IMG_texture_compression_pvrtc
     132 |     105 |        27 |  30 |       0 |       3 | GL_IMG_read_format
     126 |      99 |        27 |  30 |       0 |       3 | GL_EXT_multi_draw_arrays
     123 |      97 |        26 |  29 |       0 |       3 | GL_IMG_program_binary
     123 |      97 |        26 |  29 |       0 |       3 | GL_IMG_shader_binary
     123 |      97 |        26 |  29 |       0 |       3 | GL_IMG_texture_npot
     123 |      97 |        26 |  29 |       0 |       3 | GL_OES_required_internalformat
     114 |      89 |        25 |  29 |       0 |       4 | GL_EXT_shader_texture_lod
     111 |      93 |        18 |  20 |       0 |       2 | GL_IMG_texture_stream2
     110 |      99 |        11 |  14 |       0 |       3 | GL_OES_matrix_palette
     110 |      99 |        11 |  14 |       0 |       3 | GL_OES_draw_texture
     109 |      99 |        10 |  13 |       0 |       3 | GL_OES_framebuffer_object
     108 |      97 |        11 |  14 |       0 |       3 | GL_OES_point_size_array
     108 |      83 |        25 |  28 |       0 |       3 | GL_OES_egl_sync
     108 |      97 |        11 |  14 |       0 |       3 | GL_OES_read_format
     108 |      97 |        11 |  14 |       0 |       3 | GL_OES_point_sprite
     107 |      83 |        24 |  28 |       0 |       4 | GL_IMG_multisampled_render_to_texture
     100 |      91 |         9 |  12 |       0 |       3 | GL_OES_texture_cube_map
      94 |      76 |        18 |  17 |       1 |       0 | GL_EXT_texture_compression_s3tc
      92 |      74 |        18 |  17 |       1 |       0 | GL_EXT_texture_compression_dxt1
      90 |      80 |        10 |  13 |       0 |       3 | GL_OES_blend_func_separate
      89 |      80 |         9 |  12 |       0 |       3 | GL_OES_blend_subtract
      89 |      80 |         9 |  12 |       0 |       3 | GL_OES_blend_equation_separate
      89 |      80 |         9 |  12 |       0 |       3 | GL_OES_texture_mirrored_repeat
      89 |      80 |         9 |  12 |       0 |       3 | GL_OES_stencil_wrap
      86 |      77 |         9 |   9 |       0 |       0 | GL_OES_extended_matrix_palette
      83 |      45 |        38 |  35 |       4 |       1 | GL_QCOM_alpha_test
      83 |      75 |         8 |  11 |       0 |       3 | GL_OES_texture_env_crossbar
      77 |      56 |        21 |  21 |       2 |       2 | GL_OES_EGL_sync
      73 |      58 |        15 |  14 |       1 |       0 | GL_EXT_bgra
      71 |      54 |        17 |  17 |       2 |       2 | GL_EXT_blend_minmax
      69 |      55 |        14 |  13 |       1 |       0 | GL_EXT_Cg_shader
      69 |      55 |        14 |  13 |       1 |       0 | GL_NV_coverage_sample
      69 |      55 |        14 |  13 |       1 |       0 | GL_NV_fbo_color_attachments
      69 |      55 |        14 |  13 |       1 |       0 | GL_EXT_texture_compression_latc
      69 |      55 |        14 |  13 |       1 |       0 | GL_EXT_packed_float
      69 |      55 |        14 |  13 |       1 |       0 | GL_NV_shader_framebuffer_fetch
      69 |      55 |        14 |  13 |       1 |       0 | GL_EXT_unpack_subimage
      69 |      55 |        14 |  13 |       1 |       0 | GL_EXT_texture_array
      69 |      55 |        14 |  13 |       1 |       0 | GL_NV_draw_path
      69 |      55 |        14 |  13 |       1 |       0 | GL_NV_depth_nonlinear
      69 |      55 |        14 |  13 |       1 |       0 | GL_NV_get_tex_image
      69 |      55 |        14 |  13 |       1 |       0 | GL_NV_read_buffer
      69 |      55 |        14 |  13 |       1 |       0 | GL_NV_platform_binary
      62 |      51 |        11 |  10 |       1 |       0 | GL_ARB_draw_buffers
      62 |      51 |        11 |  10 |       1 |       0 | GL_NV_framebuffer_vertex_attrib_array
      56 |      51 |         5 |   5 |       0 |       0 | GL_OES_stencil8
      53 |      48 |         5 |   5 |       0 |       0 | GL_OES_query_matrix
      53 |      48 |         5 |   5 |       0 |       0 | GL_OES_matrix_get
      51 |      46 |         5 |   5 |       0 |       0 | GL_OES_byte_coordinates
      50 |      46 |         4 |   4 |       0 |       0 | GL_OES_single_precision
      50 |      46 |         4 |   4 |       0 |       0 | GL_OES_fixed_point
      49 |      40 |         9 |   9 |       0 |       0 | GL_NV_texture_npot_2D_mipmap
      48 |      35 |        13 |  16 |       0 |       3 | GL_ARM_rgba8
      46 |      33 |        13 |  16 |       0 |       3 | GL_ARM_mali_shader_binary
      43 |      34 |         9 |   8 |       1 |       0 | GL_NV_texture_compression_s3tc_update
      37 |      32 |         5 |   5 |       0 |       0 | GL_ARB_vertex_buffer_object
      36 |      31 |         5 |   5 |       0 |       0 | GL_ATI_texture_compression_atitc
      36 |      30 |         6 |   6 |       0 |       0 | GL_EXT_blend_func_separate
      36 |      31 |         5 |   5 |       0 |       0 | GL_ATI_compressed_texture_atitc
      35 |      30 |         5 |   5 |       0 |       0 | GL_EXT_blend_subtract
      35 |      30 |         5 |   5 |       0 |       0 | GL_EXT_stencil_wrap
      35 |      30 |         5 |   5 |       0 |       0 | GL_EXT_blend_equation_separate
      35 |      30 |         5 |   5 |       0 |       0 | GL_ARB_texture_env_dot3
      35 |      30 |         5 |   5 |       0 |       0 | GL_ARB_texture_env_combine
      35 |      30 |         5 |   5 |       0 |       0 | GL_ARB_texture_mirrored_repeat
      34 |      28 |         6 |   6 |       0 |       0 | GL_VIV_shader_binary
      34 |      28 |         6 |   6 |       0 |       0 | GL_OES_stencil4
      34 |      28 |         6 |   6 |       0 |       0 | GL_OES_stencil1
      31 |      29 |         2 |   2 |       0 |       0 | GL_IMG_texture_stream
      23 |      20 |         3 |   6 |       0 |       3 | GL_APPLE_texture_2D_limited_npot
      21 |      21 |         0 |   0 |       0 |       0 | GL_IMG_vertex_array_object
      20 |      18 |         2 |   2 |       0 |       0 | GL_IMG_vertex_program
      12 |       5 |         7 |   4 |       3 |       0 | GL_NV_draw_buffers
      12 |       5 |         7 |   4 |       3 |       0 | GL_NV_multiview_draw_buffers
      12 |       5 |         7 |   4 |       3 |       0 | GL_NV_read_stencil
      12 |       5 |         7 |   4 |       3 |       0 | GL_NV_read_depth
      10 |       1 |         9 |   4 |       5 |       0 | GL_EXT_robustness
      10 |       1 |         9 |   4 |       5 |       0 | GL_NV_texture_compression_latc
      10 |       1 |         9 |   4 |       5 |       0 | GL_NV_texture_compression_s3tc
      10 |       1 |         9 |   4 |       5 |       0 | GL_NV_EGL_stream_consumer_external
      10 |       1 |         9 |   4 |       5 |       0 | GL_NV_pack_subimage
       9 |       8 |         1 |   1 |       0 |       0 | GL_EXT_read_format_bgra
       9 |       8 |         1 |   1 |       0 |       0 | GL_APPLE_texture_max_level
       9 |       8 |         1 |   1 |       0 |       0 | GL_ARB_texture_non_power_of_two
       9 |       8 |         1 |   1 |       0 |       0 | GL_APPLE_rgb_422
       9 |       8 |         1 |   1 |       0 |       0 | GL_APPLE_texture_format_BGRA8888
       8 |       0 |         8 |   7 |       1 |       0 | GL_EXT_sRGB
       7 |       6 |         1 |   1 |       0 |       0 | GL_EXT_debug_marker
       7 |       6 |         1 |   1 |       0 |       0 | GL_APPLE_framebuffer_multisample
       7 |       3 |         4 |   3 |       2 |       1 | GL_EXT_occlusion_query_boolean
       7 |       6 |         1 |   1 |       0 |       0 | GL_EXT_separate_shader_objects
       7 |       6 |         1 |   1 |       0 |       0 | GL_EXT_debug_label
       6 |       5 |         1 |   1 |       0 |       0 | GL_EXT_texture_lod_bias
       4 |       1 |         3 |   0 |       3 |       0 | GL_EXT_multisampled_render_to_texture
       4 |       0 |         4 |   2 |       2 |       0 | GL_NV_timer_query
       4 |       3 |         1 |   1 |       0 |       0 | GL_AMD_tiled_rendering
       3 |       3 |         0 |   1 |       0 |       1 | GL_EXT_color_buffer_half_float
       3 |       2 |         1 |   1 |       0 |       0 | GL_OES_depth32
       3 |       3 |         0 |   1 |       0 |       1 | GL_EXT_shadow_samplers
       3 |       4 |        -1 |   0 |       0 |       1 | GL_NV_robustness
       3 |       3 |         0 |   1 |       0 |       1 | GL_EXT_texture_rg
       2 |       2 |         0 |   0 |       0 |       0 | GL_APPLE_debug_label
       2 |       2 |         0 |   0 |       0 |       0 | GL_VIV_timestamp
       2 |       2 |         0 |   0 |       0 |       0 | GL_ANDROID_direct_texture
       2 |       2 |         0 |   0 |       0 |       0 | GL_MRVL_blur
       2 |       0 |         2 |   2 |       0 |       0 | GL_NV_copy_image
       2 |       2 |         0 |   0 |       0 |       0 | GL_MRVL_external_texture
       2 |       2 |         0 |   0 |       0 |       0 | GL_VIV_direct_texture
       2 |       2 |         0 |   0 |       0 |       0 | GL_EXT_frag_depth
       2 |       2 |         0 |   0 |       0 |       0 | GL_APPLE_debug_marker
       2 |       0 |         2 |   2 |       0 |       0 | GL_NV_3dvision_settings
       1 |       0 |         1 |   1 |       0 |       0 | GL_ZIILABS_get_cbuffer_pointer
       1 |       0 |         1 |   1 |       0 |       0 | GL_EXT_texture_compression_dxt
       1 |       0 |         1 |   0 |       1 |       0 | GL_GREMEDY_frame_terminator
       1 |       1 |         0 |   0 |       0 |       0 | GL_NV_unpack_subimage
       1 |       0 |         1 |   0 |       1 |       0 | GL_GREMEDY_string_marker
       1 |       1 |         0 |   0 |       0 |       0 | GL_EXT_texture_2D_limited_npot
       1 |       0 |         1 |   1 |       0 |       0 | GL_ZIILABS_fog_mask
Acer A700 (picasso 2)
Acer Iconia Tab A200
Acer Iconia Tab A500
Acer Iconia Tab A510
Advent Vega
Asus Eee Pad Transformer Prime TF201
Asus Eee Pad Transformer TF101
HTC Endeavoru One X
HTC One X
Lenovo LePad K2
Malata SMB-A1002
Samsung GT-P7510 Galaxy Tab
Acer A700 (picasso 2)
Acer G100W
Acer Iconia Tab A100
Acer Iconia Tab A101
Acer Iconia Tab A200
Acer Iconia Tab A500
Acer Iconia Tab A501
Acer Iconia Tab A510
Acer Picasso
Advent Vega
Asus Eee Pad Slider SL101
Asus Eee Pad Transformer Prime TF201
Asus Eee Pad Transformer TF101
Dell Streak 10 Pro
Dell Streak 7
Hisense M1101AS
Hisense M170AT
HTC Endeavoru One X
HTC One X
iRU Pad Master 10.1
K-Touch Micromax A85 harmony
K-Touch W700
Lenovo IdeaPad Tablet K1
Lenovo LePad K2
Lenovo ThinkPad Tablet
LG LU6500
LG Optimus Pad
LG P990 Optimus 2X
LG P999
LG SU660 Star Dop
LG SU880
LG V901
LG V909
Malata SMB-A1002
Malata Zpad
Medion LifeTab P9514
Motorola Droid X2
Motorola Electrify
Motorola MB855 Photon
Motorola MB860 ATRIX 4G
Motorola MB865
Motorola MT870
Motorola MZ505
Motorola MZ601
Motorola MZ604
Motorola Xoom
Motorola XT882
Notion Ink Adam
Quanta LIFETAB_P9514_de
Samsung GT-I9103
Samsung GT-I9500
Samsung GT-P7300
Samsung GT-P7310
Samsung GT-P7500
Samsung GT-P7501 Galaxy Tab 10.1N
Samsung GT-P7510 Galaxy Tab
Samsung SCH-I905
Samsung SGH-927R Galaxy S Glide
Samsung SGH-I927
Samsung SHW-M305W Galaxy Tab 8.9 WiFi
Samsung SHW-M380S Galaxy Tab 10.1 3G
Sony NW-Z1000
Sony Tablet P
Sony Tablet S
Toshiba AC100 Dynabook AZ
Toshiba AT100
Toshiba Folio 100
Toshiba Thrive 7 (AT1S0)
ViewSonic G Tablet