Open2

GLES3非サポートGPUをどうすんのか考える会

okuokuokuoku

市場では殆どのGPUがGLES3をサポートしているので、それをベースにしたWebGL2はそれなりに妥当な互換性ベースとなっている。(一般に、VulkanやMetalをサポートしていればGLES3は全てサポートできる)

が、 Raspberry Pi4未満Fire tabletの2017年以下 はGLES3をサポートしていないためどうするか考える必要がある。

提案仕様

結論としては、extensionの存在は考慮せずGLES2の最低仕様 + 以下の要素ということにする。

  • GL_EXT_discard_framebuffer は使えたら使う(WebGL1に組込)
  • GL_OES_standard_derivatives は存在をチェックする(WebGL1ではほぼ前提)
  • テクスチャサイズは 2048 まで
  • テクスチャユニットは 8 つまで
  • VTF なし
  • indexは16bit限定
okuokuokuoku

RaspberryPiのVC4

RaspberryPi4で採用されたVC6と違い、VC4はGLES2のスペックギリギリで設計されている。 https://gist.github.com/jvcleave/8657864 によると、使用できるextensionは以下:

GL_OES_compressed_ETC1_RGB8_texture 
GL_OES_compressed_paletted_texture 
GL_OES_texture_npot 
GL_OES_depth24
GL_OES_vertex_half_float 
GL_OES_EGL_image 
GL_OES_EGL_image_external 
GL_EXT_discard_framebuffer 
GL_OES_rgb8_rgba8 
GL_OES_depth32 
GL_OES_mapbuffer 
GL_EXT_texture_format_BGRA8888 
GL_APPLE_rgb_422 
GL_EXT_debug_marker 

Mali400と比べると、 GL_OES_standard_derivativesGL_OES_packed_depth_stencil が欠けている。逆にVTF(頂点シェーダからのtexture fetch)はMaliには無い。

どちらのGPUも OES_element_index_uintOES_vertex_array_object は欠けている。前者はエミュレーションのしようが無い。後者は多少のコストでエミュレーションできる。 また、GL_ANGLE_instanced_arrays もない。

Architecture guide https://docs.broadcom.com/doc/12358545 ではHDRサポートを標榜しているものの、そもそも純正ドライバでは対応するテクスチャフォーマットが開示されていないのでなんともならない。。