Mesa patch series from the qegl Vulkan (Zink) experiment, 2026-10-19. Not filed upstream.
Base: mesa-26.2.4 (archive.mesa3d.org); 0001-0005 apply unchanged to main as of 2026-10-19; 0006-0007 are tested on 26.2.4 only.

0001 st/pbo_compute: keep struct pbo_data at 16 bytes with MS bitfield layout   (Windows ABI)
0002 mesa/arbprogparse: reset SamplersUsed when re-specifying an ARB fp          (core, all drivers)
0003 st/mesa: clear base_serialized_nir after freeing it                         (core, all drivers)
0004 mesa: revalidate on glBindProgramARB of the already bound program            (core, all drivers)
0005 zink: don't dereference the previously bound shader in bind_gfx_stage       (zink)
0006 zink: keep buffers out of a small BAR; never demote persistently mapped buffers to vram  (zink)
0007 wgl: no CPU wait when switching away from a shared zink context (STW_SWITCH_WAIT=1 restores it)  (wgl/zink)

Each commit message has the analysis. Reproducers (Windows, any opengl32.dll by path):
  repro/progtest.c  two shared contexts; A re-specifies ARB fp (units {0,8} -> {0} -> {3,8,0})
                    and, with VP=1, an ARB vp; B binds the same id and draws each round.
                    gcc -O2 -o progtest progtest.c -lgdi32 -luser32
                    VP=1 progtest <dir with Mesa opengl32.dll> zink 60
                    stock Mesa: crash (0002) / heap corruption (0003) / zink assert (0004+0005)
  repro/sz.c        sizeof(struct pbo_data) with the original and fixed declarations
                    (20 vs 16 bytes with gcc -mms-bitfields, the MinGW default).
  0001 itself needs a texture-backed FBO read back 6+ times with
  glReadPixels(GL_BGRA, GL_UNSIGNED_INT_8_8_8_8) on a driver with PIPE_TEXTURE_TRANSFER_COMPUTE
  (zink on NVIDIA) through st_GetTexSubImage_shader's fallback path.
Verification: Mac OS X 10.4 Core Image (cicheck, citest, TigerViz) through qegl on zink, Mesa
debug build with assertions, HeapValidate after every GL command: clean with all five applied.
