diff options
author | Andres Rodriguez <[email protected]> | 2017-07-12 18:45:07 -0400 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-08-06 12:42:06 +1000 |
commit | 8b7c5744791fe403375dd1d61c4a99b882044415 (patch) | |
tree | ec5728914a1f98d8d55c9919d304f479e225481e /src/mesa/main/shared.c | |
parent | 322ee1b3636a38c22bc65009f13667a9d5f438cf (diff) |
mesa: add support for memory object creation/import/delete
Used by EXT_external_objects and EXT_external_objects_fd
V2 (Timothy Arceri):
- Throw GL_OUT_OF_MEMORY error if CreateMemoryObjectsEXT()
fails.
- C99 tidy ups
- remove void cast (Constantine Kharlamov)
V3 (Timothy Arceri):
- rename mo -> memObj
- check that the object is not NULL before initializing
- add missing "EXT" in function error message
V4 (Timothy Arceri):
- remove checks for (memory objecy id == 0) and catch in
_mesa_lookup_memory_object() instead.
Signed-off-by: Andres Rodriguez <[email protected]>
Reviewed-by: Samuel Pitoiset <[email protected]>
Diffstat (limited to 'src/mesa/main/shared.c')
-rw-r--r-- | src/mesa/main/shared.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c index 6926d40570b..2cce47e2268 100644 --- a/src/mesa/main/shared.c +++ b/src/mesa/main/shared.c @@ -130,6 +130,7 @@ _mesa_alloc_shared_state(struct gl_context *ctx) shared->SyncObjects = _mesa_set_create(NULL, _mesa_hash_pointer, _mesa_key_pointer_equal); + shared->MemoryObjects = _mesa_NewHashTable(); return shared; } @@ -295,6 +296,17 @@ delete_sampler_object_cb(GLuint id, void *data, void *userData) _mesa_reference_sampler_object(ctx, &sampObj, NULL); } +/** + * Callback for deleting a memory object. Called by _mesa_HashDeleteAll(). + */ +static void +delete_memory_object_cb(GLuint id, void *data, void *userData) +{ + struct gl_memory_object *memObj = (struct gl_memory_object *) data; + struct gl_context *ctx = (struct gl_context *) userData; + ctx->Driver.DeleteMemoryObject(ctx, memObj); +} + /** * Deallocate a shared state object and all children structures. @@ -379,6 +391,11 @@ free_shared_state(struct gl_context *ctx, struct gl_shared_state *shared) _mesa_free_shared_handles(shared); + if (shared->MemoryObjects) { + _mesa_HashDeleteAll(shared->MemoryObjects, delete_memory_object_cb, ctx); + _mesa_DeleteHashTable(shared->MemoryObjects); + } + mtx_destroy(&shared->Mutex); mtx_destroy(&shared->TexMutex); |