Я использую OpenGL для некоторой обработки GPGPU. Итак, у меня есть разные потоки, работающие с потоком обработки OpenGL.
После каждого «рабочего элемента» мне нужно вызвать glReadPixels и glMapBuffer, чтобы передать данные обратно на хост из PBO. Однако проблема заключается в том, что glMapBuffer блокирует поток, и никакая полезная работа не может быть выполнена до завершения передачи DMA, даже если GPU простаивает. Обычный способ решить эту проблему — создать конвейер с временной глубиной самой длинной передачи DMA. Однако, поскольку я работаю над системой с низкой задержкой, это неоптимально.
Есть ли способ, возможно, ждать glMapBuffer в отдельном потоке или, возможно, получить какое-то уведомление о завершении передачи DMA, чтобы максимально уменьшить задержку ?