Hi Marcin, I have some minor comments inlined below. Best regards, Erik
> +static int > +nouveau_bo_create(struct kms_driver *kms, > + const unsigned width, const unsigned height, > + const enum kms_bo_type type, const unsigned *attr, > + struct kms_bo **out) > +{ > + struct drm_nouveau_gem_new arg; > + unsigned size, pitch; > + struct nouveau_bo *bo; > + int i, ret; > + > + for (i = 0; attr[i]; i += 2) { > + switch (attr[i]) { > + case KMS_WIDTH: > + case KMS_HEIGHT: > + case KMS_BO_TYPE: > + break; > + default: > + return -EINVAL; > + } > + } > + > + bo = calloc(1, sizeof(*bo)); > + if (!bo) > + return -ENOMEM; > + > + if (type == KMS_BO_TYPE_CURSOR_64X64_ARGB) { > + pitch = 64 * 4; > + size = 64 * 64 * 4; > + } else if (type == KMS_BO_TYPE_SCANOUT) { > + pitch = width * 4; > + pitch = (pitch + 512 - 1) & ~(512 - 1); What is 512 derived from? Would a #define explain this better? > + size = pitch * height; > + } else { > + return -EINVAL; > + } > + > + memset(&arg, 0, sizeof(arg)); > + arg.info.size = size; > + arg.info.domain = NOUVEAU_GEM_DOMAIN_MAPPABLE | > NOUVEAU_GEM_DOMAIN_VRAM; > + arg.info.tile_mode = 0; > + arg.info.tile_flags = 0; > + arg.align = 512; > + arg.channel_hint = 0; > + > + ret = drmCommandWriteRead(kms->fd, DRM_NOUVEAU_GEM_NEW, &arg, > sizeof(arg)); > + if (ret) > + goto err_free; > + > + bo->base.kms = kms; > + bo->base.handle = arg.info.handle; > + bo->base.size = size; > + bo->base.pitch = pitch; > + bo->map_handle = arg.info.map_handle; > + > + *out = &bo->base; > + > + return 0; > + > +err_free: > + free(bo); > + return ret; > +} > + > +static int > +nouveau_bo_get_prop(struct kms_bo *bo, unsigned key, unsigned *out) > +{ > + switch (key) { > + default: > + return -EINVAL; > + } > +} > + > +static int > +nouveau_bo_map(struct kms_bo *_bo, void **out) > +{ > + struct nouveau_bo *bo = (struct nouveau_bo *)_bo; > + void *map = NULL; > + int ret; > + ret is unused. > + if (bo->base.ptr) { > + bo->map_count++; > + *out = bo->base.ptr; > + return 0; > + } > + > + map = mmap(0, bo->base.size, PROT_READ | PROT_WRITE, MAP_SHARED, > bo->base.kms->fd, bo->map_handle); > + if (map == MAP_FAILED) > + return -errno; > + > + bo->base.ptr = map; > + bo->map_count++; > + *out = bo->base.ptr; > + > + return 0; > +} > + > +static int > +nouveau_bo_unmap(struct kms_bo *_bo) > +{ > + struct nouveau_bo *bo = (struct nouveau_bo *)_bo; > + bo->map_count--; > + return 0; > +} > + > +static int > +nouveau_bo_destroy(struct kms_bo *_bo) > +{ > + struct nouveau_bo *bo = (struct nouveau_bo *)_bo; > + struct drm_gem_close arg; > + int ret; > + > + if (bo->base.ptr) { > + /* XXX Sanity check map_count */ > + munmap(bo->base.ptr, bo->base.size); > + bo->base.ptr = NULL; > + } > + > + memset(&arg, 0, sizeof(arg)); > + arg.handle = bo->base.handle; > + > + ret = drmIoctl(bo->base.kms->fd, DRM_IOCTL_GEM_CLOSE, &arg); > + if (ret) > + return -errno; > + > + free(bo); > + return 0; > +} > + > +int > +nouveau_create(int fd, struct kms_driver **out) > +{ > + struct kms_driver *kms; > + > + kms = calloc(1, sizeof(*kms)); > + if (!kms) > + return -ENOMEM; > + > + kms->fd = fd; > + > + kms->bo_create = nouveau_bo_create; > + kms->bo_map = nouveau_bo_map; > + kms->bo_unmap = nouveau_bo_unmap; > + kms->bo_get_prop = nouveau_bo_get_prop; > + kms->bo_destroy = nouveau_bo_destroy; > +// kms->get_prop = nouveau_get_prop; > + kms->destroy = nouveau_destroy; > + *out = kms; > + > + return 0; > +} > -- > 1.6.4.4 > > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > -- > _______________________________________________ > Dri-devel mailing list > Dri-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/dri-devel > > ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev -- _______________________________________________ Dri-devel mailing list Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel