<feed xmlns='http://www.w3.org/2005/Atom'>
<title>Ryujinx/src/Ryujinx.Horizon, branch master</title>
<subtitle>A backup of the Ryujinx master git branch.
</subtitle>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/'/>
<entry>
<title>Update audio renderer to REV13: Add support for compressor statistics and volume reset (#7372)</title>
<updated>2024-10-01T10:30:57+00:00</updated>
<author>
<name>gdkchan</name>
<email>gab.dark.100@gmail.com</email>
</author>
<published>2024-10-01T10:30:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/commit/?id=a2c003501371463fd1f98d2e5a7602ae19c21d7c'/>
<id>a2c003501371463fd1f98d2e5a7602ae19c21d7c</id>
<content type='text'>
* Update audio renderer to REV13: Add support for compressor statistics and volume reset

* XML docs

* Disable stats reset

* Wrong comment

* Fix more XML docs

* PR feedback</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Update audio renderer to REV13: Add support for compressor statistics and volume reset

* XML docs

* Disable stats reset

* Wrong comment

* Fix more XML docs

* PR feedback</pre>
</div>
</content>
</entry>
<entry>
<title>Unlink server sessions from multi-wait when service stops processing requests (#7072)</title>
<updated>2024-07-20T19:17:40+00:00</updated>
<author>
<name>gdkchan</name>
<email>gab.dark.100@gmail.com</email>
</author>
<published>2024-07-20T19:17:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/commit/?id=ce09450743ad36f6478af1a21b5fbff283f08e59'/>
<id>ce09450743ad36f6478af1a21b5fbff283f08e59</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add missing Buffer attribute on NGC Check method (#7051)</title>
<updated>2024-07-18T18:11:00+00:00</updated>
<author>
<name>gdkchan</name>
<email>gab.dark.100@gmail.com</email>
</author>
<published>2024-07-18T18:11:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/commit/?id=827069e78428669833f220d47f08ec557fc20278'/>
<id>827069e78428669833f220d47f08ec557fc20278</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Updating Concentus dependency to speed up Opus decoding (#6757)</title>
<updated>2024-05-20T21:38:38+00:00</updated>
<author>
<name>Logan Stromberg</name>
<email>loganstromberg@gmail.com</email>
</author>
<published>2024-05-20T21:38:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/commit/?id=c634eb4054c2e7f530307198d7cc6a20b3666d7d'/>
<id>c634eb4054c2e7f530307198d7cc6a20b3666d7d</id>
<content type='text'>
* Implementing new features in the latest Concentus library - span-in, span-out Opus decoding (so we don't have to make temporary buffer copies), returning a more precise error code from the decoder, and automatically linking the native opus library with P/invoke if supported on the current system

* Remove stub log messages and commit package upgrade to 2.1.0

* use more correct disposal pattern

* Bump to Concentus 2.1.1

* Bump to Concentus 2.1.2

* Don't bother pulling in native opus binaries from Concentus package (using ExcludeAssets).

* Fix opus MS channel count. Explicitly disable native lib probe in OpusCodecFactory.

* Bump to package 2.2.0 which has split out the native libs, as suggested.

---------

Co-authored-by: Logan Stromberg &lt;lostromb@microsoft.com&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Implementing new features in the latest Concentus library - span-in, span-out Opus decoding (so we don't have to make temporary buffer copies), returning a more precise error code from the decoder, and automatically linking the native opus library with P/invoke if supported on the current system

* Remove stub log messages and commit package upgrade to 2.1.0

* use more correct disposal pattern

* Bump to Concentus 2.1.1

* Bump to Concentus 2.1.2

* Don't bother pulling in native opus binaries from Concentus package (using ExcludeAssets).

* Fix opus MS channel count. Explicitly disable native lib probe in OpusCodecFactory.

* Bump to package 2.2.0 which has split out the native libs, as suggested.

---------

Co-authored-by: Logan Stromberg &lt;lostromb@microsoft.com&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>Pin audio renderer update output buffers (#6633)</title>
<updated>2024-04-08T23:26:47+00:00</updated>
<author>
<name>gdkchan</name>
<email>gab.dark.100@gmail.com</email>
</author>
<published>2024-04-08T23:26:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/commit/?id=7a971edb577c64b178ef7a82de3e9e34ba74755c'/>
<id>7a971edb577c64b178ef7a82de3e9e34ba74755c</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Audio rendering: reduce memory allocations (#6604)</title>
<updated>2024-04-07T21:07:32+00:00</updated>
<author>
<name>jhorv</name>
<email>38920027+jhorv@users.noreply.github.com</email>
</author>
<published>2024-04-07T21:07:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/commit/?id=ead9a251418bb2402ffa19ece089406b0678544e'/>
<id>ead9a251418bb2402ffa19ece089406b0678544e</id>
<content type='text'>
* - WritableRegion: enable wrapping IMemoryOwner&lt;byte&gt;
- IVirtualMemoryManager impls of GetWritableRegion() use pooled memory when region is non-contiguous.
- IVirtualMemoryManager: add GetReadOnlySequence() and impls
- ByteMemoryPool: add new method RentCopy()
- ByteMemoryPool: make class static, remove ctor and singleton field from earlier impl

* - BytesReadOnlySequenceSegment: move from Ryujinx.Common.Memory to Ryujinx.Memory
- BytesReadOnlySequenceSegment: add IsContiguousWith() and Replace() methods
- VirtualMemoryManagerBase:
  - remove generic type parameters, instead use ulong for virtual addresses and nuint for host/physical addresses
  - implement IWritableBlock
  - add virtual GetReadOnlySequence() with coalescing of contiguous segments
  - add virtual GetSpan()
  - add virtual GetWritableRegion()
  - add abstract IsMapped()
  - add virtual MapForeign(ulong, nuint, ulong)
  - add virtual Read&lt;T&gt;()
  - add virtual Read(ulong, Span&lt;byte&gt;)
  - add virtual ReadTracked&lt;T&gt;()
  - add virtual SignalMemoryTracking()
  - add virtual Write()
  - add virtual Write&lt;T&gt;()
  - add virtual WriteUntracked()
  - add virtual WriteWithRedundancyCheck()
- VirtualMemoryManagerRefCountedBase: remove generic type parameters
- AddressSpaceManager: remove redundant methods, add required overrides
- HvMemoryManager: remove redundant methods, add required overrides, add overrides for _invalidAccessHandler handling
- MemoryManager: remove redundant methods, add required overrides, add overrides for _invalidAccessHandler handling
- MemoryManagerHostMapped: remove redundant methods, add required overrides, add overrides for _invalidAccessHandler handling
- NativeMemoryManager: add get properties for Pointer and Length
- throughout: removed invalid &lt;inheritdoc/&gt; comments

* - WritableRegion: enable wrapping IMemoryOwner&lt;byte&gt;
- IVirtualMemoryManager impls of GetWritableRegion() use pooled memory when region is non-contiguous.
- IVirtualMemoryManager: add GetReadOnlySequence() and impls
- ByteMemoryPool: add new method RentCopy()
- ByteMemoryPool: make class static, remove ctor and singleton field from earlier impl

* add PagedMemoryRange enumerator types, use them in IVirtualMemoryManager implementations to consolidate page-handling logic and add a new capability - the coalescing of pages for consolidating memory copies and segmentation.

* new: more tests for PagedMemoryRangeCoalescingEnumerator showing coalescing of contiguous segments

* make some struct properties readonly

* put braces around `foreach` bodies

* encourage inlining of some PagedMemoryRange*Enumerator members

* DynamicRingBuffer:
 - use ByteMemoryPool
 - make some methods return without locking when size/count argument = 0
 - make generic Read&lt;T&gt;()/Write&lt;T&gt;() non-generic because its only usage is as T = byte
 - change Read(byte[]...) to Read(Span&lt;byte&gt;...)
 - change Write(byte[]...) to Write(Span&lt;byte&gt;...)

* change IAudioRenderer.RequestUpdate() to take a ReadOnlySequence&lt;byte&gt;, enabling zero-copy audio rendering

* HipcGenerator: support ReadOnlySequence&lt;byte&gt; as IPC method parameter

* change IAudioRenderer/AudioRenderer RequestUpdate* methods to take input as ReadOnlySequence&lt;byte&gt;

* MemoryManagerHostTracked: use rented memory when contiguous in `GetWritableRegion()`

* rebase cleanup

* dotnet format fixes

* format and comment fixes

* format long parameter list - take 2

* - add support to HipcGenerator for buffers of type `Memory&lt;byte&gt;`
- change `AudioRenderer` `RequestUpdate()` and `RequestUpdateAuto()` to use Memory&lt;byte&gt; for output buffers, removing another memory block allocation/copy

* SplitterContext `UpdateState()` and `UpdateData()` smooth out advance/rewind logic, only rewind if magic is invalid

* DynamicRingBuffer.Write(): change Span&lt;byte&gt; to ReadOnlySpan&lt;byte&gt;</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* - WritableRegion: enable wrapping IMemoryOwner&lt;byte&gt;
- IVirtualMemoryManager impls of GetWritableRegion() use pooled memory when region is non-contiguous.
- IVirtualMemoryManager: add GetReadOnlySequence() and impls
- ByteMemoryPool: add new method RentCopy()
- ByteMemoryPool: make class static, remove ctor and singleton field from earlier impl

* - BytesReadOnlySequenceSegment: move from Ryujinx.Common.Memory to Ryujinx.Memory
- BytesReadOnlySequenceSegment: add IsContiguousWith() and Replace() methods
- VirtualMemoryManagerBase:
  - remove generic type parameters, instead use ulong for virtual addresses and nuint for host/physical addresses
  - implement IWritableBlock
  - add virtual GetReadOnlySequence() with coalescing of contiguous segments
  - add virtual GetSpan()
  - add virtual GetWritableRegion()
  - add abstract IsMapped()
  - add virtual MapForeign(ulong, nuint, ulong)
  - add virtual Read&lt;T&gt;()
  - add virtual Read(ulong, Span&lt;byte&gt;)
  - add virtual ReadTracked&lt;T&gt;()
  - add virtual SignalMemoryTracking()
  - add virtual Write()
  - add virtual Write&lt;T&gt;()
  - add virtual WriteUntracked()
  - add virtual WriteWithRedundancyCheck()
- VirtualMemoryManagerRefCountedBase: remove generic type parameters
- AddressSpaceManager: remove redundant methods, add required overrides
- HvMemoryManager: remove redundant methods, add required overrides, add overrides for _invalidAccessHandler handling
- MemoryManager: remove redundant methods, add required overrides, add overrides for _invalidAccessHandler handling
- MemoryManagerHostMapped: remove redundant methods, add required overrides, add overrides for _invalidAccessHandler handling
- NativeMemoryManager: add get properties for Pointer and Length
- throughout: removed invalid &lt;inheritdoc/&gt; comments

* - WritableRegion: enable wrapping IMemoryOwner&lt;byte&gt;
- IVirtualMemoryManager impls of GetWritableRegion() use pooled memory when region is non-contiguous.
- IVirtualMemoryManager: add GetReadOnlySequence() and impls
- ByteMemoryPool: add new method RentCopy()
- ByteMemoryPool: make class static, remove ctor and singleton field from earlier impl

* add PagedMemoryRange enumerator types, use them in IVirtualMemoryManager implementations to consolidate page-handling logic and add a new capability - the coalescing of pages for consolidating memory copies and segmentation.

* new: more tests for PagedMemoryRangeCoalescingEnumerator showing coalescing of contiguous segments

* make some struct properties readonly

* put braces around `foreach` bodies

* encourage inlining of some PagedMemoryRange*Enumerator members

* DynamicRingBuffer:
 - use ByteMemoryPool
 - make some methods return without locking when size/count argument = 0
 - make generic Read&lt;T&gt;()/Write&lt;T&gt;() non-generic because its only usage is as T = byte
 - change Read(byte[]...) to Read(Span&lt;byte&gt;...)
 - change Write(byte[]...) to Write(Span&lt;byte&gt;...)

* change IAudioRenderer.RequestUpdate() to take a ReadOnlySequence&lt;byte&gt;, enabling zero-copy audio rendering

* HipcGenerator: support ReadOnlySequence&lt;byte&gt; as IPC method parameter

* change IAudioRenderer/AudioRenderer RequestUpdate* methods to take input as ReadOnlySequence&lt;byte&gt;

* MemoryManagerHostTracked: use rented memory when contiguous in `GetWritableRegion()`

* rebase cleanup

* dotnet format fixes

* format and comment fixes

* format long parameter list - take 2

* - add support to HipcGenerator for buffers of type `Memory&lt;byte&gt;`
- change `AudioRenderer` `RequestUpdate()` and `RequestUpdateAuto()` to use Memory&lt;byte&gt; for output buffers, removing another memory block allocation/copy

* SplitterContext `UpdateState()` and `UpdateData()` smooth out advance/rewind logic, only rewind if magic is invalid

* DynamicRingBuffer.Write(): change Span&lt;byte&gt; to ReadOnlySpan&lt;byte&gt;</pre>
</div>
</content>
</entry>
<entry>
<title>ts: Migrate service to Horizon project (#6514)</title>
<updated>2024-04-05T18:45:43+00:00</updated>
<author>
<name>Ac_K</name>
<email>Acoustik666@gmail.com</email>
</author>
<published>2024-04-05T18:45:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/commit/?id=6d28b643126ee5de476a89f3ff94b5cc3ead3970'/>
<id>6d28b643126ee5de476a89f3ff94b5cc3ead3970</id>
<content type='text'>
* ts: Migrate service to Horizon project

This PR migrate the `ts` service (stored in `ptm`) to the Horizon project:
- It stubs all known IPCs.
- IpcServer consts are checked by RE.

Closes #6480

* Fix args</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* ts: Migrate service to Horizon project

This PR migrate the `ts` service (stored in `ptm`) to the Horizon project:
- It stubs all known IPCs.
- IpcServer consts are checked by RE.

Closes #6480

* Fix args</pre>
</div>
</content>
</entry>
<entry>
<title>IPC code gen improvements (#6352)</title>
<updated>2024-02-24T00:12:24+00:00</updated>
<author>
<name>jhorv</name>
<email>38920027+jhorv@users.noreply.github.com</email>
</author>
<published>2024-02-24T00:12:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/commit/?id=08384ee5a8d7466bf83fbff6d7c9d1076e838dba'/>
<id>08384ee5a8d7466bf83fbff6d7c9d1076e838dba</id>
<content type='text'>
* HipcGenerator: skip do-nothing call to MemoryMarshal.Cast&lt;byte, byte&gt;() in generated code

* HipcGenerator: fix method name typos

* HipcGenerator: make generated methods use stackalloc for `isBufferMapAlias` bool array

* HipcGenerator: make generated GetCommandHandlers() method return a FrozenDictionary&lt;int, CommandHandler&gt;

* HipcGenerator: return `FrozenDictionary&lt;,&gt;.Empty` when there are no command implementations, otherwise create `FrozenDictionary` from a `IEnumerable&lt;KeyValuePair&lt;,&gt;&gt;`` instead of a `Dictionary&lt;,&gt;``</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* HipcGenerator: skip do-nothing call to MemoryMarshal.Cast&lt;byte, byte&gt;() in generated code

* HipcGenerator: fix method name typos

* HipcGenerator: make generated methods use stackalloc for `isBufferMapAlias` bool array

* HipcGenerator: make generated GetCommandHandlers() method return a FrozenDictionary&lt;int, CommandHandler&gt;

* HipcGenerator: return `FrozenDictionary&lt;,&gt;.Empty` when there are no command implementations, otherwise create `FrozenDictionary` from a `IEnumerable&lt;KeyValuePair&lt;,&gt;&gt;`` instead of a `Dictionary&lt;,&gt;``</pre>
</div>
</content>
</entry>
<entry>
<title>Migrate Audio service to new IPC (#6285)</title>
<updated>2024-02-22T19:58:33+00:00</updated>
<author>
<name>gdkchan</name>
<email>gab.dark.100@gmail.com</email>
</author>
<published>2024-02-22T19:58:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/commit/?id=d4d0a48bfe89d6e8e12ce16829bb2c440b56007c'/>
<id>d4d0a48bfe89d6e8e12ce16829bb2c440b56007c</id>
<content type='text'>
* Migrate audren to new IPC

* Migrate audout

* Migrate audin

* Migrate hwopus

* Bye bye old audio service

* Switch volume control to IHardwareDeviceDriver

* Somewhat unrelated changes

* Remove Concentus reference from HLE

* Implement OpenAudioRendererForManualExecution

* Remove SetVolume/GetVolume methods that are not necessary

* Remove SetVolume/GetVolume methods that are not necessary (2)

* Fix incorrect volume update

* PR feedback

* PR feedback

* Stub audrec

* Init outParameter

* Make FinalOutputRecorderParameter/Internal readonly

* Make FinalOutputRecorder IDisposable

* Fix HardwareOpusDecoderManager parameter buffers

* Opus work buffer size and error handling improvements

* Add AudioInProtocolName enum

* Fix potential divisions by zero</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Migrate audren to new IPC

* Migrate audout

* Migrate audin

* Migrate hwopus

* Bye bye old audio service

* Switch volume control to IHardwareDeviceDriver

* Somewhat unrelated changes

* Remove Concentus reference from HLE

* Implement OpenAudioRendererForManualExecution

* Remove SetVolume/GetVolume methods that are not necessary

* Remove SetVolume/GetVolume methods that are not necessary (2)

* Fix incorrect volume update

* PR feedback

* PR feedback

* Stub audrec

* Init outParameter

* Make FinalOutputRecorderParameter/Internal readonly

* Make FinalOutputRecorder IDisposable

* Fix HardwareOpusDecoderManager parameter buffers

* Opus work buffer size and error handling improvements

* Add AudioInProtocolName enum

* Fix potential divisions by zero</pre>
</div>
</content>
</entry>
<entry>
<title>Fix exception when trying to read output pointer buffer size (#6221)</title>
<updated>2024-01-30T00:19:39+00:00</updated>
<author>
<name>gdkchan</name>
<email>gab.dark.100@gmail.com</email>
</author>
<published>2024-01-30T00:19:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.benis.co.uk/Ryujinx/commit/?id=ccbbaddbcb6a0eb0cee0d2e2482546611237bee3'/>
<id>ccbbaddbcb6a0eb0cee0d2e2482546611237bee3</id>
<content type='text'>
* Fix exception when trying to read output pointer buffer size

* Better name</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Fix exception when trying to read output pointer buffer size

* Better name</pre>
</div>
</content>
</entry>
</feed>
