Работай вместо того, чтобы ждать glMapBuffer - PullRequest
1 голос
/ 22 мая 2011

Я использую OpenGL для некоторой обработки GPGPU.Таким образом, у меня есть разные потоки, дающие работу потоку обработки OpenGL.

После каждого «рабочего элемента» мне нужно вызывать glReadPixels и glMapBuffer для передачи данных обратно на хост из PBO.Однако проблема заключается в том, что glMapBuffer блокирует поток, и никакая полезная работа не может быть выполнена до завершения передачи DMA, даже если графический процессор не используется.Обычный способ решить эту проблему - создать конвейер с глубиной времени самой длинной передачи DMA.Тем не менее, так как я работаю над системой с низкой задержкой, это неоптимально.

Есть ли способ ждать glMapBuffer в отдельном потоке или, возможно, получить уведомление каккогда передача DMA закончилась , чтобы максимально уменьшить задержку?

1 Ответ

2 голосов
/ 22 мая 2011

Есть ли дополнительная работа в других потоках, кроме одного блока glMapBuffer? Вы можете иметь несколько контекстов OpenGL, каждый из которых активен в своем собственном потоке; если они настроены на совместное использование объектов, они могут работать одновременно.

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

...