cairo_drm_device_t * _cairo_drm_radeon_device_create (int fd, dev_t dev, int vendor_id, int chip_id) { radeon_device_t *device; uint64_t gart_size, vram_size; cairo_status_t status; if (! radeon_info (fd, &gart_size, &vram_size)) return NULL; device = malloc (sizeof (radeon_device_t)); if (device == NULL) return _cairo_drm_device_create_in_error (CAIRO_STATUS_NO_MEMORY); status = radeon_device_init (device, fd); if (unlikely (status)) { free (device); return _cairo_drm_device_create_in_error (status); } device->base.surface.create = radeon_surface_create; device->base.surface.create_for_name = radeon_surface_create_for_name; device->base.surface.create_from_cacheable_image = NULL; device->base.surface.flink = _cairo_drm_surface_flink; device->base.surface.enable_scan_out = NULL; device->base.device.flush = NULL; device->base.device.throttle = NULL; device->base.device.destroy = radeon_device_destroy; device->vram_limit = vram_size; device->gart_limit = gart_size; return _cairo_drm_device_init (&device->base, fd, dev, vendor_id, chip_id, MAX_SIZE); }
cairo_drm_device_t * _cairo_drm_intel_device_create (int fd, dev_t dev, int vendor_id, int chip_id) { intel_device_t *device; cairo_status_t status; if (! intel_info (fd, NULL)) return NULL; device = malloc (sizeof (intel_device_t)); if (unlikely (device == NULL)) return (cairo_drm_device_t *) _cairo_device_create_in_error (CAIRO_STATUS_NO_MEMORY); status = intel_device_init (device, fd); if (unlikely (status)) { free (device); return (cairo_drm_device_t *) _cairo_device_create_in_error (status); } device->base.surface.create = intel_surface_create; device->base.surface.create_for_name = intel_surface_create_for_name; device->base.surface.create_from_cacheable_image = NULL; device->base.surface.flink = _cairo_drm_surface_flink; device->base.surface.enable_scan_out = intel_surface_enable_scan_out; device->base.surface.map_to_image = intel_surface_map_to_image; device->base.device.flush = NULL; device->base.device.throttle = intel_device_throttle; device->base.device.destroy = intel_device_destroy; return _cairo_drm_device_init (&device->base, fd, dev, vendor_id, chip_id, MAX_SIZE); }