Mesa (main): mesa/st: merge texture obj/image alloc/free into mesa
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jan 20 01:28:53 UTC 2022
Module: Mesa
Branch: main
Commit: 4b8d84f71af36f595896f601249658ff955247fa
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4b8d84f71af36f595896f601249658ff955247fa
Author: Dave Airlie <airlied at redhat.com>
Date: Tue Dec 21 14:59:00 2021 +1000
mesa/st: merge texture obj/image alloc/free into mesa
This just drops the st wrappers for alloc/free of texture images
and objects.
Acked-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14327>
---
src/mesa/main/dlist.c | 7 +--
src/mesa/main/shared.c | 10 ++--
src/mesa/main/teximage.c | 6 +--
src/mesa/main/texobj.c | 87 +++++++++++++++++++++-------------
src/mesa/main/texobj.h | 5 --
src/mesa/main/texstate.c | 6 +--
src/mesa/state_tracker/st_cb_texture.c | 60 -----------------------
src/mesa/state_tracker/st_cb_texture.h | 6 ---
8 files changed, 70 insertions(+), 117 deletions(-)
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 120fde242fa..fcf6b2e7588 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -41,6 +41,7 @@
#include "pack.h"
#include "pbo.h"
#include "teximage.h"
+#include "texobj.h"
#include "varray.h"
#include "glthread_marshal.h"
@@ -835,7 +836,7 @@ void
_mesa_delete_bitmap_atlas(struct gl_context *ctx, struct gl_bitmap_atlas *atlas)
{
if (atlas->texObj) {
- st_DeleteTextureObject(ctx, atlas->texObj);
+ _mesa_delete_texture_object(ctx, atlas->texObj);
}
free(atlas->glyphs);
free(atlas);
@@ -979,7 +980,7 @@ build_bitmap_atlas(struct gl_context *ctx, struct gl_bitmap_atlas *atlas,
}
/* Create atlas texture (texture ID is irrelevant) */
- atlas->texObj = st_NewTextureObject(ctx, 999, GL_TEXTURE_RECTANGLE);
+ atlas->texObj = _mesa_new_texture_object(ctx, 999, GL_TEXTURE_RECTANGLE);
if (!atlas->texObj) {
goto out_of_memory;
}
@@ -1058,7 +1059,7 @@ out_of_memory:
_mesa_error(ctx, GL_OUT_OF_MEMORY, "Display list bitmap atlas");
fail:
if (atlas->texObj) {
- st_DeleteTextureObject(ctx, atlas->texObj);
+ _mesa_delete_texture_object(ctx, atlas->texObj);
}
free(atlas->glyphs);
atlas->glyphs = NULL;
diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c
index 473fc754655..a00940290ee 100644
--- a/src/mesa/main/shared.c
+++ b/src/mesa/main/shared.c
@@ -40,13 +40,13 @@
#include "shaderapi.h"
#include "shaderobj.h"
#include "syncobj.h"
+#include "texobj.h"
#include "texturebindless.h"
#include "util/hash_table.h"
#include "util/set.h"
#include "util/u_memory.h"
-#include "state_tracker/st_cb_texture.h"
#include "state_tracker/st_cb_program.h"
static void
@@ -120,7 +120,7 @@ _mesa_alloc_shared_state(struct gl_context *ctx)
GL_TEXTURE_1D
};
STATIC_ASSERT(ARRAY_SIZE(targets) == NUM_TEXTURE_TARGETS);
- shared->DefaultTex[i] = st_NewTextureObject(ctx, 0, targets[i]);
+ shared->DefaultTex[i] = _mesa_new_texture_object(ctx, 0, targets[i]);
/* Need to explicitly set/overwrite the TargetIndex field here since
* the call to _mesa_tex_target_to_index() in NewTextureObject() may
* fail if the texture target is not supported.
@@ -180,7 +180,7 @@ delete_texture_cb(void *data, void *userData)
{
struct gl_texture_object *texObj = (struct gl_texture_object *) data;
struct gl_context *ctx = (struct gl_context *) userData;
- st_DeleteTextureObject(ctx, texObj);
+ _mesa_delete_texture_object(ctx, texObj);
}
@@ -351,7 +351,7 @@ free_shared_state(struct gl_context *ctx, struct gl_shared_state *shared)
/* Free the dummy/fallback texture objects */
for (i = 0; i < NUM_TEXTURE_TARGETS; i++) {
if (shared->FallbackTex[i])
- st_DeleteTextureObject(ctx, shared->FallbackTex[i]);
+ _mesa_delete_texture_object(ctx, shared->FallbackTex[i]);
}
/*
@@ -437,7 +437,7 @@ free_shared_state(struct gl_context *ctx, struct gl_shared_state *shared)
/* the default textures */
for (i = 0; i < NUM_TEXTURE_TARGETS; i++) {
if (shared->DefaultTex[i])
- st_DeleteTextureObject(ctx, shared->DefaultTex[i]);
+ _mesa_delete_texture_object(ctx, shared->DefaultTex[i]);
}
/* all other textures */
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 82fbd318f5f..c4403a77a9e 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -394,7 +394,7 @@ _mesa_get_tex_image(struct gl_context *ctx, struct gl_texture_object *texObj,
texImage = _mesa_select_tex_image(texObj, target, level);
if (!texImage) {
- texImage = st_NewTextureImage(ctx);
+ texImage = CALLOC_STRUCT(gl_texture_image);
if (!texImage) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "texture image allocation");
return NULL;
@@ -461,7 +461,7 @@ get_proxy_tex_image(struct gl_context *ctx, GLenum target, GLint level)
texImage = ctx->Texture.ProxyTex[texIndex]->Image[0][level];
if (!texImage) {
- texImage = st_NewTextureImage(ctx);
+ texImage = CALLOC_STRUCT(gl_texture_image);
if (!texImage) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation");
return NULL;
@@ -2934,7 +2934,7 @@ lookup_texture_ext_dsa(struct gl_context *ctx, GLenum target, GLuint texture,
}
if (!texObj) {
- texObj = st_NewTextureObject(ctx, texture, boundTarget);
+ texObj = _mesa_new_texture_object(ctx, texture, boundTarget);
if (!texObj) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller);
return NULL;
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index 7082a840136..b6440494834 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -45,11 +45,14 @@
#include "program/prog_instruction.h"
#include "texturebindless.h"
#include "util/u_memory.h"
+#include "util/u_inlines.h"
#include "api_exec_decl.h"
#include "state_tracker/st_cb_texture.h"
#include "state_tracker/st_format.h"
#include "state_tracker/st_cb_flush.h"
+#include "state_tracker/st_texture.h"
+#include "state_tracker/st_sampler_view.h"
/**********************************************************************/
/** \name Internal functions */
@@ -258,39 +261,13 @@ _mesa_get_texobj_by_target_and_texunit(struct gl_context *ctx, GLenum target,
}
-/**
- * Allocate and initialize a new texture object. But don't put it into the
- * texture object hash table.
- *
- * \param shared the shared GL state structure to contain the texture object
- * \param name integer name for the texture object
- * \param target either GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D,
- * GL_TEXTURE_CUBE_MAP or GL_TEXTURE_RECTANGLE_NV. zero is ok for the sake
- * of GenTextures()
- *
- * \return pointer to new texture object.
- */
-struct gl_texture_object *
-_mesa_new_texture_object(struct gl_context *ctx, GLuint name, GLenum target)
-{
- struct gl_texture_object *obj;
-
- obj = MALLOC_STRUCT(gl_texture_object);
- if (!obj)
- return NULL;
-
- _mesa_initialize_texture_object(ctx, obj, name, target);
- return obj;
-}
-
-
/**
* Initialize a new texture object to default values.
* \param obj the texture object
* \param name the texture name
* \param target the texture target
*/
-void
+static bool
_mesa_initialize_texture_object( struct gl_context *ctx,
struct gl_texture_object *obj,
GLuint name, GLenum target )
@@ -385,8 +362,50 @@ _mesa_initialize_texture_object( struct gl_context *ctx,
/* GL_ARB_bindless_texture */
_mesa_init_texture_handles(obj);
+
+ obj->level_override = -1;
+ obj->layer_override = -1;
+ simple_mtx_init(&obj->validate_mutex, mtx_plain);
+ obj->needs_validation = true;
+ /* Pre-allocate a sampler views container to save a branch in the
+ * fast path.
+ */
+ obj->sampler_views = calloc(1, sizeof(struct st_sampler_views)
+ + sizeof(struct st_sampler_view));
+ if (!obj->sampler_views) {
+ return false;
+ }
+ obj->sampler_views->max = 1;
+ return true;
}
+/**
+ * Allocate and initialize a new texture object. But don't put it into the
+ * texture object hash table.
+ *
+ * \param shared the shared GL state structure to contain the texture object
+ * \param name integer name for the texture object
+ * \param target either GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D,
+ * GL_TEXTURE_CUBE_MAP or GL_TEXTURE_RECTANGLE_NV. zero is ok for the sake
+ * of GenTextures()
+ *
+ * \return pointer to new texture object.
+ */
+struct gl_texture_object *
+_mesa_new_texture_object(struct gl_context *ctx, GLuint name, GLenum target)
+{
+ struct gl_texture_object *obj;
+
+ obj = MALLOC_STRUCT(gl_texture_object);
+ if (!obj)
+ return NULL;
+
+ if (!_mesa_initialize_texture_object(ctx, obj, name, target)) {
+ free(obj);
+ return NULL;
+ }
+ return obj;
+}
/**
* Some texture initialization can't be finished until we know which
@@ -456,11 +475,15 @@ _mesa_delete_texture_object(struct gl_context *ctx,
*/
texObj->Target = 0x99;
+ pipe_resource_reference(&texObj->pt, NULL);
+ st_delete_texture_sampler_views(ctx->st, texObj);
+ simple_mtx_destroy(&texObj->validate_mutex);
+
/* free the texture images */
for (face = 0; face < 6; face++) {
for (i = 0; i < MAX_TEXTURE_LEVELS; i++) {
if (texObj->Image[face][i]) {
- st_DeleteTextureImage(ctx, texObj->Image[face][i]);
+ _mesa_delete_texture_image(ctx, texObj->Image[face][i]);
}
}
}
@@ -567,7 +590,7 @@ _mesa_reference_texobj_(struct gl_texture_object **ptr,
*/
GET_CURRENT_CONTEXT(ctx);
if (ctx)
- st_DeleteTextureObject(ctx, oldTex);
+ _mesa_delete_texture_object(ctx, oldTex);
else
_mesa_problem(NULL, "Unable to delete texture, no context");
}
@@ -987,7 +1010,7 @@ _mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index tex)
}
/* create texture object */
- texObj = st_NewTextureObject(ctx, 0, target);
+ texObj = _mesa_new_texture_object(ctx, 0, target);
if (!texObj)
return NULL;
@@ -1187,7 +1210,7 @@ create_textures(struct gl_context *ctx, GLenum target,
/* Allocate new, empty texture objects */
for (i = 0; i < n; i++) {
struct gl_texture_object *texObj;
- texObj = st_NewTextureObject(ctx, textures[i], target);
+ texObj = _mesa_new_texture_object(ctx, textures[i], target);
if (!texObj) {
_mesa_HashUnlockMutex(ctx->Shared->TexObjects);
_mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller);
@@ -1675,7 +1698,7 @@ _mesa_lookup_or_create_texture(struct gl_context *ctx, GLenum target,
}
/* if this is a new texture id, allocate a texture object now */
- newTexObj = st_NewTextureObject(ctx, texName, target);
+ newTexObj = _mesa_new_texture_object(ctx, texName, target);
if (!newTexObj) {
_mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller);
return NULL;
diff --git a/src/mesa/main/texobj.h b/src/mesa/main/texobj.h
index ff3b8e93a00..e7d2577de36 100644
--- a/src/mesa/main/texobj.h
+++ b/src/mesa/main/texobj.h
@@ -67,11 +67,6 @@ _mesa_get_texobj_by_target_and_texunit(struct gl_context *ctx, GLenum target,
extern struct gl_texture_object *
_mesa_new_texture_object( struct gl_context *ctx, GLuint name, GLenum target );
-extern void
-_mesa_initialize_texture_object( struct gl_context *ctx,
- struct gl_texture_object *obj,
- GLuint name, GLenum target );
-
extern int
_mesa_tex_target_to_index(const struct gl_context *ctx, GLenum target);
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index c29143a153c..87e81c901c8 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -1007,10 +1007,10 @@ alloc_proxy_textures( struct gl_context *ctx )
for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) {
if (!(ctx->Texture.ProxyTex[tgt]
- = st_NewTextureObject(ctx, 0, targets[tgt]))) {
+ = _mesa_new_texture_object(ctx, 0, targets[tgt]))) {
/* out of memory, free what we did allocate */
while (--tgt >= 0) {
- st_DeleteTextureObject(ctx, ctx->Texture.ProxyTex[tgt]);
+ _mesa_delete_texture_object(ctx, ctx->Texture.ProxyTex[tgt]);
}
return GL_FALSE;
}
@@ -1134,7 +1134,7 @@ _mesa_free_texture_data(struct gl_context *ctx)
/* Free proxy texture objects */
for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++)
- st_DeleteTextureObject(ctx, ctx->Texture.ProxyTex[tgt]);
+ _mesa_delete_texture_object(ctx, ctx->Texture.ProxyTex[tgt]);
/* GL_ARB_texture_buffer_object */
_mesa_reference_buffer_object(ctx, &ctx->Texture.BufferObject, NULL);
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index 31fef2c5aba..044d08b5adc 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -386,66 +386,6 @@ st_pbo_get_dst_format(struct gl_context *ctx, enum pipe_texture_target target,
return dst_format;
}
-struct gl_texture_image *
-st_NewTextureImage(struct gl_context * ctx)
-{
- DBG("%s\n", __func__);
- (void) ctx;
- return (struct gl_texture_image *) CALLOC_STRUCT(gl_texture_image);
-}
-
-
-void
-st_DeleteTextureImage(struct gl_context * ctx, struct gl_texture_image *img)
-{
- /* nothing special (yet) for st_texture_image */
- _mesa_delete_texture_image(ctx, img);
-}
-
-
-struct gl_texture_object *
-st_NewTextureObject(struct gl_context * ctx, GLuint name, GLenum target)
-{
- struct gl_texture_object *obj = CALLOC_STRUCT(gl_texture_object);
- if (!obj)
- return NULL;
-
- obj->level_override = -1;
- obj->layer_override = -1;
-
- /* Pre-allocate a sampler views container to save a branch in the
- * fast path.
- */
- obj->sampler_views = calloc(1, sizeof(struct st_sampler_views)
- + sizeof(struct st_sampler_view));
- if (!obj->sampler_views) {
- free(obj);
- return NULL;
- }
- obj->sampler_views->max = 1;
-
- DBG("%s\n", __func__);
- _mesa_initialize_texture_object(ctx, obj, name, target);
-
- simple_mtx_init(&obj->validate_mutex, mtx_plain);
- obj->needs_validation = true;
-
- return obj;
-}
-
-
-void
-st_DeleteTextureObject(struct gl_context *ctx,
- struct gl_texture_object *texObj)
-{
- struct st_context *st = st_context(ctx);
-
- pipe_resource_reference(&texObj->pt, NULL);
- st_delete_texture_sampler_views(st, texObj);
- simple_mtx_destroy(&texObj->validate_mutex);
- _mesa_delete_texture_object(ctx, texObj);
-}
-
/**
* Called via ctx->Driver.TextureRemovedFromShared()
* When texture is removed from ctx->Shared->TexObjects we lose
diff --git a/src/mesa/state_tracker/st_cb_texture.h b/src/mesa/state_tracker/st_cb_texture.h
index 8d4d4197283..672f61d4078 100644
--- a/src/mesa/state_tracker/st_cb_texture.h
+++ b/src/mesa/state_tracker/st_cb_texture.h
@@ -55,12 +55,6 @@ st_finalize_texture(struct gl_context *ctx,
struct gl_texture_object *tObj,
GLuint cubeMapFace);
-struct gl_texture_image *st_NewTextureImage(struct gl_context *ctx);
-void st_DeleteTextureImage(struct gl_context *ctx, struct gl_texture_image *img);
-struct gl_texture_object *st_NewTextureObject(struct gl_context *ctx,
- GLuint name, GLenum target);
-void st_DeleteTextureObject(struct gl_context *ctx,
- struct gl_texture_object *texObj);
void st_TextureReleaseAllSamplerViews(struct gl_context *ctx,
struct gl_texture_object *texObj);
void st_FreeTextureImageBuffer(struct gl_context *ctx,
More information about the mesa-commit
mailing list