mesa/fbo: Fix valgrind complaints

Just statically initialize the dummy/incomplete framebuffer/renderbuffer
to avoid re-intializing their mutex.

==328537== Mutex reinitialization: mutex 0x1281bd28, recursion count 0, owner 0.
==328537==    at 0x486FD34: pthread_mutex_init_intercept (drd_pthread_intercepts.c:826)
==328537==    by 0x486FD34: pthread_mutex_init (drd_pthread_intercepts.c:835)
==328537==    by 0x118F9727: mtx_init (threads_posix.h:207)
==328537==    by 0x118F983B: simple_mtx_init (simple_mtx.h:132)
==328537==    by 0x118FA087: _mesa_init_fbobjects (fbobject.c:93)
==328537==    by 0x117E8CB7: init_attrib_groups (context.c:849)
==328537==    by 0x117E942F: _mesa_initialize_context (context.c:1225)
==328537==    by 0x1173C323: st_create_context (st_context.c:1019)
==328537==    by 0x11720A9F: st_api_create_context (st_manager.c:930)
==328537==    by 0x1170E2CF: dri_create_context (dri_context.c:163)
==328537==    by 0x11FB9DC3: driCreateContextAttribs (dri_util.c:480)
==328537==    by 0x8E9D3DF: dri3_create_context_attribs (dri3_glx.c:316)
==328537==    by 0x8E9D49B: dri3_create_context (dri3_glx.c:347)
==328537== mutex 0x1281bd28 was first observed at:
==328537==    at 0x486FD34: pthread_mutex_init_intercept (drd_pthread_intercepts.c:826)
==328537==    by 0x486FD34: pthread_mutex_init (drd_pthread_intercepts.c:835)
==328537==    by 0x118F9727: mtx_init (threads_posix.h:207)
==328537==    by 0x118F983B: simple_mtx_init (simple_mtx.h:132)
==328537==    by 0x118FA087: _mesa_init_fbobjects (fbobject.c:93)
==328537==    by 0x117E8CB7: init_attrib_groups (context.c:849)
==328537==    by 0x117E942F: _mesa_initialize_context (context.c:1225)
==328537==    by 0x1173C323: st_create_context (st_context.c:1019)
==328537==    by 0x11720A9F: st_api_create_context (st_manager.c:930)
==328537==    by 0x1170E2CF: dri_create_context (dri_context.c:163)
==328537==    by 0x11FB9DC3: driCreateContextAttribs (dri_util.c:480)
==328537==    by 0x8E9D3DF: dri3_create_context_attribs (dri3_glx.c:316)
==328537==    by 0x8E9D49B: dri3_create_context (dri3_glx.c:347)

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7517>
This commit is contained in:
Rob Clark
2020-11-09 13:55:14 -08:00
committed by Marge Bot
parent 9cef302aa0
commit f5ea96b584
3 changed files with 22 additions and 28 deletions

View File

@@ -846,7 +846,6 @@ init_attrib_groups(struct gl_context *ctx)
_mesa_init_debug_output( ctx ); _mesa_init_debug_output( ctx );
_mesa_init_display_list( ctx ); _mesa_init_display_list( ctx );
_mesa_init_eval( ctx ); _mesa_init_eval( ctx );
_mesa_init_fbobjects( ctx );
_mesa_init_feedback( ctx ); _mesa_init_feedback( ctx );
_mesa_init_fog( ctx ); _mesa_init_fog( ctx );
_mesa_init_hint( ctx ); _mesa_init_hint( ctx );

View File

@@ -60,20 +60,6 @@
/*
* When glGenRender/FramebuffersEXT() is called we insert pointers to
* these placeholder objects into the hash table.
* Later, when the object ID is first bound, we replace the placeholder
* with the real frame/renderbuffer.
*/
static struct gl_framebuffer DummyFramebuffer;
static struct gl_renderbuffer DummyRenderbuffer;
/* We bind this framebuffer when applications pass a NULL
* drawable/surface in make current. */
static struct gl_framebuffer IncompleteFramebuffer;
static void static void
delete_dummy_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb) delete_dummy_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
{ {
@@ -87,16 +73,28 @@ delete_dummy_framebuffer(struct gl_framebuffer *fb)
} }
void /*
_mesa_init_fbobjects(struct gl_context *ctx) * When glGenRender/FramebuffersEXT() is called we insert pointers to
{ * these placeholder objects into the hash table.
simple_mtx_init(&DummyFramebuffer.Mutex, mtx_plain); * Later, when the object ID is first bound, we replace the placeholder
simple_mtx_init(&DummyRenderbuffer.Mutex, mtx_plain); * with the real frame/renderbuffer.
simple_mtx_init(&IncompleteFramebuffer.Mutex, mtx_plain); */
DummyFramebuffer.Delete = delete_dummy_framebuffer; static struct gl_framebuffer DummyFramebuffer = {
DummyRenderbuffer.Delete = delete_dummy_renderbuffer; .Mutex = _SIMPLE_MTX_INITIALIZER_NP,
IncompleteFramebuffer.Delete = delete_dummy_framebuffer; .Delete = delete_dummy_framebuffer,
} };
static struct gl_renderbuffer DummyRenderbuffer = {
.Mutex = _SIMPLE_MTX_INITIALIZER_NP,
.Delete = delete_dummy_renderbuffer,
};
/* We bind this framebuffer when applications pass a NULL
* drawable/surface in make current. */
static struct gl_framebuffer IncompleteFramebuffer = {
.Mutex = _SIMPLE_MTX_INITIALIZER_NP,
.Delete = delete_dummy_framebuffer,
};
struct gl_framebuffer * struct gl_framebuffer *
_mesa_get_incomplete_framebuffer(void) _mesa_get_incomplete_framebuffer(void)

View File

@@ -54,9 +54,6 @@ _mesa_is_winsys_fbo(const struct gl_framebuffer *fb)
extern void
_mesa_init_fbobjects(struct gl_context *ctx);
extern struct gl_framebuffer * extern struct gl_framebuffer *
_mesa_get_incomplete_framebuffer(void); _mesa_get_incomplete_framebuffer(void);