Exemple #1
0
Fichier : drm.c Projet : ibab/swc
void swc_drm_finalize()
{
    if (drm.global)
        wl_global_destroy(drm.global);
    wl_event_source_remove(drm.event_source);
    wld_destroy_renderer(swc.drm->renderer);
    wld_destroy_context(swc.drm->context);
    close(swc.drm->fd);
}
Exemple #2
0
bool swc_shm_initialize()
{
    if (!(swc.shm->context = wld_pixman_create_context()))
        goto error0;

    if (!(swc.shm->renderer = wld_create_renderer(swc.shm->context)))
        goto error1;

    shm.global = wl_global_create(swc.display, &wl_shm_interface, 1,
                                  NULL, &bind_shm);

    if (!shm.global)
        goto error2;

    return true;

  error2:
    wld_destroy_renderer(swc.shm->renderer);
  error1:
    wld_destroy_context(swc.shm->context);
  error0:
    return false;
}
Exemple #3
0
void swc_shm_finalize()
{
    wl_global_destroy(shm.global);
    wld_destroy_renderer(swc.shm->renderer);
    wld_destroy_context(swc.shm->context);
}
Exemple #4
0
Fichier : drm.c Projet : ibab/swc
bool swc_drm_initialize()
{
    struct stat master, render;

    if (!find_primary_drm_device(drm.path, sizeof drm.path))
    {
        ERROR("Could not find DRM device\n");
        goto error0;
    }

    drm.taken_ids = 0;
    swc.drm->fd = launch_open_device(drm.path, O_RDWR | O_CLOEXEC);

    if (swc.drm->fd == -1)
    {
        ERROR("Could not open DRM device at %s\n", drm.path);
        goto error0;
    }

    if (fstat(swc.drm->fd, &master) != 0)
    {
        ERROR("Could not fstat DRM FD: %s\n", strerror(errno));
        goto error1;
    }

    if (snprintf(drm.path, sizeof drm.path, "/dev/dri/renderD%d",
                 minor(master.st_rdev) + 0x80) >= sizeof drm.path)
    {
        ERROR("Render node path is too long");
        goto error1;
    }

    if (stat(drm.path, &render) != 0)
    {
        ERROR("Could not stat render node for primary DRM device: %s\n",
              strerror(errno));
        goto error1;
    }

    if (master.st_mode != render.st_mode
        || minor(master.st_rdev) + 0x80 != minor(render.st_rdev))
    {
        ERROR("Render node does not have expected mode or minor number\n");
        goto error1;
    }

    if (!(swc.drm->context = wld_drm_create_context(swc.drm->fd)))
    {
        ERROR("Could not create WLD DRM context\n");
        goto error1;
    }

    if (!(swc.drm->renderer = wld_create_renderer(swc.drm->context)))
    {
        ERROR("Could not create WLD DRM renderer\n");
        goto error2;
    }

    drm.event_source = wl_event_loop_add_fd
        (swc.event_loop, swc.drm->fd, WL_EVENT_READABLE, &handle_data, NULL);

    if (!drm.event_source)
    {
        ERROR("Could not create DRM event source\n");
        goto error3;
    }

    if (!wld_drm_is_dumb(swc.drm->context))
    {
        drm.global = wl_global_create(swc.display, &wl_drm_interface, 2,
                                      NULL, &bind_drm);

        if (!drm.global)
        {
            ERROR("Could not create wl_drm global\n");
            goto error4;
        }
    }

    return true;

  error4:
    wl_event_source_remove(drm.event_source);
  error3:
    wld_destroy_renderer(swc.drm->renderer);
  error2:
    wld_destroy_context(swc.drm->context);
  error1:
    close(swc.drm->fd);
  error0:
    return false;
}