<feed xmlns='http://www.w3.org/2005/Atom'>
<title>eglantine-cirakg/src/core/hle/service, branch nx2</title>
<subtitle>Mirror of github.com/cira0100/Eglantine-public nx2, a fork of Djihads80/Eglantine.</subtitle>
<id>https://git.cirakg.xyz/eglantine-cirakg/atom?h=nx2</id>
<link rel='self' href='https://git.cirakg.xyz/eglantine-cirakg/atom?h=nx2'/>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/'/>
<updated>2026-11-03T02:21:31+00:00</updated>
<entry>
<title>Merge pull request #155 from Djihads80/neo.ai/vibration-fix</title>
<updated>2026-11-03T02:21:31+00:00</updated>
<author>
<name>Jonas</name>
<email>104419015+jojo-chaechae@users.noreply.github.com</email>
</author>
<published>2026-11-03T02:21:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=68a945d0a84fca00545df0fe7b8fe714436242a5'/>
<id>urn:sha1:68a945d0a84fca00545df0fe7b8fe714436242a5</id>
<content type='text'>
Diagnoses to fix vibration support</content>
</entry>
<entry>
<title>Vibration support for ns2 games</title>
<updated>2026-11-03T01:15:22+00:00</updated>
<author>
<name>néo Luigi</name>
<email>85024393+neoluigi4123@users.noreply.github.com</email>
</author>
<published>2026-11-03T01:15:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=465aa33077f44d3f8664c076f8580e78446c0dee'/>
<id>urn:sha1:465aa33077f44d3f8664c076f8580e78446c0dee</id>
<content type='text'>
This branch supports vibration by achieving proper rumble reading from
games and uses regular eglantine/eden logic from ns1 to send them over.

Tested on windows 10 on Mario Kart World

Assisted-by: Claude Opus 5.5 (code cleanup)
</content>
</entry>
<entry>
<title>network: close each bsd fd once and drop unwanted or malformed room packets</title>
<updated>2026-11-03T00:39:54+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-11-03T00:39:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=0b927d171c6d918a675c25f57b2bc0121b7f889d'/>
<id>urn:sha1:0b927d171c6d918a675c25f57b2bc0121b7f889d</id>
<content type='text'>
Two threads closing the same fd both copied the descriptor and both called
Close(), so a host socket could be closed twice, and the second closesocket
could hit an unrelated socket that had reused the host fd. CloseImpl now
frees the slot under file_descriptors_mutex first and only that thread closes
the socket; the other gets EBADF.

OnProxyPacketReceived decompressed every room packet when any fd had a
socket, including native sockets and proxy sockets on other ports. Sockets
now report through AcceptsProxyPacket whether they want a packet, and only
those are collected, so an unwanted packet is not decompressed.

DecompressDataZSTD passed the frame's declared size straight to the vector
constructor, so a malformed or unsized frame from a room member threw on the
room thread. The new TryDecompressDataZSTD rejects invalid, unsized and
oversized frames, and bsd drops such packets with a warning.
DecompressDataZSTD now returns an empty vector for them instead of throwing.

Assisted-by: Claude Opus 5.5 (investigation and implementation)
</content>
</entry>
<entry>
<title>Merge upstream Djihads80/Eglantine nx2 into ldn/room-handshake</title>
<updated>2026-11-03T00:20:35+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-11-03T00:20:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=70934ece3d2253c7579cf8d71b13e3a0547070e2'/>
<id>urn:sha1:70934ece3d2253c7579cf8d71b13e3a0547070e2</id>
<content type='text'>
</content>
</entry>
<entry>
<title>network: keep fcntl modes across MSG_DONTWAIT and decompress room packets once</title>
<updated>2026-11-03T00:15:30+00:00</updated>
<author>
<name>cirakg</name>
<email>cirakg@cirakg.xyz</email>
</author>
<published>2026-11-03T00:15:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=9b56bf38cb92c42abd776d95bdd61f96bf9d1e9a'/>
<id>urn:sha1:9b56bf38cb92c42abd776d95bdd61f96bf9d1e9a</id>
<content type='text'>
A receive with MSG_DONTWAIT restored the blocking mode from the descriptor copy taken
before the call. When fcntl(SETFL, O_NONBLOCK) ran during the receive, the fd kept
reporting O_NONBLOCK while its socket blocked again. Receives now switch the mode only
for MSG_DONTWAIT and read the current flags under file_descriptors_mutex at both ends,
and SETFL changes the mode and the stored flags in the same critical section.

OnProxyPacketReceived decompressed each room packet once per matching socket while
holding file_descriptors_mutex, so every bsd call waited for it. It now copies the
distinct sockets under the lock, decompresses once without it and delivers the result.

Also reject fd == MAX_FD in IsFileDescriptorValid and PollImpl, which read past the
table, and guard the ProxySocket blocking and receive timeout setters with
packets_mutex, matching their reader.

Assisted-by: Claude Opus 5.5 (investigation and implementation)
</content>
</entry>
<entry>
<title>nx2: video decoder: keep post-stream release fences pending</title>
<updated>2026-11-02T23:55:03+00:00</updated>
<author>
<name>Javier</name>
<email>16884603+Xenon-Hacks@users.noreply.github.com</email>
</author>
<published>2026-11-01T00:56:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=031e58e93046726446538a0efeebd56f7b5dc184'/>
<id>urn:sha1:031e58e93046726446538a0efeebd56f7b5dc184</id>
<content type='text'>
Bananza's movie player acquires one decoded frame every time a released
output image's fence completes, and aborts (2111-3604) when the ring is
empty. Completing those fences at once after the end of a stream (the
Mario Kart World workaround) made it acquire from an empty ring the
moment its cutscene movies ended.

Released images now keep their normal pending fence after the end of a
stream. Stop (207) and Finalize (115) complete every fence handed out
so far, so a client that waits on its returned images after a movie is
still released when it stops the decoder.
EDEN_NX2_VDEC_EOS_RELEASE_NOW=1 restores the old immediate completion;
EDEN_NX2_VDEC_TRACE=1 logs every decoder call.

Tested on Bananza: the post-breakout cutscene movie ends and gameplay
continues (mining tunnel). Mario Kart World not retested.

Assisted-by: Claude (Anthropic) for investigation and code.
Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;
(cherry picked from commit 0f8eaa54be5bff351de7c9a80cc06a4b3453bc76)
(cherry picked from commit 8ed051843a33a5dec086d1ec6985798c8b336a6a)
</content>
</entry>
<entry>
<title>nx2: vdecsvc refreshes the GPU copy of each decoded frame (Yoshi demo)</title>
<updated>2026-11-02T23:55:03+00:00</updated>
<author>
<name>rdenno</name>
<email>rhysdenno@gmail.com</email>
</author>
<published>2026-10-31T18:43:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=3ffa971337144b32f88f12260362f5cf1cec8623'/>
<id>urn:sha1:3ffa971337144b32f88f12260362f5cf1cec8623</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
(cherry picked from commit 144b193c841a4b291e5eca065c94cbe82136a4b1)
</content>
</entry>
<entry>
<title>nx2: vdecsvc picks H.264 when the configure carries no codec name and the stream is H.264 (Yoshi demo)</title>
<updated>2026-11-02T23:55:03+00:00</updated>
<author>
<name>rdenno</name>
<email>rhysdenno@gmail.com</email>
</author>
<published>2026-10-31T16:14:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=701c91b402f47fdbb36d4f7c4b4bf1d0db08888b'/>
<id>urn:sha1:701c91b402f47fdbb36d4f7c4b4bf1d0db08888b</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>service: nx2:vdecsvc: handle end-of-stream without aborting</title>
<updated>2026-11-02T23:55:03+00:00</updated>
<author>
<name>Yuri Olive</name>
<email>yuriso1994@gmail.com</email>
</author>
<published>2026-10-31T18:14:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=bfd6430918ff4eda8c8c0e5fd0a927b3f64ff258'/>
<id>urn:sha1:bfd6430918ff4eda8c8c0e5fd0a927b3f64ff258</id>
<content type='text'>
- Complete pending fences immediately on release once the stream ends and no
  frames remain to be processed, preventing infinite waits in movie teardown.
- Stop re-arming m_ready-&gt;room when an end-of-stream packet arrives or the final
  frame is output, avoiding spurious wakeups and subsequent empty queue queries.
- Reset m_stream_ended when new input is submitted or on Flush/Stop.

Fixes an abort (2111-3604 / 0x1c286f) in Donkey Kong Bananza during the tutorial
transition scene when the video decoder stream ends.

Assisted-by: Gemini (vdecsvc end-of-stream fence completion and timer de-arming)
(cherry picked from commit b180df1ed77568da7c3e78dd97c0c46d84e54494)
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/nx2' into neo.ai/vibration-fix</title>
<updated>2026-11-02T23:49:36+00:00</updated>
<author>
<name>néo Luigi</name>
<email>85024393+neoluigi4123@users.noreply.github.com</email>
</author>
<published>2026-11-02T23:49:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cirakg.xyz/eglantine-cirakg/commit/?id=c84e5caf82a786f748c233e27b7f4ed9aaad9f44'/>
<id>urn:sha1:c84e5caf82a786f748c233e27b7f4ed9aaad9f44</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;

# Conflicts:
#	src/core/hle/service/hid/hid_server.cpp
#	src/core/hle/service/hid/hid_server.h
</content>
</entry>
</feed>
