Проблема создания тупого буфера Linux DRM (Direct Rendering Manager)Linux

Ответить
Anonymous
 Проблема создания тупого буфера Linux DRM (Direct Rendering Manager)

Сообщение Anonymous »

О создании тупого буфера согласно примеру (https://manpages.debian.org/testing/lib ... .7.en.html)

Код: Выделить всё

struct drm_mode_create_dumb creq;
struct drm_mode_destroy_dumb dreq;
struct drm_mode_map_dumb mreq;
uint32_t fb;
int ret;
void *map;
/* create dumb buffer */
memset(&creq, 0, sizeof(creq));
creq.width = 1920;
creq.height = 1080;
creq.bpp = 32;
ret = drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &creq);
if (ret < 0) {

/* buffer creation failed; see "errno" for more error codes */

...
}
/* creq.pitch, creq.handle and creq.size are filled by this ioctl with

* the requested values and can be used now. */
/* create framebuffer object for the dumb-buffer */
ret = drmModeAddFB(fd, 1920, 1080, 24, 32, creq.pitch, creq.handle, &fb);
if (ret) {

/* frame buffer creation failed; see "errno" */

...
Вызов drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &creq); возвращает код -1 (невозможно выделить память). Создание буферов меньшего размера (например, 64x64) приводит к коду возврата -22 (неверный параметр) следующего вызова drmModeAddFB(fd, 64, 64, 24, 32, creq.pitch, creq.handle, &fb);.
Итак, в чем же может быть проблема? Как вызовы drmIoctl(DRM_IOCTL_MODE_CREATE_DUMB) и drmModeAddFB() должны быть связаны друг с другом и с разрешением устройства DRM?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»