ハードウェア GPU の情報
オリジナルの iPhone の導入以来、Apple は新しい iOS デバイスで GPU の能力を向上させ続けています。Metal や OpenGL ES のアプリを記述するときは、アプリが動作する各デバイスの特定の限界を理解する必要があります。現在、2つの異なる GPU カテゴリが、一般的に使用されています:
- アップル A7、A8、A9 GPU
- PowerVR SGX 543 と 554 の GPU
表 2-1 に、Metal と OpenGL ES と互換性のあるデバイスの一覧を示します。
表 2-1 Metal と OpenGL ES 3.0 と互換のデバイス
デバイス名 | GPU |
---|---|
iPhone 6s iPhone 6s Plus | Apple A9 GPU |
iPhone 6 iPhone 6 Plus | Apple A8 GPU |
iPhone 5s | Apple A7 GPU |
iPad Pro Wi-Fi iPad Pro Wi-Fi + Cellular | Apple A9 GPU |
iPad Air 2 Wi-Fi iPad Air 2 Wi-Fi + Cellular | Apple A8 GPU |
iPad Air Wi-Fi iPad Air Wi-Fi + Cellular | Apple A7 GPU |
iPad ミニ 4 Wi-Fi iPad ミニ 4 Wi-Fi + Cellular | Apple A8 GPU |
iPad ミニ 3 Wi-Fi iPad ミニ 3 Wi-Fi + Cellular iPad ミニ 2 Wi-Fi iPad ミニ 2 Wi-Fi + Cellular | Apple A7 GPU |
iPod Touch (第6世代) | Apple A8 GPU |
表 2-2 に、OpenGL ES 2.0 と互換性のあるデバイスのリストを示します。
表 2-2 OpenGL ES 2.0 と互換のデバイス
デバイス名 | GPU |
---|---|
iPhone 6s iPhone 6s Plus | Apple A9 GPU |
iPhone 6 iPhone 6 Plus | Apple A8 GPU |
iPhone 5s | Apple A7 GPU |
iPhone 5c iPhone 5 iPhone 4s | SGX 543 |
iPhone 4 iPhone 3GS iPhone 3GS (中国製) | SGX 535 |
iPad Pro Wi-Fi iPad Pro Wi-Fi + Cellular | Apple A9 GPU |
iPad Air 2 Wi-Fi iPad Air 2 Wi-Fi + Cellular | Apple A8 GPU |
iPad Air Wi-Fi iPad Air Wi-Fi + Cellular | Apple A7 GPU |
iPad ミニ 4 Wi-Fi iPad ミニ 4 Wi-Fi + Cellular | Apple A8 GPU |
iPad ミニ 3 Wi-Fi iPad ミニ 3 Wi-Fi + Cellular iPad ミニ 2 Wi-Fi iPad ミニ 2 Wi-Fi + Cellular | Apple A7 GPU |
iPad ミニ Wi-Fi iPad ミニ Wi-Fi + Cellular | SGX 543 |
iPad Wi-Fi (第4世代) iPad Wi-Fi + Cellular (第4世代) | SGX 554 |
iPad Wi-Fi (第3世代) iPad Wi-Fi + Cellular (第3世代) iPad 2 Wi-Fi iPad 2 Wi-Fi + 3G | SGX 543 |
iPad Wi-Fi iPad Wi-Fi + 3G | SGX 535 |
iPod Touch (第6世代) | Apple A8 GPU |
iPod Touch (第5世代) | SGX 543 |
iPod Touch (第3世代) iPod Touch (第4世代) | SGX 535 |
アップル A7,A8,A9 GPU ハードウェア
Apple A7、A8、および A9 GPU は Metal と OpenGL ES 3.0 の両方をサポートするグラフィックスハードウェアの新世代を共に作成します。A7、A8、および A9 の GPU 上で実行されている 3D、グラフィックスが支配するアプリを最大限に活用するには、Metal を使用します。Metal は、あなたの洗練されたグラフィックス・レンダリングと計算タスクのため非常に高い性能を可能にする、A7、A8、および A9 の GPU に非常に低いオーバーヘッドのアクセスを提供します。Metal は伝統的なグラフィックス API で見られるような多くの高価な状態検証のようなパフォーマンスのボトルネック-を排除します。Metal を使用したくない場合は、アプリをビルドする時、OpenGL ES 3.0を使用して下さい。Metal と OpenGL ES 3.0 は両方とも以前モバイルプロセッサでは使用できなかった複数のレンダリングターガットと変換フィードバックなどのような、多くの新機能を組み込みます。これは、繰延レンダリングなどのように、以前はデスクトップマシン上でしか利用できなかった高度なレンダリング技術が、今や、iOS アプリで使用できることを意味します。どんな特徴が Metal のアプリに表示されるかについての詳細は、メタル・プログラミング・ガイド を参照してください。
A7、A8、および A9 の GPU のパワーを活用するには、あなたのアプリは、Metal または OpenGL ES 3.0 をサポートしていなければなりません。Metal または OpenGL ES 3.0 を使用すると、リソースをレンダリングする、大きなプールと新しい機能へのアクセスを提供します。例えば、A7、A8、および A9 の GPU、Metal または OpenGL ES 3.0 を使用したアプリは、OpenGL ES 2.0 を使用したアプリよりも、シェーダで二倍のテクスチャにアクセスすることができます。
Metal の機能セット
Metal 機能セットは、Metal 実装の機能、制限、および可能性について説明します。各 Metal 機能セットは、特定の OS や GPU のペアリングに接続されています。各 Metal 機能セットに関する具体的な情報については、メタル・プログラミング・ガイド の Metal 機能セット表 の章を参照してください。
OpenGL ES 3.0 のベストプラクティス
これらのプラクティスは、Apple A7、A8、および A9 の GPU ハードウェア上での OpenGL ES のアプリに適用されます。
- 以前に提出された描画コマンドのレンダラによって、すでに使用されている OpenGL ES オブジェクトを変更する操作は避けてください。OpenGL ES のリソースを変更する必要がある場合、フレームの先頭または末尾でこれらの変更をスケジュールします。これらのコマンドは、glBufferSubData、glBufferData、glMapBuffer、glTexSubImage、glCopyTexImage、glCopyTexSubImage、glReadPixels、glBindFramebuffer、glFlush、そしてglFinish が含まれています。
- 描画ガイドラインiOS 用 OpenGL ES プログラミング·ガイド の 必要な時以外レンダリングしたオブジェクトの並べ替えをしない に従ってください。
- 可能な場合、レンダリングバッファの高さと幅は32ピクセルの倍数でなければなりません。
アップル A7,A8,A9 GPU 上の OpenGL ES 3.0
表 2-3 に、OpenGL ES 3.0 の高レベルの概要を提供しています。
表 2-3 アップル A7,A8,A9 GPUに実装された OpenGL ES 3.0 の属性値
OpenGL ES 3.0 属性 | A7 GPU の値 |
---|---|
MAX_TEXTURE_SIZE, MAX_RENDERBUFFER_SIZE, MAX_CUBE_MAP_TEXTURE_SIZE | 4096*4096 |
MAX_ARRAY_TEXTURE_LAYERS | 2048 |
MAX_COLOR_ATTACHMENTS | 4 |
MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS | 50048 |
MAX_COMBINED_TEXTURE_IMAGE_UNITS | 32 |
MAX_COMBINED_UNIFORM_BLOCKS | 24 |
MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS | 51200 |
MAX_DRAW_BUFFERS | 4 |
MAX_FRAGMENT_INPUT_COMPONENTS | 64 |
MAX_FRAGMENT_UNIFORM_BLOCKS | 12 |
MAX_FRAGMENT_UNIFORM_COMPONENTS | 896 |
MIN_PROGRAM_TEXEL_OFFSET | -8 |
MAX_PROGRAM_TEXEL_OFFSET | 7 |
MAX_SAMPLES | 8 |
MAX_TEXTURE_IMAGE_UNITS | 16 |
MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS | 64 |
MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS | 4 |
MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS | 4 |
MAX_VARYING_VECTORS | 15 |
MAX_VERTEX_ATTRIBS | 16 |
MAX_VERTEX_OUTPUT_COMPONENTS | 64 |
MAX_VERTEX_TEXTURE_IMAGE_UNITS | 16 |
MAX_VERTEX_UNIFORM_BLOCKS | 12 |
MAX_VERTEX_UNIFORM_COMPONENTS | 2048 |
MAX_UNIFORM_BLOCK_SIZE | 16384 |
検討事項
A7、A8、および A9 の GPU はスカラプロセッサを使用して、これらの値がベクトルの中で宣言されていても、すべての浮動小数点演算を処理します。書き込みマスクと計算の慎重な定義の適切な使用は、あなたのシェーダのパフォーマンスを向上させます。詳細の情報については、iOS 用の OpenGL ES プログラミング·ガイド の ベクトル計算の遅延した実行 を参照してください。
中·低精度の浮動小数点の、シェーダ値は、16 ビットの浮動小数点値として、同じように計算されます。これは、低精度の値に対して 10 ビットの固定小数点形式を使用する、PowerVR SGX ハードウェアからの変更です。シェーダが低精度の浮動小数点変数を使用し、また PowerVR SGX のハードウェアをサポートする場合は、両方の GPU でシェーダをテストしなければなりません。
アップルの A7,A8,A9 GPU は依存的テクスチャフェッチを不利にしません。
フレームバッファの内容がもはや必要でなくなったときには、常にフレームバッファの破棄操作を使用して下さい。そうしないことでのペナルティーは、それが以前の GPU であったより高いです。最良の結果を得るには、GLKView クラスを使用します。それは自動的にフレームバッファの破棄操作を実装します。
複数のターゲットにレンダリングする場合、4つのイメージのターゲット(およびターゲットに書き込まれたデータ全体が A7 では 128 ビット以下、A8 では 256 ビット以下) にアプリを制限して下さい。単一の sRGB のターゲットは 64 ビットとしてカウントされます。
サポートされている OpenGL ES 3.0 の拡張機能
OpenGL ES 3 は、OpenGL ES 2.0 の Appleの実装の拡張機能によって提供される機能を含んでいます。OpenGL ES 3.0 を使用するよう既存の OpenGL ES 2.0 のアプリを更新する場合は、これらの拡張機能の多くが、OpenGL ES 3.0 では提供されていないことに注意してください。したがって、コードは、代わりに新たなコア機能を使用するように更新する必要があります。
以下の拡張機能は OpenGL ES 3 アプリで A7,A8,A9 GPU でサポートされています。
- APPLE_clip_distance
- APPLE_color_buffer_packed_float
- APPLE_copy_texture_levels
- APPLE_rgb_422
- APPLE_texture_format_BGRA8888
- EXT_color_buffer_half_float
- EXT_debug_label
- EXT_debug_marker
- EXT_pvrtc_sRGB
- EXT_read_format_bgra
- EXT_separate_shader_objects
- EXT_shader_framebuffer_fetch
- EXT_texture_filter_anisotropic
- IMG_read_format
- IMG_texture_compression_pvrtc
以下の追加拡張機能はサポートされていますが、OpenGL ES 3 は、これらの拡張機能と一致するコア機能を提供しています。これらの拡張機能を使用している OpenGL ES 2 アプリを移植する場合には、コアの OpenGL ES 3 の機能にシェーダを移行する必要があります。
Apple A7,A8,A9 GPU 上での OpenGL ES 2.0
表 2-4 に、OpenGL ES 2.0 の高レベルの概要を示します。
表 2-4 アップル A7 GPU に実装された OpenGL ES 2.0 の属性値
OpenGL ES 2.0 の属性 | A7,A8,A9 GPU の値 |
---|---|
MAX_TEXTURE_SIZE、MAX_RENDERBUFFER_SIZE、 MAX_CUBE_MAP_TEXTURE_SIZE | 4096*4096 |
MAX_TEXTURE_IMAGE_UNITS | 8 |
MAX_COMBINED_TEXTURE_IMAGE_UNITS | 8 |
MAX_VERTEX_TEXTURE_IMAGE_UNITS | 8 |
MAX_VERTEX_ATTRIBS | 16 |
MAX_VERTEX_UNIFORM_VECTORS | 128 |
MAX_FRAGMENT_UNIFORM_VECTORS | 64 |
MAX_VARYING_VECTORS | 8 |
検討事項
A7,A8,A9 GPUは、スカラ·プロセッサを使用して、すべての浮動小数点演算を処理し、それらの値がベクトルで宣言された場合であっても、処理します。書き込みマスクとあなたの計算の慎重な定義を適切に使用すると、シェーダのパフォーマンスを向上させます。詳細については、iOS 用の OpenGL ES プログラミング·ガイド の ベクトル計算の遅延した実行 を参照してください。
中·低精度のシェーダ浮動小数点値は、16 ビットの浮動小数点値として、同じように計算されます。これは、低精度の値にとして 10 ビットの固定小数点形式を使用する PowerVR SGX ハードウェアからの変更です。シェーダが、低精度の浮動小数点変数を使用し、また PowerVR SGX のハードウェアをサポートする場合は、両方の GPU でシェーダをテストしなければなりません。
アップル A7,A8,A9 GPU は依存テクスチャフェッチを不利にしません。
フレームバッファの内容がもはや必要なくなったときには、常にフレームバッファの破棄操作を使用して下さい。フレームバッファを破棄しないことでのペナルティーは、それが以前の GPU であった時より高いです。最良の結果を得るには、GLKView クラスを使用します。それは自動的にフレームバッファの破棄操作を実装します。
サポートされている OpenGL ES 2.0 の拡張機能
次の拡張機能が Apple A7 GPU でサポートされています。
- APPLE_clip_distance
- APPLE_color_buffer_packed_float
- APPLE_copy_texture_levels
- APPLE_framebuffer_multisample
- APPLE_rgb_422
- APPLE_sync
- APPLE_texture_format_BGRA8888
- APPLE_texture_max_level
- APPLE_texture_packed_float
- EXT_blend_minmax
- EXT_color_buffer_half_float
- EXT_debug_label
- EXT_debug_marker
- EXT_discard_framebuffer
- EXT_draw_instanced
- EXT_instanced_arrays
- EXT_map_buffer_range
- EXT_occlusion_query_boolean
- EXT_pvrtc_sRGB
- EXT_read_format_bgra
- EXT_separate_shader_objects
- EXT_shader_texture_lod
- EXT_shader_framebuffer_fetch
- EXT_shadow_samplers
- EXT_sRGB
- EXT_texture_filter_anisotropic
- EXT_texture_rg
- EXT_texture_storage
- IMG_read_format
- IMG_texture_compression_pvrtc
- OES_depth_texture
- OES_depth24
- OES_element_index_uint
- OES_fbo_render_mipmap
- OES_mapbuffer
- OES_packed_depth_stencil
- OES_rgb8_rgba8
- OES_standard_derivatives
- OES_texture_float
- OES_texture_half_float
- OES_texture_half_float_linear
- OES_vertex_array_object
PowerVR SGX ハードウェア
イマジネーションテクノロジーズは、PowerVR の技術に関するいくつかの有用な事を紹介します。
OpenGL ES 2.0 のためのベストプラクティス
これらのプラクティスは、SGX シリーズ 5 ハードウェア上の OpenGL ES アプリに適用されます。
- 以前に提出された描画コマンドですでにレンダラーに使われている、OpenGL ES のオブジェクトを変更する操作は避けてください。OpenGL ES のリソースを変更する必要があるときは、フレームの先頭または末尾にこれらの変更をスケジュールします。これらのコマンドには、glBufferSubData、glBufferData、glMapBuffer、glTexSubImage、glCopyTexImage、glCopyTexSubImage、glReadPixels、glBindFramebuffer、glFlush そして glFinish が含まれています。
- プロセッサが隠れた面を消去するのを利用して、iOS 用の OpenGL ES プログラミング·ガイド の 必要な場合以外レンダリングされたオブジェクトの並べ替えはしない で述べた描画のガイドラインに従ってください。
- 頂点バッファオブジェクト(VBOs) は PowerVR SGX 上のパフォーマンスを大幅に向上させます。iOS 用の OpenGL ES プログラミング·ガイドの頂点バッファオブジェクト使用で、頂点データのコピーを管理 を参照してください。
- ランドスケープやポートレートモード間でコンテンツを回転するためにレンダバッファの Core Animation 回転を使用してください。最高のパフォーマンスを得るには、レンダバッファの高さと幅がそれぞれ 32 ピクセルの倍数であることを確認してください。
PowerVR SGX 5 シリーズハードウェアでの OpenGL ES 2.0
表 2-5 に、OpenGL ES 2.0 のプラットフォーム用の高レベルの概要を示します。
表 2-5 SGX 543、554 に実装された OpenGL ES 2.0 の属性値
OpenGL ES 2.0 属性 | SGX 543 と 554 の値 |
---|---|
MAX_TEXTURE_SIZE, MAX_RENDERBUFFER_SIZE, MAX_CUBE_MAP_TEXTURE_SIZE | 4096*4096 |
MAX_TEXTURE_IMAGE_UNITS | 8 |
MAX_COMBINED_TEXTURE_IMAGE_UNITS | 8 |
MAX_VERTEX_TEXTURE_IMAGE_UNITS | 8 |
MAX_VERTEX_ATTRIBS | 16 |
MAX_VERTEX_UNIFORM_VECTORS | 128 |
MAX_FRAGMENT_UNIFORM_VECTORS | 64 |
MAX_VARYING_VECTORS | 8 |
検討事項
PowerVR SGX は、スカラープロセッサを用いた高精度浮動小数点演算を処理し、それらの値がベクトルで宣言された場合であっても、処理します。書き込みマスクとあなたの計算の慎重な定義を適切に使用するとシェーダのパフォーマンスを向上させます。詳細については、iOS 用の OpenGL ES プログラミング·ガイド の ベクトル計算の遅延した実行を参照してください。
中·低精度の浮動小数点値は両方とも、並行して処理されますが、低精度の変数は、いくつかの特定の性能限界があります。
- 低精度で宣言されたベクトルの成分をかきまわすのは、非常に高価であり、避けるべきです。
- 多くの組み込み関数は、中精度の入出力を使用します。アプリがパラメータとして低精度の浮動小数点値を提供したり、低精度の浮動小数点変数に結果を代入した場合、シェーダは値を変換するために追加の命令を含める必要があります。計算のベクトル結果をかきまわすと、これらの追加の命令も追加されます。
最良の結果を得るには、低精度の変数の使用は色の値に対してのみに制限しましょう。
サポートされている OpenGL ES 2.0 の拡張機能
以下の拡張機能を、すべての SGX シリーズ 5 のプロセッサ 543、および 554 でサポートしています。
- APPLE_copy_texture_levels
- APPLE_framebuffer_multisample
- APPLE_rgb_422
- APPLE_texture_format_BGRA8888
- APPLE_texture_max_level
- APPLE_sync
- EXT_blend_minmax
- EXT_debug_label
- EXT_debug_marker
- EXT_discard_framebuffer
- EXT_draw_instanced
- EXT_instanced_arrays
- EXT_map_buffer_range
- EXT_separate_shader_objects
- EXT_shader_framebuffer_fetch
- EXT_read_format_bgra
- EXT_shader_texture_lod
- EXT_texture_filter_anisotropic
- EXT_texture_storage
- IMG_read_format
- IMG_texture_compression_pvrtc
- OES_depth24
- OES_depth_texture
- OES_element_index_uint
- OES_fbo_render_mipmap
- OES_mapbuffer
- OES_packed_depth_stencil
- OES_rgb8_rgba8
- OES_standard_derivatives
- OES_texture_half_float
- OES_texture_float
- OES_texture_half_float
- OES_vertex_array_object
- EXT_color_buffer_half_float
- EXT_occlusion_query_boolean
- EXT_pvrtc_sRGB
- EXT_shadow_samplers
- EXT_sRGB
- EXT_texture_rg
- OES_texture_half_float_linear
次の拡張機能は SGX 543と 554 のプロセッサでのみサポートされています。
前の章
次の章