@ken-martin I’m working through test failures and have a question about RenderingVulkanCxx-TestChangingData
. It fails with this error:
vtkRenderingVulkanCxxTests: /stage/source/vtk/vulkan/Common/Core/vtkDataArrayTupleRange_Generic.h:141: vtk::detail::ConstComponentReference<ArrayType, <anonymous> >::operator vtk::detail::ConstComponentReference<ArrayType, <anonymous> >::APIType() const [with ArrayType = vtkDataArray; int TupleSize = 3; vtk::detail::ConstComponentReference<ArrayType, <anonymous> >::APIType = double]: Assertion `"Bad assumption in VTK_ASSUME: " "this->Array->GetNumberOfComponents() == this->NumComps.value"&& c' failed.
while trying to dereference multiple components from an array that appears to have only one. The backtrace (below) indicates that offender is a PointNormalsWorker running on thread 3 (i.e., not the GUI thread). Any idea why a single-component, 64-bit integer array would be used for point normals?
(lldb) bt
* thread #4, name = 'vtkRenderingVul', stop reason = signal SIGABRT
* frame #0: 0x00007ffff7e0b7d5 libc.so.6`raise + 325
frame #1: 0x00007ffff7df4895 libc.so.6`abort + 295
frame #2: 0x00007ffff7df4769 libc.so.6`.annobin_unwind_resume.c_end.unlikely + 15
frame #3: 0x00007ffff7e03e86 libc.so.6`__assert_fail + 70
frame #4: 0x00007ffff7ae594b libvtkRenderingVulkan-9.0.so.1`vtk::detail::ConstComponentReference<vtkDataArray, 3>::operator double(this=0x00007fffea474b60) const at vtkDataArrayTupleRange_Generic.h:141:5
frame #5: 0x00007ffff7ade1c5 libvtkRenderingVulkan-9.0.so.1`(anonymous namespace)::PointNormalWorker::operator(this=0x00007fffea474c88, pointArray=0x00007fffe0000b60, normalArray=0x00007fffe4000ca0)<vtkDataArray, vtkDataArray>(vtkDataArray *, vtkDataArray *) const at vtkVulkanBufferManager.cxx:427:17
frame #6: 0x00007ffff7add8bd libvtkRenderingVulkan-9.0.so.1`asyncbuffer(device=0x000000000046e770, da=0x00007fffe0000b60, normals=0x00007fffe4000ca0, buff=0x000000000045b230) at vtkVulkanBufferManager.cxx:462:11
frame #7: 0x00007ffff7add98b libvtkRenderingVulkan-9.0.so.1`operator(__closure=0x000000000045d450, w=0x00000000006d2db0) at vtkVulkanBufferManager.cxx:509:20
frame #8: 0x00007ffff7ae14d2 libvtkRenderingVulkan-9.0.so.1`std::__invoke_impl<void, vtkVulkanBufferManager::GetBufferPointsNormals(vtkVulkanBufferManager::BufferRequest, vtkDataArray*, bool)::<lambda(vtkVulkanBufferManager::Worker*)>&, vtkVulkanBufferManager::Worker*>((null)=__invoke_other @ 0x00007fffea474d40, __f=0x000000000045d450, (null)=0x00007fffea474da0) &) at invoke.h:60:36
frame #9: 0x00007ffff7ae05b1 libvtkRenderingVulkan-9.0.so.1`std::__invoke_r<void, vtkVulkanBufferManager::GetBufferPointsNormals(vtkVulkanBufferManager::BufferRequest, vtkDataArray*, bool)::<lambda(vtkVulkanBufferManager::Worker*)>&, vtkVulkanBufferManager::Worker*>(__fn=0x000000000045d450, (null)=0x00007fffea474da0) &) at invoke.h:153:33
frame #10: 0x00007ffff7adfeae libvtkRenderingVulkan-9.0.so.1`std::_Function_handler<void(vtkVulkanBufferManager::Worker*), vtkVulkanBufferManager::GetBufferPointsNormals(vtkVulkanBufferManager::BufferRequest, vtkDataArray*, bool)::<lambda(vtkVulkanBufferManager::Worker*)> >::_M_invoke(__functor=0x000000000045d450, __args#0=0x00007fffea474da0) at std_function.h:291:30
frame #11: 0x00007ffff7aec71b libvtkRenderingVulkan-9.0.so.1`std::function<void (vtkVulkanBufferManager::Worker*)>::operator(this=0x000000000045d450, __args#0=0x00000000006d2db0)(vtkVulkanBufferManager::Worker*) const at std_function.h:622:14
frame #12: 0x00007ffff7aec696 libvtkRenderingVulkan-9.0.so.1`void std::__invoke_impl<void, std::function<void (vtkVulkanBufferManager::Worker*)>, vtkVulkanBufferManager::Worker*>((null)=__invoke_other @ 0x00007fffea474e00, __f=0x000000000045d450, (null)=0x000000000045d448)>&&, vtkVulkanBufferManager::Worker*&&) at invoke.h:60:36
frame #13: 0x00007ffff7aec5f7 libvtkRenderingVulkan-9.0.so.1`std::__invoke_result<std::function<void (vtkVulkanBufferManager::Worker*)>, vtkVulkanBufferManager::Worker*>::type std::__invoke<std::function<void (__fn=0x000000000045d450, (null)=0x000000000045d448)>, vtkVulkanBufferManager::Worker*>(std::function<void (vtkVulkanBufferManager::Worker*)>&&, vtkVulkanBufferManager::Worker*&&) at invoke.h:95:40
frame #14: 0x00007ffff7aec567 libvtkRenderingVulkan-9.0.so.1`void std::thread::_Invoker<std::tuple<std::function<void (vtkVulkanBufferManager::Worker*)>, vtkVulkanBufferManager::Worker*> >::_M_invoke<0ul, 1ul>(this=0x000000000045d448, (null)=_Index_tuple<0, 1> @ 0x00007fffea474e60) at thread:264:26
frame #15: 0x00007ffff7aec520 libvtkRenderingVulkan-9.0.so.1`std::thread::_Invoker<std::tuple<std::function<void (vtkVulkanBufferManager::Worker*)>, vtkVulkanBufferManager::Worker*> >::operator(this=0x000000000045d448)() at thread:271:20
frame #16: 0x00007ffff7aec504 libvtkRenderingVulkan-9.0.so.1`std::thread::_State_impl<std::thread::_Invoker<std::tuple<std::function<void (vtkVulkanBufferManager::Worker*)>, vtkVulkanBufferManager::Worker*> > >::_M_run(this=0x000000000045d440) at thread:215:20
frame #17: 0x00007ffff523e994 libstdc++.so.6`execute_native_thread_routine + 20
frame #18: 0x00007ffff53ca432 libpthread.so.0`start_thread + 226
frame #19: 0x00007ffff7ed06d3 libc.so.6`__clone + 67
(lldb) frame select 5
frame #5: 0x00007ffff7ade1c5 libvtkRenderingVulkan-9.0.so.1`(anonymous namespace)::PointNormalWorker::operator(this=0x00007fffea474c88, pointArray=0x00007fffe0000b60, normalArray=0x00007fffe4000ca0)<vtkDataArray, vtkDataArray>(vtkDataArray *, vtkDataArray *) const at vtkVulkanBufferManager.cxx:427:17
424 size_t count = 0;
425 for (const auto& point : pts)
426 {
-> 427 (*rptr++) = point[0];
428 (*rptr++) = point[1];
429 (*rptr++) = point[2];
430 auto normal = normals[count];
(lldb) p point.Array->GetClassName()
(const char *) $0 = 0x00007ffff5985511 "vtkTypeInt64Array"
(lldb) p point.Array->GetNumberOfTuples()
(vtkIdType) $1 = 121
(lldb) p point.Array->GetNumberOfComponents()
(int) $2 = 1