X11/Waylandセッション上部のカーネルで画面にグラフィックを表示するには?

X11/Waylandセッション上部のカーネルで画面にグラフィックを表示するには?

(簡単な)外部入力に応答して、単純な(2Dビットマップ)グラフィックスを可能な限り短い待ち時間(約数十ミリ秒)で画面に描画して、結果を経験的にテストできます。画面)リアルタイム、b)オーバーヘッドを最小限に抑えます。 c)ページ反転を完全に無効にします(引き裂くのは大丈夫です)。

それから、X11、Wayland、Wayland + XWayland、Wayland + XWayland + xcompmgrなどのさまざまな固定観念(そしておそらく病的かもしれません)のシナリオで画面に描くものと比較することができます。

これを行うために絵を描くようにLinuxをどのように修正しますか?超過既存のX11/Waylandセッションはありますか?つまり、はい、DRM(Direct Render Manager)に触れたいと思います。

ㅏ。カーネル内部から
のみ。X11にはDRMマスターコントロールがあります。。 :)

私はハードウェアオーバーレイがX11 / Waylandが私が描くすべてのものに落書きするのを防ぐ最も簡単な(そしてほとんどのハードウェアアクセラレーション!)方法になると思います。 (再読み込みを避けるためにシャドウ/連続書き込みフレームバッファキャッシュを実装することに関連する代替案を想像しています...いいえ、ありがとう!)

私は本当に私の熱狂をカーネルモジュールに制限したいと思うし、グラフィックドライバに触れたくありません。 :S(しかし私はi915ですが、Intelグラフィックカードを使用しました。)

だから最後まで読んでくださいhttps://dri.freedesktop.org/docs/drm/、私の意見はおそらく何かを一つにまとめたいです。愚かなフレームバッファを作成し、その愚かなフレームバッファを観察する平面を作成し、その後多分二倍かも一種のDMA-BUFを設定してください...いいえ、ちょっと待ってください。フレームバッファを指す平面があれば、すでに画面にあると思います。

私の主な質問は、DRMを素早く緩やかに使用することで、基本的にこれが画面と対話する唯一のものであることをXに伝え、後で追加の平面を管理する方法です。

答えてくれて本当にありがとう!


Waylandの現在の理解は基本的に合成に基づいており、設計上、1つ以上のビデオフレーム全体をグラフィックカードにリリースする前にバッファリングしないと実行できないことです。

X11にはこの制限はありませんが(オプションのCOMPOSITE拡張です)、ストリームベースの描画プロトコルを使用し、ウィンドウに直接描画する方法はありません。私が知っている最も近いのは、MIT-SHM拡張機能を使用することです。これにより共有メモリを使用できますが、これには少なくとも2つのメモリコピー(me->カーネル、カーネル-> X11)が含まれます。それからX11チューブを刺してXShmPutImageX11に反転するように指示します。つまり、プロセスをリアルタイムで実行しても…まあ、リアルタイムでXを実行するのは恐ろしいので、Xが予約されてデコードされて到着するのを待つ必要があります。私の要求はコマンドキューセンターにあり、ついに反転しました。

だから私は手を伸ばして、グラフィック描画コードをカーネルに直接置くことができるかどうかを調べ、何とかすべてが共存できるようにしました。

これらすべての追加のオーバーヘッドが合計されると予想され、正確に数量化したいと思います。どのように- あるいは、私の精神モデルが完全に間違っており、現代のハードウェアの速度のためにこれらの懸念が無意味であるという具体的な証拠です。

はい極度にすべてのボトルネックが取り除かれた場合、どのような影響があるのか​​、古いシステムと最新のハードウェアを比較すると、どのような違いがあるのか​​を知りたいです。

しかし、この質問は私が質問した他の質問に関連しています。ここにあります。そしてここにあります。残念ながら、この2つの質問に対する答えはまだ残っておらず、これについてはもう議論していません。

ベストアンサー1

おすすめ記事