Привет, мне удалось интегрировать графики SlimDX и DirectX 11 в приложение WPF, используя D3DImage и общие текстуры. Однако, но я получаю очень низкую производительность при рендеринге простых сцен (например, GameOfLife в образцах SlimDX) с высоким разрешением (2560x1440).WPF и SlimDX (DirectX 11) interop
Я попытался выполнить профилирование производительности моего метода визуализации, и похоже, что большая часть времени тратится на блокировку 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();
Много времени тратится flusing устройство после нанесения:
_device.ImmediateContext.Flush(); // <- 20,6% of the time when rendering the frame
Каждый знает проблему и как оптимизировать это? Можете ли вы ожидать получения снижения производительности при интеграции WPF и SlimDX?
Блокировка блокирует нить до тех пор, пока нити пользовательского интерфейса не перестанут считывать задний буфер, а промывка довольно дорогая, поэтому эти результаты не являются необычными. Каковы ваши фактические показатели эффективности? Поддерживает ли ваш GPU вычисление шейдеров? Если нет, то это будет работать в программном обеспечении (то есть со скоростью запаха). –
Похоже, проблема может иметь какое-то отношение к вычислительному шейдеру, используемому в образце GameOfLife. Если я отключу его, частота кадров вернется до 60 кадров в секунду ... – Pking