i965: Fix GLX_MESA_query_renderer video memory on 32-bit.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 30 Mar 2017 20:52:46 +0000 (13:52 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 10 Apr 2017 21:30:40 +0000 (14:30 -0700)
commit034b220dc4e56d3514ebd2931b363ab90baee895
tree4793cc453c2a5ca1aa8252787e29e66c44cad3ca
parent5bcfe905019b6865439ec9e32ce28a2df9ca8659
i965: Fix GLX_MESA_query_renderer video memory on 32-bit.

On modern systems with 4GB apertures, the size in bytes is 4294967296,
or (1ull << 32).  The kernel gives us the aperture size as a __u64,
which works out great.

Unfortunately, libdrm "helpfully" returns the data as a size_t, which
on 32-bit systems means it truncates the aperture size to 0 bytes.
We've happily reported this value as 0 MB of video memory via
GLX_MESA_query_renderer since it was originally exposed.

This patch bypasses libdrm and calls the ioctl ourselves so we can
use a proper uint64_t, avoiding the 32-bit integer overflow.  We now
report a proper video memory size on 32-bit systems.

Chris points out that the aperture size (CPU mappable size limit)
isn't really the right thing to be checking.  But libdrm_intel uses
it to fail execbuffer, so it is an actual limit for now.  Once that's
fixed we can probably move to something else.  In the meantime, fix
the obvious typecasting bug.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/intel_screen.c