PA_SU_SC_MODE_CNTL with POLY_MODE set to a point or line type was refused,
and every triangle was drawn filled. The state decode now takes the polygon
type of the faces that are not culled into State::polygonMode, ignores the
types when POLY_MODE is clear or the primitives are points or lines, and
keeps refusing front and back types that differ while both faces are drawn.
Points are drawn one pixel wide (PA_SU_POINT_SIZE 0x00080008 inside
PA_SU_POINT_MINMAX), the size VK_KHR_maintenance5 gives a point whose
shader does not write PointSize, and lines one pixel wide (PA_SU_LINE_CNTL).
The device enables fillModeNonSolid and maintenance5 when they are
available. The polygon mode joins the pipeline, library and draw keys and
the pipeline journal (format 5).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A store to the trimmed tail of a written buffer would be dropped instead
of failing as an alias of the render target, so only read-only buffers,
such as per-attribute vertex fetches, are trimmed.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
shadPS4 declares sceNpSetGamePresenceOnline(req_id, online_id, presence)
and returns INVALID_ARGUMENT for request id 0 or a null online id. The
export took (user id, timeout), so a caller's arguments landed in the
wrong registers.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Rewrite the technical debt entry to list what is unverified on the
PS5 and what still throws, with the source each behaviour follows,
and drop the descriptions of behaviour that is no longer a gap. The
entry is now under the 1000 character limit.
A thread blocked in sceZlibWaitForDone was never woken by
sceZlibFinalize, so it waited for its whole timeout or forever.
Finalization now wakes every waiter, and a waiter that sees the
service finalized throws, since no source says what the console
returns. shadPS4 leaves such a waiter blocked.
sceZlibWaitForDone threw for any timeout and when no finished request
was pending. Wait on a condition variable that sceZlibInflate signals:
a null timeout blocks until a request finishes, and a timeout returns
0x81120027 (timed out) on expiry, as in shadPS4. The timeout is read
as microseconds, as SharpProspero documents for the PS5; shadPS4
reads milliseconds.
sceZlibFinalize threw while a finished request's result was unread.
Discard the stored results and the finished IDs not yet returned by
sceZlibWaitForDone instead. shadPS4 also returns success here and
never reports the abandoned requests; its next initialization clears
them. An ID from before finalization reports 0x81120002 afterwards.
sceZlibGetResult threw on a second call for the same request and on
an ID it did not hold. Return the same length and status on every
call, and 0x81120002 (not found) for an unknown ID, as shadPS4 does.
Null output pointers still throw.
sceZlibInflate threw when an earlier request's result had not been
read. Accept the request instead: every finished request keeps its
result, and sceZlibWaitForDone returns the finished IDs in submission
order, as shadPS4's done queue does. The PS5 completion order is
unverified and recorded in the technical debt entry.
main 7ce3b1df3e took disk-cache format 43 (#8295) for its own layout, so this
branch's format moves to 44. The request serializer stays at 42: main
still writes 41.
enabling it broke agc_driver_layered_volume_draw, agc_driver_layered_volume_vertex
and agc_driver_subvector_loop on an RX 6700 XT. With #7623 and #7828 on
main, those tests pass with the feature on, in either library-mode order.
This reverts 48b394d1e and keeps the record of #7623's empty-mask test in
the s_subvector_loop debt entry.
Co-Authored-By: Claude <[email protected]>
Debt files describe what was observed without naming titles.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The PS5 module returns 1 when the port captures from the controller's
built-in microphone, 0 for another input device, and an error for a
handle that names no open port. Ports here capture from the host's
default input device, so an open port answers 0 and any other handle
returns 0x80260101, as the other handle calls do.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK