On Tue, Sep 27, 2011 at 4:35 AM, Alan Cox alan@lxorguk.ukuu.org.uk wrote:
Well I think for this case the solution is simple: Tiling not allowed if userspace is too dumb to properly round the buffer up so it fulfills whatever odd requirement the hw has. I think hiding the fact that certain buffers need more backing storage than a naive userspace might assume is ripe for ugly problems down the road.
That depends a lot upon the interface. One good reason for hiding it for example is that if you have hardware where a limit goes away (or worse yet appears) in some rev of the device or an erratum you don't have to issue a new X server.
For some of the other interfaces like the dumb fb api it's even more important the code doesn't know.
I don't however think the helper should know about padding because I think a driver can implement its own function which wraps the helper and then adds the padding itself ?
fwiw, Daniel convinced me to go a slightly different route, and keep get/put_pages() as-is, but instead go with a variant of drm_gem_create_mmap_offset() that takes a size parameter.. ie. roughly like:
int drm_gem_create_mmap_offset(struct drm_gem_object *obj) { return drm_gem_create_mmap_offset_size(obj, obj->size); } int drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size) { ... }
I'll just call drm_gem_create_mmap_offset_size() directly, normal drivers can just use drm_gem_create_mmap_offset(). That seems like it should work..
BR, -R
Alan _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel