Your a life savor man. That did the trick. I cannot test on the Radeon and Nouveau until I get back into the office tomorrow, but it worked great on the VMWGFX driver.
I'll also email David to let him know as his examples (which a lot of people reference) also need to that #define.
Thanks again, - Rian
On Mon, Nov 10, 2014 at 5:33 PM, Dave Airlie airlied@gmail.com wrote:
On 11 November 2014 07:33, Rian Quinn rianquinn@gmail.com wrote:
I would be surprised if the size argument was the issue. That comes right out out of the create IOCTL unmodified. Here is the full source that I am using.
// Clear the arg buffers. memset(&create_arg, 0, sizeof(create_arg)); memset(&map_arg, 0, sizeof(map_arg)); //
// Allocate // Fill in the arguments for the IOCTL. Note that we only support
32bpp
// dumb buffers so that is hard coded here. create_arg.width = width; create_arg.height = height; create_arg.bpp = 32; // Allocate the dumb buffer if (drmIoctl(gpu->fd(), DRM_IOCTL_MODE_CREATE_DUMB, &create_arg)) { svWarning(0) << "Failed: DRM_IOCTL_MODE_CREATE_DUMB - " <<
strerror(errno); return; }
// Store the dumb buffer properties. mSize = create_arg.size; mStride = create_arg.pitch; mHandle = create_arg.handle; //
// Map // Fill in the arguments for the IOCTL. map_arg.handle = mHandle; // Allocate the dumb buffer if (drmIoctl(gpu->fd(), DRM_IOCTL_MODE_MAP_DUMB, &map_arg)) { svWarning(0) << "Failed: DRM_IOCTL_MODE_MAP_DUMB - " <<
strerror(errno); return; }
// Store the mapped memory if ((mVaddr = (svuint32 *)mmap(0, mSize, PROT_READ | PROT_WRITE,
MAP_SHARED, gpu->fd(), map_arg.offset)) == MAP_FAILED) { // Need to clear out the address so that we don't try to use it. mVaddr = NULL;
// Error out. svWarning(0) << "Failed: Dumb Buffer mmap - " << strerror(errno); return; }
mmap is probably truncating the offset,
look into, #define _FILE_OFFSET_BITS 64
AC_SYS_LARGEFILE
Dave.