On Mon, Nov 23, 2020 at 09:53:02AM -0800, Jianxin Xiong wrote: > +cdef class DmaBuf: > + def __init__(self, size, unit=0): > + """ > + Allocate DmaBuf object from a GPU device. This is done through the > + DRI device interface (/dev/dri/card*). Usually this requires the > + effective user id being root or being a member of the 'video' group. > + :param size: The size (in number of bytes) of the buffer. > + :param unit: The unit number of the GPU to allocate the buffer from. > + :return: The newly created DmaBuf object on success. > + """ > + self.dmabuf_mrs = weakref.WeakSet() > + self.dri_fd = open('/dev/dri/card'+str(unit), O_RDWR) > + > + args = bytearray(32) > + pack_into('=iiiiiiq', args, 0, 1, size, 8, 0, 0, 0, 0) > + ioctl(self.dri_fd, DRM_IOCTL_MODE_CREATE_DUMB, args) > + a, b, c, d, self.handle, e, self.size = unpack('=iiiiiiq', args) > + > + args = bytearray(12) > + pack_into('=iii', args, 0, self.handle, O_RDWR, 0) > + ioctl(self.dri_fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, args) > + a, b, self.fd = unpack('=iii', args) > + > + args = bytearray(16) > + pack_into('=iiq', args, 0, self.handle, 0, 0) > + ioctl(self.dri_fd, DRM_IOCTL_MODE_MAP_DUMB, args); > + a, b, self.map_offset = unpack('=iiq', args); Wow, OK Is it worth using ctypes here instead? Can you at least add a comment before each pack specifying the 'struct XXX' this is following? Does this work with normal Intel GPUs, like in a Laptop? AMD too? Christian, I would be very happy to hear from you that this entire work is good for AMD as well Edward should look through this, but I'm glad to see something like this Thanks, Jason