[Mesa-dev] [RFC] radeonsi: guard against indexbuf not being set
Marek Olšák
maraeo at gmail.com
Mon Mar 19 20:47:14 UTC 2018
Can you test this?
diff --git a/src/mesa/state_tracker/st_draw.c
b/src/mesa/state_tracker/st_draw.c
index b95a2522b2e..73f936bb4a9 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -173,6 +173,13 @@ st_draw_vbo(struct gl_context *ctx,
/* indices are in a real VBO */
info.has_user_indices = false;
info.index.resource = st_buffer_object(bufobj)->buffer;
+
+ /* Return if the bound element array buffer doesn't have any
backing
+ * storage. (nothing to do)
+ */
+ if (!info.index.resource)
+ return;
+
start = pointer_to_offset(ib->ptr) / info.index_size;
} else {
/* indices are in user space memory */
Marek
On Mon, Mar 19, 2018 at 4:22 PM, Clemens Eisserer <linuxhippy at gmail.com>
wrote:
> Hi Marek and Roman,
>
> > Set this environment variable to disable multithreading:
> > GALLIUM_THREAD=0
>
> Thanks, so at least I get now a proper stacktrace (at the bottom).
>
> I am no OpenGL expert, the only thing I find suspicious is that the
> last function before entering mesa code actually has a parameter
> indexbuf set to 0x555558b32b18, while in si_draw_vbo indexbuf=0.
> However, those two might be completly unrelated indexbuf variables of
> course.
>
> Best regards, Clemens
>
>
> Thread 1 "kwin" received signal SIGSEGV, Segmentation fault.
> si_draw_vbo (ctx=0x5555590ed3e0, info=0x7fffffffd020) at
> si_state_draw.c:1372
> 1372 } else if (sctx->b.chip_class <= CIK &&
> #0 0x00007fffc37fa890 in si_draw_vbo (ctx=0x5555590ed3e0,
> info=0x7fffffffd020) at si_state_draw.c:1372
> sctx = 0x5555590ed3e0
> rs = <optimized out>
> indexbuf = 0x0
> dirty_tex_counter = <optimized out>
> rast_prim = <optimized out>
> index_size = 2
> index_offset = 0
> #1 0x00007fffc352180c in u_vbuf_draw_vbo (mgr=0x5555584c57a0,
> info=<optimized out>) at util/u_vbuf.c:1142
> pipe = 0x5555590ed3e0
> start_vertex = <optimized out>
> min_index = <optimized out>
> num_vertices = <optimized out>
> unroll_indices = 0 '\000'
> used_vb_mask = <optimized out>
> user_vb_mask = <optimized out>
> incompatible_vb_mask = 0
> new_info =
> {index_size = 10 '\n', mode = PIPE_PRIM_POINTS,
> primitive_restart = 0, has_user_indices = 0, vertices_per_patch = 0
> '\000', start = 0, count = 16, start_instance = 0, instance_count =
> 16, drawid = 0, index_bias = 1486497808, min_index = 21845, max_index
> = 1494143968, restart_index = 21845, index = {resource =
> 0x7fffc37cf21c <si_set_constant_buffer+572>, user = 0x7fffc37cf21c
> <si_set_constant_buffer+572>}, indirect = 0x100000001,
> count_from_stream_output = 0x10}
> #2 0x00007fffc32aeb9f in st_draw_vbo (ctx=<optimized out>,
> prims=0x7fffffffd100, nr_prims=<optimized out>, ib=0x7fffffffd0e0,
> index_bounds_valid=<optimized out>, min_index=<optimized out>,
> max_index=<optimized out>, tfb_vertcount=0x0, stream=0, indirect=0x0)
> at state_tracker/st_draw.c:227
> st = 0x555558be7170
> info =
> {index_size = 2 '\002', mode = PIPE_PRIM_TRIANGLE_STRIP,
> primitive_restart = 0, has_user_indices = 0, vertices_per_patch = 3
> '\003', start = 1, count = 4, start_instance = 0, instance_count = 1,
> drawid = 0, index_bias = 0, min_index = 0, max_index = 4294967295,
> restart_index = 21845, index = {resource = 0x0, user = 0x0}, indirect
> = 0x0, count_from_stream_output = 0x0}
> i = <optimized out>
> start = 1
> #3 0x00007fffc3271d58 in vbo_validated_drawrangeelements
> (ctx=ctx at entry=0x5555589e1280, mode=mode at entry=5,
> index_bounds_valid=index_bounds_valid at entry=0 '\000',
> start=start at entry=0, end=end at entry=4294967295, count=count at entry=4,
> type=5123, indices=0x2, basevertex=0, numInstances=1, baseInstance=0)
> at vbo/vbo_exec_array.c:925
> vbo = <optimized out>
> ib = {count = 4, index_size = 2, obj = 0x555558fab6e0, ptr = 0x2}
> prim = {mode = 5, indexed = 1, begin = 1, end = 1, weak = 0,
> no_current_update = 0, is_indirect = 0, pad = 0, start = 0, count = 4,
> basevertex = 0, num_instances = 1, base_instance = 0, draw_id = 0,
> indirect_offset = 1}
> #4 0x00007fffc32724cf in vbo_exec_DrawElements (mode=5, count=4,
> type=5123, indices=0x2) at vbo/vbo_exec_array.c:1075
> ctx = 0x5555589e1280
> #5 0x00007ffff5ec9d5f in QOpenGLFunctions::glDrawElements(unsigned
> int, int, unsigned int, void const*) (indices=<optimized out>,
> type=5123, count=<optimized out>, mode=<optimized out>,
> this=0x5555591f09b8)
> at /usr/include/qt5/QtGui/qopenglfunctions.h:752
> offset = <optimized out>
> i = 0
> gn = <optimized out>
> sms = 0x55555932aed0
> attrNames = 0x7ffff6382e10
> <QSGOpaqueTextureMaterialShader::attributeNames() const::attr>
> e = <optimized out>
> dirty = <optimized out>
> indexBase = 0x0
> indexBuf = 0x555558b32b18
> material = <optimized out>
> program = <optimized out>
> batch = 0x555558b32ae0
> this = 0x5555591f08e0
> #6 0x00007ffff5ec9d5f in
> QSGBatchRenderer::Renderer::renderMergedBatch(QSGBatchRenderer::Batch
> const*) (this=0x5555591f08e0, batch=0x555558b32ae0) at
> scenegraph/coreapi/qsgbatchrenderer.cpp:2360
> offset = <optimized out>
> i = 0
> gn = <optimized out>
> sms = 0x55555932aed0
> attrNames = 0x7ffff6382e10
> <QSGOpaqueTextureMaterialShader::attributeNames() const::attr>
> e = <optimized out>
> dirty = <optimized out>
> indexBase = 0x0
> indexBuf = 0x555558b32b18
> material = <optimized out>
> program = <optimized out>
> batch = 0x555558b32ae0
> this = 0x5555591f08e0
> #7 0x00007ffff5ecafa5 in QSGBatchRenderer::Renderer::renderBatches()
> (this=this at entry=0x5555591f08e0) at
> scenegraph/coreapi/qsgbatchrenderer.cpp:2569
> b = <optimized out>
> i = 2
> r = {x1 = <optimized out>, y1 = <optimized out>, x2 =
> <optimized out>, y2 = 2159}
> renderOpaque = <optimized out>
> renderAlpha = 255
> #8 0x00007ffff5ed06f4 in QSGBatchRenderer::Renderer::render()
> (this=<optimized out>) at scenegraph/coreapi/qsgbatchrenderer.cpp:2763
> timer = {t1 = -9223372036854775808, t2 = -9223372036854775808}
> timeRenderLists = 0
> timePrepareOpaque = 0
> timePrepareAlpha = 0
> timeSorting = 0
> timeUploadOpaque = 0
> timeUploadAlpha = 0
> largestVBO = <optimized out>
> largestIBO = 1512
> #9 0x00007ffff5ec1070 in QSGRenderer::renderScene(QSGBindable const&)
> (this=0x5555591f08e0, bindable=...) at
> scenegraph/coreapi/qsgrenderer.cpp:243
> bindTime = 0
> renderTime = 0
> this = 0x5555591f08e0
> bindable = <optimized out>
> #10 0x00007ffff5ec152b in QSGRenderer::renderScene(unsigned int)
> (this=<optimized out>, fboId=<optimized out>) at
> scenegraph/coreapi/qsgrenderer.cpp:196
> bindable = warning: RTTI symbol not found for class
> 'QSGRenderer::renderScene(unsigned int)::B'
> {<QSGBindable> = {_vptr.QSGBindable = 0x7ffff638b418 <vtable for
> QSGRenderer::renderScene(unsigned int)::B+16>}, <No data fields>}
> #11 0x00007ffff5efb870 in
> QSGDefaultRenderContext::renderNextFrame(QSGRenderer*, unsigned int)
> (this=0x5555586f3ba0, renderer=0x5555591f08e0, fboId=<optimized out>)
> at scenegraph/qsgdefaultrendercontext.cpp:181
> #12 0x00007ffff5f59468 in QQuickWindowPrivate::renderSceneGraph(QSize
> const&) (this=this at entry=0x5555592c4bc0, size=...) at
> items/qquickwindow.cpp:474
> fboId = <optimized out>
> devicePixelRatio = 1
> _qml_memory_scope = {static state = QQmlMemoryScope::Failed,
> pushed = false}
> #13 0x00007ffff5eeddc9 in
> QSGGuiThreadRenderLoop::renderWindow(QQuickWindow*)
> (this=0x55555840a640, window=<optimized out>) at
> scenegraph/qsgrenderloop.cpp:429
> current = <optimized out>
> alsoSwap = true
> lastDirtyWindow = <optimized out>
> i = <optimized out>
> renderTimer = {t1 = -9223372036854775808, t2 =
> -9223372036854775808}
> renderTime = 0
> syncTime = 0
> polishTime = 0
> swapTime = <optimized out>
> #14 0x00007ffff5f63036 in QQuickWindow::event(QEvent*)
> (this=this at entry=0x555556211b70, e=e at entry=0x7fffffffdb10) at
> items/qquickwindow.cpp:1588
> #15 0x00007ffef81941c3 in PlasmaQuick::Dialog::event(QEvent*)
> (this=0x555556211b70, event=0x7fffffffdb10) at
> /usr/src/debug/kf5-plasma-5.44.0-1.fc27.x86_64/src/
> plasmaquick/dialog.cpp:1305
> #16 0x00007fffee71292c in QApplicationPrivate::notify_helper(QObject*,
> QEvent*) (this=this at entry=0x55555578bd20,
> receiver=receiver at entry=0x555556211b70, e=e at entry=0x7fffffffdb10) at
> kernel/qapplication.cpp:3722
> consumed = <optimized out>
> #17 0x00007fffee71a174 in QApplication::notify(QObject*, QEvent*)
> (this=0x7fffffffe1d0, receiver=0x555556211b70, e=0x7fffffffdb10) at
> kernel/qapplication.cpp:3481
> w = 0x555556211b70
> extra = <optimized out>
> isProxyWidget = <optimized out>
> res = false
> #18 0x00007fffed8a1be7 in QCoreApplication::notifyInternal2(QObject*,
> QEvent*) (receiver=receiver at entry=0x555556211b70,
> event=event at entry=0x7fffffffdb10) at kernel/qcoreapplication.cpp:1016
> selfRequired = true
> result = false
> cbdata = {0x555556211b70, 0x7fffffffdb10, 0x7fffffffdabf}
> d = <optimized out>
> threadData = 0x555555761330
> scopeLevelCounter = {threadData = 0x555555761330}
> #19 0x00007fffeddffe91 in QCoreApplication::sendEvent(QObject*,
> QEvent*) (event=0x7fffffffdb10, receiver=<optimized out>) at
> ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:233
> request =
> {_vptr.QEvent = 0x7fffedcede10 <vtable for QEvent+16>,
> static staticMetaObject = {d = {superdata = 0x0, stringdata =
> 0x7fffed9f91a0 <qt_meta_stringdata_QEvent>, data = 0x7fffed9f8be0
> <qt_meta_data_QEvent>, static_metacall = 0x0, relatedMetaObjects =
> 0x0, extradata = 0x0}}, d = 0x0, t = 77, posted = 0, spont = 0,
> m_accept = 1, reserved = 2756}
> #20 0x00007fffeddffe91 in QWindowPrivate::deliverUpdateRequest()
> (this=this at entry=0x5555592c4bc0) at kernel/qwindow.cpp:2305
> request =
> {_vptr.QEvent = 0x7fffedcede10 <vtable for QEvent+16>,
> static staticMetaObject = {d = {superdata = 0x0, stringdata =
> 0x7fffed9f91a0 <qt_meta_stringdata_QEvent>, data = 0x7fffed9f8be0
> <qt_meta_data_QEvent>, static_metacall = 0x0, relatedMetaObjects =
> 0x0, extradata = 0x0}}, d = 0x0, t = 77, posted = 0, spont = 0,
> m_accept = 1, reserved = 2756}
> #21 0x00007fffede003a9 in QWindow::event(QEvent*)
> (this=this at entry=0x555556211b70, ev=ev at entry=0x7fffffffdf40) at
> kernel/qwindow.cpp:2276
> #22 0x00007ffff5f62fd5 in QQuickWindow::event(QEvent*)
> (this=this at entry=0x555556211b70, e=e at entry=0x7fffffffdf40) at
> items/qquickwindow.cpp:1607
> #23 0x00007ffef81941c3 in PlasmaQuick::Dialog::event(QEvent*)
> (this=0x555556211b70, event=0x7fffffffdf40) at
> /usr/src/debug/kf5-plasma-5.44.0-1.fc27.x86_64/src/
> plasmaquick/dialog.cpp:1305
> #24 0x00007fffee71292c in QApplicationPrivate::notify_helper(QObject*,
> QEvent*) (this=this at entry=0x55555578bd20,
> receiver=receiver at entry=0x555556211b70, e=e at entry=0x7fffffffdf40) at
> kernel/qapplication.cpp:3722
> consumed = <optimized out>
> #25 0x00007fffee71a174 in QApplication::notify(QObject*, QEvent*)
> (this=0x7fffffffe1d0, receiver=0x555556211b70, e=0x7fffffffdf40) at
> kernel/qapplication.cpp:3481
> w = 0x555556211b70
> extra = <optimized out>
> isProxyWidget = <optimized out>
> res = false
> #26 0x00007fffed8a1be7 in QCoreApplication::notifyInternal2(QObject*,
> QEvent*) (receiver=0x555556211b70, event=event at entry=0x7fffffffdf40)
> at kernel/qcoreapplication.cpp:1016
> selfRequired = true
> result = false
> cbdata = {0x555556211b70, 0x7fffffffdf40, 0x7fffffffdecf}
> d = <optimized out>
> threadData = 0x555555761330
> scopeLevelCounter = {threadData = 0x555555761330}
> #27 0x00007fffed8f1f5b in QCoreApplication::sendEvent(QObject*,
> QEvent*) (event=0x7fffffffdf40, receiver=<optimized out>) at
> ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:233
> e =
> {<QEvent> = {_vptr.QEvent = 0x7fffedcede30 <vtable for
> QTimerEvent+16>, static staticMetaObject = {d = {superdata = 0x0,
> stringdata = 0x7fffed9f91a0 <qt_meta_stringdata_QEvent>, data =
> 0x7fffed9f8be0 <qt_meta_data_QEvent>, static_metacall = 0x0,
> relatedMetaObjects = 0x0, extradata = 0x0}}, d = 0x0, t = 1, posted =
> 0, spont = 0, m_accept = 1, reserved = 0}, id = 14}
> currentTimerInfo = 0x0
> n_act = 2
> maxCount = <optimized out>
> currentTime = {tv_sec = 506, tv_nsec = 958280107}
> #28 0x00007fffed8f1f5b in QTimerInfoList::activateTimers()
> (this=this at entry=0x5555557e1f80) at kernel/qtimerinfo_unix.cpp:643
> e =
> {<QEvent> = {_vptr.QEvent = 0x7fffedcede30 <vtable for
> QTimerEvent+16>, static staticMetaObject = {d = {superdata = 0x0,
> stringdata = 0x7fffed9f91a0 <qt_meta_stringdata_QEvent>, data =
> 0x7fffed9f8be0 <qt_meta_data_QEvent>, static_metacall = 0x0,
> relatedMetaObjects = 0x0, extradata = 0x0}}, d = 0x0, t = 1, posted =
> 0, spont = 0, m_accept = 1, reserved = 0}, id = 14}
> currentTimerInfo = 0x0
> n_act = 2
> maxCount = <optimized out>
> currentTime = {tv_sec = 506, tv_nsec = 958280107}
> #29 0x00007fffed8ef31c in
> QEventDispatcherUNIXPrivate::activateTimers()
> (this=this at entry=0x5555557e1ee0) at
> kernel/qeventdispatcher_unix.cpp:249
> #30 0x00007fffed8f02d8 in
> QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
> (this=<optimized out>, flags=...) at
> kernel/qeventdispatcher_unix.cpp:514
> d = 0x5555557e1ee0
> include_timers = true
> canWait = <optimized out>
> tm = <optimized out>
> wait_tm = {tv_sec = 0, tv_nsec = 0}
> nevents = 1
> #31 0x00007fffd6b16f6d in
> QUnixEventDispatcherQPA::processEvents(QFlags<
> QEventLoop::ProcessEventsFlag>)
> (this=<optimized out>, flags=...) at qunixeventdispatcher.cpp:68
> didSendEvents = <optimized out>
> #32 0x00007fffed8a096a in
> QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)
> (this=this at entry=0x7fffffffe0e0, flags=..., flags at entry=...) at
> kernel/qeventloop.cpp:212
> d = 0x5555557edc30
> locker = {val = 93824994387632}
> ref = {d = 0x5555557edc30, locker = @0x7fffffffe068,
> exceptionCaught = true}
> #33 0x00007fffed8a9094 in QCoreApplication::exec() () at
> kernel/qcoreapplication.cpp:1289
> threadData = 0x555555761330
> eventLoop =
> {<QObject> = {_vptr.QObject = 0x7fffedcedbc8 <vtable for
> QEventLoop+16>, static staticMetaObject = {d = {superdata = 0x0,
> stringdata = 0x7fffed9fd6c0 <qt_meta_stringdata_QObject>, data =
> 0x7fffed9fd5a0 <qt_meta_data_QObject>, static_metacall =
> 0x7fffed8d20d0 <QObject::qt_static_metacall(QObject*,
> QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata
> = 0x0}}, d_ptr = {d = 0x5555557edc30}, static staticQtMetaObject = {d
> = {superdata = 0x0, stringdata = 0x7fffeda00360
> <qt_meta_stringdata_Qt>, data = 0x7fffed9fd7e0 <qt_meta_data_Qt>,
> static_metacall = 0x0, relatedMetaObjects = 0x0, extradata = 0x0}}},
> static staticMetaObject = {d = {superdata = 0x7fffedce6280
> <QObject::staticMetaObject>, stringdata = 0x7fffed9f82c0
> <qt_meta_stringdata_QEventLoop>, data = 0x7fffed9f8260
> <qt_meta_data_QEventLoop>, static_metacall = 0x7fffed8a0660
> <QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int,
> void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}}
> returnCode = <optimized out>
> #34 0x00007ffff7bd317b in kdemain(int, char**) (argc=<optimized out>,
> argv=0x7fffffffe368) at
> /usr/src/debug/kwin-5.12.2-1.fc27.x86_64/main_x11.cpp:468
> primaryScreen = 0
> c = 0x0
> number_of_screens = <optimized out>
> a =
> {<KWin::Application> = {<No data fields>}, static
> staticMetaObject = {d = {superdata = 0x7ffff7bbfb40
> <KWin::Application::staticMetaObject>, stringdata = 0x7ffff7bd5020
> <qt_meta_stringdata_KWin__ApplicationX11>, data = 0x7ffff7bd4fc0
> <qt_meta_data_KWin__ApplicationX11>, static_metacall = 0x7ffff7bd45f0
> <KWin::ApplicationX11::qt_static_metacall(QObject*, QMetaObject::Call,
> int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, owner = {d
> = 0x5555557ec1e0}, m_replace = false}
> replaceOption = {d = {d = 0x5555557e5f60}}
> parser = {d = 0x5555557c7cc0}
> noActivitiesOption = {d = {d = 0x5555557f3970}}
> plugins = {d = 0x5555557f2f20}
> helper = <incomplete type>
> #35 0x00007fffec9d2f2a in __libc_start_main () at /lib64/libc.so.6
> #36 0x0000555555554c1a in _start ()
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180319/c74a705a/attachment-0001.html>
More information about the mesa-dev
mailing list