Mesa (main): mesa/st: move external objects to direct calls
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Dec 7 13:47:27 UTC 2021
Module: Mesa
Branch: main
Commit: da24bb17a83c3e37196629b1cfb35b13d7b852f6
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=da24bb17a83c3e37196629b1cfb35b13d7b852f6
Author: Dave Airlie <airlied at redhat.com>
Date: Mon Dec 6 17:15:25 2021 +1000
mesa/st: move external objects to direct calls
This moves the memory and semaphore objects to direct calls
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14073>
---
src/mesa/main/dd.h | 93 +------------------------
src/mesa/main/externalobjects.c | 34 ++++-----
src/mesa/main/shared.c | 7 +-
src/mesa/state_tracker/st_cb_memoryobjects.c | 14 +---
src/mesa/state_tracker/st_cb_memoryobjects.h | 15 ++--
src/mesa/state_tracker/st_cb_semaphoreobjects.c | 23 ++----
src/mesa/state_tracker/st_cb_semaphoreobjects.h | 29 +++++++-
src/mesa/state_tracker/st_context.c | 4 --
8 files changed, 72 insertions(+), 147 deletions(-)
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 97560987bfc..1d07e15a182 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -59,6 +59,7 @@ struct gl_shader_program;
struct gl_texture_image;
struct gl_texture_object;
struct gl_memory_info;
+struct gl_memory_object;
struct gl_query_object;
struct gl_sampler_object;
struct gl_transform_feedback_object;
@@ -1018,23 +1019,6 @@ struct dd_function_table {
/*@}*/
- /**
- * \name GL_EXT_external_objects interface
- */
- /*@{*/
- /**
- * Called to allocate a new memory object. Drivers will usually
- * allocate/return a subclass of gl_memory_object.
- */
- struct gl_memory_object * (*NewMemoryObject)(struct gl_context *ctx,
- GLuint name);
- /**
- * Called to delete/free a memory object. Drivers should free the
- * object and any image data it contains.
- */
- void (*DeleteMemoryObject)(struct gl_context *ctx,
- struct gl_memory_object *memObj);
-
/**
* Set the given memory object as the texture's storage.
*/
@@ -1073,23 +1057,6 @@ struct dd_function_table {
/*@}*/
- /**
- * \name GL_EXT_external_objects_fd interface
- */
- /*@{*/
- /**
- * Called to import a memory object. The caller relinquishes ownership
- * of fd after the call returns.
- *
- * Accessing fd after ImportMemoryObjectFd returns results in undefined
- * behaviour. This is consistent with EXT_external_object_fd.
- */
- void (*ImportMemoryObjectFd)(struct gl_context *ctx,
- struct gl_memory_object *memObj,
- GLuint64 size,
- int fd);
- /*@}*/
-
/**
* \name GL_ARB_get_program_binary
*/
@@ -1108,64 +1075,6 @@ struct dd_function_table {
struct gl_program *prog);
/*@}*/
- /**
- * \name GL_EXT_semaphore interface
- */
- /*@{*/
- /**
- * Called to allocate a new semaphore object. Drivers will usually
- * allocate/return a subclass of gl_semaphore_object.
- */
- struct gl_semaphore_object * (*NewSemaphoreObject)(struct gl_context *ctx,
- GLuint name);
- /**
- * Called to delete/free a semaphore object. Drivers should free the
- * object and any associated resources.
- */
- void (*DeleteSemaphoreObject)(struct gl_context *ctx,
- struct gl_semaphore_object *semObj);
-
- /**
- * Introduce an operation to wait for the semaphore object in the GL
- * server's command stream
- */
- void (*ServerWaitSemaphoreObject)(struct gl_context *ctx,
- struct gl_semaphore_object *semObj,
- GLuint numBufferBarriers,
- struct gl_buffer_object **bufObjs,
- GLuint numTextureBarriers,
- struct gl_texture_object **texObjs,
- const GLenum *srcLayouts);
-
- /**
- * Introduce an operation to signal the semaphore object in the GL
- * server's command stream
- */
- void (*ServerSignalSemaphoreObject)(struct gl_context *ctx,
- struct gl_semaphore_object *semObj,
- GLuint numBufferBarriers,
- struct gl_buffer_object **bufObjs,
- GLuint numTextureBarriers,
- struct gl_texture_object **texObjs,
- const GLenum *dstLayouts);
- /*@}*/
-
- /**
- * \name GL_EXT_semaphore_fd interface
- */
- /*@{*/
- /**
- * Called to import a semaphore object. The caller relinquishes ownership
- * of fd after the call returns.
- *
- * Accessing fd after ImportSemaphoreFd returns results in undefined
- * behaviour. This is consistent with EXT_semaphore_fd.
- */
- void (*ImportSemaphoreFd)(struct gl_context *ctx,
- struct gl_semaphore_object *semObj,
- int fd);
- /*@}*/
-
/**
* \name Disk shader cache functions
*/
diff --git a/src/mesa/main/externalobjects.c b/src/mesa/main/externalobjects.c
index 01f66b9f12f..85ff12589bf 100644
--- a/src/mesa/main/externalobjects.c
+++ b/src/mesa/main/externalobjects.c
@@ -33,8 +33,10 @@
#include "texstorage.h"
#include "util/u_memory.h"
+#include "state_tracker/st_cb_memoryobjects.h"
+#include "state_tracker/st_cb_semaphoreobjects.h"
/**
- * Delete a memory object. Called via ctx->Driver.DeleteMemory().
+ * Delete a memory object.
* Not removed from hash table here.
*/
void
@@ -91,7 +93,7 @@ _mesa_DeleteMemoryObjectsEXT(GLsizei n, const GLuint *memoryObjects)
if (delObj) {
_mesa_HashRemoveLocked(ctx->Shared->MemoryObjects,
memoryObjects[i]);
- ctx->Driver.DeleteMemoryObject(ctx, delObj);
+ st_memoryobj_free(ctx, delObj);
}
}
}
@@ -144,7 +146,7 @@ _mesa_CreateMemoryObjectsEXT(GLsizei n, GLuint *memoryObjects)
struct gl_memory_object *memObj;
/* allocate memory object */
- memObj = ctx->Driver.NewMemoryObject(ctx, memoryObjects[i]);
+ memObj = st_memoryobj_alloc(ctx, memoryObjects[i]);
if (!memObj) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "%s()", func);
_mesa_HashUnlockMutex(ctx->Shared->MemoryObjects);
@@ -557,7 +559,7 @@ _mesa_TextureStorageMem1DEXT(GLuint texture,
static struct gl_semaphore_object DummySemaphoreObject;
/**
- * Delete a semaphore object. Called via ctx->Driver.DeleteSemaphore().
+ * Delete a semaphore object.
* Not removed from hash table here.
*/
void
@@ -647,7 +649,7 @@ _mesa_DeleteSemaphoresEXT(GLsizei n, const GLuint *semaphores)
if (delObj) {
_mesa_HashRemoveLocked(ctx->Shared->SemaphoreObjects,
semaphores[i]);
- ctx->Driver.DeleteSemaphoreObject(ctx, delObj);
+ st_semaphoreobj_free(ctx, delObj);
}
}
}
@@ -758,10 +760,10 @@ _mesa_WaitSemaphoreEXT(GLuint semaphore,
texObjs[i] = _mesa_lookup_texture(ctx, textures[i]);
}
- ctx->Driver.ServerWaitSemaphoreObject(ctx, semObj,
- numBufferBarriers, bufObjs,
- numTextureBarriers, texObjs,
- srcLayouts);
+ st_server_wait_semaphore(ctx, semObj,
+ numBufferBarriers, bufObjs,
+ numTextureBarriers, texObjs,
+ srcLayouts);
end:
free(bufObjs);
@@ -818,10 +820,10 @@ _mesa_SignalSemaphoreEXT(GLuint semaphore,
texObjs[i] = _mesa_lookup_texture(ctx, textures[i]);
}
- ctx->Driver.ServerSignalSemaphoreObject(ctx, semObj,
- numBufferBarriers, bufObjs,
- numTextureBarriers, texObjs,
- dstLayouts);
+ st_server_signal_semaphore(ctx, semObj,
+ numBufferBarriers, bufObjs,
+ numTextureBarriers, texObjs,
+ dstLayouts);
end:
free(bufObjs);
@@ -852,7 +854,7 @@ _mesa_ImportMemoryFdEXT(GLuint memory,
if (!memObj)
return;
- ctx->Driver.ImportMemoryObjectFd(ctx, memObj, size, fd);
+ st_import_memoryobj_fd(ctx, memObj, size, fd);
memObj->Immutable = GL_TRUE;
}
@@ -881,7 +883,7 @@ _mesa_ImportSemaphoreFdEXT(GLuint semaphore,
return;
if (semObj == &DummySemaphoreObject) {
- semObj = ctx->Driver.NewSemaphoreObject(ctx, semaphore);
+ semObj = st_semaphoreobj_alloc(ctx, semaphore);
if (!semObj) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func);
return;
@@ -889,5 +891,5 @@ _mesa_ImportSemaphoreFdEXT(GLuint semaphore,
_mesa_HashInsert(ctx->Shared->SemaphoreObjects, semaphore, semObj, true);
}
- ctx->Driver.ImportSemaphoreFd(ctx, semObj, fd);
+ st_import_semaphoreobj_fd(ctx, semObj, fd);
}
diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c
index 0f7256b053f..20dc0f7167e 100644
--- a/src/mesa/main/shared.c
+++ b/src/mesa/main/shared.c
@@ -45,6 +45,9 @@
#include "util/set.h"
#include "util/u_memory.h"
+#include "state_tracker/st_cb_memoryobjects.h"
+#include "state_tracker/st_cb_semaphoreobjects.h"
+
static void
free_shared_state(struct gl_context *ctx, struct gl_shared_state *shared);
@@ -313,7 +316,7 @@ delete_memory_object_cb(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);
+ st_memoryobj_free(ctx, memObj);
}
/**
@@ -324,7 +327,7 @@ delete_semaphore_object_cb(void *data, void *userData)
{
struct gl_semaphore_object *semObj = (struct gl_semaphore_object *) data;
struct gl_context *ctx = (struct gl_context *) userData;
- ctx->Driver.DeleteSemaphoreObject(ctx, semObj);
+ st_semaphoreobj_free(ctx, semObj);
}
/**
diff --git a/src/mesa/state_tracker/st_cb_memoryobjects.c b/src/mesa/state_tracker/st_cb_memoryobjects.c
index 15aa5b1e0c3..2aa3d835f71 100644
--- a/src/mesa/state_tracker/st_cb_memoryobjects.c
+++ b/src/mesa/state_tracker/st_cb_memoryobjects.c
@@ -39,7 +39,7 @@
#include "drm-uapi/drm_fourcc.h"
#endif
-static struct gl_memory_object *
+struct gl_memory_object *
st_memoryobj_alloc(struct gl_context *ctx, GLuint name)
{
struct st_memory_object *st_obj = ST_CALLOC_STRUCT(st_memory_object);
@@ -50,7 +50,7 @@ st_memoryobj_alloc(struct gl_context *ctx, GLuint name)
return &st_obj->Base;
}
-static void
+void
st_memoryobj_free(struct gl_context *ctx,
struct gl_memory_object *obj)
{
@@ -64,7 +64,7 @@ st_memoryobj_free(struct gl_context *ctx,
}
-static void
+void
st_import_memoryobj_fd(struct gl_context *ctx,
struct gl_memory_object *obj,
GLuint64 size,
@@ -90,11 +90,3 @@ st_import_memoryobj_fd(struct gl_context *ctx,
close(fd);
#endif
}
-
-void
-st_init_memoryobject_functions(struct dd_function_table *functions)
-{
- functions->NewMemoryObject = st_memoryobj_alloc;
- functions->DeleteMemoryObject = st_memoryobj_free;
- functions->ImportMemoryObjectFd = st_import_memoryobj_fd;
-}
diff --git a/src/mesa/state_tracker/st_cb_memoryobjects.h b/src/mesa/state_tracker/st_cb_memoryobjects.h
index 565768ebad9..b23bfae9ef2 100644
--- a/src/mesa/state_tracker/st_cb_memoryobjects.h
+++ b/src/mesa/state_tracker/st_cb_memoryobjects.h
@@ -27,7 +27,6 @@
#include "main/mtypes.h"
-struct dd_function_table;
struct pipe_screen;
struct st_memory_object
@@ -45,7 +44,15 @@ st_memory_object(struct gl_memory_object *obj)
return (struct st_memory_object *)obj;
}
-extern void
-st_init_memoryobject_functions(struct dd_function_table *functions);
-
+struct gl_memory_object *
+st_memoryobj_alloc(struct gl_context *ctx, GLuint name);
+
+void
+st_memoryobj_free(struct gl_context *ctx,
+ struct gl_memory_object *obj);
+void
+st_import_memoryobj_fd(struct gl_context *ctx,
+ struct gl_memory_object *obj,
+ GLuint64 size,
+ int fd);
#endif
diff --git a/src/mesa/state_tracker/st_cb_semaphoreobjects.c b/src/mesa/state_tracker/st_cb_semaphoreobjects.c
index 6d974135816..ad4808672bb 100644
--- a/src/mesa/state_tracker/st_cb_semaphoreobjects.c
+++ b/src/mesa/state_tracker/st_cb_semaphoreobjects.c
@@ -38,7 +38,7 @@
#include "pipe/p_context.h"
#include "pipe/p_screen.h"
-static struct gl_semaphore_object *
+struct gl_semaphore_object *
st_semaphoreobj_alloc(struct gl_context *ctx, GLuint name)
{
struct st_semaphore_object *st_obj = ST_CALLOC_STRUCT(st_semaphore_object);
@@ -49,7 +49,7 @@ st_semaphoreobj_alloc(struct gl_context *ctx, GLuint name)
return &st_obj->Base;
}
-static void
+void
st_semaphoreobj_free(struct gl_context *ctx,
struct gl_semaphore_object *semObj)
{
@@ -57,10 +57,10 @@ st_semaphoreobj_free(struct gl_context *ctx,
}
-static void
+void
st_import_semaphoreobj_fd(struct gl_context *ctx,
- struct gl_semaphore_object *semObj,
- int fd)
+ struct gl_semaphore_object *semObj,
+ int fd)
{
struct st_semaphore_object *st_obj = st_semaphore_object(semObj);
struct st_context *st = st_context(ctx);
@@ -74,7 +74,7 @@ st_import_semaphoreobj_fd(struct gl_context *ctx,
#endif
}
-static void
+void
st_server_wait_semaphore(struct gl_context *ctx,
struct gl_semaphore_object *semObj,
GLuint numBufferBarriers,
@@ -123,7 +123,7 @@ st_server_wait_semaphore(struct gl_context *ctx,
}
}
-static void
+void
st_server_signal_semaphore(struct gl_context *ctx,
struct gl_semaphore_object *semObj,
GLuint numBufferBarriers,
@@ -161,12 +161,3 @@ st_server_signal_semaphore(struct gl_context *ctx,
pipe->fence_server_signal(pipe, st_obj->fence);
}
-void
-st_init_semaphoreobject_functions(struct dd_function_table *functions)
-{
- functions->NewSemaphoreObject = st_semaphoreobj_alloc;
- functions->DeleteSemaphoreObject = st_semaphoreobj_free;
- functions->ImportSemaphoreFd = st_import_semaphoreobj_fd;
- functions->ServerWaitSemaphoreObject = st_server_wait_semaphore;
- functions->ServerSignalSemaphoreObject = st_server_signal_semaphore;
-}
diff --git a/src/mesa/state_tracker/st_cb_semaphoreobjects.h b/src/mesa/state_tracker/st_cb_semaphoreobjects.h
index dba0b7021ea..3f7a25b7337 100644
--- a/src/mesa/state_tracker/st_cb_semaphoreobjects.h
+++ b/src/mesa/state_tracker/st_cb_semaphoreobjects.h
@@ -42,7 +42,32 @@ st_semaphore_object(struct gl_semaphore_object *obj)
return (struct st_semaphore_object *)obj;
}
-extern void
-st_init_semaphoreobject_functions(struct dd_function_table *functions);
+struct gl_semaphore_object *
+st_semaphoreobj_alloc(struct gl_context *ctx, GLuint name);
+void
+st_semaphoreobj_free(struct gl_context *ctx,
+ struct gl_semaphore_object *semObj);
+void
+st_import_semaphoreobj_fd(struct gl_context *ctx,
+ struct gl_semaphore_object *semObj,
+ int fd);
+
+void
+st_server_wait_semaphore(struct gl_context *ctx,
+ struct gl_semaphore_object *semObj,
+ GLuint numBufferBarriers,
+ struct gl_buffer_object **bufObjs,
+ GLuint numTextureBarriers,
+ struct gl_texture_object **texObjs,
+ const GLenum *srcLayouts);
+
+void
+st_server_signal_semaphore(struct gl_context *ctx,
+ struct gl_semaphore_object *semObj,
+ GLuint numBufferBarriers,
+ struct gl_buffer_object **bufObjs,
+ GLuint numTextureBarriers,
+ struct gl_texture_object **texObjs,
+ const GLenum *dstLayouts);
#endif
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
index 3d4363e398c..36c0ebb37ec 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -55,14 +55,12 @@
#include "st_cb_eglimage.h"
#include "st_cb_fbo.h"
#include "st_cb_feedback.h"
-#include "st_cb_memoryobjects.h"
#include "st_cb_msaa.h"
#include "st_cb_perfmon.h"
#include "st_cb_perfquery.h"
#include "st_cb_program.h"
#include "st_cb_queryobj.h"
#include "st_cb_readpixels.h"
-#include "st_cb_semaphoreobjects.h"
#include "st_cb_texture.h"
#include "st_cb_flush.h"
#include "st_cb_viewport.h"
@@ -953,13 +951,11 @@ st_init_driver_functions(struct pipe_screen *screen,
st_init_fbo_functions(functions);
st_init_feedback_functions(functions);
- st_init_memoryobject_functions(functions);
st_init_msaa_functions(functions);
st_init_perfmon_functions(functions);
st_init_perfquery_functions(functions);
st_init_program_functions(functions);
st_init_readpixels_functions(functions);
- st_init_semaphoreobject_functions(functions);
st_init_texture_functions(functions);
st_init_flush_functions(screen, functions);
st_init_viewport_functions(functions);
More information about the mesa-commit
mailing list