From mboxrd@z Thu Jan 1 00:00:00 1970
From: bugzilla-daemon-CC+yJ3UmIYqDUpFQwHEjaQ@public.gmane.org
Subject: [Bug 99464] New: openmw - Segfault with the nouveau ddx +
DRI3
Date: Thu, 19 Jan 2017 23:45:53 +0000
Message-ID:
Bug ID
99464
Summary
openmw - Segfault with the nouveau ddx + DRI3
Product
Mesa
Version
git
Hardware
x86-64 (AMD64)
OS
Linux (All)
Status
NEW
Severity
normal
Priority
medium
Component
Drivers/DRI/nouveau
Assignee
nouveau@lists.freedesktop.org
Reporter
ovariegata@yahoo.com
QA Contact
nouveau@lists.freedesktop.org
Created attachment 129055 [deta=
ils]
Apitrace.
When starting openmw which is the free engine re-implementation of the game
morrowind it will segfault. This may be a mesa core bug, but it will only
happen with the nouveau DDX + DRI3. It will not crash with modesetting + DR=
I3,
DRI2 or the llvmpipe.
Here is a backtrace.
http://pastebin.com/HMdv4iWb
Apitrace log.
http://pastebin.com/FzZVyGqW
Here is a workaround as reported to the the mesa mailing list by Tobias
Klausmann. It successfully hides the crash, but potentially breaking the
hardware cursor used by openmw which works correctly with DRI2, modesetting=
or
the llvmpipe. It also was not intended as a real fix.
"OpenMW tries to upload a new surface (mouse pointer) which fails in t=
he now
guarded update_framebuffer_size() as the surface is NULL.
This is not inteded as a real "fix", as it would just hide the im=
mediate crash.
So if somebody could take a look at this...
Reported-by: <ovariegata@=
;yahoo.com>
Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
---
src/mesa/state_tracker/st_atom_framebuffer.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/mesa/state_tracker/st_atom_framebuffer.c
b/src/mesa/state_tracker/st_atom_framebuffer.c
index ea41d9d..3ee4ea5 100644
--- a/src/mesa/state_tracker/st_atom_framebuffer.c
+++ b/src/mesa/state_tracker/st_atom_framebuffer.c
@@ -177,8 +177,10 @@ update_framebuffer_state( struct st_co=
ntext *st )
/* rendering to a GL texture, may have to update surface */
st_update_renderbuffer_surface(st, strb);
}
- pipe_surface_reference(&framebuffer->zsbuf, strb->surface);
- update_framebuffer_size(framebuffer, strb->surface);
+ if (strb->surface) {
+ pipe_surface_reference(&framebuffer->zsbuf, strb->surfac=
e);
+ update_framebuffer_size(framebuffer, strb->surface);
+ }
}
else {
strb =3D st_renderbuffer(fb->Attachment[BUFFER_STENCIL].Renderbuff=
er);
--=20
2.9.2"