こんにちは私はD3DImageと共有テクスチャを使ってWPFアプリケーションでSlimDXとDirectX 11グラフィックスを統合することができました。しかし、高解像度(2560x1440)でシンプルなシーン(SlimDXサンプルのGameOfLifeなど)をレンダリングすると、パフォーマンスが低下します。WPFとSlimDX(DirectX 11)interop
私のレンダリングメソッドのパフォーマンスプロファイリングを試してみましたが、バックバッファを無効にするときにD3DImageをロックするのにほとんどの時間が費やされているようです。
_device.ImmediateContext.Flush(); // <- 20,6% of the time when rendering the frame
誰もが問題を知っているとどのようにこれを最適化する:
_d3dImage.Lock(); // <- this call takes 78,5 % of the time when rendering the frame
_d3dImage.AddDirtyRect(new Int32Rect(0, 0, _d3dImage.PixelWidth, _d3dImage.PixelHeight));
_d3dImage.Unlock();
多くの時間を描画した後、デバイスをflusing費やされていますか? WPFとSlimDXの統合時に降下パフォーマンスを期待できますか?
ロックは、UIスレッドがバックバッファの読み込みを停止するまでスレッドをブロックします。フラッシングは非常に高価ですので、これらの結果は珍しいことではありません。あなたの実際のパフォーマンスの数字は何ですか?あなたのGPUはシェーダの計算をサポートしていますか?そうでなければ、それはソフトウェアで(すなわち、匂いの速さで)実行されるだろう。 –
問題は、GameOfLifeサンプルで使用されている計算シェーダと何か関係があるようです。私がそれを無効にすると、フレームレートは60fpsに戻ります... – Pking