From: <bug...@fr...> - 2007-08-31 21:41:51
|
http://bugs.freedesktop.org/show_bug.cgi?id=12241 ------- Comment #1 from bri...@tu... 2007-08-31 14:41 PST ------- First, you'll want to rebuild Mesa from sources in debug mode (make linux-dri-debug). A stack trace at the time of the failed assertion could be helpful. Otherwise, I think I can guess what's going on. Texture objects (see struct gl_texturea_object) are reference counted. That means anytime we assign a texture object pointer, we need to use the _mesa_reference_texobj() function to make sure the refcounts are handled properly. Looking at the r300 driver, there's a few places where pointers to texture objects are present. For example, in r300DestroyTexObj() there's: for (i = 0; i < rmesa->radeon.glCtx->Const.MaxTextureUnits; i++) { if (rmesa->state.texture.unit[i].texobj == t) { rmesa->state.texture.unit[i].texobj = NULL; } } That should be changed to: for (i = 0; i < rmesa->radeon.glCtx->Const.MaxTextureUnits; i++) { if (rmesa->state.texture.unit[i].texobj == t) { _mesa_reference_texobj(&rmesa->state.texture.unit[i].texobj, NULL); } } Another one is in r300UpdateTexture: rmesa->state.texture.unit[unit].texobj = t; should be: _mesa_reference_texobj(&rmesa->state.texture.unit[unit].texobj, t); Actually, these changes will trigger some warnings because the 'texobj' above is a r300TexObjPtr, not a gl_texture_object *. So either add some casting or write a wrapper for _mesa_reference_texobj() that takes r300TexObjPtr types instead. Once the refcounting is done properly, the problem should be fixed. -- Configure bugmail: http://bugs.freedesktop.org/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. |