Почему рекомендуется использовать несколько объектов Pixel buffer.Конечно, это избыточно? - PullRequest
0 голосов
/ 30 мая 2018

На эту статью обычно ссылаются, когда кто-то спрашивает о текстурах потокового видео в OpenGL.

В ней говорится:

Чтобы максимизировать производительность потоковой передачи, выможет использовать несколько объектов буфера пикселей.Диаграмма показывает, что 2 PBO используются одновременно;glTexSubImage2D () копирует данные пикселей из PBO, в то время как источник текстуры записывается в другое PBO.

Double PBO

Для n-го кадра PBO 1 используется для glTexSubImage2D (), а PBO 2 используется для получения нового источника текстуры.Для n + 1-го кадра 2 пиксельных буфера переключают роли и продолжают обновлять текстуру.Из-за асинхронной передачи DMA процессы обновления и копирования могут выполняться одновременно.CPU обновляет источник текстуры в PBO, в то время как GPU копирует текстуру из другого PBO.

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

Я вижунебольшое улучшение производительности при включении одного PBO.Но вторая PBO не имеет реальной разницы.

Прямо перед кодом glMapBuffer PBO, он вызывает glBufferData с указателем, установленным в NULL.Это делается для того, чтобы избежать задержки синхронизации.

// map the buffer object into client's memory
// Note that glMapBufferARB() causes sync issue.
// If GPU is working with this buffer, glMapBufferARB() will wait(stall)
// for GPU to finish its job. To avoid waiting (stall), you can call
// first glBufferDataARB() with NULL pointer before glMapBufferARB().
// If you do that, the previous data in PBO will be discarded and
// glMapBufferARB() returns a new allocated pointer immediately
// even if GPU is still working with the previous data.

Итак, вот мой вопрос ... Разве это не делает второй PBO совершенно бесполезным?Просто трата памяти!?

С двумя PBO данные текстуры сохраняются 3 раза.1 в текстуре и по одному в каждом PBO.

С одним PBO.Есть две копии данных.И временно только 3-й в том случае, если glMapBuffer создает новый буфер, потому что существующий в настоящее время DMA привязан к текстуре?

В комментариях предполагается, что внутренние драйверы OpenGL способны создавать второй буферЕСЛИ и только КОГДА требуется избегать остановки трубопровода.Используемый буфер используется для DMA, и мой вызов map дает мне новый буфер для записи.

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

1 Ответ

0 голосов
/ 31 мая 2018

Отвечая на мой собственный вопрос ... Но я не приму его в качестве ответа ... (ДА).

Есть много проблем с эталонной программой, связанной с этим вопросом.Он использует немедленный режим.Он использует GLUT!

Программа проводила большую часть своего времени, занимаясь тем, что мы не заинтересованы в профилировании.В основном, рендеринг текста с помощью GLUT и написание красивых полосок на текстуру.Поэтому я удалил эти функции.

Я увеличил разрешение текстур до 8K и добавил еще Режимы PBO .

  • NO PBO (да6 кадр / с)

  • 1 PBO.Сиротный предыдущий буфер.(дает 12,2 кадра в секунду).

  • 2 PBO.Орфа предыдущего буфера.(дает 12,2 кадра в секунду).

  • 1 PBO.Не теряйте предыдущую PBO (возможная остановка - добавлено мной самостоятельно. Дает 12,4 кадра в секунду).

  • 2 PBO.Не теряйте связь с предыдущим PBO (возможно, остановка - добавлена ​​мной самостоятельно. Дает 12,4 кадра в секунду).

Если кто-то еще захочет проверить мой код, он доступен здесь

Я экспериментировал с разными размерами текстур ... и разными функциями updatePixels ... Я не могу, несмотря на все мои усилия, добиться, чтобы реализация с двумя PBO работала лучше, чем реализация с одним PBO.

Кроме того ... НЕ осиротевший предыдущий буфер, фактически обеспечивает лучшую производительность.Совершенно противоположно тому, о чем говорится в статье.

Возможно, современные драйверы / оборудование не страдают от проблемы, которую этот дизайн пытается исправить ...

Возможно, мое графическое оборудование / драйвер глючит, ине пользуясь преимуществом двойного PBO ...

Возможно, часто упоминаемая статья совершенно неправильна?

Кто знает.,,,Мое тестовое оборудование - Intel® R Graphics 5500 (Broadwell GT2).

...