WPF и SlimDX (DirectX 11) взаимодействуют - PullRequest
2 голосов
/ 27 марта 2012

Здравствуйте! Мне удалось интегрировать графику SlimDX и DirectX 11 в приложение WPF с помощью D3DImage и общих текстур. Однако при рендеринге простых сцен (например, GameOfLife в сэмплах SlimDX) при высоком разрешении (2560x1440) я получаю очень низкую производительность.

Я попытался выполнить профилирование производительности моего метода рендеринга, и похоже, что большую часть времени тратится на блокировку D3DImage при аннулировании буфера.

_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();

Много времени тратится на смывание устройства после нанесения:

_device.ImmediateContext.Flush(); // <- 20,6% of the time when rendering the frame

Кто-нибудь знает проблему и как это оптимизировать? Можно ли ожидать снижения производительности при интеграции WPF и SlimDX?

1 Ответ

1 голос
/ 30 марта 2012

Поскольку вы сталкиваетесь с проблемами производительности при блокировке и сбросе вызовов (это моменты, когда графический процессор должен синхронизироваться с процессором), я предполагаю, что ваша программа строго привязана к графическому процессору, и процессор должен продолжать ждать чтобы это наверстать. Это также объясняется увеличением производительности при отключении вычислительного шейдера.

Я не уверен, что вам сказать в этот момент, за исключением того, что, если это предположение верно, может показаться, что ваша карта не может справиться с нагрузкой.

...