[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