i965: Do not use purged bo after calling glObjectUnpurgeable
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 10 Jan 2017 21:23:24 +0000 (21:23 +0000)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 16 Feb 2017 01:00:42 +0000 (17:00 -0800)
commited442ee39b4e2a2e25ea4ccd880e4bded9d29a51
tree93c531ee40829bf5040816e740f9c7f898d42743
parenta1891da7c865c80d95c450abfc0d2bc49db5f678
i965: Do not use purged bo after calling glObjectUnpurgeable

If the buffer has been freed by the kernel under memory pressure, it is
invalid to try and access the backing storage for that buffer in the
future - the backing storage is not recreated automatically. As such we
need to mark the GL object as being freed for unretained buffers and so
recreate the object on next use.

Futhermore from the GL_APPLE_object_purgeable:

    "In contrast, by calling ObjectUnpurgeableAPPLE with an <option> of
    UNDEFINED_APPLE, the application is indicating that it intends to
    recreate the contents of the storage from scratch.  Further, the
    application is is stating that it would like the GL to do only the
    minimal amount of work set PURGEABLE_APPLE to FALSE.   If
    ObjectUnpurgeableAPPLE is called with the <option> set to
    UNDEFINED_APPLE, then ObjectUnpurgeableAPPLE will return the value
    UNDEFINED_APPLE."

we must always report GL_UNDEFINED_APPLE when called with
glObjectUnpurgeable(GL_UNDEFINED_APPLE).

Testcase: piglit/object_purgeable-api-*
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_object_purgeable.c