Skip to content

pcbview 1.24.0 — Sharing the GPU

Choose a tag to compare

@github-actions github-actions released this 16 Aug 21:00
· 12 commits to main since this release

Path tracing no longer fights the desktop (integrated GPUs)

On an integrated GPU the desktop compositor shares the silicon — and a
converging path trace was starving it. Each sample was one monolithic
50–80 ms compute dispatch, submitted back-to-back until convergence, and
the compositor got a scheduling window about twelve times a second. It
read as the mouse cursor hitching whenever the image was refining.
Measured with a second GPU client: 180 fps alone, an erratic 13 during
convergence.

Two changes, which only work together:

  • Each sample is sliced into band-per-submission pieces
    (PCBVIEW_PT_BANDS, default 4 on integrated GPUs, inline on
    discrete). The bands are disjoint pixels of the same sample in the
    same order, so the image is bitwise identical — verified by capture
    comparison. Submission boundaries are where the kernel's GPU scheduler
    can arbitrate between processes; bands alone changed nothing, because
    the FIFO still ran every queued band before anyone else's job.
  • The device queue asks for LOW global priority
    (VK_EXT_global_priority, integrated GPUs only, silent fallback): at
    every boundary the scheduler now picks the desktop's work first.

Together: the second client holds 134–142 fps through convergence, and
accumulation pays 10–15% more wall time. The converged image is
unchanged.

The viewport says what is drawing it

Top-right corner, always on: the device name and the active mode —
raster, ray-traced lighting, path tracing, the Embree preview
modes on the CPU device, and raster (moving) while the fast-movement
downgrade is live. It is part of the overlay rather than the status bar,
so screenshots and captures carry their own provenance.

A first run has moves to play

The Record/Play panel used to start empty, which gave a new user no hint
what a step even looks like. A fresh install now seeds a default tour —
iso, a full spin, top, an explode there-and-back, bottom — as editable
examples of each step kind. A deliberately emptied list stays empty.

Fixed

  • The build's warning output means something again on gcc: the Vulkan
    {VK_STRUCTURE_TYPE_...} idiom tripped several hundred
    -Wmissing-field-initializers false positives that buried real
    warnings. What the noise was hiding is fixed too: two Gerber-importer
    aggregate initialisers genuinely missing a member, a misleadingly
    indented (but correct) command in the offscreen path, and two dead
    functions removed. The build is now down to a single warning, in
    third-party code.