azonenberg changed the topic of #scopehal to: libscopehal, libscopeprotocols, and glscopeclient development and testing | https://github.com/azonenberg/scopehal-cmake, https://github.com/azonenberg/scopehal-apps, https://github.com/azonenberg/scopehal | Logs: https://freenode.irclog.whitequark.org/scopehal
<_whitenotifier-3> [scopehal-apps] azonenberg pushed 1 commit to master [+0/-0/±1] https://git.io/JvWzS
<_whitenotifier-3> [scopehal-apps] azonenberg 5aaa9e8 - ScopeThread: cleanly return if a capture fails
<_whitenotifier-3> [scopehal] azonenberg pushed 2 commits to master [+0/-0/±2] https://git.io/JvWzH
<_whitenotifier-3> [scopehal] azonenberg 1cafdb7 - LeCroyOscilloscope: Added more verification to prevent crashing if a truncated wavedesc is received. Updated ReadWaveformBlock() to correctly handle stray newlines. Fixes #45.
<_whitenotifier-3> [scopehal] azonenberg d6df853 - Removed some dead code
<_whitenotifier-3> [scopehal] azonenberg commented on issue #45: Add "DC offset" protocol decoder - https://git.io/JvWz7
<_whitenotifier-3> [scopehal-apps] azonenberg closed issue #45: glscopeclient segfaults when changing vertical offset on scope front panel - https://git.io/JvYOh
<_whitenotifier-3> [scopehal-apps] azonenberg opened issue #49: Allow SI prefixes on protocol decoder inputs (K, M, etc) - https://git.io/JvWzd
<_whitenotifier-3> [scopehal] azonenberg pushed 1 commit to master [+0/-0/±1] https://git.io/JvWgh
<_whitenotifier-3> [scopehal] azonenberg 783e9bf - Made error checking not panic if a channel is disabled
<_whitenotifier-3> [scopehal-apps] azonenberg pushed 3 commits to master [+0/-0/±8] https://git.io/JvW2I
<_whitenotifier-3> [scopehal-apps] azonenberg a6838bf - Fixed bug where selecting "delete" from the context menu on a protocol decoder overlay would delete the parent signal instead
<_whitenotifier-3> [scopehal-apps] azonenberg 93bd1b7 - Remove protocol decoders from top level when the last reference is deleted. Prevents UaF crash. Fixes #47.
<_whitenotifier-3> [scopehal-apps] azonenberg 77c242d - "Delete" context menu item on a protocol decode overlay correctly removes the overlay trace. Fixes #8.
<_whitenotifier-3> [scopehal-apps] azonenberg closed issue #8: Allow protocol decoders to be deleted - https://git.io/JvW2L
<_whitenotifier-3> [scopehal-apps] azonenberg closed issue #47: Segfault when deleting channel - https://git.io/Jvc2T
<_whitenotifier-3> [scopehal] azonenberg pushed 1 commit to master [+0/-0/±1] https://git.io/JvW2D
<_whitenotifier-3> [scopehal] azonenberg 0a28661 - ProtocolDecoder: allow use of SI units when scaling parameters
<_whitenotifier-3> [scopehal-apps] azonenberg closed issue #49: Allow SI prefixes on protocol decoder inputs (K, M, etc) - https://git.io/JvWzd
<_whitenotifier-3> [scopehal-cmake] azonenberg pushed 1 commit to master [+0/-0/±2] https://git.io/JvW2d
<_whitenotifier-3> [scopehal-cmake] azonenberg 5b1511b - Updated submodules with various bug fixes
<_whitenotifier-3> [scopehal-apps] azonenberg opened issue #50: Dense digital overlay traces overwrite channel names - https://git.io/JvWoW
<_whitenotifier-3> [scopehal-apps] azonenberg labeled issue #50: Dense digital overlay traces overwrite channel names - https://git.io/JvWoW
<_whitenotifier-3> [scopehal-apps] azonenberg labeled issue #50: Dense digital overlay traces overwrite channel names - https://git.io/JvWoW
<_whitenotifier-3> [scopehal] azonenberg pushed 1 commit to master [+4/-0/±5] https://git.io/JvWKG
<_whitenotifier-3> [scopehal] azonenberg d218f4b - Initial implementation of TMDS line code
<_whitenotifier-3> [scopehal] azonenberg pushed 1 commit to master [+0/-0/±1] https://git.io/JvWKF
<_whitenotifier-3> [scopehal] azonenberg ba28098 - Fixed bug where TMDS decoder would falsely find HDMI guard band symbols inside data blocks
miek has joined #scopehal
<_whitenotifier-3> [scopehal-apps] azonenberg pushed 1 commit to master [+0/-0/±3] https://git.io/JvWbf
<_whitenotifier-3> [scopehal-apps] azonenberg 2aec921 - Added more performance profiling
<azonenberg> So, at this point ~75% of my render time is spent in glBufferData()
<azonenberg> There is a 12:1 overhead right now because i'm tesselating voltages to triangles in software then pushing floating point coordinates to the gpu
<azonenberg> let's see, 1M points * 32 bits per float * 12 coordinates per point is 384 Mbits per frame in 30.3 ms so 12.6 Gbps of effective throughput
<azonenberg> multiplying across channels, 30.3 ms * 4 channels = 121.2 ms, this test rendered at 5.29 FPS so ~188 ms per frame, or a total of 64% of the total inter-frame time in glBufferData)))))))))
<azonenberg> some of the inter-frame time is used for downloading waveforms from the scope and other non-rendering tasks
<azonenberg> so ~75% of render time is in that one call
<lain> sheesh
<lain> smoking gun lol
<azonenberg> yeah unfortunately that isnt super easy to optimize
<monochroma> gpgpu ?
<azonenberg> well first step is to generate better geometry
<azonenberg> without that weird line artifact when zoomed in
<azonenberg> Then i'll optimize the generation
<azonenberg> i think long term i will be using a compute shader to create the verts from a vector of floating point coordinates
<azonenberg> For the short term i'm going to implement two different rendering paths just to remove the artifacts
<azonenberg> (can always move this to a shader later)
<azonenberg> If samples are <1 pixel wide, draw each sample as a box made of two triangles, axially aligned
<azonenberg> two pixels wide and with height extending from the current sample to the next (stretched +/- 1 pixel to ensure minimum thickness on horizontal lines)
<azonenberg> If samples are >1 pixel wide, the current rendering path doesn't work so i need to some up with something new
<azonenberg> and the axially aligned boxes will look pixelated
<azonenberg> the aligned boxes look great intensity graded when zoomed out though
<azonenberg> https://www.antikernel.net/temp/tmds-07.png this is what that render path looks like at max zoom, i.e. just barely more than one sample per pixel
<azonenberg> as i zoom in more than this, the lines connecting samples start to have a non-negligible horizontal component so axially aligned boxes don't work
<azonenberg> What i did in the old render path was take a logical line from each sample to the next, then extend that to a quad by splitting each endpoint of the segment into two points
<azonenberg> and moving them apart by +/- 1 pixel along a vector normal to the line
<azonenberg> But that gave artifacts i dont yet understand the cause of. not sure if implementation bug or fundamental math problem with this approach
<azonenberg> either way, i like the new rendering for wider zooms so i'll keep the spliot