I'm writing a linux application that captures video frames with a PCIE 1080p60 capture card and transfers them to a texture buffer on an AMD GPU. The incoming frames are DMA'd directly to physical memory obtained via the linux API pci_alloc_consistant(). This is performed in a kernel module.
The user space application maps the physical-space frame buffers into app memory using mmap(). If I copy the mmap'd buffers to a malloced buffer I have no problem using pinned memory. However, I need to avoid this frame copy altogether. The problem is that if I pass the address of the mmap'd buffer to glBufferData() the fglrx driver complains that it cant' "map into GARP space".
Here's a snippet:
glBindBuffer((GLenum)GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD, m_GL_BOName);
glBufferData((GLenum)GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD, m_nSize, m_pData, GL_STREAM_DRAW);
checkGLErrors(" ");
from dmesg:
[fglrx:MCIL_LockMemory] *ERROR* Could not lock memory into GART space
So the question is, how can I use pinned memory to transfer data directly from physical memory allocated via pci_alloc_consistant() to a GPU texture buffer without doing any memcopy()s?
Thanks!
Message was edited by:
Ronald M Here is the error I get when calling glBufferData on the mmap'd physical memory: [fglrx:MCIL_LockMemory] *ERROR* Could not lock memory into GART space