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:
@@ -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 );
|
||||||
|
@@ -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)
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user