問題タブ [mali]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - glGenerateMipmap() は Samsung Galaxy SII で非常に遅い (Mali-400 MP)
私は現在、Android NDK と OpenGL ES 2.0 を使用して、Samsung Galaxy SII (ARM Mali-400 MP) で GPGPU を実行しています。そのためには、FBO を介してレンダリングされたテクスチャからミップマップを生成する必要があります。残念ながら、 glGenerateMipmap() はデバイス上で非常に遅いようです。512x512 RGBA8888 テクスチャのミップマップを生成するには、約 90 ミリ秒かかります。この機能がはるかに高速 (約 2 ミリ秒) に動作する他の Android デバイスでも同じコードを試したので、この速度低下は本当に困惑させられます。ここで何か間違っているか、何かが欠けていますか? ARM Mali GPU を搭載したデバイスで動作するこのケースのサンプル コードを提供できる人はいますか?
私のコードの関連部分は次のとおりです。
styles - テスト用の Samsung Galaxy S2 または Samsung Nexus i9250?
ICS 向けに開発したいので、アプリケーションのテスト用に 4.0.3 スマートフォンを購入したいと考えています。エミュレーターでのみテストしたアプリをリリースしたくありません (j2me アプリを開発したことがある人なら誰でもその理由を知っていると思います...)。
S2 と Nexus i9250 のどちらかを選ばなければなりません。S2 はより強力なようで、非常に人気がありますが、元の ICS 4.0.3 スタイルではありません。Nexus i9250 OS は純粋な android ICS であり、少し安価です。
Android アプリケーションは S2 で異なって見えますか? TimePickers などのウィジェットについて話しています。
敬具、ウルフェン
編集:
主な質問は次のとおりです。TouchWiz は私のアプリケーションに何らかの影響を与えますか?
opengl-es-2.0 - HeightMap:gltexsubimage2dVS頂点属性
地形の動的な高さマップがあり、ほぼすべてのフレームで変更されます。高さマップとしてgltexsubimage2dとtextureを使用するか、vboを作成する代わりに、フレームごとに頂点バッファを更新する必要がありますか?どのアプローチをより速くする必要がありますか?vbo経由でデータを送信するハードウェアバイリニアフィルターを失っていることを理解していますが、google gltexxubimage2dによると、モバイルデバイスで問題が発生し、フレームごとに使用できるようには見えません。
実際の質問は次のようになります:頂点属性を使用するよりもテクスチャのGPUメモリにデータを送信する方が速いですか?実装に依存しますか?たとえば、ビデオ再生キャンバスとしてクワッドを使用するために、Androidのopenglでテクスチャの更新を実現したボディはありますか?この質問は、mali-400やtegra3のような新しいデバイスではおそらくナンセンスであり、どちらのアプローチでもパフォーマンスが十分であると理解していますが、adreno200またはsgx535との互換性が必要です。
android - OpenGL ES2: フラグメント シェーダーで Mali GPU を使用した複数のテクスチャ
私は現在、Androidで複数のテクスチャを動作させようとしています(1つのフラグメントシェーダーを使用)。私のNexus 4では問題なく動作しますが、テストしたすべてのSamsungデバイスでは、長方形がまったく表示されません. 問題は、texture2d がフラグメント シェーダー コード内で 2 回呼び出されることです。
このシェーダーuTexture
では、法線マップ ( ) を使用してテクスチャ ( )を歪めrefractTexture
ます。正しい(計算されたものではない)座標を使用してみましたが、gl_FragColor
削除するとすぐにvec4 bumpTex = 2.0 * texture2D(refractTexture, vRefTexCoordinate) - 1.0;
デバイスに表示されます。
どんなヒントでも役に立ちます。
ここで要求されているのは、テクスチャのセットアップに使用する Java コードです。
頂点シェーダーの C コード:
android - MALI 400 の Android Videoplayer で SurfaceTexture を動作させる際の問題
ここの多くの投稿にあるコードを基本的に使用して、ビデオをテクスチャにレンダリングするアプリケーションを作成しました。オリジナルは、ここにあるいくつかの nVidia サンプル (VideoSurfaceView) から来ていると思います: Using SurfaceTexture in Android
この例は、モバイル デバイスとタブレット (両方とも Tegra ベース) で完全に正常に動作します。その後、MALI 400 ベースの Android システム (Minix Neo5) で同じコードを試してみましたが、ビデオが再生されていることがわかりますが、主に黒い画面にゴミが表示されます (わずか 3 または 4 行)。
OpenGL ES トレーサーを使用して、SurfaceTexture からテクスチャ自体にコピーされたものを確認しようとしましたが、トレーサーはそれを正しく表示できないようです (tegra システムでも tegra デバイスでも)。 OpenGL エラーも警告も表示されず、すべて正常に動作しているようです。
何かが TEXTURE_EXTERNAL にコピーされた場合にどうなるかを示すことができる他のツールはありますか? すべての TEXTURE_2D がトレーサーで利用できます。
MALI システムで気付いた奇妙な点の 1 つは、高解像度ビデオをまったく再生できないことです。そして、私のビデオ 1280x720 は、SoftwareRenderer を使用していることをデバッガーで報告しています。おそらくそれが、フレームがテクスチャとして使用される OGL_IMAGE に正しくコピーされない理由です。
内部で何が起こっているのかをもう少し理解する必要があると思いますが、パフォーマンスが悪くても、システムがそれを実行できないか、単に機能するはずであるというエラーが予想されました。おそらく、これは Android の修正版であり、メディアプレーヤーのコードが壊れているだけです...
android - ヘビー フラグメント シェーダーのパフォーマンスの最適化
次のシェーダー セットの最適化についてサポートが必要です。
バーテックス:
断片:
シェーダーは 2D テクスチャを受け取り、それを高解像度の 2D サーフェス (デバイス画面) で美しくスケーリングすることを目的としています。それが重要な場合のSABRスケーリングアルゴリズムの最適化です。
すでに機能しており、非常にハイエンドなデバイス (LG Nexus 4 など) では問題なく動作しますが、弱いデバイスでは非常に遅くなります。
私にとって本当に重要なデバイスは、Mali 400MP GPU を搭載した Samsung Galaxy S 2 \ 3 です。
これまでのところ、私は試しました:
- バリエーションの排除 (ARM の Mali ガイドからのアドバイス) - マイナーな改善が行われました。
- 自分の mix() 関数をオーバーライドする - うまくいきませんでした。
- float の精度を lowp に下げます - 何も変わりませんでした。
レンダリング時間 (eglSwapBuffers の前後) を計算することでパフォーマンスを測定します。これにより、非常に直線的で一貫したパフォーマンスの測定値が得られます。
それを超えて、どこを見ればいいのか、ここで何を最適化できるのか本当にわかりません...
これが重いアルゴリズムであることは承知しており、使用する別のスケーリング方法についてアドバイスを求めているわけではありません。多くの方法を試しましたが、このアルゴリズムが最良の視覚的結果をもたらします。最適化された方法でまったく同じアルゴリズムを使用したいと考えています。
アップデート
従属ベクトルではなく定数ベクトルを使用してすべてのテクスチャ フェッチを行うと、パフォーマンスが大幅に向上することがわかりました。これは明らかに大きなボトルネックです。おそらくキャッシュが原因です。ただし、これらのフェッチを行う必要があります。私は少なくともいくつかのフェッチを vec2 変数で (スウィズリングなしで) やってみましたが、何も改善しませんでした。21 のテクセルを効率的にポーリングするにはどうすればよいでしょうか。
出力が少なくとも x2 でスケーリングされ、GL_NEAREST でポーリングするため、計算の大部分がまったく同じ一連のテクセルで複数回行われていることがわかりました。まったく同じテクセルに該当するフラグメントが少なくとも 4 つあります。高解像度デバイスでスケーリングが x4 の場合、同じテクセルに 16 個のフラグメントが存在します。これは大きな無駄です。複数のフラグメント間で変化しないすべての値を計算する追加のシェーダー パスを実行する方法はありますか? 追加のオフスクリーン テクスチャにレンダリングすることを考えましたが、テクセルごとに 1 つだけでなく複数の値を格納する必要があります。
アップデート
- 既知のブール規則を使用してブール式を単純化しようとしました-いくつかの操作を節約しましたが、パフォーマンスには何の影響もありませんでした.
アップデート
- 計算を頂点シェーダーに渡す方法について考えました。フルスクリーンを作成する「ジオメトリ」を持っているだけですが、スケーリング前の元の各ピクセルに対応する多くの頂点があります。たとえば、元のテクスチャが 320x200 で、ターゲット スクリーンが 1280x800 の場合、320x200 の頂点が均等に広がります。次に、それらの頂点でほとんどの計算を行います。問題は、ターゲット デバイス (S2 \ S3) が頂点テクスチャ サンプリングをサポートしていないことです。
アップデート
- LG Nexus 4 と Samsung Galaxy S3 でパフォーマンスを測定したところ、Nexus 4 の方が 10 倍以上高速であることがわかりました。どうすればいいの?これらは、同じ世代、同じ解像度などの 2 つのデバイスです。Mali 400MP は、特定の状況では本当に悪いのでしょうか? Nexus 4 と比較して動作が非常に遅くなる特定の何かがあると確信しています (ただし、まだ何が見つかりませんでした)。
embedded - Mali400 プラットフォームで OpenGL ES 2.0 プログラムが失敗する
OpenGL ES 2.0 を使用して単純なテクスチャ ストリーム レンダリング プログラムを作成しています。このプログラムはデスクトップでは動作しますが、Mali400 GPU を搭載した組み込みプラットフォームでは失敗します。LCD が黒くなり、上部の数行が点滅します。コードの何が問題なのかわかりません。私は OK である他の OpenGL ES 2.0 プログラムをいくつか試したので、問題は私のコードにあるはずです。どんな助けでも大歓迎です。ありがとう。
main.c
vert.glsl
frag.glsl
opengl-es-2.0 - GL_OES_vertex_half_float および OES_element_index_uint
私の OpenGL ES 2.0 実装が GL_OES_vertex_half_float と OES_element_index_uint をサポートしていないことを glGetString(GL_EXTENSIONS) で確認しました。MALI400MPを使用しています。両方を復元する方法はありますか?
ありがとう
opengl - OpenGL 顔検出
私は現在、人の検出とカウントのプロジェクトに取り組んでいます。基本的に、USB ウェブカメラを介してシーン内の人を検出し、通り過ぎる人をカウントします。現在、私のセットアップは次のとおりです。
- OpenCV 2.4.6、Haar法(浮動小数点処理)で人の頭を検出
- ARM A9クアッドコアとMaliクアッドコアGPUを搭載したARMボード
残念ながら、処理時間は 1 フレームあたり 70 ~ 100 ミリ秒 (14 ~ 10 fps) と十分に速くないため、通常の速度またはそれより速い速度で歩いている人はカウントされません。ボトルネックは OpenCV の HaarDetection メソッドにあり、基本的に 1 フレームあたりの処理時間の 90% がプロセスによって消費されます。
整数処理に基づく LBP モデルである Haar 以外の別のモデルを使用してみましたが、これまでのところ、私の LBP モデルは満足のいくものではなく、まだ新しいモデルの作成に取り組んでいます。また、OpenCV (OpenCV でネイティブに実装されたマルチスレッド) で TBB を使用してみましたが、Odroid で何らかの理由でクラッシュが発生し、TBB を使用しないとアプリケーションが安定して動作します。
私が考えることができる唯一の最適化は、ボードで Mali GPU を利用し、修正された HaarDetection で OpenCV を再コンパイルして GPU 処理能力を利用することです。私の質問は、これは OpenGL ライブラリを使用して実行可能ですか? OpenGLのほとんどの例は、画像を処理するのではなく、グラフィックをレンダリングすることです。