Module: Mesa
Branch: main
Commit: addcc24f77229ca3a864a1774a681f96699d09c2
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=addcc24f77229ca3a864a1774a681f96699d09c2

Author: Dave Airlie <[email protected]>
Date:   Thu Dec  9 14:12:49 2021 +1000

mesa/st: merge memoryobjects code from st into mesa

This takes all the memory object code from state tracker and
merges it into mesa, cleaning it up on the way.

Acked-by: Marek Olšák <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14327>

---

 src/mesa/main/bufferobj.c                    |  9 +--
 src/mesa/main/externalobjects.c              | 70 +++++++++++++++------
 src/mesa/main/externalobjects.h              |  4 --
 src/mesa/main/mtypes.h                       |  5 ++
 src/mesa/main/shared.c                       |  4 +-
 src/mesa/meson.build                         |  2 -
 src/mesa/state_tracker/st_cb_memoryobjects.c | 93 ----------------------------
 src/mesa/state_tracker/st_cb_memoryobjects.h | 58 -----------------
 src/mesa/state_tracker/st_cb_texture.c       | 12 ++--
 9 files changed, 66 insertions(+), 191 deletions(-)

diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index dcecd3dc891..0edd2c91482 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -50,8 +50,6 @@
 #include "api_exec_decl.h"
 #include "util/set.h"
 
-#include "state_tracker/st_cb_memoryobjects.h"
-
 #include "state_tracker/st_debug.h"
 #include "state_tracker/st_atom.h"
 #include "frontend/api.h"
@@ -263,7 +261,6 @@ bufferobj_data(struct gl_context *ctx,
 {
    struct pipe_context *pipe = ctx->pipe;
    struct pipe_screen *screen = pipe->screen;
-   struct st_memory_object *st_mem_obj = st_memory_object(memObj);
    bool is_mapped = _mesa_bufferobj_mapped(obj, MAP_USER);
 
    if (size > UINT32_MAX || offset > UINT32_MAX) {
@@ -334,10 +331,10 @@ bufferobj_data(struct gl_context *ctx,
       buffer.depth0 = 1;
       buffer.array_size = 1;
 
-      if (st_mem_obj) {
+      if (memObj) {
          obj->buffer = screen->resource_from_memobj(screen, &buffer,
-                                                       st_mem_obj->memory,
-                                                       offset);
+                                                    memObj->memory,
+                                                    offset);
       }
       else if (target == GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD) {
          obj->buffer =
diff --git a/src/mesa/main/externalobjects.c b/src/mesa/main/externalobjects.c
index 2d8391faa60..f777f468bbd 100644
--- a/src/mesa/main/externalobjects.c
+++ b/src/mesa/main/externalobjects.c
@@ -33,9 +33,52 @@
 #include "texstorage.h"
 #include "util/u_memory.h"
 
-#include "state_tracker/st_cb_memoryobjects.h"
-#include "state_tracker/st_cb_semaphoreobjects.h"
+#include "pipe/p_context.h"
+#include "pipe/p_screen.h"
 #include "api_exec_decl.h"
+#include "state_tracker/st_cb_semaphoreobjects.h"
+
+#include "frontend/drm_driver.h"
+#ifdef HAVE_LIBDRM
+#include "drm-uapi/drm_fourcc.h"
+#endif
+
+static struct gl_memory_object *
+memoryobj_alloc(struct gl_context *ctx, GLuint name)
+{
+   struct gl_memory_object *obj = CALLOC_STRUCT(gl_memory_object);
+   if (!obj)
+      return NULL;
+
+   obj->Name = name;
+   obj->Dedicated = GL_FALSE;
+   return obj;
+}
+
+static void
+import_memoryobj_fd(struct gl_context *ctx,
+                    struct gl_memory_object *obj,
+                    GLuint64 size,
+                    int fd)
+{
+#if !defined(_WIN32)
+   struct pipe_screen *screen = ctx->pipe->screen;
+   struct winsys_handle whandle = {
+      .type = WINSYS_HANDLE_TYPE_FD,
+      .handle = fd,
+#ifdef HAVE_LIBDRM
+      .modifier = DRM_FORMAT_MOD_INVALID,
+#endif
+   };
+
+   obj->memory = screen->memobj_create_from_handle(screen,
+                                                   &whandle,
+                                                   obj->Dedicated);
+
+   /* We own fd, but we no longer need it. So get rid of it */
+   close(fd);
+#endif
+}
 
 /**
  * Delete a memory object.
@@ -45,23 +88,12 @@ void
 _mesa_delete_memory_object(struct gl_context *ctx,
                            struct gl_memory_object *memObj)
 {
+   struct pipe_screen *screen = ctx->pipe->screen;
+   if (memObj->memory)
+      screen->memobj_destroy(screen, memObj->memory);
    FREE(memObj);
 }
 
-
-/**
- * Initialize a buffer object to default values.
- */
-void
-_mesa_initialize_memory_object(struct gl_context *ctx,
-                               struct gl_memory_object *obj,
-                               GLuint name)
-{
-   memset(obj, 0, sizeof(struct gl_memory_object));
-   obj->Name = name;
-   obj->Dedicated = GL_FALSE;
-}
-
 void GLAPIENTRY
 _mesa_DeleteMemoryObjectsEXT(GLsizei n, const GLuint *memoryObjects)
 {
@@ -95,7 +127,7 @@ _mesa_DeleteMemoryObjectsEXT(GLsizei n, const GLuint 
*memoryObjects)
          if (delObj) {
             _mesa_HashRemoveLocked(ctx->Shared->MemoryObjects,
                                    memoryObjects[i]);
-            st_memoryobj_free(ctx, delObj);
+            _mesa_delete_memory_object(ctx, delObj);
          }
       }
    }
@@ -148,7 +180,7 @@ _mesa_CreateMemoryObjectsEXT(GLsizei n, GLuint 
*memoryObjects)
          struct gl_memory_object *memObj;
 
          /* allocate memory object */
-         memObj = st_memoryobj_alloc(ctx, memoryObjects[i]);
+         memObj = memoryobj_alloc(ctx, memoryObjects[i]);
          if (!memObj) {
             _mesa_error(ctx, GL_OUT_OF_MEMORY, "%s()", func);
             _mesa_HashUnlockMutex(ctx->Shared->MemoryObjects);
@@ -856,7 +888,7 @@ _mesa_ImportMemoryFdEXT(GLuint memory,
    if (!memObj)
       return;
 
-   st_import_memoryobj_fd(ctx, memObj, size, fd);
+   import_memoryobj_fd(ctx, memObj, size, fd);
    memObj->Immutable = GL_TRUE;
 }
 
diff --git a/src/mesa/main/externalobjects.h b/src/mesa/main/externalobjects.h
index aec42c5ffbe..d9379862e8a 100644
--- a/src/mesa/main/externalobjects.h
+++ b/src/mesa/main/externalobjects.h
@@ -77,10 +77,6 @@ _mesa_lookup_semaphore_object_locked(struct gl_context *ctx, 
GLuint semaphore)
       _mesa_HashLookupLocked(ctx->Shared->SemaphoreObjects, semaphore);
 }
 
-extern void
-_mesa_initialize_memory_object(struct gl_context *ctx,
-                               struct gl_memory_object *obj,
-                               GLuint name);
 extern void
 _mesa_delete_memory_object(struct gl_context *ctx,
                            struct gl_memory_object *semObj);
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index a6ca63e727f..5dc986d59af 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2869,6 +2869,11 @@ struct gl_memory_object
    GLuint Name;            /**< hash table ID/name */
    GLboolean Immutable;    /**< denotes mutability state of parameters */
    GLboolean Dedicated;    /**< import memory from a dedicated allocation */
+
+   struct pipe_memory_object *memory;
+
+   /* TEXTURE_TILING_EXT param from gl_texture_object */
+   GLuint TextureTiling;
 };
 
 struct gl_semaphore_object
diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c
index eef2f42f4e7..d2cef0e59a8 100644
--- a/src/mesa/main/shared.c
+++ b/src/mesa/main/shared.c
@@ -35,6 +35,7 @@
 #include "shared.h"
 #include "program/program.h"
 #include "dlist.h"
+#include "externalobjects.h"
 #include "samplerobj.h"
 #include "shaderapi.h"
 #include "shaderobj.h"
@@ -45,7 +46,6 @@
 #include "util/set.h"
 #include "util/u_memory.h"
 
-#include "state_tracker/st_cb_memoryobjects.h"
 #include "state_tracker/st_cb_semaphoreobjects.h"
 #include "state_tracker/st_cb_texture.h"
 #include "state_tracker/st_cb_program.h"
@@ -318,7 +318,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;
-   st_memoryobj_free(ctx, memObj);
+   _mesa_delete_memory_object(ctx, memObj);
 }
 
 /**
diff --git a/src/mesa/meson.build b/src/mesa/meson.build
index c88e0483cd1..85f7688992e 100644
--- a/src/mesa/meson.build
+++ b/src/mesa/meson.build
@@ -344,8 +344,6 @@ files_libmesa = files(
   'state_tracker/st_cb_feedback.h',
   'state_tracker/st_cb_flush.c',
   'state_tracker/st_cb_flush.h',
-  'state_tracker/st_cb_memoryobjects.c',
-  'state_tracker/st_cb_memoryobjects.h',
   'state_tracker/st_cb_perfmon.c',
   'state_tracker/st_cb_perfmon.h',
   'state_tracker/st_cb_perfquery.c',
diff --git a/src/mesa/state_tracker/st_cb_memoryobjects.c 
b/src/mesa/state_tracker/st_cb_memoryobjects.c
deleted file mode 100644
index e826e4c52d5..00000000000
--- a/src/mesa/state_tracker/st_cb_memoryobjects.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright © 2017 Red Hat.
- * Copyright © 2017 Valve Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-
-#include "main/mtypes.h"
-
-#include "main/externalobjects.h"
-
-#include "util/u_memory.h"
-#include "st_context.h"
-#include "st_cb_memoryobjects.h"
-#include "st_util.h"
-
-#include "frontend/drm_driver.h"
-#include "pipe/p_context.h"
-#include "pipe/p_screen.h"
-
-#ifdef HAVE_LIBDRM
-#include "drm-uapi/drm_fourcc.h"
-#endif
-
-struct gl_memory_object *
-st_memoryobj_alloc(struct gl_context *ctx, GLuint name)
-{
-   struct st_memory_object *st_obj = CALLOC_STRUCT(st_memory_object);
-   if (!st_obj)
-      return NULL;
-
-   _mesa_initialize_memory_object(ctx, &st_obj->Base, name);
-   return &st_obj->Base;
-}
-
-void
-st_memoryobj_free(struct gl_context *ctx,
-                  struct gl_memory_object *obj)
-{
-   struct st_memory_object *st_obj = st_memory_object(obj);
-   struct st_context *st = st_context(ctx);
-   struct pipe_screen *screen = st->screen;
-
-   if (st_obj->memory)
-      screen->memobj_destroy(screen, st_obj->memory);
-   _mesa_delete_memory_object(ctx, obj);
-}
-
-
-void
-st_import_memoryobj_fd(struct gl_context *ctx,
-                       struct gl_memory_object *obj,
-                       GLuint64 size,
-                       int fd)
-{
-#if !defined(_WIN32)
-   struct st_memory_object *st_obj = st_memory_object(obj);
-   struct st_context *st = st_context(ctx);
-   struct pipe_screen *screen = st->screen;
-   struct winsys_handle whandle = {
-      .type = WINSYS_HANDLE_TYPE_FD,
-      .handle = fd,
-#ifdef HAVE_LIBDRM
-      .modifier = DRM_FORMAT_MOD_INVALID,
-#endif
-   };
-
-   st_obj->memory = screen->memobj_create_from_handle(screen,
-                                                      &whandle,
-                                                      obj->Dedicated);
-
-   /* We own fd, but we no longer need it. So get rid of it */
-   close(fd);
-#endif
-}
diff --git a/src/mesa/state_tracker/st_cb_memoryobjects.h 
b/src/mesa/state_tracker/st_cb_memoryobjects.h
deleted file mode 100644
index b23bfae9ef2..00000000000
--- a/src/mesa/state_tracker/st_cb_memoryobjects.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright © 2017 Red Hat.
- * Copyright © 2017 Valve Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-#ifndef ST_CB_MEMORYOBJECTS_H
-#define ST_CB_MEMORYOBJECTS_H
-
-#include "main/mtypes.h"
-
-struct pipe_screen;
-
-struct st_memory_object
-{
-   struct gl_memory_object Base;
-   struct pipe_memory_object *memory;
-
-   /* TEXTURE_TILING_EXT param from gl_texture_object */
-   GLuint TextureTiling;
-};
-
-static inline struct st_memory_object *
-st_memory_object(struct gl_memory_object *obj)
-{
-   return (struct st_memory_object *)obj;
-}
-
-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_texture.c 
b/src/mesa/state_tracker/st_cb_texture.c
index 1a95e0933c6..ca49abb74f8 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -56,7 +56,6 @@
 #include "state_tracker/st_cb_fbo.h"
 #include "state_tracker/st_cb_flush.h"
 #include "state_tracker/st_cb_texture.h"
-#include "state_tracker/st_cb_memoryobjects.h"
 #include "state_tracker/st_format.h"
 #include "state_tracker/st_pbo.h"
 #include "state_tracker/st_texture.h"
@@ -3192,7 +3191,7 @@ st_finalize_texture(struct gl_context *ctx,
  */
 static struct pipe_resource *
 st_texture_create_from_memory(struct st_context *st,
-                              struct st_memory_object *memObj,
+                              struct gl_memory_object *memObj,
                               GLuint64 offset,
                               enum pipe_texture_target target,
                               enum pipe_format format,
@@ -3264,7 +3263,6 @@ st_texture_storage(struct gl_context *ctx,
    struct gl_texture_image *texImage = texObj->Image[0][0];
    struct st_context *st = st_context(ctx);
    struct st_texture_object *stObj = st_texture_object(texObj);
-   struct st_memory_object *smObj = st_memory_object(memObj);
    struct pipe_screen *screen = st->screen;
    unsigned ptWidth, bindings;
    uint16_t ptHeight, ptDepth, ptLayers;
@@ -3280,8 +3278,8 @@ st_texture_storage(struct gl_context *ctx,
 
    bindings = default_bindings(st, fmt);
 
-   if (smObj) {
-      smObj->TextureTiling = texObj->TextureTiling;
+   if (memObj) {
+      memObj->TextureTiling = texObj->TextureTiling;
       bindings |= PIPE_BIND_SHARED;
    }
 
@@ -3320,9 +3318,9 @@ st_texture_storage(struct gl_context *ctx,
 
    pipe_resource_reference(&stObj->pt, NULL);
 
-   if (smObj) {
+   if (memObj) {
       stObj->pt = st_texture_create_from_memory(st,
-                                                smObj,
+                                                memObj,
                                                 offset,
                                                 
gl_target_to_pipe(texObj->Target),
                                                 fmt,

Reply via email to