guest_memory reserves with a hint above the guest arena and with a hint
on the arena's last page for two pages, and checks that both land inside
the arena, the second below its hint.
A mapping without MAP_FIXED treated its address as the lowest place it
could go, and a hint at or above the end of the guest arena threw on the
host. FreeBSD 11.4's vm_mmap_object places such mappings with
vm_map_find_min, which takes the address as a hint only: it tries at or
above it, then again from its minimum address.
GuestArenaAllocateFromHint does the same in the arena: at or above the
hint when it lies below the arena's end and a range fits there, otherwise
from the arena's start. MapPlaced and the Windows mmap_aligned use it for
hinted mappings; GuestArenaAllocateAtOrAbove keeps its meaning for the
callers that need a range above an address.
PS5CEMU-HAR (PPSA99360) reserves its JIT range with
sceKernelReserveVirtualRange and a hint near its own code, a host address
above the arena here, and aborted with "mapping address hint is above the
guest address space arena" when launching a 3DS title.
On a device whose largest device-local heap has only host-visible memory
types (integrated GPUs), the staging pool's device tier holds system RAM:
it now retains a sixty-fourth of the heap, at least 128 MiB.
A guest sampler with FORCE_UNNORMALIZED and a mip filter of none read a
multi-level texture and the driver refused it: an unnormalized sampler is
accepted on a view with several levels only when every use is image_sample_lz and
the S# has no minimum LOD and no LOD bias. Kena: Bridge of Spirits (PPSA01746)
binds such a sampler (implicit LOD, point filters, mip filter none, LOD bias 7)
to a 9-level texture and stopped with "guest texture sampled with unnormalized
coordinates is not a single-layer 1D or 2D view ...".
With the mip filter off the sampler reads only level 0, so the base-level path
the driver already has for unnormalized samplers is exact for it whatever its
uses, minimum LOD or bias. A sampler with a point or linear mip filter is
unchanged.
Measured on a PS5 (gfx1013) through a sampler descriptor rewritten to force
unnormalized coordinates, a 64x64 texture of four levels with a distinct marker
per level, coordinates in texel units:
- mip filter point, explicit LOD 0, 1, 2, 3: level 0, 1, 2, 3, 256 of 256 texels
each, coordinates read in texel units of the selected level
- mip filter point, implicit LOD from a quad derivative of 8 texels: level 3
- mip filter none with LOD bias 7: explicit LOD 2, explicit LOD 3 and the implicit
LOD of 3 each read level 0, 256 of 256 texels
Tested: Windows 11, MinGW-w64 GCC 15.2.0, Release, RTX 4070 SUPER.
agc_shader_memory_tests passes with the change and fails without it on the new
assertion; agc_driver_image_sample_unnormalized_tests, agc_shader_disk_cache_tests
and agc_driver_graphics_tests pass.
Add tests for check_conventions.py's pull request checks: a filled-in
copy of the real template passes, the untouched template reports every
gap, unchecked items are named for any list marker, AI-assisted and
Depends on accept only their documented answers, template comments do
not count as answers, sections need content, and titles must follow
Conventional Commits.
Morrowind imports rtprio_thread, pthread_setconcurrency and pthread_getconcurrency and stops at start-up. Report every guest thread as normal priority and accept a set without applying it; store the concurrency level as a hint. Recorded in the libkernel debt.
A 64 MiB import window held by the active recorder blocked the containing import of the same registered allocation, so an address-based build copied the whole range instead. Demon's Souls then stopped after two frames: "an address-based build copies 358 MiB of 1 registered ranges, past 64 MiB".
Allow the containing import when the recorder is active; the retired window stays alive through the hold (KeepThroughHold). Cover promotion, a sync inside the hold and release after the hold's last batch.
The EUC-JP profile threw on every two-byte character. It now maps the rows
0xA1-0xFE through a 94x94 table taken from Microsoft code page 932 (JIS X 0208
plus NEC row 13 and the NEC-selected IBM rows), and encodes a code point to its
lowest cell. Unassigned cells answer UNASSIGNED_CODE, a bad trail byte
INVALID_ENCODE, and a cut pair SRC_BUFFER_END. Three-byte JIS X 0212 characters
still throw.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
The driver builds tables whose ranges ascend by begin but can overlap
(a per-build region read over the address space's ranges). A lookup
selects the last range beginning at or below an address, so the anchor's
range now ends at the next range's begin when that comes first, and the
driver requires only ascending begins (BdaAbi::RangesOrdered).
An anchor is also not used for a range longer than 2^62 bytes, whose
offset arithmetic could wrap with a positive immediate. Anchors are
counted per read site after adjacent loads are grouped and reads with
no used dwords are dropped, so a program does not search for one
effective read; read eligibility shares RoutesApertures.
Tests: the anchored test programs can replace the lookup path by a
sentinel, which shows which reads load directly; the anchor table has an
overlapping range; a recompiled compute program reads through an anchor
on the GPU.
AI-assisted: yes
Preserve current null-descriptor and format-component semantics, keep live validation per draw, and leave empty or bypassed layouts on the value-owned path. Add differential, concurrency, and isolated timing coverage.
Written with AI assistance.
Cache validated layouts by shader variant and exact static shape, independently of buffer transport. Preserve per-draw address checks and share layout ownership with draw recipes.
Written with AI assistance.
PA_SC_AA_SAMPLE_LOCS_PIXEL_* patterns that differ between the four pixels
of the guest's 2x2 grid threw. Pass them through VK_EXT_sample_locations
as a 2x2 sample location grid on devices whose maxSampleLocationGridSize
for the sample count allows it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
sceSystemGestureCreateTouchRecognizer now records the gesture type and
rectangle in the title-owned recognizer buffer, and
sceSystemGestureUpdateTouchRecognizerRectangle replaces the stored
rectangle. sceSystemGestureGetTouchRecognizerInformation reports them
back with updated_time 0, since no recognizer is ever updated with
input. Recognizers that were not created by
sceSystemGestureCreateTouchRecognizer, or that have no rectangle, throw
because the console's result for them is unknown.
The guest test now passes full-size recognizer and rectangle structures
instead of an int.
Co-Authored-By: Claude Opus 5.5 <[email protected]>