Repository navigation
SuperSLM 1.13.1
Released 2026-10-19.
SuperSLM 1.13.1 is a fix release for the GPU backend. A GPU page pool is now capped at the largest buffer
D3D12 guarantees on the card, and a larger request is refused before anything is allocated. On the AMD
Radeon RX 7900 XTX, a 4 GiB pool used to make the driver remove the device. It also creates default-heap
GPU buffers in the state D3D12 actually gives them, which removes a debug-layer warning on every such
buffer. No token, save format, existing status or existing verb changes from 1.13.0, and no model artifact
needs reconversion. One GPU verb is added.
What changed
-
GPU page pools are capped at D3D12's guaranteed resource size. A pool is one committed D3D12
buffer. D3D12 requires a driver to create a resource only up to max(128 MiB, min(2048 MiB, a quarter
of the adapter's dedicated video memory)), sosslm_gpu_kv_pool_createnow refuses a pool above that
size withSSLM_GPU_KV_POOL_TOO_LARGE, before allocating anything. In 1.13.0 the only limit was
2^32 bytes, the reach of the shaders' offsets, which is still the upper bound. The cap is 2 GiB on an
adapter that reports 8 GiB or more of dedicated video memory: 21,845 pages at Qwen2.5-0.5B and 9,362
at Qwen2.5-1.5B (cap 4,096, 16-position pages). An RTX 2080 SUPER reports 8,374,976,512 bytes, so its
cap is 2,093,744,128 bytes: 21,298 and 9,128 pages.Why: at 1.13.0's ceiling (43,690 pages at 0.5B, a 4,294,901,760-byte buffer), the RX 7900 XTX's
driver (32.0.23033.1002) answered the committed-buffer create withDXGI_ERROR_DEVICE_REMOVED, removal
reasonDXGI_ERROR_DRIVER_INTERNAL_ERROR, so the create returnedSSLM_DEVICE_LOST. The RTX 2080
SUPER created the same buffer. A size between D3D12's guarantee and 2^32 bytes is up to the driver. -
New verb:
sslm_gpu_kv_pool_max_page_count(ctx, model, &pages)reports the largest page count
sslm_gpu_kv_pool_createadmits for a model on the context's adapter. It validates its arguments as
the create does (SSLM_SEQUENCE_KV_BUFFER_MISMATCHwith*pages0 on a null out-pointer or a context
or model mismatch) and allocates and submits nothing. -
Default-heap buffers are created in COMMON. D3D12 creates an ordinary default-heap buffer in
COMMON whatever initial state is requested, and the debug layer reports the request as
CREATERESOURCE_STATE_IGNORED. The allocator now asks for COMMON, the state the buffer really has.
Upload and readback buffers keep their required initial states, and acceleration structures keep
theirs. The engine's logical state tracking is unchanged: a COMMON buffer is promoted to its first
use's state, which D3D12 allows.
Compatibility and required action
- The ABI change is additive: one new GPU verb in
gpu_1p0.h. No existing declaration, struct layout or
status ordinal changes. The CPU C ABI is unchanged. - A host that asked for a pool above its adapter's cap now gets
SSLM_GPU_KV_POOL_TOO_LARGEwhere it got
a pool (or, on the RX 7900 XTX at 4 GiB, a lost device). Usesslm_gpu_kv_pool_max_page_countto size
pools. A pool at or below the cap behaves as in 1.13.0. - The shaders are unchanged from 1.13.0.
Verification
- Pool-cap arithmetic:
gpu_kv_pool_geometry_tests, 2,083 checks, 0 failures (Windows, MSVC). The same
tests built against a copy of the cap function that returns 1.13.0's 2^32 fail every cap check. - RTX 2080 SUPER, D3D12 debug layer on: paged-KV GPU cells 11.4 (the pool size guard, 33 checks: a pool at
the 2,093,744,128-byte cap admitted at both model sizes, one page more refused), 2.6 (13 checks, including
sslm_gpu_kv_pool_max_page_countagainst the test's own arithmetic and its refusals), 4.8 (102
checks, a full-size pool driven in its upper half), 2.11 and 5.7: all green. - RX 7900 XTX (driver 32.0.23033.1002), cell 11.4 with the debug layer on: 33 checks, 0 failures; pools of
21,845 pages (0.5B) and 9,362 pages (1.5B), 2,048 MiB each, admitted. At 1.13.0 the same cell read
SSLM_DEVICE_LOSTat the 2^32 ceiling. - SuperSLM-Unreal's validation battery on the RX 7900 XTX, built on this source: 243 editor test cells and
its packaged 50-NPC GPU scenario without a renderer, all passing. - Default-heap COMMON creation: the buffer-state probes (
gpu_buffer_initial_state_testsand its
state-tracking build) pass on the Windows runtime and on an Unreal Agility SDK runtime; with the
previous allocator, the Agility controls reproduce the creation warnings. - Windows, MSVC Release, at this release's tree, RTX 2080 SUPER: all 23 ctest entries pass, including
superslm_testsand the three Windows GPU schema cells (t2933_schema_query_native_state,
t2933_schema_lifecycle_native_state,t2933_schema_real_model). Those three build their own executables,
and since 1.13.0 their builders omittedsrc/gpu/gpu_inflight_registry.cpp, so on a GPU machine they
failed to link; 1.13.1 adds it. CI does not run them (they need a hardware D3D12 device). - Linux: the release tag's CI run.
Files changed
src/gpu/gpu_kv_pool_geometry.h--MaxPoolBytesForAdapter, and the pool-size refusal and largest
admissible page count under a given cap.src/gpu/d3d12_harness.h-- records the selected adapter's dedicated video memory; default-heap buffers
are created in COMMON.src/gpu/gpu_1p0.cpp,include/superslm/gpu_1p0.h-- the cap at pool create, and
sslm_gpu_kv_pool_max_page_count.tests/gpu_kv_pool_geometry_tests.cpp,tests/paged-kv-gpu/(pool_cap_helpers.hnew; cells 2.6, 4.8
and 11.4 and their helpers),tests/gpu_buffer_initial_state_tests.cpp(new),CMakeLists.txt-- the
tests above.tests/t2130-g5-red-suite/run_t2922_query_runtime.ps1,run_t2922_lifecycle.ps1,run_t2922_real_model.ps1
-- linksrc/gpu/gpu_inflight_registry.cpp.docs/api.md,README.md,CHANGELOG.md,tests/install-consumer/CMakeLists.txt, this note --
version 1.13.1.