Open2
GLES3非サポートGPUをどうすんのか考える会
市場では殆どの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限定
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_derivatives
や GL_OES_packed_depth_stencil
が欠けている。逆にVTF(頂点シェーダからのtexture fetch)はMaliには無い。
どちらのGPUも OES_element_index_uint
や OES_vertex_array_object
は欠けている。前者はエミュレーションのしようが無い。後者は多少のコストでエミュレーションできる。 また、GL_ANGLE_instanced_arrays
もない。
Architecture guide https://docs.broadcom.com/doc/12358545 ではHDRサポートを標榜しているものの、そもそも純正ドライバでは対応するテクスチャフォーマットが開示されていないのでなんともならない。。