問題タブ [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 - Android Mali-400 での繰り返しフレーム
Mali-400 GPU を搭載した Android デバイス (Samsung Galaxy S II、Samsung Galaxy S3 Mini、Samsung Galaxy Note II) では、ランダムなタイミングで画面に繰り返しフレームが表示され始めます。
次のビデオの 0:51 から 1:01 までの例https://www.youtube.com/watch?v=5-p6Oy0BZmg
新しいフレームがレンダリングされていないようで、古いバッファにあったものが再び表示されています。ゲームは繰り返されるフレームの後ろで進行し続けます。
これは、他の GPU では発生しません。
glFlush または glFinish の使用について読みましたが、onDrawFrame の後に eglSwapBuffers を実行すると、GLSurfaceView がこれを処理します。
Mali-400 の癖について読んだことがあります。たとえば、テクスチャ 座標に変化を使用したり、lowp を使用したりする方が良いのですが、役に立ちません。参照用のシェーダーは次のとおりです。
頂点シェーダー:
フラグメント シェーダー:
これらのシェーダーが最適ではないことは承知しており、修正されたパイプラインを再現する道をたどっています。
しばらくすると、または画面に触れると、レンダリングは通常に戻ります。タッチ時に通常に戻ると考えることができる唯一の理由は、色分けを使用してタッチされたオブジェクトを検出することです。イメージをバック バッファーにレンダリングし、そこから glReadPixels をレンダリングします。次に、バック バッファを通常のゲーム イメージで上書きします。
この問題に対処する方法についてのアイデアがありません。
編集
Muzza のアドバイスに従って、GL エラーのログを記録し始めました。glGetInteger と glBindBuffer がメモリ不足を報告します。
上記で、問題はしばらくすると自然に解決すると言いました。その場合、ログに次のように表示されます。
opengl-es - OpenGLES2.0 アプリケーションで使用する Mali オフライン コンパイル済みシェーダー
Mali-400 GPU を使用しています。Mali オフライン シェーダー コンパイラを使用して、Vertex シェーダーと Fragment シェーダーをコンパイルしたいと考えています。
以下の手順で、ARM Mali オフライン コンパイラを使用して Vertex シェーダと Fragment シェーダをコンパイルしました。
malisc.exe --vertex -c Mali-400 -r r1p1 -d Mali-400_r5p0-01rel0 Vertex_shader.glsl -o vshader.out malisc.exe --fragment -c Mali-400 -r r1p1 -d Mali-400_r5p0-01rel0 Fragm_shader.glsl -o fragment.out
以下のようなコードを使用しています。アプリケーションは正常にコンパイルされますが、アプリケーションがターゲットで実行されません。シェーダー バイナリ コンテンツを静的配列にコピーし、それを glShaderBinary で使用します。
私のコードスニペット:
このアプリケーションの実行中に、ターゲットで次のメッセージが表示されます。
info: L0101 アタッチされているすべてのシェーダーは、リンクする前にコンパイルする必要があります
OpenGLES2.0 アプリケーションでオフラインでコンパイルされたシェーダーを使用するためのサンプル コードを投稿してください。
loops - OpenCL の大きなグローバル サイズまたは作業項目ごとの for ループ?
カーネルとして実装する必要があるいくつかのサブルーチンを含む比較的複雑な画像処理アルゴリズムを実装するために、OpenCL を学習しています。
実装は、Mali T-6xx GPU で行うことを目的としています。
「OpenCL Programming by Example」の本と「Mali-T600 GPU での OpenCL カーネルの最適化」のドキュメントを読みました。
本の例では、グローバル サイズの作業項目を使用し、各作業項目は for ループで数ピクセルを処理します。
このドキュメントでは、カーネル内の作業項目ごとに 1 回の実行があるため、カーネルはループなしで記述されています。
Mali T-600 GPU でスポーンできるワークアイテムの最大グローバル サイズは 256 (単純なカーネルの場合) であるため、ほとんどの画像で処理するピクセルが明らかに多いため、私の理解では、ループのないカーネルがスポーンします。ワークアイテムのグローバルサイズがカーネルの実行を完了し、グローバルサイズが画像内のピクセルの量になるまで、できるだけ早く追加のワークアイテムスレッドを実行します。そうですか?それ自体が一種のスレッド生成ループであるように?
一方、本の中で。グローバル ワーク サイズは、処理するピクセルの量よりも小さくなりますが、カーネルには、カーネル コードの実行中に各ワーク アイテムを数ピクセル処理させるループがあります。
そのため、画像処理カーネルまたは OpenCL カーネルを記述する適切な方法と、両方の方法を正しく理解していると仮定して、どのような状況で一方の方法が他方よりも優れているかを知りたいです...
c - Opencl で clGetDeviceIDs がエラー CL_OUT_OF_HOST_MEMORY を返す
私はGPU を搭載したホタル rk 3288 ボードを持っているので、次のようにプラットフォーム情報を読み取ることができる非常に基本的なコードを記述した openCL C コードをテストしたいです。
出力:
プラットフォーム 1 の数: エラー = 0
clGetPlatformIDs がエラーを返す = 0
プラットフォーム情報 0: ベンダー = ARM 名 = ARM プラットフォーム バージョン = OpenCL 1.1 エラー = 0
clGetDeviceIDs GPU エラー -6
デバイス タイプ ffffffdf:
MAX_WORK_ITEM_DIMENSIONS = 0 、MAX_WORK_GROUP_SIZE = 0
device_id FOR Platform = 0 ベンダー = ARM、デバイス名 = ARM プラットフォーム、
デバイス バージョン = OpenCL 1.1 、ドライバー バージョン = �*��
CL_DEVICE_PROFILING_TIMER_RESOLUTION = 0
最大計算単位 = 0
最大クロック周波数 = 0
なぜ返品なのか理解できません-6 (CL_OUT_OF_HOST_MEMORY)
か?
ホストまたは欠落している場所で OpenCL 実装に必要なリソースの割り当てに失敗するのはなぜですか?
android - GUI アプリケーションのバックグラウンド モードを低レベルで理解する
私は主に ARM Mali GPU と android に興味がありますが、ここにある一般的な情報は役に立ちます。「GUIアプリケーションがバックグラウンドになる」などの用語について、どのレベルで認識しているか知りたいだけです
- プラットフォーム API レベル (つまり、opengl 上のグラフィカル スタック システム ライブラリ) (1)
- OpenGLレベルで?(2)
- GPU (ドライバーおよびハードウェア レベル) は、「アプリケーションがバックグラウンドに移行する」とは何かを理解していますか? (3)
基本的には(1)のはずです。アプリがバックグラウンドになったときに何が起こるべきか、つまり破棄できるグラフィックデータと再開に必要な基準はありますか? それとも、各プラットフォームが独自の方法でこれを実装していますか? バックグラウンドからフォアグラウンドに戻ったときにGUIアプリケーションを再開するために、低レベルのグラフィカルコンテキストからどのデータを保存する必要があるかについて、誰かが有用な情報または参照を提供できますか?
android - Android OpenCL 上の Mali 非互換 DDK
私は、Mali T-760 GPU を搭載した Galaxy Note 5 で OpenCL を使用する Android アプリに取り組んでいました。デバイスからライブラリを取得し、Mali OpenCL SDK からヘッダーを取得すると、すべてが機能しました。
Mali T-880 GPU を搭載した Galaxy S7 Edge で同じアプリをビルドして実行しようとしています。デバイスからライブラリを取得し、以前と同じヘッダーを使用しました。
今、私はこのエラーを受け取ります:
E/mali: エラー: DDK はシステム上のどの Mali GPU とも互換性がありません。DDK は 0x750 r0p1 ステータス範囲 [0..15] 用に構築されましたが、一致する GPU はありませんでした:
E/mali: /dev/mali0 が 0x880 r2p0 status 0 として検出されました
デバイス自体からライブラリを取得し、別の場所からもライブラリを試したので、奇妙です:
/system/lib/libOpenCl.so
/system/vendor/lib/libOpenCL.so
/system/vendor/lib/egl/libGLES_mali.so
すべての場合で、同じエラーが発生します。
このDDKは何ですか?
どこに指定されていますか?ヘッダーで?共有オブジェクトで?
アプリを機能させるには、アプリで何を更新する必要がありますか?
caching - L1 キャッシュなしで L2 キャッシュを使用できますか?
Mali 450 GPUに関するプロジェクトに取り組んでいます。図では、クラスで学んだことに基づいて意味をなさないレベル 2 キャッシュしかないことに気付きました。私の理解では、レベル 1 キャッシュは常に最も近くて最小のキャッシュであるため、これをレベル 1 キャッシュと呼ぶ必要があります。または、図でラベル付けされていないレベル 1 キャッシュはありますか?
また、明確化のための副次的な質問として: レベル 2 キャッシュは、再度使用/参照できる画像/ビデオ データの格納を担当しますか?
arm - ARM Mali GPU には、Linux カーネルから独立した抽象化レイヤーがありますか?
Videocore IV 仕様を公開する前に、Broadcom はオペレーティング システムに依存しないバイナリ BLOB をリリースしました。ARM Mali GPU には、パブリック インターフェイス仕様の Linux カーネルから独立した抽象化レイヤーがありますか?