diff --git a/.github/labeler.yml b/.github/labeler.yml
index 871f9945f..ac3c77288 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -32,7 +32,7 @@ kernel:
infra:
- changed-files:
- - any-glob-to-any-file: ['.github/**', 'distribution/**', 'Directory.Packages.props']
+ - any-glob-to-any-file: ['.github/**', 'distribution/**', 'Directory.Packages.props', 'src/Ryujinx.BuildValidationTasks/**']
documentation:
- changed-files:
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 21dc3eb0b..aeb12a575 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -64,14 +64,9 @@ jobs:
run: dotnet publish -c "${{ matrix.configuration }}" -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ env.RYUJINX_BASE_VERSION }}" -p:DebugType=embedded -p:SourceRevisionId="${{ steps.git_short_hash.outputs.result }}" -p:ExtraDefineConstants=DISABLE_UPDATER src/Ryujinx --self-contained
if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
- - name: Publish Ryujinx.Headless.SDL2
- run: dotnet publish -c "${{ matrix.configuration }}" -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless -p:Version="${{ env.RYUJINX_BASE_VERSION }}" -p:DebugType=embedded -p:SourceRevisionId="${{ steps.git_short_hash.outputs.result }}" -p:ExtraDefineConstants=DISABLE_UPDATER src/Ryujinx.Headless.SDL2 --self-contained
- if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
-
- name: Set executable bit
run: |
chmod +x ./publish/Ryujinx ./publish/Ryujinx.sh
- chmod +x ./publish_sdl2_headless/Ryujinx.Headless.SDL2 ./publish_sdl2_headless/Ryujinx.sh
if: github.event_name == 'pull_request' && matrix.platform.os == 'ubuntu-latest'
- name: Build AppImage
@@ -119,13 +114,6 @@ jobs:
name: ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }}-AppImage
path: publish_appimage
- - name: Upload Ryujinx.Headless.SDL2 artifact
- uses: actions/upload-artifact@v4
- with:
- name: nogui-ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-${{ matrix.platform.zip_os_name }}
- path: publish_sdl2_headless
- if: github.event_name == 'pull_request' && matrix.platform.os != 'macos-13'
-
build_macos:
name: macOS Universal (${{ matrix.configuration }})
runs-on: ubuntu-latest
@@ -171,20 +159,9 @@ jobs:
run: |
./distribution/macos/create_macos_build_ava.sh . publish_tmp publish ./distribution/macos/entitlements.xml "${{ env.RYUJINX_BASE_VERSION }}" "${{ steps.git_short_hash.outputs.result }}" "${{ matrix.configuration }}" "-p:ExtraDefineConstants=DISABLE_UPDATER"
- - name: Publish macOS Ryujinx.Headless.SDL2
- run: |
- ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ env.RYUJINX_BASE_VERSION }}" "${{ steps.git_short_hash.outputs.result }}" "${{ matrix.configuration }}" "-p:ExtraDefineConstants=DISABLE_UPDATER"
-
- name: Upload Ryujinx artifact
uses: actions/upload-artifact@v4
with:
name: ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-macos_universal
path: "publish/*.tar.gz"
if: github.event_name == 'pull_request'
-
- - name: Upload Ryujinx.Headless.SDL2 artifact
- uses: actions/upload-artifact@v4
- with:
- name: nogui-ryujinx-${{ matrix.configuration }}-${{ env.RYUJINX_BASE_VERSION }}+${{ steps.git_short_hash.outputs.result }}-macos_universal
- path: "publish_headless/*.tar.gz"
- if: github.event_name == 'pull_request'
diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml
index baf8815a7..d93d4fbed 100644
--- a/.github/workflows/canary.yml
+++ b/.github/workflows/canary.yml
@@ -21,9 +21,9 @@ env:
DOTNET_CLI_TELEMETRY_OPTOUT: 1
RYUJINX_BASE_VERSION: "1.2"
RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "canary"
- RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "GabCoolDude"
+ RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Ryubing"
RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO: "Ryujinx"
- RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Ryujinx-Canary"
+ RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Canary-Releases"
RELEASE: 1
jobs:
@@ -43,8 +43,8 @@ jobs:
with:
script: |
github.rest.git.createRef({
- owner: context.repo.owner,
- repo: context.repo.repo,
+ owner: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}",
+ repo: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}",
ref: 'refs/tags/Canary-${{ steps.version_info.outputs.build_version }}',
sha: context.sha
})
@@ -61,10 +61,10 @@ jobs:
| Platform | Artifact |
|--|--|
- | Windows 64 bit | [Canary Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
- | Linux 64 bit | [Canary Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
- | Linux arm 64 bit | [Canary Linux arm Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
- | macOS | [Canary macOS artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
+ | Windows 64-bit | [Canary Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
+ | Linux 64-bit | [Canary Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
+ | Linux ARM 64-bit | [Canary Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
+ | macOS | [Canary macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
**Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }}
omitBodyDuringUpdate: true
@@ -108,6 +108,7 @@ jobs:
sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
sed -r --in-place 's/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO\%\%/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/g;' src/Ryujinx.Common/ReleaseInformation.cs
sed -r --in-place 's/\%\%RYUJINX_CONFIG_FILE_NAME\%\%/Config\.json/g;' src/Ryujinx.Common/ReleaseInformation.cs
+ sed -r --in-place '/^Name=Ryujinx$/s/Name=Ryujinx/Name=Ryujinx-Canary/' distribution/linux/Ryujinx.desktop
shell: bash
- name: Create output dir
@@ -115,97 +116,83 @@ jobs:
- name: Publish
run: |
- dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_ava/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained
- dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless/publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained
+ dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained
- name: Packing Windows builds
if: matrix.platform.os == 'windows-latest'
run: |
- pushd publish_ava
- rm publish/libarmeilleure-jitsupport.dylib
- 7z a ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish
- popd
-
- pushd publish_sdl2_headless
- rm publish/libarmeilleure-jitsupport.dylib
- 7z a ../release_output/nogui-ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip publish
+ pushd publish
+ rm libarmeilleure-jitsupport.dylib
+ 7z a ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish
popd
shell: bash
- name: Packing Linux builds
if: matrix.platform.os == 'ubuntu-latest'
run: |
- pushd publish_ava
- rm publish/libarmeilleure-jitsupport.dylib
- chmod +x publish/Ryujinx.sh publish/Ryujinx
- tar -czvf ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish
- popd
-
- pushd publish_sdl2_headless
- rm publish/libarmeilleure-jitsupport.dylib
- chmod +x publish/Ryujinx.sh publish/Ryujinx.Headless.SDL2
- tar -czvf ../release_output/nogui-ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz publish
+ pushd publish
+ rm libarmeilleure-jitsupport.dylib
+ chmod +x Ryujinx.sh Ryujinx
+ tar -czvf ../release_output/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish
popd
shell: bash
- #- name: Build AppImage (Linux)
- # if: matrix.platform.os == 'ubuntu-latest'
- # run: |
- # BUILD_VERSION="${{ steps.version_info.outputs.build_version }}"
- # PLATFORM_NAME="${{ matrix.platform.name }}"
+ - name: Build AppImage (Linux)
+ if: matrix.platform.os == 'ubuntu-latest'
+ run: |
+ BUILD_VERSION="${{ steps.version_info.outputs.build_version }}"
+ PLATFORM_NAME="${{ matrix.platform.name }}"
- # sudo apt install -y zsync desktop-file-utils appstream
+ sudo apt install -y zsync desktop-file-utils appstream
- # mkdir -p tools
- # export PATH="$PATH:$(readlink -f tools)"
+ mkdir -p tools
+ export PATH="$PATH:$(readlink -f tools)"
# Setup appimagetool
- # wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
- # chmod +x tools/appimagetool
- # chmod +x distribution/linux/appimage/build-appimage.sh
+ wget -q -O tools/appimagetool "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage"
+ chmod +x tools/appimagetool
+ chmod +x distribution/linux/appimage/build-appimage.sh
# Explicitly set $ARCH for appimagetool ($ARCH_NAME is for the file name)
- # if [ "$PLATFORM_NAME" = "linux-x64" ]; then
- # ARCH_NAME=x64
- # export ARCH=x86_64
- # elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then
- # ARCH_NAME=arm64
- # export ARCH=aarch64
- # else
- # echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME""
- # exit 1
- # fi
+ if [ "$PLATFORM_NAME" = "linux-x64" ]; then
+ ARCH_NAME=x64
+ export ARCH=x86_64
+ elif [ "$PLATFORM_NAME" = "linux-arm64" ]; then
+ ARCH_NAME=arm64
+ export ARCH=aarch64
+ else
+ echo "Unexpected PLATFORM_NAME "$PLATFORM_NAME""
+ exit 1
+ fi
- # export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|${{ github.event.repository.name }}|latest|*-$ARCH_NAME.AppImage.zsync"
- # BUILDDIR=publish_ava OUTDIR=publish_ava_appimage distribution/linux/appimage/build-appimage.sh
+ export UFLAG="gh-releases-zsync|${{ github.repository_owner }}|Canary-Releases|latest|*-$ARCH_NAME.AppImage.zsync"
+ BUILDDIR=publish OUTDIR=publish_appimage distribution/linux/appimage/build-appimage.sh
- # Add to release output
- # pushd publish_ava_appimage
- # mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage
- # mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync
- # popd
- # shell: bash
+ pushd publish_appimage
+ mv Ryujinx.AppImage ../release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage
+ mv Ryujinx.AppImage.zsync ../release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync
+ popd
+ shell: bash
- name: Pushing new release
uses: ncipollo/release-action@v1
with:
name: ${{ steps.version_info.outputs.build_version }}
- artifacts: "release_output/*.tar.gz,release_output/*.zip"
- #artifacts: "release_output/*.tar.gz,release_output/*.zip/*AppImage*"
+ artifacts: "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*"
tag: ${{ steps.version_info.outputs.build_version }}
body: |
# Canary builds:
- These builds are experimental and may sometimes not work, use [regular builds](https://github.com/GreemDev/Ryujinx/releases/latest) instead if that sounds like something you don't want to deal with.
-
+ These builds are experimental and may sometimes not work, use [regular builds](https://github.com/${{ github.repository }}/releases/latest) instead if that sounds like something you don't want to deal with.
+
| Platform | Artifact |
|--|--|
- | Windows 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_x64.zip |
- | Linux 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz |
- | Linux arm 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz |
- | Macos | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz |
+ | Windows 64-bit | [Canary Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
+ | Linux 64-bit | [Canary Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
+ | Linux ARM 64-bit | [Canary Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
+ | macOS | [Canary macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
- "**Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }}"
+ **Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_SOURCE_REPO }}/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }}
omitBodyDuringUpdate: true
allowUpdates: true
replacesArtifacts: true
@@ -223,11 +210,11 @@ jobs:
with:
global-json-file: global.json
- - name: Setup LLVM 17
+ - name: Setup LLVM 15
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
- sudo ./llvm.sh 17
+ sudo ./llvm.sh 15
- name: Install rcodesign
run: |
@@ -262,29 +249,13 @@ jobs:
run: |
./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish_ava ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 1
- - name: Publish macOS Ryujinx.Headless.SDL2
- run: |
- ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 1
-
- name: Pushing new release
uses: ncipollo/release-action@v1
with:
name: "Canary ${{ steps.version_info.outputs.build_version }}"
- artifacts: "publish_ava/*.tar.gz, publish_headless/*.tar.gz"
+ artifacts: "publish_ava/*.tar.gz"
tag: ${{ steps.version_info.outputs.build_version }}
- body: |
- # Canary builds:
-
- These builds are experimental and may sometimes not work, use [regular builds](https://github.com/GreemDev/Ryujinx/releases/latest) instead if that sounds like something you don't want to deal with.
-
- | Platform | Artifact |
- |--|--|
- | Windows 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_x64.zip |
- | Linux 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz |
- | Linux arm 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz |
- | Macos | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz |
-
- "**Full Changelog**: https://github.com/${{ github.repository }}/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }}"
+ body: ""
omitBodyDuringUpdate: true
allowUpdates: true
replacesArtifacts: true
diff --git a/.github/workflows/nightly_pr_comment.yml b/.github/workflows/nightly_pr_comment.yml
index 85a6e2de4..24d23d98b 100644
--- a/.github/workflows/nightly_pr_comment.yml
+++ b/.github/workflows/nightly_pr_comment.yml
@@ -38,20 +38,16 @@ jobs:
return core.error(`No artifacts found`);
}
let body = `Download the artifacts for this pull request:\n`;
- let hidden_headless_artifacts = `\n\n GUI-less
\n`;
let hidden_debug_artifacts = `\n\n Only for Developers
\n`;
for (const art of artifacts) {
- if(art.name.includes('Debug')) {
- hidden_debug_artifacts += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`;
- } else if(art.name.includes('nogui-ryujinx')) {
- hidden_headless_artifacts += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`;
+ const url = `https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip`;
+ if (art.name.includes('Debug')) {
+ hidden_debug_artifacts += `\n* [${art.name}](${url})`;
} else {
- body += `\n* [${art.name}](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`;
+ body += `\n* [${art.name}](${url})`;
}
}
- hidden_headless_artifacts += `\n `;
hidden_debug_artifacts += `\n `;
- body += hidden_headless_artifacts;
body += hidden_debug_artifacts;
const {data: comments} = await github.rest.issues.listComments({repo, owner, issue_number});
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 815321dfe..ab39634f7 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -3,16 +3,6 @@ name: Release job
on:
workflow_dispatch:
inputs: {}
- push:
- branches: [ release ]
- paths-ignore:
- - '.github/**'
- - 'docs/**'
- - 'assets/**'
- - '*.yml'
- - '*.json'
- - '*.config'
- - '*.md'
concurrency: release
@@ -21,7 +11,7 @@ env:
DOTNET_CLI_TELEMETRY_OPTOUT: 1
RYUJINX_BASE_VERSION: "1.2"
RYUJINX_TARGET_RELEASE_CHANNEL_NAME: "release"
- RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "GreemDev"
+ RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: "Ryubing"
RYUJINX_TARGET_RELEASE_CHANNEL_REPO: "Ryujinx"
RELEASE: 1
@@ -42,8 +32,8 @@ jobs:
with:
script: |
github.rest.git.createRef({
- owner: context.repo.owner,
- repo: context.repo.repo,
+ owner: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}",
+ repo: "${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}",
ref: 'refs/tags/${{ steps.version_info.outputs.build_version }}',
sha: context.sha
})
@@ -54,13 +44,13 @@ jobs:
name: ${{ steps.version_info.outputs.build_version }}
tag: ${{ steps.version_info.outputs.build_version }}
body: |
- # Regular builds:
+ # Stable builds:
| Platform | Artifact |
|--|--|
- | Windows 64 bit | [Release Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
- | Linux 64 bit | [Release Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
- | Linux arm 64 bit | [Release Linux arm Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
- | macOS | [Release macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
+ | Windows 64-bit | [Stable Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
+ | Linux 64-bit | [Stable Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
+ | Linux ARM 64-bit | [Stable Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
+ | macOS | [Stable macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
**Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}
omitBodyDuringUpdate: true
@@ -112,7 +102,6 @@ jobs:
- name: Publish
run: |
dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx --self-contained
- dotnet publish -c Release -r "${{ matrix.platform.name }}" -o ./publish_sdl2_headless -p:Version="${{ steps.version_info.outputs.build_version }}" -p:SourceRevisionId="${{ steps.version_info.outputs.git_short_hash }}" -p:DebugType=embedded src/Ryujinx.Headless.SDL2 --self-contained
- name: Packing Windows builds
if: matrix.platform.os == 'windows-latest'
@@ -121,10 +110,14 @@ jobs:
rm libarmeilleure-jitsupport.dylib
7z a ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish
popd
+ shell: bash
- pushd publish_sdl2_headless
- rm libarmeilleure-jitsupport.dylib
- 7z a ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.zip ../publish
+ - name: Packing Linux builds
+ if: matrix.platform.os == 'ubuntu-latest'
+ run: |
+ pushd publish
+ chmod +x Ryujinx.sh Ryujinx
+ tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish
popd
shell: bash
@@ -163,20 +156,6 @@ jobs:
mv Ryujinx.AppImage ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage
mv Ryujinx.AppImage.zsync ../release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync
popd
- shell: bash
-
- - name: Packing Linux builds
- if: matrix.platform.os == 'ubuntu-latest'
- run: |
- pushd publish
- chmod +x Ryujinx.sh Ryujinx
- tar -czvf ../release_output/ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish
- popd
-
- pushd publish_sdl2_headless
- chmod +x Ryujinx.sh Ryujinx.Headless.SDL2
- tar -czvf ../release_output/nogui-ryujinx-${{ steps.version_info.outputs.build_version }}-${{ matrix.platform.zip_os_name }}.tar.gz ../publish
- popd
shell: bash
- name: Pushing new release
@@ -186,15 +165,15 @@ jobs:
artifacts: "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*"
tag: ${{ steps.version_info.outputs.build_version }}
body: |
- # Regular builds:
+ # Stable builds:
| Platform | Artifact |
|--|--|
- | Windows 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip |
- | Linux 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz |
- | Linux arm 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz |
- | Macos | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz |
-
- "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}"
+ | Windows 64-bit | [Stable Windows Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
+ | Linux 64-bit | [Stable Linux Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
+ | Linux ARM 64-bit | [Stable Linux ARM Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
+ | macOS | [Stable macOS Artifact](https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
+
+ **Full Changelog**: https://github.com/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_OWNER }}/${{ env.RYUJINX_TARGET_RELEASE_CHANNEL_REPO }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}
omitBodyDuringUpdate: true
allowUpdates: true
replacesArtifacts: true
@@ -251,26 +230,13 @@ jobs:
run: |
./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 0
- - name: Publish macOS Ryujinx.Headless.SDL2
- run: |
- ./distribution/macos/create_macos_build_headless.sh . publish_tmp_headless publish_headless ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 0
-
- name: Pushing new release
uses: ncipollo/release-action@v1
with:
name: ${{ steps.version_info.outputs.build_version }}
- artifacts: "publish/*.tar.gz, publish_headless/*.tar.gz"
+ artifacts: "publish/*.tar.gz"
tag: ${{ steps.version_info.outputs.build_version }}
- body: |
- # Regular builds:
- | Platform | Artifact |
- |--|--|
- | Windows 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip |
- | Linux 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz |
- | Linux arm 64 bit | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz |
- | Macos | https://github.com/${{ github.repository }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz |
-
- "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}"
+ body: ""
omitBodyDuringUpdate: true
allowUpdates: true
replacesArtifacts: true
diff --git a/COMPILING.md b/COMPILING.md
index 20a2eb7ff..64f7e4e1b 100644
--- a/COMPILING.md
+++ b/COMPILING.md
@@ -5,7 +5,7 @@ If you wish to build the emulator yourself, follow these steps:
### Step 1
-Install the [.NET 8.0 (or higher) SDK](https://dotnet.microsoft.com/download/dotnet/8.0).
+Install the [.NET 9.0 (or higher) SDK](https://dotnet.microsoft.com/download/dotnet/9.0).
Make sure your SDK version is higher or equal to the required version specified in [global.json](global.json).
### Step 2
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 000000000..d7a2ac1f2
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,6 @@
+
+
+ net9.0
+ latest
+
+
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 7059af0e0..a480d3d29 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -10,10 +10,14 @@
+
+
+
+
@@ -38,9 +42,11 @@
-
+
+
+
@@ -48,8 +54,8 @@
-
-
+
+
diff --git a/README.md b/README.md
index f5bd87c7f..1532245f2 100644
--- a/README.md
+++ b/README.md
@@ -54,7 +54,7 @@ failing to meet this requirement may result in a poor gameplay experience or une
## Latest build
-Stable builds are made every so often onto a separate "release" branch that then gets put into the releases you know and love.
+Stable builds are made every so often onto a separate "release" branch that then gets put into the releases you know and love.
These stable builds exist so that the end user can get a more **enjoyable and stable experience**.
You can find the latest stable release [here](https://github.com/GreemDev/Ryujinx/releases/latest).
@@ -82,7 +82,7 @@ If you are planning to contribute or just want to learn more about this project
It translates the ARM code to a custom IR, performs a few optimizations, and turns that into x86 code.
There are three memory manager options available depending on the user's preference, leveraging both software-based (slower) and host-mapped modes (much faster).
The fastest option (host, unchecked) is set by default.
- Ryujinx also features an optional Profiled Persistent Translation Cache, which essentially caches translated functions so that they do not need to be translated every time the game loads.
+ Ryujinx also features an optional Profiled Persistent Translation Cache, which essentially caches translated functions so that they do not need to be translated every time the game loads.
The net result is a significant reduction in load times (the amount of time between launching a game and arriving at the title screen) for nearly every game.
NOTE: This feature is enabled by default in the Options menu > System tab.
You must launch the game at least twice to the title screen or beyond before performance improvements are unlocked on the third launch!
diff --git a/Ryujinx.sln b/Ryujinx.sln
index d661b903c..9e197e85f 100644
--- a/Ryujinx.sln
+++ b/Ryujinx.sln
@@ -57,14 +57,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.SDL2.Common", "src\
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL2", "src\Ryujinx.Audio.Backends.SDL2\Ryujinx.Audio.Backends.SDL2.csproj", "{D99A395A-8569-4DB0-B336-900647890052}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Headless.SDL2", "src\Ryujinx.Headless.SDL2\Ryujinx.Headless.SDL2.csproj", "{390DC343-5CB4-4C79-A5DD-E3ED235E4C49}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmpeg", "src\Ryujinx.Graphics.Nvdec.FFmpeg\Ryujinx.Graphics.Nvdec.FFmpeg.csproj", "{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.Common", "src\Ryujinx.UI.Common\Ryujinx.UI.Common.csproj", "{BA161CA0-CD65-4E6E-B644-51C8D1E542DC}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vulkan", "src\Ryujinx.Graphics.Vulkan\Ryujinx.Graphics.Vulkan.csproj", "{D4D09B08-D580-4D69-B886-C35D2853F6C8}"
@@ -81,13 +77,22 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Gene
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal", "src\Ryujinx.Graphics.Metal\Ryujinx.Graphics.Metal.csproj", "{C08931FA-1191-417A-864F-3882D93E683B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} = {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal.SharpMetalExtensions", "src/Ryujinx.Graphics.Metal.SharpMetalExtensions\Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj", "{81EA598C-DBA1-40B0-8DA4-4796B78F2037}"
+EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
+ .github\workflows\build.yml = .github\workflows\build.yml
+ .github\workflows\canary.yml = .github\workflows\canary.yml
Directory.Packages.props = Directory.Packages.props
- .github/workflows/release.yml = .github/workflows/release.yml
- .github/workflows/canary.yml = .github/workflows/canary.yml
- .github/workflows/build.yml = .github/workflows/build.yml
+ .github\workflows\release.yml = .github\workflows\release.yml
EndProjectSection
EndProject
Global
@@ -204,10 +209,6 @@ Global
{D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.Build.0 = Release|Any CPU
- {390DC343-5CB4-4C79-A5DD-E3ED235E4C49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {390DC343-5CB4-4C79-A5DD-E3ED235E4C49}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {390DC343-5CB4-4C79-A5DD-E3ED235E4C49}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {390DC343-5CB4-4C79-A5DD-E3ED235E4C49}.Release|Any CPU.Build.0 = Release|Any CPU
{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -216,10 +217,6 @@ Global
{7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.Build.0 = Release|Any CPU
- {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Release|Any CPU.Build.0 = Release|Any CPU
{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -252,6 +249,16 @@ Global
{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/distribution/linux/appimage/build-appimage.sh b/distribution/linux/appimage/build-appimage.sh
index 5c32d78a8..a9de4866b 100755
--- a/distribution/linux/appimage/build-appimage.sh
+++ b/distribution/linux/appimage/build-appimage.sh
@@ -6,14 +6,14 @@ cd "$ROOTDIR"
BUILDDIR=${BUILDDIR:-publish}
OUTDIR=${OUTDIR:-publish_appimage}
-UFLAG=${UFLAG:-"gh-releases-zsync|GreemDev|ryujinx|latest|*-x64.AppImage.zsync"}
+UFLAG=${UFLAG:-"gh-releases-zsync|Ryubing|ryujinx|latest|*-x64.AppImage.zsync"}
rm -rf AppDir
mkdir -p AppDir/usr/bin
cp distribution/linux/Ryujinx.desktop AppDir/Ryujinx.desktop
cp distribution/linux/appimage/AppRun AppDir/AppRun
-cp src/Ryujinx.UI.Common/Resources/Logo_Ryujinx.png AppDir/Ryujinx.svg
+cp distribution/misc/Logo.svg AppDir/Ryujinx.svg
cp -r "$BUILDDIR"/* AppDir/usr/bin/
diff --git a/distribution/misc/macOS.svg b/distribution/misc/macOS.svg
deleted file mode 100644
index 4bdd453a8..000000000
--- a/distribution/misc/macOS.svg
+++ /dev/null
@@ -1,61 +0,0 @@
-
diff --git a/docs/compatibility.csv b/docs/compatibility.csv
new file mode 100644
index 000000000..0158a45cb
--- /dev/null
+++ b/docs/compatibility.csv
@@ -0,0 +1,3424 @@
+"title_id","game_name","labels","status","last_updated"
+010099F00EF3E000,"-KLAUS-",nvdec,playable,2020-06-27 13:27:30
+0100BA9014A02000,".hack//G.U. Last Recode",deadlock,boots,2022-03-12 19:15:47
+010098800C4B0000,"'n Verlore Verstand",slow,ingame,2020-12-10 18:00:28
+01009A500E3DA000,"'n Verlore Verstand - Demo",,playable,2021-02-09 00:13:32
+0100A5D01174C000,"/Connection Haunted ",slow,playable,2020-12-10 18:57:14
+01001E500F7FC000,"#Funtime",,playable,2020-12-10 16:54:35
+01000E50134A4000,"#Halloween, Super Puzzles Dream",nvdec,playable,2020-12-10 20:43:58
+01004D100C510000,"#KILLALLZOMBIES",slow,playable,2020-12-16 01:50:25
+0100325012C12000,"#NoLimitFantasy, Super Puzzles Dream",nvdec,playable,2020-12-12 17:21:32
+01005D400E5C8000,"#RaceDieRun",,playable,2020-07-04 20:23:16
+01003DB011AE8000,"#womenUp, Super Puzzles Dream",,playable,2020-12-12 16:57:25
+0100D87012A14000,"#womenUp, Super Puzzles Dream Demo",nvdec,playable,2021-02-09 00:03:31
+01000320000CC000,"1-2-Switch™",services,playable,2022-02-18 14:44:03
+01004D1007926000,"10 Second Run RETURNS",gpu,ingame,2022-07-17 13:06:18
+0100DC000A472000,"10 Second Run RETURNS Demo",gpu,ingame,2021-02-09 00:17:18
+0100D82015774000,"112 Operator",nvdec,playable,2022-11-13 22:42:50
+010051E012302000,"112th Seed",,playable,2020-10-03 10:32:38
+01007F600D1B8000,"12 is Better Than 6",,playable,2021-02-22 16:10:12
+0100B1A010014000,"12 Labours of Hercules II: The Cretan Bull",cpu;32-bit;crash,nothing,2022-12-07 13:43:10
+0100A840047C2000,"12 orbits",,playable,2020-05-28 16:13:26
+01003FC01670C000,"13 Sentinels: Aegis Rim",slow,ingame,2024-06-10 20:33:38
+0100C54015002000,"13 Sentinels: Aegis Rim Demo",demo,playable,2022-04-13 14:15:48
+01007E600EEE6000,"140",,playable,2020-08-05 20:01:33
+0100B94013D28000,"16-Bit Soccer Demo",,playable,2021-02-09 00:23:07
+01005CA0099AA000,"1917 - The Alien Invasion DX",,playable,2021-01-08 22:11:16
+0100829010F4A000,"1971 Project Helios",,playable,2021-04-14 13:50:19
+0100D1000B18C000,"1979 Revolution: Black Friday",nvdec,playable,2021-02-21 21:03:43
+01007BB00FC8A000,"198X",,playable,2020-08-07 13:24:38
+010075601150A000,"1993 Shenandoah",,playable,2020-10-24 13:55:42
+0100148012550000,"1993 Shenandoah Demo",,playable,2021-02-09 00:43:43
+010096500EA94000,"2048 Battles",,playable,2020-12-12 14:21:25
+010024C0067C4000,"2064: Read Only Memories INTEGRAL",deadlock,menus,2020-05-28 16:53:58
+0100749009844000,"20XX",gpu,ingame,2023-08-14 09:41:44
+01007550131EE000,"2URVIVE",,playable,2022-11-17 13:49:37
+0100E20012886000,"2weistein – The Curse of the Red Dragon",nvdec;UE4,playable,2022-11-18 14:47:07
+0100DAC013D0A000,"30 in 1 game collection vol. 2",online-broken,playable,2022-10-15 17:22:27
+010056D00E234000,"30-in-1 Game Collection",online-broken,playable,2022-10-15 17:47:09
+0100FB5010D2E000,"3000th Duel",,playable,2022-09-21 17:12:08
+01003670066DE000,"36 Fragments of Midnight",,playable,2020-05-28 15:12:59
+0100AF400C4CE000,"39 Days to Mars",,playable,2021-02-21 22:12:46
+010010C013F2A000,"3D Arcade Fishing",,playable,2022-10-25 21:50:51
+01006DA00707C000,"3D MiniGolf",,playable,2021-01-06 09:22:11
+01006890126E4000,"4x4 Dirt Track",,playable,2020-12-12 21:41:42
+010010100FF14000,"60 Parsecs!",,playable,2022-09-17 11:01:17
+0100969005E98000,"60 Seconds!",services,ingame,2021-11-30 01:04:14
+0100ECF008474000,"6180 the moon",,playable,2020-05-28 15:39:24
+0100EFE00E964000,"64.0",,playable,2020-12-12 21:31:58
+0100DA900B67A000,"7 Billion Humans",32-bit,playable,2020-12-17 21:04:58
+01004B200DF76000,"7th Sector",nvdec,playable,2020-08-10 14:22:14
+0100E9F00B882000,"8-BIT ADV STEINS;GATE",audio,ingame,2020-01-12 15:05:06
+0100B0700E944000,"80 DAYS",,playable,2020-06-22 21:43:01
+01006B1011B9E000,"80's OVERDRIVE",,playable,2020-10-16 14:33:32
+010006A0042F0000,"88 Heroes - 98 Heroes Edition",,playable,2020-05-28 14:13:02
+010005E00E2BC000,"9 Monkeys of Shaolin",UE4;gpu;slow,ingame,2020-11-17 11:58:43
+0100C5F012E3E000,"9 Monkeys of Shaolin Demo",UE4;gpu;nvdec,ingame,2021-02-09 01:03:30
+01000360107BC000,"911 Operator Deluxe Edition",,playable,2020-07-14 13:57:44
+0100B2C00682E000,"99Vidas - Definitive Edition",online,playable,2020-10-29 13:00:40
+010023500C2F0000,"99Vidas Demo",,playable,2021-02-09 12:51:31
+0100DB00117BA000,"9th Dawn III",,playable,2020-12-12 22:27:27
+010096A00CC80000,"A Ch'ti Bundle",nvdec,playable,2022-10-04 12:48:44
+010021D00D53E000,"A Dark Room",gpu,ingame,2020-12-14 16:14:28
+010026B006802000,"A Duel Hand Disaster: Trackher",nvdec;online-working,playable,2022-09-04 14:24:55
+0100582012B90000,"A Duel Hand Disaster: Trackher DEMO",crash;demo;nvdec,ingame,2021-03-24 18:45:27
+01006CE0134E6000,"A Frog Game",,playable,2020-12-14 16:09:53
+010056E00853A000,"A Hat in Time",,playable,2024-06-25 19:52:44
+01009E1011EC4000,"A HERO AND A GARDEN",,playable,2022-12-05 16:37:47
+01005EF00CFDA000,"A Knight's Quest",UE4,playable,2022-09-12 20:44:20
+01008DD006C52000,"A Magical High School Girl",,playable,2022-07-19 14:40:50
+01004890117B2000,"A Short Hike",,playable,2020-10-15 00:19:58
+0100F0901006C000,"A Sound Plan",crash,boots,2020-12-14 16:46:21
+01007DD011C4A000,"A Summer with the Shiba Inu",,playable,2021-06-10 20:51:16
+0100A3E010E56000,"A-Train: All Aboard! Tourism",nvdec,playable,2021-04-06 17:48:19
+010097A00CC0A000,"Aaero: Complete Edition",nvdec,playable,2022-07-19 14:49:55
+0100EFC010398000,"Aborigenus",,playable,2020-08-05 19:47:24
+0100A5B010A66000,"Absolute Drift",,playable,2020-12-10 14:02:44
+0100C1300BBC6000,"ABZÛ",UE4,playable,2022-07-19 15:02:52
+01003C400871E000,"ACA NEOGEO 2020 SUPER BASEBALL",online,playable,2021-04-12 13:23:51
+0100FC000AFC6000,"ACA NEOGEO 3 COUNT BOUT",online,playable,2021-04-12 13:16:42
+0100AC40038F4000,"ACA NEOGEO AERO FIGHTERS 2",online,playable,2021-04-08 15:44:09
+0100B91008780000,"ACA NEOGEO AERO FIGHTERS 3",online,playable,2021-04-12 13:11:17
+0100B4800AFBA000,"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",online,playable,2021-04-01 22:48:01
+01003FE00A2F6000,"ACA NEOGEO BASEBALL STARS PROFESSIONAL",online,playable,2021-04-01 21:23:05
+0100DFC003398000,"ACA NEOGEO BLAZING STAR",crash;services,menus,2020-05-26 17:29:02
+0100D2400AFB0000,"ACA NEOGEO CROSSED SWORDS",online,playable,2021-04-01 20:42:59
+0100EE6002B48000,"ACA NEOGEO FATAL FURY",online,playable,2021-04-01 20:36:23
+0100EEA00AFB2000,"ACA NEOGEO FOOTBALL FRENZY",,playable,2021-03-29 20:12:12
+0100CB2001DB8000,"ACA NEOGEO GAROU: MARK OF THE WOLVES",online,playable,2021-04-01 20:31:10
+01005D700A2F8000,"ACA NEOGEO GHOST PILOTS",online,playable,2021-04-01 20:26:45
+01000D10038E6000,"ACA NEOGEO LAST RESORT",online,playable,2021-04-01 19:51:22
+0100A2900AFA4000,"ACA NEOGEO LEAGUE BOWLING",crash;services,menus,2020-05-26 17:11:04
+0100A050038F2000,"ACA NEOGEO MAGICAL DROP II",crash;services,menus,2020-05-26 16:48:24
+01007920038F6000,"ACA NEOGEO MAGICIAN LORD",online,playable,2021-04-01 19:33:26
+0100EBE002B3E000,"ACA NEOGEO METAL SLUG",,playable,2021-02-21 13:56:48
+010086300486E000,"ACA NEOGEO METAL SLUG 2",online,playable,2021-04-01 19:25:52
+0100BA8001DC6000,"ACA NEOGEO METAL SLUG 3",crash;services,menus,2020-05-26 16:32:45
+01009CE00AFAE000,"ACA NEOGEO METAL SLUG 4",online,playable,2021-04-01 18:12:18
+01008FD004DB6000,"ACA NEOGEO METAL SLUG X",crash;services,menus,2020-05-26 14:07:20
+010038F00AFA0000,"ACA NEOGEO Money Puzzle Exchanger",online,playable,2021-04-01 17:59:56
+01002E70032E8000,"ACA NEOGEO NEO TURF MASTERS",,playable,2021-02-21 15:12:01
+010052A00A306000,"ACA NEOGEO NINJA COMBAT",,playable,2021-03-29 21:17:28
+01007E800AFB6000,"ACA NEOGEO NINJA COMMANDO",online,playable,2021-04-01 17:28:18
+01003A5001DBA000,"ACA NEOGEO OVER TOP",,playable,2021-02-21 13:16:25
+010088500878C000,"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",online,playable,2021-04-01 17:18:27
+01005C9002B42000,"ACA NEOGEO SAMURAI SHODOWN",online,playable,2021-04-01 17:11:35
+010047F001DBC000,"ACA NEOGEO SAMURAI SHODOWN IV",online,playable,2021-04-12 12:58:54
+010049F00AFE8000,"ACA NEOGEO SAMURAI SHODOWN V SPECIAL",online,playable,2021-04-10 18:07:13
+01009B300872A000,"ACA NEOGEO SENGOKU 2",online,playable,2021-04-10 17:36:44
+01008D000877C000,"ACA NEOGEO SENGOKU 3",online,playable,2021-04-10 16:11:53
+01008A9001DC2000,"ACA NEOGEO SHOCK TROOPERS",crash;services,menus,2020-05-26 15:29:34
+01007D1004DBA000,"ACA NEOGEO SPIN MASTER",online,playable,2021-04-10 15:50:19
+010055A00A300000,"ACA NEOGEO SUPER SIDEKICKS 2",online,playable,2021-04-10 16:05:58
+0100A4D00A308000,"ACA NEOGEO SUPER SIDEKICKS 3 : THE NEXT GLORY",online,playable,2021-04-10 15:39:22
+0100EB2001DCC000,"ACA NEOGEO THE KING OF FIGHTERS '94",crash;services,menus,2020-05-26 15:03:44
+01009DC001DB6000,"ACA NEOGEO THE KING OF FIGHTERS '95",,playable,2021-03-29 20:27:35
+01006F0004FB4000,"ACA NEOGEO THE KING OF FIGHTERS '96",online,playable,2021-04-10 14:49:10
+0100170008728000,"ACA NEOGEO THE KING OF FIGHTERS '97",online,playable,2021-04-10 14:43:27
+0100B42001DB4000,"ACA NEOGEO THE KING OF FIGHTERS '98",crash;services,menus,2020-05-26 14:54:20
+0100583001DCA000,"ACA NEOGEO THE KING OF FIGHTERS '99",online,playable,2021-04-10 14:36:56
+0100B97002B44000,"ACA NEOGEO THE KING OF FIGHTERS 2000",online,playable,2021-04-10 15:24:35
+010048200AFC2000,"ACA NEOGEO THE KING OF FIGHTERS 2001",online,playable,2021-04-10 15:16:23
+0100CFD00AFDE000,"ACA NEOGEO THE KING OF FIGHTERS 2002",online,playable,2021-04-10 15:01:55
+0100EF100AFE6000,"ACA NEOGEO THE KING OF FIGHTERS 2003",online,playable,2021-04-10 14:54:31
+0100699008792000,"ACA NEOGEO THE LAST BLADE 2",online,playable,2021-04-10 14:31:54
+0100F7F00AFA2000,"ACA NEOGEO THE SUPER SPY",online,playable,2021-04-10 14:26:33
+0100CEF001DC0000,"ACA NEOGEO WAKU WAKU 7",online,playable,2021-04-10 14:20:52
+01009D4001DC4000,"ACA NEOGEO WORLD HEROES PERFECT",crash;services,menus,2020-05-26 14:14:36
+01002E700AFC4000,"ACA NEOGEO ZUPAPA!",online,playable,2021-03-25 20:07:33
+0100A9900CB5C000,"Access Denied",,playable,2022-07-19 15:25:10
+01007C50132C8000,"Ace Angler: Fishing Spirits",crash,menus,2023-03-03 03:21:39
+010005501E68C000,"Ace Attorney Investigations Collection",,playable,2024-09-19 16:38:05
+010033401E68E000,"Ace Attorney Investigations Collection DEMO",,playable,2024-09-07 06:16:42
+010039301B7E0000,"Ace Combat 7 - Skies Unknown Deluxe Edition",gpu;UE4,ingame,2024-09-27 14:31:43
+0100FF1004D56000,"Ace of Seafood",,playable,2022-07-19 15:32:25
+0100B28003440000,"Aces of the Luftwaffe - Squadron",nvdec;slow,playable,2020-05-27 12:29:42
+010054300D822000,"Aces of the Luftwaffe - Squadron Demo",nvdec,playable,2021-02-09 13:12:28
+010079B00B3F4000,"Achtung! Cthulhu Tactics",,playable,2020-12-14 18:40:27
+0100DBC0081A4000,"ACORN Tactics",,playable,2021-02-22 12:57:40
+010043C010AEA000,"Across the Grooves",,playable,2020-06-27 12:29:51
+010039A010DA0000,"Active Neurons - Puzzle game",,playable,2021-01-27 21:31:21
+01000D1011EF0000,"Active Neurons 2",,playable,2022-10-07 16:21:42
+010031C0122B0000,"Active Neurons 2 Demo",,playable,2021-02-09 13:40:21
+0100EE1013E12000,"Active Neurons 3 - Wonders Of The World",,playable,2021-03-24 12:20:20
+0100CD40104DE000,"Actual Sunlight",gpu,ingame,2020-12-14 17:18:41
+0100C0C0040E4000,"Adam's Venture™: Origins",,playable,2021-03-04 18:43:57
+010029700EB76000,"Adrenaline Rush - Miami Drive",,playable,2020-12-12 22:49:50
+0100300012F2A000,"Advance Wars™ 1+2: Re-Boot Camp",,playable,2024-01-30 18:19:44
+010014B0130F2000,"Adventure Llama",,playable,2020-12-14 19:32:24
+0100C990102A0000,"Adventure Pinball Bundle",slow,playable,2020-12-14 20:31:53
+0100C4E004406000,"Adventure Time: Pirates of the Enchiridion",nvdec,playable,2022-07-21 21:49:01
+010021F00C1C0000,"Adventures of Bertram Fiddle Episode 2: A Bleaker Predicklement",nvdec,playable,2021-02-22 14:56:37
+010072601233C000,"Adventures of Chris",,playable,2020-12-12 23:00:02
+0100A0A0136E8000,"Adventures of Chris Demo",,playable,2021-02-09 13:49:21
+01002B5012004000,"Adventures of Pip",nvdec,playable,2020-12-12 22:11:55
+01008C901266E000,"ADVERSE",UE4,playable,2021-04-26 14:32:51
+01008E6006502000,"Aegis Defenders",,playable,2021-02-22 13:29:33
+010064500AF72000,"Aegis Defenders demo",,playable,2021-02-09 14:04:17
+010001C011354000,"Aeolis Tournament",online,playable,2020-12-12 22:02:14
+01006710122CE000,"Aeolis Tournament Demo",nvdec,playable,2021-02-09 14:22:30
+0100A0400DDE0000,"AER Memories of Old",nvdec,playable,2021-03-05 18:43:43
+0100E9B013D4A000,"Aerial_Knight's Never Yield",,playable,2022-10-25 22:05:00
+0100087012810000,"Aery - Broken Memories",,playable,2022-10-04 13:11:52
+01000A8015390000,"Aery - Calm Mind",,playable,2022-11-14 14:26:58
+0100875011D0C000,"Aery - Little Bird Adventure",,playable,2021-03-07 15:25:51
+010018E012914000,"Aery - Sky Castle",,playable,2022-10-21 17:58:49
+0100DF8014056000,"Aery – A Journey Beyond Time",,playable,2021-04-05 15:52:25
+01006C40086EA000,"AeternoBlade",nvdec,playable,2020-12-14 20:06:48
+0100B1C00949A000,"AeternoBlade Demo",nvdec,playable,2021-02-09 14:39:26
+01009D100EA28000,"AeternoBlade II",online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18
+,"AeternoBlade II Demo Version",gpu;nvdec,ingame,2021-02-09 15:10:19
+01001B400D334000,"AFL Evolution 2",slow;online-broken;UE4,playable,2022-12-07 12:45:56
+0100DB100BBCE000,"Afterparty",,playable,2022-09-22 12:23:19
+010087C011C4E000,"Agatha Christie - The ABC Murders",,playable,2020-10-27 17:08:23
+010093600A60C000,"Agatha Knife",,playable,2020-05-28 12:37:58
+010005400A45E000,"Agent A: A puzzle in disguise",,playable,2020-11-16 22:53:27
+01008E8012C02000,"Agent A: A puzzle in disguise (Demo)",,playable,2021-02-09 18:30:41
+0100E4700E040000,"Ages of Mages: The last keeper",vulkan-backend-bug,playable,2022-10-04 11:44:05
+010004D00A9C0000,"Aggelos",gpu,ingame,2023-02-19 13:24:23
+010072600D21C000,"Agony",UE4;crash,boots,2020-07-10 16:21:18
+010089B00D09C000,"AI: THE SOMNIUM FILES",nvdec,playable,2022-09-04 14:45:06
+0100C1700FB34000,"AI: THE SOMNIUM FILES Demo",nvdec,playable,2021-02-10 12:52:33
+01006E8011C1E000,"Ailment",,playable,2020-12-12 22:30:41
+0100C7600C7D6000,"Air Conflicts: Pacific Carriers",,playable,2021-01-04 10:52:50
+010005A00A4F4000,"Air Hockey",,playable,2020-05-28 16:44:37
+0100C9E00F54C000,"Air Missions: HIND",,playable,2020-12-13 10:16:45
+0100E95011FDC000,"Aircraft Evolution",nvdec,playable,2021-06-14 13:30:18
+010010A00DB72000,"Airfield Mania Demo",services;demo,boots,2022-04-10 03:43:02
+01003DD00BFEE000,"Airheart - Tales of broken Wings",,playable,2021-02-26 15:20:27
+01007F100DE52000,"Akane",nvdec,playable,2022-07-21 00:12:18
+01009A800F0C8000,"Akash: Path of the Five",gpu;nvdec,ingame,2020-12-14 22:33:12
+010053100B0EA000,"Akihabara - Feel the Rhythm Remixed",,playable,2021-02-22 14:39:35
+0100D4C00EE0C000,"Akuarium",slow,playable,2020-12-12 23:43:36
+010026E00FEBE000,"Akuto: Showdown",,playable,2020-08-04 19:43:27
+0100F5400AB6C000,"Alchemic Jousts",gpu,ingame,2022-12-08 15:06:28
+010001E00F75A000,"Alchemist's Castle",,playable,2020-12-12 23:54:08
+01004510110C4000,"Alder's Blood Prologue",crash,ingame,2021-02-09 19:03:03
+0100D740110C0000,"Alder's Blood: Definitive Edition",,playable,2020-08-28 15:15:23
+01000E000EEF8000,"Aldred Knight",services,playable,2021-11-30 01:49:17
+010025D01221A000,"Alex Kidd in Miracle World DX",,playable,2022-11-14 15:01:34
+0100A2E00D0E0000,"Alien Cruise",,playable,2020-08-12 13:56:05
+0100C1500DBDE000,"Alien Escape",,playable,2020-06-03 23:43:18
+010075D00E8BA000,"Alien: Isolation",nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41
+0100CBD012FB6000,"All Walls Must Fall",UE4,playable,2022-10-15 19:16:30
+0100C1F00A9B8000,"All-Star Fruit Racing",nvdec;UE4,playable,2022-07-21 00:35:37
+0100AC501122A000,"Alluris",gpu;UE4,ingame,2023-08-02 23:13:50
+010063000C3CE000,"Almightree: The Last Dreamer",slow,playable,2020-12-15 13:59:03
+010083E010AE8000,"Along the Edge",,playable,2020-11-18 15:00:07
+010083E013188000,"Alpaca Ball: Allstars",nvdec,playable,2020-12-11 12:26:29
+01000A800B998000,"ALPHA",,playable,2020-12-13 12:17:45
+010053B0123DC000,"Alphaset by POWGI",,playable,2020-12-15 15:15:15
+01003E700FD66000,"Alt-Frequencies",,playable,2020-12-15 19:01:33
+01004DB00935A000,"Alteric",,playable,2020-11-08 13:53:22
+0100C3D00D1D4000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",,playable,2020-08-31 14:17:42
+0100A8A00D27E000,"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",,playable,2021-02-10 13:33:59
+010045201487C000,"Aluna: Sentinel of the Shards",nvdec,playable,2022-10-25 22:17:03
+01004C200B0B4000,"Alwa's Awakening",,playable,2020-10-13 11:52:01
+01001B7012214000,"Alwa's Legacy",,playable,2020-12-13 13:00:57
+010002B00C534000,"American Fugitive",nvdec,playable,2021-01-04 20:45:11
+010089D00A3FA000,"American Ninja Warrior: Challenge",nvdec,playable,2021-06-09 13:11:17
+01003CC00D0BE000,"Amnesia: Collection",,playable,2022-10-04 13:36:15
+010041D00DEB2000,"Amoeba Battle - Microscopic RTS Action",,playable,2021-05-06 13:33:41
+010046500C8D2000,"Among the Sleep - Enhanced Edition",nvdec,playable,2021-06-03 15:06:25
+0100B0C013912000,"Among Us",online;ldn-broken,menus,2021-09-22 15:20:17
+010050900E1C6000,"Anarcute",,playable,2021-02-22 13:17:59
+01009EE0111CC000,"Ancestors Legacy",nvdec;UE4,playable,2022-10-01 12:25:36
+010021700BC56000,"Ancient Rush 2",UE4;crash,menus,2020-07-14 14:58:47
+0100AE000AEBC000,"Angels of Death",nvdec,playable,2021-02-22 14:17:15
+010001E00A5F6000,"AngerForce: Reloaded for Nintendo Switch",,playable,2022-07-21 10:37:17
+0100F3500D05E000,"Angry Bunnies: Colossal Carrot Crusade",online-broken,playable,2022-09-04 14:53:26
+010084500C7DC000,"Angry Video Game Nerd I & II Deluxe",crash,ingame,2020-12-12 23:59:54
+0100706005B6A000,"Anima: Gate of Memories",nvdec,playable,2021-06-16 18:13:18
+010033F00B3FA000,"Anima: Gate of Memories - Arcane Edition",nvdec,playable,2021-01-26 16:55:51
+01007A400B3F8000,"Anima: Gate of Memories - The Nameless Chronicles",,playable,2021-06-14 14:33:06
+0100F38011CFE000,"Animal Crossing: New Horizons Island Transfer Tool",services;Needs Update;Incomplete,ingame,2022-12-07 13:51:19
+01006F8002326000,"Animal Crossing™: New Horizons",gpu;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49
+010019500E642000,"Animal Fight Club",gpu,ingame,2020-12-13 13:13:33
+01002F4011A8E000,"Animal Fun for Toddlers and Kids",services,boots,2020-12-15 16:45:29
+010035500CA0E000,"Animal Hunter Z",,playable,2020-12-13 12:50:35
+010033C0121DC000,"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",services,boots,2021-11-29 23:43:14
+010065B009B3A000,"Animal Rivals: Nintendo Switch Edition",,playable,2021-02-22 14:02:42
+0100EFE009424000,"Animal Super Squad",UE4,playable,2021-04-23 20:50:50
+0100A16010966000,"Animal Up!",,playable,2020-12-13 15:39:02
+010020D01AD24000,"ANIMAL WELL",,playable,2024-05-22 18:01:49
+0100451012492000,"Animals for Toddlers",services,boots,2020-12-15 17:27:27
+010098600CF06000,"Animated Jigsaws Collection",nvdec,playable,2020-12-15 15:58:34
+0100A1900B5B8000,"Animated Jigsaws: Beautiful Japanese Scenery Demo",nvdec,playable,2021-02-10 13:49:56
+010062500EB84000,"Anime Studio Story",,playable,2020-12-15 18:14:05
+01002B300EB86000,"Anime Studio Story Demo",,playable,2021-02-10 14:50:39
+010097600C322000,"ANIMUS",,playable,2020-12-13 15:11:47
+0100E5A00FD38000,"ANIMUS: Harbinger",,playable,2022-09-13 22:09:20
+010055500CCD2000,"Ankh Guardian - Treasure of the Demon's Temple",,playable,2020-12-13 15:55:49
+01009E600D78C000,"Anode",,playable,2020-12-15 17:18:58
+0100CB9018F5A000,"Another Code™: Recollection",gpu;crash,ingame,2024-09-06 05:58:52
+01001A900D312000,"Another Sight",UE4;gpu;nvdec,ingame,2020-12-03 16:49:59
+01003C300AAAE000,"Another World",slow,playable,2022-07-21 10:42:38
+01000FD00DF78000,"AnShi",nvdec;UE4,playable,2022-10-21 19:37:01
+010054C00D842000,"Anthill",services;nvdec,menus,2021-11-18 09:25:25
+0100596011E20000,"Anti Hero Bundle",nvdec,playable,2022-10-21 20:10:30
+0100016007154000,"Antiquia Lost",,playable,2020-05-28 11:57:32
+0100FE1011400000,"AntVentor",nvdec,playable,2020-12-15 20:09:27
+0100FA100620C000,"Ao no Kanata no Four Rhythm",,playable,2022-07-21 10:50:42
+010047000E9AA000,"AO Tennis 2",online-broken,playable,2022-09-17 12:05:07
+0100990011866000,"Aokana - Four Rhythms Across the Blue",,playable,2022-10-04 13:50:26
+01005B100C268000,"Ape Out",,playable,2022-09-26 19:04:47
+010054500E6D4000,"Ape Out DEMO",,playable,2021-02-10 14:33:06
+010051C003A08000,"Aperion Cyberstorm",,playable,2020-12-14 00:40:16
+01008CA00D71C000,"Aperion Cyberstorm [DEMO]",,playable,2021-02-10 15:53:21
+01008FC00C5BC000,"Apocalipsis Wormwood Edition",deadlock,menus,2020-05-27 12:56:37
+010045D009EFC000,"Apocryph: an old-school shooter",gpu,ingame,2020-12-13 23:24:10
+010020D01B890000,"Apollo Justice: Ace Attorney Trilogy",,playable,2024-06-21 21:54:27
+01005F20116A0000,"Apparition",nvdec;slow,ingame,2020-12-13 23:57:04
+0100AC10085CE000,"AQUA KITTY UDX",online,playable,2021-04-12 15:34:11
+0100FE0010886000,"Aqua Lungers",crash,ingame,2020-12-14 11:25:57
+0100D0D00516A000,"Aqua Moto Racing Utopia",,playable,2021-02-21 21:21:00
+010071800BA74000,"Aragami: Shadow Edition",nvdec,playable,2021-02-21 20:33:23
+0100C7D00E6A0000,"Arc of Alchemist",nvdec,playable,2022-10-07 19:15:54
+0100BE80097FA000,"Arcade Archives 10-Yard Fight",online,playable,2021-03-25 21:26:41
+01005DD00BE08000,"Arcade Archives ALPHA MISSION",online,playable,2021-04-15 09:20:43
+010083800DC70000,"Arcade Archives ALPINE SKI",online,playable,2021-04-15 09:28:46
+0100A5700AF32000,"Arcade Archives ARGUS",online,playable,2021-04-16 06:51:25
+010014F001DE2000,"Arcade Archives Armed F",online,playable,2021-04-16 07:00:17
+0100BEC00C7A2000,"Arcade Archives ATHENA",online,playable,2021-04-16 07:10:12
+0100426001DE4000,"Arcade Archives Atomic Robo-Kid",online,playable,2021-04-16 07:20:29
+0100192009824000,"Arcade Archives BOMB JACK",online,playable,2021-04-16 09:48:26
+010007A00980C000,"Arcade Archives City CONNECTION",online,playable,2021-03-25 22:16:15
+0100EDC00E35A000,"Arcade Archives CLU CLU LAND",online,playable,2021-04-16 10:00:42
+0100BB1001DD6000,"Arcade Archives CRAZY CLIMBER",online,playable,2021-03-25 22:24:15
+0100E9E00B052000,"Arcade Archives DONKEY KONG",Needs Update;crash;services,menus,2021-03-24 18:18:43
+0100F25001DD0000,"Arcade Archives DOUBLE DRAGON",online,playable,2021-03-25 22:44:34
+01009E3001DDE000,"Arcade Archives DOUBLE DRAGON II The Revenge",online,playable,2021-04-12 16:05:29
+0100496006EC8000,"Arcade Archives FRONT LINE",online,playable,2021-05-05 14:10:49
+01009A4008A30000,"Arcade Archives HEROIC EPISODE",online,playable,2021-03-25 23:01:26
+01007D200D3FC000,"Arcade Archives ICE CLIMBER",online,playable,2021-05-05 14:18:34
+010049400C7A8000,"Arcade Archives IKARI WARRIORS",online,playable,2021-05-05 14:24:46
+01000DB00980A000,"Arcade Archives Ikki",online,playable,2021-03-25 23:11:28
+010008300C978000,"Arcade Archives IMAGE FIGHT",online,playable,2021-05-05 14:31:21
+010010B008A36000,"Arcade Archives Kid Niki Radical Ninja",audio;online,ingame,2022-07-21 11:02:04
+0100E7C001DE0000,"Arcade Archives Kid's Horehore Daisakusen",online,playable,2021-04-12 16:21:29
+0100F380105A4000,"Arcade Archives LIFE FORCE",,playable,2020-09-04 13:26:25
+0100755004608000,"Arcade Archives Mario Bros.",online,playable,2021-03-26 11:31:32
+01000BE001DD8000,"Arcade Archives MOON CRESTA",online,playable,2021-05-05 14:39:29
+01003000097FE000,"Arcade Archives MOON PATROL",online,playable,2021-03-26 11:42:04
+01003EF00D3B4000,"Arcade Archives NINJA GAIDEN",audio;online,ingame,2021-04-12 16:27:53
+01002F300D2C6000,"Arcade Archives Ninja Spirit",online,playable,2021-05-05 14:45:31
+0100369001DDC000,"Arcade Archives Ninja-Kid",online,playable,2021-03-26 20:55:07
+01004A200BB48000,"Arcade Archives OMEGA FIGHTER",crash;services,menus,2020-08-18 20:50:54
+01007F8010C66000,"Arcade Archives PLUS ALPHA",audio,ingame,2020-07-04 20:47:55
+0100A6E00D3F8000,"Arcade Archives POOYAN",online,playable,2021-05-05 17:58:19
+01000D200C7A4000,"Arcade Archives PSYCHO SOLDIER",online,playable,2021-05-05 18:02:19
+01001530097F8000,"Arcade Archives PUNCH-OUT!!",online,playable,2021-03-25 22:10:55
+010081E001DD2000,"Arcade Archives Renegade",online,playable,2022-07-21 11:45:40
+0100FBA00E35C000,"Arcade Archives ROAD FIGHTER",online,playable,2021-05-05 18:09:17
+010060000BF7C000,"Arcade Archives ROUTE 16",online,playable,2021-05-05 18:40:41
+0100C2D00981E000,"Arcade Archives RYGAR",online,playable,2021-04-15 08:48:30
+01007A4009834000,"Arcade Archives Shusse Ozumo",online,playable,2021-05-05 17:52:25
+010008F00B054000,"Arcade Archives Sky Skipper",online,playable,2021-04-15 08:58:09
+01008C900982E000,"Arcade Archives Solomon's Key",online,playable,2021-04-19 16:27:18
+010069F008A38000,"Arcade Archives STAR FORCE",online,playable,2021-04-15 08:39:09
+0100422001DDA000,"Arcade Archives TERRA CRESTA",crash;services,menus,2020-08-18 20:20:55
+0100348001DE6000,"Arcade Archives TERRA FORCE",online,playable,2021-04-16 20:03:27
+0100DFD016B7A000,"Arcade Archives TETRIS® THE GRAND MASTER",,playable,2024-06-23 01:50:29
+0100DC000983A000,"Arcade Archives THE NINJA WARRIORS",online;slow,ingame,2021-04-16 19:54:56
+0100AF300D2E8000,"Arcade Archives TIME PILOT",online,playable,2021-04-16 19:22:31
+010029D006ED8000,"Arcade Archives Traverse USA",online,playable,2021-04-15 08:11:06
+010042200BE0C000,"Arcade Archives URBAN CHAMPION",online,playable,2021-04-16 10:20:03
+01004EC00E634000,"Arcade Archives VS. GRADIUS",online,playable,2021-04-12 14:53:58
+010021D00812A000,"Arcade Archives VS. SUPER MARIO BROS.",online,playable,2021-04-08 14:48:11
+01001B000D8B6000,"Arcade Archives WILD WESTERN",online,playable,2021-04-16 10:11:36
+010050000D6C4000,"Arcade Classics Anniversary Collection",,playable,2021-06-03 13:55:10
+01005A8010C7E000,"ARCADE FUZZ",,playable,2020-08-15 12:37:36
+010077000F620000,"Arcade Spirits",,playable,2020-06-21 11:45:03
+0100E680149DC000,"Arcaea",,playable,2023-03-16 19:31:21
+01003C2010C78000,"Archaica: The Path Of Light",crash,nothing,2020-10-16 13:22:26
+01004DA012976000,"Area 86",,playable,2020-12-16 16:45:52
+0100691013C46000,"ARIA CHRONICLE",,playable,2022-11-16 13:50:55
+0100D4A00B284000,"ARK: Survival Evolved",gpu;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56
+0100C56012C96000,"Arkanoid vs. Space Invaders",services,ingame,2021-01-21 12:50:30
+010069A010606000,"Arkham Horror: Mother's Embrace",nvdec,playable,2021-04-19 15:40:55
+0100C5B0113A0000,"Armed 7 DX",,playable,2020-12-14 11:49:56
+010070A00A5F4000,"Armello",nvdec,playable,2021-01-07 11:43:26
+0100A5400AC86000,"ARMS Demo",,playable,2021-02-10 16:30:13
+01009B500007C000,"ARMS™",ldn-works;LAN,playable,2024-08-28 07:49:24
+0100184011B32000,"Arrest of a stone Buddha",crash,nothing,2022-12-07 16:55:00
+01007AB012102000,"Arrog",,playable,2020-12-16 17:20:50
+01008EC006BE2000,"Art of Balance",gpu;ldn-works,ingame,2022-07-21 17:13:57
+010062F00CAE2000,"Art of Balance DEMO",gpu;slow,ingame,2021-02-10 17:17:12
+01006AA013086000,"Art Sqool",nvdec,playable,2022-10-16 20:42:37
+0100CDD00DA70000,"Artifact Adventure Gaiden DX",,playable,2020-12-16 17:49:25
+0100C2500CAB6000,"Ary and the Secret of Seasons",,playable,2022-10-07 20:45:09
+0100C9F00AAEE000,"ASCENDANCE",,playable,2021-01-05 10:54:40
+0100D5800DECA000,"Asemblance",UE4;gpu,ingame,2020-12-16 18:01:23
+0100E4C00DE30000,"Ash of Gods: Redemption",deadlock,nothing,2020-08-10 18:08:32
+010027B00E40E000,"Ashen",nvdec;online-broken;UE4,playable,2022-09-17 12:19:14
+01007B000C834000,"Asphalt Legends Unite",services;crash;online-broken,menus,2022-12-07 13:28:29
+01007F600B134000,"Assassin's Creed® III: Remastered",nvdec,boots,2024-06-25 20:12:11
+010044700DEB0000,"Assassin’s Creed®: The Rebel Collection",gpu,ingame,2024-05-19 07:58:56
+0100DF200B24C000,"Assault Android Cactus+",,playable,2021-06-03 13:23:55
+0100BF8012A30000,"Assault ChaingunS KM",crash;gpu,ingame,2020-12-14 12:48:34
+0100C5E00E540000,"Assault on Metaltron Demo",,playable,2021-02-10 19:48:06
+010057A00C1F6000,"Astebreed",,playable,2022-07-21 17:33:54
+010081500EA1E000,"Asterix & Obelix XXL 3 - The Crystal Menhir",gpu;nvdec;regression,ingame,2022-11-28 14:19:23
+0100F46011B50000,"Asterix & Obelix XXL: Romastered",gpu;nvdec;opengl,ingame,2023-08-16 21:22:06
+01007300020FA000,"ASTRAL CHAIN",,playable,2024-07-17 18:02:19
+0100E5F00643C000,"Astro Bears Party",,playable,2020-05-28 11:21:58
+0100F0400351C000,"Astro Duel Deluxe",32-bit,playable,2021-06-03 11:21:48
+0100B80010C48000,"Astrologaster",cpu;32-bit;crash,nothing,2023-06-28 15:39:31
+0100DF401249C000,"AstroWings: Space War",,playable,2020-12-14 13:10:44
+010099801870E000,"Atari 50: The Anniversary Celebration",slow,playable,2022-11-14 19:42:10
+010088600C66E000,"Atelier Arland series Deluxe Pack",nvdec,playable,2021-04-08 15:33:15
+0100D9D00EE8C000,"Atelier Ayesha: The Alchemist of Dusk DX",crash;nvdec;Needs Update,menus,2021-11-24 07:29:54
+0100E5600EE8E000,"Atelier Escha & Logy: Alchemists of the Dusk Sky DX",nvdec,playable,2022-11-20 16:01:41
+010023201421E000,"Atelier Firis: The Alchemist and the Mysterious Journey DX",gpu;nvdec,ingame,2022-10-25 22:46:19
+0100B1400CD50000,"Atelier Lulua ~The Scion of Arland~",nvdec,playable,2020-12-16 14:29:19
+010009900947A000,"Atelier Lydie & Suelle ~The Alchemists and the Mysterious Paintings~",nvdec,playable,2021-06-03 18:37:01
+01001A5014220000,"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings DX",,playable,2022-10-25 23:06:20
+0100ADD00C6FA000,"Atelier Meruru ~The Apprentice of Arland~ DX",nvdec,playable,2020-06-12 00:50:48
+01002D700B906000,"Atelier Rorona Arland no Renkinjutsushi DX (JP)",nvdec,playable,2022-12-02 17:26:54
+01009A9012022000,"Atelier Ryza 2: Lost Legends & the Secret Fairy",,playable,2022-10-16 21:06:06
+0100D1900EC80000,"Atelier Ryza: Ever Darkness & the Secret Hideout",,playable,2023-10-15 16:36:50
+010005C00EE90000,"Atelier Shallie: Alchemists of the Dusk Sea DX",nvdec,playable,2020-11-25 20:54:12
+010082A01538E000,"Atelier Sophie 2: The Alchemist of the Mysterious Dream",crash,ingame,2022-12-01 04:34:03
+01009BC00C6F6000,"Atelier Totori ~The Adventurer of Arland~ DX",nvdec,playable,2020-06-12 01:04:56
+0100B9400FA38000,"ATOM RPG",nvdec,playable,2022-10-22 10:11:48
+01005FE00EC4E000,"Atomic Heist",,playable,2022-10-16 21:24:32
+0100AD30095A4000,"Atomicrops",,playable,2022-08-06 10:05:07
+01000D1006CEC000,"ATOMIK: RunGunJumpGun",,playable,2020-12-14 13:19:24
+0100FB500631E000,"ATOMINE",gpu;nvdec;slow,playable,2020-12-14 18:56:50
+010039600E7AC000,"Attack of the Toy Tanks",slow,ingame,2020-12-14 12:59:12
+010034500641A000,"Attack on Titan 2",,playable,2021-01-04 11:40:01
+01000F600B01E000,"ATV Drift & Tricks",UE4;online,playable,2021-04-08 17:29:17
+0100AA800DA42000,"Automachef",,playable,2020-12-16 19:51:25
+01006B700EA6A000,"Automachef Demo",,playable,2021-02-10 20:35:37
+0100B280106A0000,"Aviary Attorney: Definitive Edition",,playable,2020-08-09 20:32:12
+010064600F982000,"AVICII Invector",,playable,2020-10-25 12:12:56
+0100E100128BA000,"AVICII Invector Demo",,playable,2021-02-10 21:04:58
+01008FB011248000,"AvoCuddle",,playable,2020-09-02 14:50:13
+0100085012D64000,"Awakening of Cthulhu",UE4,playable,2021-04-26 13:03:07
+01002F1005F3C000,"Away: Journey To The Unexpected",nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04
+0100B8C00CFCE000,"Awesome Pea",,playable,2020-10-11 12:39:23
+010023800D3F2000,"Awesome Pea (Demo)",,playable,2021-02-10 21:48:21
+0100B7D01147E000,"Awesome Pea 2",,playable,2022-10-01 12:34:19
+0100D2011E28000,"Awesome Pea 2 (Demo)",crash,nothing,2021-02-10 22:08:27
+0100DA3011174000,"AXES",,playable,2021-04-08 13:01:58
+0100052004384000,"Axiom Verge",,playable,2020-10-20 01:07:18
+010075400DEC6000,"Ayakashi Koi Gikyoku《Trial version》",,playable,2021-02-10 22:22:11
+01006AF012FC8000,"Azur Lane: Crosswave",UE4;nvdec,playable,2021-04-05 15:15:25
+0100C7D00DE24000,"Azuran Tales: TRIALS",,playable,2020-08-12 15:23:07
+01006FB00990E000,"Azure Reflections",nvdec;online,playable,2021-04-08 13:18:25
+01004E90149AA000,"Azure Striker GUNVOLT 3",,playable,2022-08-10 13:46:49
+0100192003FA4000,"Azure Striker GUNVOLT: STRIKER PACK",32-bit,playable,2024-02-10 23:51:21
+010031D012BA4000,"Azurebreak Heroes",,playable,2020-12-16 21:26:17
+01009B901145C000,"B.ARK",nvdec,playable,2022-11-17 13:35:02
+01002CD00A51C000,"Baba Is You",,playable,2022-07-17 05:36:54
+0100F4100AF16000,"Back to Bed",nvdec,playable,2020-12-16 20:52:04
+0100FEA014316000,"Backworlds",,playable,2022-10-25 23:20:34
+0100EAF00E32E000,"Bacon Man: An Adventure",crash;nvdec,menus,2021-11-20 02:36:21
+01000CB00D094000,"Bad Dream: Coma",deadlock,boots,2023-08-03 00:54:18
+0100B3B00D81C000,"Bad Dream: Fever",,playable,2021-06-04 18:33:12
+0100E98006F22000,"Bad North",,playable,2022-07-17 13:44:25
+010075000D092000,"Bad North Demo",,playable,2021-02-10 22:48:38
+01004C70086EC000,"BAFL - Brakes Are For Losers",,playable,2021-01-13 08:32:51
+010076B011EC8000,"Baila Latino",,playable,2021-04-14 16:40:24
+0100730011BDC000,"Bakugan: Champions of Vestroia",,playable,2020-11-06 19:07:39
+01008260138C4000,"Bakumatsu Renka SHINSENGUMI",,playable,2022-10-25 23:37:31
+0100438012EC8000,"BALAN WONDERWORLD",nvdec;UE4,playable,2022-10-22 13:08:43
+0100E48013A34000,"Balan Wonderworld Demo",gpu;services;UE4;demo,ingame,2023-02-16 20:05:07
+0100CD801CE5E000,"Balatro",,ingame,2024-04-21 02:01:53
+010010A00DA48000,"Baldur's Gate and Baldur's Gate II: Enhanced Editions",32-bit,playable,2022-09-12 23:52:15
+0100BC400FB64000,"Balthazar's Dream",,playable,2022-09-13 00:13:22
+01008D30128E0000,"Bamerang",,playable,2022-10-26 00:29:39
+010013C010C5C000,"Banner of the Maid",,playable,2021-06-14 15:23:37
+0100388008758000,"Banner Saga 2",crash,boots,2021-01-13 08:56:09
+010071E00875A000,"Banner Saga 3",slow,boots,2021-01-11 16:53:57
+0100CE800B94A000,"Banner Saga Trilogy",slow,playable,2024-03-06 11:25:20
+0100425009FB2000,"Baobabs Mausoleum Ep.1: Ovnifagos Don't Eat Flamingos",,playable,2020-07-15 05:06:29
+010079300E976000,"Baobabs Mausoleum Ep.2: 1313 Barnabas Dead End Drive",,playable,2020-12-17 11:22:50
+01006D300FFA6000,"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",nvdec,playable,2020-12-17 11:43:10
+0100D3000AEC2000,"Baobabs Mausoleum: DEMO",,playable,2021-02-10 22:59:25
+01003350102E2000,"Barbarous: Tavern of Emyr",,playable,2022-10-16 21:50:24
+0100F7E01308C000,"Barbearian",Needs Update;gpu,ingame,2021-06-28 16:27:50
+010039C0106C6000,"Baron: Fur Is Gonna Fly",crash,boots,2022-02-06 02:05:43
+0100FB000EB96000,"Barry Bradford's Putt Panic Party",nvdec,playable,2020-06-17 01:08:34
+01004860080A0000,"Baseball Riot",,playable,2021-06-04 18:07:27
+010038600B27E000,"Bastion",,playable,2022-02-15 14:15:24
+01005F3012748000,"Batbarian: Testament of the Primordials",,playable,2020-12-17 12:00:59
+0100C07018CA6000,"Baten Kaitos I & II HD Remaster (Europe/USA)",services;Needs Update,boots,2023-10-01 00:44:32
+0100F28018CA4000,"Baten Kaitos I & II HD Remaster (Japan)",services;Needs Update,boots,2023-10-24 23:11:54
+0100011005D92000,"Batman - The Telltale Series",nvdec;slow,playable,2021-01-11 18:19:35
+01003F00163CE000,"Batman: Arkham City",,playable,2024-09-11 00:30:19
+0100ACD0163D0000,"Batman: Arkham Knight",gpu;mac-bug,ingame,2024-06-25 20:24:42
+0100E6300AA3A000,"Batman: The Enemy Within",crash,nothing,2020-10-16 05:49:27
+0100747011890000,"Battle Axe",,playable,2022-10-26 00:38:01
+0100551001D88000,"Battle Chasers: Nightwar",nvdec;slow,playable,2021-01-12 12:27:34
+0100CC2001C6C000,"Battle Chef Brigade Deluxe",,playable,2021-01-11 14:16:28
+0100DBB00CAEE000,"Battle Chef Brigade Demo",,playable,2021-02-10 23:15:07
+0100A3B011EDE000,"Battle Hunters",gpu,ingame,2022-11-12 09:19:17
+010035E00C1AE000,"Battle of Kings",slow,playable,2020-12-17 12:45:23
+0100D2800EB40000,"Battle Planet - Judgement Day",,playable,2020-12-17 14:06:20
+0100C4D0093EA000,"Battle Princess Madelyn",,playable,2021-01-11 13:47:23
+0100A7500DF64000,"Battle Princess Madelyn Royal Edition",,playable,2022-09-26 19:14:49
+010099B00E898000,"Battle Supremacy - Evolution",gpu;nvdec,boots,2022-02-17 09:02:50
+0100DEB00D5A8000,"Battle Worlds: Kronos",nvdec,playable,2021-06-04 17:48:02
+0100650010DD4000,"Battleground",crash,ingame,2021-09-06 11:53:23
+010044E00D97C000,"BATTLESLOTHS",,playable,2020-10-03 08:32:22
+010059C00E39C000,"Battlestar Galactica Deadlock",nvdec,playable,2020-06-27 17:35:44
+01006D800A988000,"Battlezone Gold Edition",gpu;ldn-untested;online,boots,2021-06-04 18:36:05
+010048300D5C2000,"BATTLLOON",,playable,2020-12-17 15:48:23
+0100194010422000,"bayala - the game",,playable,2022-10-04 14:09:25
+0100CF5010FEC000,"Bayonetta Origins: Cereza and the Lost Demon™",gpu,ingame,2024-02-27 01:39:49
+010002801A3FA000,"Bayonetta Origins: Cereza and the Lost Demon™ Demo",gpu;demo,ingame,2024-02-17 06:06:28
+010076F0049A2000,"Bayonetta™",audout,playable,2022-11-20 15:51:59
+01007960049A0000,"Bayonetta™ 2",nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09
+01004A4010FEA000,"Bayonetta™ 3",gpu;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33
+01002FA00DE72000,"BDSM: Big Drunk Satanic Massacre",,playable,2021-03-04 21:28:22
+01003A1010E3C000,"BE-A Walker",slow,ingame,2020-09-02 15:00:31
+010095C00406C000,"Beach Buggy Racing",online,playable,2021-04-13 23:16:50
+010020700DE04000,"Bear With Me: The Lost Robots",nvdec,playable,2021-02-27 14:20:10
+010024200E97E800,"Bear With Me: The Lost Robots Demo",nvdec,playable,2021-02-12 22:38:12
+0100C0E014A4E000,"Bear's Restaurant",,playable,2024-08-11 21:26:59
+,"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",crash,menus,2020-10-04 06:12:08
+01009C300BB4C000,"Beat Cop",,playable,2021-01-06 19:26:48
+01002D20129FC000,"Beat Me!",online-broken,playable,2022-10-16 21:59:26
+01006B0014590000,"BEAUTIFUL DESOLATION",gpu;nvdec,ingame,2022-10-26 10:34:38
+01009E700DB2E000,"Bee Simulator",UE4;crash,boots,2020-07-15 12:13:13
+010018F007786000,"BeeFense BeeMastered",,playable,2022-11-17 15:38:12
+0100558010B26000,"Behold the Kickmen",,playable,2020-06-27 12:49:45
+0100D1300C1EA000,"Beholder: Complete Edition",,playable,2020-10-16 12:48:58
+01006E1004404000,"Ben 10",nvdec,playable,2021-02-26 14:08:35
+01009CD00E3AA000,"Ben 10: Power Trip!",nvdec,playable,2022-10-09 10:52:12
+010074500BBC4000,"Bendy and the Ink Machine",,playable,2023-05-06 20:35:39
+010068600AD16000,"Beyblade Burst Battle Zero",services;crash;Needs Update,menus,2022-11-20 15:48:32
+010056500CAD8000,"Beyond Enemy Lines: Covert Operations",UE4,playable,2022-10-01 13:11:50
+0100B8F00DACA000,"Beyond Enemy Lines: Essentials",nvdec;UE4,playable,2022-09-26 19:48:16
+0100BF400AF38000,"Bibi & Tina – Adventures with Horses",nvdec;slow,playable,2021-01-13 08:58:09
+010062400E69C000,"Bibi & Tina at the horse farm",,playable,2021-04-06 16:31:39
+01005FF00AF36000,"Bibi Blocksberg – Big Broom Race 3",,playable,2021-01-11 19:07:16
+010062B00A874000,"Big Buck Hunter Arcade",nvdec,playable,2021-01-12 20:31:39
+010088100C35E000,"Big Crown: Showdown",nvdec;online;ldn-untested,menus,2022-07-17 18:25:32
+0100A42011B28000,"Big Dipper",,playable,2021-06-14 15:08:19
+010077E00F30E000,"Big Pharma",,playable,2020-07-14 15:27:30
+010007401287E000,"BIG-Bobby-Car - The Big Race",slow,playable,2020-12-10 14:25:06
+010057700FF7C000,"Billion Road",,playable,2022-11-19 15:57:43
+010087D008D64000,"BINGO for Nintendo Switch",,playable,2020-07-23 16:17:36
+01004BA017CD6000,"Biomutant",crash,ingame,2024-05-16 15:46:36
+01002620102C6000,"BioShock 2 Remastered",services,nothing,2022-10-29 14:39:22
+0100D560102C8000,"BioShock Infinite: The Complete Edition",services-horizon;crash,nothing,2024-08-11 21:35:01
+0100AD10102B2000,"BioShock Remastered",services-horizon;crash;Needs Update,boots,2024-06-06 01:08:52
+010053B0117F8000,"Biped",nvdec,playable,2022-10-01 13:32:58
+01001B700B278000,"Bird Game +",online,playable,2022-07-17 18:41:57
+0100B6B012FF4000,"Birds and Blocks Demo",services;demo,boots,2022-04-10 04:53:03
+0100E62012D3C000,"BIT.TRIP RUNNER",,playable,2022-10-17 14:23:24
+01000AD012D3A000,"BIT.TRIP VOID",,playable,2022-10-17 14:31:23
+0100A0800EA9C000,"Bite the Bullet",,playable,2020-10-14 23:10:11
+010026E0141C8000,"Bitmaster",,playable,2022-12-13 14:05:51
+010061D00FD26000,"Biz Builder Delux",slow,playable,2020-12-15 21:36:25
+0100DD1014AB8000,"Black Book",nvdec,playable,2022-12-13 16:38:53
+010049000B69E000,"Black Future '88",nvdec,playable,2022-09-13 11:24:37
+01004BE00A682000,"Black Hole Demo",,playable,2021-02-12 23:02:17
+0100C3200E7E6000,"Black Legend",gpu;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48
+010043A012A32000,"Blackjack Hands",,playable,2020-11-30 14:04:51
+0100A0A00E660000,"Blackmoor 2",online-broken,playable,2022-09-26 20:26:34
+010032000EA2C000,"Blacksad: Under the Skin",,playable,2022-09-13 11:38:04
+01006B400C178000,"Blacksea Odyssey",nvdec,playable,2022-10-16 22:14:34
+010068E013450000,"Blacksmith of the Sand Kingdom",,playable,2022-10-16 22:37:44
+0100C4400CB7C000,"BLADE ARCUS Rebellion From Shining",,playable,2022-07-17 18:52:28
+0100EA1018A2E000,"Blade Assault",audio,nothing,2024-04-29 14:32:50
+01009CC00E224000,"Blade II - The Return Of Evil",audio;crash;UE4,ingame,2021-11-14 02:49:59
+01005950022EC000,"Blade Strangers",nvdec,playable,2022-07-17 19:02:43
+0100DF0011A6A000,"Bladed Fury",,playable,2022-10-26 11:36:26
+0100CFA00CC74000,"Blades of Time",deadlock;online,boots,2022-07-17 19:19:58
+01006CC01182C000,"Blair Witch",nvdec;UE4,playable,2022-10-01 14:06:16
+010039501405E000,"Blanc",gpu;slow,ingame,2023-02-22 14:00:13
+0100698009C6E000,"Blasphemous",nvdec,playable,2021-03-01 12:15:31
+0100302010338000,"Blasphemous Demo",,playable,2021-02-12 23:49:56
+0100225000FEE000,"Blaster Master Zero",32-bit,playable,2021-03-05 13:22:33
+01005AA00D676000,"Blaster Master Zero 2",,playable,2021-04-08 15:22:59
+010025B002E92000,"Blaster Master Zero Demo",,playable,2021-02-12 23:59:06
+0100E53013E1C000,"Blastoid Breakout",,playable,2021-01-25 23:28:02
+0100EE800C93E000,"BLAZBLUE CENTRALFICTION Special Edition",nvdec,playable,2020-12-15 23:50:04
+0100B61008208000,"BLAZBLUE CROSS TAG BATTLE",nvdec;online,playable,2021-01-05 20:29:37
+010021A00DE54000,"Blazing Beaks",,playable,2020-06-04 20:37:06
+0100C2700C252000,"Blazing Chrome",,playable,2020-11-16 04:56:54
+010091700EA2A000,"Bleep Bloop DEMO",nvdec,playable,2021-02-13 00:20:53
+010089D011310000,"Blind Men",audout,playable,2021-02-20 14:15:38
+0100743013D56000,"Blizzard® Arcade Collection",nvdec,playable,2022-08-03 19:37:26
+0100F3500A20C000,"BlobCat",,playable,2021-04-23 17:09:30
+0100E1C00DB6C000,"Block-a-Pix Deluxe Demo",,playable,2021-02-13 00:37:39
+0100C6A01AD56000,"Bloo Kid",,playable,2024-05-01 17:18:04
+010055900FADA000,"Bloo Kid 2",,playable,2024-05-01 17:16:57
+0100EE5011DB6000,"Blood and Guts Bundle",,playable,2020-06-27 12:57:35
+01007E700D17E000,"Blood Waves",gpu,ingame,2022-07-18 13:04:46
+0100E060102AA000,"Blood will be Spilled",nvdec,playable,2020-12-17 03:02:03
+01004B800AF5A000,"Bloodstained: Curse of the Moon",,playable,2020-09-04 10:42:17
+01004680124E6000,"Bloodstained: Curse of the Moon 2",,playable,2020-09-04 10:56:27
+010025A00DF2A000,"Bloodstained: Ritual of the Night",nvdec;UE4,playable,2022-07-18 14:27:35
+0100E510143EC000,"Bloody Bunny, The Game",nvdec;UE4,playable,2022-10-22 13:18:55
+0100B8400A1C6000,"Bloons TD 5",Needs Update;audio;gpu;services,boots,2021-04-18 23:02:46
+01000EB01023E000,"Blossom Tales Demo",,playable,2021-02-13 14:22:53
+0100C1000706C000,"Blossom Tales: The Sleeping King",,playable,2022-07-18 16:43:07
+010073B010F6E000,"Blue Fire",UE4,playable,2022-10-22 14:46:11
+0100721013510000,"Body of Evidence",,playable,2021-04-25 22:22:11
+0100AD1010CCE000,"Bohemian Killing",vulkan-backend-bug,playable,2022-09-26 22:41:37
+010093700ECEC000,"Boku to Nurse no Kenshuu Nisshi",,playable,2022-11-21 20:38:34
+01001D900D9AC000,"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",slow;crash;Needs Update,ingame,2022-04-24 22:46:04
+0100317014B7C000,"Bomb Rush Cyberfunk",,playable,2023-09-28 19:51:57
+01007900080B6000,"Bomber Crew",,playable,2021-06-03 14:21:28
+0100A1F012948000,"Bomber Fox",nvdec,playable,2021-04-19 17:58:13
+010087300445A000,"Bombslinger",services,menus,2022-07-19 12:53:15
+01007A200F452000,"Book of Demons",,playable,2022-09-29 12:03:43
+010054500F564000,"Bookbound Brigade",,playable,2020-10-09 14:30:29
+01002E6013ED8000,"Boom Blaster",,playable,2021-03-24 10:55:56
+010081A00EE62000,"Boomerang Fu",,playable,2024-07-28 01:12:41
+010069F0135C4000,"Boomerang Fu Demo Version",demo,playable,2021-02-13 14:38:13
+01009970122E4000,"Borderlands 3 Ultimate Edition",gpu,ingame,2024-07-15 04:38:14
+010064800F66A000,"Borderlands: Game of the Year Edition",slow;online-broken;ldn-untested,ingame,2023-07-23 21:10:36
+010096F00FF22000,"Borderlands: The Handsome Collection",,playable,2022-04-22 18:35:07
+010007400FF24000,"Borderlands: The Pre-Sequel",nvdec,playable,2021-06-09 20:17:10
+01008E500AFF6000,"Boreal Blade",gpu;ldn-untested;online,ingame,2021-06-11 15:37:14
+010092C013FB8000,"BORIS THE ROCKET",,playable,2022-10-26 13:23:09
+010076F00EBE4000,"BOSSGARD",online-broken,playable,2022-10-04 14:21:13
+010069B00EAC8000,"Bot Vice Demo",crash;demo,ingame,2021-02-13 14:52:42
+010081100FE08000,"Bouncy Bob 2",,playable,2020-07-14 16:51:53
+0100E1200DC1A000,"Bounty Battle",nvdec,playable,2022-10-04 14:40:51
+0100B4700C57E000,"Bow to Blood: Last Captain Standing",slow,playable,2020-10-23 10:51:21
+010040800BA8A000,"Box Align",crash;services,nothing,2020-04-03 17:26:56
+010018300D006000,"BOXBOY! + BOXGIRL!™",,playable,2020-11-08 01:11:54
+0100B7200E02E000,"BOXBOY! + BOXGIRL!™ Demo",demo,playable,2021-02-13 14:59:08
+0100CA400B6D0000,"BQM -BlockQuest Maker-",online,playable,2020-07-31 20:56:50
+0100E87017D0E000,"Bramble: The Mountain King",services-horizon,playable,2024-03-06 09:32:17
+01000F5003068000,"Brave Dungeon + Dark Witch Story:COMBAT",,playable,2021-01-12 21:06:34
+01006DC010326000,"BRAVELY DEFAULT™ II",gpu;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26
+0100B6801137E000,"Bravely Default™ II Demo",gpu;crash;UE4;demo,ingame,2022-09-27 05:39:47
+010081501371E000,"BraveMatch",UE4,playable,2022-10-26 13:32:15
+0100F60017D4E000,"Bravery and Greed",gpu;deadlock,boots,2022-12-04 02:23:47
+0100A42004718000,"BRAWL",nvdec;slow,playable,2020-06-04 14:23:18
+010068F00F444000,"Brawl Chess",nvdec,playable,2022-10-26 13:59:17
+0100C6800B934000,"Brawlhalla",online;opengl,playable,2021-06-03 18:26:09
+010060200A4BE000,"Brawlout",ldn-untested;online,playable,2021-06-04 17:35:35
+0100C1B00E1CA000,"Brawlout Demo",demo,playable,2021-02-13 22:46:53
+010022C016DC8000,"Breakout: Recharged",slow,ingame,2022-11-06 15:32:57
+01000AA013A5E000,"Breathedge",UE4;nvdec,playable,2021-05-06 15:44:28
+01003D50100F4000,"Breathing Fear",,playable,2020-07-14 15:12:29
+010026800BB06000,"Brick Breaker",nvdec;online,playable,2020-12-15 18:26:23
+01002AD0126AE000,"Bridge Constructor: The Walking Dead",gpu;slow,ingame,2020-12-11 17:31:32
+01000B1010D8E000,"Bridge! 3",,playable,2020-10-08 20:47:24
+010011000EA7A000,"BRIGANDINE The Legend of Runersia",,playable,2021-06-20 06:52:25
+0100703011258000,"BRIGANDINE The Legend of Runersia Demo",,playable,2021-02-14 14:44:10
+01000BF00BE40000,"Bring Them Home",UE4,playable,2021-04-12 14:14:43
+010060A00B53C000,"Broforce",ldn-untested;online,playable,2021-05-28 12:23:38
+0100EDD0068A6000,"Broken Age",,playable,2021-06-04 17:40:32
+0100A5800F6AC000,"Broken Lines",,playable,2020-10-16 00:01:37
+01001E60085E6000,"Broken Sword 5 - the Serpent's Curse",,playable,2021-06-04 17:28:59
+0100F19011226000,"Brotherhood United Demo",demo,playable,2021-02-14 21:10:57
+01000D500D08A000,"Brothers: A Tale of Two Sons",nvdec;UE4,playable,2022-07-19 14:02:22
+0100B2700E90E000,"Brunch Club",,playable,2020-06-24 13:54:07
+010010900F7B4000,"Bubble Bobble 4 Friends: The Baron is Back!",nvdec,playable,2021-06-04 15:27:55
+0100DBE00C554000,"Bubsy: Paws on Fire!",slow,ingame,2023-08-24 02:44:51
+0100089010A92000,"Bucket Knight",crash,ingame,2020-09-04 13:11:24
+0100F1B010A90000,"Bucket Knight demo",demo,playable,2021-02-14 21:23:09
+01000D200AC0C000,"Bud Spencer & Terence Hill - Slaps And Beans",,playable,2022-07-17 12:37:00
+010051A00E99E000,"Bug Fables: The Everlasting Sapling",,playable,2020-06-09 11:27:00
+01003DD00D658000,"Bulletstorm: Duke of Switch Edition",nvdec,playable,2022-03-03 08:30:24
+01006BB00E8FA000,"BurgerTime Party!",slow,playable,2020-11-21 14:11:53
+01005780106E8000,"BurgerTime Party! Demo",demo,playable,2021-02-14 21:34:16
+010078C00DB40000,"Buried Stars",,playable,2020-09-07 14:11:58
+0100DBF01000A000,"Burnout™ Paradise Remastered",nvdec;online,playable,2021-06-13 02:54:46
+010066F00C76A000,"Bury me, my Love",,playable,2020-11-07 12:47:37
+010030D012FF6000,"Bus Driver Simulator",,playable,2022-10-17 13:55:27
+0100A9101418C000,"BUSTAFELLOWS",nvdec,playable,2020-10-17 20:04:41
+0100177005C8A000,"BUTCHER",,playable,2021-01-11 18:50:17
+01000B900D8B0000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda",slow;nvdec,playable,2024-04-01 22:43:40
+010065700EE06000,"Cadence of Hyrule: Crypt of the NecroDancer Featuring The Legend of Zelda Demo",demo;gpu;nvdec,ingame,2021-02-14 21:48:15
+01005C00117A8000,"Café Enchanté",,playable,2020-11-13 14:54:25
+010060400D21C000,"Cafeteria Nipponica Demo",demo,playable,2021-02-14 22:11:35
+0100699012F82000,"Cake Bash Demo",crash;demo,ingame,2021-02-14 22:21:15
+01004FD00D66A000,"Caladrius Blaze",deadlock;nvdec,nothing,2022-12-07 16:44:37
+01004B500AB88000,"Calculation Castle : Greco's Ghostly Challenge Addition",32-bit,playable,2020-11-01 23:40:11
+010045500B212000,"Calculation Castle : Greco's Ghostly Challenge Division",32-bit,playable,2020-11-01 23:54:55
+0100ECE00B210000,"Calculation Castle : Greco's Ghostly Challenge Multiplication",32-bit,playable,2020-11-02 00:04:33
+0100A6500B176000,"Calculation Castle : Greco's Ghostly Challenge Subtraction",32-bit,playable,2020-11-01 23:47:42
+010004701504A000,"Calculator",,playable,2021-06-11 13:27:20
+010013A00E750000,"Calico",,playable,2022-10-17 14:44:28
+010046000EE40000,"Call of Cthulhu",nvdec;UE4,playable,2022-12-18 03:08:30
+0100B4700BFC6000,"Call of Juarez: Gunslinger",gpu;nvdec,ingame,2022-09-17 16:49:46
+0100593008BDC000,"Can't Drive This",,playable,2022-10-22 14:55:17
+0100E4600B166000,"Candle: The Power of the Flame",nvdec,playable,2020-05-26 12:10:20
+01001E0013208000,"Capcom Arcade Stadium",,playable,2021-03-17 05:45:14
+010094E00B52E000,"Capcom Beat 'Em Up Bundle",,playable,2020-03-23 18:31:24
+0100F6400A77E000,"CAPCOM BELT ACTION COLLECTION",online;ldn-untested,playable,2022-07-21 20:51:23
+01009BF0072D4000,"Captain Toad™: Treasure Tracker",32-bit,playable,2024-04-25 00:50:16
+01002C400B6B6000,"Captain Toad™: Treasure Tracker Demo",32-bit;demo,playable,2021-02-14 22:36:09
+0100EAE010560000,"Captain Tsubasa: Rise of New Champions",online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50
+01002320137CC000,"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",slow,playable,2021-02-14 22:45:35
+010048800D95C000,"Car Mechanic Manager",,playable,2020-07-23 18:50:17
+01007BD00AE70000,"Car Quest",deadlock,menus,2021-11-18 08:59:18
+0100DA70115E6000,"Caretaker",,playable,2022-10-04 14:52:24
+0100DD6014870000,"Cargo Crew Driver",,playable,2021-04-19 12:54:22
+010088C0092FE000,"Carnival Games®",nvdec,playable,2022-07-21 21:01:22
+01005F5011AC4000,"Carnivores: Dinosaur Hunt",,playable,2022-12-14 18:46:06
+0100B1600E9AE000,"CARRION",crash,nothing,2020-08-13 17:15:12
+01008D1001512000,"Cars 3: Driven to Win",gpu,ingame,2022-07-21 21:21:05
+0100810012A1A000,"Carto",,playable,2022-09-04 15:37:06
+0100085003A2A000,"Cartoon Network Battle Crashers",,playable,2022-07-21 21:55:40
+0100C4C0132F8000,"CASE 2: Animatronics Survival",nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03
+010066F01A0E0000,"Cassette Beasts",,playable,2024-07-22 20:38:43
+010001300D14A000,"Castle Crashers Remastered",gpu,boots,2024-08-10 09:21:20
+0100F6D01060E000,"Castle Crashers Remastered Demo",gpu;demo,boots,2022-04-10 10:57:10
+01003C100445C000,"Castle of Heart",nvdec,playable,2022-07-21 23:10:45
+0100F5500FA0E000,"Castle of no Escape 2",,playable,2022-09-13 13:51:42
+0100DA2011F18000,"Castle Pals",,playable,2021-03-04 21:00:33
+010097C00AB66000,"CastleStorm",nvdec,playable,2022-07-21 22:49:14
+010007400EB64000,"CastleStorm II",UE4;crash;nvdec,boots,2020-10-25 11:22:44
+01001A800D6BC000,"Castlevania Anniversary Collection",audio,playable,2020-05-23 11:40:29
+010076000C86E000,"Cat Girl Without Salad: Amuse-Bouche",,playable,2022-09-03 13:01:47
+0100A2F006FBE000,"Cat Quest",,playable,2020-04-02 23:09:32
+01008BE00E968000,"Cat Quest II",,playable,2020-07-06 23:52:09
+0100E86010220000,"Cat Quest II Demo",demo,playable,2021-02-15 14:11:57
+0100BAE0077E4000,"Catherine Full Body for Nintendo Switch (JP)",Needs Update;gpu,ingame,2021-02-21 18:06:11
+0100BF00112C0000,"Catherine: Full Body",nvdec,playable,2023-04-02 11:00:37
+010004400B28A000,"Cattails",,playable,2021-06-03 14:36:57
+0100B7D0022EE000,"Cave Story+",,playable,2020-05-22 09:57:25
+01001A100C0E8000,"Caveblazers",slow,ingame,2021-06-09 17:57:28
+01006DB004566000,"Caveman Warriors",,playable,2020-05-22 11:44:20
+010078700B2CC000,"Caveman Warriors Demo",demo,playable,2021-02-15 14:44:08
+01002B30028F6000,"Celeste",,playable,2020-06-17 10:14:40
+01006B000A666000,"Cendrillon palikA",gpu;nvdec,ingame,2022-07-21 22:52:24
+01007600115CE000,"CHAOS CODE -NEW SIGN OF CATASTROPHE-",crash;nvdec,boots,2022-04-04 12:24:21
+0100957016B90000,"CHAOS;HEAD NOAH",,playable,2022-06-02 22:57:19
+0100F52013A66000,"Charge Kid",gpu;audout,boots,2024-02-11 01:17:47
+0100DE200C350000,"Chasm",,playable,2020-10-23 11:03:43
+010034301A556000,"Chasm: The Rift",gpu,ingame,2024-04-29 19:02:48
+0100A5900472E000,"Chess Ultra",UE4,playable,2023-08-30 23:06:31
+0100E3C00A118000,"Chicken Assassin: Reloaded",,playable,2021-02-20 13:29:01
+0100713010E7A000,"Chicken Police – Paint it RED!",nvdec,playable,2020-12-10 15:10:11
+0100F6C00A016000,"Chicken Range",,playable,2021-04-23 12:14:23
+01002E500E3EE000,"Chicken Rider",,playable,2020-05-22 11:31:17
+0100CAC011C3A000,"Chickens Madness DEMO",UE4;demo;gpu;nvdec,ingame,2021-02-15 15:02:10
+01007D000AD8A000,"Child of Light® Ultimate Edition",nvdec,playable,2020-12-16 10:23:10
+01002DE00C250000,"Children of Morta",gpu;nvdec,ingame,2022-09-13 17:48:47
+0100C1A00AC3E000,"Children of Zodiarcs",,playable,2020-10-04 14:23:33
+010046F012A04000,"Chinese Parents",,playable,2021-04-08 12:56:41
+01005A001489A000,"Chiptune Arrange Sound(DoDonPachi Resurrection)",32-bit;crash,ingame,2024-01-25 14:37:32
+01006A30124CA000,"Chocobo GP",gpu;crash,ingame,2022-06-04 14:52:18
+0100BF600BF26000,"Chocobo's Mystery Dungeon EVERY BUDDY!",slow,playable,2020-05-26 13:53:13
+01000BA0132EA000,"Choices That Matter: And The Sun Went Out",,playable,2020-12-17 15:44:08
+,"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",gpu;nvdec,ingame,2020-09-28 17:58:04
+010039A008E76000,"ChromaGun",,playable,2020-05-26 12:56:42
+010006800E13A000,"Chronos: Before the Ashes",UE4;gpu;nvdec,ingame,2020-12-11 22:16:35
+010039700BA7E000,"Circle of Sumo",,playable,2020-05-22 12:45:21
+01008FA00D686000,"Circuits",,playable,2022-09-19 11:52:50
+0100D8800B87C000,"Cities: Skylines - Nintendo Switch™ Edition",,playable,2020-12-16 10:34:57
+0100E4200D84E000,"Citizens of Space",gpu,boots,2023-10-22 06:45:44
+0100D9C012900000,"Citizens Unite!: Earth x Space",gpu,ingame,2023-10-22 06:44:19
+01005E501284E000,"City Bus Driving Simulator",,playable,2021-06-15 21:25:59
+0100A3A00CC7E000,"CLANNAD",,playable,2021-06-03 17:01:02
+01007B501372C000,"CLANNAD Side Stories",,playable,2022-10-26 15:03:04
+01005ED0107F4000,"Clash Force",,playable,2022-10-01 23:45:48
+010009300AA6C000,"Claybook",slow;nvdec;online;UE4,playable,2022-07-22 11:11:34
+010058900F52E000,"Clea",crash,ingame,2020-12-15 16:22:56
+010045E0142A4000,"Clea 2",,playable,2021-04-18 14:25:18
+01008C100C572000,"Clock Zero ~Shuuen no Ichibyou~ Devote",nvdec,playable,2022-12-04 22:19:14
+0100DF9013AD4000,"Clocker",,playable,2021-04-05 15:05:13
+0100B7200DAC6000,"Close to the Sun",crash;nvdec;UE4,boots,2021-11-04 09:19:41
+010047700D540000,"Clubhouse Games™: 51 Worldwide Classics",ldn-works,playable,2024-05-21 16:12:57
+0100C1401CEDC000,"Clue",crash;online,menus,2020-11-10 09:23:48
+010085A00821A000,"ClusterPuck 99",,playable,2021-01-06 00:28:12
+010096900A4D2000,"Clustertruck",slow,ingame,2021-02-19 21:07:09
+01005790110F0000,"Cobra Kai: The Karate Kid Saga Continues",,playable,2021-06-17 15:59:13
+01002E700C366000,"COCOON",gpu,ingame,2024-03-06 11:33:08
+010034E005C9C000,"Code of Princess EX",nvdec;online,playable,2021-06-03 10:50:13
+010086100CDCA000,"CODE SHIFTER",,playable,2020-08-09 15:20:55
+010002400F408000,"Code: Realize ~Future Blessings~",nvdec,playable,2023-03-31 16:57:47
+0100CF800C810000,"Coffee Crisis",,playable,2021-02-20 12:34:52
+010066200E1E6000,"Coffee Talk",,playable,2020-08-10 09:48:44
+0100178009648000,"Coffin Dodgers",,playable,2021-02-20 14:57:41
+010035B01706E000,"Cold Silence",cpu;crash,nothing,2024-07-11 17:06:14
+010083E00F40E000,"Collar X Malice",nvdec,playable,2022-10-02 11:51:56
+0100E3B00F412000,"Collar X Malice -Unlimited-",nvdec,playable,2022-10-04 15:30:40
+01002A600D7FC000,"Collection of Mana",,playable,2020-10-19 19:29:45
+0100B77012266000,"COLLECTION of SaGa FINAL FANTASY LEGEND",,playable,2020-12-30 19:11:16
+010030800BC36000,"Collidalot",nvdec,playable,2022-09-13 14:09:27
+0100CA100C0BA000,"Color Zen",,playable,2020-05-22 10:56:17
+010039B011312000,"Colorgrid",,playable,2020-10-04 01:50:52
+0100A7000BD28000,"Coloring Book",,playable,2022-07-22 11:17:05
+010020500BD86000,"Colors Live",gpu;services;crash,boots,2023-02-26 02:51:07
+0100E2F0128B4000,"Colossus Down",,playable,2021-02-04 20:49:50
+0100C4D00D16A000,"Commander Keen in Keen Dreams",gpu,ingame,2022-08-04 20:34:20
+0100E400129EC000,"Commander Keen in Keen Dreams: Definitive Edition",,playable,2021-05-11 19:33:54
+010065A01158E000,"Commandos 2 - HD Remaster",gpu;nvdec,ingame,2022-08-10 21:52:27
+010015801308E000,"Conarium",UE4;nvdec,playable,2021-04-26 17:57:53
+0100971011224000,"Concept Destruction",,playable,2022-09-29 12:28:56
+010043700C9B0000,"Conduct TOGETHER!",nvdec,playable,2021-02-20 12:59:00
+01007EF00399C000,"Conga Master Party!",,playable,2020-05-22 13:22:24
+0100A5600FAC0000,"Construction Simulator 3 - Console Edition",,playable,2023-02-06 09:31:23
+0100A330022C2000,"Constructor Plus",,playable,2020-05-26 12:37:40
+0100DCA00DA7E000,"Contra Anniversary Collection",,playable,2022-07-22 11:30:12
+0100F2600D710000,"CONTRA: ROGUE CORPS",crash;nvdec;regression,menus,2021-01-07 13:23:35
+0100B8200ECA6000,"CONTRA: ROGUE CORPS Demo",gpu,ingame,2022-09-04 16:46:52
+01007D701298A000,"Contraptions",,playable,2021-02-08 18:40:50
+0100041013360000,"Control Ultimate Edition - Cloud Version",Needs Update;crash;services,nothing,2021-04-18 22:34:06
+010058800E90A000,"Convoy: A Tactical Roguelike",,playable,2020-10-15 14:43:50
+0100B82010B6C000,"Cook, Serve, Delicious! 3?!",,playable,2022-10-09 12:09:34
+010060700EFBA000,"Cooking Mama: Cookstar",crash;loader-allocator,menus,2021-11-20 03:19:35
+01001E400FD58000,"Cooking Simulator",,playable,2021-04-18 13:25:23
+0100DF9010206000,"Cooking Tycoons - 3 in 1 Bundle",,playable,2020-11-16 22:44:26
+01005350126E0000,"Cooking Tycoons 2 - 3 in 1 Bundle",,playable,2020-11-16 22:19:33
+0100C5A0115C4000,"CopperBell",,playable,2020-10-04 15:54:36
+010016400B1FE000,"Corpse Party: Blood Drive",nvdec,playable,2021-03-01 12:44:23
+0100CCB01B1A0000,"COSMIC FANTASY COLLECTION",,ingame,2024-05-21 17:56:37
+010067C00A776000,"Cosmic Star Heroine",,playable,2021-02-20 14:30:47
+01003DD00F94A000,"COTTOn Reboot! [ コットン リブート! ]",,playable,2022-05-24 16:29:24
+,"Cotton/Guardian Saturn Tribute Games",gpu,boots,2022-11-27 21:00:51
+01000E301107A000,"Couch Co-Op Bundle Vol. 2",nvdec,playable,2022-10-02 12:04:21
+0100C1E012A42000,"Country Tales",,playable,2021-06-17 16:45:39
+01003370136EA000,"Cozy Grove",gpu,ingame,2023-07-30 22:22:19
+010073401175E000,"Crash Bandicoot™ 4: It’s About Time",nvdec;UE4,playable,2024-03-17 07:13:45
+0100D1B006744000,"Crash Bandicoot™ N. Sane Trilogy",,playable,2024-02-11 11:38:14
+010007900FCE2000,"Crash Drive 2",online,playable,2020-12-17 02:45:46
+010046600BD0E000,"Crash Dummy",nvdec,playable,2020-05-23 11:12:43
+0100BF200CD74000,"Crashbots",,playable,2022-07-22 13:50:52
+010027100BD16000,"Crashlands",,playable,2021-05-27 20:30:06
+0100F9F00C696000,"Crash™ Team Racing Nitro-Fueled",gpu;nvdec;online-broken,ingame,2023-06-25 02:40:17
+0100BF7006BCA000,"Crawl",,playable,2020-05-22 10:16:05
+0100C66007E96000,"Crayola Scoot",nvdec,playable,2022-07-22 14:01:55
+01005BA00F486000,"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",,playable,2021-07-21 10:41:33
+0100D470106DC000,"CRAYON SHINCHAN The Storm Called FLAMING KASUKABE RUNNER!!",services,menus,2020-03-20 14:00:57
+01006BC00C27A000,"Crazy Strike Bowling EX",UE4;gpu;nvdec,ingame,2020-08-07 18:15:59
+0100F9900D8C8000,"Crazy Zen Mini Golf",,playable,2020-08-05 14:00:00
+0100B0E010CF8000,"Creaks",,playable,2020-08-15 12:20:52
+01007C600D778000,"Creature in the Well",UE4;gpu,ingame,2020-11-16 12:52:40
+0100A19011EEE000,"Creepy Tale",,playable,2020-12-15 21:58:03
+01005C2013B00000,"Cresteaju",gpu,ingame,2021-03-24 10:46:06
+010022D00D4F0000,"Cricket 19",gpu,ingame,2021-06-14 14:56:07
+0100387017100000,"Cricket 22 The Official Game Of The Ashes",crash,boots,2023-10-18 08:01:57
+01005640080B0000,"Crimsonland",,playable,2021-05-27 20:50:54
+0100B0400EBC4000,"Cris Tales",crash,ingame,2021-07-29 15:10:53
+01004BC0166CC000,"CRISIS CORE –FINAL FANTASY VII– REUNION",,playable,2022-12-19 15:53:59
+01004F800C4DA000,"Croc's World",,playable,2020-05-22 11:21:09
+01009DB00DE12000,"Croc's World 2",,playable,2020-12-16 20:01:40
+010025200FC54000,"Croc's World 3",,playable,2020-12-30 18:53:26
+01000F0007D92000,"Croixleur Sigma",online,playable,2022-07-22 14:26:54
+01003D90058FC000,"CrossCode",,playable,2024-02-17 10:23:19
+0100B1E00AA56000,"Crossing Souls",nvdec,playable,2021-02-20 15:42:54
+0100059012BAE000,"Crown Trick",,playable,2021-06-16 19:36:29
+0100B41013C82000,"Cruis'n Blast",gpu,ingame,2023-07-30 10:33:47
+01000CC01C108000,"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",demo,playable,2023-08-06 05:33:21
+0100CEA007D08000,"Crypt of the NecroDancer: Nintendo Switch Edition",nvdec,playable,2022-11-01 09:52:06
+0100582010AE0000,"Crysis 2 Remastered",deadlock,menus,2023-09-21 10:46:17
+0100CD3010AE2000,"Crysis 3 Remastered",deadlock,menus,2023-09-10 16:03:50
+0100E66010ADE000,"Crysis Remastered",nvdec,menus,2024-08-13 05:23:24
+0100972008234000,"Crystal Crisis",nvdec,playable,2021-02-20 13:52:44
+01006FA012FE0000,"Cthulhu Saves Christmas",,playable,2020-12-14 00:58:55
+010001600D1E8000,"Cube Creator X",crash,menus,2021-11-25 08:53:28
+010082E00F1CE000,"Cubers: Arena",nvdec;UE4,playable,2022-10-04 16:05:40
+010040D011D04000,"Cubicity",,playable,2021-06-14 14:19:51
+0100A5C00D162000,"Cuphead",,playable,2022-02-01 22:45:55
+0100F7E00DFC8000,"Cupid Parasite",gpu,ingame,2023-08-21 05:52:36
+010054501075C000,"Curious Cases",,playable,2020-08-10 09:30:48
+0100D4A0118EA000,"Curse of the Dead Gods",,playable,2022-08-30 12:25:38
+0100CE5014026000,"Curved Space",,playable,2023-01-14 22:03:50
+0100C1300DE74000,"Cyber Protocol",nvdec,playable,2020-09-28 14:47:40
+0100C1F0141AA000,"Cyber Shadow",,playable,2022-07-17 05:37:41
+01006B9013672000,"Cybxus Hearts",gpu;slow,ingame,2022-01-15 05:00:49
+010063100B2C2000,"Cytus α",nvdec,playable,2021-02-20 13:40:46
+0100B6400CA56000,"DAEMON X MACHINA™",UE4;audout;ldn-untested;nvdec,playable,2021-06-09 19:22:29
+010061300DF48000,"Dairoku: Ayakashimori",Needs Update;loader-allocator,nothing,2021-11-30 05:09:38
+0100BD2009A1C000,"Damsel",,playable,2022-09-06 11:54:39
+0100BFC002B4E000,"Dandara: Trials of Fear Edition",,playable,2020-05-26 12:42:33
+0100DFB00D808000,"Dandy Dungeon - Legend of Brave Yamada -",,playable,2021-01-06 09:48:47
+01003ED0099B0000,"Danger Mouse: The Danger Games",crash;online,boots,2022-07-22 15:49:45
+0100EFA013E7C000,"Danger Scavenger",nvdec,playable,2021-04-17 15:53:04
+0100417007F78000,"Danmaku Unlimited 3",,playable,2020-11-15 00:48:35
+,"Darius Cozmic Collection",,playable,2021-02-19 20:59:06
+010059C00BED4000,"Darius Cozmic Collection Special Edition",,playable,2022-07-22 16:26:50
+010015800F93C000,"Dariusburst - Another Chronicle EX+",online,playable,2021-04-05 14:21:43
+01003D301357A000,"Dark Arcana: The Carnival",gpu;slow,ingame,2022-02-19 08:52:28
+010083A00BF6C000,"Dark Devotion",nvdec,playable,2022-08-09 09:41:18
+0100BFF00D5AE000,"Dark Quest 2",,playable,2020-11-16 21:34:52
+01004AB00A260000,"DARK SOULS™: REMASTERED",gpu;nvdec;online-broken,ingame,2024-04-09 19:47:58
+01001FA0034E2000,"Dark Witch Music Episode: Rudymical",,playable,2020-05-22 09:44:44
+01008F1008DA6000,"Darkest Dungeon",nvdec,playable,2022-07-22 18:49:18
+0100F2300D4BA000,"Darksiders Genesis",nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25
+010071800BA98000,"Darksiders II Deathinitive Edition",gpu;nvdec;online-broken,ingame,2024-06-26 00:37:25
+0100E1400BA96000,"Darksiders Warmastered Edition",nvdec,playable,2023-03-02 18:08:09
+010033500B7B6000,"Darkwood",,playable,2021-01-08 21:24:06
+0100440012FFA000,"DARQ Complete Edition",audout,playable,2021-04-07 15:26:21
+0100BA500B660000,"Darts Up",,playable,2021-04-14 17:22:22
+0100F0B0081DA000,"Dawn of the Breakers",online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03
+0100FCF00F6CC000,"Day and Night",,playable,2020-12-17 12:30:51
+0100D0A009310000,"de Blob",nvdec,playable,2021-01-06 17:34:46
+010034E00A114000,"de Blob 2",nvdec,playable,2021-01-06 13:00:16
+01008E900471E000,"De Mambo",,playable,2021-04-10 12:39:40
+01004C400CF96000,"Dead by Daylight",nvdec;online-broken;UE4,boots,2022-09-13 14:32:13
+0100646009FBE000,"Dead Cells",,playable,2021-09-22 22:18:49
+01004C500BD40000,"Dead End Job",nvdec,playable,2022-09-19 12:48:44
+01009CC00C97C000,"DEAD OR ALIVE Xtreme 3 Scarlet",,playable,2022-07-23 17:05:06
+0100A5000F7AA000,"DEAD OR SCHOOL",nvdec,playable,2022-09-06 12:04:09
+0100A24011F52000,"Dead Z Meat",UE4;services,ingame,2021-04-14 16:50:16
+010095A011A14000,"Deadly Days",,playable,2020-11-27 13:38:55
+0100BAC011928000,"Deadly Premonition 2: A Blessing In Disguise",,playable,2021-06-15 14:12:36
+0100EBE00F22E000,"Deadly Premonition Origins",32-bit;nvdec,playable,2024-03-25 12:47:46
+,"Dear Magi - Mahou Shounen Gakka -",,playable,2020-11-22 16:45:16
+01000D60126B6000,"Death and Taxes",,playable,2020-12-15 20:27:49
+010012B011AB2000,"Death Come True",nvdec,playable,2021-06-10 22:30:49
+0100F3B00CF32000,"Death Coming",crash,nothing,2022-02-06 07:43:03
+0100AEC013DDA000,"Death end re;Quest",,playable,2023-07-09 12:19:54
+0100423009358000,"Death Road to Canada",gpu;audio;32-bit;crash,nothing,2023-06-28 15:39:26
+010085900337E000,"Death Squared",,playable,2020-12-04 13:00:15
+0100A51013550000,"Death Tales",,playable,2020-12-17 10:55:52
+0100492011A8A000,"Death's Hangover",gpu,boots,2023-08-01 22:38:06
+01009120119B4000,"Deathsmiles I・II",,playable,2024-04-08 19:29:00
+010034F00BFC8000,"Debris Infinity",nvdec;online,playable,2021-05-28 12:14:39
+010027700FD2E000,"Decay of Logos",nvdec,playable,2022-09-13 14:42:13
+01002CC0062B8000,"DEEMO",,playable,2022-07-24 11:34:33
+01008B10132A2000,"DEEMO -Reborn-",nvdec;online-broken,playable,2022-10-17 15:18:11
+010026800FA88000,"Deep Diving Adventures",,playable,2022-09-22 16:43:37
+0100FAF009562000,"Deep Ones",services,nothing,2020-04-03 02:54:19
+0100C3E00D68E000,"Deep Sky Derelicts: Definitive Edition",,playable,2022-09-27 11:21:08
+01000A700F956000,"Deep Space Rush",,playable,2020-07-07 23:30:33
+0100961011BE6000,"DeepOne",services-horizon;Needs Update,nothing,2024-01-18 15:01:05
+01008BB00F824000,"Defenders of Ekron: Definitive Edition",,playable,2021-06-11 16:31:03
+0100CDE0136E6000,"Defentron",,playable,2022-10-17 15:47:56
+010039300BDB2000,"Defunct",,playable,2021-01-08 21:33:46
+010067900B9C4000,"Degrees of Separation",,playable,2021-01-10 13:40:04
+010071C00CBA4000,"Dei Gratia no Rashinban",crash,nothing,2021-07-13 02:25:32
+010092E00E7F4000,"Deleveled",slow,playable,2020-12-15 21:02:29
+010023800D64A000,"DELTARUNE Chapter 1&2",,playable,2023-01-22 04:47:44
+010038B01D2CA000,"Dementium: The Ward",crash,boots,2024-09-02 08:28:14
+0100AB600ACB4000,"Demetrios - The BIG Cynical Adventure",,playable,2021-06-04 12:01:01
+010099D00D1A4000,"Demolish & Build 2018",,playable,2021-06-13 15:27:26
+010084600F51C000,"Demon Pit",nvdec,playable,2022-09-19 13:35:15
+0100309016E7A000,"Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",UE4,playable,2024-08-08 04:51:49
+0100A2B00BD88000,"Demon's Crystals",crash;regression,nothing,2022-12-07 16:33:17
+0100E29013818000,"Demon's Rise - Lords of Chaos",,playable,2021-04-06 16:20:06
+0100C3501094E000,"Demon's Rise - War for the Deep",,playable,2020-07-29 12:26:27
+0100161011458000,"Demon's Tier+",,playable,2021-06-09 17:25:36
+0100BE800E6D8000,"DEMON'S TILT",,playable,2022-09-19 13:22:46
+010000401313A000,"Demong Hunter",,playable,2020-12-12 15:27:08
+0100BC501355A000,"Densha de go!! Hashirou Yamanote Sen",nvdec;UE4,playable,2023-11-09 07:47:58
+0100C9100FAE2000,"Depixtion",,playable,2020-10-10 18:52:37
+01000BF00B6BC000,"Deployment",slow;online-broken,playable,2022-10-17 16:23:59
+010023600C704000,"Deponia",nvdec,playable,2021-01-26 17:17:19
+0100ED700469A000,"Deru - The Art of Cooperation",,playable,2021-01-07 16:59:59
+0100D4600D0E4000,"Descenders",gpu,ingame,2020-12-10 15:22:36
+,"Desire remaster ver.",crash,boots,2021-01-17 02:34:37
+010069500DD86000,"Destiny Connect: Tick-Tock Travelers",UE4;gpu;nvdec,ingame,2020-12-16 12:20:36
+01008BB011ED6000,"Destrobots",,playable,2021-03-06 14:37:05
+01009E701356A000,"Destroy All Humans!",gpu;nvdec;UE4,ingame,2023-01-14 22:23:53
+010030600E65A000,"Detective Dolittle",,playable,2021-03-02 14:03:59
+01009C0009842000,"Detective Gallo",nvdec,playable,2022-07-24 11:51:04
+,"Detective Jinguji Saburo Prism of Eyes",,playable,2020-10-02 21:54:41
+010007500F27C000,"Detective Pikachu™ Returns",,playable,2023-10-07 10:24:59
+010031B00CF66000,"Devil Engine",,playable,2021-06-04 11:54:30
+01002F000E8F2000,"Devil Kingdom",,playable,2023-01-31 08:58:44
+0100E8000D5B8000,"Devil May Cry",nvdec,playable,2021-01-04 19:43:08
+01007CF00D5BA000,"Devil May Cry 2",nvdec,playable,2023-01-24 23:03:20
+01007B600D5BC000,"Devil May Cry 3 Special Edition",nvdec,playable,2024-07-08 12:33:23
+01003C900EFF6000,"Devil Slayer Raksasi",,playable,2022-10-26 19:42:32
+01009EA00A320000,"Devious Dungeon",,playable,2021-03-04 13:03:06
+01003F601025E000,"Dex",nvdec,playable,2020-08-12 16:48:12
+010044000CBCA000,"Dexteritrip",,playable,2021-01-06 12:51:12
+0100AFC00E06A000,"Dezatopia",online,playable,2021-06-15 21:06:11
+01001B300B9BE000,"Diablo III: Eternal Collection",online-broken;ldn-works,playable,2023-08-21 23:48:03
+0100726014352000,"Diablo® II: Resurrected™",gpu;nvdec,ingame,2023-08-18 18:42:47
+0100F73011456000,"Diabolic",,playable,2021-06-11 14:45:08
+010027400BD24000,"DIABOLIK LOVERS CHAOS LINEAGE",gpu;Needs Update,ingame,2023-06-08 02:20:44
+0100BBF011394000,"Dicey Dungeons",gpu;audio;slow,ingame,2023-08-02 20:30:12
+0100D98005E8C000,"Die for Valhalla!",,playable,2021-01-06 16:09:14
+0100BB900B5B4000,"Dies irae Amantes amentes For Nintendo Switch",32-bit;crash,nothing,2022-02-16 07:09:05
+0100A5A00DBB0000,"Dig Dog",gpu,ingame,2021-06-02 17:17:51
+01004DE011076000,"Digerati Indie Darling Bundle Vol. 3",,playable,2022-10-02 13:01:57
+010035D0121EC000,"Digerati Presents: The Dungeon Crawl Vol. 1",slow,ingame,2021-04-18 14:04:55
+010014E00DB56000,"Digimon Story Cyber Sleuth: Complete Edition",nvdec;opengl,playable,2022-09-13 15:02:37
+0100F00014254000,"Digimon World: Next Order",,playable,2023-05-09 20:41:06
+0100B6D00DA6E000,"Ding Dong XL",,playable,2020-07-14 16:13:19
+01002E4011924000,"Dininho Adventures",,playable,2020-10-03 17:25:51
+010027E0158A6000,"Dininho Space Adventure",,playable,2023-01-14 22:43:04
+0100A8A013DA4000,"Dirt Bike Insanity",,playable,2021-01-31 13:27:38
+01004CB01378A000,"Dirt Trackin Sprint Cars",nvdec;online-broken,playable,2022-10-17 16:34:56
+0100918014B02000,"Disagaea 6: Defiance of Destiny Demo",demo,playable,2022-10-26 20:02:04
+010020700E2A2000,"Disaster Report 4: Summer Memories",nvdec;UE4,playable,2022-09-27 19:41:31
+0100510004D2C000,"Disc Jam",UE4;ldn-untested;nvdec;online,playable,2021-04-08 16:40:35
+0100C81004780000,"Disco Dodgeball - REMIX",online,playable,2020-09-28 23:24:49
+01004B100AF18000,"Disgaea 1 Complete",,playable,2023-01-30 21:45:23
+0100A9800E9B4000,"Disgaea 4 Complete+",gpu;slow,playable,2020-02-18 10:54:28
+010068C00F324000,"Disgaea 4 Complete+ Demo",nvdec,playable,2022-09-13 15:21:59
+01005700031AE000,"Disgaea 5 Complete",nvdec,playable,2021-03-04 15:32:54
+0100ABC013136000,"Disgaea 6: Defiance of Destiny",deadlock,ingame,2023-04-15 00:50:32
+0100307011D80000,"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",,playable,2021-06-08 13:20:33
+01005EE013888000,"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",gpu;demo,ingame,2022-12-06 15:27:59
+01000B70122A2000,"Disjunction",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24
+0100A2F00EEFC000,"Disney Classic Games Collection",online-broken,playable,2022-09-13 15:44:17
+0100DA201EBF8000,"Disney Epic Mickey: Rebrushed",crash,ingame,2024-09-26 22:11:51
+0100F0401435E000,"Disney Speedstorm",services,boots,2023-11-27 02:15:32
+010012800EBAE000,"Disney TSUM TSUM FESTIVAL",crash,menus,2020-07-14 14:05:28
+01009740120FE000,"DISTRAINT 2",,playable,2020-09-03 16:08:12
+010075B004DD2000,"DISTRAINT: Deluxe Edition",,playable,2020-06-15 23:42:24
+010027400CDC6000,"Divinity: Original Sin 2 - Definitive Edition",services;crash;online-broken;regression,menus,2023-08-13 17:20:03
+01001770115C8000,"Dodo Peak",nvdec;UE4,playable,2022-10-04 16:13:05
+010077B0100DA000,"Dogurai",,playable,2020-10-04 02:40:16
+010048100D51A000,"Dokapon Up! Mugen no Roulette",gpu;Needs Update,menus,2022-12-08 19:39:10
+01005EE00BC78000,"Dokuro (ドクロ)",nvdec,playable,2020-12-17 14:47:09
+010007200AC0E000,"Don't Die, Mr Robot!",nvdec,playable,2022-09-02 18:34:38
+0100E470067A8000,"Don't Knock Twice",,playable,2024-05-08 22:37:58
+0100C4D00B608000,"Don't Sink",gpu,ingame,2021-02-26 15:41:11
+0100751007ADA000,"Don't Starve: Nintendo Switch Edition",nvdec,playable,2022-02-05 20:43:34
+010088B010DD2000,"Dongo Adventure",,playable,2022-10-04 16:22:26
+0100C1F0051B6000,"Donkey Kong Country™: Tropical Freeze",,playable,2024-08-05 16:46:10
+0100F2C00F060000,"Doodle Derby",,boots,2020-12-04 22:51:48
+0100416004C00000,"DOOM",gpu;slow;nvdec;online-broken,ingame,2024-09-23 15:40:07
+010018900DD00000,"DOOM (1993)",nvdec;online-broken,menus,2022-09-06 13:32:19
+01008CB01E52E000,"DOOM + DOOM II",opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01
+010029D00E740000,"DOOM 3",crash,menus,2024-08-03 05:25:47
+01005D700E742000,"DOOM 64",nvdec;vulkan,playable,2020-10-13 23:47:28
+0100D4F00DD02000,"DOOM II (Classic)",nvdec;online,playable,2021-06-03 20:10:01
+0100B1A00D8CE000,"DOOM® Eternal",gpu;slow;nvdec;online-broken,ingame,2024-08-28 15:57:17
+01005ED00CD70000,"Door Kickers: Action Squad",online-broken;ldn-broken,playable,2022-09-13 16:28:53
+010073700E412000,"DORAEMON STORY OF SEASONS",nvdec,playable,2020-07-13 20:28:11
+0100F7300BD8E000,"Double Cross",,playable,2021-01-07 15:34:22
+0100B1500E9F2000,"Double Dragon & Kunio-kun: Retro Brawler Bundle",,playable,2020-09-01 12:48:46
+01001AD00E49A000,"DOUBLE DRAGON Ⅲ: The Sacred Stones",online,playable,2021-06-11 15:41:44
+01005B10132B2000,"Double Dragon Neon",gpu;audio;32-bit,ingame,2022-09-20 18:00:20
+01000F400C1A4000,"Double Kick Heroes",gpu,ingame,2020-10-03 14:33:59
+0100A5D00C7C0000,"Double Pug Switch",nvdec,playable,2022-10-10 10:59:35
+0100FC000EE10000,"Double Switch - 25th Anniversary Edition",nvdec,playable,2022-09-19 13:41:50
+0100B6600FE06000,"Down to Hell",gpu;nvdec,ingame,2022-09-19 14:01:26
+010093D00C726000,"Downwell",,playable,2021-04-25 20:05:24
+0100ED000D390000,"Dr Kawashima's Brain Training",services,ingame,2023-06-04 00:06:46
+01001B80099F6000,"Dracula's Legacy",nvdec,playable,2020-12-10 13:24:25
+0100566009238000,"DragoDino",gpu;nvdec,ingame,2020-08-03 20:49:16
+0100DBC00BD5A000,"Dragon Audit",crash,ingame,2021-05-16 14:24:46
+0100A250097F0000,"DRAGON BALL FighterZ",UE4;ldn-broken;nvdec;online,playable,2021-06-11 16:19:04
+010078D000F88000,"DRAGON BALL XENOVERSE 2 for Nintendo Switch",gpu;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01
+010051C0134F8000,"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",vulkan-backend-bug,playable,2024-08-28 00:03:50
+010099B00A2DC000,"Dragon Blaze for Nintendo Switch",32-bit,playable,2020-10-14 11:11:28
+010089700150E000,"Dragon Marked for Death: Advanced Attackers",ldn-untested;audout,playable,2022-03-10 06:44:34
+0100EFC00EFB2000,"DRAGON QUEST",gpu,boots,2021-11-09 03:31:32
+010008900705C000,"Dragon Quest Builders™",gpu;nvdec,ingame,2023-08-14 09:54:36
+010042000A986000,"DRAGON QUEST BUILDERS™ 2",,playable,2024-04-19 16:36:38
+0100CD3000BDC000,"Dragon Quest Heroes I + II (JP)",nvdec,playable,2021-04-08 14:27:16
+010062200EFB4000,"DRAGON QUEST II: Luminaries of the Legendary Line",,playable,2022-09-13 16:44:11
+01003E601E324000,"DRAGON QUEST III HD-2D Remake",vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27
+010015600EFB6000,"DRAGON QUEST III: The Seeds of Salvation",gpu,boots,2021-11-09 03:38:34
+0100A77018EA0000,"DRAGON QUEST MONSTERS: The Dark Prince",,playable,2023-12-29 16:10:05
+0100217014266000,"Dragon Quest Treasures",gpu;UE4,ingame,2023-05-09 11:16:52
+0100E2E0152E4000,"Dragon Quest X Awakening Five Races Offline",nvdec;UE4,playable,2024-08-20 10:04:24
+01006C300E9F0000,"DRAGON QUEST® XI S: Echoes of an Elusive Age – Definitive Edition",UE4,playable,2021-11-27 12:27:11
+010032C00AC58000,"Dragon's Dogma: Dark Arisen",,playable,2022-07-24 12:58:33
+010027100C544000,"Dragon's Lair Trilogy",nvdec,playable,2021-01-13 22:12:07
+0100DA0006F50000,"DragonFangZ - The Rose & Dungeon of Time",,playable,2020-09-28 21:35:18
+0100F7800A434000,"Drawful 2",,ingame,2022-07-24 13:50:21
+0100B7E0102E4000,"Drawngeon: Dungeons of Ink and Paper",gpu,ingame,2022-09-19 15:41:25
+01008B20129F2000,"Dream",,playable,2020-12-15 19:55:07
+01000AA0093DC000,"Dream Alone",nvdec,playable,2021-01-27 19:41:50
+010034D00F330000,"DreamBall",UE4;crash;gpu,ingame,2020-08-05 14:45:25
+010058B00F3C0000,"Dreaming Canvas",UE4;gpu,ingame,2021-06-13 22:50:07
+0100D24013466000,"DREAMO",UE4,playable,2022-10-17 18:25:28
+0100ED200B6FC000,"DreamWorks Dragons Dawn of New Riders",nvdec,playable,2021-01-27 20:05:26
+0100236011B4C000,"DreamWorks Spirit Lucky’s Big Adventure",,playable,2022-10-27 13:30:52
+010058C00A916000,"Drone Fight",,playable,2022-07-24 14:31:56
+010052000A574000,"Drowning",,playable,2022-07-25 14:28:26
+0100652012F58000,"Drums",,playable,2020-12-17 17:21:51
+01005BC012C66000,"Duck Life Adventure",,playable,2022-10-10 11:27:03
+01007EF00CB88000,"Duke Nukem 3D: 20th Anniversary World Tour",32-bit;ldn-untested,playable,2022-08-19 22:22:40
+010068D0141F2000,"Dull Grey",,playable,2022-10-27 13:40:38
+0100926013600000,"Dungeon Nightmares 1 + 2 Collection",,playable,2022-10-17 18:54:22
+010034300F0E2000,"Dungeon of the Endless",nvdec,playable,2021-05-27 19:16:26
+0100E79009A94000,"Dungeon Stars",,playable,2021-01-18 14:28:37
+0100BE801360E000,"Dungeons & Bombs",,playable,2021-04-06 12:46:22
+0100EC30140B6000,"Dunk Lords",,playable,2024-06-26 00:07:26
+010011C00E636000,"Dusk Diver",crash;UE4,boots,2021-11-06 09:01:30
+0100B6E00A420000,"Dust: An Elysian Tail",,playable,2022-07-25 15:28:12
+0100D7E012F2E000,"Dustoff Z",,playable,2020-12-04 23:22:29
+01008C8012920000,"Dying Light: Definitive Edition",services-horizon,boots,2024-03-11 10:43:32
+01007DD00DFDE000,"Dyna Bomb",,playable,2020-06-07 13:26:55
+0100E9A00CB30000,"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",nvdec,playable,2024-06-26 00:16:30
+010008900BC5A000,"DYSMANTLE",gpu,ingame,2024-07-15 16:24:12
+010054E01D878000,"EA SPORTS FC 25",crash,ingame,2024-09-25 21:07:50
+0100BDB01A0E6000,"EA SPORTS FC™ 24",,boots,2023-10-04 18:32:59
+01001C8016B4E000,"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",gpu;crash,ingame,2024-06-10 23:33:05
+01005DE00D05C000,"EA SPORTS™ FIFA 20 Nintendo Switch™ Legacy Edition",gpu;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20
+010037400C7DA000,"Eagle Island Twist",,playable,2021-04-10 13:15:42
+0100B9E012992000,"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",UE4,playable,2022-12-07 12:59:16
+0100298014030000,"Earth Defense Force: World Brothers",UE4,playable,2022-10-27 14:13:31
+01009B7006C88000,"EARTH WARS",,playable,2021-06-05 11:18:33
+0100DFC00E472000,"Earthfall: Alien Horde",nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37
+01006E50042EA000,"EARTHLOCK",,playable,2021-06-05 11:51:02
+0100A2E00BB0C000,"EarthNight",,playable,2022-09-19 21:02:20
+0100DCE00B756000,"Earthworms",,playable,2022-07-25 16:28:55
+0100E3500BD84000,"Earthworms Demo",,playable,2021-01-05 16:57:11
+0100ECF01800C000,"Easy Come Easy Golf",online-broken;regression,playable,2024-04-04 16:15:00
+0100A9B009678000,"EAT BEAT DEADSPIKE-san",audio;Needs Update,playable,2022-12-02 19:25:29
+0100BCA016636000,"eBaseball Powerful Pro Yakyuu 2022",gpu;services-horizon;crash,nothing,2024-05-26 23:07:19
+01001F20100B8000,"Eclipse: Edge of Light",,playable,2020-08-11 23:06:29
+0100E0A0110F4000,"eCrossminton",,playable,2020-07-11 18:24:27
+0100ABE00DB4E000,"Edna & Harvey: Harvey's New Eyes",nvdec,playable,2021-01-26 14:36:08
+01004F000B716000,"Edna & Harvey: The Breakout – Anniversary Edition",crash;nvdec,ingame,2022-08-01 16:59:56
+01002550129F0000,"Effie",,playable,2022-10-27 14:36:39
+0100CC0010A46000,"Ego Protocol: Remastered",nvdec,playable,2020-12-16 20:16:35
+,"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",,playable,2020-11-12 00:11:50
+01003AD013BD2000,"Eight Dragons",nvdec,playable,2022-10-27 14:47:28
+010020A01209C000,"El Hijo - A Wild West Tale",nvdec,playable,2021-04-19 17:44:08
+0100B5B00EF38000,"Elden: Path of the Forgotten",,playable,2020-12-15 00:33:19
+010068F012880000,"Eldrador® Creatures",slow,playable,2020-12-12 12:35:35
+010008E010012000,"ELEA: Paradigm Shift",UE4;crash,nothing,2020-10-04 19:07:43
+0100A6700AF10000,"Element",,playable,2022-07-25 17:17:16
+0100128003A24000,"Elliot Quest",,playable,2022-07-25 17:46:14
+010041A00FEC6000,"Ember",nvdec,playable,2022-09-19 21:16:11
+010071B012940000,"Embracelet",,playable,2020-12-04 23:45:00
+010017B0102A8000,"Emma: Lost in Memories",nvdec,playable,2021-01-28 16:19:10
+010068300E08E000,"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo -",gpu;nvdec,ingame,2022-11-20 16:18:45
+01007A4008486000,"Enchanting Mahjong Match",gpu,ingame,2020-04-17 22:01:31
+01004F3011F92000,"Endless Fables: Dark Moor",gpu;nvdec,ingame,2021-03-07 15:31:03
+010067B017588000,"Endless Ocean™ Luminous",services-horizon;crash,ingame,2024-05-30 02:05:57
+0100B8700BD14000,"Energy Cycle Edge",services,ingame,2021-11-30 05:02:31
+0100A8E0090B0000,"Energy Invasion",,playable,2021-01-14 21:32:26
+0100C6200A0AA000,"Enigmatis 2: The Mists of Ravenwood",crash;regression,boots,2021-06-06 15:15:30
+01009D60076F6000,"Enter the Gungeon",,playable,2022-07-25 20:28:33
+0100262009626000,"Epic Loon",nvdec,playable,2022-07-25 22:06:13
+01000FA0149B6000,"EQI",nvdec;UE4,playable,2022-10-27 16:42:32
+0100E95010058000,"EQQO",UE4;nvdec,playable,2021-06-13 23:10:51
+01000E8010A98000,"Escape First",,playable,2020-10-20 22:46:53
+010021201296A000,"Escape First 2",,playable,2021-03-24 11:59:41
+0100FEF00F0AA000,"Escape from Chernobyl",crash,boots,2022-09-19 21:36:58
+010023E013244000,"Escape from Life Inc",,playable,2021-04-19 17:34:09
+010092901203A000,"Escape From Tethys",,playable,2020-10-14 22:38:25
+0100B0F011A84000,"Escape Game Fort Boyard",,playable,2020-07-12 12:45:43
+0100F9600E746000,"ESP Ra.De. Psi",audio;slow,ingame,2024-03-07 15:05:08
+010073000FE18000,"Esports powerful pro yakyuu 2020",gpu;crash;Needs More Attention,ingame,2024-04-29 05:34:14
+01004F9012FD8000,"Estranged: The Departure",nvdec;UE4,playable,2022-10-24 10:37:58
+0100CB900B498000,"Eternum Ex",,playable,2021-01-13 20:28:32
+010092501EB2C000,"Europa (Demo)",gpu;crash;UE4,ingame,2024-04-23 10:47:12
+01007BE0160D6000,"EVE ghost enemies",gpu,ingame,2023-01-14 03:13:30
+010095E01581C000,"even if TEMPEST",gpu,ingame,2023-06-22 23:50:25
+010072C010002000,"Event Horizon: Space Defense",,playable,2020-07-31 20:31:24
+0100DCF0093EC000,"Everspace™ - Stellar Edition",UE4,playable,2022-08-14 01:16:24
+01006F900BF8E000,"Everybody 1-2-Switch!™",services;deadlock,nothing,2023-07-01 05:52:55
+010080600B53E000,"Evil Defenders",nvdec,playable,2020-09-28 17:11:00
+01006A800FA22000,"Evolution Board Game",online,playable,2021-01-20 22:37:56
+0100F2D00C7DE000,"Exception",online-broken,playable,2022-09-20 12:47:10
+0100DD30110CC000,"Exit the Gungeon",,playable,2022-09-22 17:04:43
+0100A82013976000,"Exodemon",,playable,2022-10-27 20:17:52
+0100FA800A1F4000,"EXORDER",nvdec,playable,2021-04-15 14:17:20
+01009B7010B42000,"Explosive Jake",crash,boots,2021-11-03 07:48:32
+0100EFE00A3C2000,"Eyes: The Horror Game",,playable,2021-01-20 21:59:46
+0100E3D0103CE000,"Fable of Fairy Stones",,playable,2021-05-05 21:04:54
+01004200189F4000,"Factorio",deadlock,boots,2024-06-11 19:26:16
+010073F0189B6000,"Fae Farm",,playable,2024-08-25 15:12:12
+010069100DB08000,"Faeria",nvdec;online-broken,menus,2022-10-04 16:44:41
+01008A6009758000,"Fairune Collection",,playable,2021-06-06 15:29:56
+0100F6D00B8F2000,"Fairy Fencer F™: Advent Dark Force",32-bit;crash;nvdec,ingame,2023-04-16 03:53:48
+0100CF900FA3E000,"FAIRY TAIL",nvdec,playable,2022-10-04 23:00:32
+01005A600BE60000,"Fall of Light: Darkest Edition",slow;nvdec,ingame,2024-07-24 04:19:26
+0100AA801258C000,"Fallen Legion Revenants",crash,menus,2021-11-25 08:53:20
+0100D670126F6000,"Famicom Detective Club™: The Girl Who Stands Behind",nvdec,playable,2022-10-27 20:41:40
+010033F0126F4000,"Famicom Detective Club™: The Missing Heir",nvdec,playable,2022-10-27 20:56:23
+010060200FC44000,"Family Feud®",online-broken,playable,2022-10-10 11:42:21
+0100034012606000,"Family Mysteries: Poisonous Promises",audio;crash,menus,2021-11-26 12:35:06
+010017C012726000,"Fantasy Friends",,playable,2022-10-17 19:42:39
+0100767008502000,"FANTASY HERO ~unsigned legacy~",,playable,2022-07-26 12:28:52
+0100944003820000,"Fantasy Strike",online,playable,2021-02-27 01:59:18
+01000E2012F6E000,"Fantasy Tavern Sextet -Vol.1 New World Days-",gpu;crash;Needs Update,ingame,2022-12-05 16:48:00
+01005C10136CA000,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;crash,ingame,2021-11-06 02:57:29
+010022700E7D6000,"FAR: Lone Sails",,playable,2022-09-06 16:33:05
+0100C9E00FD62000,"Farabel",,playable,2020-08-03 17:47:28
+,"Farm Expert 2019 for Nintendo Switch",,playable,2020-07-09 21:42:57
+01000E400ED98000,"Farm Mystery",nvdec,playable,2022-09-06 16:46:47
+010086B00BB50000,"Farm Together",,playable,2021-01-19 20:01:19
+0100EB600E914000,"Farming Simulator 20",nvdec,playable,2021-06-13 10:52:44
+0100D04004176000,"Farming Simulator Nintendo Switch Edition",nvdec,playable,2021-01-19 14:46:44
+0100E99019B3A000,"Fashion Dreamer",,playable,2023-11-12 06:42:52
+01009510001CA000,"FAST RMX",slow;crash;ldn-partial,ingame,2024-06-22 20:48:58
+0100BEB015604000,"FATAL FRAME: Maiden of Black Water",,playable,2023-07-05 16:01:40
+0100DAE019110000,"FATAL FRAME: Mask of the Lunar Eclipse",Incomplete,playable,2024-04-11 06:01:30
+010051400B17A000,"Fate/EXTELLA LINK",ldn-untested;nvdec,playable,2021-01-27 00:45:50
+010053E002EA2000,"Fate/EXTELLA: The Umbral Star",gpu;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55
+0100F6200B7D4000,"fault - milestone one",nvdec,playable,2021-03-24 10:41:49
+01005AC0068F6000,"Fear Effect Sedna",nvdec,playable,2021-01-19 13:10:33
+0100F5501CE12000,"Fearmonium",crash,boots,2024-03-06 11:26:11
+0100E4300CB3E000,"Feather",,playable,2021-06-03 14:11:27
+010003B00D3A2000,"Felix The Reaper",nvdec,playable,2020-10-20 23:43:03
+0100AA3009738000,"Feudal Alloy",,playable,2021-01-14 08:48:14
+01008D900B984000,"FEZ",gpu,ingame,2021-04-18 17:10:16
+01007510040E8000,"FIA European Truck Racing Championship",nvdec,playable,2022-09-06 17:51:59
+0100F7B002340000,"FIFA 18",gpu;online-broken;ldn-untested,ingame,2022-07-26 12:43:59
+0100FFA0093E8000,"FIFA 19",gpu;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07
+01000A001171A000,"FIFA 21 Nintendo Switch™ Legacy Edition",gpu;online-broken,ingame,2023-12-11 22:10:19
+0100216014472000,"FIFA 22 Nintendo Switch™ Legacy Edition",gpu,ingame,2024-03-02 14:13:48
+01006980127F0000,"Fight Crab",online-broken;ldn-untested,playable,2022-10-05 10:24:04
+010047E010B3E000,"Fight of Animals",online,playable,2020-10-15 15:08:28
+0100C7D00E730000,"Fight'N Rage",,playable,2020-06-16 23:35:19
+0100D02014048000,"FIGHTING EX LAYER ANOTHER DASH",online-broken;UE4,playable,2024-04-07 10:22:33
+0100118009C68000,"Figment",nvdec,playable,2021-01-27 19:36:05
+010095600AA36000,"Fill-a-Pix: Phil's Epic Adventure",,playable,2020-12-22 13:48:22
+0100C3A00BB76000,"Fimbul",nvdec,playable,2022-07-26 13:31:47
+0100C8200E942000,"Fin and the Ancient Mystery",nvdec,playable,2020-12-17 16:40:39
+01000EA014150000,"FINAL FANTASY",crash,nothing,2024-09-05 20:55:30
+01006B7014156000,"FINAL FANTASY II",crash,nothing,2024-04-13 19:18:04
+01006F000B056000,"FINAL FANTASY IX",audout;nvdec,playable,2021-06-05 11:35:00
+0100AA201415C000,"FINAL FANTASY V",,playable,2023-04-26 01:11:55
+0100A5B00BDC6000,"FINAL FANTASY VII",,playable,2022-12-09 17:03:30
+01008B900DC0A000,"FINAL FANTASY VIII Remastered",nvdec,playable,2023-02-15 10:57:48
+0100BC300CB48000,"FINAL FANTASY X/X-2 HD Remaster",gpu,ingame,2022-08-16 20:29:26
+0100EB100AB42000,"FINAL FANTASY XII THE ZODIAC AGE",opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54
+010068F00AA78000,"FINAL FANTASY XV POCKET EDITION HD",,playable,2021-01-05 17:52:08
+0100CE4010AAC000,"FINAL FANTASY® CRYSTAL CHRONICLES™ Remastered Edition",,playable,2023-04-02 23:39:12
+01001BA00AE4E000,"Final Light, The Prison",,playable,2020-07-31 21:48:44
+0100FF100FB68000,"Finding Teddy 2 : Definitive Edition",gpu,ingame,2024-04-19 16:51:33
+0100F4E013AAE000,"Fire & Water",,playable,2020-12-15 15:43:20
+0100F15003E64000,"Fire Emblem Warriors",nvdec,playable,2023-05-10 01:53:10
+010071F0143EA000,"Fire Emblem Warriors: Three Hopes",gpu;nvdec,ingame,2024-05-01 07:07:42
+0100A6301214E000,"Fire Emblem™ Engage",amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26
+0100A12011CC8000,"Fire Emblem™: Shadow Dragon & the Blade of Light",,playable,2022-10-17 19:49:14
+010055D009F78000,"Fire Emblem™: Three Houses",online-broken,playable,2024-09-14 23:53:50
+010025C014798000,"Fire: Ungh’s Quest",nvdec,playable,2022-10-27 21:41:26
+0100434003C58000,"Firefighters – The Simulation",,playable,2021-02-19 13:32:05
+0100BB1009E50000,"Firefighters: Airport Fire Department",,playable,2021-02-15 19:17:00
+0100AC300919A000,"Firewatch",,playable,2021-06-03 10:56:38
+0100BA9012B36000,"Firework",,playable,2020-12-04 20:20:09
+0100DEB00ACE2000,"Fishing Star World Tour",,playable,2022-09-13 19:08:51
+010069800D292000,"Fishing Universe Simulator",,playable,2021-04-15 14:00:43
+0100807008868000,"Fit Boxing",,playable,2022-07-26 19:24:55
+0100E7300AAD4000,"Fitness Boxing",,playable,2021-04-14 20:33:33
+0100073011382000,"Fitness Boxing 2: Rhythm & Exercise",crash,ingame,2021-04-14 20:40:48
+0100C7E0134BE000,"Five Dates",nvdec,playable,2020-12-11 15:17:11
+0100B6200D8D2000,"Five Nights at Freddy's",,playable,2022-09-13 19:26:36
+01004EB00E43A000,"Five Nights at Freddy's 2",,playable,2023-02-08 15:48:24
+010056100E43C000,"Five Nights at Freddy's 3",,playable,2022-09-13 20:58:07
+010083800E43E000,"Five Nights at Freddy's 4",,playable,2023-08-19 07:28:03
+0100F7901118C000,"Five Nights at Freddy's: Help Wanted",UE4,playable,2022-09-29 12:40:09
+01009060193C4000,"Five Nights at Freddy's: Security Breach",gpu;crash;mac-bug,ingame,2023-04-23 22:33:28
+01003B200E440000,"Five Nights at Freddy's: Sister Location",,playable,2023-10-06 09:00:58
+010038200E088000,"Flan",crash;regression,ingame,2021-11-17 07:39:28
+01000A0004C50000,"FLASHBACK™",nvdec,playable,2020-05-14 13:57:29
+0100C53004C52000,"Flat Heroes",gpu,ingame,2022-07-26 19:37:37
+0100B54012798000,"Flatland: Prologue",,playable,2020-12-11 20:41:12
+0100307004B4C000,"Flinthook",online,playable,2021-03-25 20:42:29
+010095A004040000,"Flip Wars",services;ldn-untested,ingame,2022-05-02 15:39:18
+01009FB002B2E000,"Flipping Death",,playable,2021-02-17 16:12:30
+0100D1700ACFC000,"Flood of Light",,playable,2020-05-15 14:15:25
+0100DF9005E7A000,"Floor Kids",nvdec,playable,2024-08-18 19:38:49
+010040700E8FC000,"Florence",,playable,2020-09-05 01:22:30
+0100F5D00CD58000,"Flowlines VS",,playable,2020-12-17 17:01:53
+010039C00E2CE000,"Flux8",nvdec,playable,2020-06-19 20:55:11
+0100EDA00BBBE000,"Fly O'Clock",,playable,2020-05-17 13:39:52
+0100FC300F4A4000,"Fly Punch Boom!",online,playable,2020-06-21 12:06:11
+0100419013A8A000,"Flying Hero X",crash,menus,2021-11-17 07:46:58
+010056000BA1C000,"Fobia",,playable,2020-12-14 21:05:23
+0100F3900D0F0000,"Food Truck Tycoon",,playable,2022-10-17 20:15:55
+01007CF013152000,"Football Manager 2021 Touch",gpu,ingame,2022-10-17 20:08:23
+0100EDC01990E000,"Football Manager 2023 Touch",gpu,ingame,2023-08-01 03:40:53
+010097F0099B4000,"Football Manager Touch 2018",,playable,2022-07-26 20:17:56
+010069400B6BE000,"For The King",nvdec,playable,2021-02-15 18:51:44
+01001D200BCC4000,"Forager",crash,menus,2021-11-24 07:10:17
+0100AE001256E000,"FORECLOSED",crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12
+010044B00E70A000,"Foregone",deadlock,ingame,2020-12-17 15:26:53
+010059E00B93C000,"Forgotton Anne",nvdec,playable,2021-02-15 18:28:07
+01008EA00405C000,"forma.8",nvdec,playable,2020-11-15 01:04:32
+010025400AECE000,"Fortnite",services-horizon,nothing,2024-04-06 18:23:25
+0100AAE01E39C000,"Fortress Challenge - Fort Boyard",nvdec;slow,playable,2020-05-15 13:22:53
+0100CA500756C000,"Fossil Hunters",nvdec,playable,2022-07-27 11:37:20
+01008A100A028000,"FOX n FORESTS",,playable,2021-02-16 14:27:49
+0100D2501001A000,"FoxyLand",,playable,2020-07-29 20:55:20
+01000AC010024000,"FoxyLand 2",,playable,2020-08-06 14:41:30
+01004200099F2000,"Fractured Minds",,playable,2022-09-13 21:21:40
+0100F1A00A5DC000,"FRAMED Collection",nvdec,playable,2022-07-27 11:48:15
+0100AC40108D8000,"Fred3ric",,playable,2021-04-15 13:30:31
+01000490067AE000,"Frederic 2: Evil Strikes Back",,playable,2020-07-23 16:44:37
+01005B1006988000,"Frederic: Resurrection of Music",nvdec,playable,2020-07-23 16:59:53
+010082B00EE50000,"Freedom Finger",nvdec,playable,2021-06-09 19:31:30
+0100EB800B614000,"Freedom Planet",,playable,2020-05-14 12:23:06
+010003F00BD48000,"Friday the 13th: Killer Puzzle",,playable,2021-01-28 01:33:38
+010092A00C4B6000,"Friday the 13th: The Game Ultimate Slasher Edition",nvdec;online-broken;UE4,playable,2022-09-06 17:33:27
+0100F200178F4000,"FRONT MISSION 1st: Remake",,playable,2023-06-09 07:44:24
+0100861012474000,"Frontline Zed",,playable,2020-10-03 12:55:59
+0100B5300B49A000,"Frost",,playable,2022-07-27 12:00:36
+010038A007AA4000,"FruitFall Crush",,playable,2020-10-20 11:33:33
+01008D800AE4A000,"FullBlast",,playable,2020-05-19 10:34:13
+010002F00CC20000,"FUN! FUN! Animal Park",,playable,2021-04-14 17:08:52
+0100A8F00B3D0000,"FunBox Party",,playable,2020-05-15 12:07:02
+0100E7B00BF24000,"Funghi Explosion",,playable,2020-11-23 14:17:41
+01008E10130F8000,"Funimation",gpu,boots,2021-04-08 13:08:17
+0100EA501033C000,"Funny Bunny Adventures",,playable,2020-08-05 13:46:56
+01000EC00AF98000,"Furi",,playable,2022-07-27 12:21:20
+0100A6B00D4EC000,"Furwind",,playable,2021-02-19 19:44:08
+0100ECE00C0C4000,"Fury Unleashed",crash;services,ingame,2020-10-18 11:52:40
+010070000ED9E000,"Fury Unleashed Demo",,playable,2020-10-08 20:09:21
+0100E1F013674000,"FUSER™",nvdec;UE4,playable,2022-10-17 20:58:32
+,"Fushigi no Gensokyo Lotus Labyrinth",Needs Update;audio;gpu;nvdec,ingame,2021-01-20 15:30:02
+01003C300B274000,"Futari de! Nyanko Daisensou",,playable,2024-01-05 22:26:52
+010055801134E000,"FUZE Player",online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53
+0100EAD007E98000,"FUZE4 Nintendo Switch",vulkan-backend-bug,playable,2022-09-06 19:25:01
+010067600F1A0000,"FuzzBall",crash,nothing,2021-03-29 20:13:21
+,"G-MODE Archives 06 The strongest ever Julia Miyamoto",,playable,2020-10-15 13:06:26
+0100EB10108EA000,"G.I. Joe: Operation Blackout",UE4;crash,boots,2020-11-21 12:37:44
+010048600B14E000,"Gal Metal",,playable,2022-07-27 20:57:48
+010024700901A000,"Gal*Gun 2",nvdec;UE4,playable,2022-07-27 12:45:37
+0100047013378000,"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",nvdec,playable,2022-10-17 23:50:46
+0100C9800A454000,"GALAK-Z: Variant S",online-broken,boots,2022-07-29 11:59:12
+0100C62011050000,"Game Boy™ – Nintendo Switch Online",,playable,2023-03-21 12:43:48
+010012F017576000,"Game Boy™ Advance – Nintendo Switch Online",,playable,2023-02-16 20:38:15
+0100FA5010788000,"Game Builder Garage™",,ingame,2024-04-20 21:46:22
+0100AF700BCD2000,"Game Dev Story",,playable,2020-05-20 00:00:38
+01006BD00F8C0000,"Game Doraemon Nobita no Shin Kyoryu",gpu,ingame,2023-02-27 02:03:28
+01000FA00A4E4000,"Garage",,playable,2020-05-19 20:59:53
+010061E00E8BE000,"Garfield Kart Furious Racing",ldn-works;loader-allocator,playable,2022-09-13 21:40:25
+0100EA001069E000,"Gates Of Hell",slow,playable,2020-10-22 12:44:26
+010025500C098000,"Gato Roboto",,playable,2023-01-20 15:04:11
+010065E003FD8000,"Gear.Club Unlimited",,playable,2021-06-08 13:03:19
+010072900AFF0000,"Gear.Club Unlimited 2",nvdec;online-broken,playable,2022-07-29 12:52:16
+01000F000D9F0000,"Geki Yaba Runner Anniversary Edition",,playable,2021-02-19 18:59:07
+010052A00942A000,"Gekido Kintaro's Revenge",,playable,2020-10-27 12:44:05
+01009D000AF3A000,"Gelly Break Deluxe",UE4,playable,2021-03-03 16:04:02
+01001A4008192000,"Gem Smashers",nvdec,playable,2021-06-08 13:40:51
+010014901144C000,"Genetic Disaster",,playable,2020-06-19 21:41:12
+0100D7E0110B2000,"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",32-bit,playable,2022-06-06 00:42:09
+010000300C79C000,"GensokyoDefenders",online-broken;UE4,playable,2022-07-29 13:48:12
+0100AC600EB4C000,"Gensou Rougoku no Kaleidscope",crash,menus,2021-11-24 08:45:07
+01007FC012FD4000,"Georifters",UE4;crash;nvdec,menus,2020-12-04 22:30:50
+010058F010296000,"GERRRMS",,playable,2020-08-15 11:32:52
+01006F30129F8000,"Get 10 quest",,playable,2020-08-03 12:48:39
+0100B5B00E77C000,"Get Over Here",,playable,2022-10-28 11:53:52
+0100EEB005ACC000,"Ghost 1.0",,playable,2021-02-19 20:48:47
+010063200C588000,"Ghost Blade HD",online-broken,playable,2022-09-13 21:51:21
+010057500E744000,"Ghost Grab 3000",,playable,2020-07-11 18:09:52
+010094C00E180000,"Ghost Parade",,playable,2020-07-14 00:43:54
+01004B301108C000,"Ghost Sweeper",,playable,2022-10-10 12:45:36
+010029B018432000,"Ghost Trick: Phantom Detective",,playable,2023-08-23 14:50:12
+010008A00F632000,"Ghostbusters: The Video Game Remastered",nvdec,playable,2021-09-17 07:26:57
+010090F012916000,"Ghostrunner",UE4;crash;gpu;nvdec,ingame,2020-12-17 13:01:59
+0100D6200F2BA000,"Ghosts 'n Goblins Resurrection",,playable,2023-05-09 12:40:41
+01003830092B8000,"Giana Sisters: Twisted Dreams - Owltimate Edition",,playable,2022-07-29 14:06:12
+0100D95012C0A000,"Gibbous - A Cthulhu Adventure",nvdec,playable,2022-10-10 12:57:17
+010045F00BFC2000,"GIGA WRECKER ALT.",,playable,2022-07-29 14:13:54
+01002C400E526000,"Gigantosaurus The Game",UE4,playable,2022-09-27 21:20:00
+0100C50007070000,"Ginger: Beyond the Crystal",,playable,2021-02-17 16:27:00
+01006BA013990000,"Girabox",,playable,2020-12-12 13:55:05
+01007E90116CE000,"Giraffe and Annika",UE4;crash,ingame,2020-12-04 22:41:57
+01006DD00CC96000,"Girls und Panzer Dream Tank Match DX",ldn-untested,playable,2022-09-12 16:07:11
+01005CB009E20000,"Glaive: Brick Breaker",,playable,2020-05-20 12:15:59
+0100B6F01227C000,"Glitch's Trip",,playable,2020-12-17 16:00:57
+0100EB501130E000,"Glyph",,playable,2021-02-08 19:56:51
+0100EB8011B0C000,"Gnome More War",,playable,2020-12-17 16:33:07
+010008D00CCEC000,"Gnomes Garden 2",,playable,2021-02-19 20:08:13
+010036C00D0D6000,"Gnomes Garden: Lost King",deadlock,menus,2021-11-18 11:14:03
+01008EF013A7C000,"Gnosia",,playable,2021-04-05 17:20:30
+01000C800FADC000,"Go All Out!",online-broken,playable,2022-09-21 19:16:34
+010055A0161F4000,"Go Rally",gpu,ingame,2023-08-16 21:18:23
+0100C1800A9B6000,"Go Vacation™",nvdec;ldn-works,playable,2024-05-13 19:28:53
+0100E6300F854000,"Go! Fish Go!",,playable,2020-07-27 13:52:28
+010032600C8CE000,"Goat Simulator: The GOATY",32-bit,playable,2022-07-29 21:02:33
+01001C700873E000,"GOD EATER 3",gpu;nvdec,ingame,2022-07-29 21:33:21
+0100F3D00B032000,"GOD WARS The Complete Legend",nvdec,playable,2020-05-19 14:37:50
+0100CFA0111C8000,"Gods Will Fall",,playable,2021-02-08 16:49:59
+0100D82009024000,"Goetia",,playable,2020-05-19 12:55:39
+01004D501113C000,"Going Under",deadlock;nvdec,ingame,2020-12-11 22:29:46
+0100126006EF0000,"GOKEN",,playable,2020-08-05 20:22:38
+010013800F0A4000,"Golazo!",,playable,2022-09-13 21:58:37
+01003C000D84C000,"Golem Gates",crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11
+0100779004172000,"Golf Story",,playable,2020-05-14 14:56:17
+01006FB00EBE0000,"Golf With Your Friends",online-broken,playable,2022-09-29 12:55:11
+0100EEC00AA6E000,"Gone Home",,playable,2022-08-01 11:14:20
+01007C2002B3C000,"GoNNER",,playable,2020-05-19 12:05:02
+0100B0500FE4E000,"Good Job!™",,playable,2021-03-02 13:15:55
+01003AD0123A2000,"Good Night, Knight",crash,nothing,2023-07-30 23:38:13
+0100F610122F6000,"Good Pizza, Great Pizza",,playable,2020-12-04 22:59:18
+010014C0100C6000,"Goosebumps Dead of Night",gpu;nvdec,ingame,2020-12-10 20:02:16
+0100B8000B190000,"Goosebumps The Game",,playable,2020-05-19 11:56:52
+0100F2A005C98000,"Gorogoa",,playable,2022-08-01 11:55:08
+01000C7003FE8000,"GORSD",,playable,2020-12-04 22:15:21
+0100E8D007E16000,"Gotcha Racing 2nd",,playable,2020-07-23 17:14:04
+01001010121DE000,"Gothic Murder: Adventure That Changes Destiny",deadlock;crash,ingame,2022-09-30 23:16:53
+01003FF009E60000,"Grab the Bottle",,playable,2020-07-14 17:06:41
+01004D10020F2000,"Graceful Explosion Machine",,playable,2020-05-19 20:36:55
+010038D00EC88000,"Grand Brix Shooter",slow,playable,2020-06-24 13:23:54
+010038100D436000,"Grand Guilds",UE4;nvdec,playable,2021-04-26 12:49:05
+0100BE600D07A000,"Grand Prix Story",,playable,2022-08-01 12:42:23
+05B1D2ABD3D30000,"Grand Theft Auto 3",services;crash;homebrew,nothing,2023-05-01 22:01:58
+0100E0600BBC8000,"GRANDIA HD Collection",crash,boots,2024-08-19 04:29:48
+010028200E132000,"Grass Cutter - Mutated Lawns",slow,ingame,2020-05-19 18:27:42
+010074E0099FA000,"Grave Danger",,playable,2020-05-18 17:41:28
+010054A013E0C000,"GraviFire",,playable,2021-04-05 17:13:32
+01002C2011828000,"Gravity Rider Zero",gpu;vulkan-backend-bug,ingame,2022-09-29 13:56:13
+0100BD800DFA6000,"Greedroid",,playable,2020-12-14 11:14:32
+010068D00AE68000,"GREEN",,playable,2022-08-01 12:54:15
+0100CBB0070EE000,"Green Game: TimeSwapper",nvdec,playable,2021-02-19 18:51:55
+0100DFE00F002000,"GREEN The Life Algorithm",,playable,2022-09-27 21:37:13
+0100DA7013792000,"Grey Skies: A War of the Worlds Story",UE4,playable,2022-10-24 11:13:59
+010031200981C000,"Grid Mania",,playable,2020-05-19 14:11:05
+0100197008B52000,"GRIDD: Retroenhanced",,playable,2020-05-20 11:32:40
+0100DC800A602000,"GRID™ Autosport",nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45
+0100B7900B024000,"Grim Fandango Remastered",nvdec,playable,2022-08-01 13:55:58
+010078E012D80000,"Grim Legends 2: Song of the Dark Swan",nvdec,playable,2022-10-18 12:58:45
+010009F011F90000,"Grim Legends: The Forsaken Bride",nvdec,playable,2022-10-18 13:14:06
+01001E200F2F8000,"Grimshade",,playable,2022-10-02 12:44:20
+0100538012496000,"Grindstone",,playable,2023-02-08 15:54:06
+0100459009A2A000,"GRIP",nvdec;online-broken;UE4,playable,2022-08-01 15:00:22
+0100E1700C31C000,"GRIS",nvdec,playable,2021-06-03 13:33:44
+01009D7011B02000,"GRISAIA PHANTOM TRIGGER 01&02",nvdec,playable,2022-12-04 21:16:06
+01005250123B8000,"GRISAIA PHANTOM TRIGGER 03",audout,playable,2021-01-31 12:30:47
+0100D970123BA000,"GRISAIA PHANTOM TRIGGER 04",audout,playable,2021-01-31 12:40:37
+01002330123BC000,"GRISAIA PHANTOM TRIGGER 05",audout;nvdec,playable,2021-01-31 12:49:59
+0100CAF013AE6000,"GRISAIA PHANTOM TRIGGER 5.5",audout;nvdec,playable,2021-01-31 12:59:44
+010091300FFA0000,"Grizzland",gpu,ingame,2024-07-11 16:28:34
+0100EB500D92E000,"GROOVE COASTER WAI WAI PARTY!!!!",nvdec;ldn-broken,playable,2021-11-06 14:54:27
+01007E100456C000,"Guacamelee! 2",,playable,2020-05-15 14:56:59
+0100BAE00B470000,"Guacamelee! Super Turbo Championship Edition",,playable,2020-05-13 23:44:18
+010089900C9FA000,"Guess the Character",,playable,2020-05-20 13:14:19
+01005DC00D80C000,"Guess the word",,playable,2020-07-26 21:34:25
+01006F80082E4000,"GUILTY GEAR XX ACCENT CORE PLUS R",nvdec,playable,2021-01-13 09:28:33
+01003C6008940000,"GUNBIRD for Nintendo Switch",32-bit,playable,2021-06-04 19:16:01
+0100BCB00AE98000,"GUNBIRD2 for Nintendo Switch",,playable,2020-10-10 14:41:16
+,"Gunka o haita neko",gpu;nvdec,ingame,2020-08-25 12:37:56
+010061000D318000,"Gunman Clive HD Collection",,playable,2020-10-09 12:17:35
+01006D4003BCE000,"Guns, Gore and Cannoli 2",online,playable,2021-01-06 18:43:59
+01008C800E654000,"Gunvolt Chronicles Luminous Avenger iX - Retail Version",,playable,2020-06-16 22:47:07
+0100763015C2E000,"Gunvolt Chronicles: Luminous Avenger iX 2",crash;Needs Update,nothing,2022-04-29 15:34:34
+01002C8018554000,"Gurimugurimoa OnceMore Demo",,playable,2022-07-29 22:07:31
+0100AC601DCA8000,"GYLT",crash,ingame,2024-03-18 20:16:51
+0100822012D76000,"HAAK",gpu,ingame,2023-02-19 14:31:05
+01007E100EFA8000,"Habroxia",,playable,2020-06-16 23:04:42
+0100535012974000,"Hades",vulkan,playable,2022-10-05 10:45:21
+0100618010D76000,"Hakoniwa Explorer Plus",slow,ingame,2021-02-19 16:56:19
+0100E0D00C336000,"Halloween Pinball",,playable,2021-01-12 16:00:46
+01006FF014152000,"Hamidashi Creative",gpu,ingame,2021-12-19 15:30:51
+01003B9007E86000,"Hammerwatch",online-broken;ldn-broken,playable,2022-08-01 16:28:46
+01003620068EA000,"Hand of Fate 2",,playable,2022-08-01 15:44:16
+0100973011358000,"Hang The Kings",,playable,2020-07-28 22:56:59
+010066C018E50000,"Happy Animals Mini Golf",gpu,ingame,2022-12-04 19:24:28
+0100ECE00D13E000,"Hard West",regression,nothing,2022-02-09 07:45:56
+0100D55011D60000,"Hardcore Maze Cube",,playable,2020-12-04 20:01:24
+01002F0011DD4000,"HARDCORE MECHA",slow,playable,2020-11-01 15:06:33
+01000C90117FA000,"HardCube",,playable,2021-05-05 18:33:03
+0100BB600C096000,"Hardway Party",,playable,2020-07-26 12:35:07
+0100D0500AD30000,"Harvest Life",,playable,2022-08-01 16:51:45
+010016B010FDE000,"Harvest Moon®: One World",,playable,2023-05-26 09:17:19
+0100A280187BC000,"Harvestella",UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11
+0100E29001298000,"Has-Been Heroes",,playable,2021-01-13 13:31:48
+01001CC00FA1A000,"Hatsune Miku: Project DIVA Mega Mix",audio;online-broken,playable,2024-01-07 23:12:57
+01009E6014F18000,"Haunted Dawn: The Zombie Apocalypse",,playable,2022-10-28 12:31:51
+010023F008204000,"Haunted Dungeons:Hyakki Castle",,playable,2020-08-12 14:21:48
+0100E2600DBAA000,"Haven",,playable,2021-03-24 11:52:41
+0100EA900FB2C000,"Hayfever",loader-allocator,playable,2022-09-22 17:35:41
+0100EFE00E1DC000,"Headliner: NoviNews",online,playable,2021-03-01 11:36:00
+0100A8200C372000,"Headsnatchers",UE4;crash,menus,2020-07-14 13:29:14
+010067400EA5C000,"Headspun",,playable,2020-07-31 19:46:47
+0100D12008EE4000,"Heart&Slash",,playable,2021-01-13 20:56:32
+010059100D928000,"Heaven Dust",,playable,2020-05-17 14:02:41
+0100FD901000C000,"Heaven's Vault",crash,ingame,2021-02-08 18:22:01
+0100B9C012B66000,"Helheim Hassle",,playable,2020-10-14 11:38:36
+0100E4300C278000,"Hell is Other Demons",,playable,2021-01-13 13:23:02
+01000938017E5C00,"Hell Pie0",nvdec;UE4,playable,2022-11-03 16:48:46
+0100A4600E27A000,"Hell Warders",online,playable,2021-02-27 02:31:03
+010044500CF8E000,"Hellblade: Senua's Sacrifice",gpu;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50
+010087D0084A8000,"Hello Kitty Kruisers With Sanrio Friends",nvdec,playable,2021-06-04 19:08:46
+0100FAA00B168000,"Hello Neighbor",UE4,playable,2022-08-01 21:32:23
+010092B00C4F0000,"Hello Neighbor Hide and Seek",UE4;gpu;slow,ingame,2020-10-24 10:59:57
+010024600C794000,"Hellpoint",,menus,2021-11-26 13:24:20
+0100BEA00E63A000,"Hero Express",nvdec,playable,2020-08-06 13:23:43
+010077D01094C000,"Hero-U: Rogue to Redemption",nvdec,playable,2021-03-24 11:40:01
+0100D2B00BC54000,"Heroes of Hammerwatch - Ultimate Edition",,playable,2022-08-01 18:30:21
+01001B70080F0000,"HEROINE ANTHEM ZERO episode 1",vulkan-backend-bug,playable,2022-08-01 22:02:36
+010057300B0DC000,"Heroki",gpu,ingame,2023-07-30 19:30:01
+0100C2700E338000,"Heroland",,playable,2020-08-05 15:35:39
+01007AC00E012000,"HexaGravity",,playable,2021-05-28 13:47:48
+01004E800F03C000,"Hidden",slow,ingame,2022-10-05 10:56:53
+0100F6A00A684000,"Higurashi no Naku Koro ni Hō",audio,ingame,2021-09-18 14:40:28
+0100F8D0129F4000,"Himehibi 1 gakki - Princess Days",crash,nothing,2021-11-03 08:34:19
+0100F3D008436000,"Hiragana Pixel Party",,playable,2021-01-14 08:36:50
+01004990132AC000,"HITMAN 3 - Cloud Version",Needs Update;crash;services,nothing,2021-04-18 22:35:07
+010083A018262000,"Hitman: Blood Money — Reprisal",deadlock,ingame,2024-09-28 16:28:50
+01004B100A5CC000,"Hob: The Definitive Edition",,playable,2021-01-13 09:39:19
+0100F7300ED2C000,"Hoggy2",,playable,2022-10-10 13:53:35
+0100F7E00C70E000,"Hogwarts Legacy",slow,ingame,2024-09-03 19:53:58
+0100633007D48000,"Hollow Knight",nvdec,playable,2023-01-16 15:44:56
+0100F2100061E800,"Hollow0",UE4;gpu,ingame,2021-03-03 23:42:56
+0100342009E16000,"Holy Potatoes! What The Hell?!",,playable,2020-07-03 10:48:56
+010071B00C904000,"HoPiKo",,playable,2021-01-13 20:12:38
+010087800EE5A000,"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",crash,boots,2023-02-19 00:51:21
+010086D011EB8000,"Horace",,playable,2022-10-10 14:03:50
+0100001019F6E000,"Horizon Chase 2",deadlock;slow;crash;UE4,ingame,2024-08-19 04:24:06
+01009EA00B714000,"Horizon Chase Turbo",,playable,2021-02-19 19:40:56
+0100E4200FA82000,"Horror Pinball Bundle",crash,menus,2022-09-13 22:15:34
+0100017007980000,"Hotel Transylvania 3 Monsters Overboard",nvdec,playable,2021-01-27 18:55:31
+0100D0E00E51E000,"Hotline Miami Collection",nvdec,playable,2022-09-09 16:41:19
+0100BDE008218000,"Hotshot Racing",gpu;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17
+0100CAE00EB02000,"House Flipper",,playable,2021-06-16 18:28:32
+0100F6800910A000,"Hover",online-broken,playable,2022-09-20 12:54:46
+0100A66003384000,"Hulu",online-broken,boots,2022-12-09 10:05:00
+0100701001D92000,"Human Resource Machine",32-bit,playable,2020-12-17 21:47:09
+01000CA004DCA000,"Human: Fall Flat",,playable,2021-01-13 18:36:05
+0100E1A00AF40000,"Hungry Shark® World",,playable,2021-01-13 18:26:08
+0100EBA004726000,"Huntdown",,playable,2021-04-05 16:59:54
+010068000CAC0000,"Hunter's Legacy: Purrfect Edition",,playable,2022-08-02 10:33:31
+0100C460040EA000,"Hunting Simulator",UE4,playable,2022-08-02 10:54:08
+010061F010C3A000,"Hunting Simulator 2",UE4,playable,2022-10-10 14:25:51
+0100B3300B4AA000,"Hyper Jam",UE4;crash,boots,2020-12-15 22:52:11
+01003B200B372000,"Hyper Light Drifter - Special Edition",vulkan-backend-bug,playable,2023-01-13 15:44:48
+01006C500A29C000,"HyperBrawl Tournament",crash;services,boots,2020-12-04 23:03:27
+0100A8B00F0B4000,"HYPERCHARGE Unboxed",nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39
+010061400ED90000,"HyperParasite",nvdec;UE4,playable,2022-09-27 22:05:44
+0100959010466000,"Hypnospace Outlaw",nvdec,ingame,2023-08-02 22:46:49
+01002B00111A2000,"Hyrule Warriors: Age of Calamity",gpu;deadlock;slow;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00
+0100A2C01320E000,"Hyrule Warriors: Age of Calamity - Demo Version",slow,playable,2022-10-10 17:37:41
+0100AE00096EA000,"Hyrule Warriors: Definitive Edition",services-horizon;nvdec,ingame,2024-06-16 10:34:05
+0100849000BDA000,"I Am Setsuna",,playable,2021-11-28 11:06:11
+01001860140B0000,"I Saw Black Clouds",nvdec,playable,2021-04-19 17:22:16
+0100429006A06000,"I, Zombie",,playable,2021-01-13 14:53:44
+01004E5007E92000,"Ice Age Scrat's Nutty Adventure!",nvdec,playable,2022-09-13 22:22:29
+010053700A25A000,"Ice Cream Surfer",,playable,2020-07-29 12:04:07
+0100954014718000,"Ice Station Z",crash,menus,2021-11-21 20:02:15
+0100BE9007E7E000,"ICEY",,playable,2021-01-14 16:16:04
+0100BC60099FE000,"Iconoclasts",,playable,2021-08-30 21:11:04
+01001E700EB28000,"Idle Champions of the Forgotten Realms",online,boots,2020-12-17 18:24:57
+01002EC014BCA000,"IdolDays",gpu;crash,ingame,2021-12-19 15:31:28
+01006550129C6000,"If Found...",,playable,2020-12-11 13:43:14
+01001AC00ED72000,"If My Heart Had Wings",,playable,2022-09-29 14:54:57
+01009F20086A0000,"Ikaruga",,playable,2023-04-06 15:00:02
+010040900AF46000,"Ikenfell",,playable,2021-06-16 17:18:44
+01007BC00E55A000,"Immortal Planet",,playable,2022-09-20 13:40:43
+010079501025C000,"Immortal Realms: Vampire Wars",nvdec,playable,2021-06-17 17:41:46
+01000F400435A000,"Immortal Redneck",nvdec,playable,2021-01-27 18:36:28
+01004A600EC0A000,"Immortals Fenyx Rising™",gpu;crash,menus,2023-02-24 16:19:55
+0100737003190000,"IMPLOSION",nvdec,playable,2021-12-12 03:52:13
+0100A760129A0000,"In rays of the Light",,playable,2021-04-07 15:18:07
+0100A2101107C000,"Indie Puzzle Bundle Vol 1",,playable,2022-09-27 22:23:21
+010002A00CD68000,"Indiecalypse",nvdec,playable,2020-06-11 20:19:09
+01001D3003FDE000,"Indivisible",nvdec,playable,2022-09-29 15:20:57
+01002BD00F626000,"Inertial Drift",online-broken,playable,2022-10-11 12:22:19
+0100D4300A4CA000,"Infernium",UE4;regression,nothing,2021-01-13 16:36:07
+010039C001296000,"Infinite Minigolf",online,playable,2020-09-29 12:26:25
+01001CB00EFD6000,"Infliction: Extended Cut",nvdec;UE4,playable,2022-10-02 13:15:55
+0100F1401161E000,"INMOST",,playable,2022-10-05 11:27:40
+0100F200049C8000,"InnerSpace",,playable,2021-01-13 19:36:14
+0100D2D009028000,"INSIDE",,playable,2021-12-25 20:24:56
+0100EC7012D34000,"Inside Grass: A little adventure",,playable,2020-10-15 15:26:27
+010099700D750000,"Instant Sports",,playable,2022-09-09 12:59:40
+010099A011A46000,"Instant Sports Summer Games",gpu,menus,2020-09-02 13:39:28
+010031B0145B8000,"INSTANT SPORTS TENNIS",,playable,2022-10-28 16:42:17
+010041501005E000,"Interrogation: You will be deceived",,playable,2022-10-05 11:40:10
+01000F700DECE000,"Into the Dead 2",nvdec,playable,2022-09-14 12:36:14
+01001D0003B96000,"INVERSUS Deluxe",online-broken,playable,2022-08-02 14:35:36
+0100C5B00FADE000,"Invisible Fist",,playable,2020-08-08 13:25:52
+010031B00C48C000,"Invisible, Inc. Nintendo Switch Edition",crash,nothing,2021-01-29 16:28:13
+01005F400E644000,"Invisigun Reloaded",gpu;online,ingame,2021-06-10 12:13:24
+010041C00D086000,"Ion Fury",vulkan-backend-bug,ingame,2022-08-07 08:27:51
+010095C016C14000,"Iridium",,playable,2022-08-05 23:19:53
+0100AD300B786000,"Iris School of Wizardry -Vinculum Hearts-",,playable,2022-12-05 13:11:15
+0100945012168000,"Iris.Fall",nvdec,playable,2022-10-18 13:40:22
+01005270118D6000,"Iron Wings",slow,ingame,2022-08-07 08:32:57
+01004DB003E6A000,"IRONCAST",,playable,2021-01-13 13:54:29
+0100E5700CD56000,"Irony Curtain: From Matryoshka with Love",,playable,2021-06-04 20:12:37
+010063E0104BE000,"Is It Wrong to Try to Pick Up Girls in a Dungeon? Familia Myth Infinite Combate",,playable,2020-08-31 13:52:21
+0100F06013710000,"ISLAND",,playable,2021-05-06 15:11:47
+010077900440A000,"Island Flight Simulator",,playable,2021-06-04 19:42:46
+0100A2600FCA0000,"Island Saver",nvdec,playable,2020-10-23 22:07:02
+010065200D192000,"Isoland",,playable,2020-07-26 13:48:16
+0100F5600D194000,"Isoland 2 - Ashes of Time",,playable,2020-07-26 14:29:05
+010001F0145A8000,"Isolomus",services,boots,2021-11-03 07:48:21
+010068700C70A000,"ITTA",,playable,2021-06-07 03:15:52
+01004070022F0000,"Ittle Dew 2+",,playable,2020-11-17 11:44:32
+0100DEB00F12A000,"IxSHE Tell",nvdec,playable,2022-12-02 18:00:42
+0100D8E00C874000,"izneo",online-broken,menus,2022-08-06 15:56:23
+0100CD5008D9E000,"James Pond Codename Robocod",,playable,2021-01-13 09:48:45
+01005F4010AF0000,"Japanese Rail Sim: Journey to Kyoto",nvdec,playable,2020-07-29 17:14:21
+010002D00EDD0000,"JDM Racing",,playable,2020-08-03 17:02:37
+0100C2700AEB8000,"Jenny LeClue - Detectivu",crash,nothing,2020-12-15 21:07:07
+01006E400AE2A000,"Jeopardy!®",audout;nvdec;online,playable,2021-02-22 13:53:46
+0100E4900D266000,"Jet Kave Adventure",nvdec,playable,2022-09-09 14:50:39
+0100F3500C70C000,"Jet Lancer",gpu,ingame,2021-02-15 18:15:47
+0100A5A00AF26000,"Jettomero: Hero of the Universe",,playable,2022-08-02 14:46:43
+01008330134DA000,"Jiffy",gpu;opengl,ingame,2024-02-03 23:11:24
+01001F5006DF6000,"Jim is Moving Out!",deadlock,ingame,2020-06-03 22:05:19
+0100F4D00D8BE000,"Jinrui no Ninasama he",crash,ingame,2023-03-07 02:04:17
+010038D011F08000,"Jisei: The First Case HD",audio,playable,2022-10-05 11:43:33
+01007CE00C960000,"Job the Leprechaun",,playable,2020-06-05 12:10:06
+01007090104EC000,"John Wick Hex",,playable,2022-08-07 08:29:12
+01006E4003832000,"Johnny Turbo's Arcade: Bad Dudes",,playable,2020-12-10 12:30:56
+010069B002CDE000,"Johnny Turbo's Arcade: Gate Of Doom",,playable,2022-07-29 12:17:50
+010080D002CC6000,"Johnny Turbo's Arcade: Two Crude Dudes",,playable,2022-08-02 20:29:50
+0100D230069CC000,"Johnny Turbo's Arcade: Wizard Fire",,playable,2022-08-02 20:39:15
+01008120128C2000,"JoJos Bizarre Adventure All-Star Battle R",,playable,2022-12-03 10:45:10
+01008B60117EC000,"Journey to the Savage Planet",nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12
+0100C7600F654000,"Juicy Realm",,playable,2023-02-21 19:16:20
+0100B4D00C76E000,"JUMANJI: The Video Game",UE4;crash,boots,2020-07-12 13:52:25
+0100183010F12000,"JUMP FORCE - Deluxe Edition",nvdec;online-broken;UE4,playable,2023-10-01 15:56:05
+01003D601014A000,"Jump King",,playable,2020-06-09 10:12:39
+0100B9C012706000,"Jump Rope Challenge",services;crash;Needs Update,boots,2023-02-27 01:24:28
+0100D87009954000,"Jumping Joe & Friends",,playable,2021-01-13 17:09:42
+010069800D2B4000,"JUNK PLANET",,playable,2020-11-09 12:38:33
+0100CE100A826000,"Jurassic Pinball",,playable,2021-06-04 19:02:37
+010050A011344000,"Jurassic World Evolution: Complete Edition",cpu;crash,menus,2023-08-04 18:06:54
+0100BCE000598000,"Just Dance 2017®",online,playable,2021-03-05 09:46:01
+0100BEE017FC0000,"Just Dance 2023",,nothing,2023-06-05 16:44:54
+010075600AE96000,"Just Dance® 2019",gpu;online,ingame,2021-02-27 17:21:27
+0100DDB00DB38000,"Just Dance® 2020",,playable,2022-01-24 13:31:57
+0100EA6014BB8000,"Just Dance® 2022",gpu;services;crash;Needs Update,ingame,2022-10-28 11:01:53
+0100AC600CF0A000,"Just Die Already",UE4,playable,2022-12-13 13:37:50
+01002C301033E000,"Just Glide",,playable,2020-08-07 17:38:10
+0100830008426000,"Just Shapes & Beats",ldn-untested;nvdec,playable,2021-02-09 12:18:36
+010035A0044E8000,"JYDGE",,playable,2022-08-02 21:20:13
+0100D58012FC2000,"Kagamihara/Justice",crash,nothing,2021-06-21 16:41:29
+0100D5F00EC52000,"Kairobotica",,playable,2021-05-06 12:17:56
+0100BDC00A664000,"KAMEN RIDER CLIMAX SCRAMBLE",nvdec;ldn-untested,playable,2024-07-03 08:51:11
+0100A9801180E000,"KAMEN RIDER memory of heroez / Premium Sound Edition",,playable,2022-12-06 03:14:26
+010085300314E000,"KAMIKO",,playable,2020-05-13 12:48:57
+,"Kangokuto Mary Skelter Finale",audio;crash,ingame,2021-01-09 22:39:28
+01007FD00DB20000,"Katakoi Contrast - collection of branch -",nvdec,playable,2022-12-09 09:41:26
+0100D7000C2C6000,"Katamari Damacy REROLL",,playable,2022-08-02 21:35:05
+0100F9800EDFA000,"KATANA KAMI: A Way of the Samurai Story",slow,playable,2022-04-09 10:40:16
+010029600D56A000,"Katana ZERO",,playable,2022-08-26 08:09:09
+010038B00F142000,"Kaze and the Wild Masks",,playable,2021-04-19 17:11:03
+0100D7C01115E000,"Keen: One Girl Army",,playable,2020-12-14 23:19:52
+01008D400A584000,"Keep Talking and Nobody Explodes",,playable,2021-02-15 18:05:21
+01004B100BDA2000,"KEMONO FRIENDS PICROSS",,playable,2023-02-08 15:54:34
+0100A8200B15C000,"Kentucky Robo Chicken",,playable,2020-05-12 20:54:17
+0100327005C94000,"Kentucky Route Zero: TV Edition",,playable,2024-04-09 23:22:46
+0100DA200A09A000,"Kero Blaster",,playable,2020-05-12 20:42:52
+0100F680116A2000,"Kholat",UE4;nvdec,playable,2021-06-17 11:52:48
+0100C0A004C2C000,"Kid Tripp",crash,nothing,2020-10-15 07:41:23
+0100FB400D832000,"KILL la KILL -IF",,playable,2020-06-09 14:47:08
+010011B00910C000,"Kill The Bad Guy",,playable,2020-05-12 22:16:10
+0100F2900B3E2000,"Killer Queen Black",ldn-untested;online,playable,2021-04-08 12:46:18
+,"Kin'iro no Corda Octave",,playable,2020-09-22 13:23:12
+010089000F0E8000,"Kine",UE4,playable,2022-09-14 14:28:37
+0100E6B00FFBA000,"King Lucas",,playable,2022-09-21 19:43:23
+0100B1300783E000,"King Oddball",,playable,2020-05-13 13:47:57
+01008D80148C8000,"King of Seas",nvdec;UE4,playable,2022-10-28 18:29:41
+0100515014A94000,"King of Seas Demo",nvdec;UE4,playable,2022-10-28 18:09:31
+01005D2011EA8000,"KINGDOM HEARTS Melody of Memory",crash;nvdec,ingame,2021-03-03 17:34:12
+0100A280121F6000,"Kingdom Rush",32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00
+01005EF003FF2000,"Kingdom Two Crowns",,playable,2020-05-16 19:36:21
+0100BD9004AB6000,"Kingdom: New Lands",,playable,2022-08-02 21:48:50
+0100EF50132BE000,"Kingdoms of Amalur: Re-Reckoning",,playable,2023-08-10 13:05:08
+010091201605A000,"Kirby and the Forgotten Land (Demo version)",demo,playable,2022-08-21 21:03:01
+0100227010460000,"Kirby Fighters™ 2",ldn-works;online,playable,2021-06-17 13:06:39
+0100A8E016236000,"Kirby’s Dream Buffet™",crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44
+010091D01A57E000,"Kirby’s Return to Dream Land Deluxe - Demo",demo,playable,2023-02-18 17:21:55
+01006B601380E000,"Kirby’s Return to Dream Land™ Deluxe",,playable,2024-05-16 19:58:04
+01004D300C5AE000,"Kirby™ and the Forgotten Land",gpu,ingame,2024-03-11 17:11:21
+01007E3006DDA000,"Kirby™ Star Allies",nvdec,playable,2023-11-15 17:06:19
+0100F3A00F4CA000,"Kissed by the Baddest Bidder",gpu;nvdec,ingame,2022-12-04 20:57:11
+01000C900A136000,"Kitten Squad",nvdec,playable,2022-08-03 12:01:59
+010079D00C8AE000,"Klondike Solitaire",,playable,2020-12-13 16:17:27
+0100A6800DE70000,"Knight Squad",,playable,2020-08-09 16:54:51
+010024B00E1D6000,"Knight Squad 2",nvdec;online-broken,playable,2022-10-28 18:38:09
+0100D51006AAC000,"Knight Terrors",,playable,2020-05-13 13:09:22
+01005F8010D98000,"Knightin'+",,playable,2020-08-31 18:18:21
+010004400B22A000,"Knights of Pen & Paper 2 Deluxiest Edition",,playable,2020-05-13 14:07:00
+0100D3F008746000,"Knights of Pen and Paper +1 Deluxier Edition",,playable,2020-05-11 21:46:32
+010001A00A1F6000,"Knock-Knock",nvdec,playable,2021-02-01 20:03:19
+01009EF00DDB4000,"Knockout City™",services;online-broken,boots,2022-12-09 09:48:58
+0100C57019BA2000,"Koa and the Five Pirates of Mara",gpu,ingame,2024-07-11 16:14:44
+01001E500401C000,"Koi DX",,playable,2020-05-11 21:37:51
+,"Koi no Hanasaku Hyakkaen",32-bit;gpu;nvdec,ingame,2020-10-03 14:17:10
+01005D200C9AA000,"Koloro",,playable,2022-08-03 12:34:02
+0100464009294000,"Kona",,playable,2022-08-03 12:48:19
+010016C011AAA000,"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",,playable,2023-04-26 09:51:08
+010088500D5EE000,"KORAL",UE4;crash;gpu,menus,2020-11-16 12:41:26
+0100EC8004762000,"KORG Gadget for Nintendo Switch",,playable,2020-05-13 13:57:24
+010046600CCA4000,"Kotodama: The 7 Mysteries of Fujisawa",audout,playable,2021-02-01 20:28:37
+010022801242C000,"KukkoroDays",crash,menus,2021-11-25 08:52:56
+010035A00DF62000,"KUNAI",nvdec,playable,2022-09-20 13:48:34
+010060400ADD2000,"Kunio-Kun: The World Classics Collection",online,playable,2021-01-29 20:21:46
+010037500F282000,"KUUKIYOMI 2: Consider It More! - New Era",crash;Needs Update,nothing,2021-11-02 09:34:40
+0100894011F62000,"Kwaidan ~Azuma manor story~",,playable,2022-10-05 12:50:44
+0100830004FB6000,"L.A. Noire",,playable,2022-08-03 16:49:35
+0100732009CAE000,"L.F.O. -Lost Future Omega-",UE4;deadlock,boots,2020-10-16 12:16:44
+0100F2B0123AE000,"L.O.L. Surprise! Remix: We Rule The World",,playable,2022-10-11 22:48:03
+010026000F662800,"LA-MULANA",gpu,ingame,2022-08-12 01:06:21
+0100E5D00F4AE000,"LA-MULANA 1 & 2",,playable,2022-09-22 17:56:36
+010038000F644000,"LA-MULANA 2",,playable,2022-09-03 13:45:57
+010058500B3E0000,"Labyrinth of Refrain: Coven of Dusk",,playable,2021-02-15 17:38:48
+010022D0089AE000,"Labyrinth of the Witch",,playable,2020-11-01 14:42:37
+0100BAB00E8C0000,"Langrisser I & II",,playable,2021-02-19 15:46:10
+0100E7200B272000,"Lanota",,playable,2019-09-04 01:58:14
+01005E000D3D8000,"Lapis x Labyrinth",,playable,2021-02-01 18:58:08
+0100AFE00E882000,"Laraan",,playable,2020-12-16 12:45:48
+0100DA700879C000,"Last Day of June",nvdec,playable,2021-06-08 11:35:32
+01009E100BDD6000,"LASTFIGHT",,playable,2022-09-20 13:54:55
+0100055007B86000,"Late Shift",nvdec,playable,2021-02-01 18:43:58
+01004EB00DACE000,"Later Daters Part One",,playable,2020-07-29 16:35:45
+01001730144DA000,"Layers of Fear 2",nvdec;UE4,playable,2022-10-28 18:49:52
+0100BF5006A7C000,"Layers of Fear: Legacy",nvdec,playable,2021-02-15 16:30:41
+0100CE500D226000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",nvdec;opengl,playable,2022-09-14 15:01:57
+0100FDB00AA80000,"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",gpu;nvdec;opengl,ingame,2022-09-14 15:15:55
+01009C100390E000,"League of Evil",online,playable,2021-06-08 11:23:27
+01002E900CD6E000,"Left-Right : The Mansion",,playable,2020-05-13 13:02:12
+010079901C898000,"Legacy of Kain™ Soul Reaver 1&2 Remastered",,playable,2025-01-07 05:50:01
+01002DB007A96000,"Legend of Kay Anniversary",nvdec,playable,2021-01-29 18:38:29
+0100ECC00EF3C000,"Legend of the Skyfish",,playable,2020-06-24 13:04:22
+01007E900DFB6000,"Legend of the Tetrarchs",deadlock,ingame,2020-07-10 07:54:03
+0100A73006E74000,"Legendary Eleven",,playable,2021-06-08 12:09:03
+0100A7700B46C000,"Legendary Fishing",online,playable,2021-04-14 15:08:46
+0100739018020000,"LEGO® 2K Drive",gpu;ldn-works,ingame,2024-04-09 02:05:12
+01003A30012C0000,"LEGO® CITY Undercover",nvdec,playable,2024-09-30 08:44:27
+010070D009FEC000,"LEGO® DC Super-Villains",,playable,2021-05-27 18:10:37
+010052A00B5D2000,"LEGO® Harry Potter™ Collection",crash,ingame,2024-01-31 10:28:07
+010073C01AF34000,"LEGO® Horizon Adventures™",vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56
+01001C100E772000,"LEGO® Jurassic World",,playable,2021-05-27 17:00:20
+0100D3A00409E000,"LEGO® Marvel Super Heroes 2",crash,nothing,2023-03-02 17:12:33
+01006F600FFC8000,"LEGO® Marvel™ Super Heroes",,playable,2024-09-10 19:02:19
+01007FC00206E000,"LEGO® NINJAGO® Movie Video Game",crash,nothing,2022-08-22 19:12:53
+010042D00D900000,"LEGO® Star Wars™: The Skywalker Saga",gpu;slow,ingame,2024-04-13 20:08:46
+0100A01006E00000,"LEGO® The Incredibles",crash,nothing,2022-08-03 18:36:59
+0100838002AEA000,"LEGO® Worlds",crash;slow,ingame,2020-07-17 13:35:39
+0100E7500BF84000,"LEGRAND LEGACY: Tale of the Fatebounds",nvdec,playable,2020-07-26 12:27:36
+0100A8E00CAA0000,"Leisure Suit Larry - Wet Dreams Don't Dry",,playable,2022-08-03 19:51:44
+010031A0135CA000,"Leisure Suit Larry - Wet Dreams Dry Twice",,playable,2022-10-28 19:00:57
+01003AB00983C000,"Lethal League Blaze",online,playable,2021-01-29 20:13:31
+01008C300648E000,"Letter Quest Remastered",,playable,2020-05-11 21:30:34
+0100CE301678E800,"Letters - a written adventure",gpu,ingame,2023-02-21 20:12:38
+01009A200BE42000,"Levelhead",online,ingame,2020-10-18 11:44:51
+0100C960041DC000,"Levels+ : Addictive Puzzle Game",,playable,2020-05-12 13:51:39
+0100C8000F146000,"Liberated",gpu;nvdec,ingame,2024-07-04 04:58:24
+01003A90133A6000,"Liberated: Enhanced Edition",gpu;nvdec,ingame,2024-07-04 04:48:48
+01004360045C8000,"Lichtspeer: Double Speer Edition",,playable,2020-05-12 16:43:09
+010041F0128AE000,"Liege Dragon",,playable,2022-10-12 10:27:03
+010006300AFFE000,"Life Goes On",,playable,2021-01-29 19:01:20
+0100FD101186C000,"Life is Strange 2",UE4,playable,2024-07-04 05:05:58
+0100DC301186A000,"Life is Strange Remastered",UE4,playable,2022-10-03 16:54:44
+010008501186E000,"Life is Strange: Before the Storm Remastered",,playable,2023-09-28 17:15:44
+0100500012AB4000,"Life is Strange: True Colors™",gpu;UE4,ingame,2024-04-08 16:11:52
+01003AB012F00000,"Life of Boris: Super Slav",,ingame,2020-12-17 11:40:05
+0100B3A0135D6000,"Life of Fly",,playable,2021-01-25 23:41:07
+010069A01506E000,"Life of Fly 2",slow,playable,2022-10-28 19:26:52
+01005B6008132000,"Lifeless Planet: Premiere Edition",,playable,2022-08-03 21:25:13
+010030A006F6E000,"Light Fall",nvdec,playable,2021-01-18 14:55:36
+010087700D07C000,"Light Tracer",nvdec,playable,2021-05-05 19:15:43
+01009C8009026000,"LIMBO",cpu;32-bit,boots,2023-06-28 15:39:19
+0100EDE012B58000,"Linelight",,playable,2020-12-17 12:18:07
+0100FAD00E65E000,"Lines X",,playable,2020-05-11 15:28:30
+010032F01096C000,"Lines XL",,playable,2020-08-31 17:48:23
+0100943010310000,"Little Busters! Converted Edition",nvdec,playable,2022-09-29 15:34:56
+0100A3F009142000,"Little Dragons Café",,playable,2020-05-12 00:00:52
+010079A00D9E8000,"Little Friends: Dogs & Cats",,playable,2020-11-12 12:45:51
+0100B18001D8E000,"Little Inferno",32-bit;gpu;nvdec,ingame,2020-12-17 21:43:56
+0100E7000E826000,"Little Misfortune",nvdec,playable,2021-02-23 20:39:44
+0100FE0014200000,"Little Mouse's Encyclopedia",,playable,2022-10-28 19:38:58
+01002FC00412C000,"Little Nightmares Complete Edition",nvdec;UE4,playable,2022-08-03 21:45:35
+010097100EDD6000,"Little Nightmares II",UE4,playable,2023-02-10 18:24:44
+010093A0135D6000,"Little Nightmares II DEMO",UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20
+0100535014D76000,"Little Noah: Scion of Paradise",opengl-backend-bug,playable,2022-09-14 04:17:13
+0100E6D00E81C000,"Little Racer",,playable,2022-10-18 16:41:13
+0100DD700D95E000,"Little Shopping",,playable,2020-10-03 16:34:35
+01000FB00AA90000,"Little Town Hero",,playable,2020-10-15 23:28:48
+01000690085BE000,"Little Triangle",,playable,2020-06-17 14:46:26
+0100CF801776C000,"LIVE A LIVE",UE4;amd-vendor-bug,playable,2023-02-05 15:12:07
+0100BA000FC9C000,"LocO-SportS",,playable,2022-09-20 14:09:30
+010016C009374000,"Lode Runner Legacy",,playable,2021-01-10 14:10:28
+0100D2C013288000,"Lofi Ping Pong",crash,ingame,2020-12-15 20:09:22
+0100B6D016EE6000,"Lone Ruin",crash;nvdec,ingame,2023-01-17 06:41:19
+0100A0C00E0DE000,"Lonely Mountains: Downhill",online-broken,playable,2024-07-04 05:08:11
+010062A0178A8000,"LOOPERS",gpu;slow;crash,ingame,2022-06-17 19:21:45
+010064200F7D8000,"Lost Horizon",,playable,2020-09-01 13:41:22
+01005ED010642000,"Lost Horizon 2",nvdec,playable,2020-06-16 12:02:12
+01005FE01291A000,"Lost in Random™",gpu,ingame,2022-12-18 07:09:28
+0100133014510000,"Lost Lands 2: The Four Horsemen",nvdec,playable,2022-10-24 16:41:00
+0100156014C6A000,"Lost Lands 3: The Golden Curse",nvdec,playable,2022-10-24 16:30:00
+0100BDD010AC8000,"Lost Lands: Dark Overlord",,playable,2022-10-03 11:52:58
+010054600AC74000,"LOST ORBIT: Terminal Velocity",,playable,2021-06-14 12:21:12
+010046600B76A000,"Lost Phone Stories",services,ingame,2020-04-05 23:17:33
+01008AD013A86800,"Lost Ruins",gpu,ingame,2023-02-19 14:09:00
+010077B0038B2000,"LOST SPHEAR",,playable,2021-01-10 06:01:21
+0100018013124000,"Lost Words: Beyond the Page",,playable,2022-10-24 17:03:21
+0100D36011AD4000,"Love Letter from Thief X",gpu;nvdec,ingame,2023-11-14 03:55:31
+0100F0300B7BE000,"Ludomania",crash;services,nothing,2020-04-03 00:33:47
+010048701995E000,"Luigi's Mansion™ 2 HD",ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27
+0100DCA0064A6000,"Luigi’s Mansion™ 3",gpu;slow;Needs Update;ldn-works,ingame,2024-09-27 22:17:36
+010052B00B194000,"Lumini",,playable,2020-08-09 20:45:09
+0100FF00042EE000,"Lumo",nvdec,playable,2022-02-11 18:20:30
+0100F3100EB44000,"Lust for Darkness",nvdec,playable,2020-07-26 12:09:15
+0100F0B00F68E000,"Lust for Darkness: Dawn Edition",nvdec,playable,2021-06-16 13:47:46
+0100EC2011A80000,"Luxar",,playable,2021-03-04 21:11:57
+0100F2400D434000,"MachiKnights -Blood bagos-",nvdec;UE4,playable,2022-09-14 15:08:04
+010024A009428000,"Mad Carnage",,playable,2021-01-10 13:00:07
+01005E7013476000,"Mad Father",,playable,2020-11-12 13:22:10
+010061E00EB1E000,"Mad Games Tycoon",,playable,2022-09-20 14:23:14
+01004A200E722000,"Magazine Mogul",loader-allocator,playable,2022-10-03 12:05:34
+01008E500BF62000,"MagiCat",,playable,2020-12-11 15:22:07
+010032C011356000,"Magicolors",,playable,2020-08-12 18:39:11
+01008C300B624000,"Mahjong Solitaire Refresh",crash,boots,2022-12-09 12:02:55
+010099A0145E8000,"Mahluk dark demon",,playable,2021-04-15 13:14:24
+01001C100D80E000,"Mainlining",,playable,2020-06-05 01:02:00
+0100D9900F220000,"Maitetsu:Pure Station",,playable,2022-09-20 15:12:49
+0100A78017BD6000,"Makai Senki Disgaea 7",,playable,2023-10-05 00:22:18
+01005A700CC3C000,"Mana Spark",,playable,2020-12-10 13:41:01
+010093D00CB22000,"Maneater",nvdec;UE4,playable,2024-05-21 16:11:57
+0100361009B1A000,"Manifold Garden",,playable,2020-10-13 20:27:13
+0100C9A00952A000,"Manticore - Galaxy on Fire",crash;nvdec,boots,2024-02-04 04:37:24
+0100E98002F6E000,"Mantis Burn Racing",online-broken;ldn-broken,playable,2024-09-02 02:13:04
+01008E800D1FE000,"Marble Power Blast",,playable,2021-06-04 16:00:02
+01001B2012D5E000,"Märchen Forest",,playable,2021-02-04 21:33:34
+0100DA7017C9E000,"Marco & The Galaxy Dragon Demo",gpu;demo,ingame,2023-06-03 13:05:33
+01006D0017F7A000,"Mario & Luigi: Brothership",crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00
+010002C00C270000,"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55
+0100317013770000,"MARIO + RABBIDS SPARKS OF HOPE",gpu;Needs Update,ingame,2024-06-20 19:56:19
+010067300059A000,"Mario + Rabbids® Kingdom Battle",slow;opengl-backend-bug,playable,2024-05-06 10:16:54
+0100C9C00E25C000,"Mario Golf™: Super Rush",gpu,ingame,2024-08-18 21:31:48
+0100ED100BA3A000,"Mario Kart Live: Home Circuit™",services;crash;Needs More Attention,nothing,2022-12-07 22:36:52
+0100152000022000,"Mario Kart™ 8 Deluxe",32-bit;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17
+01006FE013472000,"Mario Party™ Superstars",gpu;ldn-works;mac-bug,ingame,2024-05-16 11:23:34
+010019401051C000,"Mario Strikers™: Battle League",crash;nvdec,boots,2024-05-07 06:23:56
+0100BDE00862A000,"Mario Tennis™ Aces",gpu;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40
+0100B99019412000,"Mario vs. Donkey Kong™",,playable,2024-05-04 21:22:39
+0100D9E01DBB0000,"Mario vs. Donkey Kong™ Demo",,playable,2024-02-18 10:40:06
+01009A700A538000,"Mark of the Ninja: Remastered",,playable,2022-08-04 15:48:30
+010044600FDF0000,"Marooners",nvdec;online-broken,playable,2022-10-18 21:35:26
+010060700AC50000,"MARVEL ULTIMATE ALLIANCE 3: The Black Order",nvdec;ldn-untested,playable,2024-02-14 19:51:51
+01003DE00C95E000,"Mary Skelter 2",crash;regression,ingame,2023-09-12 07:37:28
+0100113008262000,"Masquerada: Songs and Shadows",,playable,2022-09-20 15:18:54
+01004800197F0000,"Master Detective Archives: Rain Code",gpu,ingame,2024-04-19 20:11:09
+0100CC7009196000,"Masters of Anima",nvdec,playable,2022-08-04 16:00:09
+01004B100A1C4000,"MathLand",,playable,2020-09-01 15:40:06
+0100A8C011F26000,"Max and the book of chaos",,playable,2020-09-02 12:24:43
+01001C9007614000,"Max: The Curse of Brotherhood",nvdec,playable,2022-08-04 16:33:04
+0100E8B012FBC000,"Maze",,playable,2020-12-17 16:13:58
+0100EEF00CBC0000,"MEANDERS",UE4;gpu,ingame,2021-06-11 19:19:33
+0100EC000CE24000,"Mech Rage",,playable,2020-11-18 12:30:16
+0100C4F005EB4000,"Mecho Tales",,playable,2022-08-04 17:03:19
+0100E4600D31A000,"Mechstermination Force",,playable,2024-07-04 05:39:15
+,"Medarot Classics Plus Kabuto Ver",,playable,2020-11-21 11:31:18
+,"Medarot Classics Plus Kuwagata Ver",,playable,2020-11-21 11:30:40
+0100BBC00CB9A000,"Mega Mall Story",slow,playable,2022-08-04 17:10:58
+0100B0C0086B0000,"Mega Man 11",,playable,2021-04-26 12:07:53
+010038E016264000,"Mega Man Battle Network Legacy Collection Vol. 1",,playable,2023-04-25 03:55:57
+0100734016266000,"Mega Man Battle Network Legacy Collection Vol. 2",,playable,2023-08-03 18:04:32
+01002D4007AE0000,"Mega Man Legacy Collection",gpu,ingame,2021-06-03 18:17:17
+0100842008EC4000,"Mega Man Legacy Collection 2",,playable,2021-01-06 08:47:59
+01005C60086BE000,"Mega Man X Legacy Collection",audio;crash;services,menus,2020-12-04 04:30:17
+010025C00D410000,"Mega Man Zero/ZX Legacy Collection",,playable,2021-06-14 16:17:32
+0100FC700F942000,"Megabyte Punch",,playable,2020-10-16 14:07:18
+010006F011220000,"Megadimension Neptunia VII",32-bit;nvdec,playable,2020-12-17 20:56:03
+010082B00E8B8000,"Megaquarium",,playable,2022-09-14 16:50:00
+010005A00B312000,"Megaton Rainfall",gpu;opengl,boots,2022-08-04 18:29:43
+0100EA100DF92000,"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",32-bit;nvdec,playable,2022-12-05 13:19:12
+0100B360068B2000,"Mekorama",gpu,boots,2021-06-17 16:37:21
+01000FA010340000,"Melbits World",nvdec;online,menus,2021-11-26 13:51:22
+0100F68019636000,"Melon Journey",,playable,2023-04-23 21:20:01
+,"Memories Off -Innocent Fille- for Dearest",,playable,2020-08-04 07:31:22
+010062F011E7C000,"Memory Lane",UE4,playable,2022-10-05 14:31:03
+0100EBE00D5B0000,"Meow Motors",UE4;gpu,ingame,2020-12-18 00:24:01
+0100273008FBC000,"Mercenaries Saga Chronicles",,playable,2021-01-10 12:48:19
+010094500C216000,"Mercenaries Wings: The False Phoenix",crash;services,nothing,2020-05-08 22:42:12
+0100F900046C4000,"Mercenary Kings: Reloaded Edition",online,playable,2020-10-16 13:05:58
+0100E5000D3CA000,"Merchants of Kaidan",,playable,2021-04-15 11:44:28
+01009A500D4A8000,"METAGAL",,playable,2020-06-05 00:05:48
+010047F01AA10000,"METAL GEAR SOLID 3: Snake Eater - Master Collection Version",services-horizon,menus,2024-07-24 06:34:06
+0100E8F00F6BE000,"METAL MAX Xeno Reborn",,playable,2022-12-05 15:33:53
+01002DE00E5D0000,"Metaloid: Origin",,playable,2020-06-04 20:26:35
+010055200E87E000,"Metamorphosis",UE4;audout;gpu;nvdec,ingame,2021-06-16 16:18:11
+0100D4900E82C000,"Metro 2033 Redux",gpu,ingame,2022-11-09 10:53:13
+0100F0400E850000,"Metro: Last Light Redux",slow;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52
+010012101468C000,"Metroid Prime™ Remastered",gpu;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15
+010093801237C000,"Metroid™ Dread",,playable,2023-11-13 04:02:36
+0100A1200F20C000,"Midnight Evil",,playable,2022-10-18 22:55:19
+0100C1E0135E0000,"Mighty Fight Federation",online,playable,2021-04-06 18:39:56
+0100AD701344C000,"Mighty Goose",nvdec,playable,2022-10-28 20:25:38
+01000E2003FA0000,"MIGHTY GUNVOLT BURST",,playable,2020-10-19 16:05:49
+010060D00AE36000,"Mighty Switch Force! Collection",,playable,2022-10-28 20:40:32
+01003DA010E8A000,"Miitopia™",gpu;services-horizon,ingame,2024-09-06 10:39:13
+01007DA0140E8000,"Miitopia™ Demo",services;crash;demo,menus,2023-02-24 11:50:58
+01004B7009F00000,"Miles & Kilo",,playable,2020-10-22 11:39:49
+0100976008FBE000,"Millie",,playable,2021-01-26 20:47:19
+0100F5700C9A8000,"MIND: Path to Thalamus",UE4,playable,2021-06-16 17:37:25
+0100D71004694000,"Minecraft",crash;ldn-broken,ingame,2024-09-29 12:08:59
+01006C100EC08000,"Minecraft Dungeons",nvdec;online-broken;UE4,playable,2024-06-26 22:10:43
+01007C6012CC8000,"Minecraft Legends",gpu;crash,ingame,2024-03-04 00:32:24
+01006BD001E06000,"Minecraft: Nintendo Switch Edition",ldn-broken,playable,2023-10-15 01:47:08
+01003EF007ABA000,"Minecraft: Story Mode - Season Two",online-broken,playable,2023-03-04 00:30:50
+010059C002AC2000,"Minecraft: Story Mode - The Complete Adventure",crash;online-broken,boots,2022-08-04 18:56:58
+0100B7500F756000,"Minefield",,playable,2022-10-05 15:03:29
+01003560119A6000,"Mini Motor Racing X",,playable,2021-04-13 17:54:49
+0100FB700DE1A000,"Mini Trains",,playable,2020-07-29 23:06:20
+010039200EC66000,"Miniature - The Story Puzzle",UE4,playable,2022-09-14 17:18:50
+010069200EB80000,"Ministry of Broadcast",,playable,2022-08-10 00:31:16
+0100C3F000BD8000,"Minna de Wai Wai! Spelunker",crash,nothing,2021-11-03 07:17:11
+0100FAE010864000,"Minoria",,playable,2022-08-06 18:50:50
+01005AB015994000,"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",gpu,playable,2022-03-28 02:22:24
+0100CFA0138C8000,"Missile Dancer",,playable,2021-01-31 12:22:03
+0100E3601495C000,"Missing Features: 2D",,playable,2022-10-28 20:52:54
+010059200CC40000,"Mist Hunter",,playable,2021-06-16 13:58:58
+0100F65011E52000,"Mittelborg: City of Mages",,playable,2020-08-12 19:58:06
+0100876015D74000,"MLB® The Show™ 22",gpu;slow,ingame,2023-04-25 06:28:43
+0100A9F01776A000,"MLB® The Show™ 22 Tech Test",services;crash;Needs Update;demo,nothing,2022-12-09 10:28:34
+0100913019170000,"MLB® The Show™ 23",gpu,ingame,2024-07-26 00:56:50
+0100E2E01C32E000,"MLB® The Show™ 24",services-horizon,nothing,2024-03-31 04:54:11
+010011300F74C000,"MO:Astray",crash,ingame,2020-12-11 21:45:44
+010020400BDD2000,"Moai VI: Unexpected Guests",slow,playable,2020-10-27 16:40:20
+0100D8700B712000,"Modern Combat Blackout",crash,nothing,2021-03-29 19:47:15
+010004900D772000,"Modern Tales: Age of Invention",slow,playable,2022-10-12 11:20:19
+0100B8500D570000,"Moero Chronicle™ Hyper",32-bit,playable,2022-08-11 07:21:56
+01004EB0119AC000,"Moero Crystal H",32-bit;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22
+0100B46017500000,"MOFUMOFUSENSEN",gpu,menus,2024-09-21 21:51:08
+01004A400C320000,"Momodora: Reverie Under the Moonlight",deadlock,nothing,2022-02-06 03:47:43
+01002CC00BC4C000,"Momonga Pinball Adventures",,playable,2022-09-20 16:00:40
+010093100DA04000,"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",gpu,ingame,2023-09-22 10:21:46
+0100FBD00ED24000,"MONKEY BARRELS",,playable,2022-09-14 17:28:52
+01004C500B8E0000,"Monkey King: Master of the Clouds",,playable,2020-09-28 22:35:48
+01003030161DC000,"Monomals",gpu,ingame,2024-08-06 22:02:51
+0100F3A00FB78000,"Mononoke Slashdown",crash,menus,2022-05-04 20:55:47
+01007430037F6000,"MONOPOLY® for Nintendo Switch™",nvdec;online-broken,playable,2024-02-06 23:13:01
+01005FF013DC2000,"MONOPOLY® Madness",,playable,2022-01-29 21:13:52
+0100E2D0128E6000,"Monster Blast",gpu,ingame,2023-09-02 20:02:32
+01006F7001D10000,"Monster Boy and the Cursed Kingdom",nvdec,playable,2022-08-04 20:06:32
+01005FC01000E000,"Monster Bugs Eat People",,playable,2020-07-26 02:05:34
+0100742007266000,"Monster Energy Supercross - The Official Videogame",nvdec;UE4,playable,2022-08-04 20:25:00
+0100F8100B982000,"Monster Energy Supercross - The Official Videogame 2",nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24
+010097800EA20000,"Monster Energy Supercross - The Official Videogame 3",UE4;audout;nvdec;online,playable,2021-06-14 12:37:54
+0100E9900ED74000,"Monster Farm",32-bit;nvdec,playable,2021-05-05 19:29:13
+0100770008DD8000,"Monster Hunter Generations Ultimate™",32-bit;online-broken;ldn-works,playable,2024-03-18 14:35:36
+0100B04011742000,"Monster Hunter Rise",gpu;slow;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59
+010093A01305C000,"Monster Hunter Rise Demo",online-broken;ldn-works;demo,playable,2022-10-18 23:04:17
+0100E21011446000,"Monster Hunter Stories 2: Wings of Ruin",services,ingame,2022-07-10 19:27:30
+010042501329E000,"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",demo,playable,2022-11-13 22:20:26
+,"Monster Hunter XX Demo",32-bit;cpu,nothing,2020-03-22 10:12:28
+0100C3800049C000,"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",,playable,2024-07-21 14:08:09
+010088400366E000,"Monster Jam Crush It!",UE4;nvdec;online,playable,2021-04-08 19:29:27
+010095C00F354000,"Monster Jam Steel Titans",crash;nvdec;UE4,menus,2021-11-14 09:45:38
+010051B0131F0000,"Monster Jam Steel Titans 2",nvdec;UE4,playable,2022-10-24 17:17:59
+01004DE00DD44000,"Monster Puzzle",,playable,2020-09-28 22:23:10
+0100A0F00DA68000,"Monster Sanctuary",crash,ingame,2021-04-04 05:06:41
+0100D30010C42000,"Monster Truck Championship",slow;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51
+01004E10142FE000,"Monster wo taoshite tsuyoi ken ya yoroi wo te ni shinasai. Shinde mo akiramezu ni tsuyoku nari nasai. Yuushatai ga maoh wo taosu sono hi wo shinzite imasu. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",crash,ingame,2021-07-23 10:56:44
+010039F00EF70000,"Monstrum",,playable,2021-01-31 11:07:26
+0100C2E00B494000,"Moonfall Ultimate",nvdec,playable,2021-01-17 14:01:25
+0100E3D014ABC000,"Moorhuhn Jump and Run 'Traps and Treasures'",,playable,2024-03-08 15:10:02
+010045C00F274000,"Moorhuhn Kart 2",online-broken,playable,2022-10-28 21:10:35
+010040E00F642000,"Morbid: The Seven Acolytes",,playable,2022-08-09 17:21:58
+01004230123E0000,"More Dark",,playable,2020-12-15 16:01:06
+01005DA003E6E000,"Morphies Law",UE4;crash;ldn-untested;nvdec;online,menus,2020-11-22 17:05:29
+0100776003F0C000,"Morphite",,playable,2021-01-05 19:40:55
+0100F2200C984000,"Mortal Kombat 11",slow;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17
+01006560184E6000,"Mortal Kombat™ 1",gpu,ingame,2024-09-04 15:45:47
+010032800D740000,"Mosaic",,playable,2020-08-11 13:07:35
+01002ED00B01C000,"Moto Racer 4",UE4;nvdec;online,playable,2021-04-08 19:09:11
+01003F200D0F2000,"Moto Rush GT",,playable,2022-08-05 11:23:55
+0100361007268000,"MotoGP™18",nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45
+01004B800D0E8000,"MotoGP™19",nvdec;online-broken;UE4,playable,2022-08-05 11:54:14
+01001FA00FBBC000,"MotoGP™20",ldn-untested,playable,2022-09-29 17:58:01
+01000F5013820000,"MotoGP™21",gpu;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08
+010040401D564000,"MotoGP™24",gpu,ingame,2024-05-10 23:41:00
+01002A900D6D6000,"Motorsport Manager for Nintendo Switch™",nvdec,playable,2022-08-05 12:48:14
+01009DB00D6E0000,"Mountain Rescue Simulator",,playable,2022-09-20 16:36:48
+0100C4C00E73E000,"Moving Out",nvdec,playable,2021-06-07 21:17:24
+0100D3300F110000,"Mr Blaster",,playable,2022-09-14 17:56:24
+0100DCA011262000,"Mr. DRILLER DrillLand",nvdec,playable,2020-07-24 13:56:48
+010031F002B66000,"Mr. Shifty",slow,playable,2020-05-08 15:28:16
+01005EF00B4BC000,"Ms. Splosion Man",online,playable,2020-05-09 20:45:43
+010087C009246000,"Muddledash",services,ingame,2020-05-08 16:46:14
+01009D200952E000,"MudRunner - American Wilds",gpu;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52
+010073E008E6E000,"Mugsters",,playable,2021-01-28 17:57:17
+0100A8400471A000,"MUJO",,playable,2020-05-08 16:31:04
+0100211005E94000,"Mulaka",,playable,2021-01-28 18:07:20
+010038B00B9AE000,"Mummy Pinball",,playable,2022-08-05 16:08:11
+01008E200C5C2000,"Muse Dash",,playable,2020-06-06 14:41:29
+010035901046C000,"Mushroom Quest",,playable,2020-05-17 13:07:08
+0100700006EF6000,"Mushroom Wars 2",nvdec,playable,2020-09-28 15:26:08
+010046400F310000,"Music Racer",,playable,2020-08-10 08:51:23
+,"Musou Orochi 2 Ultimate",crash;nvdec,boots,2021-04-09 19:39:16
+0100F6000EAA8000,"Must Dash Amigos",,playable,2022-09-20 16:45:56
+01007B6006092000,"MUSYNX",,playable,2020-05-08 14:24:43
+0100C3E00ACAA000,"Mutant Football League: Dynasty Edition",online-broken,playable,2022-08-05 17:01:51
+01004BE004A86000,"Mutant Mudds Collection",,playable,2022-08-05 17:11:38
+0100E6B00DEA4000,"Mutant Year Zero: Road to Eden - Deluxe Edition",nvdec;UE4,playable,2022-09-10 13:31:10
+0100161009E5C000,"MX Nitro: Unleashed",,playable,2022-09-27 22:34:33
+0100218011E7E000,"MX vs ATV All Out",nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46
+0100D940063A0000,"MXGP3 - The Official Motocross Videogame",UE4;gpu;nvdec,ingame,2020-12-16 14:00:20
+01002C6012334000,"My Aunt is a Witch",,playable,2022-10-19 09:21:17
+0100F6F0118B8000,"My Butler",,playable,2020-06-27 13:46:23
+010031200B94C000,"My Friend Pedro",nvdec,playable,2021-05-28 11:19:17
+01000D700BE88000,"My Girlfriend is a Mermaid!?",nvdec,playable,2020-05-08 13:32:55
+010039000B68E000,"MY HERO ONE'S JUSTICE",UE4;crash;gpu;online,menus,2020-12-10 13:11:04
+01007E700DBF6000,"MY HERO ONE'S JUSTICE 2",UE4;gpu;nvdec,ingame,2020-12-18 14:08:47
+0100E4701373E000,"My Hidden Things",,playable,2021-04-15 11:26:06
+0100872012B34000,"My Little Dog Adventure",gpu,ingame,2020-12-10 17:47:37
+01008C600395A000,"My Little Riding Champion",slow,playable,2020-05-08 17:00:53
+010086B00C784000,"My Lovely Daughter: ReBorn",,playable,2022-11-24 17:25:32
+0100E7700C284000,"My Memory of Us",,playable,2022-08-20 11:03:14
+010028F00ABAE000,"My Riding Stables - Life with Horses",,playable,2022-08-05 21:39:07
+010042A00FBF0000,"My Riding Stables 2: A New Adventure",,playable,2021-05-16 14:14:59
+0100E25008E68000,"My Time at Portia",,playable,2021-05-28 12:42:55
+0100158011A08000,"My Universe - Cooking Star Restaurant",,playable,2022-10-19 10:00:44
+0100F71011A0A000,"My Universe - Fashion Boutique",nvdec,playable,2022-10-12 14:54:19
+0100CD5011A02000,"My Universe - PET CLINIC CATS & DOGS",crash;nvdec,boots,2022-02-06 02:05:53
+01006C301199C000,"My Universe - School Teacher",nvdec,playable,2021-01-21 16:02:52
+01000D5005974000,"N++ (NPLUSPLUS)",,playable,2022-08-05 21:54:58
+0100A6F00AC70000,"NAIRI: Tower of Shirin",nvdec,playable,2020-08-09 19:49:12
+010002F001220000,"NAMCO MUSEUM",ldn-untested,playable,2024-08-13 07:52:21
+0100DAA00AEE6000,"NAMCO MUSEUM™ ARCADE PAC™",,playable,2021-06-07 21:44:50
+,"NAMCOT COLLECTION",audio,playable,2020-06-25 13:35:22
+010072B00BDDE000,"Narcos: Rise of the Cartels",UE4;crash;nvdec,boots,2021-03-22 13:18:47
+01006BB00800A000,"NARUTO SHIPPUDEN: Ultimate Ninja STORM 3 Full Burst",nvdec,playable,2024-06-16 14:58:05
+010084D00CF5E000,"NARUTO SHIPPUDEN™: Ultimate Ninja® STORM 4 ROAD TO BORUTO",,playable,2024-06-29 13:04:22
+0100D2D0190A4000,"NARUTO X BORUTO Ultimate Ninja STORM CONNECTIONS",services-horizon,nothing,2024-07-25 05:16:48
+0100715007354000,"NARUTO: Ultimate Ninja STORM",nvdec,playable,2022-08-06 14:10:31
+0100545016D5E000,"NASCAR Rivals",crash;Incomplete,ingame,2023-04-21 01:17:47
+0100103011894000,"Naught",UE4,playable,2021-04-26 13:31:45
+01001AE00C1B2000,"NBA 2K Playgrounds 2",nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38
+0100760002048000,"NBA 2K18",gpu;ldn-untested,ingame,2022-08-06 14:17:51
+01001FF00B544000,"NBA 2K19",crash;ldn-untested;services,nothing,2021-04-16 13:07:21
+0100E24011D1E000,"NBA 2K21",gpu,boots,2022-10-05 15:31:51
+0100ACA017E4E800,"NBA 2K23",,boots,2023-10-10 23:07:14
+010006501A8D8000,"NBA 2K24 Kobe Bryant Edition",cpu;gpu,boots,2024-08-11 18:23:08
+010002900294A000,"NBA Playgrounds",nvdec;online-broken;UE4,playable,2022-08-06 17:06:59
+0100F5A008126000,"NBA Playgrounds - Enhanced Edition",nvdec;online-broken;UE4,playable,2022-08-06 16:13:44
+0100BBC00E4F8000,"Need a packet?",,playable,2020-08-12 16:09:01
+010029B0118E8000,"Need for Speed™ Hot Pursuit Remastered",online-broken,playable,2024-03-20 21:58:02
+010023500B0BA000,"Nefarious",,playable,2020-12-17 03:20:33
+01008390136FC000,"Negative: The Way of Shinobi",nvdec,playable,2021-03-24 11:29:41
+010065F00F55A000,"Neighbours back From Hell",nvdec,playable,2022-10-12 15:36:48
+0100B4900AD3E000,"NEKOPARA Vol.1",nvdec,playable,2022-08-06 18:25:54
+010012900C782000,"NEKOPARA Vol.2",,playable,2020-12-16 11:04:47
+010045000E418000,"NEKOPARA Vol.3",,playable,2022-10-03 12:49:04
+010049F013656000,"NEKOPARA Vol.4",crash,ingame,2021-01-17 01:47:18
+01006ED00BC76000,"Nelke & the Legendary Alchemists ~Ateliers of the New World~",,playable,2021-01-28 19:39:42
+01005F000B784000,"Nelly Cootalot: The Fowl Fleet",,playable,2020-06-11 20:55:42
+01001AB0141A8000,"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",crash,ingame,2021-07-18 07:29:18
+0100EBB00D2F4000,"Neo Cab",,playable,2021-04-24 00:27:58
+010040000DB98000,"Neo Cab Demo",crash,boots,2020-06-16 00:14:00
+010006D0128B4000,"NEOGEO POCKET COLOR SELECTION Vol.1",,playable,2023-07-08 20:55:36
+0100BAB01113A000,"Neon Abyss",,playable,2022-10-05 15:59:44
+010075E0047F8000,"Neon Chrome",,playable,2022-08-06 18:38:34
+010032000EAC6000,"Neon Drive",,playable,2022-09-10 13:45:48
+0100B9201406A000,"Neon White",crash,ingame,2023-02-02 22:25:06
+0100743008694000,"Neonwall",nvdec,playable,2022-08-06 18:49:52
+01001A201331E000,"Neoverse Trinity Edition",,playable,2022-10-19 10:28:03
+01000B2011352000,"Nerdook Bundle Vol. 1",gpu;slow,ingame,2020-10-07 14:27:10
+01008B0010160000,"Nerved",UE4,playable,2022-09-20 17:14:03
+0100BA0004F38000,"NeuroVoider",,playable,2020-06-04 18:20:05
+0100C20012A54000,"Nevaeh",gpu;nvdec,ingame,2021-06-16 17:29:03
+010039801093A000,"Never Breakup",,playable,2022-10-05 16:12:12
+0100F79012600000,"Neverending Nightmares",crash;gpu,boots,2021-04-24 01:43:35
+0100A9600EDF8000,"Neverlast",slow,ingame,2020-07-13 23:55:19
+010013700DA4A000,"Neverwinter Nights: Enhanced Edition",gpu;nvdec,menus,2024-09-30 02:59:19
+01004C200100E000,"New Frontier Days ~Founding Pioneers~",,playable,2020-12-10 12:45:07
+0100F4300BF2C000,"New Pokémon Snap™",,playable,2023-01-15 23:26:57
+010017700B6C2000,"New Super Lucky's Tale",,playable,2024-03-11 14:14:10
+0100EA80032EA000,"New Super Mario Bros.™ U Deluxe",32-bit,playable,2023-10-08 02:06:37
+0100B9500E886000,"Newt One",,playable,2020-10-17 21:21:48
+01005A5011A44000,"Nexomon: Extinction",,playable,2020-11-30 15:02:22
+0100B69012EC6000,"Nexoria: Dungeon Rogue Heroes",gpu,ingame,2021-10-04 18:41:29
+0100271004570000,"Next Up Hero",online,playable,2021-01-04 22:39:36
+0100E5600D446000,"Ni no Kuni: Wrath of the White Witch",32-bit;nvdec,boots,2024-07-12 04:52:59
+0100EDD00D530000,"Nice Slice",nvdec,playable,2020-06-17 15:13:27
+01000EC010BF4000,"Niche - a genetics survival game",nvdec,playable,2020-11-27 14:01:11
+010010701AFB2000,"Nickelodeon All-Star Brawl 2",,playable,2024-06-03 14:15:01
+0100D6200933C000,"Nickelodeon Kart Racers",,playable,2021-01-07 12:16:49
+010058800F860000,"Nicky - The Home Alone Golf Ball",,playable,2020-08-08 13:45:39
+0100A95012668000,"Nicole",audout,playable,2022-10-05 16:41:44
+0100B8E016F76000,"NieR:Automata The End of YoRHa Edition",slow;crash,ingame,2024-05-17 01:06:34
+0100F3A0095A6000,"Night Call",nvdec,playable,2022-10-03 12:57:00
+0100921006A04000,"Night in the Woods",,playable,2022-12-03 20:17:54
+0100D8500A692000,"Night Trap - 25th Anniversary Edition",nvdec,playable,2022-08-08 13:16:14
+01005F4009112000,"Nightmare Boy: The New Horizons of Reigns of Dreams, a Metroidvania journey with little rusty nightmares, the empire of knight final boss",,playable,2021-01-05 15:52:29
+01006E700B702000,"Nightmares from the Deep 2: The Siren`s Call",nvdec,playable,2022-10-19 10:58:53
+0100628004BCE000,"Nights of Azure 2: Bride of the New Moon",crash;nvdec;regression,menus,2022-11-24 16:00:39
+010042300C4F6000,"Nightshade/百花百狼",nvdec,playable,2020-05-10 19:43:31
+0100AA0008736000,"Nihilumbra",,playable,2020-05-10 16:00:12
+0100D03003F0E000,"Nine Parchments",ldn-untested,playable,2022-08-07 12:32:08
+0100E2F014F46000,"NINJA GAIDEN Σ",nvdec,playable,2022-11-13 16:27:02
+0100696014F4A000,"NINJA GAIDEN Σ2",nvdec,playable,2024-07-31 21:53:48
+01002AF014F4C000,"NINJA GAIDEN: Master Collection",nvdec,playable,2023-08-11 08:25:31
+010088E003A76000,"Ninja Shodown",,playable,2020-05-11 12:31:21
+010081D00A480000,"Ninja Striker!",,playable,2020-12-08 19:33:29
+0100CCD0073EA000,"Ninjala",online-broken;UE4,boots,2024-07-03 20:04:49
+010003C00B868000,"Ninjin: Clash of Carrots",online-broken,playable,2024-07-10 05:12:26
+0100746010E4C000,"NinNinDays",,playable,2022-11-20 15:17:29
+0100C9A00ECE6000,"Nintendo 64™ – Nintendo Switch Online",gpu;vulkan,ingame,2024-04-23 20:21:07
+0100D870045B6000,"Nintendo Entertainment System™ - Nintendo Switch Online",online,playable,2022-07-01 15:45:06
+0100C4B0034B2000,"Nintendo Labo Toy-Con 01 Variety Kit",gpu,ingame,2022-08-07 12:56:07
+01001E9003502000,"Nintendo Labo Toy-Con 03 Vehicle Kit",services;crash,menus,2022-08-03 17:20:11
+0100165003504000,"Nintendo Labo Toy-Con 04 VR Kit",services;crash,boots,2023-01-17 22:30:24
+01009AB0034E0000,"Nintendo Labo™ Toy-Con 02: Robot Kit",gpu,ingame,2022-08-07 13:03:19
+0100D2F00D5C0000,"Nintendo Switch™ Sports",deadlock,boots,2024-09-10 14:20:24
+01000EE017182000,"Nintendo Switch™ Sports Online Play Test",gpu,ingame,2022-03-16 07:44:12
+010037200C72A000,"Nippon Marathon",nvdec,playable,2021-01-28 20:32:46
+010020901088A000,"Nirvana Pilot Yume",,playable,2022-10-29 11:49:49
+01009B400ACBA000,"No Heroes Here",online,playable,2020-05-10 02:41:57
+0100853015E86000,"No Man's Sky",gpu,ingame,2024-07-25 05:18:17
+0100F0400F202000,"No More Heroes",32-bit,playable,2022-09-13 07:44:27
+010071400F204000,"No More Heroes 2: Desperate Struggle",32-bit;nvdec,playable,2022-11-19 01:38:13
+01007C600EB42000,"No More Heroes 3",gpu;UE4,ingame,2024-03-11 17:06:19
+01009F3011004000,"No Straight Roads",nvdec,playable,2022-10-05 17:01:38
+0100F7D00A1BC000,"NO THING",,playable,2021-01-04 19:06:01
+0100542012884000,"Nongunz: Doppelganger Edition",,playable,2022-10-29 12:00:39
+010016E011EFA000,"Norman's Great Illusion",,playable,2020-12-15 19:28:24
+01001A500AD6A000,"Norn9 ~Norn + Nonette~ LOFN",nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16
+01004840086FE000,"NORTH",nvdec,playable,2021-01-05 16:17:44
+0100A9E00D97A000,"Northgard",crash,menus,2022-02-06 02:05:35
+01008AE019614000,"nOS new Operating System",,playable,2023-03-22 16:49:08
+0100CB800B07E000,"NOT A HERO: SUPER SNAZZY EDITION",,playable,2021-01-28 19:31:24
+01004D500D9BE000,"Not Not - A Brain Buster",,playable,2020-05-10 02:05:26
+0100DAF00D0E2000,"Not Tonight: Take Back Control Edition",nvdec,playable,2022-10-19 11:48:47
+0100343013248000,"Nubarron: The adventure of an unlucky gnome",,playable,2020-12-17 16:45:17
+01005140089F6000,"Nuclien",,playable,2020-05-10 05:32:55
+010002700C34C000,"Numbala",,playable,2020-05-11 12:01:07
+010020500C8C8000,"Number Place 10000",gpu,menus,2021-11-24 09:14:23
+010003701002C000,"Nurse Love Syndrome",,playable,2022-10-13 10:05:22
+0000000000000000,"nx-hbmenu",Needs Update;homebrew,boots,2024-04-06 22:05:32
+,"nxquake2",services;crash;homebrew,nothing,2022-08-04 23:14:04
+010049F00EC30000,"Nyan Cat: Lost in Space",online,playable,2021-06-12 13:22:03
+01002E6014FC4000,"O---O",,playable,2022-10-29 12:12:14
+010074600CC7A000,"OBAKEIDORO!",nvdec;online,playable,2020-10-16 16:57:34
+01002A000C478000,"Observer",UE4;gpu;nvdec,ingame,2021-03-03 20:19:45
+01007D7001D0E000,"Oceanhorn - Monster of Uncharted Seas",,playable,2021-01-05 13:55:22
+01006CB010840000,"Oceanhorn 2: Knights of the Lost Realm",,playable,2021-05-21 18:26:10
+010096B00A08E000,"Octocopter: Double or Squids",,playable,2021-01-06 01:30:16
+0100CAB006F54000,"Octodad: Dadliest Catch",crash,boots,2021-04-23 15:26:12
+0100A3501946E000,"OCTOPATH TRAVELER II",gpu;amd-vendor-bug,ingame,2024-09-22 11:39:20
+010057D006492000,"Octopath Traveler™",UE4;crash;gpu,ingame,2020-08-31 02:34:36
+010084300C816000,"Odallus: The Dark Call",,playable,2022-08-08 12:37:58
+0100BB500EE3C000,"Oddworld: Munch's Oddysee",gpu;nvdec,ingame,2021-06-17 12:11:50
+01005E700ABB8000,"Oddworld: New 'n' Tasty",nvdec,playable,2021-06-17 17:51:32
+0100D210177C6000,"ODDWORLD: SOULSTORM",services-horizon;crash,boots,2024-08-18 13:13:26
+01002EA00ABBA000,"Oddworld: Stranger's Wrath",crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21
+010029F00C876000,"Odium to the Core",gpu,ingame,2021-01-08 14:03:52
+01006F5013202000,"Off And On Again",,playable,2022-10-29 19:46:26
+01003CD00E8BC000,"Offroad Racing - Buggy X ATV X Moto",online-broken;UE4,playable,2022-09-14 18:53:22
+01003B900AE12000,"Oh My Godheads: Party Edition",,playable,2021-04-15 11:04:11
+0100F45006A00000,"Oh...Sir! The Hollywood Roast",,ingame,2020-12-06 00:42:30
+010030B00B2F6000,"OK K.O.! Let’s Play Heroes",nvdec,playable,2021-01-11 18:41:02
+0100276009872000,"OKAMI HD",nvdec,playable,2024-04-05 06:24:58
+01006AB00BD82000,"OkunoKA",online-broken,playable,2022-08-08 14:41:51
+0100CE2007A86000,"Old Man's Journey",nvdec,playable,2021-01-28 19:16:52
+0100C3D00923A000,"Old School Musical",,playable,2020-12-10 12:51:12
+010099000BA48000,"Old School Racer 2",,playable,2020-10-19 12:11:26
+0100E0200B980000,"OlliOlli: Switch Stance",gpu,boots,2024-04-25 08:36:37
+0100F9D00C186000,"Olympia Soiree",,playable,2022-12-04 21:07:12
+0100A8B00E14A000,"Olympic Games Tokyo 2020 – The Official Video Game™",ldn-untested;nvdec;online,playable,2021-01-06 01:20:24
+01001D600E51A000,"Omega Labyrinth Life",,playable,2021-02-23 21:03:03
+,"Omega Vampire",nvdec,playable,2020-10-17 19:15:35
+0100CDC00C40A000,"Omensight: Definitive Edition",UE4;crash;nvdec,ingame,2020-07-26 01:45:14
+01006DB00D970000,"OMG Zombies!",32-bit,playable,2021-04-12 18:04:45
+010014E017B14000,"OMORI",,playable,2023-01-07 20:21:02
+,"Once Upon A Coma",nvdec,playable,2020-08-01 12:09:39
+0100BD3006A02000,"One More Dungeon",,playable,2021-01-06 09:10:58
+010076600FD64000,"One Person Story",,playable,2020-07-14 11:51:02
+0100774009CF6000,"ONE PIECE Pirate Warriors 3 Deluxe Edition",nvdec,playable,2020-05-10 06:23:52
+01008FE00E2F6000,"ONE PIECE: PIRATE WARRIORS 4",online-broken;ldn-untested,playable,2022-09-27 22:55:46
+0100574002AF4000,"ONE PIECE: Unlimited World Red Deluxe Edition",,playable,2020-05-10 22:26:32
+0100EEA00E3EA000,"One-Way Ticket",UE4,playable,2020-06-20 17:20:49
+0100463013246000,"Oneiros",,playable,2022-10-13 10:17:22
+010057C00D374000,"Oniken",,playable,2022-09-10 14:22:38
+010037900C814000,"Oniken: Unstoppable Edition",,playable,2022-08-08 14:52:06
+0100416008A12000,"Onimusha: Warlords",nvdec,playable,2020-07-31 13:08:39
+0100CF4011B2A000,"OniNaki",nvdec,playable,2021-02-27 21:52:42
+010074000BE8E000,"oOo: Ascension",,playable,2021-01-25 14:13:34
+0100D5400BD90000,"Operación Triunfo 2017",services;nvdec,ingame,2022-08-08 15:06:42
+01006CF00CFA4000,"Operencia: The Stolen Sun",UE4;nvdec,playable,2021-06-08 13:51:07
+01004A200BE82000,"OPUS Collection",,playable,2021-01-25 15:24:04
+010049C0075F0000,"OPUS: The Day We Found Earth",nvdec,playable,2021-01-21 18:29:31
+0100F9A012892000,"Ord.",,playable,2020-12-14 11:59:06
+010061D00DB74000,"Ori and the Blind Forest: Definitive Edition",nvdec;online-broken,playable,2022-09-14 19:58:13
+010005800F46E000,"Ori and the Blind Forest: Definitive Edition Demo",,playable,2022-09-10 14:40:12
+01008DD013200000,"Ori and the Will of the Wisps",gpu,ingame,2025-01-11 06:09:54
+01006C70102EA000,"Orn: The Tiny Forest Sprite",UE4;gpu,ingame,2020-08-07 14:25:30
+0100E5900F49A000,"Othercide",nvdec,playable,2022-10-05 19:04:38
+01006AA00EE44000,"Otokomizu",,playable,2020-07-13 21:00:44
+01006AF013A9E000,"Otti: The House Keeper",,playable,2021-01-31 12:11:24
+01000320060AC000,"OTTTD: Over The Top Tower Defense",slow,ingame,2020-10-10 19:31:07
+010097F010FE6000,"Our Two Bedroom Story",gpu;nvdec,ingame,2023-10-10 17:41:20
+0100D5D00C6BE000,"Our World Is Ended.",nvdec,playable,2021-01-19 22:46:57
+01005A700A166000,"OUT OF THE BOX",,playable,2021-01-28 01:34:27
+0100D9F013102000,"Outbreak Lost Hope",crash,boots,2021-04-26 18:01:23
+01006EE013100000,"Outbreak The Nightmare Chronicles",,playable,2022-10-13 10:41:57
+0100A0D013464000,"Outbreak: Endless Nightmares",,playable,2022-10-29 12:35:49
+0100C850130FE000,"Outbreak: Epidemic",,playable,2022-10-13 10:27:31
+0100B450130FC000,"Outbreak: The New Nightmare",,playable,2022-10-19 15:42:07
+0100B8900EFA6000,"Outbuddies DX",gpu,ingame,2022-08-04 22:39:24
+0100DE70085E8000,"Outlast 2",crash;nvdec,ingame,2022-01-22 22:28:05
+01008D4007A1E000,"Outlast: Bundle of Terror",nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26
+01009B900401E000,"Overcooked Special Edition",,playable,2022-08-08 20:48:52
+01006FD0080B2000,"Overcooked! 2",ldn-untested,playable,2022-08-08 16:48:10
+0100F28011892000,"Overcooked! All You Can Eat",ldn-untested;online,playable,2021-04-15 10:33:52
+0100D7F00EC64000,"Overlanders",nvdec;UE4,playable,2022-09-14 20:15:06
+01008EA00E816000,"OVERPASS™",online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47
+0100647012F62000,"Override 2: Super Mech League",online-broken;UE4,playable,2022-10-19 15:56:04
+01008A700F7EE000,"Override: Mech City Brawl - Super Charged Mega Edition",nvdec;online-broken;UE4,playable,2022-09-20 17:33:32
+0100F8600E21E000,"Overwatch® 2",deadlock,boots,2022-09-14 20:22:22
+01005F000CC18000,"OVERWHELM",,playable,2021-01-21 18:37:18
+0100BC2004FF4000,"Owlboy",,playable,2020-10-19 14:24:45
+0100AD9012510000,"PAC-MAN™ 99",gpu;online-broken,ingame,2024-04-23 00:48:25
+010024C001224000,"PAC-MAN™ CHAMPIONSHIP EDITION 2 PLUS",,playable,2021-01-19 22:06:18
+011123900AEE0000,"Paladins",online,menus,2021-01-21 19:21:37
+0100F0D004CAE000,"PAN-PAN A tiny big adventure",audout,playable,2021-01-25 14:42:00
+010083700B730000,"Pang Adventures",,playable,2021-04-10 12:16:59
+010006E00DFAE000,"Pantsu Hunter: Back to the 90s",,playable,2021-02-19 15:12:27
+0100C6A00E94A000,"Panzer Dragoon: Remake",,playable,2020-10-04 04:03:55
+01004AE0108E0000,"Panzer Paladin",,playable,2021-05-05 18:26:00
+010004500DE50000,"Paper Dolls Original",UE4;crash,boots,2020-07-13 20:26:21
+0100A3900C3E2000,"Paper Mario™: The Origami King",audio;Needs Update,playable,2024-08-09 18:27:40
+0100ECD018EBE000,"Paper Mario™: The Thousand-Year Door",gpu;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35
+01006AD00B82C000,"Paperbound Brawlers",,playable,2021-01-25 14:32:15
+0100DC70174E0000,"Paradigm Paradox",vulkan-backend-bug,playable,2022-12-03 22:28:13
+01007FB010DC8000,"Paradise Killer",UE4,playable,2022-10-05 19:33:05
+010063400B2EC000,"Paranautical Activity",,playable,2021-01-25 13:49:19
+01006B5012B32000,"Part Time UFO™",crash,ingame,2023-03-03 03:13:05
+01007FC00A040000,"Party Arcade",online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53
+0100B8E00359E000,"Party Golf",nvdec,playable,2022-08-09 12:38:30
+010022801217E000,"Party Hard 2",nvdec,playable,2022-10-05 20:31:48
+010027D00F63C000,"Party Treats",,playable,2020-07-02 00:05:00
+01001E500EA16000,"Path of Sin: Greed",crash,menus,2021-11-24 08:00:00
+010031F006E76000,"Pato Box",,playable,2021-01-25 15:17:52
+01001F201121E000,"PAW Patrol Mighty Pups Save Adventure Bay",,playable,2022-10-13 12:17:55
+0100360016800000,"PAW Patrol: Grand Prix",gpu,ingame,2024-05-03 16:16:11
+0100CEC003A4A000,"PAW Patrol: On a Roll!",nvdec,playable,2021-01-28 21:14:49
+01000C4015030000,"Pawapoke R",services-horizon,nothing,2024-05-14 14:28:32
+0100A56006CEE000,"Pawarumi",online-broken,playable,2022-09-10 15:19:33
+0100274004052000,"PAYDAY 2",nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39
+010085700ABC8000,"PBA Pro Bowling",nvdec;online-broken;UE4,playable,2022-09-14 23:00:49
+0100F95013772000,"PBA Pro Bowling 2021",online-broken;UE4,playable,2022-10-19 16:46:40
+010072800CBE8000,"PC Building Simulator",,playable,2020-06-12 00:31:58
+010002100CDCC000,"Peaky Blinders: Mastermind",,playable,2022-10-19 16:56:35
+010028A0048A6000,"Peasant Knight",,playable,2020-12-22 09:30:50
+0100C510049E0000,"Penny-Punching Princess",,playable,2022-08-09 13:37:05
+0100CA901AA9C000,"Penny’s Big Breakaway",amd-vendor-bug,playable,2024-05-27 07:58:51
+0100563005B70000,"Perception",UE4;crash;nvdec,menus,2020-12-18 11:49:23
+010011700D1B2000,"Perchang",,playable,2021-01-25 14:19:52
+010089F00A3B4000,"Perfect Angle",,playable,2021-01-21 18:48:45
+01005CD012DC0000,"Perky Little Things",crash;vulkan,boots,2024-08-04 07:22:46
+01005EB013FBA000,"Persephone",,playable,2021-03-23 22:39:19
+0100A0300FC3E000,"Perseverance",,playable,2020-07-13 18:48:27
+010062B01525C000,"Persona 4 Golden",,playable,2024-08-07 17:48:07
+01005CA01580E000,"Persona 5 Royal",gpu,ingame,2024-08-17 21:45:15
+010087701B092000,"Persona 5 Tactica",,playable,2024-04-01 22:21:03
+,"Persona 5: Scramble",deadlock,boots,2020-10-04 03:22:29
+0100801011C3E000,"Persona® 5 Strikers",nvdec;mac-bug,playable,2023-09-26 09:36:01
+010044400EEAE000,"Petoons Party",nvdec,playable,2021-03-02 21:07:58
+010053401147C000,"PGA TOUR 2K21",deadlock;nvdec,ingame,2022-10-05 21:53:50
+0100DDD00C0EA000,"Phantaruk",,playable,2021-06-11 18:09:54
+0100063005C86000,"Phantom Breaker: Battle Grounds Overdrive",audio;nvdec,playable,2024-02-29 14:20:35
+010096F00E5B0000,"Phantom Doctrine",UE4,playable,2022-09-15 10:51:50
+0100C31005A50000,"Phantom Trigger",,playable,2022-08-09 14:27:30
+0100CB000A142000,"Phoenix Wright: Ace Attorney Trilogy",,playable,2023-09-15 22:03:12
+0100DA400F624000,"PHOGS!",online,playable,2021-01-18 15:18:37
+0100BF1003B9A000,"Physical Contact: 2048",slow,playable,2021-01-25 15:18:32
+01008110036FE000,"Physical Contact: SPEED",,playable,2022-08-09 14:40:46
+010077300A86C000,"PIANISTA",online-broken,playable,2022-08-09 14:52:56
+010012100E8DC000,"PICROSS LORD OF THE NAZARICK",,playable,2023-02-08 15:54:56
+0100C9600A88E000,"PICROSS S2",,playable,2020-10-15 12:01:40
+010079200D330000,"PICROSS S3",,playable,2020-10-15 11:55:27
+0100C250115DC000,"PICROSS S4",,playable,2020-10-15 12:33:46
+0100AC30133EC000,"PICROSS S5",,playable,2022-10-17 18:51:42
+010025901432A000,"PICROSS S6",,playable,2022-10-29 17:52:19
+01009B2016104000,"PICROSS S7",,playable,2022-02-16 12:51:25
+010043B00E1CE000,"PictoQuest",,playable,2021-02-27 15:03:16
+0100D06003056000,"Piczle Lines DX",UE4;crash;nvdec,menus,2020-11-16 04:21:31
+010017600B532000,"Piczle Lines DX 500 More Puzzles!",UE4,playable,2020-12-15 23:42:51
+01000FD00D5CC000,"Pig Eat Ball",services,ingame,2021-11-30 01:57:45
+01001CB0106F8000,"Pikmin 3 Deluxe Demo",32-bit;crash;demo;gpu,ingame,2021-06-16 18:38:07
+0100E0B019974000,"Pikmin 4 Demo",gpu;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08
+0100AA80194B0000,"Pikmin™ 1",audio,ingame,2024-05-28 18:56:11
+0100D680194B2000,"Pikmin™ 1+2",gpu,ingame,2023-07-31 08:53:41
+0100F4C009322000,"Pikmin™ 3 Deluxe",gpu;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26
+0100B7C00933A000,"Pikmin™ 4",gpu;crash;UE4,ingame,2024-08-26 03:39:08
+0100D6200E130000,"Pillars of Eternity: Complete Edition",,playable,2021-02-27 00:24:21
+01007A500B0B2000,"Pilot Sports",,playable,2021-01-20 15:04:17
+0100DA70186D4000,"Pinball FX",,playable,2024-05-03 17:09:11
+0100DB7003828000,"Pinball FX3",online-broken,playable,2022-11-11 23:49:07
+01002BA00D662000,"Pine",slow,ingame,2020-07-29 16:57:39
+010041100B148000,"Pinstripe",,playable,2020-11-26 10:40:40
+01002B20174EE000,"Piofiore: Episodio 1926",,playable,2022-11-23 18:36:05
+01009240117A2000,"Piofiore: Fated Memories",nvdec,playable,2020-11-30 14:27:50
+0100EA2013BCC000,"Pixel Game Maker Series Puzzle Pedestrians",,playable,2022-10-24 20:15:50
+0100859013CE6000,"Pixel Game Maker Series Werewolf Princess Kaguya",crash;services,nothing,2021-03-26 00:23:07
+010060A00F5E8000,"Pixel Gladiator",,playable,2020-07-08 02:41:26
+010000E00E612000,"Pixel Puzzle Makeout League",,playable,2022-10-13 12:34:00
+0100382011002000,"PixelJunk Eden 2",crash,ingame,2020-12-17 11:55:52
+0100E4D00A690000,"PixelJunk™ Monsters 2",,playable,2021-06-07 03:40:01
+01004A900C352000,"Pizza Titan Ultra",nvdec,playable,2021-01-20 15:58:42
+05000FD261232000,"Pizza Tower",crash,ingame,2024-09-16 00:21:56
+0100FF8005EB2000,"Plague Road",,playable,2022-08-09 15:27:14
+010030B00C316000,"Planescape: Torment and Icewind Dale: Enhanced Editions",cpu;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26
+010003C0099EE000,"PLANET ALPHA",UE4;gpu,ingame,2020-12-16 14:42:20
+01007EA019CFC000,"Planet Cube: Edge",,playable,2023-03-22 17:10:12
+0100F0A01F112000,"planetarian: The Reverie of a Little Planet & Snow Globe",,playable,2020-10-17 20:26:20
+010087000428E000,"Plantera Deluxe",,playable,2022-08-09 15:36:28
+0100C56010FD8000,"Plants vs. Zombies: Battle for Neighborville™ Complete Edition",gpu;audio;crash,boots,2024-09-02 12:58:14
+0100E5B011F48000,"PLOID SAGA",,playable,2021-04-19 16:58:45
+01009440095FE000,"Pode",nvdec,playable,2021-01-25 12:58:35
+010086F0064CE000,"Poi: Explorer Edition",nvdec,playable,2021-01-21 19:32:00
+0100EB6012FD2000,"Poison Control",,playable,2021-05-16 14:01:54
+010072400E04A000,"Pokémon Café ReMix",,playable,2021-08-17 20:00:04
+01003D200BAA2000,"Pokémon Mystery Dungeon™: Rescue Team DX",mac-bug,playable,2024-01-21 00:16:32
+01008DB008C2C000,"Pokémon Shield + Pokémon Shield Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22
+0100ABF008968000,"Pokémon Sword + Pokémon Sword Expansion Pass",deadlock;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37
+01009AD008C4C000,"Pokémon: Let's Go, Pikachu! demo",slow;demo,playable,2023-11-26 11:23:20
+0100000011D90000,"Pokémon™ Brilliant Diamond",gpu;ldn-works,ingame,2024-08-28 13:26:35
+010015F008C54000,"Pokémon™ HOME",Needs Update;crash;services,menus,2020-12-06 06:01:51
+01001F5010DFA000,"Pokémon™ Legends: Arceus",gpu;Needs Update;ldn-works,ingame,2024-09-19 10:02:02
+01005D100807A000,"Pokémon™ Quest",,playable,2022-02-22 16:12:32
+0100A3D008C5C000,"Pokémon™ Scarlet",gpu;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29
+01008F6008C5E000,"Pokémon™ Violet",gpu;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48
+0100187003A36000,"Pokémon™: Let’s Go, Eevee!",crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04
+010003F003A34000,"Pokémon™: Let’s Go, Pikachu!",crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41
+0100B3F000BE2000,"Pokkén Tournament™ DX",nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08
+010030D005AE6000,"Pokkén Tournament™ DX Demo",demo;opengl-backend-bug,playable,2022-08-10 12:03:19
+0100A3500B4EC000,"Polandball: Can Into Space",,playable,2020-06-25 15:13:26
+0100EAB00605C000,"Poly Bridge",services,playable,2020-06-08 23:32:41
+010017600B180000,"Polygod",slow;regression,ingame,2022-08-10 14:38:14
+010074B00ED32000,"Polyroll",gpu,boots,2021-07-01 16:16:50
+010096B01179A000,"Ponpu",,playable,2020-12-16 19:09:34
+01005C5011086000,"Pooplers",,playable,2020-11-02 11:52:10
+01007EF013CA0000,"Port Royale 4",crash;nvdec,menus,2022-10-30 14:34:06
+01007BB017812000,"Portal",,playable,2024-06-12 03:48:29
+0100ABD01785C000,"Portal 2",gpu,ingame,2023-02-20 22:44:15
+010050D00FE0C000,"Portal Dogs",,playable,2020-09-04 12:55:46
+0100437004170000,"Portal Knights",ldn-untested;online,playable,2021-05-27 19:29:04
+01005FC010EB2000,"Potata: Fairy Flower",nvdec,playable,2020-06-17 09:51:34
+01000A4014596000,"Potion Party",,playable,2021-05-06 14:26:54
+0100E1E00CF1A000,"Power Rangers: Battle for the Grid",,playable,2020-06-21 16:52:42
+0100D1C01C194000,"Powerful Pro Baseball 2024-2025",gpu,ingame,2024-08-25 06:40:48
+01008E100E416000,"PowerSlave Exhumed",gpu,ingame,2023-07-31 23:19:10
+010054F01266C000,"Prehistoric Dude",gpu,ingame,2020-10-12 12:38:48
+,"Pretty Princess Magical Coordinate",,playable,2020-10-15 11:43:41
+01007F00128CC000,"Pretty Princess Party",,playable,2022-10-19 17:23:58
+010009300D278000,"Preventive Strike",nvdec,playable,2022-10-06 10:55:51
+0100210019428000,"Prince of Persia The Lost Crown",crash,ingame,2024-06-08 21:31:58
+01007A3009184000,"Princess Peach™: Showtime!",UE4,playable,2024-09-21 13:39:45
+010024701DC2E000,"Princess Peach™: Showtime! Demo",UE4;demo,playable,2024-03-10 17:46:45
+01001FA01451C000,"Prinny Presents NIS Classics Volume 1: Phantom Brave: The Hermuda Triangle Remastered / Soul Nomad & the World Eaters",crash;Needs Update,boots,2023-02-02 07:23:09
+01008FA01187A000,"Prinny® 2: Dawn of Operation Panties, Dood!",32-bit,playable,2022-10-13 12:42:58
+01007A0011878000,"Prinny®: Can I Really Be the Hero?",32-bit;nvdec,playable,2023-10-22 09:25:25
+010007F00879E000,"PriPara: All Idol Perfect Stage",,playable,2022-11-22 16:35:52
+010029200AB1C000,"Prison Architect: Nintendo Switch™ Edition",,playable,2021-04-10 12:27:58
+0100C1801B914000,"Prison City",gpu,ingame,2024-03-01 08:19:33
+0100F4800F872000,"Prison Princess",,playable,2022-11-20 15:00:25
+0100A9800A1B6000,"Professional Construction – The Simulation",slow,playable,2022-08-10 15:15:45
+010077B00BDD8000,"Professional Farmer: Nintendo Switch™ Edition",slow,playable,2020-12-16 13:38:19
+010018300C83A000,"Professor Lupo and his Horrible Pets",,playable,2020-06-12 00:08:45
+0100D1F0132F6000,"Professor Lupo: Ocean",,playable,2021-04-14 16:33:33
+0100BBD00976C000,"Project Highrise: Architect's Edition",,playable,2022-08-10 17:19:12
+0100ACE00DAB6000,"Project Nimbus: Complete Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43
+01002980140F6000,"Project TRIANGLE STRATEGY™ Debut Demo",UE4;demo,playable,2022-10-24 21:40:27
+0100BDB01150E000,"Project Warlock",,playable,2020-06-16 10:50:41
+,"Psikyo Collection Vol 1",32-bit,playable,2020-10-11 13:18:47
+0100A2300DB78000,"Psikyo Collection Vol. 3",,ingame,2021-06-07 02:46:23
+01009D400C4A8000,"Psikyo Collection Vol.2",32-bit,playable,2021-06-07 03:22:07
+01007A200F2E2000,"Psikyo Shooting Stars Alpha",32-bit,playable,2021-04-13 12:03:43
+0100D7400F2E4000,"Psikyo Shooting Stars Bravo",32-bit,playable,2021-06-14 12:09:07
+0100EC100A790000,"PSYVARIAR DELTA",nvdec,playable,2021-01-20 13:01:46
+,"Puchitto kurasutā",Need-Update;crash;services,menus,2020-07-04 16:44:28
+0100D61010526000,"Pulstario",,playable,2022-10-06 11:02:01
+01009AE00B788000,"Pumped BMX Pro",nvdec;online-broken,playable,2022-09-20 17:40:50
+01006C10131F6000,"Pumpkin Jack",nvdec;UE4,playable,2022-10-13 12:52:32
+010016400F07E000,"Push the Crate",nvdec;UE4,playable,2022-09-15 13:28:41
+0100B60010432000,"Push the Crate 2",UE4;gpu;nvdec,ingame,2021-06-10 14:20:01
+0100F1200F6D8000,"Pushy and Pully in Blockland",,playable,2020-07-04 11:44:41
+0100AAE00CAB4000,"Puyo Puyo Champions",online,playable,2020-06-19 11:35:08
+010038E011940000,"Puyo Puyo™ Tetris® 2",ldn-untested,playable,2023-09-26 11:35:25
+0100C5700ECE0000,"Puzzle & Dragons GOLD",slow,playable,2020-05-13 15:09:34
+010079E01A1E0000,"Puzzle Bobble Everybubble!",audio;ldn-works,playable,2023-06-10 03:53:40
+010043100F0EA000,"Puzzle Book",,playable,2020-09-28 13:26:01
+0100476004A9E000,"Puzzle Box Maker",nvdec;online-broken,playable,2022-08-10 18:00:52
+0100A4E017372000,"Pyramid Quest",gpu,ingame,2023-08-16 21:14:52
+0100F1100E606000,"Q-YO Blaster",gpu,ingame,2020-06-07 22:36:53
+010023600AA34000,"Q.U.B.E. 2",UE4,playable,2021-03-03 21:38:57
+0100A8D003BAE000,"Qbics Paint",gpu;services,ingame,2021-06-07 10:54:09
+0100BA5012E54000,"QUAKE",gpu;crash,menus,2022-08-08 12:40:34
+010048F0195E8000,"Quake II",,playable,2023-08-15 03:42:14
+,"QuakespasmNX",crash;homebrew,nothing,2022-07-23 19:28:07
+010045101288A000,"Quantum Replica",nvdec;UE4,playable,2022-10-30 21:17:22
+0100F1400BA88000,"Quarantine Circular",,playable,2021-01-20 15:24:15
+0100DCF00F13A000,"Queen's Quest 4: Sacred Truce",nvdec,playable,2022-10-13 12:59:21
+0100492012378000,"Quell",gpu,ingame,2021-06-11 15:59:53
+01001DE005012000,"Quest of Dungeons",,playable,2021-06-07 10:29:22
+,"QuietMansion2",,playable,2020-09-03 14:59:35
+0100AF100EE76000,"Quiplash 2 InterLASHional: The Say Anything Party Game!",online-working,playable,2022-10-19 17:43:45
+0100E5400BE64000,"R-Type Dimensions EX",,playable,2020-10-09 12:04:43
+0100F930136B6000,"R-Type® Final 2",slow;nvdec;UE4,ingame,2022-10-30 21:46:29
+01007B0014300000,"R-Type® Final 2 Demo",slow;nvdec;UE4;demo,ingame,2022-10-24 21:57:42
+0100B5A004302000,"R.B.I. Baseball 17",online-working,playable,2022-08-11 11:55:47
+01005CC007616000,"R.B.I. Baseball 18",nvdec;online-working,playable,2022-08-11 11:27:52
+0100FCB00BF40000,"R.B.I. Baseball 19",nvdec;online-working,playable,2022-08-11 11:43:52
+010061400E7D4000,"R.B.I. Baseball 20",,playable,2021-06-15 21:16:29
+0100B4A0115CA000,"R.B.I. Baseball 21",online-working,playable,2022-10-24 22:31:45
+01005BF00E4DE000,"Rabi-Ribi",,playable,2022-08-06 17:02:44
+010075D00DD04000,"Race with Ryan",UE4;gpu;nvdec;slow,ingame,2020-11-16 04:35:33
+0100B8100C54A000,"Rack N Ruin",,playable,2020-09-04 15:20:26
+010024400C516000,"RAD",gpu;crash;UE4,menus,2021-11-29 02:01:56
+010000600CD54000,"Rad Rodgers Radical Edition",nvdec;online-broken,playable,2022-08-10 19:57:23
+0100DA400E07E000,"Radiation City",crash,ingame,2022-09-30 11:15:04
+01009E40095EE000,"Radiation Island",opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04
+0100C8B00D2BE000,"Radical Rabbit Stew",,playable,2020-08-03 12:02:56
+0100BAD013B6E000,"Radio Commander",nvdec,playable,2021-03-24 11:20:46
+01008FA00ACEC000,"RADIOHAMMER STATION",audout,playable,2021-02-26 20:20:06
+01003D00099EC000,"Raging Justice",,playable,2021-06-03 14:06:50
+01005CD013116000,"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",,playable,2022-07-29 15:50:13
+01002B000D97E000,"Raiden V: Director's Cut",deadlock;nvdec,boots,2024-07-12 07:31:46
+01002EE00DC02000,"Railway Empire - Nintendo Switch™ Edition",nvdec,playable,2022-10-03 13:53:50
+01003C700D0DE000,"Rain City",,playable,2020-10-08 16:59:03
+0100BDD014232000,"Rain on Your Parade",,playable,2021-05-06 19:32:04
+010047600BF72000,"Rain World",,playable,2023-05-10 23:34:08
+01009D9010B9E000,"Rainbows, toilets & unicorns",nvdec,playable,2020-10-03 18:08:18
+010010B00DDA2000,"Raji: An Ancient Epic",UE4;gpu;nvdec,ingame,2020-12-16 10:05:25
+010042A00A9CC000,"Rapala Fishing Pro Series",nvdec,playable,2020-12-16 13:26:53
+0100E73010754000,"Rascal Fight",,playable,2020-10-08 13:23:30
+010003F00C5C0000,"Rawr-Off",crash;nvdec,menus,2020-07-02 00:14:44
+01005FF002E2A000,"Rayman® Legends Definitive Edition",nvdec;ldn-works,playable,2023-05-27 18:33:07
+0100F03011616000,"Re:Turn - One Way Trip",,playable,2022-08-29 22:42:53
+01000B20117B8000,"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",gpu;crash;nvdec;vulkan,boots,2023-03-07 21:27:24
+0100A8A00E462000,"Real Drift Racing",,playable,2020-07-25 14:31:31
+010048600CC16000,"Real Heroes: Firefighter",,playable,2022-09-20 18:18:44
+0100E64010BAA000,"realMyst: Masterpiece Edition",nvdec,playable,2020-11-30 15:25:42
+01000F300F082000,"Reaper: Tale of a Pale Swordsman",,playable,2020-12-12 15:12:23
+0100D9B00E22C000,"Rebel Cops",,playable,2022-09-11 10:02:53
+0100CAA01084A000,"Rebel Galaxy Outlaw",nvdec,playable,2022-12-01 07:44:56
+0100EF0015A9A000,"Record of Lodoss War-Deedlit in Wonder Labyrinth-",deadlock;Needs Update;Incomplete,ingame,2022-01-19 10:00:59
+0100CF600FF7A000,"Red Bow",services,ingame,2021-11-29 03:51:34
+0100351013A06000,"Red Colony",,playable,2021-01-25 20:44:41
+01007820196A6000,"Red Dead Redemption",amd-vendor-bug,playable,2024-09-13 13:26:13
+0100069010592000,"Red Death",,playable,2020-08-30 13:07:37
+010075000C608000,"Red Faction Guerrilla Re-Mars-tered",ldn-untested;nvdec;online,playable,2021-06-07 03:02:13
+01002290070E4000,"Red Game Without a Great Name",,playable,2021-01-19 21:42:35
+010045400D73E000,"Red Siren: Space Defense",UE4,playable,2021-04-25 21:21:29
+0100D8A00E880000,"Red Wings: Aces of the Sky",,playable,2020-06-12 01:19:53
+01000D100DCF8000,"Redeemer: Enhanced Edition",nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24
+0100326010B98000,"Redout: Space Assault",UE4,playable,2022-10-19 23:04:35
+010007C00E558000,"Reel Fishing: Road Trip Adventure",,playable,2021-03-02 16:06:43
+010045D01273A000,"Reflection of Mine",audio,playable,2020-12-17 15:06:37
+01003AA00F5C4000,"Refreshing Sideways Puzzle Ghost Hammer",,playable,2020-10-18 12:08:54
+01007A800D520000,"Refunct",UE4,playable,2020-12-15 22:46:21
+0100FDF0083A6000,"Regalia: Of Men and Monarchs - Royal Edition",,playable,2022-08-11 12:24:01
+01005FD00F15A000,"Regions of Ruin",,playable,2020-08-05 11:38:58
+,"Reine des Fleurs",cpu;crash,boots,2020-09-27 18:50:39
+0100F1900B144000,"REKT! High Octane Stunts",online,playable,2020-09-28 12:33:56
+01002AD013C52000,"Relicta",nvdec;UE4,playable,2022-10-31 12:48:33
+010095900B436000,"RemiLore",,playable,2021-06-03 18:58:15
+0100FBD00F5F6000,"Remothered: Broken Porcelain",UE4;gpu;nvdec,ingame,2021-06-17 15:13:11
+01001F100E8AE000,"Remothered: Tormented Fathers",nvdec;UE4,playable,2022-10-19 23:26:50
+01008EE00B22C000,"Rento Fortune",ldn-untested;online,playable,2021-01-19 19:52:21
+01007CC0130C6000,"Renzo Racer",,playable,2021-03-23 22:28:05
+01003C400AD42000,"Rescue Tale",,playable,2022-09-20 18:40:18
+010099A00BC1E000,"resident evil 4",nvdec,playable,2022-11-16 21:16:04
+010018100CD46000,"Resident Evil 5",nvdec,playable,2024-02-18 17:15:29
+01002A000CD48000,"Resident Evil 6",nvdec,playable,2022-09-15 14:31:47
+0100643002136000,"Resident Evil Revelations",nvdec;ldn-untested,playable,2022-08-11 12:44:19
+010095300212A000,"Resident Evil Revelations 2",online-broken;ldn-untested,playable,2022-08-11 12:57:50
+0100E7F00FFB8000,"Resolutiion",crash,boots,2021-04-25 21:57:56
+0100FF201568E000,"Restless Night",crash,nothing,2022-02-09 10:54:49
+0100069000078000,"Retail Interactive Display Menu (DevQuestMenu)",services;crash,nothing,2022-08-11 13:19:41
+010086E00BCB2000,"Retimed",,playable,2022-08-11 13:32:39
+0100F17004156000,"Retro City Rampage DX",,playable,2021-01-05 17:04:17
+01000ED014A2C000,"Retro Machina",online-broken,playable,2022-10-31 13:38:58
+010032E00E6E2000,"Return of the Obra Dinn",,playable,2022-09-15 19:56:45
+010027400F708000,"Revenge of Justice",nvdec,playable,2022-11-20 15:43:23
+0100E2E00EA42000,"Reventure",,playable,2022-09-15 20:07:06
+010071D00F156000,"REZ PLZ",,playable,2020-10-24 13:26:12
+0100729012D18000,"Rhythm Fighter",crash,nothing,2021-02-16 18:51:30
+010081D0100F0000,"Rhythm of the Gods",UE4;crash,nothing,2020-10-03 17:39:59
+01009D5009234000,"RICO",nvdec;online-broken,playable,2022-08-11 20:16:40
+01002C700C326000,"Riddled Corpses EX",,playable,2021-06-06 16:02:44
+0100AC600D898000,"Rift Keeper",,playable,2022-09-20 19:48:20
+0100A62002042000,"RiME",UE4;crash;gpu,boots,2020-07-20 15:52:38
+01006AC00EE6E000,"Rimelands: Hammer of Thor",,playable,2022-10-13 13:32:56
+01002FF008C24000,"RingFit Adventure",crash;services,nothing,2021-04-14 19:00:01
+010088E00B816000,"RIOT - Civil Unrest",,playable,2022-08-11 20:27:56
+01002A6006AA4000,"Riptide GP: Renegade",online,playable,2021-04-13 23:33:02
+010065B00B0EC000,"Rise and Shine",,playable,2020-12-12 15:56:43
+0100E9C010EA8000,"Rise of Insanity",,playable,2020-08-30 15:42:14
+01006BA00E652000,"Rise: Race The Future",,playable,2021-02-27 13:29:06
+010020C012F48000,"Rising Hell",,playable,2022-10-31 13:54:02
+010076D00E4BA000,"Risk of Rain 2",online-broken,playable,2024-03-04 17:01:05
+0100E8300A67A000,"RISK® Global Domination",nvdec;online-broken,playable,2022-08-01 18:53:28
+010042500FABA000,"Ritual: Crown of Horns",,playable,2021-01-26 16:01:47
+0100BD300F0EC000,"Ritual: Sorcerer Angel",,playable,2021-03-02 13:51:19
+0100A7D008392000,"Rival Megagun",nvdec;online,playable,2021-01-19 14:01:46
+010069C00401A000,"RIVE: Ultimate Edition",,playable,2021-03-24 18:45:55
+01004E700DFE6000,"River City Girls",nvdec,playable,2020-06-10 23:44:09
+01002E80168F4000,"River City Girls 2",,playable,2022-12-07 00:46:27
+0100B2100767C000,"River City Melee Mach!!",online-broken,playable,2022-09-20 20:51:57
+01008AC0115C6000,"RMX Real Motocross",,playable,2020-10-08 21:06:15
+010053000B986000,"Road Redemption",online-broken,playable,2022-08-12 11:26:20
+010002F009A7A000,"Road to Ballhalla",UE4,playable,2021-06-07 02:22:36
+0100735010F58000,"Road To Guangdong",slow,playable,2020-10-12 12:15:32
+010068200C5BE000,"Roarr! Jurassic Edition",,playable,2022-10-19 23:57:45
+0100618004096000,"Robonauts",nvdec,playable,2022-08-12 11:33:23
+010039A0117C0000,"ROBOTICS;NOTES DaSH",,playable,2020-11-16 23:09:54
+01002A900EE8A000,"ROBOTICS;NOTES ELITE",,playable,2020-11-26 10:28:20
+010044A010BB8000,"Robozarro",,playable,2020-09-03 13:33:40
+01000CC012D74000,"Rock 'N Racing Bundle Grand Prix & Rally",,playable,2021-01-06 20:23:57
+0100A1B00DB36000,"Rock of Ages 3: Make & Break",UE4,playable,2022-10-06 12:18:29
+0100513005AF4000,"Rock'N Racing Off Road DX",,playable,2021-01-10 15:27:15
+01005EE0036EC000,"Rocket League®",gpu;online-broken;ldn-untested,ingame,2024-02-08 19:51:36
+0100E88009A34000,"Rocket Wars",,playable,2020-07-24 14:27:39
+0100EC7009348000,"Rogue Aces",gpu;services;nvdec,ingame,2021-11-30 02:18:30
+01009FA010848000,"Rogue Heroes: Ruins of Tasos",online,playable,2021-04-01 15:41:25
+010056500AD50000,"Rogue Legacy",,playable,2020-08-10 19:17:28
+0100F3B010F56000,"Rogue Robots",,playable,2020-06-16 12:16:11
+01001CC00416C000,"Rogue Trooper Redux",nvdec;online-broken,playable,2022-08-12 11:53:01
+0100C7300C0EC000,"RogueCube",,playable,2021-06-16 12:16:42
+0100B7200FC96000,"Roll'd",,playable,2020-07-04 20:24:01
+01004900113F8000,"RollerCoaster Tycoon 3 Complete Edition",32-bit,playable,2022-10-17 14:18:01
+0100E3900B598000,"RollerCoaster Tycoon Adventures",nvdec,playable,2021-01-05 18:14:18
+010076200CA16000,"Rolling Gunner",,playable,2021-05-26 12:54:18
+0100579011B40000,"Rolling Sky 2",,playable,2022-11-03 10:21:12
+010050400BD38000,"Roman Rumble in Las Vegum - Asterix & Obelix XXL 2",deadlock;nvdec,ingame,2022-07-21 17:54:14
+01001F600829A000,"Romancing SaGa 2",,playable,2022-08-12 12:02:24
+0100D0400D27A000,"Romancing SaGa 3",audio;gpu,ingame,2020-06-27 20:26:18
+010088100DD42000,"Roof Rage",crash;regression,boots,2023-11-12 03:47:18
+0100F3000FA58000,"Roombo: First Blood",nvdec,playable,2020-08-05 12:11:37
+0100936011556000,"Root Double -Before Crime * After Days- Xtend Edition",crash,nothing,2022-02-05 02:03:49
+010030A00DA3A000,"Root Letter: Last Answer",vulkan-backend-bug,playable,2022-09-17 10:25:57
+0100AFE00DDAC000,"Royal Roads",,playable,2020-11-17 12:54:38
+0100E2C00B414000,"RPG Maker MV",nvdec,playable,2021-01-05 20:12:01
+01005CD015986000,"rRootage Reloaded",,playable,2022-08-05 23:20:18
+0000000000000000,"RSDKv5u",homebrew,ingame,2024-04-01 16:25:34
+010009B00D33C000,"Rugby Challenge 4",slow;online-broken;UE4,playable,2022-10-06 12:45:53
+01006EC00F2CC000,"RUINER",UE4,playable,2022-10-03 14:11:33
+010074F00DE4A000,"Run the Fan",,playable,2021-02-27 13:36:28
+0100ADF00700E000,"Runbow",online,playable,2021-01-08 22:47:44
+0100D37009B8A000,"Runbow Deluxe Edition",online-broken,playable,2022-08-12 12:20:25
+010081C0191D8000,"Rune Factory 3 Special",,playable,2023-10-15 08:32:49
+010051D00E3A4000,"Rune Factory 4 Special",32-bit;crash;nvdec,ingame,2023-05-06 08:49:17
+010014D01216E000,"Rune Factory 5 (JP)",gpu,ingame,2021-06-01 12:00:36
+0100E21013908000,"RWBY: Grimm Eclipse - Definitive Edition",online-broken,playable,2022-11-03 10:44:01
+010012C0060F0000,"RXN -Raijin-",nvdec,playable,2021-01-10 16:05:43
+0100B8B012ECA000,"S.N.I.P.E.R. - Hunter Scope",,playable,2021-04-19 15:58:09
+010007700CFA2000,"Saboteur II: Avenging Angel",Needs Update;cpu;crash,nothing,2021-01-26 14:47:37
+0100D94012FE8000,"Saboteur SiO",slow,ingame,2020-12-17 16:59:49
+0100A5200C2E0000,"Safety First!",,playable,2021-01-06 09:05:23
+0100A51013530000,"SaGa Frontier Remastered",nvdec,playable,2022-11-03 13:54:56
+010003A00D0B4000,"SaGa SCARLET GRACE: AMBITIONS™",,playable,2022-10-06 13:20:31
+01008D100D43E000,"Saints Row IV®: Re-Elected™",ldn-untested;LAN,playable,2023-12-04 18:33:37
+0100DE600BEEE000,"SAINTS ROW®: THE THIRD™ - THE FULL PACKAGE",slow;LAN,playable,2023-08-24 02:40:58
+01007F000EB36000,"Sakai and...",nvdec,playable,2022-12-15 13:53:19
+0100B1400E8FE000,"Sakuna: Of Rice and Ruin",,playable,2023-07-24 13:47:13
+0100BBF0122B4000,"Sally Face",,playable,2022-06-06 18:41:24
+0100D250083B4000,"Salt and Sanctuary",,playable,2020-10-22 11:52:19
+0100CD301354E000,"Sam & Max Save the World",,playable,2020-12-12 13:11:51
+010014000C63C000,"Samsara: Deluxe Edition",,playable,2021-01-11 15:14:12
+0100ADF0096F2000,"Samurai Aces for Nintendo Switch",32-bit,playable,2020-11-24 20:26:55
+01006C600E46E000,"Samurai Jack: Battle Through Time",nvdec;UE4,playable,2022-10-06 13:33:59
+01002DF00F76C000,"SAMURAI SHODOWN",UE4;crash;nvdec,menus,2020-09-06 02:17:00
+0100F6800F48E000,"SAMURAI SHODOWN NEOGEO COLLECTION",nvdec,playable,2021-06-14 17:12:56
+0100B6501A360000,"Samurai Warrior",,playable,2023-02-27 18:42:38
+,"Sangoku Rensenki ~Otome no Heihou!~",gpu;nvdec,ingame,2020-10-17 19:13:14
+0100A4700BC98000,"Satsujin Tantei Jack the Ripper",,playable,2021-06-21 16:32:54
+0100F0000869C000,"Saturday Morning RPG",nvdec,playable,2022-08-12 12:41:50
+01006EE00380C000,"Sausage Sports Club",gpu,ingame,2021-01-10 05:37:17
+0100C8300FA90000,"Save Koch",,playable,2022-09-26 17:06:56
+0100D6E008700000,"Save the Ninja Clan",,playable,2021-01-11 13:56:37
+010091000F72C000,"Save Your Nuts",nvdec;online-broken;UE4,playable,2022-09-27 23:12:02
+0100AA00128BA000,"Saviors of Sapphire Wings / Stranger of Sword City Revisited",crash,menus,2022-10-24 23:00:46
+01001C3012912000,"Say No! More",,playable,2021-05-06 13:43:34
+010010A00A95E000,"Sayonara Wild Hearts",,playable,2023-10-23 03:20:01
+0100ACB004006000,"Schlag den Star",slow;nvdec,playable,2022-08-12 14:28:22
+0100394011C30000,"Scott Pilgrim vs. The World™: The Game – Complete Edition",services-horizon;crash,nothing,2024-07-12 08:13:03
+0100E7100B198000,"Scribblenauts Mega Pack",nvdec,playable,2020-12-17 22:56:14
+01001E40041BE000,"Scribblenauts Showdown",gpu;nvdec,ingame,2020-12-17 23:05:53
+0100829018568000,"SD GUNDAM BATTLE ALLIANCE Demo",audio;crash;demo,ingame,2022-08-01 23:01:20
+010055700CEA8000,"SD GUNDAM G GENERATION CROSS RAYS",nvdec,playable,2022-09-15 20:58:44
+010022900D3EC00,"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION",nvdec,playable,2022-09-15 20:45:57
+0100E4A00D066000,"Sea King",UE4;nvdec,playable,2021-06-04 15:49:22
+0100AFE012BA2000,"Sea of Solitude: The Director's Cut",gpu,ingame,2024-07-12 18:29:29
+01008C0016544000,"Sea of Stars",,playable,2024-03-15 20:27:12
+010036F0182C4000,"Sea of Stars Demo",demo,playable,2023-02-12 15:33:56
+0100C2400D68C000,"SeaBed",,playable,2020-05-17 13:25:37
+010077100CA6E000,"Season Match Bundle",,playable,2020-10-27 16:15:22
+010028F010644000,"Secret Files 3",nvdec,playable,2020-10-24 15:32:39
+010075D0101FA000,"Seek Hearts",,playable,2022-11-22 15:06:26
+0100394010844000,"Seers Isle",,playable,2020-11-17 12:28:50
+0100A8900AF04000,"SEGA AGES Alex Kidd in Miracle World",online,playable,2021-05-05 16:35:47
+01001E600AF08000,"SEGA AGES Gain Ground",online,playable,2021-05-05 16:16:27
+0100D4D00AC62000,"SEGA AGES Out Run",,playable,2021-01-11 13:13:59
+01005A300C9F6000,"SEGA AGES Phantasy Star",,playable,2021-01-11 12:49:48
+01005F600CB0E000,"SEGA AGES Puyo Puyo",online,playable,2021-05-05 16:09:28
+010051F00AC5E000,"SEGA AGES Sonic The Hedgehog",slow,playable,2023-03-05 20:16:31
+01000D200C614000,"SEGA AGES Sonic The Hedgehog 2",,playable,2022-09-21 20:26:35
+0100C3E00B700000,"SEGA AGES Space Harrier",,playable,2021-01-11 12:57:40
+010054400D2E6000,"SEGA AGES Virtua Racing",online-broken,playable,2023-01-29 17:08:39
+01001E700AC60000,"SEGA AGES Wonder Boy: Monster Land",online,playable,2021-05-05 16:28:25
+0100B3C014BDA000,"SEGA Genesis™ – Nintendo Switch Online",crash;regression,nothing,2022-04-11 07:27:21
+,"SEGA Mega Drive Classics",online,playable,2021-01-05 11:08:00
+01009840046BC000,"Semispheres",,playable,2021-01-06 23:08:31
+0100D1800D902000,"SENRAN KAGURA Peach Ball",,playable,2021-06-03 15:12:10
+0100E0C00ADAC000,"SENRAN KAGURA Reflexions",,playable,2020-03-23 19:15:23
+01009E500D29C000,"Sentinels of Freedom",,playable,2021-06-14 16:42:19
+0100A5D012DAC000,"SENTRY",,playable,2020-12-13 12:00:24
+010059700D4A0000,"Sephirothic Stories",services,menus,2021-11-25 08:52:17
+010007D00D43A000,"Serious Sam Collection",vulkan-backend-bug,boots,2022-10-13 13:53:34
+0100B2C00E4DA000,"Served!",nvdec,playable,2022-09-28 12:46:00
+010018400C24E000,"Seven Knights -Time Wanderer-",vulkan-backend-bug,playable,2022-10-13 22:08:54
+0100D6F016676000,"Seven Pirates H",,playable,2024-06-03 14:54:12
+0100157004512000,"Severed",,playable,2020-12-15 21:48:48
+0100D5500DA94000,"Shadow Blade: Reload",nvdec,playable,2021-06-11 18:40:43
+0100BE501382A000,"Shadow Gangs",cpu;gpu;crash;regression,ingame,2024-04-29 00:07:26
+0100C3A013840000,"Shadow Man Remastered",gpu,ingame,2024-05-20 06:01:39
+010073400B696000,"Shadowgate",,playable,2021-04-24 07:32:57
+0100371013B3E000,"Shadowrun Returns",gpu;Needs Update,ingame,2022-10-04 21:32:31
+01008310154C4000,"Shadowrun: Dragonfall - Director's Cut",gpu;Needs Update,ingame,2022-10-04 20:52:18
+0100C610154CA000,"Shadowrun: Hong Kong - Extended Edition",gpu;Needs Update,ingame,2022-10-04 20:53:09
+010000000EEF0000,"Shadows 2: Perfidia",,playable,2020-08-07 12:43:46
+0100AD700CBBE000,"Shadows of Adam",,playable,2021-01-11 13:35:58
+01002A800C064000,"Shadowverse Champions Battle",,playable,2022-10-02 22:59:29
+01003B90136DA000,"Shadowverse: Champion's Battle",crash,nothing,2023-03-06 00:31:50
+0100820013612000,"Shady Part of Me",,playable,2022-10-20 11:31:55
+0100B10002904000,"Shakedown: Hawaii",,playable,2021-01-07 09:44:36
+01008DA012EC0000,"Shakes on a Plane",crash,menus,2021-11-25 08:52:25
+0100B4900E008000,"Shalnor Legends: Sacred Lands",,playable,2021-06-11 14:57:11
+010006C00CC10000,"Shanky: The Vegan`s Nightmare",,playable,2021-01-26 15:03:55
+0100430013120000,"Shantae",,playable,2021-05-21 04:53:26
+0100EFD00A4FA000,"Shantae and the Pirate's Curse",,playable,2024-04-29 17:21:57
+0100EB901040A000,"Shantae and the Seven Sirens",nvdec,playable,2020-06-19 12:23:40
+01006A200936C000,"Shantae: Half- Genie Hero Ultimate Edition",,playable,2020-06-04 20:14:20
+0100ADA012370000,"Shantae: Risky's Revenge - Director's Cut",,playable,2022-10-06 20:47:39
+01003AB01062C000,"Shaolin vs Wutang",deadlock,nothing,2021-03-29 20:38:54
+0100B250009B9600,"Shape Of The World0",UE4,playable,2021-03-05 16:42:28
+01004F50085F2000,"She Remembered Caterpillars",,playable,2022-08-12 17:45:14
+01000320110C2000,"She Sees Red - Interactive Movie",nvdec,playable,2022-09-30 11:30:15
+01009EB004CB0000,"Shelter Generations",,playable,2021-06-04 16:52:39
+010020F014DBE000,"Sherlock Holmes: The Devil’s Daughter",gpu,ingame,2022-07-11 00:07:26
+0100B1000AC3A000,"Shift Happens",,playable,2021-01-05 21:24:18
+01000E8009E1C000,"Shift Quantum",UE4;crash,ingame,2020-11-06 21:54:08
+01000750084B2000,"Shiftlings - Enhanced Edition",nvdec,playable,2021-03-04 13:49:54
+01003B0012DC2000,"Shin Megami Tensei III Nocturne HD Remaster",,playable,2022-11-03 22:53:27
+010045800ED1E000,"Shin Megami Tensei III NOCTURNE HD REMASTER",gpu;Needs Update,ingame,2022-11-03 19:57:01
+010063B012DC6000,"Shin Megami Tensei V",UE4,playable,2024-02-21 06:30:07
+010069C01AB82000,"Shin Megami Tensei V: Vengeance",gpu;vulkan-backend-bug,ingame,2024-07-14 11:28:24
+01009050133B4000,"Shing! (サムライフォース:斬!)",nvdec,playable,2022-10-22 00:48:54
+01009A5009A9E000,"Shining Resonance Refrain",nvdec,playable,2022-08-12 18:03:01
+01004EE0104F6000,"Shinsekai Into the Depths™",,playable,2022-09-28 14:07:51
+0100C2F00A568000,"Shio",,playable,2021-02-22 16:25:09
+0100B2E00F13E000,"Shipped",,playable,2020-11-21 14:22:32
+01000E800FCB4000,"Ships",,playable,2021-06-11 16:14:37
+01007430122D0000,"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",nvdec,playable,2022-10-20 11:44:36
+,"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",cpu;crash,boots,2020-09-27 19:01:25
+01000244016BAE00,"Shiro0",gpu,ingame,2024-01-13 08:54:39
+0100CCE00DDB6000,"Shoot 1UP DX",,playable,2020-12-13 12:32:47
+01001180021FA000,"Shovel Knight: Specter of Torment",,playable,2020-05-30 08:34:17
+010057D0021E8000,"Shovel Knight: Treasure Trove",,playable,2021-02-14 18:24:39
+01003DD00BF0E000,"Shred! 2 - ft Sam Pilgrim",,playable,2020-05-30 14:34:09
+01001DE0076A4000,"Shu",nvdec,playable,2020-05-30 09:08:59
+0100A7900B936000,"Shut Eye",,playable,2020-07-23 18:08:35
+010044500C182000,"Sid Meier’s Civilization VI",ldn-untested,playable,2024-04-08 16:03:40
+01007FC00B674000,"Sigi - A Fart for Melusina",,playable,2021-02-22 16:46:58
+0100F1400B0D6000,"Silence",nvdec,playable,2021-06-03 14:46:17
+0100A32010618000,"Silent World",,playable,2020-08-28 13:45:13
+010045500DFE2000,"Silk",nvdec,playable,2021-06-10 15:34:37
+010016D00A964000,"SilverStarChess",,playable,2021-05-06 15:25:57
+0100E8C019B36000,"Simona's Requiem",gpu,ingame,2023-02-21 18:29:19
+01006FE010438000,"Sin Slayers",,playable,2022-10-20 11:53:52
+01002820036A8000,"Sine Mora EX",gpu;online-broken,ingame,2022-08-12 19:36:18
+0100F10012002000,"Singled Out",online,playable,2020-08-03 13:06:18
+0100B8800F858000,"Sinless",nvdec,playable,2020-08-09 20:18:55
+0100B16009C10000,"SINNER: Sacrifice for Redemption",nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33
+0100E9201410E000,"Sir Lovelot",,playable,2021-04-05 16:21:46
+0100134011E32000,"Skate City",,playable,2022-11-04 11:37:39
+0100B2F008BD8000,"Skee-Ball",,playable,2020-11-16 04:44:07
+01001A900F862000,"Skelattack",,playable,2021-06-09 15:26:26
+01008E700F952000,"Skelittle: A Giant Party!",,playable,2021-06-09 19:08:34
+01006C000DC8A000,"Skelly Selest",,playable,2020-05-30 15:38:18
+0100D67006F14000,"Skies of Fury DX",,playable,2020-05-30 16:40:54
+010046B00DE62000,"Skullgirls 2nd Encore",,playable,2022-09-15 21:21:25
+0100D1100BF9C000,"Skulls of the Shogun: Bone-A-Fide Edition",,playable,2020-08-31 18:58:12
+0100D7B011654000,"Skully",nvdec;UE4,playable,2022-10-06 13:52:59
+010083100B5CA000,"Sky Force Anniversary",online-broken,playable,2022-08-12 20:50:07
+01006FE005B6E000,"Sky Force Reloaded",,playable,2021-01-04 20:06:57
+010003F00CC98000,"Sky Gamblers - Afterburner",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55
+010093D00AC38000,"Sky Gamblers: Storm Raiders",gpu;audio;32-bit,ingame,2022-08-12 21:13:36
+010068200E96E000,"Sky Gamblers: Storm Raiders 2",gpu,ingame,2022-09-13 12:24:04
+01004F0010A02000,"Sky Racket",,playable,2020-09-07 12:22:24
+0100DDB004F30000,"Sky Ride",,playable,2021-02-22 16:53:07
+0100C5700434C000,"Sky Rogue",,playable,2020-05-30 08:26:28
+0100C52011460000,"Sky: Children of the Light",cpu;online-broken,nothing,2023-02-23 10:57:10
+010041C01014E000,"Skybolt Zack",,playable,2021-04-12 18:28:00
+0100A0A00D1AA000,"SKYHILL",,playable,2021-03-05 15:19:11
+,"Skylanders Imaginators",crash;services,boots,2020-05-30 18:49:18
+010021A00ABEE000,"SKYPEACE",,playable,2020-05-29 14:14:30
+0100EA400BF44000,"SkyScrappers",,playable,2020-05-28 22:11:25
+0100F3C00C400000,"SkyTime",slow,ingame,2020-05-30 09:24:51
+01003AD00DEAE000,"SlabWell: The Quest For Kaktun's Alpaca",,playable,2021-02-22 17:02:51
+0100224004004000,"Slain: Back from Hell",,playable,2022-08-12 23:36:19
+010026300BA4A000,"Slay the Spire",,playable,2023-01-20 15:09:26
+0100501006494000,"Slayaway Camp: Butcher's Cut",opengl-backend-bug,playable,2022-08-12 23:44:05
+01004E900EDDA000,"Slayin 2",gpu,ingame,2024-04-19 16:15:26
+01004AC0081DC000,"Sleep Tight",gpu;UE4,ingame,2022-08-13 00:17:32
+0100F4500AA4E000,"Slice, Dice & Rice",online,playable,2021-02-22 17:44:23
+010010D011E1C000,"Slide Stars",crash,menus,2021-11-25 08:53:43
+0100112003B8A000,"Slime-san",,playable,2020-05-30 16:15:12
+01002AA00C974000,"SMASHING THE BATTLE",,playable,2021-06-11 15:53:57
+0100C9100B06A000,"SmileBASIC 4",gpu,menus,2021-07-29 17:35:59
+0100207007EB2000,"Smoke And Sacrifice",,playable,2022-08-14 12:38:27
+01009790186FE000,"SMURFS KART",,playable,2023-10-18 00:55:00
+0100F2800D46E000,"Snack World The Dungeon Crawl Gold",gpu;slow;nvdec;audout,ingame,2022-05-01 21:12:44
+0100C0F0020E8000,"Snake Pass",nvdec;UE4,playable,2022-01-03 04:31:52
+010075A00BA14000,"Sniper Elite 3 Ultimate Edition",ldn-untested,playable,2024-04-18 07:47:49
+010007B010FCC000,"Sniper Elite 4",gpu;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15
+0100BB000A3AA000,"Sniper Elite V2 Remastered",slow;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13
+01008E20047DC000,"Snipperclips Plus: Cut It Out, Together!",,playable,2023-02-14 20:20:13
+0100704000B3A000,"Snipperclips™ – Cut it out, together!",,playable,2022-12-05 12:44:55
+01004AB00AEF8000,"SNK 40th ANNIVERSARY COLLECTION",,playable,2022-08-14 13:33:15
+010027F00AD6C000,"SNK HEROINES Tag Team Frenzy",nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25
+01008DA00CBBA000,"Snooker 19",nvdec;online-broken;UE4,playable,2022-09-11 17:43:22
+010045300516E000,"Snow Moto Racing Freedom",gpu;vulkan-backend-bug,ingame,2022-08-15 16:05:14
+0100BE200C34A000,"Snowboarding The Next Phase",nvdec,playable,2021-02-23 12:56:58
+0100FBD013AB6000,"SnowRunner",services;crash,boots,2023-10-07 00:01:16
+010017B012AFC000,"Soccer Club Life: Playing Manager",gpu,ingame,2022-10-25 11:59:22
+0100B5000E05C000,"Soccer Pinball",UE4;gpu,ingame,2021-06-15 20:56:51
+010011A00A9A8000,"Soccer Slammers",,playable,2020-05-30 07:48:14
+010095C00F9DE000,"Soccer, Tactics & Glory",gpu,ingame,2022-09-26 17:15:58
+0100590009C38000,"SOL DIVIDE -SWORD OF DARKNESS- for Nintendo Switch",32-bit,playable,2021-06-09 14:13:03
+0100A290048B0000,"Soldam: Drop, Connect, Erase",,playable,2020-05-30 09:18:54
+010008600D1AC000,"Solo: Islands of the Heart",gpu;nvdec,ingame,2022-09-11 17:54:43
+01009EE00E91E000,"Some Distant Memory",,playable,2022-09-15 21:48:19
+01004F401BEBE000,"Song of Nunu: A League of Legends Story",,ingame,2024-07-12 18:53:44
+0100E5400BF94000,"Songbird Symphony",,playable,2021-02-27 02:44:04
+010031D00A604000,"Songbringer",,playable,2020-06-22 10:42:02
+0000000000000000,"Sonic 1 (2013)",crash;homebrew,ingame,2024-04-06 18:31:20
+0000000000000000,"Sonic 2 (2013)",crash;homebrew,ingame,2024-04-01 16:25:30
+0000000000000000,"Sonic A.I.R",homebrew,ingame,2024-04-01 16:25:32
+0000000000000000,"Sonic CD",crash;homebrew,ingame,2024-04-01 16:25:31
+010040E0116B8000,"Sonic Colors: Ultimate",,playable,2022-11-12 21:24:26
+01001270012B6000,"SONIC FORCES™",,playable,2024-07-28 13:11:21
+01004AD014BF0000,"Sonic Frontiers",gpu;deadlock;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53
+01009AA000FAA000,"Sonic Mania",,playable,2020-06-08 17:30:57
+01009FB016286000,"Sonic Origins",crash,ingame,2024-06-02 07:20:15
+01008F701C074000,"SONIC SUPERSTARS",gpu;nvdec,ingame,2023-10-28 17:48:07
+010088801C150000,"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",,playable,2024-08-20 13:26:56
+01005EA01C0FC000,"SONIC X SHADOW GENERATIONS",crash,ingame,2025-01-07 04:20:45
+010064F00C212000,"Soul Axiom Rebooted",nvdec;slow,ingame,2020-09-04 12:41:01
+0100F2100F0B2000,"Soul Searching",,playable,2020-07-09 18:39:07
+01008F2005154000,"South Park™: The Fractured but Whole™ - Standard Edition",slow;online-broken,playable,2024-07-08 17:47:28
+0100B9F00C162000,"Space Blaze",,playable,2020-08-30 16:18:05
+010005500E81E000,"Space Cows",UE4;crash,menus,2020-06-15 11:33:20
+0100707011722000,"Space Elite Force",,playable,2020-11-27 15:21:05
+010047B010260000,"Space Pioneer",,playable,2022-10-20 12:24:37
+010010A009830000,"Space Ribbon",,playable,2022-08-15 17:17:10
+0000000000000000,"SpaceCadetPinball",homebrew,ingame,2024-04-18 19:30:04
+0100D9B0041CE000,"Spacecats with Lasers",,playable,2022-08-15 17:22:44
+010034800FB60000,"Spaceland",,playable,2020-11-01 14:31:56
+010028D0045CE000,"Sparkle 2",,playable,2020-10-19 11:51:39
+01000DC007E90000,"Sparkle Unleashed",,playable,2021-06-03 14:52:15
+0100E4F00AE14000,"Sparkle ZERO",gpu;slow,ingame,2020-03-23 18:19:18
+01007ED00C032000,"Sparklite",,playable,2022-08-06 11:35:41
+0100E6A009A26000,"Spartan",UE4;nvdec,playable,2021-03-05 15:53:19
+010020500E7A6000,"Speaking Simulator",,playable,2020-10-08 13:00:39
+01008B000A5AE000,"Spectrum",,playable,2022-08-16 11:15:59
+0100F18010BA0000,"Speed 3: Grand Prix",UE4,playable,2022-10-20 12:32:31
+010040F00AA9A000,"Speed Brawl",slow,playable,2020-09-18 22:08:16
+01000540139F6000,"Speed Limit",gpu,ingame,2022-09-02 18:37:40
+010061F013A0E000,"Speed Truck Racing",,playable,2022-10-20 12:57:04
+0100E74007EAC000,"Spellspire",,playable,2022-08-16 11:21:21
+010021F004270000,"Spelunker Party!",services,boots,2022-08-16 11:25:49
+0100710013ABA000,"Spelunky",,playable,2021-11-20 17:45:03
+0100BD500BA94000,"Sphinx and the Cursed Mummy",gpu;32-bit;opengl,ingame,2024-05-20 06:00:51
+010092A0102AE000,"Spider Solitaire",,playable,2020-12-16 16:19:30
+010076D0122A8000,"Spinch",,playable,2024-07-12 19:02:10
+01001E40136FE000,"Spinny's Journey",crash,ingame,2021-11-30 03:39:44
+010023E008702000,"Spiral Splatter",,playable,2020-06-04 14:03:57
+0100D1B00B6FA000,"Spirit Hunter: Death Mark",,playable,2020-12-13 10:56:25
+0100FAE00E19A000,"Spirit Hunter: NG",32-bit,playable,2020-12-17 20:38:47
+01005E101122E000,"Spirit of the North",UE4,playable,2022-09-30 11:40:47
+01000AC00F5EC000,"Spirit Roots",nvdec,playable,2020-07-10 13:33:32
+0100BD400DC52000,"Spiritfarer",gpu,ingame,2022-10-06 16:31:38
+01009D60080B4000,"SpiritSphere DX",,playable,2021-07-03 23:37:49
+010042700E3FC000,"Spitlings",online-broken,playable,2022-10-06 16:42:39
+01003BC0000A0000,"Splatoon™ 2",ldn-works;LAN,playable,2024-07-12 19:11:15
+0100C2500FC20000,"Splatoon™ 3",ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11
+0100BA0018500000,"Splatoon™ 3: Splatfest World Premiere",gpu;online-broken;demo,ingame,2022-09-19 03:17:12
+010062800D39C000,"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34
+01009FB0172F4000,"SpongeBob SquarePants: The Cosmic Shake",gpu;UE4,ingame,2023-08-01 19:29:53
+010097C01336A000,"Spooky Chase",,playable,2022-11-04 12:17:44
+0100C6100D75E000,"Spooky Ghosts Dot Com",,playable,2021-06-15 15:16:11
+0100DE9005170000,"Sports Party",nvdec,playable,2021-03-05 13:40:42
+0100E04009BD4000,"Spot The Difference",,playable,2022-08-16 11:49:52
+010052100D1B4000,"Spot The Differences: Party!",,playable,2022-08-16 11:55:26
+01000E6015350000,"Spy Alarm",services,ingame,2022-12-09 10:12:51
+01005D701264A000,"SpyHack",,playable,2021-04-15 10:53:51
+010077B00E046000,"Spyro™ Reignited Trilogy",nvdec;UE4,playable,2022-09-11 18:38:33
+0100085012A0E000,"Squeakers",,playable,2020-12-13 12:13:05
+010009300D31C000,"Squidgies Takeover",,playable,2020-07-20 22:28:08
+0100FCD0102EC000,"Squidlit",,playable,2020-08-06 12:38:32
+0100EBF00E702000,"STAR OCEAN First Departure R",nvdec,playable,2021-07-05 19:29:16
+010065301A2E0000,"STAR OCEAN THE SECOND STORY R",crash,ingame,2024-06-01 02:39:59
+010060D00F658000,"Star Renegades",nvdec,playable,2020-12-11 12:19:23
+0100D7000AE6A000,"Star Story: The Horizon Escape",,playable,2020-08-11 22:31:38
+01009DF015776000,"Star Trek Prodigy: Supernova",nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50
+0100BD100FFBE000,"STAR WARS™ Episode I Racer",slow;nvdec,playable,2022-10-03 16:08:36
+0100BB500EACA000,"STAR WARS™ Jedi Knight II: Jedi Outcast™",gpu,ingame,2022-09-15 22:51:00
+01008CA00FAE8000,"STAR WARS™ Jedi Knight: Jedi Academy",gpu,boots,2021-06-16 12:35:30
+01006DA00DEAC000,"Star Wars™ Pinball",online-broken,playable,2022-09-11 18:53:31
+0100FA10115F8000,"STAR WARS™ Republic Commando™",gpu;32-bit,ingame,2023-10-31 15:57:17
+010040701B948000,"STAR WARS™: Battlefront Classic Collection",gpu;vulkan,ingame,2024-07-12 19:24:21
+0100854015868000,"STAR WARS™: Knights of the Old Republic™",gpu;deadlock,boots,2024-02-12 10:13:51
+0100153014544000,"STAR WARS™: The Force Unleashed™",,playable,2024-05-01 17:41:28
+01005EB00EA10000,"Star-Crossed Myth - The Department of Wishes -",gpu,ingame,2021-06-04 19:34:36
+0100E6B0115FC000,"Star99",online,menus,2021-11-26 14:18:51
+01002100137BA000,"Stardash",,playable,2021-01-21 16:31:19
+0100E65002BB8000,"Stardew Valley",online-broken;ldn-untested,playable,2024-02-14 03:11:19
+01002CC003FE6000,"Starlink: Battle for Atlas™ Digital Edition",services-horizon;crash;Needs Update,nothing,2024-05-05 17:25:11
+010098E010FDA000,"Starlit Adventures Golden Stars",,playable,2020-11-21 12:14:43
+01001BB00AC26000,"STARSHIP AVENGER Operation: Take Back Earth",,playable,2021-01-12 15:52:55
+010000700A572000,"State of Anarchy: Master of Mayhem",nvdec,playable,2021-01-12 19:00:05
+0100844004CB6000,"State of Mind",UE4;crash,boots,2020-06-22 22:17:50
+0100616009082000,"STAY",crash;services,boots,2021-04-23 14:24:52
+0100B61009C60000,"STAY COOL, KOBAYASHI-SAN!: A RIVER CITY RANSOM STORY",,playable,2021-01-26 17:37:28
+01008010118CC000,"Steam Prison",nvdec,playable,2021-04-01 15:34:11
+0100AE100DAFA000,"Steam Tactics",,playable,2022-10-06 16:53:45
+01004DD00C87A000,"Steamburg",,playable,2021-01-13 08:42:01
+01009320084A4000,"SteamWorld Dig",,playable,2024-08-19 12:12:23
+0100CA9002322000,"SteamWorld Dig 2",,playable,2022-12-21 19:25:42
+0100F6D00D83E000,"SteamWorld Quest: Hand of Gilgamech",nvdec,playable,2020-11-09 13:10:04
+01001C6014772000,"Steel Assault",,playable,2022-12-06 14:48:30
+010042800B880000,"STEINS;GATE ELITE",,playable,2020-08-04 07:33:32
+0100CB400E9BC000,"STEINS;GATE: My Darling's Embrace",nvdec,playable,2022-11-20 16:48:34
+01002DE01043E000,"Stela",UE4,playable,2021-06-15 13:28:34
+01005A700C954000,"Stellar Interface",,playable,2022-10-20 13:44:33
+0100BC800EDA2000,"STELLATUM",gpu,playable,2021-03-07 16:30:23
+0100775004794000,"Steredenn: Binary Stars",,playable,2021-01-13 09:19:42
+0100AE0006474000,"Stern Pinball Arcade",,playable,2022-08-16 14:24:41
+0100E24006FA8000,"Stikbold! A Dodgeball Adventure DELUXE",,playable,2021-01-11 20:12:54
+010077B014518000,"Stitchy in Tooki Trouble",,playable,2021-05-06 16:25:53
+010070D00F640000,"STONE",UE4,playable,2022-09-30 11:53:32
+010074400F6A8000,"Stories Untold",nvdec,playable,2022-12-22 01:08:46
+010040D00BCF4000,"Storm Boy",,playable,2022-10-20 14:15:06
+0100B2300B932000,"Storm In A Teacup",gpu,ingame,2021-11-06 02:03:19
+0100D5D00DAF2000,"Story of a Gladiator",,playable,2020-07-29 15:08:18
+010017301007E000,"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",,playable,2021-03-18 11:42:19
+0100ED400EEC2000,"STORY OF SEASONS: Friends of Mineral Town",,playable,2022-10-03 16:40:31
+010078D00E8F4000,"Stranded Sails - Explorers of the Cursed Islands",slow;nvdec;UE4,playable,2022-09-16 11:58:38
+01000A6013F86000,"Strange Field Football",,playable,2022-11-04 12:25:57
+0100DD600DD48000,"Stranger Things 3: The Game",,playable,2021-01-11 17:44:09
+0100D7E011C64000,"Strawberry Vinegar",nvdec,playable,2022-12-05 16:25:40
+010075101EF84000,"Stray",crash,ingame,2025-01-07 04:03:00
+0100024008310000,"Street Fighter 30th Anniversary Collection",online-broken;ldn-partial,playable,2022-08-20 16:50:47
+010012400D202000,"Street Outlaws: The List",nvdec,playable,2021-06-11 12:15:32
+0100888011CB2000,"Street Power Soccer",UE4;crash,boots,2020-11-21 12:28:57
+0100EC9010258000,"Streets of Rage 4",nvdec;online,playable,2020-07-07 21:21:22
+0100BDE012928000,"Strife: Veteran Edition",gpu,ingame,2022-01-15 05:10:42
+010039100DACC000,"Strike Force - War on Terror",crash;Needs Update,menus,2021-11-24 08:08:20
+010038A00E6C6000,"Strike Force Kitty",nvdec,playable,2020-07-29 16:22:15
+010072500D52E000,"Strike Suit Zero: Director's Cut",crash,boots,2021-04-23 17:15:14
+0100FF5005B76000,"STRIKERS1945 for Nintendo Switch",32-bit,playable,2021-06-03 19:35:04
+0100720008ED2000,"STRIKERS1945 Ⅱ for Nintendo Switch",32-bit,playable,2021-06-03 19:43:00
+0100681011B56000,"Struggling",,playable,2020-10-15 20:37:03
+0100AF000B4AE000,"Stunt Kite Party",nvdec,playable,2021-01-25 17:16:56
+0100C5500E7AE000,"STURMWIND EX",audio;32-bit,playable,2022-09-16 12:01:39
+,"Subarashiki Kono Sekai -Final Remix-",services;slow,ingame,2020-02-10 16:21:51
+010001400E474000,"Subdivision Infinity DX",UE4;crash,boots,2021-03-03 14:26:46
+0100E6400BCE8000,"Sublevel Zero Redux",,playable,2022-09-16 12:30:03
+0100EDA00D866000,"Submerged",nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01
+0100429011144000,"Subnautica",vulkan-backend-bug,playable,2022-11-04 13:07:29
+010014C011146000,"Subnautica: Below Zero",,playable,2022-12-23 14:15:13
+0100BF9012AC6000,"Suguru Nature",crash,ingame,2021-07-29 11:36:27
+01005CD00A2A2000,"Suicide Guy",,playable,2021-01-26 13:13:54
+0100DE000C2E4000,"Suicide Guy: Sleepin' Deeply",Needs More Attention,ingame,2022-09-20 23:45:25
+01003D50126A4000,"Sumire",,playable,2022-11-12 13:40:43
+0100A130109B2000,"Summer in Mara",nvdec,playable,2021-03-06 14:10:38
+01004E500DB9E000,"Summer Sweetheart",nvdec,playable,2022-09-16 12:51:46
+0100BFE014476000,"Sunblaze",,playable,2022-11-12 13:59:23
+01002D3007962000,"Sundered: Eldritch Edition",gpu,ingame,2021-06-07 11:46:00
+0100F7000464A000,"Super Beat Sports™",ldn-untested,playable,2022-08-16 16:05:50
+010051A00D716000,"Super Blood Hockey",,playable,2020-12-11 20:01:41
+01007AD00013E000,"Super Bomberman R",nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14
+0100B87017D94000,"SUPER BOMBERMAN R 2",deadlock,boots,2023-09-29 13:19:51
+0100D9B00DB5E000,"Super Cane Magic ZERO",,playable,2022-09-12 15:33:46
+010065F004E5E000,"Super Chariot",,playable,2021-06-03 13:19:01
+0100E5E00C464000,"SUPER DRAGON BALL HEROES WORLD MISSION",nvdec;online-broken,playable,2022-08-17 12:56:30
+010023100B19A000,"Super Dungeon Tactics",,playable,2022-10-06 17:40:40
+010056800B534000,"Super Inefficient Golf",UE4,playable,2022-08-17 15:53:45
+010015700D5DC000,"Super Jumpy Ball",,playable,2020-07-04 18:40:36
+0100196009998000,"Super Kickers League Ultimate",,playable,2021-01-26 13:36:48
+01003FB00C5A8000,"Super Kirby Clash™",ldn-works,playable,2024-07-30 18:21:55
+010000D00F81A000,"Super Korotama",,playable,2021-06-06 19:06:22
+01003E300FCAE000,"Super Loop Drive",nvdec;UE4,playable,2022-09-22 10:58:05
+054507E0B7552000,"Super Mario 64",homebrew,ingame,2024-03-20 16:57:27
+0100277011F1A000,"Super Mario Bros.™ 35",online-broken,menus,2022-08-07 16:27:25
+010015100B514000,"Super Mario Bros.™ Wonder",amd-vendor-bug,playable,2024-09-06 13:21:21
+01009B90006DC000,"Super Mario Maker™ 2",online-broken;ldn-broken,playable,2024-08-25 11:05:19
+0100000000010000,"Super Mario Odyssey™",nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34
+010036B0034E4000,"Super Mario Party™",gpu;Needs Update;ldn-works,ingame,2024-06-21 05:10:16
+0100BC0018138000,"Super Mario RPG™",gpu;audio;nvdec,ingame,2024-06-19 17:43:42
+0000000000000000,"Super Mario World",homebrew,boots,2024-06-13 01:40:31
+010049900F546000,"Super Mario™ 3D All-Stars",services-horizon;slow;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16
+010028600EBDA000,"Super Mario™ 3D World + Bowser’s Fury",ldn-works,playable,2024-07-31 10:45:37
+01004F8006A78000,"Super Meat Boy",services,playable,2020-04-02 23:10:07
+01009C200D60E000,"Super Meat Boy Forever",gpu,boots,2021-04-26 14:25:39
+0100BDD00EC5C000,"Super Mega Space Blaster Special Turbo",online,playable,2020-08-06 12:13:25
+010031F019294000,"Super Monkey Ball Banana Rumble",,playable,2024-06-28 10:39:18
+0100B2A00E1E0000,"Super Monkey Ball: Banana Blitz HD",online-broken,playable,2022-09-16 13:16:25
+01006D000D2A0000,"Super Mutant Alien Assault",,playable,2020-06-07 23:32:45
+01004D600AC14000,"Super Neptunia RPG",nvdec,playable,2022-08-17 16:38:52
+01008D300C50C000,"Super Nintendo Entertainment System™ - Nintendo Switch Online",,playable,2021-01-05 00:29:48
+0100284007D6C000,"Super One More Jump",,playable,2022-08-17 16:47:47
+01001F90122B2000,"Super Punch Patrol",,playable,2024-07-12 19:49:02
+0100331005E8E000,"Super Putty Squad",gpu;32-bit,ingame,2024-04-29 15:51:54
+,"SUPER ROBOT WARS T",online,playable,2021-03-25 11:00:40
+,"SUPER ROBOT WARS V",online,playable,2020-06-23 12:56:37
+,"SUPER ROBOT WARS X",online,playable,2020-08-05 19:18:51
+01004CF00A60E000,"Super Saurio Fly",nvdec,playable,2020-08-06 13:12:14
+010039700D200000,"Super Skelemania",,playable,2020-06-07 22:59:50
+01006A800016E000,"Super Smash Bros.™ Ultimate",gpu;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21
+0100D61012270000,"Super Soccer Blast",gpu,ingame,2022-02-16 08:39:12
+0100A9300A4AE000,"Super Sportmatchen",,playable,2022-08-19 12:34:40
+0100FB400F54E000,"Super Street: Racer",UE4,playable,2022-09-16 13:43:14
+010000500DB50000,"Super Tennis Blast",,playable,2022-08-19 16:20:48
+0100C6800D770000,"Super Toy Cars 2",gpu;regression,ingame,2021-03-02 20:15:15
+010035B00B3F0000,"Super Volley Blast",,playable,2022-08-19 18:14:40
+0100FF60051E2000,"Superbeat: Xonic EX",crash;nvdec,ingame,2022-08-19 18:54:40
+0100630010252000,"SuperEpic: The Entertainment War",,playable,2022-10-13 23:02:48
+01001A500E8B4000,"SUPERHOT",,playable,2021-05-05 19:51:30
+010075701153A000,"Superliminal",,playable,2020-09-03 13:20:50
+0100C01012654000,"Supermarket Shriek",,playable,2022-10-13 23:19:20
+0100A6E01201C000,"Supraland",nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11
+010029A00AEB0000,"Survive! MR.CUBE",,playable,2022-10-20 14:44:47
+01005AB01119C000,"SUSHI REVERSI",,playable,2021-06-11 19:26:58
+0100DDD0085A4000,"Sushi Striker™: The Way of Sushido",nvdec,playable,2020-06-26 20:49:11
+0100D6D00EC2C000,"Sweet Witches",nvdec,playable,2022-10-20 14:56:37
+010049D00C8B0000,"Swimsanity!",online,menus,2021-11-26 14:27:16
+01005DF00DC26000,"SWORD ART ONLINE: FATAL BULLET Complete Edition",UE4;gpu;online,ingame,2021-06-09 16:58:50
+01001B600D1D6000,"SWORD ART ONLINE: Hollow Realization Deluxe Edition",nvdec,playable,2022-08-19 19:19:15
+01000D70049BE000,"Sword of the Guardian",,playable,2020-07-16 12:24:39
+0100E4701355C000,"Sword of the Necromancer",crash,ingame,2022-12-10 01:28:39
+01004BB00421E000,"Syberia 1 & 2",,playable,2021-12-24 12:06:25
+010028C003FD6000,"Syberia 2",gpu,ingame,2022-08-24 12:43:03
+0100CBE004E6C000,"Syberia 3",nvdec,playable,2021-01-25 16:15:12
+010007300C482000,"Sydney Hunter and the Curse of the Mayan",,playable,2020-06-15 12:15:57
+0100D8400DAF0000,"SYNAPTIC DRIVE",online,playable,2020-09-07 13:44:05
+01009E700F448000,"Synergia",,playable,2021-04-06 17:58:04
+01009BF00E7D2000,"SYNTHETIK: Ultimate",gpu;crash,ingame,2022-08-30 03:19:25
+010015B00BB00000,"Table Top Racing: World Tour - Nitro Edition",,playable,2020-04-05 23:21:30
+01000F20083A8000,"Tactical Mind",,playable,2021-01-25 18:05:00
+0100BD700F5F0000,"Tactical Mind 2",,playable,2020-07-01 23:11:07
+0100E12013C1A000,"Tactics Ogre: Reborn",vulkan-backend-bug,playable,2024-04-09 06:21:35
+01007C7006AEE000,"Tactics V: Obsidian Brigade",,playable,2021-02-28 15:09:42
+01002C000B552000,"Taiko no Tatsujin: Drum 'n' Fun!",online-broken;ldn-broken,playable,2023-05-20 15:10:12
+0100BCA0135A0000,"Taiko no Tatsujin: Rhythm Festival",,playable,2023-11-13 13:16:34
+0100DD6012644000,"Taiko no Tatsujin: Rhythmic Adventure Pack",,playable,2020-12-03 07:28:26
+0100346017304000,"Taiko Risshiden V DX",crash,nothing,2022-06-06 16:25:31
+010040A00EA26000,"Taimumari: Complete Edition",,playable,2022-12-06 13:34:49
+0100F0C011A68000,"Tales from the Borderlands",nvdec,playable,2022-10-25 18:44:14
+0100408007078000,"Tales of the Tiny Planet",,playable,2021-01-25 15:47:41
+01002C0008E52000,"Tales of Vesperia™: Definitive Edition",,playable,2024-09-28 03:20:47
+010012800EE3E000,"Tamashii",,playable,2021-06-10 15:26:20
+010008A0128C4000,"Tamiku",gpu,ingame,2021-06-15 20:06:55
+010048F007ADE000,"Tangledeep",crash,boots,2021-01-05 04:08:41
+01007DB010D2C000,"TaniNani",crash;kernel,nothing,2021-04-08 03:06:44
+0100E06012BB4000,"Tank Mechanic Simulator",,playable,2020-12-11 15:10:45
+01007A601318C000,"Tanuki Justice",opengl,playable,2023-02-21 18:28:10
+01004DF007564000,"Tanzia",,playable,2021-06-07 11:10:25
+01002D4011208000,"Task Force Kampas",,playable,2020-11-30 14:44:15
+0100B76011DAA000,"Taxi Chaos",slow;online-broken;UE4,playable,2022-10-25 19:13:00
+0100F43011E5A000,"Tcheco in the Castle of Lucio",,playable,2020-06-27 13:35:43
+010092B0091D0000,"Team Sonic Racing",online-broken;ldn-works,playable,2024-02-05 15:05:27
+0100FE701475A000,"Teenage Mutant Ninja Turtles: Shredder's Revenge",deadlock;crash,boots,2024-09-28 09:31:39
+01005CF01E784000,"Teenage Mutant Ninja Turtles: Splintered Fate",,playable,2024-08-03 13:50:42
+0100FDB0154E4000,"Teenage Mutant Ninja Turtles: The Cowabunga Collection",,playable,2024-01-22 19:39:04
+010021100DF22000,"Telling Lies",,playable,2020-10-23 21:14:51
+0100C8B012DEA000,"Temtem",online-broken,menus,2022-12-17 17:36:11
+0100B2600A398000,"TENGAI for Nintendo Switch",32-bit,playable,2020-11-25 19:52:26
+0100D7A005DFC000,"Tennis",,playable,2020-06-01 20:50:36
+01002970080AA000,"Tennis in the Face",,playable,2022-08-22 14:10:54
+0100092006814000,"Tennis World Tour",online-broken,playable,2022-08-22 14:27:10
+0100950012F66000,"Tennis World Tour 2",online-broken,playable,2022-10-14 10:43:16
+0100E46006708000,"Terraria",online-broken,playable,2022-09-12 16:14:57
+010070C00FB56000,"TERROR SQUID",online-broken,playable,2023-10-30 22:29:29
+010043700EB68000,"TERRORHYTHM (TRRT)",,playable,2021-02-27 13:18:14
+0100FBC007EAE000,"Tesla vs Lovecraft",,playable,2023-11-21 06:19:36
+01005C8005F34000,"Teslagrad",,playable,2021-02-23 14:41:02
+01006F701507A000,"Tested on Humans: Escape Room",,playable,2022-11-12 14:42:52
+0100671016432000,"TETRA for Nintendo Switch™ International Edition",,playable,2020-06-26 20:49:55
+01004E500A15C000,"TETRA's Escape",,playable,2020-06-03 18:21:14
+010040600C5CE000,"Tetris 99 Retail Bundle",gpu;online-broken;ldn-untested,ingame,2024-05-02 16:36:41
+0100EC000D39A000,"Tetsumo Party",,playable,2020-06-09 22:39:55
+01008ED0087A4000,"The Adventure Pals",,playable,2022-08-22 14:48:52
+0100137010152000,"The Adventures of 00 Dilly®",,playable,2020-12-30 19:32:29
+01003B400A00A000,"The Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",nvdec,playable,2022-09-17 11:07:56
+010035C00A4BC000,"The Adventures of Elena Temple",,playable,2020-06-03 23:15:35
+010045A00E038000,"The Alliance Alive HD Remastered",nvdec,playable,2021-03-07 15:43:45
+010079A0112BE000,"The Almost Gone",,playable,2020-07-05 12:33:07
+0100CD500DDAE000,"The Bard's Tale ARPG: Remastered and Resnarkled",gpu;nvdec;online-working,ingame,2024-07-18 12:52:01
+01001E50141BC000,"The Battle Cats Unite!",deadlock,ingame,2021-12-14 21:38:34
+010089600E66A000,"The Big Journey",,playable,2022-09-16 14:03:08
+010021C000B6A000,"The Binding of Isaac: Afterbirth+",,playable,2021-04-26 14:11:56
+0100A5A00B2AA000,"The Bluecoats North & South",nvdec,playable,2020-12-10 21:22:29
+010062500BFC0000,"The Book of Unwritten Tales 2",,playable,2021-06-09 14:42:53
+01002A2004530000,"The Bridge",,playable,2020-06-03 13:53:26
+01008D700AB14000,"The Bug Butcher",,playable,2020-06-03 12:02:04
+01001B40086E2000,"The Bunker",nvdec,playable,2022-09-16 14:24:05
+010069100B7F0000,"The Caligula Effect: Overdose",UE4;gpu,ingame,2021-01-04 11:07:50
+010066800E9F8000,"The Childs Sight",,playable,2021-06-11 19:04:56
+0100B7C01169C000,"The Coma 2: Vicious Sisters",gpu,ingame,2020-06-20 12:51:51
+010033100691A000,"The Coma: Recut",,playable,2020-06-03 15:11:23
+01004170113D4000,"The Complex",nvdec,playable,2022-09-28 14:35:41
+01000F20102AC000,"The Copper Canyon Dixie Dash",UE4,playable,2022-09-29 11:42:29
+01000850037C0000,"The Count Lucanor",nvdec,playable,2022-08-22 15:26:37
+0100EBA01548E000,"The Cruel King and the Great Hero",gpu;services,ingame,2022-12-02 07:02:08
+010051800E922000,"The Dark Crystal: Age of Resistance Tactics",,playable,2020-08-11 13:43:41
+01003DE00918E000,"The Darkside Detective",,playable,2020-06-03 22:16:18
+01000A10041EA000,"The Elder Scrolls V: Skyrim",gpu;crash,ingame,2024-07-14 03:21:31
+01004A9006B84000,"The End Is Nigh",,playable,2020-06-01 11:26:45
+0100CA100489C000,"The Escapists 2",nvdec,playable,2020-09-24 12:31:31
+01001B700BA7C000,"The Escapists: Complete Edition",,playable,2021-02-24 17:50:31
+0100C2E0129A6000,"The Executioner",nvdec,playable,2021-01-23 00:31:28
+01006050114D4000,"The Experiment: Escape Room",gpu,ingame,2022-09-30 13:20:35
+0100B5900DFB2000,"The Eyes of Ara",,playable,2022-09-16 14:44:06
+01002DD00AF9E000,"The Fall",gpu,ingame,2020-05-31 23:31:16
+01003E5002320000,"The Fall Part 2: Unbound",,playable,2021-11-06 02:18:08
+0100CDC00789E000,"The Final Station",nvdec,playable,2022-08-22 15:54:39
+010098800A1E4000,"The First Tree",,playable,2021-02-24 15:51:05
+0100C38004DCC000,"The Flame In The Flood: Complete Edition",gpu;nvdec;UE4,ingame,2022-08-22 16:23:49
+010007700D4AC000,"The Forbidden Arts",,playable,2021-01-26 16:26:24
+010030700CBBC000,"The friends of Ringo Ishikawa",,playable,2022-08-22 16:33:17
+01006350148DA000,"The Gardener and the Wild Vines",gpu,ingame,2024-04-29 16:32:10
+0100B13007A6A000,"The Gardens Between",,playable,2021-01-29 16:16:53
+010036E00FB20000,"The Great Ace Attorney Chronicles",,playable,2023-06-22 21:26:29
+010007B012514000,"The Great Perhaps",,playable,2020-09-02 15:57:04
+01003B300E4AA000,"THE GRISAIA TRILOGY",,playable,2021-01-31 15:53:59
+01001950137D8000,"The Hong Kong Massacre",crash,ingame,2021-01-21 12:06:56
+01004AD00E094000,"The House of Da Vinci",,playable,2021-01-05 14:17:19
+01005A80113D2000,"The House of Da Vinci 2",,playable,2020-10-23 20:47:17
+010088401495E000,"The House of the Dead: Remake",,playable,2025-01-11 00:36:01
+0100E24004510000,"The Hunt - Championship Edition",32-bit,menus,2022-07-21 20:21:25
+01008940086E0000,"The Infectious Madness of Doctor Dekker",nvdec,playable,2022-08-22 16:45:01
+0100B0B00B318000,"The Inner World",nvdec,playable,2020-06-03 21:22:29
+0100A9D00B31A000,"The Inner World - The Last Wind Monk",nvdec,playable,2020-11-16 13:09:40
+0100AE5003EE6000,"The Jackbox Party Pack",online-working,playable,2023-05-28 09:28:40
+010015D003EE4000,"The Jackbox Party Pack 2",online-working,playable,2022-08-22 18:23:40
+0100CC80013D6000,"The Jackbox Party Pack 3",slow;online-working,playable,2022-08-22 18:41:06
+0100E1F003EE8000,"The Jackbox Party Pack 4",online-working,playable,2022-08-22 18:56:34
+010052C00B184000,"The Journey Down: Chapter One",nvdec,playable,2021-02-24 13:32:41
+01006BC00B188000,"The Journey Down: Chapter Three",nvdec,playable,2021-02-24 13:45:27
+01009AB00B186000,"The Journey Down: Chapter Two",nvdec,playable,2021-02-24 13:32:13
+010020500BD98000,"The King's Bird",,playable,2022-08-22 19:07:46
+010031B00DB34000,"the Knight & the Dragon",gpu,ingame,2023-08-14 10:31:43
+01007AF012E16000,"The Language Of Love",Needs Update;crash,nothing,2020-12-03 17:54:00
+010079C017F5E000,"The Lara Croft Collection",services-horizon;deadlock,nothing,2024-07-12 22:45:51
+0100449011506000,"The Last Campfire",,playable,2022-10-20 16:44:19
+0100AAD011592000,"The Last Dead End",gpu;UE4,ingame,2022-10-20 16:59:44
+0100AC800D022000,"THE LAST REMNANT Remastered",nvdec;UE4,playable,2023-02-09 17:24:44
+0100B1900F0B6000,"The Legend of Dark Witch",,playable,2020-07-12 15:18:33
+01001920156C2000,"The Legend of Heroes: Trails from Zero",gpu;mac-bug,ingame,2024-09-14 21:41:41
+01005420101DA000,"The Legend of Heroes: Trails of Cold Steel III",,playable,2020-12-16 10:59:18
+01009B101044C000,"The Legend of Heroes: Trails of Cold Steel III Demo",demo;nvdec,playable,2021-04-23 01:07:32
+0100D3C010DE8000,"The Legend of Heroes: Trails of Cold Steel IV",nvdec,playable,2021-04-23 14:01:05
+01005E5013862000,"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",crash,nothing,2021-09-30 14:41:07
+01008CF01BAAC000,"The Legend of Zelda Echoes of Wisdom",nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01
+0100509005AF2000,"The Legend of Zelda: Breath of the Wild Demo",demo,ingame,2022-12-24 05:02:58
+01007EF00011E000,"The Legend of Zelda™: Breath of the Wild",gpu;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46
+01006BB00C6F0000,"The Legend of Zelda™: Link’s Awakening",gpu;nvdec;mac-bug,ingame,2023-08-09 17:37:40
+01002DA013484000,"The Legend of Zelda™: Skyward Sword HD",gpu,ingame,2024-06-14 16:48:29
+0100F2C0115B6000,"The Legend of Zelda™: Tears of the Kingdom",gpu;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30
+0100A4400BE74000,"The LEGO Movie 2 Videogame",,playable,2023-03-01 11:23:37
+010064B00B95C000,"The Liar Princess and the Blind Prince",audio;slow,playable,2020-06-08 21:23:28
+0100735004898000,"The Lion's Song",,playable,2021-06-09 15:07:16
+0100A5000D590000,"The Little Acre",nvdec,playable,2021-03-02 20:22:27
+01007A700A87C000,"The Long Dark",,playable,2021-02-21 14:19:52
+010052B003A38000,"The Long Reach",nvdec,playable,2021-02-24 14:09:48
+01003C3013300000,"The Long Return",slow,playable,2020-12-10 21:05:10
+0100CE1004E72000,"The Longest Five Minutes",gpu,boots,2023-02-19 18:33:11
+0100F3D0122C2000,"The Longing",gpu,ingame,2022-11-12 15:00:58
+010085A00C5E8000,"The Lord of the Rings: Adventure Card Game - Definitive Edition",online-broken,menus,2022-09-16 15:19:32
+01008A000A404000,"The Lost Child",nvdec,playable,2021-02-23 15:44:20
+0100BAB00A116000,"The Low Road",,playable,2021-02-26 13:23:22
+,"The Mahjong",Needs Update;crash;services,nothing,2021-04-01 22:06:22
+0100DC300AC78000,"The Messenger",,playable,2020-03-22 13:51:37
+0100DEC00B2BC000,"The Midnight Sanctuary",nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32
+0100F1B00B456000,"The MISSING: J.J. Macfield and the Island of Memories",,playable,2022-08-22 19:36:18
+010033300AC1A000,"The Mooseman",,playable,2021-02-24 12:58:57
+01005E9016BDE000,"The movie The Quintessential Bride -Five Memories Spent with You-",,playable,2023-12-14 14:43:43
+0100496004194000,"The Mummy Demastered",,playable,2021-02-23 13:11:27
+01004C500AAF6000,"The Mystery of the Hudson Case",,playable,2020-06-01 11:03:36
+01000CF0084BC000,"The Next Penelope",,playable,2021-01-29 16:26:11
+01001FB00E386000,"THE NINJA SAVIORS Return of the Warriors",online,playable,2021-03-25 23:48:07
+0100B080184BC000,"The Oregon Trail",gpu,ingame,2022-11-25 16:11:49
+0100B0101265C000,"The Otterman Empire",UE4;gpu,ingame,2021-06-17 12:27:15
+01000BC01801A000,"The Outbound Ghost",,nothing,2024-03-02 17:10:58
+0100626011656000,"The Outer Worlds",gpu;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32
+01005C500D690000,"The Park",UE4;crash;gpu,ingame,2020-12-18 12:50:07
+010050101127C000,"The Persistence",nvdec,playable,2021-06-06 19:15:40
+0100CD300880E000,"The Pinball Arcade",online-broken,playable,2022-08-22 19:49:46
+01006BD018B54000,"The Plucky Squire",crash,ingame,2024-09-27 22:32:33
+0100E6A00B960000,"The Princess Guide",,playable,2021-02-24 14:23:34
+010058A00BF1C000,"The Raven Remastered",nvdec,playable,2022-08-22 20:02:47
+0100EB100D17C000,"The Red Strings Club",,playable,2020-06-01 10:51:18
+010079400BEE0000,"The Room",,playable,2021-04-14 18:57:05
+010033100EE12000,"The Ryuo's Work is Never Done!",,playable,2022-03-29 00:35:37
+01002BA00C7CE000,"The Savior's Gang",gpu;nvdec;UE4,ingame,2022-09-21 12:37:48
+0100F3200E7CA000,"The Settlers®: New Allies",deadlock,nothing,2023-10-25 00:18:05
+0100F89003BC8000,"The Sexy Brutale",,playable,2021-01-06 17:48:28
+01001FF00BEE8000,"The Shapeshifting Detective",nvdec,playable,2021-01-10 13:10:49
+010028D00BA1A000,"The Sinking City",nvdec;UE4,playable,2022-09-12 16:41:55
+010041C00A68C000,"The Spectrum Retreat",,playable,2022-10-03 18:52:40
+010029300E5C4000,"The Stanley Parable: Ultra Deluxe",gpu,ingame,2024-07-12 23:18:26
+010007F00AF56000,"The Station",,playable,2022-09-28 18:15:27
+0100858010DC4000,"the StoryTale",,playable,2022-09-03 13:00:25
+0100AA400A238000,"The Stretchers™",nvdec;UE4,playable,2022-09-16 15:40:58
+0100E3100450E000,"The Strike - Championship Edition",gpu;32-bit,boots,2022-12-09 15:58:16
+0100EF200DA60000,"The Survivalists",,playable,2020-10-27 15:51:13
+010040D00B7CE000,"The Swindle",nvdec,playable,2022-08-22 20:53:52
+010037D00D568000,"The Swords of Ditto: Mormo's Curse",slow,ingame,2020-12-06 00:13:12
+01009B300D76A000,"The Tiny Bang Story",,playable,2021-03-05 15:39:05
+0100C3300D8C4000,"The Touryst",crash,ingame,2023-08-22 01:32:38
+010047300EBA6000,"The Tower of Beatrice",,playable,2022-09-12 16:51:42
+010058000A576000,"The Town of Light: Deluxe Edition",gpu,playable,2022-09-21 12:51:34
+0100B0E0086F6000,"The Trail: Frontier Challenge",slow,playable,2022-08-23 15:10:51
+0100EA100F516000,"The Turing Test",nvdec,playable,2022-09-21 13:24:07
+010064E00ECBC000,"The Unicorn Princess",,playable,2022-09-16 16:20:56
+0100BCF00E970000,"The Vanishing of Ethan Carter",UE4,playable,2021-06-09 17:14:47
+0100D0500B0A6000,"The VideoKid",nvdec,playable,2021-01-06 09:28:24
+,"The Voice",services,menus,2020-07-28 20:48:49
+010056E00B4F4000,"The Walking Dead: A New Frontier",,playable,2022-09-21 13:40:48
+010099100B6AC000,"The Walking Dead: Season Two",,playable,2020-08-09 12:57:06
+010029200B6AA000,"The Walking Dead: The Complete First Season",,playable,2021-06-04 13:10:56
+010060F00AA70000,"The Walking Dead: The Final Season - Season Pass",online-broken,playable,2022-08-23 17:22:32
+010095F010568000,"The Wanderer: Frankenstein's Creature",,playable,2020-07-11 12:49:51
+01008B200FC6C000,"The Wardrobe: Even Better Edition",,playable,2022-09-16 19:14:55
+01003D100E9C6000,"The Witcher 3: Wild Hunt",nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51
+0100B1300FF08000,"The Wonderful 101: Remastered",slow;nvdec,playable,2022-09-30 13:49:28
+0100C1500B82E000,"The World Ends with You®: Final Remix",ldn-untested,playable,2022-07-09 01:11:21
+0100E6200D56E000,"The World Next Door",,playable,2022-09-21 14:15:23
+010075900CD1C000,"Thea: The Awakening",,playable,2021-01-18 15:08:47
+010081B01777C000,"THEATRHYTHM FINAL BAR LINE",Incomplete,ingame,2024-08-05 14:24:55
+01001C2010D08000,"They Bleed Pixels",gpu,ingame,2024-08-09 05:52:18
+0100768010970000,"They Came From the Sky",,playable,2020-06-12 16:38:19
+0100CE700F62A000,"Thief of Thieves: Season One",crash;loader-allocator,nothing,2021-11-03 07:16:30
+0100CE400E34E000,"Thief Simulator",,playable,2023-04-22 04:39:11
+01009BD003B36000,"Thimbleweed Park",,playable,2022-08-24 11:15:31
+0100F2300A5DA000,"Think of the Children",deadlock,menus,2021-11-23 09:04:45
+0100066004D68000,"This Is the Police",,playable,2022-08-24 11:37:05
+01004C100A04C000,"This is the Police 2",,playable,2022-08-24 11:49:17
+0100C7C00F77C000,"This Strange Realm Of Mine",,playable,2020-08-28 12:07:24
+0100A8700BC2A000,"This War of Mine: Complete Edition",gpu;32-bit;nvdec,ingame,2022-08-24 12:00:44
+0100AC500EEE8000,"THOTH",,playable,2020-08-05 18:35:28
+0100E910103B4000,"Thronebreaker: The Witcher Tales",nvdec,playable,2021-06-03 16:40:15
+01006F6002840000,"Thumper",gpu,ingame,2024-08-12 02:41:07
+01000AC011588000,"Thy Sword",crash,ingame,2022-09-30 16:43:14
+0100E9000C42C000,"Tick Tock: A Tale for Two",,menus,2020-07-14 14:49:38
+0100B6D00C2DE000,"Tied Together",nvdec,playable,2021-04-10 14:03:46
+010074500699A000,"Timber Tennis: Versus",online,playable,2020-10-03 17:07:15
+01004C500B698000,"Time Carnage",,playable,2021-06-16 17:57:28
+0100F770045CA000,"Time Recoil",,playable,2022-08-24 12:44:03
+0100DD300CF3A000,"Timespinner",gpu,ingame,2022-08-09 09:39:11
+0100393013A10000,"Timothy and the Mysterious Forest",gpu;slow,ingame,2021-06-02 00:42:11
+0100F7C010AF6000,"Tin & Kuna",,playable,2020-11-17 12:16:12
+0100DF900FC52000,"Tiny Gladiators",,playable,2020-12-14 00:09:43
+010061A00AE64000,"Tiny Hands Adventure",,playable,2022-08-24 16:07:48
+010074800741A000,"TINY METAL",UE4;gpu;nvdec,ingame,2021-03-05 17:11:57
+01005D0011A40000,"Tiny Racer",,playable,2022-10-07 11:13:03
+010002401AE94000,"Tiny Thor",gpu,ingame,2024-07-26 08:37:35
+0100A73016576000,"Tinykin",gpu,ingame,2023-06-18 12:12:24
+0100FE801185E000,"Titan Glory",,boots,2022-10-07 11:36:40
+0100605008268000,"Titan Quest",nvdec;online-broken,playable,2022-08-19 21:54:15
+01009C400E93E000,"Titans Pinball",slow,playable,2020-06-09 16:53:52
+010019500DB1E000,"Tlicolity Eyes - twinkle showtime -",gpu,boots,2021-05-29 19:43:44
+010036700F83E000,"To the Moon",,playable,2021-03-20 15:33:38
+010014900865A000,"Toast Time: Smash Up!",crash;services,menus,2020-04-03 12:26:59
+0100A4A00B2E8000,"Toby: The Secret Mine",nvdec,playable,2021-01-06 09:22:33
+0100B5200BB7C000,"ToeJam & Earl: Back in the Groove!",,playable,2021-01-06 22:56:58
+0100B5E011920000,"TOHU",slow,playable,2021-02-08 15:40:44
+0100F3400A432000,"Toki",nvdec,playable,2021-01-06 19:59:23
+01003E500F962000,"Tokyo Dark – Remembrance –",nvdec,playable,2021-06-10 20:09:49
+0100A9400C9C2000,"Tokyo Mirage Sessions™ #FE Encore",32-bit;nvdec,playable,2022-07-07 09:41:07
+0100E2E00CB14000,"Tokyo School Life",,playable,2022-09-16 20:25:54
+010024601BB16000,"Tomb Raider I-III Remastered Starring Lara Croft",gpu;opengl,ingame,2024-09-27 12:32:04
+0100D7F01E49C000,"Tomba! Special Edition",services-horizon,nothing,2024-09-15 21:59:54
+0100D400100F8000,"Tonight We Riot",,playable,2021-02-26 15:55:09
+0100CC00102B4000,"Tony Hawk's™ Pro Skater™ 1 + 2",gpu;Needs Update,ingame,2024-09-24 08:18:14
+010093F00E818000,"Tools Up!",crash,ingame,2020-07-21 12:58:17
+01009EA00E2B8000,"Toon War",,playable,2021-06-11 16:41:53
+010090400D366000,"Torchlight II",,playable,2020-07-27 14:18:37
+010075400DDB8000,"Torchlight III",nvdec;online-broken;UE4,playable,2022-10-14 22:20:17
+01007AF011732000,"TORICKY-S",deadlock,menus,2021-11-25 08:53:36
+0100BEB010F2A000,"Torn Tales: Rebound Edition",,playable,2020-11-01 14:11:59
+0100A64010D48000,"Total Arcade Racing",,playable,2022-11-12 15:12:48
+0100512010728000,"Totally Reliable Delivery Service",online-broken,playable,2024-09-27 19:32:22
+01004E900B082000,"Touhou Genso Wanderer Reloaded",gpu;nvdec,ingame,2022-08-25 11:57:36
+010010F004022000,"Touhou Kobuto V: Burst Battle",,playable,2021-01-11 15:28:58
+0100E9D00D6C2000,"TOUHOU Spell Bubble",,playable,2020-10-18 11:43:43
+0100F7B00595C000,"Tower Of Babel",,playable,2021-01-06 17:05:15
+010094600DC86000,"Tower Of Time",gpu;nvdec,ingame,2020-07-03 11:11:12
+0100A1C00359C000,"TowerFall",,playable,2020-05-16 18:58:07
+0100F6200F77E000,"Towertale",,playable,2020-10-15 13:56:58
+010049E00BA34000,"Townsmen - A Kingdom Rebuilt",nvdec,playable,2022-10-14 22:48:59
+01009FF00A160000,"Toy Stunt Bike: Tiptop's Trials",UE4,playable,2021-04-10 13:56:34
+0100192010F5A000,"Tracks - Toybox Edition",UE4;crash,nothing,2021-02-08 15:19:18
+0100BCA00843A000,"Trailblazers",,playable,2021-03-02 20:40:49
+010009F004E66000,"Transcripted",,playable,2022-08-25 12:13:11
+01005E500E528000,"TRANSFORMERS: BATTLEGROUNDS",online,playable,2021-06-17 18:08:19
+0100BE500BEA2000,"Transistor",,playable,2020-10-22 11:28:02
+0100A8D010BFA000,"Travel Mosaics 2: Roman Holiday",,playable,2021-05-26 12:33:16
+0100102010BFC000,"Travel Mosaics 3: Tokyo Animated",,playable,2021-05-26 12:06:27
+010096D010BFE000,"Travel Mosaics 4: Adventures In Rio",,playable,2021-05-26 11:54:58
+01004C4010C00000,"Travel Mosaics 5: Waltzing Vienna",,playable,2021-05-26 11:49:35
+0100D520119D6000,"Travel Mosaics 6: Christmas Around the World",,playable,2021-05-26 00:52:47
+01000BD0119DE000,"Travel Mosaics 7: Fantastic Berlin",,playable,2021-05-22 18:37:34
+01007DB00A226000,"Travel Mosaics: A Paris Tour",,playable,2021-05-26 12:42:26
+010011600C946000,"Travis Strikes Again: No More Heroes",nvdec;UE4,playable,2022-08-25 12:36:38
+01006EB004B0E000,"Treadnauts",,playable,2021-01-10 14:57:41
+0100D7800E9E0000,"Trials of Mana",UE4,playable,2022-09-30 21:50:37
+0100E1D00FBDE000,"Trials of Mana Demo",nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02
+01003E800A102000,"Trials Rising Standard Edition",,playable,2024-02-11 01:36:39
+0100CC80140F8000,"TRIANGLE STRATEGY™",gpu;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37
+010064E00A932000,"Trine 2: Complete Story",nvdec,playable,2021-06-03 11:45:20
+0100DEC00A934000,"Trine 3: The Artifacts of Power",ldn-untested;online,playable,2021-06-03 12:01:24
+010055E00CA68000,"Trine 4: The Nightmare Prince",gpu,nothing,2025-01-07 05:47:46
+0100D9000A930000,"Trine Enchanted Edition",ldn-untested;nvdec,playable,2021-06-03 11:28:15
+01002D7010A54000,"Trinity Trigger",crash,ingame,2023-03-03 03:09:09
+0100868013FFC000,"TRIVIAL PURSUIT Live! 2",,boots,2022-12-19 00:04:33
+0100F78002040000,"Troll and I™",gpu;nvdec,ingame,2021-06-04 16:58:50
+0100145011008000,"Trollhunters: Defenders of Arcadia",gpu;nvdec,ingame,2020-11-30 13:27:09
+0100FBE0113CC000,"Tropico 6 - Nintendo Switch™ Edition",nvdec;UE4,playable,2022-10-14 23:21:03
+0100D06018DCA000,"Trouble Witches Final! Episode 01: Daughters of Amalgam",,playable,2024-04-08 15:08:11
+0100B5B0113CE000,"Troubleshooter",UE4;crash,nothing,2020-10-04 13:46:50
+010089600FB72000,"Trover Saves The Universe",UE4;crash,nothing,2020-10-03 10:25:27
+0100E6300D448000,"Trüberbrook",,playable,2021-06-04 17:08:00
+0100F2100AA5C000,"Truck and Logistics Simulator",,playable,2021-06-11 13:29:08
+0100CB50107BA000,"Truck Driver",online-broken,playable,2022-10-20 17:42:33
+0100E75004766000,"True Fear: Forsaken Souls - Part 1",nvdec,playable,2020-12-15 21:39:52
+010099900CAB2000,"TT Isle of Man",nvdec,playable,2020-06-22 12:25:13
+010000400F582000,"TT Isle of Man Ride on the Edge 2",gpu;nvdec;online-broken,ingame,2022-09-30 22:13:05
+0100752011628000,"TTV2",,playable,2020-11-27 13:21:36
+0100AFE00452E000,"Tumblestone",,playable,2021-01-07 17:49:20
+010085500D5F6000,"Turok",gpu,ingame,2021-06-04 13:16:24
+0100CDC00D8D6000,"Turok 2: Seeds of Evil",gpu;vulkan,ingame,2022-09-12 17:50:05
+010004B0130C8000,"Turrican Flashback",audout,playable,2021-08-30 10:07:56
+0100B1F0090F2000,"TurtlePop: Journey to Freedom",,playable,2020-06-12 17:45:39
+0100047009742000,"Twin Robots: Ultimate Edition",nvdec,playable,2022-08-25 14:24:03
+010031200E044000,"Two Point Hospital™",crash;nvdec,ingame,2022-09-22 11:22:23
+010038400C2FE000,"TY the Tasmanian Tiger™ HD",32-bit;crash;nvdec,menus,2020-12-17 21:15:00
+010073A00C4B2000,"Tyd wag vir Niemand",,playable,2021-03-02 13:39:53
+0100D5B00D6DA000,"Type:Rider",,playable,2021-01-06 13:12:55
+010040D01222C000,"UBERMOSH: SANTICIDE",,playable,2020-11-27 15:05:01
+0100992010BF8000,"Ubongo",,playable,2021-02-04 21:15:01
+010079000B56C000,"UglyDolls: An Imperfect Adventure",nvdec;UE4,playable,2022-08-25 14:42:16
+010048901295C000,"Ultimate Fishing Simulator",,playable,2021-06-16 18:38:23
+01009D000FAE0000,"Ultimate Racing 2D",,playable,2020-08-05 17:27:09
+010045200A1C2000,"Ultimate Runner",,playable,2022-08-29 12:52:40
+01006B601117E000,"Ultimate Ski Jumping 2020",online,playable,2021-03-02 20:54:11
+01002D4012222000,"Ultra Hat Dimension",services;audio,menus,2021-11-18 09:05:20
+01009C000415A000,"Ultra Hyperball",,playable,2021-01-06 10:09:55
+01007330027EE000,"Ultra Street Fighter® II: The Final Challengers",ldn-untested,playable,2021-11-25 07:54:58
+01006A300BA2C000,"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",audout,playable,2023-05-04 17:25:23
+0100592005164000,"UNBOX: Newbie's Adventure",UE4,playable,2022-08-29 13:12:56
+01002D900C5E4000,"Uncanny Valley",nvdec,playable,2021-06-04 13:28:45
+010076F011F54000,"Undead & Beyond",nvdec,playable,2022-10-04 09:11:18
+01008F3013E4E000,"Under Leaves",,playable,2021-05-22 18:13:58
+010080B00AD66000,"Undertale",,playable,2022-08-31 17:31:46
+01008F80049C6000,"Unepic",,playable,2024-01-15 17:03:00
+01007820096FC000,"UnExplored",,playable,2021-01-06 10:02:16
+01007D1013512000,"Unhatched",,playable,2020-12-11 12:11:09
+010069401ADB8000,"Unicorn Overlord",,playable,2024-09-27 14:04:32
+0100B1400D92A000,"Unit 4",,playable,2020-12-16 18:54:13
+010045200D3A4000,"Unknown Fate",slow,ingame,2020-10-15 12:27:42
+0100AB2010B4C000,"Unlock The King",,playable,2020-09-01 13:58:27
+0100A3E011CB0000,"Unlock the King 2",,playable,2021-06-15 20:43:55
+01005AA00372A000,"UNO® for Nintendo Switch",nvdec;ldn-untested,playable,2022-07-28 14:49:47
+0100E5D00CC0C000,"Unravel Two",nvdec,playable,2024-05-23 15:45:05
+010001300CC4A000,"Unruly Heroes",,playable,2021-01-07 18:09:31
+0100B410138C0000,"Unspottable",,playable,2022-10-25 19:28:49
+010082400BCC6000,"Untitled Goose Game",,playable,2020-09-26 13:18:06
+0100E49013190000,"Unto The End",gpu,ingame,2022-10-21 11:13:29
+0100B110109F8000,"Urban Flow",services,playable,2020-07-05 12:51:47
+010054F014016000,"Urban Street Fighting",,playable,2021-02-20 19:16:36
+01001B10068EC000,"Urban Trial Playground",UE4;nvdec;online,playable,2021-03-25 20:56:51
+0100A2500EB92000,"Urban Trial Tricky",nvdec;UE4,playable,2022-12-06 13:07:56
+01007C0003AEC000,"Use Your Words",nvdec;online-broken,menus,2022-08-29 17:22:10
+0100D4300EBF8000,"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44
+010024200E00A000,"Uta no☆Prince-sama♪ Repeat Love",nvdec,playable,2022-12-09 09:21:51
+010029B00CC3E000,"UTOPIA 9 - A Volatile Vacation",nvdec,playable,2020-12-16 17:06:42
+010064400B138000,"V-Rally 4",gpu;nvdec,ingame,2021-06-07 19:37:31
+0100A6700D66E000,"VA-11 HALL-A",,playable,2021-02-26 15:05:34
+01009E2003FE2000,"Vaccine",nvdec,playable,2021-01-06 01:02:07
+010089700F30C000,"Valfaris",,playable,2022-09-16 21:37:24
+0100CAF00B744000,"Valkyria Chronicles",32-bit;crash;nvdec,ingame,2022-11-23 20:03:32
+01005C600AC68000,"Valkyria Chronicles 4",audout;nvdec,playable,2021-06-03 18:12:25
+0100FBD00B91E000,"Valkyria Chronicles 4 Demo",slow;demo,ingame,2022-08-29 20:39:07
+0100E0E00B108000,"Valley",nvdec,playable,2022-09-28 19:27:58
+010089A0197E4000,"Vampire Survivors",,ingame,2024-06-17 09:57:38
+010020C00FFB6000,"Vampire: The Masquerade - Coteries of New York",,playable,2020-10-04 14:55:22
+01000BD00CE64000,"VAMPYR",nvdec;UE4,playable,2022-09-16 22:15:51
+01007C500D650000,"Vandals",,playable,2021-01-27 21:45:46
+010030F00CA1E000,"Vaporum",nvdec,playable,2021-05-28 14:25:33
+010045C0109F2000,"VARIABLE BARRICADE NS",nvdec,playable,2022-02-26 15:50:13
+0100FE200AF48000,"VASARA Collection",nvdec,playable,2021-02-28 15:26:10
+0100AD300E4FA000,"Vasilis",,playable,2020-09-01 15:05:35
+01009CD003A0A000,"Vegas Party",,playable,2021-04-14 19:21:41
+010098400E39E000,"Vektor Wars",online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46
+01003A8018E60000,"Vengeful Guardian: Moonrider",deadlock,boots,2024-03-17 23:35:37
+010095B00DBC8000,"Venture Kid",crash;gpu,ingame,2021-04-18 16:33:17
+0100C850134A0000,"Vera Blanc: Full Moon",audio,playable,2020-12-17 12:09:30
+0100379013A62000,"Very Very Valet",nvdec,playable,2022-11-12 15:25:51
+01006C8014DDA000,"Very Very Valet Demo",crash;Needs Update;demo,boots,2022-11-12 15:26:13
+010057B00712C000,"Vesta",nvdec,playable,2022-08-29 21:03:39
+0100E81007A06000,"Victor Vran Overkill Edition",gpu;deadlock;nvdec;opengl,ingame,2022-08-30 11:46:56
+01005880063AA000,"Violett",nvdec,playable,2021-01-28 13:09:36
+010037900CB1C000,"Viviette",,playable,2021-06-11 15:33:40
+0100D010113A8000,"Void Bastards",,playable,2022-10-15 00:04:19
+0100FF7010E7E000,"void tRrLM(); //Void Terrarium",gpu;Needs Update;regression,ingame,2023-02-10 01:13:25
+010078D0175EE000,"void* tRrLM2(); //Void Terrarium 2",,playable,2023-12-21 11:00:41
+0100B1A0066DC000,"Volgarr the Viking",,playable,2020-12-18 15:25:50
+0100A7900E79C000,"Volta-X",online-broken,playable,2022-10-07 12:20:51
+01004D8007368000,"Vostok Inc.",,playable,2021-01-27 17:43:59
+0100B1E0100A4000,"Voxel Galaxy",,playable,2022-09-28 22:45:02
+0100AFA011068000,"Voxel Pirates",,playable,2022-09-28 22:55:02
+0100BFB00D1F4000,"Voxel Sword",,playable,2022-08-30 14:57:27
+01004E90028A2000,"Vroom in the night sky",Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29
+0100C7C00AE6C000,"VSR: Void Space Racing",,playable,2021-01-27 14:08:59
+0100B130119D0000,"Waifu Uncovered",crash,ingame,2023-02-27 01:17:46
+0100E29010A4A000,"Wanba Warriors",,playable,2020-10-04 17:56:22
+010078800825E000,"Wanderjahr TryAgainOrWalkAway",,playable,2020-12-16 09:46:04
+0100B27010436000,"Wanderlust Travel Stories",,playable,2021-04-07 16:09:12
+0100F8A00853C000,"Wandersong",nvdec,playable,2021-06-04 15:33:34
+0100D67013910000,"Wanna Survive",,playable,2022-11-12 21:15:43
+010056901285A000,"War Dogs: Red's Return",,playable,2022-11-13 15:29:01
+01004FA01391A000,"War Of Stealth - assassin",,playable,2021-05-22 17:34:38
+010035A00D4E6000,"War Party",nvdec,playable,2021-01-27 18:26:32
+010049500DE56000,"War Tech Fighters",nvdec,playable,2022-09-16 22:29:31
+010084D00A134000,"War Theatre",gpu,ingame,2021-06-07 19:42:45
+0100B6B013B8A000,"War Truck Simulator",,playable,2021-01-31 11:22:54
+0100563011B4A000,"War-Torn Dreams",crash,nothing,2020-10-21 11:36:16
+010054900F51A000,"WARBORN",,playable,2020-06-25 12:36:47
+01000F0002BB6000,"Wargroove",online-broken,playable,2022-08-31 10:30:45
+0100C6000EEA8000,"Warhammer 40,000: Mechanicus",nvdec,playable,2021-06-13 10:46:38
+0100E5600D7B2000,"WARHAMMER 40,000: SPACE WOLF",online-broken,playable,2022-09-20 21:11:20
+010031201307A000,"Warhammer Age of Sigmar: Storm Ground",nvdec;online-broken;UE4,playable,2022-11-13 15:46:14
+01002FF00F460000,"Warhammer Quest 2: The End Times",,playable,2020-08-04 15:28:03
+0100563010E0C000,"WarioWare™: Get It Together!",gpu;opengl-backend-bug,ingame,2024-04-23 01:04:56
+010045B018EC2000,"WarioWare™: Move It!",,playable,2023-11-14 00:23:51
+0100E0400E320000,"Warlocks 2: God Slayers",,playable,2020-12-16 17:36:50
+0100DB300A026000,"Warp Shift",nvdec,playable,2020-12-15 14:48:48
+010032700EAC4000,"WarriOrb",UE4,playable,2021-06-17 15:45:14
+0100E8500AD58000,"WARRIORS OROCHI 4 ULTIMATE",nvdec;online-broken,playable,2024-08-07 01:50:37
+0100CD900FB24000,"WARTILE",UE4;crash;gpu,menus,2020-12-11 21:56:10
+010039A00BC64000,"Wasteland 2: Director's Cut",nvdec,playable,2021-01-27 13:34:11
+0100B79011F06000,"Water Balloon Mania",,playable,2020-10-23 20:20:59
+0100BA200C378000,"Way of the Passive Fist",gpu,ingame,2021-02-26 21:07:06
+0100560010E3E000,"We should talk.",crash,nothing,2020-08-03 12:32:36
+010096000EEBA000,"Welcome to Hanwell",UE4;crash,boots,2020-08-03 11:54:57
+0100D7F010B94000,"Welcome to Primrose Lake",,playable,2022-10-21 11:30:57
+010035600EC94000,"Wenjia",,playable,2020-06-08 11:38:30
+010031B00A4E8000,"West of Loathing",,playable,2021-01-28 12:35:19
+010038900DFE0000,"What Remains of Edith Finch",slow;UE4,playable,2022-08-31 19:57:59
+010033600ADE6000,"Wheel of Fortune®",crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24
+0100DFC00405E000,"Wheels of Aurelia",,playable,2021-01-27 21:59:25
+010027D011C9C000,"Where Angels Cry",gpu;nvdec,ingame,2022-09-30 22:24:47
+0100FDB0092B4000,"Where Are My Friends?",,playable,2022-09-21 14:39:26
+01000C000C966000,"Where the Bees Make Honey",,playable,2020-07-15 12:40:49
+010017500E7E0000,"Whipseey and the Lost Atlas",,playable,2020-06-23 20:24:14
+010015A00AF1E000,"Whispering Willows",nvdec,playable,2022-09-30 22:33:05
+010027F0128EA000,"Who Wants to Be a Millionaire?",crash,nothing,2020-12-11 20:22:42
+0100C7800CA06000,"Widget Satchel",,playable,2022-09-16 22:41:07
+0100CFC00A1D8000,"Wild Guns™ Reloaded",,playable,2021-01-28 12:29:05
+010071F00D65A000,"Wilmot's Warehouse",audio;gpu,ingame,2021-06-02 17:24:32
+010048800B638000,"Windjammers",online,playable,2020-10-13 11:24:25
+010059900BA3C000,"Windscape",,playable,2022-10-21 11:49:42
+0100D6800CEAC000,"Windstorm: An Unexpected Arrival",UE4,playable,2021-06-07 19:33:19
+01005A100B314000,"Windstorm: Start of a Great Friendship",UE4;gpu;nvdec,ingame,2020-12-22 13:17:48
+010035B012F28000,"Wing of Darkness",UE4,playable,2022-11-13 16:03:51
+0100A4A015FF0000,"Winter Games 2023",deadlock,menus,2023-11-07 20:47:36
+010012A017F18800,"Witch On The Holy Night",,playable,2023-03-06 23:28:11
+0100454012E32000,"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",crash,ingame,2021-08-08 11:56:18
+01002FC00C6D0000,"Witch Thief",,playable,2021-01-27 18:16:07
+010061501904E000,"Witch's Garden",gpu;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24
+0100BD4011FFE000,"Witcheye",,playable,2020-12-14 22:56:08
+0100522007AAA000,"Wizard of Legend",,playable,2021-06-07 12:20:46
+010081900F9E2000,"Wizards of Brandel",,nothing,2020-10-14 15:52:33
+0100C7600E77E000,"Wizards: Wand of Epicosity",,playable,2022-10-07 12:32:06
+01009040091E0000,"Wolfenstein II®: The New Colossus™",gpu,ingame,2024-04-05 05:39:46
+01003BD00CAAE000,"Wolfenstein: Youngblood",online-broken,boots,2024-07-12 23:49:20
+010037A00F5E2000,"Wonder Blade",,playable,2020-12-11 17:55:31
+0100B49016FF0000,"Wonder Boy Anniversary Collection",deadlock,nothing,2023-04-20 16:01:48
+0100EB2012E36000,"Wonder Boy Asha in Monster World",crash,nothing,2021-11-03 08:45:06
+0100A6300150C000,"Wonder Boy: The Dragon's Trap",,playable,2021-06-25 04:53:21
+0100F5D00C812000,"Wondershot",,playable,2022-08-31 21:05:31
+0100E0300EB04000,"Woodle Tree 2: Deluxe",gpu;slow,ingame,2020-06-04 18:44:00
+0100288012966000,"Woodsalt",,playable,2021-04-06 17:01:48
+010083E011BC8000,"Wordify",,playable,2020-10-03 09:01:07
+01009D500A194000,"World Conqueror X",,playable,2020-12-22 16:10:29
+010072000BD32000,"WORLD OF FINAL FANTASY MAXIMA",,playable,2020-06-07 13:57:23
+010009E001D90000,"World of Goo",gpu;32-bit;crash;regression,boots,2024-04-12 05:52:14
+010061F01DB7C800,"World of Goo 2",,boots,2024-08-08 22:52:49
+01001E300B038000,"World Soccer Pinball",,playable,2021-01-06 00:37:02
+010048900CF64000,"Worldend Syndrome",,playable,2021-01-03 14:16:32
+01008E9007064000,"WorldNeverland - Elnea Kingdom",,playable,2021-01-28 17:44:23
+010000301025A000,"Worlds of Magic: Planar Conquest",,playable,2021-06-12 12:51:28
+01009CD012CC0000,"Worm Jazz",gpu;services;UE4;regression,ingame,2021-11-10 10:33:04
+01001AE005166000,"Worms W.M.D",gpu;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59
+010037500C4DE000,"Worse Than Death",,playable,2021-06-11 16:05:40
+01006F100EB16000,"Woven",nvdec,playable,2021-06-02 13:41:08
+010087800DCEA000,"WRC 8 FIA World Rally Championship",nvdec,playable,2022-09-16 23:03:36
+01001A0011798000,"WRC 9 The Official Game",gpu;slow;nvdec,ingame,2022-10-25 19:47:39
+0100DC0012E48000,"Wreckfest",,playable,2023-02-12 16:13:00
+0100C5D00EDB8000,"Wreckin' Ball Adventure",UE4,playable,2022-09-12 18:56:28
+010033700418A000,"Wulverblade",nvdec,playable,2021-01-27 22:29:05
+01001C400482C000,"Wunderling DX",audio;crash,ingame,2022-09-10 13:20:12
+01003B401148E000,"Wurroom",,playable,2020-10-07 22:46:21
+010081700EDF4000,"WWE 2K Battlegrounds",nvdec;online-broken;UE4,playable,2022-10-07 12:44:40
+010009800203E000,"WWE 2K18",nvdec,playable,2023-10-21 17:22:01
+0100DF100B97C000,"X-Morph: Defense",,playable,2020-06-22 11:05:31
+0100D0B00FB74000,"XCOM® 2 Collection",gpu;crash,ingame,2022-10-04 09:38:30
+0100CC9015360000,"XEL",gpu,ingame,2022-10-03 10:19:39
+0100C9F009F7A000,"Xenoblade Chronicles 2: Torna ~ The Golden Country",slow;nvdec,playable,2023-01-28 16:47:28
+0100E95004038000,"Xenoblade Chronicles™ 2",deadlock;amd-vendor-bug,ingame,2024-03-28 14:31:41
+010074F013262000,"Xenoblade Chronicles™ 3",gpu;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44
+0100FF500E34A000,"Xenoblade Chronicles™ Definitive Edition",nvdec,playable,2024-05-04 20:12:41
+010028600BA16000,"Xenon Racer",nvdec;UE4,playable,2022-08-31 22:05:30
+010064200C324000,"Xenon Valkyrie+",,playable,2021-06-07 20:25:53
+0100928005BD2000,"Xenoraid",,playable,2022-09-03 13:01:10
+01005B5009364000,"Xeodrifter",,playable,2022-09-03 13:18:39
+01006FB00DB02000,"Yaga",nvdec,playable,2022-09-16 23:17:17
+010076B0101A0000,"YesterMorrow",crash,ingame,2020-12-17 17:15:25
+010085500B29A000,"Yet Another Zombie Defense HD",,playable,2021-01-06 00:18:39
+0100725019978000,"YGGDRA UNION ~WE'LL NEVER FIGHT ALONE~",,playable,2020-04-03 02:20:47
+0100634008266000,"YIIK: A Postmodern RPG",,playable,2021-01-28 13:38:37
+0100C0000CEEA000,"Yo kai watch 1 for Nintendo Switch",gpu;opengl,ingame,2024-05-28 11:11:49
+010086C00AF7C000,"Yo-Kai Watch 4++",,playable,2024-06-18 20:21:44
+010002D00632E000,"Yoku's Island Express",nvdec,playable,2022-09-03 13:59:02
+0100F47016F26000,"Yomawari 3",,playable,2022-05-10 08:26:51
+010012F00B6F2000,"Yomawari: The Long Night Collection",,playable,2022-09-03 14:36:59
+0100CC600ABB2000,"Yonder: The Cloud Catcher Chronicles (Retail Only)",,playable,2021-01-28 14:06:25
+0100BE50042F6000,"Yono and the Celestial Elephants",,playable,2021-01-28 18:23:58
+0100F110029C8000,"Yooka-Laylee",,playable,2021-01-28 14:21:45
+010022F00DA66000,"Yooka-Laylee and the Impossible Lair",,playable,2021-03-05 17:32:21
+01006000040C2000,"Yoshi’s Crafted World™",gpu;audout,ingame,2021-08-30 13:25:51
+0100AE800C9C6000,"Yoshi’s Crafted World™ Demo",gpu,boots,2020-12-16 14:57:40
+,"Yoshiwara Higanbana Kuon no Chigiri",nvdec,playable,2020-10-17 19:14:46
+01003A400C3DA800,"YouTube",,playable,2024-06-08 05:24:10
+00100A7700CCAA40,"Youtubers Life00",nvdec,playable,2022-09-03 14:56:19
+0100E390124D8000,"Ys IX: Monstrum Nox",,playable,2022-06-12 04:14:42
+0100F90010882000,"Ys Origin",nvdec,playable,2024-04-17 05:07:33
+01007F200B0C0000,"Ys VIII: Lacrimosa of DANA",nvdec,playable,2023-08-05 09:26:41
+010022400BE5A000,"Yu-Gi-Oh! Legacy of the Duelist : Link Evolution",,playable,2024-09-27 21:48:43
+01002D60188DE000,"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",crash,ingame,2023-03-17 01:54:01
+010037D00DBDC000,"YU-NO: A girl who chants love at the bound of this world.",nvdec,playable,2021-01-26 17:03:52
+0100B56011502000,"Yumeutsutsu Re:After",,playable,2022-11-20 16:09:06
+,"Yunohana Spring! - Mellow Times -",audio;crash,menus,2020-09-27 19:27:40
+0100307011C44000,"Yuppie Psycho: Executive Edition",crash,ingame,2020-12-11 10:37:06
+0100FC900963E000,"Yuri",,playable,2021-06-11 13:08:50
+010092400A678000,"Zaccaria Pinball",online-broken,playable,2022-09-03 15:44:28
+0100E7900C4C0000,"Zarvot",,playable,2021-01-28 13:51:36
+01005F200F7C2000,"Zen Chess Collection",,playable,2020-07-01 22:28:27
+01008DD0114AE000,"Zenge",,playable,2020-10-22 13:23:57
+0100057011E50000,"Zengeon",services-horizon;crash,boots,2024-04-29 15:43:07
+0100AAC00E692000,"Zenith",,playable,2022-09-17 09:57:02
+0100A6A00894C000,"ZERO GUNNER 2- for Nintendo Switch",,playable,2021-01-04 20:17:14
+01004B001058C000,"Zero Strain",services;UE4,menus,2021-11-10 07:48:32
+,"Zettai kaikyu gakuen",gpu;nvdec,ingame,2020-08-25 15:15:54
+0100D7B013DD0000,"Ziggy the Chaser",,playable,2021-02-04 20:34:27
+010086700EF16000,"ZikSquare",gpu,ingame,2021-11-06 02:02:48
+010069C0123D8000,"Zoids Wild Blast Unleashed",nvdec,playable,2022-10-15 11:26:59
+0100C7300EEE4000,"Zombie Army Trilogy",ldn-untested;online,playable,2020-12-16 12:02:28
+01006CF00DA8C000,"Zombie Driver Immortal Edition",nvdec,playable,2020-12-14 23:15:10
+0100CFE003A64000,"ZOMBIE GOLD RUSH",online,playable,2020-09-24 12:56:08
+01001740116EC000,"Zombie's Cool",,playable,2020-12-17 12:41:26
+01000E5800D32C00,"Zombieland: Double Tap - Road Trip0",,playable,2022-09-17 10:08:45
+0100CD300A1BA000,"Zombillie",,playable,2020-07-23 17:42:23
+01001EE00A6B0000,"Zotrix: Solar Division",,playable,2021-06-07 20:34:05
+0100B9B00C6A4000,"この世の果てで恋を唄う少女YU-NO",audio,ingame,2021-01-22 07:00:16
+,"スーパーファミコン Nintendo Switch Online",slow,ingame,2020-03-14 05:48:38
+01000BB01CB8A000,"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",,nothing,2024-09-28 07:03:14
+010065500B218000,"メモリーズオフ - Innocent Fille",,playable,2022-12-02 17:36:48
+010032400E700000,"二ノ国 白き聖灰の女王",services;32-bit,menus,2023-04-16 17:11:06
+0100F3100DA46000,"初音ミク Project DIVA MEGA39's",audio;loader-allocator,playable,2022-07-29 11:45:52
+010047F012BE2000,"密室のサクリファイス/ABYSS OF THE SACRIFICE",nvdec,playable,2022-10-21 13:56:28
+0100BF401AF9C000,"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",slow,playable,2023-12-31 14:37:17
+0100AFA01750C000,"死神と少女/Shinigami to Shoujo",gpu;Incomplete,ingame,2024-03-22 01:06:45
+01001BA01EBFC000,"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",services-horizon,nothing,2024-09-28 12:22:55
+0100936018EB4000,"牧場物語 Welcome!ワンダフルライフ",crash,ingame,2023-04-25 19:43:52
+0100F4401940A000,"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",crash,ingame,2024-02-12 20:58:31
+010064801A01C000,"超次元ゲイム ネプテューヌ GameMaker R:Evolution",crash,nothing,2023-10-30 22:37:40
+0100F3400332C000,"ゼノブレイド2",deadlock;amd-vendor-bug,ingame,2024-03-28 14:31:41
\ No newline at end of file
diff --git a/global.json b/global.json
index 391ba3c2a..cdbb589ed 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "8.0.100",
+ "version": "9.0.100",
"rollForward": "latestFeature"
}
}
diff --git a/src/ARMeilleure/ARMeilleure.csproj b/src/ARMeilleure/ARMeilleure.csproj
index 4b67fdb3b..5b6c5a6da 100644
--- a/src/ARMeilleure/ARMeilleure.csproj
+++ b/src/ARMeilleure/ARMeilleure.csproj
@@ -1,7 +1,6 @@
- net8.0
true
$(DefaultItemExcludes);._*
diff --git a/src/ARMeilleure/Decoders/DecoderHelper.cs b/src/ARMeilleure/Decoders/DecoderHelper.cs
index 35e573955..c39a8a88b 100644
--- a/src/ARMeilleure/Decoders/DecoderHelper.cs
+++ b/src/ARMeilleure/Decoders/DecoderHelper.cs
@@ -1,4 +1,5 @@
using ARMeilleure.Common;
+using System;
namespace ARMeilleure.Decoders
{
@@ -149,7 +150,7 @@ namespace ARMeilleure.Decoders
return (((long)opCode << 45) >> 48) & ~3;
}
- public static bool VectorArgumentsInvalid(bool q, params int[] args)
+ public static bool VectorArgumentsInvalid(bool q, params ReadOnlySpan args)
{
if (q)
{
diff --git a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs
index 13d9fac68..694633f97 100644
--- a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs
+++ b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs
@@ -406,7 +406,7 @@ namespace ARMeilleure.Instructions
{
Operand res = EmitSoftFloatCall(context, nameof(SoftFloat32.FPSub), op1, op2);
- return EmitUnaryMathCall(context, nameof(Math.Abs), res);
+ return EmitUnaryMathCall(context, nameof(MathHelper.Abs), res);
});
}
}
@@ -451,7 +451,7 @@ namespace ARMeilleure.Instructions
{
Operand res = EmitSoftFloatCall(context, nameof(SoftFloat32.FPSub), op1, op2);
- return EmitUnaryMathCall(context, nameof(Math.Abs), res);
+ return EmitUnaryMathCall(context, nameof(MathHelper.Abs), res);
});
}
}
@@ -483,7 +483,7 @@ namespace ARMeilleure.Instructions
{
EmitScalarUnaryOpF(context, (op1) =>
{
- return EmitUnaryMathCall(context, nameof(Math.Abs), op1);
+ return EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1);
});
}
}
@@ -522,7 +522,7 @@ namespace ARMeilleure.Instructions
{
EmitVectorUnaryOpF(context, (op1) =>
{
- return EmitUnaryMathCall(context, nameof(Math.Abs), op1);
+ return EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1);
});
}
}
@@ -2246,7 +2246,7 @@ namespace ARMeilleure.Instructions
{
EmitScalarUnaryOpF(context, (op1) =>
{
- return EmitUnaryMathCall(context, nameof(Math.Floor), op1);
+ return EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1);
});
}
}
@@ -2265,7 +2265,7 @@ namespace ARMeilleure.Instructions
{
EmitVectorUnaryOpF(context, (op1) =>
{
- return EmitUnaryMathCall(context, nameof(Math.Floor), op1);
+ return EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1);
});
}
}
@@ -2322,7 +2322,7 @@ namespace ARMeilleure.Instructions
{
EmitScalarUnaryOpF(context, (op1) =>
{
- return EmitUnaryMathCall(context, nameof(Math.Ceiling), op1);
+ return EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1);
});
}
}
@@ -2341,7 +2341,7 @@ namespace ARMeilleure.Instructions
{
EmitVectorUnaryOpF(context, (op1) =>
{
- return EmitUnaryMathCall(context, nameof(Math.Ceiling), op1);
+ return EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1);
});
}
}
@@ -2390,7 +2390,7 @@ namespace ARMeilleure.Instructions
{
EmitScalarUnaryOpF(context, (op1) =>
{
- return EmitUnaryMathCall(context, nameof(Math.Truncate), op1);
+ return EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1);
});
}
}
@@ -2409,7 +2409,7 @@ namespace ARMeilleure.Instructions
{
EmitVectorUnaryOpF(context, (op1) =>
{
- return EmitUnaryMathCall(context, nameof(Math.Truncate), op1);
+ return EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1);
});
}
}
diff --git a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs
index c807fc858..284f3f576 100644
--- a/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs
+++ b/src/ARMeilleure/Instructions/InstEmitSimdArithmetic32.cs
@@ -43,7 +43,7 @@ namespace ARMeilleure.Instructions
}
else
{
- EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Abs), op1));
+ EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1));
}
}
@@ -66,7 +66,7 @@ namespace ARMeilleure.Instructions
}
else
{
- EmitVectorUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Abs), op1));
+ EmitVectorUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Abs), op1));
}
}
else
diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs b/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs
index aab677869..8fcb06286 100644
--- a/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs
+++ b/src/ARMeilleure/Instructions/InstEmitSimdCmp.cs
@@ -726,8 +726,8 @@ namespace ARMeilleure.Instructions
if (absolute)
{
- ne = EmitUnaryMathCall(context, nameof(Math.Abs), ne);
- me = EmitUnaryMathCall(context, nameof(Math.Abs), me);
+ ne = EmitUnaryMathCall(context, nameof(MathHelper.Abs), ne);
+ me = EmitUnaryMathCall(context, nameof(MathHelper.Abs), me);
}
Operand e = EmitSoftFloatCall(context, name, ne, me);
diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs b/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs
index 3363a7c77..a5d4744f7 100644
--- a/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs
+++ b/src/ARMeilleure/Instructions/InstEmitSimdCvt.cs
@@ -333,7 +333,7 @@ namespace ARMeilleure.Instructions
}
else
{
- EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1));
+ EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1));
}
}
@@ -349,7 +349,7 @@ namespace ARMeilleure.Instructions
}
else
{
- EmitFcvt(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1), signed: true, scalar: false);
+ EmitFcvt(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1), signed: true, scalar: false);
}
}
@@ -365,7 +365,7 @@ namespace ARMeilleure.Instructions
}
else
{
- EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Floor), op1));
+ EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), op1));
}
}
@@ -538,7 +538,7 @@ namespace ARMeilleure.Instructions
}
else
{
- EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Ceiling), op1));
+ EmitFcvt_s_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1));
}
}
@@ -554,7 +554,7 @@ namespace ARMeilleure.Instructions
}
else
{
- EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Ceiling), op1));
+ EmitFcvt_u_Gp(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op1));
}
}
diff --git a/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs b/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs
index 8eef6b14d..216726df9 100644
--- a/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs
+++ b/src/ARMeilleure/Instructions/InstEmitSimdCvt32.cs
@@ -357,10 +357,10 @@ namespace ARMeilleure.Instructions
toConvert = EmitRoundMathCall(context, MidpointRounding.ToEven, toConvert);
break;
case 0b10: // Towards positive infinity
- toConvert = EmitUnaryMathCall(context, nameof(Math.Ceiling), toConvert);
+ toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), toConvert);
break;
case 0b11: // Towards negative infinity
- toConvert = EmitUnaryMathCall(context, nameof(Math.Floor), toConvert);
+ toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Floor), toConvert);
break;
}
@@ -494,10 +494,10 @@ namespace ARMeilleure.Instructions
toConvert = EmitRoundMathCall(context, MidpointRounding.ToEven, toConvert);
break;
case 0b10: // Towards positive infinity
- toConvert = EmitUnaryMathCall(context, nameof(Math.Ceiling), toConvert);
+ toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), toConvert);
break;
case 0b11: // Towards negative infinity
- toConvert = EmitUnaryMathCall(context, nameof(Math.Floor), toConvert);
+ toConvert = EmitUnaryMathCall(context, nameof(MathHelper.Floor), toConvert);
break;
}
@@ -534,7 +534,7 @@ namespace ARMeilleure.Instructions
}
else
{
- EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(Math.Floor), m));
+ EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(MathHelper.Floor), m));
}
}
@@ -574,7 +574,7 @@ namespace ARMeilleure.Instructions
}
else
{
- EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(Math.Ceiling), m));
+ EmitVectorUnaryOpF32(context, (m) => EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), m));
}
}
@@ -613,7 +613,7 @@ namespace ARMeilleure.Instructions
}
else
{
- EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Truncate), op1));
+ EmitScalarUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op1));
}
}
diff --git a/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs b/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs
index abd0d9acc..634e5c18b 100644
--- a/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs
+++ b/src/ARMeilleure/Instructions/InstEmitSimdHelper.cs
@@ -460,8 +460,8 @@ namespace ARMeilleure.Instructions
IOpCodeSimd op = (IOpCodeSimd)context.CurrOp;
MethodInfo info = (op.Size & 1) == 0
- ? typeof(MathF).GetMethod(name, new Type[] { typeof(float) })
- : typeof(Math).GetMethod(name, new Type[] { typeof(double) });
+ ? typeof(MathHelperF).GetMethod(name, new Type[] { typeof(float) })
+ : typeof(MathHelper).GetMethod(name, new Type[] { typeof(double) });
return context.Call(info, n);
}
@@ -470,11 +470,11 @@ namespace ARMeilleure.Instructions
{
IOpCodeSimd op = (IOpCodeSimd)context.CurrOp;
- string name = nameof(Math.Round);
+ string name = nameof(MathHelper.Round);
MethodInfo info = (op.Size & 1) == 0
- ? typeof(MathF).GetMethod(name, new Type[] { typeof(float), typeof(MidpointRounding) })
- : typeof(Math).GetMethod(name, new Type[] { typeof(double), typeof(MidpointRounding) });
+ ? typeof(MathHelperF).GetMethod(name, new Type[] { typeof(float), typeof(int) })
+ : typeof(MathHelper).GetMethod(name, new Type[] { typeof(double), typeof(int) });
return context.Call(info, n, Const((int)roundMode));
}
@@ -510,16 +510,16 @@ namespace ARMeilleure.Instructions
context.MarkLabel(lbl1);
context.BranchIf(lbl2, rMode, rP, Comparison.NotEqual);
- context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Ceiling), op));
+ context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Ceiling), op));
context.Branch(lblEnd);
context.MarkLabel(lbl2);
context.BranchIf(lbl3, rMode, rM, Comparison.NotEqual);
- context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Floor), op));
+ context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Floor), op));
context.Branch(lblEnd);
context.MarkLabel(lbl3);
- context.Copy(res, EmitUnaryMathCall(context, nameof(Math.Truncate), op));
+ context.Copy(res, EmitUnaryMathCall(context, nameof(MathHelper.Truncate), op));
context.Branch(lblEnd);
context.MarkLabel(lblEnd);
diff --git a/src/ARMeilleure/Instructions/MathHelper.cs b/src/ARMeilleure/Instructions/MathHelper.cs
new file mode 100644
index 000000000..a11ce9d2e
--- /dev/null
+++ b/src/ARMeilleure/Instructions/MathHelper.cs
@@ -0,0 +1,71 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace ARMeilleure.Instructions
+{
+ static class MathHelper
+ {
+ [UnmanagedCallersOnly]
+ public static double Abs(double value)
+ {
+ return Math.Abs(value);
+ }
+
+ [UnmanagedCallersOnly]
+ public static double Ceiling(double value)
+ {
+ return Math.Ceiling(value);
+ }
+
+ [UnmanagedCallersOnly]
+ public static double Floor(double value)
+ {
+ return Math.Floor(value);
+ }
+
+ [UnmanagedCallersOnly]
+ public static double Round(double value, int mode)
+ {
+ return Math.Round(value, (MidpointRounding)mode);
+ }
+
+ [UnmanagedCallersOnly]
+ public static double Truncate(double value)
+ {
+ return Math.Truncate(value);
+ }
+ }
+
+ static class MathHelperF
+ {
+ [UnmanagedCallersOnly]
+ public static float Abs(float value)
+ {
+ return MathF.Abs(value);
+ }
+
+ [UnmanagedCallersOnly]
+ public static float Ceiling(float value)
+ {
+ return MathF.Ceiling(value);
+ }
+
+ [UnmanagedCallersOnly]
+ public static float Floor(float value)
+ {
+ return MathF.Floor(value);
+ }
+
+ [UnmanagedCallersOnly]
+ public static float Round(float value, int mode)
+ {
+ return MathF.Round(value, (MidpointRounding)mode);
+ }
+
+ [UnmanagedCallersOnly]
+ public static float Truncate(float value)
+ {
+ return MathF.Truncate(value);
+ }
+ }
+}
diff --git a/src/ARMeilleure/Instructions/NativeInterface.cs b/src/ARMeilleure/Instructions/NativeInterface.cs
index 0cd3754f7..9d6279613 100644
--- a/src/ARMeilleure/Instructions/NativeInterface.cs
+++ b/src/ARMeilleure/Instructions/NativeInterface.cs
@@ -2,6 +2,7 @@ using ARMeilleure.Memory;
using ARMeilleure.State;
using ARMeilleure.Translation;
using System;
+using System.Runtime.InteropServices;
namespace ARMeilleure.Instructions
{
@@ -34,6 +35,7 @@ namespace ARMeilleure.Instructions
Context = null;
}
+ [UnmanagedCallersOnly]
public static void Break(ulong address, int imm)
{
Statistics.PauseTimer();
@@ -43,6 +45,7 @@ namespace ARMeilleure.Instructions
Statistics.ResumeTimer();
}
+ [UnmanagedCallersOnly]
public static void SupervisorCall(ulong address, int imm)
{
Statistics.PauseTimer();
@@ -52,6 +55,7 @@ namespace ARMeilleure.Instructions
Statistics.ResumeTimer();
}
+ [UnmanagedCallersOnly]
public static void Undefined(ulong address, int opCode)
{
Statistics.PauseTimer();
@@ -62,26 +66,31 @@ namespace ARMeilleure.Instructions
}
#region "System registers"
+ [UnmanagedCallersOnly]
public static ulong GetCtrEl0()
{
return GetContext().CtrEl0;
}
+ [UnmanagedCallersOnly]
public static ulong GetDczidEl0()
{
return GetContext().DczidEl0;
}
+ [UnmanagedCallersOnly]
public static ulong GetCntfrqEl0()
{
return GetContext().CntfrqEl0;
}
+ [UnmanagedCallersOnly]
public static ulong GetCntpctEl0()
{
return GetContext().CntpctEl0;
}
+ [UnmanagedCallersOnly]
public static ulong GetCntvctEl0()
{
return GetContext().CntvctEl0;
@@ -89,26 +98,31 @@ namespace ARMeilleure.Instructions
#endregion
#region "Read"
+ [UnmanagedCallersOnly]
public static byte ReadByte(ulong address)
{
return GetMemoryManager().ReadGuest(address);
}
+ [UnmanagedCallersOnly]
public static ushort ReadUInt16(ulong address)
{
return GetMemoryManager().ReadGuest(address);
}
+ [UnmanagedCallersOnly]
public static uint ReadUInt32(ulong address)
{
return GetMemoryManager().ReadGuest(address);
}
+ [UnmanagedCallersOnly]
public static ulong ReadUInt64(ulong address)
{
return GetMemoryManager().ReadGuest(address);
}
+ [UnmanagedCallersOnly]
public static V128 ReadVector128(ulong address)
{
return GetMemoryManager().ReadGuest(address);
@@ -116,47 +130,56 @@ namespace ARMeilleure.Instructions
#endregion
#region "Write"
+ [UnmanagedCallersOnly]
public static void WriteByte(ulong address, byte value)
{
GetMemoryManager().WriteGuest(address, value);
}
+ [UnmanagedCallersOnly]
public static void WriteUInt16(ulong address, ushort value)
{
GetMemoryManager().WriteGuest(address, value);
}
+ [UnmanagedCallersOnly]
public static void WriteUInt32(ulong address, uint value)
{
GetMemoryManager().WriteGuest(address, value);
}
+ [UnmanagedCallersOnly]
public static void WriteUInt64(ulong address, ulong value)
{
GetMemoryManager().WriteGuest(address, value);
}
+ [UnmanagedCallersOnly]
public static void WriteVector128(ulong address, V128 value)
{
GetMemoryManager().WriteGuest(address, value);
}
#endregion
+ [UnmanagedCallersOnly]
public static void EnqueueForRejit(ulong address)
{
Context.Translator.EnqueueForRejit(address, GetContext().ExecutionMode);
}
- public static void SignalMemoryTracking(ulong address, ulong size, bool write)
+ [UnmanagedCallersOnly]
+ public static void SignalMemoryTracking(ulong address, ulong size, byte write)
{
- GetMemoryManager().SignalMemoryTracking(address, size, write);
+ GetMemoryManager().SignalMemoryTracking(address, size, write == 1);
}
+ [UnmanagedCallersOnly]
public static void ThrowInvalidMemoryAccess(ulong address)
{
throw new InvalidAccessException(address);
}
+ [UnmanagedCallersOnly]
public static ulong GetFunctionAddress(ulong address)
{
TranslatedFunction function = Context.Translator.GetOrTranslate(address, GetContext().ExecutionMode);
@@ -164,12 +187,14 @@ namespace ARMeilleure.Instructions
return (ulong)function.FuncPointer.ToInt64();
}
+ [UnmanagedCallersOnly]
public static void InvalidateCacheLine(ulong address)
{
Context.Translator.InvalidateJitCacheRegion(address, InstEmit.DczSizeInBytes);
}
- public static bool CheckSynchronization()
+ [UnmanagedCallersOnly]
+ public static byte CheckSynchronization()
{
Statistics.PauseTimer();
@@ -179,7 +204,7 @@ namespace ARMeilleure.Instructions
Statistics.ResumeTimer();
- return context.Running;
+ return (byte)(context.Running ? 1 : 0);
}
public static ExecutionContext GetContext()
diff --git a/src/ARMeilleure/Instructions/SoftFallback.cs b/src/ARMeilleure/Instructions/SoftFallback.cs
index c4fe677bf..178be6f79 100644
--- a/src/ARMeilleure/Instructions/SoftFallback.cs
+++ b/src/ARMeilleure/Instructions/SoftFallback.cs
@@ -1,11 +1,13 @@
using ARMeilleure.State;
using System;
+using System.Runtime.InteropServices;
namespace ARMeilleure.Instructions
{
static class SoftFallback
{
#region "ShrImm64"
+ [UnmanagedCallersOnly]
public static long SignedShrImm64(long value, long roundConst, int shift)
{
if (roundConst == 0L)
@@ -48,6 +50,7 @@ namespace ARMeilleure.Instructions
}
}
+ [UnmanagedCallersOnly]
public static ulong UnsignedShrImm64(ulong value, long roundConst, int shift)
{
if (roundConst == 0L)
@@ -92,6 +95,7 @@ namespace ARMeilleure.Instructions
#endregion
#region "Saturation"
+ [UnmanagedCallersOnly]
public static int SatF32ToS32(float value)
{
if (float.IsNaN(value))
@@ -103,6 +107,7 @@ namespace ARMeilleure.Instructions
value <= int.MinValue ? int.MinValue : (int)value;
}
+ [UnmanagedCallersOnly]
public static long SatF32ToS64(float value)
{
if (float.IsNaN(value))
@@ -114,6 +119,7 @@ namespace ARMeilleure.Instructions
value <= long.MinValue ? long.MinValue : (long)value;
}
+ [UnmanagedCallersOnly]
public static uint SatF32ToU32(float value)
{
if (float.IsNaN(value))
@@ -125,6 +131,7 @@ namespace ARMeilleure.Instructions
value <= uint.MinValue ? uint.MinValue : (uint)value;
}
+ [UnmanagedCallersOnly]
public static ulong SatF32ToU64(float value)
{
if (float.IsNaN(value))
@@ -136,6 +143,7 @@ namespace ARMeilleure.Instructions
value <= ulong.MinValue ? ulong.MinValue : (ulong)value;
}
+ [UnmanagedCallersOnly]
public static int SatF64ToS32(double value)
{
if (double.IsNaN(value))
@@ -147,6 +155,7 @@ namespace ARMeilleure.Instructions
value <= int.MinValue ? int.MinValue : (int)value;
}
+ [UnmanagedCallersOnly]
public static long SatF64ToS64(double value)
{
if (double.IsNaN(value))
@@ -158,6 +167,7 @@ namespace ARMeilleure.Instructions
value <= long.MinValue ? long.MinValue : (long)value;
}
+ [UnmanagedCallersOnly]
public static uint SatF64ToU32(double value)
{
if (double.IsNaN(value))
@@ -169,6 +179,7 @@ namespace ARMeilleure.Instructions
value <= uint.MinValue ? uint.MinValue : (uint)value;
}
+ [UnmanagedCallersOnly]
public static ulong SatF64ToU64(double value)
{
if (double.IsNaN(value))
@@ -182,6 +193,7 @@ namespace ARMeilleure.Instructions
#endregion
#region "Count"
+ [UnmanagedCallersOnly]
public static ulong CountLeadingSigns(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.).
{
value ^= value >> 1;
@@ -201,6 +213,7 @@ namespace ARMeilleure.Instructions
private static ReadOnlySpan ClzNibbleTbl => new byte[] { 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
+ [UnmanagedCallersOnly]
public static ulong CountLeadingZeros(ulong value, int size) // size is 8, 16, 32 or 64 (SIMD&FP or Base Inst.).
{
if (value == 0ul)
@@ -224,47 +237,55 @@ namespace ARMeilleure.Instructions
#endregion
#region "Table"
+ [UnmanagedCallersOnly]
public static V128 Tbl1(V128 vector, int bytes, V128 tb0)
{
return TblOrTbx(default, vector, bytes, tb0);
}
+ [UnmanagedCallersOnly]
public static V128 Tbl2(V128 vector, int bytes, V128 tb0, V128 tb1)
{
return TblOrTbx(default, vector, bytes, tb0, tb1);
}
+ [UnmanagedCallersOnly]
public static V128 Tbl3(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2)
{
return TblOrTbx(default, vector, bytes, tb0, tb1, tb2);
}
+ [UnmanagedCallersOnly]
public static V128 Tbl4(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3)
{
return TblOrTbx(default, vector, bytes, tb0, tb1, tb2, tb3);
}
+ [UnmanagedCallersOnly]
public static V128 Tbx1(V128 dest, V128 vector, int bytes, V128 tb0)
{
return TblOrTbx(dest, vector, bytes, tb0);
}
+ [UnmanagedCallersOnly]
public static V128 Tbx2(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1)
{
return TblOrTbx(dest, vector, bytes, tb0, tb1);
}
+ [UnmanagedCallersOnly]
public static V128 Tbx3(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2)
{
return TblOrTbx(dest, vector, bytes, tb0, tb1, tb2);
}
+ [UnmanagedCallersOnly]
public static V128 Tbx4(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3)
{
return TblOrTbx(dest, vector, bytes, tb0, tb1, tb2, tb3);
}
- private static V128 TblOrTbx(V128 dest, V128 vector, int bytes, params V128[] tb)
+ private static V128 TblOrTbx(V128 dest, V128 vector, int bytes, params ReadOnlySpan tb)
{
byte[] res = new byte[16];
@@ -300,14 +321,22 @@ namespace ARMeilleure.Instructions
private const uint Crc32RevPoly = 0xedb88320;
private const uint Crc32cRevPoly = 0x82f63b78;
+ [UnmanagedCallersOnly]
public static uint Crc32b(uint crc, byte value) => Crc32(crc, Crc32RevPoly, value);
+ [UnmanagedCallersOnly]
public static uint Crc32h(uint crc, ushort value) => Crc32h(crc, Crc32RevPoly, value);
+ [UnmanagedCallersOnly]
public static uint Crc32w(uint crc, uint value) => Crc32w(crc, Crc32RevPoly, value);
+ [UnmanagedCallersOnly]
public static uint Crc32x(uint crc, ulong value) => Crc32x(crc, Crc32RevPoly, value);
+ [UnmanagedCallersOnly]
public static uint Crc32cb(uint crc, byte value) => Crc32(crc, Crc32cRevPoly, value);
+ [UnmanagedCallersOnly]
public static uint Crc32ch(uint crc, ushort value) => Crc32h(crc, Crc32cRevPoly, value);
+ [UnmanagedCallersOnly]
public static uint Crc32cw(uint crc, uint value) => Crc32w(crc, Crc32cRevPoly, value);
+ [UnmanagedCallersOnly]
public static uint Crc32cx(uint crc, ulong value) => Crc32x(crc, Crc32cRevPoly, value);
private static uint Crc32h(uint crc, uint poly, ushort val)
@@ -358,21 +387,25 @@ namespace ARMeilleure.Instructions
#endregion
#region "Aes"
+ [UnmanagedCallersOnly]
public static V128 Decrypt(V128 value, V128 roundKey)
{
return CryptoHelper.AesInvSubBytes(CryptoHelper.AesInvShiftRows(value ^ roundKey));
}
+ [UnmanagedCallersOnly]
public static V128 Encrypt(V128 value, V128 roundKey)
{
return CryptoHelper.AesSubBytes(CryptoHelper.AesShiftRows(value ^ roundKey));
}
+ [UnmanagedCallersOnly]
public static V128 InverseMixColumns(V128 value)
{
return CryptoHelper.AesInvMixColumns(value);
}
+ [UnmanagedCallersOnly]
public static V128 MixColumns(V128 value)
{
return CryptoHelper.AesMixColumns(value);
@@ -380,6 +413,7 @@ namespace ARMeilleure.Instructions
#endregion
#region "Sha1"
+ [UnmanagedCallersOnly]
public static V128 HashChoose(V128 hash_abcd, uint hash_e, V128 wk)
{
for (int e = 0; e <= 3; e++)
@@ -400,11 +434,13 @@ namespace ARMeilleure.Instructions
return hash_abcd;
}
+ [UnmanagedCallersOnly]
public static uint FixedRotate(uint hash_e)
{
return hash_e.Rol(30);
}
+ [UnmanagedCallersOnly]
public static V128 HashMajority(V128 hash_abcd, uint hash_e, V128 wk)
{
for (int e = 0; e <= 3; e++)
@@ -425,6 +461,7 @@ namespace ARMeilleure.Instructions
return hash_abcd;
}
+ [UnmanagedCallersOnly]
public static V128 HashParity(V128 hash_abcd, uint hash_e, V128 wk)
{
for (int e = 0; e <= 3; e++)
@@ -445,6 +482,7 @@ namespace ARMeilleure.Instructions
return hash_abcd;
}
+ [UnmanagedCallersOnly]
public static V128 Sha1SchedulePart1(V128 w0_3, V128 w4_7, V128 w8_11)
{
ulong t2 = w4_7.Extract(0);
@@ -455,6 +493,7 @@ namespace ARMeilleure.Instructions
return result ^ (w0_3 ^ w8_11);
}
+ [UnmanagedCallersOnly]
public static V128 Sha1SchedulePart2(V128 tw0_3, V128 w12_15)
{
V128 t = tw0_3 ^ (w12_15 >> 32);
@@ -499,16 +538,19 @@ namespace ARMeilleure.Instructions
#endregion
#region "Sha256"
+ [UnmanagedCallersOnly]
public static V128 HashLower(V128 hash_abcd, V128 hash_efgh, V128 wk)
{
return Sha256Hash(hash_abcd, hash_efgh, wk, part1: true);
}
+ [UnmanagedCallersOnly]
public static V128 HashUpper(V128 hash_abcd, V128 hash_efgh, V128 wk)
{
return Sha256Hash(hash_abcd, hash_efgh, wk, part1: false);
}
+ [UnmanagedCallersOnly]
public static V128 Sha256SchedulePart1(V128 w0_3, V128 w4_7)
{
V128 result = new();
@@ -527,6 +569,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static V128 Sha256SchedulePart2(V128 w0_3, V128 w8_11, V128 w12_15)
{
V128 result = new();
@@ -628,6 +671,7 @@ namespace ARMeilleure.Instructions
}
#endregion
+ [UnmanagedCallersOnly]
public static V128 PolynomialMult64_128(ulong op1, ulong op2)
{
V128 result = V128.Zero;
diff --git a/src/ARMeilleure/Instructions/SoftFloat.cs b/src/ARMeilleure/Instructions/SoftFloat.cs
index a67349e6e..7895ca1dc 100644
--- a/src/ARMeilleure/Instructions/SoftFloat.cs
+++ b/src/ARMeilleure/Instructions/SoftFloat.cs
@@ -1,6 +1,7 @@
using ARMeilleure.State;
using System;
using System.Diagnostics;
+using System.Runtime.InteropServices;
namespace ARMeilleure.Instructions
{
@@ -312,6 +313,7 @@ namespace ARMeilleure.Instructions
static class SoftFloat16_32
{
+ [UnmanagedCallersOnly]
public static float FPConvert(ushort valueBits)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -487,6 +489,7 @@ namespace ARMeilleure.Instructions
static class SoftFloat16_64
{
+ [UnmanagedCallersOnly]
public static double FPConvert(ushort valueBits)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -662,6 +665,7 @@ namespace ARMeilleure.Instructions
static class SoftFloat32_16
{
+ [UnmanagedCallersOnly]
public static ushort FPConvert(float value)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -781,12 +785,19 @@ namespace ARMeilleure.Instructions
static class SoftFloat32
{
+ [UnmanagedCallersOnly]
public static float FPAdd(float value1, float value2)
{
- return FPAddFpscr(value1, value2, false);
+ return FPAddFpscrImpl(value1, value2, false);
}
- public static float FPAddFpscr(float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPAddFpscr(float value1, float value2, byte standardFpscr)
+ {
+ return FPAddFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static float FPAddFpscrImpl(float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -837,7 +848,8 @@ namespace ARMeilleure.Instructions
return result;
}
- public static int FPCompare(float value1, float value2, bool signalNaNs)
+ [UnmanagedCallersOnly]
+ public static int FPCompare(float value1, float value2, byte signalNaNs)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = context.Fpcr;
@@ -851,7 +863,7 @@ namespace ARMeilleure.Instructions
{
result = 0b0011;
- if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs)
+ if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs == 1)
{
SoftFloat.FPProcessException(FPException.InvalidOp, context, fpcr);
}
@@ -875,12 +887,13 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPCompareEQ(float value1, float value2)
{
- return FPCompareEQFpscr(value1, value2, false);
+ return FPCompareEQFpscrImpl(value1, value2, false);
}
- public static float FPCompareEQFpscr(float value1, float value2, bool standardFpscr)
+ private static float FPCompareEQFpscrImpl(float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -907,12 +920,25 @@ namespace ARMeilleure.Instructions
return result;
}
- public static float FPCompareGE(float value1, float value2)
+ [UnmanagedCallersOnly]
+ public static float FPCompareEQFpscr(float value1, float value2, byte standardFpscr)
{
- return FPCompareGEFpscr(value1, value2, false);
+ return FPCompareEQFpscrImpl(value1, value2, standardFpscr == 1);
}
- public static float FPCompareGEFpscr(float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPCompareGE(float value1, float value2)
+ {
+ return FPCompareGEFpscrImpl(value1, value2, false);
+ }
+
+ [UnmanagedCallersOnly]
+ public static float FPCompareGEFpscr(float value1, float value2, byte standardFpscr)
+ {
+ return FPCompareGEFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static float FPCompareGEFpscrImpl(float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -936,12 +962,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPCompareGT(float value1, float value2)
{
- return FPCompareGTFpscr(value1, value2, false);
+ return FPCompareGTFpscrImpl(value1, value2, false);
}
- public static float FPCompareGTFpscr(float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPCompareGTFpscr(float value1, float value2, byte standardFpscr)
+ {
+ return FPCompareGTFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static float FPCompareGTFpscrImpl(float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -965,26 +998,31 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPCompareLE(float value1, float value2)
{
- return FPCompareGE(value2, value1);
+ return FPCompareGEFpscrImpl(value2, value1, false);
}
+ [UnmanagedCallersOnly]
public static float FPCompareLT(float value1, float value2)
{
- return FPCompareGT(value2, value1);
+ return FPCompareGTFpscrImpl(value2, value1, false);
}
- public static float FPCompareLEFpscr(float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPCompareLEFpscr(float value1, float value2, byte standardFpscr)
{
- return FPCompareGEFpscr(value2, value1, standardFpscr);
+ return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1);
}
- public static float FPCompareLTFpscr(float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPCompareLTFpscr(float value1, float value2, byte standardFpscr)
{
- return FPCompareGTFpscr(value2, value1, standardFpscr);
+ return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1);
}
+ [UnmanagedCallersOnly]
public static float FPDiv(float value1, float value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -1037,12 +1075,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPMax(float value1, float value2)
{
- return FPMaxFpscr(value1, value2, false);
+ return FPMaxFpscrImpl(value1, value2, false);
}
- public static float FPMaxFpscr(float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPMaxFpscr(float value1, float value2, byte standardFpscr)
+ {
+ return FPMaxFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static float FPMaxFpscrImpl(float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -1103,12 +1148,13 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPMaxNum(float value1, float value2)
{
- return FPMaxNumFpscr(value1, value2, false);
+ return FPMaxNumFpscrImpl(value1, value2, false);
}
- public static float FPMaxNumFpscr(float value1, float value2, bool standardFpscr)
+ private static float FPMaxNumFpscrImpl(float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -1125,15 +1171,28 @@ namespace ARMeilleure.Instructions
value2 = FPInfinity(true);
}
- return FPMaxFpscr(value1, value2, standardFpscr);
+ return FPMaxFpscrImpl(value1, value2, standardFpscr);
}
+ [UnmanagedCallersOnly]
+ public static float FPMaxNumFpscr(float value1, float value2, byte standardFpscr)
+ {
+ return FPMaxNumFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ [UnmanagedCallersOnly]
public static float FPMin(float value1, float value2)
{
- return FPMinFpscr(value1, value2, false);
+ return FPMinFpscrImpl(value1, value2, false);
}
- public static float FPMinFpscr(float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPMinFpscr(float value1, float value2, byte standardFpscr)
+ {
+ return FPMinFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static float FPMinFpscrImpl(float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -1194,12 +1253,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPMinNum(float value1, float value2)
{
- return FPMinNumFpscr(value1, value2, false);
+ return FPMinNumFpscrImpl(value1, value2, false);
}
- public static float FPMinNumFpscr(float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPMinNumFpscr(float value1, float value2, byte standardFpscr)
+ {
+ return FPMinNumFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static float FPMinNumFpscrImpl(float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -1216,15 +1282,22 @@ namespace ARMeilleure.Instructions
value2 = FPInfinity(false);
}
- return FPMinFpscr(value1, value2, standardFpscr);
+ return FPMinFpscrImpl(value1, value2, standardFpscr);
}
+ [UnmanagedCallersOnly]
public static float FPMul(float value1, float value2)
{
- return FPMulFpscr(value1, value2, false);
+ return FPMulFpscrImpl(value1, value2, false);
}
- public static float FPMulFpscr(float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPMulFpscr(float value1, float value2, byte standardFpscr)
+ {
+ return FPMulFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static float FPMulFpscrImpl(float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -1271,12 +1344,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPMulAdd(float valueA, float value1, float value2)
{
- return FPMulAddFpscr(valueA, value1, value2, false);
+ return FPMulAddFpscrImpl(valueA, value1, value2, false);
}
- public static float FPMulAddFpscr(float valueA, float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPMulAddFpscr(float valueA, float value1, float value2, byte standardFpscr)
+ {
+ return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1);
+ }
+
+ private static float FPMulAddFpscrImpl(float valueA, float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -1342,20 +1422,23 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPMulSub(float valueA, float value1, float value2)
{
value1 = value1.FPNeg();
- return FPMulAdd(valueA, value1, value2);
+ return FPMulAddFpscrImpl(valueA, value1, value2, false);
}
- public static float FPMulSubFpscr(float valueA, float value1, float value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPMulSubFpscr(float valueA, float value1, float value2, byte standardFpscr)
{
value1 = value1.FPNeg();
- return FPMulAddFpscr(valueA, value1, value2, standardFpscr);
+ return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1);
}
+ [UnmanagedCallersOnly]
public static float FPMulX(float value1, float value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -1401,27 +1484,36 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPNegMulAdd(float valueA, float value1, float value2)
{
valueA = valueA.FPNeg();
value1 = value1.FPNeg();
- return FPMulAdd(valueA, value1, value2);
+ return FPMulAddFpscrImpl(valueA, value1, value2, false);
}
+ [UnmanagedCallersOnly]
public static float FPNegMulSub(float valueA, float value1, float value2)
{
valueA = valueA.FPNeg();
- return FPMulAdd(valueA, value1, value2);
+ return FPMulAddFpscrImpl(valueA, value1, value2, false);
}
+ [UnmanagedCallersOnly]
public static float FPRecipEstimate(float value)
{
- return FPRecipEstimateFpscr(value, false);
+ return FPRecipEstimateFpscrImpl(value, false);
}
- public static float FPRecipEstimateFpscr(float value, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPRecipEstimateFpscr(float value, byte standardFpscr)
+ {
+ return FPRecipEstimateFpscrImpl(value, standardFpscr == 1);
+ }
+
+ private static float FPRecipEstimateFpscrImpl(float value, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -1508,6 +1600,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPRecipStep(float value1, float value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -1533,15 +1626,16 @@ namespace ARMeilleure.Instructions
}
else
{
- product = FPMulFpscr(value1, value2, true);
+ product = FPMulFpscrImpl(value1, value2, true);
}
- result = FPSubFpscr(FPTwo(false), product, true);
+ result = FPSubFpscrImpl(FPTwo(false), product, true);
}
return result;
}
+ [UnmanagedCallersOnly]
public static float FPRecipStepFused(float value1, float value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -1585,6 +1679,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPRecpX(float value)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -1610,12 +1705,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPRSqrtEstimate(float value)
{
- return FPRSqrtEstimateFpscr(value, false);
+ return FPRSqrtEstimateFpscrImpl(value, false);
}
- public static float FPRSqrtEstimateFpscr(float value, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static float FPRSqrtEstimateFpscr(float value, byte standardFpscr)
+ {
+ return FPRSqrtEstimateFpscrImpl(value, standardFpscr == 1);
+ }
+
+ private static float FPRSqrtEstimateFpscrImpl(float value, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -1729,6 +1831,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPRSqrtStep(float value1, float value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -1754,7 +1857,7 @@ namespace ARMeilleure.Instructions
}
else
{
- product = FPMulFpscr(value1, value2, true);
+ product = FPMulFpscrImpl(value1, value2, true);
}
result = FPHalvedSub(FPThree(false), product, context, fpcr);
@@ -1763,6 +1866,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPRSqrtStepFused(float value1, float value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -1806,6 +1910,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPSqrt(float value)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -1848,12 +1953,13 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static float FPSub(float value1, float value2)
{
- return FPSubFpscr(value1, value2, false);
+ return FPSubFpscrImpl(value1, value2, false);
}
- public static float FPSubFpscr(float value1, float value2, bool standardFpscr)
+ private static float FPSubFpscrImpl(float value1, float value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2094,6 +2200,7 @@ namespace ARMeilleure.Instructions
static class SoftFloat64_16
{
+ [UnmanagedCallersOnly]
public static ushort FPConvert(double value)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -2213,12 +2320,19 @@ namespace ARMeilleure.Instructions
static class SoftFloat64
{
+ [UnmanagedCallersOnly]
public static double FPAdd(double value1, double value2)
{
- return FPAddFpscr(value1, value2, false);
+ return FPAddFpscrImpl(value1, value2, false);
}
- public static double FPAddFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPAddFpscr(double value1, double value2, byte standardFpscr)
+ {
+ return FPAddFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static double FPAddFpscrImpl(double value1, double value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2269,7 +2383,8 @@ namespace ARMeilleure.Instructions
return result;
}
- public static int FPCompare(double value1, double value2, bool signalNaNs)
+ [UnmanagedCallersOnly]
+ public static int FPCompare(double value1, double value2, byte signalNaNs)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = context.Fpcr;
@@ -2283,7 +2398,7 @@ namespace ARMeilleure.Instructions
{
result = 0b0011;
- if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs)
+ if (type1 == FPType.SNaN || type2 == FPType.SNaN || signalNaNs == 1)
{
SoftFloat.FPProcessException(FPException.InvalidOp, context, fpcr);
}
@@ -2307,12 +2422,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPCompareEQ(double value1, double value2)
{
- return FPCompareEQFpscr(value1, value2, false);
+ return FPCompareEQFpscrImpl(value1, value2, false);
}
- public static double FPCompareEQFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPCompareEQFpscr(double value1, double value2, byte standardFpscr)
+ {
+ return FPCompareEQFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static double FPCompareEQFpscrImpl(double value1, double value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2339,12 +2461,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPCompareGE(double value1, double value2)
{
- return FPCompareGEFpscr(value1, value2, false);
+ return FPCompareGEFpscrImpl(value1, value2, false);
}
- public static double FPCompareGEFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPCompareGEFpscr(double value1, double value2, byte standardFpscr)
+ {
+ return FPCompareGEFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static double FPCompareGEFpscrImpl(double value1, double value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2368,12 +2497,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPCompareGT(double value1, double value2)
{
- return FPCompareGTFpscr(value1, value2, false);
+ return FPCompareGTFpscrImpl(value1, value2, false);
}
- public static double FPCompareGTFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPCompareGTFpscr(double value1, double value2, byte standardFpscr)
+ {
+ return FPCompareGTFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static double FPCompareGTFpscrImpl(double value1, double value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2397,26 +2533,31 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPCompareLE(double value1, double value2)
{
- return FPCompareGE(value2, value1);
+ return FPCompareGEFpscrImpl(value2, value1, false);
}
+ [UnmanagedCallersOnly]
public static double FPCompareLT(double value1, double value2)
{
- return FPCompareGT(value2, value1);
+ return FPCompareGTFpscrImpl(value2, value1, false);
}
- public static double FPCompareLEFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPCompareLEFpscr(double value1, double value2, byte standardFpscr)
{
- return FPCompareGEFpscr(value2, value1, standardFpscr);
+ return FPCompareGEFpscrImpl(value2, value1, standardFpscr == 1);
}
- public static double FPCompareLTFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPCompareLTFpscr(double value1, double value2, byte standardFpscr)
{
- return FPCompareGTFpscr(value2, value1, standardFpscr);
+ return FPCompareGTFpscrImpl(value2, value1, standardFpscr == 1);
}
+ [UnmanagedCallersOnly]
public static double FPDiv(double value1, double value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -2469,12 +2610,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPMax(double value1, double value2)
{
- return FPMaxFpscr(value1, value2, false);
+ return FPMaxFpscrImpl(value1, value2, false);
}
- public static double FPMaxFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPMaxFpscr(double value1, double value2, byte standardFpscr)
+ {
+ return FPMaxFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static double FPMaxFpscrImpl(double value1, double value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2535,12 +2683,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPMaxNum(double value1, double value2)
{
- return FPMaxNumFpscr(value1, value2, false);
+ return FPMaxNumFpscrImpl(value1, value2, false);
}
- public static double FPMaxNumFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPMaxNumFpscr(double value1, double value2, byte standardFpscr)
+ {
+ return FPMaxNumFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static double FPMaxNumFpscrImpl(double value1, double value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2557,15 +2712,22 @@ namespace ARMeilleure.Instructions
value2 = FPInfinity(true);
}
- return FPMaxFpscr(value1, value2, standardFpscr);
+ return FPMaxFpscrImpl(value1, value2, standardFpscr);
}
+ [UnmanagedCallersOnly]
public static double FPMin(double value1, double value2)
{
- return FPMinFpscr(value1, value2, false);
+ return FPMinFpscrImpl(value1, value2, false);
}
- public static double FPMinFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPMinFpscr(double value1, double value2, byte standardFpscr)
+ {
+ return FPMinFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static double FPMinFpscrImpl(double value1, double value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2626,12 +2788,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPMinNum(double value1, double value2)
{
- return FPMinNumFpscr(value1, value2, false);
+ return FPMinNumFpscrImpl(value1, value2, false);
}
- public static double FPMinNumFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPMinNumFpscr(double value1, double value2, byte standardFpscr)
+ {
+ return FPMinNumFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static double FPMinNumFpscrImpl(double value1, double value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2648,15 +2817,22 @@ namespace ARMeilleure.Instructions
value2 = FPInfinity(false);
}
- return FPMinFpscr(value1, value2, standardFpscr);
+ return FPMinFpscrImpl(value1, value2, standardFpscr);
}
+ [UnmanagedCallersOnly]
public static double FPMul(double value1, double value2)
{
- return FPMulFpscr(value1, value2, false);
+ return FPMulFpscrImpl(value1, value2, false);
}
- public static double FPMulFpscr(double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPMulFpscr(double value1, double value2, byte standardFpscr)
+ {
+ return FPMulFpscrImpl(value1, value2, standardFpscr == 1);
+ }
+
+ private static double FPMulFpscrImpl(double value1, double value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2703,12 +2879,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPMulAdd(double valueA, double value1, double value2)
{
- return FPMulAddFpscr(valueA, value1, value2, false);
+ return FPMulAddFpscrImpl(valueA, value1, value2, false);
}
- public static double FPMulAddFpscr(double valueA, double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPMulAddFpscr(double valueA, double value1, double value2, byte standardFpscr)
+ {
+ return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1);
+ }
+
+ private static double FPMulAddFpscrImpl(double valueA, double value1, double value2, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2774,20 +2957,23 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPMulSub(double valueA, double value1, double value2)
{
value1 = value1.FPNeg();
- return FPMulAdd(valueA, value1, value2);
+ return FPMulAddFpscrImpl(valueA, value1, value2, false);
}
- public static double FPMulSubFpscr(double valueA, double value1, double value2, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPMulSubFpscr(double valueA, double value1, double value2, byte standardFpscr)
{
value1 = value1.FPNeg();
- return FPMulAddFpscr(valueA, value1, value2, standardFpscr);
+ return FPMulAddFpscrImpl(valueA, value1, value2, standardFpscr == 1);
}
+ [UnmanagedCallersOnly]
public static double FPMulX(double value1, double value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -2833,27 +3019,36 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPNegMulAdd(double valueA, double value1, double value2)
{
valueA = valueA.FPNeg();
value1 = value1.FPNeg();
- return FPMulAdd(valueA, value1, value2);
+ return FPMulAddFpscrImpl(valueA, value1, value2, false);
}
+ [UnmanagedCallersOnly]
public static double FPNegMulSub(double valueA, double value1, double value2)
{
valueA = valueA.FPNeg();
- return FPMulAdd(valueA, value1, value2);
+ return FPMulAddFpscrImpl(valueA, value1, value2, false);
}
+ [UnmanagedCallersOnly]
public static double FPRecipEstimate(double value)
{
- return FPRecipEstimateFpscr(value, false);
+ return FPRecipEstimateFpscrImpl(value, false);
}
- public static double FPRecipEstimateFpscr(double value, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPRecipEstimateFpscr(double value, byte standardFpscr)
+ {
+ return FPRecipEstimateFpscrImpl(value, standardFpscr == 1);
+ }
+
+ private static double FPRecipEstimateFpscrImpl(double value, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -2940,6 +3135,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPRecipStep(double value1, double value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -2965,7 +3161,7 @@ namespace ARMeilleure.Instructions
}
else
{
- product = FPMulFpscr(value1, value2, true);
+ product = FPMulFpscrImpl(value1, value2, true);
}
result = FPSubFpscr(FPTwo(false), product, true);
@@ -2974,6 +3170,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPRecipStepFused(double value1, double value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -3017,6 +3214,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPRecpX(double value)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -3042,12 +3240,19 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPRSqrtEstimate(double value)
{
- return FPRSqrtEstimateFpscr(value, false);
+ return FPRSqrtEstimateFpscrImpl(value, false);
}
- public static double FPRSqrtEstimateFpscr(double value, bool standardFpscr)
+ [UnmanagedCallersOnly]
+ public static double FPRSqrtEstimateFpscr(double value, byte standardFpscr)
+ {
+ return FPRSqrtEstimateFpscrImpl(value, standardFpscr == 1);
+ }
+
+ private static double FPRSqrtEstimateFpscrImpl(double value, bool standardFpscr)
{
ExecutionContext context = NativeInterface.GetContext();
FPCR fpcr = standardFpscr ? context.StandardFpcrValue : context.Fpcr;
@@ -3161,6 +3366,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPRSqrtStep(double value1, double value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -3186,7 +3392,7 @@ namespace ARMeilleure.Instructions
}
else
{
- product = FPMulFpscr(value1, value2, true);
+ product = FPMulFpscrImpl(value1, value2, true);
}
result = FPHalvedSub(FPThree(false), product, context, fpcr);
@@ -3195,6 +3401,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPRSqrtStepFused(double value1, double value2)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -3238,6 +3445,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPSqrt(double value)
{
ExecutionContext context = NativeInterface.GetContext();
@@ -3280,6 +3488,7 @@ namespace ARMeilleure.Instructions
return result;
}
+ [UnmanagedCallersOnly]
public static double FPSub(double value1, double value2)
{
return FPSubFpscr(value1, value2, false);
diff --git a/src/ARMeilleure/IntermediateRepresentation/Operation.cs b/src/ARMeilleure/IntermediateRepresentation/Operation.cs
index b0dc173af..4bc3a2e09 100644
--- a/src/ARMeilleure/IntermediateRepresentation/Operation.cs
+++ b/src/ARMeilleure/IntermediateRepresentation/Operation.cs
@@ -337,7 +337,7 @@ namespace ARMeilleure.IntermediateRepresentation
return result;
}
- public static Operation Operation(Intrinsic intrin, Operand dest, params Operand[] srcs)
+ public static Operation Operation(Intrinsic intrin, Operand dest, params ReadOnlySpan srcs)
{
Operation result = Make(Instruction.Extended, 0, srcs.Length);
diff --git a/src/ARMeilleure/Translation/Cache/JitCache.cs b/src/ARMeilleure/Translation/Cache/JitCache.cs
index cf13cd6cb..3bbec482c 100644
--- a/src/ARMeilleure/Translation/Cache/JitCache.cs
+++ b/src/ARMeilleure/Translation/Cache/JitCache.cs
@@ -8,6 +8,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
+using System.Threading;
namespace ARMeilleure.Translation.Cache
{
@@ -26,7 +27,7 @@ namespace ARMeilleure.Translation.Cache
private static readonly List _cacheEntries = new();
- private static readonly object _lock = new();
+ private static readonly Lock _lock = new();
private static bool _initialized;
[SupportedOSPlatform("windows")]
diff --git a/src/ARMeilleure/Translation/DelegateInfo.cs b/src/ARMeilleure/Translation/DelegateInfo.cs
index d3b535de1..64ee7bc9c 100644
--- a/src/ARMeilleure/Translation/DelegateInfo.cs
+++ b/src/ARMeilleure/Translation/DelegateInfo.cs
@@ -4,15 +4,9 @@ namespace ARMeilleure.Translation
{
class DelegateInfo
{
-#pragma warning disable IDE0052 // Remove unread private member
- private readonly Delegate _dlg; // Ensure that this delegate will not be garbage collected.
-#pragma warning restore IDE0052
-
- public nint FuncPtr { get; }
-
- public DelegateInfo(Delegate dlg, nint funcPtr)
+ public nint FuncPtr { get; private set; }
+ public DelegateInfo(nint funcPtr)
{
- _dlg = dlg;
FuncPtr = funcPtr;
}
}
diff --git a/src/ARMeilleure/Translation/Delegates.cs b/src/ARMeilleure/Translation/Delegates.cs
index d8c1cfd58..d4f46108c 100644
--- a/src/ARMeilleure/Translation/Delegates.cs
+++ b/src/ARMeilleure/Translation/Delegates.cs
@@ -1,9 +1,7 @@
using ARMeilleure.Instructions;
-using ARMeilleure.State;
using System;
using System.Collections.Generic;
using System.Reflection;
-using System.Runtime.InteropServices;
namespace ARMeilleure.Translation
{
@@ -34,21 +32,7 @@ namespace ARMeilleure.Translation
return _delegates.Values[index].FuncPtr; // O(1).
}
-
- public static nint GetDelegateFuncPtr(MethodInfo info)
- {
- ArgumentNullException.ThrowIfNull(info);
-
- string key = GetKey(info);
-
- if (!_delegates.TryGetValue(key, out DelegateInfo dlgInfo)) // O(log(n)).
- {
- throw new KeyNotFoundException($"({nameof(key)} = {key})");
- }
-
- return dlgInfo.FuncPtr;
- }
-
+
public static int GetDelegateIndex(MethodInfo info)
{
ArgumentNullException.ThrowIfNull(info);
@@ -64,12 +48,12 @@ namespace ARMeilleure.Translation
return index;
}
-
- private static void SetDelegateInfo(Delegate dlg, nint funcPtr)
+
+ private static void SetDelegateInfo(MethodInfo method)
{
- string key = GetKey(dlg.Method);
+ string key = GetKey(method);
- _delegates.Add(key, new DelegateInfo(dlg, funcPtr)); // ArgumentException (key).
+ _delegates.Add(key, new DelegateInfo(method.MethodHandle.GetFunctionPointer())); // ArgumentException (key).
}
private static string GetKey(MethodInfo info)
@@ -83,528 +67,179 @@ namespace ARMeilleure.Translation
{
_delegates = new SortedList();
- var dlgMathAbs = new MathAbs(Math.Abs);
- var dlgMathCeiling = new MathCeiling(Math.Ceiling);
- var dlgMathFloor = new MathFloor(Math.Floor);
- var dlgMathRound = new MathRound(Math.Round);
- var dlgMathTruncate = new MathTruncate(Math.Truncate);
+ SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Abs)));
+ SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Ceiling)));
+ SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Floor)));
+ SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Round)));
+ SetDelegateInfo(typeof(MathHelper).GetMethod(nameof(MathHelper.Truncate)));
- var dlgMathFAbs = new MathFAbs(MathF.Abs);
- var dlgMathFCeiling = new MathFCeiling(MathF.Ceiling);
- var dlgMathFFloor = new MathFFloor(MathF.Floor);
- var dlgMathFRound = new MathFRound(MathF.Round);
- var dlgMathFTruncate = new MathFTruncate(MathF.Truncate);
+ SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Abs)));
+ SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Ceiling)));
+ SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Floor)));
+ SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Round)));
+ SetDelegateInfo(typeof(MathHelperF).GetMethod(nameof(MathHelperF.Truncate)));
- var dlgNativeInterfaceBreak = new NativeInterfaceBreak(NativeInterface.Break);
- var dlgNativeInterfaceCheckSynchronization = new NativeInterfaceCheckSynchronization(NativeInterface.CheckSynchronization);
- var dlgNativeInterfaceEnqueueForRejit = new NativeInterfaceEnqueueForRejit(NativeInterface.EnqueueForRejit);
- var dlgNativeInterfaceGetCntfrqEl0 = new NativeInterfaceGetCntfrqEl0(NativeInterface.GetCntfrqEl0);
- var dlgNativeInterfaceGetCntpctEl0 = new NativeInterfaceGetCntpctEl0(NativeInterface.GetCntpctEl0);
- var dlgNativeInterfaceGetCntvctEl0 = new NativeInterfaceGetCntvctEl0(NativeInterface.GetCntvctEl0);
- var dlgNativeInterfaceGetCtrEl0 = new NativeInterfaceGetCtrEl0(NativeInterface.GetCtrEl0);
- var dlgNativeInterfaceGetDczidEl0 = new NativeInterfaceGetDczidEl0(NativeInterface.GetDczidEl0);
- var dlgNativeInterfaceGetFunctionAddress = new NativeInterfaceGetFunctionAddress(NativeInterface.GetFunctionAddress);
- var dlgNativeInterfaceInvalidateCacheLine = new NativeInterfaceInvalidateCacheLine(NativeInterface.InvalidateCacheLine);
- var dlgNativeInterfaceReadByte = new NativeInterfaceReadByte(NativeInterface.ReadByte);
- var dlgNativeInterfaceReadUInt16 = new NativeInterfaceReadUInt16(NativeInterface.ReadUInt16);
- var dlgNativeInterfaceReadUInt32 = new NativeInterfaceReadUInt32(NativeInterface.ReadUInt32);
- var dlgNativeInterfaceReadUInt64 = new NativeInterfaceReadUInt64(NativeInterface.ReadUInt64);
- var dlgNativeInterfaceReadVector128 = new NativeInterfaceReadVector128(NativeInterface.ReadVector128);
- var dlgNativeInterfaceSignalMemoryTracking = new NativeInterfaceSignalMemoryTracking(NativeInterface.SignalMemoryTracking);
- var dlgNativeInterfaceSupervisorCall = new NativeInterfaceSupervisorCall(NativeInterface.SupervisorCall);
- var dlgNativeInterfaceThrowInvalidMemoryAccess = new NativeInterfaceThrowInvalidMemoryAccess(NativeInterface.ThrowInvalidMemoryAccess);
- var dlgNativeInterfaceUndefined = new NativeInterfaceUndefined(NativeInterface.Undefined);
- var dlgNativeInterfaceWriteByte = new NativeInterfaceWriteByte(NativeInterface.WriteByte);
- var dlgNativeInterfaceWriteUInt16 = new NativeInterfaceWriteUInt16(NativeInterface.WriteUInt16);
- var dlgNativeInterfaceWriteUInt32 = new NativeInterfaceWriteUInt32(NativeInterface.WriteUInt32);
- var dlgNativeInterfaceWriteUInt64 = new NativeInterfaceWriteUInt64(NativeInterface.WriteUInt64);
- var dlgNativeInterfaceWriteVector128 = new NativeInterfaceWriteVector128(NativeInterface.WriteVector128);
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.Break)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.CheckSynchronization)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.EnqueueForRejit)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntfrqEl0)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntpctEl0)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCntvctEl0)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetCtrEl0)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetDczidEl0)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.GetFunctionAddress)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.InvalidateCacheLine)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadByte)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt16)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt32)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadUInt64)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ReadVector128)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SignalMemoryTracking)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.SupervisorCall)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.ThrowInvalidMemoryAccess)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.Undefined)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteByte)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteUInt16)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteUInt32)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteUInt64)));
+ SetDelegateInfo(typeof(NativeInterface).GetMethod(nameof(NativeInterface.WriteVector128)));
- var dlgSoftFallbackCountLeadingSigns = new SoftFallbackCountLeadingSigns(SoftFallback.CountLeadingSigns);
- var dlgSoftFallbackCountLeadingZeros = new SoftFallbackCountLeadingZeros(SoftFallback.CountLeadingZeros);
- var dlgSoftFallbackCrc32b = new SoftFallbackCrc32b(SoftFallback.Crc32b);
- var dlgSoftFallbackCrc32cb = new SoftFallbackCrc32cb(SoftFallback.Crc32cb);
- var dlgSoftFallbackCrc32ch = new SoftFallbackCrc32ch(SoftFallback.Crc32ch);
- var dlgSoftFallbackCrc32cw = new SoftFallbackCrc32cw(SoftFallback.Crc32cw);
- var dlgSoftFallbackCrc32cx = new SoftFallbackCrc32cx(SoftFallback.Crc32cx);
- var dlgSoftFallbackCrc32h = new SoftFallbackCrc32h(SoftFallback.Crc32h);
- var dlgSoftFallbackCrc32w = new SoftFallbackCrc32w(SoftFallback.Crc32w);
- var dlgSoftFallbackCrc32x = new SoftFallbackCrc32x(SoftFallback.Crc32x);
- var dlgSoftFallbackDecrypt = new SoftFallbackDecrypt(SoftFallback.Decrypt);
- var dlgSoftFallbackEncrypt = new SoftFallbackEncrypt(SoftFallback.Encrypt);
- var dlgSoftFallbackFixedRotate = new SoftFallbackFixedRotate(SoftFallback.FixedRotate);
- var dlgSoftFallbackHashChoose = new SoftFallbackHashChoose(SoftFallback.HashChoose);
- var dlgSoftFallbackHashLower = new SoftFallbackHashLower(SoftFallback.HashLower);
- var dlgSoftFallbackHashMajority = new SoftFallbackHashMajority(SoftFallback.HashMajority);
- var dlgSoftFallbackHashParity = new SoftFallbackHashParity(SoftFallback.HashParity);
- var dlgSoftFallbackHashUpper = new SoftFallbackHashUpper(SoftFallback.HashUpper);
- var dlgSoftFallbackInverseMixColumns = new SoftFallbackInverseMixColumns(SoftFallback.InverseMixColumns);
- var dlgSoftFallbackMixColumns = new SoftFallbackMixColumns(SoftFallback.MixColumns);
- var dlgSoftFallbackPolynomialMult64_128 = new SoftFallbackPolynomialMult64_128(SoftFallback.PolynomialMult64_128);
- var dlgSoftFallbackSatF32ToS32 = new SoftFallbackSatF32ToS32(SoftFallback.SatF32ToS32);
- var dlgSoftFallbackSatF32ToS64 = new SoftFallbackSatF32ToS64(SoftFallback.SatF32ToS64);
- var dlgSoftFallbackSatF32ToU32 = new SoftFallbackSatF32ToU32(SoftFallback.SatF32ToU32);
- var dlgSoftFallbackSatF32ToU64 = new SoftFallbackSatF32ToU64(SoftFallback.SatF32ToU64);
- var dlgSoftFallbackSatF64ToS32 = new SoftFallbackSatF64ToS32(SoftFallback.SatF64ToS32);
- var dlgSoftFallbackSatF64ToS64 = new SoftFallbackSatF64ToS64(SoftFallback.SatF64ToS64);
- var dlgSoftFallbackSatF64ToU32 = new SoftFallbackSatF64ToU32(SoftFallback.SatF64ToU32);
- var dlgSoftFallbackSatF64ToU64 = new SoftFallbackSatF64ToU64(SoftFallback.SatF64ToU64);
- var dlgSoftFallbackSha1SchedulePart1 = new SoftFallbackSha1SchedulePart1(SoftFallback.Sha1SchedulePart1);
- var dlgSoftFallbackSha1SchedulePart2 = new SoftFallbackSha1SchedulePart2(SoftFallback.Sha1SchedulePart2);
- var dlgSoftFallbackSha256SchedulePart1 = new SoftFallbackSha256SchedulePart1(SoftFallback.Sha256SchedulePart1);
- var dlgSoftFallbackSha256SchedulePart2 = new SoftFallbackSha256SchedulePart2(SoftFallback.Sha256SchedulePart2);
- var dlgSoftFallbackSignedShrImm64 = new SoftFallbackSignedShrImm64(SoftFallback.SignedShrImm64);
- var dlgSoftFallbackTbl1 = new SoftFallbackTbl1(SoftFallback.Tbl1);
- var dlgSoftFallbackTbl2 = new SoftFallbackTbl2(SoftFallback.Tbl2);
- var dlgSoftFallbackTbl3 = new SoftFallbackTbl3(SoftFallback.Tbl3);
- var dlgSoftFallbackTbl4 = new SoftFallbackTbl4(SoftFallback.Tbl4);
- var dlgSoftFallbackTbx1 = new SoftFallbackTbx1(SoftFallback.Tbx1);
- var dlgSoftFallbackTbx2 = new SoftFallbackTbx2(SoftFallback.Tbx2);
- var dlgSoftFallbackTbx3 = new SoftFallbackTbx3(SoftFallback.Tbx3);
- var dlgSoftFallbackTbx4 = new SoftFallbackTbx4(SoftFallback.Tbx4);
- var dlgSoftFallbackUnsignedShrImm64 = new SoftFallbackUnsignedShrImm64(SoftFallback.UnsignedShrImm64);
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.CountLeadingSigns)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.CountLeadingZeros)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32b)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cb)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32ch)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cw)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32cx)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32h)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32w)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Crc32x)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Decrypt)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Encrypt)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.FixedRotate)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashChoose)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashLower)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashMajority)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashParity)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.HashUpper)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.InverseMixColumns)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.MixColumns)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.PolynomialMult64_128)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToS32)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToS64)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToU32)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF32ToU64)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToS32)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToS64)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToU32)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SatF64ToU64)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha1SchedulePart1)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha1SchedulePart2)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha256SchedulePart1)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Sha256SchedulePart2)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.SignedShrImm64)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl1)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl2)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl3)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbl4)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx1)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx2)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx3)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.Tbx4)));
+ SetDelegateInfo(typeof(SoftFallback).GetMethod(nameof(SoftFallback.UnsignedShrImm64)));
- var dlgSoftFloat16_32FPConvert = new SoftFloat16_32FPConvert(SoftFloat16_32.FPConvert);
- var dlgSoftFloat16_64FPConvert = new SoftFloat16_64FPConvert(SoftFloat16_64.FPConvert);
+ SetDelegateInfo(typeof(SoftFloat16_32).GetMethod(nameof(SoftFloat16_32.FPConvert)));
+ SetDelegateInfo(typeof(SoftFloat16_64).GetMethod(nameof(SoftFloat16_64.FPConvert)));
- var dlgSoftFloat32FPAdd = new SoftFloat32FPAdd(SoftFloat32.FPAdd);
- var dlgSoftFloat32FPAddFpscr = new SoftFloat32FPAddFpscr(SoftFloat32.FPAddFpscr); // A32 only.
- var dlgSoftFloat32FPCompare = new SoftFloat32FPCompare(SoftFloat32.FPCompare);
- var dlgSoftFloat32FPCompareEQ = new SoftFloat32FPCompareEQ(SoftFloat32.FPCompareEQ);
- var dlgSoftFloat32FPCompareEQFpscr = new SoftFloat32FPCompareEQFpscr(SoftFloat32.FPCompareEQFpscr); // A32 only.
- var dlgSoftFloat32FPCompareGE = new SoftFloat32FPCompareGE(SoftFloat32.FPCompareGE);
- var dlgSoftFloat32FPCompareGEFpscr = new SoftFloat32FPCompareGEFpscr(SoftFloat32.FPCompareGEFpscr); // A32 only.
- var dlgSoftFloat32FPCompareGT = new SoftFloat32FPCompareGT(SoftFloat32.FPCompareGT);
- var dlgSoftFloat32FPCompareGTFpscr = new SoftFloat32FPCompareGTFpscr(SoftFloat32.FPCompareGTFpscr); // A32 only.
- var dlgSoftFloat32FPCompareLE = new SoftFloat32FPCompareLE(SoftFloat32.FPCompareLE);
- var dlgSoftFloat32FPCompareLEFpscr = new SoftFloat32FPCompareLEFpscr(SoftFloat32.FPCompareLEFpscr); // A32 only.
- var dlgSoftFloat32FPCompareLT = new SoftFloat32FPCompareLT(SoftFloat32.FPCompareLT);
- var dlgSoftFloat32FPCompareLTFpscr = new SoftFloat32FPCompareLTFpscr(SoftFloat32.FPCompareLTFpscr); // A32 only.
- var dlgSoftFloat32FPDiv = new SoftFloat32FPDiv(SoftFloat32.FPDiv);
- var dlgSoftFloat32FPMax = new SoftFloat32FPMax(SoftFloat32.FPMax);
- var dlgSoftFloat32FPMaxFpscr = new SoftFloat32FPMaxFpscr(SoftFloat32.FPMaxFpscr); // A32 only.
- var dlgSoftFloat32FPMaxNum = new SoftFloat32FPMaxNum(SoftFloat32.FPMaxNum);
- var dlgSoftFloat32FPMaxNumFpscr = new SoftFloat32FPMaxNumFpscr(SoftFloat32.FPMaxNumFpscr); // A32 only.
- var dlgSoftFloat32FPMin = new SoftFloat32FPMin(SoftFloat32.FPMin);
- var dlgSoftFloat32FPMinFpscr = new SoftFloat32FPMinFpscr(SoftFloat32.FPMinFpscr); // A32 only.
- var dlgSoftFloat32FPMinNum = new SoftFloat32FPMinNum(SoftFloat32.FPMinNum);
- var dlgSoftFloat32FPMinNumFpscr = new SoftFloat32FPMinNumFpscr(SoftFloat32.FPMinNumFpscr); // A32 only.
- var dlgSoftFloat32FPMul = new SoftFloat32FPMul(SoftFloat32.FPMul);
- var dlgSoftFloat32FPMulFpscr = new SoftFloat32FPMulFpscr(SoftFloat32.FPMulFpscr); // A32 only.
- var dlgSoftFloat32FPMulAdd = new SoftFloat32FPMulAdd(SoftFloat32.FPMulAdd);
- var dlgSoftFloat32FPMulAddFpscr = new SoftFloat32FPMulAddFpscr(SoftFloat32.FPMulAddFpscr); // A32 only.
- var dlgSoftFloat32FPMulSub = new SoftFloat32FPMulSub(SoftFloat32.FPMulSub);
- var dlgSoftFloat32FPMulSubFpscr = new SoftFloat32FPMulSubFpscr(SoftFloat32.FPMulSubFpscr); // A32 only.
- var dlgSoftFloat32FPMulX = new SoftFloat32FPMulX(SoftFloat32.FPMulX);
- var dlgSoftFloat32FPNegMulAdd = new SoftFloat32FPNegMulAdd(SoftFloat32.FPNegMulAdd);
- var dlgSoftFloat32FPNegMulSub = new SoftFloat32FPNegMulSub(SoftFloat32.FPNegMulSub);
- var dlgSoftFloat32FPRecipEstimate = new SoftFloat32FPRecipEstimate(SoftFloat32.FPRecipEstimate);
- var dlgSoftFloat32FPRecipEstimateFpscr = new SoftFloat32FPRecipEstimateFpscr(SoftFloat32.FPRecipEstimateFpscr); // A32 only.
- var dlgSoftFloat32FPRecipStep = new SoftFloat32FPRecipStep(SoftFloat32.FPRecipStep); // A32 only.
- var dlgSoftFloat32FPRecipStepFused = new SoftFloat32FPRecipStepFused(SoftFloat32.FPRecipStepFused);
- var dlgSoftFloat32FPRecpX = new SoftFloat32FPRecpX(SoftFloat32.FPRecpX);
- var dlgSoftFloat32FPRSqrtEstimate = new SoftFloat32FPRSqrtEstimate(SoftFloat32.FPRSqrtEstimate);
- var dlgSoftFloat32FPRSqrtEstimateFpscr = new SoftFloat32FPRSqrtEstimateFpscr(SoftFloat32.FPRSqrtEstimateFpscr); // A32 only.
- var dlgSoftFloat32FPRSqrtStep = new SoftFloat32FPRSqrtStep(SoftFloat32.FPRSqrtStep); // A32 only.
- var dlgSoftFloat32FPRSqrtStepFused = new SoftFloat32FPRSqrtStepFused(SoftFloat32.FPRSqrtStepFused);
- var dlgSoftFloat32FPSqrt = new SoftFloat32FPSqrt(SoftFloat32.FPSqrt);
- var dlgSoftFloat32FPSub = new SoftFloat32FPSub(SoftFloat32.FPSub);
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPAdd)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPAddFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompare)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareEQ)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareEQFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGE)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGEFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGT)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareGTFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLE)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLEFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLT)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPCompareLTFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPDiv)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMax)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxNum)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMaxNumFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMin)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinNum)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMinNumFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMul)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulAdd)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulAddFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulSub)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulSubFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPMulX)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPNegMulAdd)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPNegMulSub)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipEstimate)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipEstimateFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipStep))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecipStepFused)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRecpX)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtEstimate)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtEstimateFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtStep))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPRSqrtStepFused)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPSqrt)));
+ SetDelegateInfo(typeof(SoftFloat32).GetMethod(nameof(SoftFloat32.FPSub)));
- var dlgSoftFloat32_16FPConvert = new SoftFloat32_16FPConvert(SoftFloat32_16.FPConvert);
+ SetDelegateInfo(typeof(SoftFloat32_16).GetMethod(nameof(SoftFloat32_16.FPConvert)));
- var dlgSoftFloat64FPAdd = new SoftFloat64FPAdd(SoftFloat64.FPAdd);
- var dlgSoftFloat64FPAddFpscr = new SoftFloat64FPAddFpscr(SoftFloat64.FPAddFpscr); // A32 only.
- var dlgSoftFloat64FPCompare = new SoftFloat64FPCompare(SoftFloat64.FPCompare);
- var dlgSoftFloat64FPCompareEQ = new SoftFloat64FPCompareEQ(SoftFloat64.FPCompareEQ);
- var dlgSoftFloat64FPCompareEQFpscr = new SoftFloat64FPCompareEQFpscr(SoftFloat64.FPCompareEQFpscr); // A32 only.
- var dlgSoftFloat64FPCompareGE = new SoftFloat64FPCompareGE(SoftFloat64.FPCompareGE);
- var dlgSoftFloat64FPCompareGEFpscr = new SoftFloat64FPCompareGEFpscr(SoftFloat64.FPCompareGEFpscr); // A32 only.
- var dlgSoftFloat64FPCompareGT = new SoftFloat64FPCompareGT(SoftFloat64.FPCompareGT);
- var dlgSoftFloat64FPCompareGTFpscr = new SoftFloat64FPCompareGTFpscr(SoftFloat64.FPCompareGTFpscr); // A32 only.
- var dlgSoftFloat64FPCompareLE = new SoftFloat64FPCompareLE(SoftFloat64.FPCompareLE);
- var dlgSoftFloat64FPCompareLEFpscr = new SoftFloat64FPCompareLEFpscr(SoftFloat64.FPCompareLEFpscr); // A32 only.
- var dlgSoftFloat64FPCompareLT = new SoftFloat64FPCompareLT(SoftFloat64.FPCompareLT);
- var dlgSoftFloat64FPCompareLTFpscr = new SoftFloat64FPCompareLTFpscr(SoftFloat64.FPCompareLTFpscr); // A32 only.
- var dlgSoftFloat64FPDiv = new SoftFloat64FPDiv(SoftFloat64.FPDiv);
- var dlgSoftFloat64FPMax = new SoftFloat64FPMax(SoftFloat64.FPMax);
- var dlgSoftFloat64FPMaxFpscr = new SoftFloat64FPMaxFpscr(SoftFloat64.FPMaxFpscr); // A32 only.
- var dlgSoftFloat64FPMaxNum = new SoftFloat64FPMaxNum(SoftFloat64.FPMaxNum);
- var dlgSoftFloat64FPMaxNumFpscr = new SoftFloat64FPMaxNumFpscr(SoftFloat64.FPMaxNumFpscr); // A32 only.
- var dlgSoftFloat64FPMin = new SoftFloat64FPMin(SoftFloat64.FPMin);
- var dlgSoftFloat64FPMinFpscr = new SoftFloat64FPMinFpscr(SoftFloat64.FPMinFpscr); // A32 only.
- var dlgSoftFloat64FPMinNum = new SoftFloat64FPMinNum(SoftFloat64.FPMinNum);
- var dlgSoftFloat64FPMinNumFpscr = new SoftFloat64FPMinNumFpscr(SoftFloat64.FPMinNumFpscr); // A32 only.
- var dlgSoftFloat64FPMul = new SoftFloat64FPMul(SoftFloat64.FPMul);
- var dlgSoftFloat64FPMulFpscr = new SoftFloat64FPMulFpscr(SoftFloat64.FPMulFpscr); // A32 only.
- var dlgSoftFloat64FPMulAdd = new SoftFloat64FPMulAdd(SoftFloat64.FPMulAdd);
- var dlgSoftFloat64FPMulAddFpscr = new SoftFloat64FPMulAddFpscr(SoftFloat64.FPMulAddFpscr); // A32 only.
- var dlgSoftFloat64FPMulSub = new SoftFloat64FPMulSub(SoftFloat64.FPMulSub);
- var dlgSoftFloat64FPMulSubFpscr = new SoftFloat64FPMulSubFpscr(SoftFloat64.FPMulSubFpscr); // A32 only.
- var dlgSoftFloat64FPMulX = new SoftFloat64FPMulX(SoftFloat64.FPMulX);
- var dlgSoftFloat64FPNegMulAdd = new SoftFloat64FPNegMulAdd(SoftFloat64.FPNegMulAdd);
- var dlgSoftFloat64FPNegMulSub = new SoftFloat64FPNegMulSub(SoftFloat64.FPNegMulSub);
- var dlgSoftFloat64FPRecipEstimate = new SoftFloat64FPRecipEstimate(SoftFloat64.FPRecipEstimate);
- var dlgSoftFloat64FPRecipEstimateFpscr = new SoftFloat64FPRecipEstimateFpscr(SoftFloat64.FPRecipEstimateFpscr); // A32 only.
- var dlgSoftFloat64FPRecipStep = new SoftFloat64FPRecipStep(SoftFloat64.FPRecipStep); // A32 only.
- var dlgSoftFloat64FPRecipStepFused = new SoftFloat64FPRecipStepFused(SoftFloat64.FPRecipStepFused);
- var dlgSoftFloat64FPRecpX = new SoftFloat64FPRecpX(SoftFloat64.FPRecpX);
- var dlgSoftFloat64FPRSqrtEstimate = new SoftFloat64FPRSqrtEstimate(SoftFloat64.FPRSqrtEstimate);
- var dlgSoftFloat64FPRSqrtEstimateFpscr = new SoftFloat64FPRSqrtEstimateFpscr(SoftFloat64.FPRSqrtEstimateFpscr); // A32 only.
- var dlgSoftFloat64FPRSqrtStep = new SoftFloat64FPRSqrtStep(SoftFloat64.FPRSqrtStep); // A32 only.
- var dlgSoftFloat64FPRSqrtStepFused = new SoftFloat64FPRSqrtStepFused(SoftFloat64.FPRSqrtStepFused);
- var dlgSoftFloat64FPSqrt = new SoftFloat64FPSqrt(SoftFloat64.FPSqrt);
- var dlgSoftFloat64FPSub = new SoftFloat64FPSub(SoftFloat64.FPSub);
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPAdd)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPAddFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompare)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareEQ)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareEQFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGE)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGEFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGT)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareGTFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLE)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLEFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLT)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPCompareLTFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPDiv)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMax)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxNum)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMaxNumFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMin)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinNum)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMinNumFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMul)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulAdd)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulAddFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulSub)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulSubFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPMulX)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPNegMulAdd)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPNegMulSub)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipEstimate)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipEstimateFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipStep))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecipStepFused)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRecpX)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtEstimate)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtEstimateFpscr))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtStep))); // A32 only.
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPRSqrtStepFused)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPSqrt)));
+ SetDelegateInfo(typeof(SoftFloat64).GetMethod(nameof(SoftFloat64.FPSub)));
- var dlgSoftFloat64_16FPConvert = new SoftFloat64_16FPConvert(SoftFloat64_16.FPConvert);
-
- SetDelegateInfo(dlgMathAbs, Marshal.GetFunctionPointerForDelegate(dlgMathAbs));
- SetDelegateInfo(dlgMathCeiling, Marshal.GetFunctionPointerForDelegate(dlgMathCeiling));
- SetDelegateInfo(dlgMathFloor, Marshal.GetFunctionPointerForDelegate(dlgMathFloor));
- SetDelegateInfo(dlgMathRound, Marshal.GetFunctionPointerForDelegate(dlgMathRound));
- SetDelegateInfo(dlgMathTruncate, Marshal.GetFunctionPointerForDelegate(dlgMathTruncate));
-
- SetDelegateInfo(dlgMathFAbs, Marshal.GetFunctionPointerForDelegate(dlgMathFAbs));
- SetDelegateInfo(dlgMathFCeiling, Marshal.GetFunctionPointerForDelegate(dlgMathFCeiling));
- SetDelegateInfo(dlgMathFFloor, Marshal.GetFunctionPointerForDelegate(dlgMathFFloor));
- SetDelegateInfo(dlgMathFRound, Marshal.GetFunctionPointerForDelegate(dlgMathFRound));
- SetDelegateInfo(dlgMathFTruncate, Marshal.GetFunctionPointerForDelegate(dlgMathFTruncate));
-
- SetDelegateInfo(dlgNativeInterfaceBreak, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceBreak));
- SetDelegateInfo(dlgNativeInterfaceCheckSynchronization, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceCheckSynchronization));
- SetDelegateInfo(dlgNativeInterfaceEnqueueForRejit, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceEnqueueForRejit));
- SetDelegateInfo(dlgNativeInterfaceGetCntfrqEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCntfrqEl0));
- SetDelegateInfo(dlgNativeInterfaceGetCntpctEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCntpctEl0));
- SetDelegateInfo(dlgNativeInterfaceGetCntvctEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCntvctEl0));
- SetDelegateInfo(dlgNativeInterfaceGetCtrEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetCtrEl0));
- SetDelegateInfo(dlgNativeInterfaceGetDczidEl0, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetDczidEl0));
- SetDelegateInfo(dlgNativeInterfaceGetFunctionAddress, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceGetFunctionAddress));
- SetDelegateInfo(dlgNativeInterfaceInvalidateCacheLine, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceInvalidateCacheLine));
- SetDelegateInfo(dlgNativeInterfaceReadByte, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadByte));
- SetDelegateInfo(dlgNativeInterfaceReadUInt16, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadUInt16));
- SetDelegateInfo(dlgNativeInterfaceReadUInt32, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadUInt32));
- SetDelegateInfo(dlgNativeInterfaceReadUInt64, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadUInt64));
- SetDelegateInfo(dlgNativeInterfaceReadVector128, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceReadVector128));
- SetDelegateInfo(dlgNativeInterfaceSignalMemoryTracking, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceSignalMemoryTracking));
- SetDelegateInfo(dlgNativeInterfaceSupervisorCall, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceSupervisorCall));
- SetDelegateInfo(dlgNativeInterfaceThrowInvalidMemoryAccess, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceThrowInvalidMemoryAccess));
- SetDelegateInfo(dlgNativeInterfaceUndefined, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceUndefined));
- SetDelegateInfo(dlgNativeInterfaceWriteByte, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteByte));
- SetDelegateInfo(dlgNativeInterfaceWriteUInt16, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteUInt16));
- SetDelegateInfo(dlgNativeInterfaceWriteUInt32, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteUInt32));
- SetDelegateInfo(dlgNativeInterfaceWriteUInt64, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteUInt64));
- SetDelegateInfo(dlgNativeInterfaceWriteVector128, Marshal.GetFunctionPointerForDelegate(dlgNativeInterfaceWriteVector128));
-
- SetDelegateInfo(dlgSoftFallbackCountLeadingSigns, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCountLeadingSigns));
- SetDelegateInfo(dlgSoftFallbackCountLeadingZeros, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCountLeadingZeros));
- SetDelegateInfo(dlgSoftFallbackCrc32b, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32b));
- SetDelegateInfo(dlgSoftFallbackCrc32cb, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32cb));
- SetDelegateInfo(dlgSoftFallbackCrc32ch, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32ch));
- SetDelegateInfo(dlgSoftFallbackCrc32cw, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32cw));
- SetDelegateInfo(dlgSoftFallbackCrc32cx, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32cx));
- SetDelegateInfo(dlgSoftFallbackCrc32h, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32h));
- SetDelegateInfo(dlgSoftFallbackCrc32w, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32w));
- SetDelegateInfo(dlgSoftFallbackCrc32x, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackCrc32x));
- SetDelegateInfo(dlgSoftFallbackDecrypt, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackDecrypt));
- SetDelegateInfo(dlgSoftFallbackEncrypt, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackEncrypt));
- SetDelegateInfo(dlgSoftFallbackFixedRotate, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackFixedRotate));
- SetDelegateInfo(dlgSoftFallbackHashChoose, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashChoose));
- SetDelegateInfo(dlgSoftFallbackHashLower, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashLower));
- SetDelegateInfo(dlgSoftFallbackHashMajority, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashMajority));
- SetDelegateInfo(dlgSoftFallbackHashParity, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashParity));
- SetDelegateInfo(dlgSoftFallbackHashUpper, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackHashUpper));
- SetDelegateInfo(dlgSoftFallbackInverseMixColumns, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackInverseMixColumns));
- SetDelegateInfo(dlgSoftFallbackMixColumns, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackMixColumns));
- SetDelegateInfo(dlgSoftFallbackPolynomialMult64_128, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackPolynomialMult64_128));
- SetDelegateInfo(dlgSoftFallbackSatF32ToS32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToS32));
- SetDelegateInfo(dlgSoftFallbackSatF32ToS64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToS64));
- SetDelegateInfo(dlgSoftFallbackSatF32ToU32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToU32));
- SetDelegateInfo(dlgSoftFallbackSatF32ToU64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF32ToU64));
- SetDelegateInfo(dlgSoftFallbackSatF64ToS32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToS32));
- SetDelegateInfo(dlgSoftFallbackSatF64ToS64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToS64));
- SetDelegateInfo(dlgSoftFallbackSatF64ToU32, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToU32));
- SetDelegateInfo(dlgSoftFallbackSatF64ToU64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSatF64ToU64));
- SetDelegateInfo(dlgSoftFallbackSha1SchedulePart1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha1SchedulePart1));
- SetDelegateInfo(dlgSoftFallbackSha1SchedulePart2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha1SchedulePart2));
- SetDelegateInfo(dlgSoftFallbackSha256SchedulePart1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha256SchedulePart1));
- SetDelegateInfo(dlgSoftFallbackSha256SchedulePart2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSha256SchedulePart2));
- SetDelegateInfo(dlgSoftFallbackSignedShrImm64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackSignedShrImm64));
- SetDelegateInfo(dlgSoftFallbackTbl1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl1));
- SetDelegateInfo(dlgSoftFallbackTbl2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl2));
- SetDelegateInfo(dlgSoftFallbackTbl3, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl3));
- SetDelegateInfo(dlgSoftFallbackTbl4, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbl4));
- SetDelegateInfo(dlgSoftFallbackTbx1, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx1));
- SetDelegateInfo(dlgSoftFallbackTbx2, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx2));
- SetDelegateInfo(dlgSoftFallbackTbx3, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx3));
- SetDelegateInfo(dlgSoftFallbackTbx4, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackTbx4));
- SetDelegateInfo(dlgSoftFallbackUnsignedShrImm64, Marshal.GetFunctionPointerForDelegate(dlgSoftFallbackUnsignedShrImm64));
-
- SetDelegateInfo(dlgSoftFloat16_32FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat16_32FPConvert));
- SetDelegateInfo(dlgSoftFloat16_64FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat16_64FPConvert));
-
- SetDelegateInfo(dlgSoftFloat32FPAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPAdd));
- SetDelegateInfo(dlgSoftFloat32FPAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPAddFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPCompare, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompare));
- SetDelegateInfo(dlgSoftFloat32FPCompareEQ, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareEQ));
- SetDelegateInfo(dlgSoftFloat32FPCompareEQFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareEQFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPCompareGE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGE));
- SetDelegateInfo(dlgSoftFloat32FPCompareGEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGEFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPCompareGT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGT));
- SetDelegateInfo(dlgSoftFloat32FPCompareGTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareGTFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPCompareLE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLE));
- SetDelegateInfo(dlgSoftFloat32FPCompareLEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLEFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPCompareLT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLT));
- SetDelegateInfo(dlgSoftFloat32FPCompareLTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPCompareLTFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPDiv, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPDiv));
- SetDelegateInfo(dlgSoftFloat32FPMax, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMax));
- SetDelegateInfo(dlgSoftFloat32FPMaxFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMaxFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPMaxNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMaxNum));
- SetDelegateInfo(dlgSoftFloat32FPMaxNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMaxNumFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPMin, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMin));
- SetDelegateInfo(dlgSoftFloat32FPMinFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMinFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPMinNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMinNum));
- SetDelegateInfo(dlgSoftFloat32FPMinNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMinNumFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPMul, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMul));
- SetDelegateInfo(dlgSoftFloat32FPMulFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulAdd));
- SetDelegateInfo(dlgSoftFloat32FPMulAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulAddFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulSub));
- SetDelegateInfo(dlgSoftFloat32FPMulSubFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulSubFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPMulX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPMulX));
- SetDelegateInfo(dlgSoftFloat32FPNegMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPNegMulAdd));
- SetDelegateInfo(dlgSoftFloat32FPNegMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPNegMulSub));
- SetDelegateInfo(dlgSoftFloat32FPRecipEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipEstimate));
- SetDelegateInfo(dlgSoftFloat32FPRecipEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipEstimateFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPRecipStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipStep)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPRecipStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecipStepFused));
- SetDelegateInfo(dlgSoftFloat32FPRecpX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRecpX));
- SetDelegateInfo(dlgSoftFloat32FPRSqrtEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtEstimate));
- SetDelegateInfo(dlgSoftFloat32FPRSqrtEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtEstimateFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPRSqrtStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtStep)); // A32 only.
- SetDelegateInfo(dlgSoftFloat32FPRSqrtStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPRSqrtStepFused));
- SetDelegateInfo(dlgSoftFloat32FPSqrt, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPSqrt));
- SetDelegateInfo(dlgSoftFloat32FPSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32FPSub));
-
- SetDelegateInfo(dlgSoftFloat32_16FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat32_16FPConvert));
-
- SetDelegateInfo(dlgSoftFloat64FPAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPAdd));
- SetDelegateInfo(dlgSoftFloat64FPAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPAddFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPCompare, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompare));
- SetDelegateInfo(dlgSoftFloat64FPCompareEQ, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareEQ));
- SetDelegateInfo(dlgSoftFloat64FPCompareEQFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareEQFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPCompareGE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGE));
- SetDelegateInfo(dlgSoftFloat64FPCompareGEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGEFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPCompareGT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGT));
- SetDelegateInfo(dlgSoftFloat64FPCompareGTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareGTFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPCompareLE, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLE));
- SetDelegateInfo(dlgSoftFloat64FPCompareLEFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLEFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPCompareLT, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLT));
- SetDelegateInfo(dlgSoftFloat64FPCompareLTFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPCompareLTFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPDiv, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPDiv));
- SetDelegateInfo(dlgSoftFloat64FPMax, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMax));
- SetDelegateInfo(dlgSoftFloat64FPMaxFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMaxFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPMaxNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMaxNum));
- SetDelegateInfo(dlgSoftFloat64FPMaxNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMaxNumFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPMin, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMin));
- SetDelegateInfo(dlgSoftFloat64FPMinFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMinFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPMinNum, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMinNum));
- SetDelegateInfo(dlgSoftFloat64FPMinNumFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMinNumFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPMul, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMul));
- SetDelegateInfo(dlgSoftFloat64FPMulFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulAdd));
- SetDelegateInfo(dlgSoftFloat64FPMulAddFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulAddFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulSub));
- SetDelegateInfo(dlgSoftFloat64FPMulSubFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulSubFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPMulX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPMulX));
- SetDelegateInfo(dlgSoftFloat64FPNegMulAdd, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPNegMulAdd));
- SetDelegateInfo(dlgSoftFloat64FPNegMulSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPNegMulSub));
- SetDelegateInfo(dlgSoftFloat64FPRecipEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipEstimate));
- SetDelegateInfo(dlgSoftFloat64FPRecipEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipEstimateFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPRecipStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipStep)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPRecipStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecipStepFused));
- SetDelegateInfo(dlgSoftFloat64FPRecpX, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRecpX));
- SetDelegateInfo(dlgSoftFloat64FPRSqrtEstimate, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtEstimate));
- SetDelegateInfo(dlgSoftFloat64FPRSqrtEstimateFpscr, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtEstimateFpscr)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPRSqrtStep, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtStep)); // A32 only.
- SetDelegateInfo(dlgSoftFloat64FPRSqrtStepFused, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPRSqrtStepFused));
- SetDelegateInfo(dlgSoftFloat64FPSqrt, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPSqrt));
- SetDelegateInfo(dlgSoftFloat64FPSub, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64FPSub));
-
- SetDelegateInfo(dlgSoftFloat64_16FPConvert, Marshal.GetFunctionPointerForDelegate(dlgSoftFloat64_16FPConvert));
+ SetDelegateInfo(typeof(SoftFloat64_16).GetMethod(nameof(SoftFloat64_16.FPConvert)));
}
-
- private delegate double MathAbs(double value);
- private delegate double MathCeiling(double a);
- private delegate double MathFloor(double d);
- private delegate double MathRound(double value, MidpointRounding mode);
- private delegate double MathTruncate(double d);
-
- private delegate float MathFAbs(float x);
- private delegate float MathFCeiling(float x);
- private delegate float MathFFloor(float x);
- private delegate float MathFRound(float x, MidpointRounding mode);
- private delegate float MathFTruncate(float x);
-
- private delegate void NativeInterfaceBreak(ulong address, int imm);
- private delegate bool NativeInterfaceCheckSynchronization();
- private delegate void NativeInterfaceEnqueueForRejit(ulong address);
- private delegate ulong NativeInterfaceGetCntfrqEl0();
- private delegate ulong NativeInterfaceGetCntpctEl0();
- private delegate ulong NativeInterfaceGetCntvctEl0();
- private delegate ulong NativeInterfaceGetCtrEl0();
- private delegate ulong NativeInterfaceGetDczidEl0();
- private delegate ulong NativeInterfaceGetFunctionAddress(ulong address);
- private delegate void NativeInterfaceInvalidateCacheLine(ulong address);
- private delegate byte NativeInterfaceReadByte(ulong address);
- private delegate ushort NativeInterfaceReadUInt16(ulong address);
- private delegate uint NativeInterfaceReadUInt32(ulong address);
- private delegate ulong NativeInterfaceReadUInt64(ulong address);
- private delegate V128 NativeInterfaceReadVector128(ulong address);
- private delegate void NativeInterfaceSignalMemoryTracking(ulong address, ulong size, bool write);
- private delegate void NativeInterfaceSupervisorCall(ulong address, int imm);
- private delegate void NativeInterfaceThrowInvalidMemoryAccess(ulong address);
- private delegate void NativeInterfaceUndefined(ulong address, int opCode);
- private delegate void NativeInterfaceWriteByte(ulong address, byte value);
- private delegate void NativeInterfaceWriteUInt16(ulong address, ushort value);
- private delegate void NativeInterfaceWriteUInt32(ulong address, uint value);
- private delegate void NativeInterfaceWriteUInt64(ulong address, ulong value);
- private delegate void NativeInterfaceWriteVector128(ulong address, V128 value);
-
- private delegate ulong SoftFallbackCountLeadingSigns(ulong value, int size);
- private delegate ulong SoftFallbackCountLeadingZeros(ulong value, int size);
- private delegate uint SoftFallbackCrc32b(uint crc, byte value);
- private delegate uint SoftFallbackCrc32cb(uint crc, byte value);
- private delegate uint SoftFallbackCrc32ch(uint crc, ushort value);
- private delegate uint SoftFallbackCrc32cw(uint crc, uint value);
- private delegate uint SoftFallbackCrc32cx(uint crc, ulong value);
- private delegate uint SoftFallbackCrc32h(uint crc, ushort value);
- private delegate uint SoftFallbackCrc32w(uint crc, uint value);
- private delegate uint SoftFallbackCrc32x(uint crc, ulong value);
- private delegate V128 SoftFallbackDecrypt(V128 value, V128 roundKey);
- private delegate V128 SoftFallbackEncrypt(V128 value, V128 roundKey);
- private delegate uint SoftFallbackFixedRotate(uint hash_e);
- private delegate V128 SoftFallbackHashChoose(V128 hash_abcd, uint hash_e, V128 wk);
- private delegate V128 SoftFallbackHashLower(V128 hash_abcd, V128 hash_efgh, V128 wk);
- private delegate V128 SoftFallbackHashMajority(V128 hash_abcd, uint hash_e, V128 wk);
- private delegate V128 SoftFallbackHashParity(V128 hash_abcd, uint hash_e, V128 wk);
- private delegate V128 SoftFallbackHashUpper(V128 hash_abcd, V128 hash_efgh, V128 wk);
- private delegate V128 SoftFallbackInverseMixColumns(V128 value);
- private delegate V128 SoftFallbackMixColumns(V128 value);
- private delegate V128 SoftFallbackPolynomialMult64_128(ulong op1, ulong op2);
- private delegate int SoftFallbackSatF32ToS32(float value);
- private delegate long SoftFallbackSatF32ToS64(float value);
- private delegate uint SoftFallbackSatF32ToU32(float value);
- private delegate ulong SoftFallbackSatF32ToU64(float value);
- private delegate int SoftFallbackSatF64ToS32(double value);
- private delegate long SoftFallbackSatF64ToS64(double value);
- private delegate uint SoftFallbackSatF64ToU32(double value);
- private delegate ulong SoftFallbackSatF64ToU64(double value);
- private delegate V128 SoftFallbackSha1SchedulePart1(V128 w0_3, V128 w4_7, V128 w8_11);
- private delegate V128 SoftFallbackSha1SchedulePart2(V128 tw0_3, V128 w12_15);
- private delegate V128 SoftFallbackSha256SchedulePart1(V128 w0_3, V128 w4_7);
- private delegate V128 SoftFallbackSha256SchedulePart2(V128 w0_3, V128 w8_11, V128 w12_15);
- private delegate long SoftFallbackSignedShrImm64(long value, long roundConst, int shift);
- private delegate V128 SoftFallbackTbl1(V128 vector, int bytes, V128 tb0);
- private delegate V128 SoftFallbackTbl2(V128 vector, int bytes, V128 tb0, V128 tb1);
- private delegate V128 SoftFallbackTbl3(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2);
- private delegate V128 SoftFallbackTbl4(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3);
- private delegate V128 SoftFallbackTbx1(V128 dest, V128 vector, int bytes, V128 tb0);
- private delegate V128 SoftFallbackTbx2(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1);
- private delegate V128 SoftFallbackTbx3(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2);
- private delegate V128 SoftFallbackTbx4(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3);
- private delegate ulong SoftFallbackUnsignedShrImm64(ulong value, long roundConst, int shift);
-
- private delegate float SoftFloat16_32FPConvert(ushort valueBits);
-
- private delegate double SoftFloat16_64FPConvert(ushort valueBits);
-
- private delegate float SoftFloat32FPAdd(float value1, float value2);
- private delegate float SoftFloat32FPAddFpscr(float value1, float value2, bool standardFpscr);
- private delegate int SoftFloat32FPCompare(float value1, float value2, bool signalNaNs);
- private delegate float SoftFloat32FPCompareEQ(float value1, float value2);
- private delegate float SoftFloat32FPCompareEQFpscr(float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPCompareGE(float value1, float value2);
- private delegate float SoftFloat32FPCompareGEFpscr(float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPCompareGT(float value1, float value2);
- private delegate float SoftFloat32FPCompareGTFpscr(float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPCompareLE(float value1, float value2);
- private delegate float SoftFloat32FPCompareLEFpscr(float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPCompareLT(float value1, float value2);
- private delegate float SoftFloat32FPCompareLTFpscr(float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPDiv(float value1, float value2);
- private delegate float SoftFloat32FPMax(float value1, float value2);
- private delegate float SoftFloat32FPMaxFpscr(float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPMaxNum(float value1, float value2);
- private delegate float SoftFloat32FPMaxNumFpscr(float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPMin(float value1, float value2);
- private delegate float SoftFloat32FPMinFpscr(float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPMinNum(float value1, float value2);
- private delegate float SoftFloat32FPMinNumFpscr(float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPMul(float value1, float value2);
- private delegate float SoftFloat32FPMulFpscr(float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPMulAdd(float valueA, float value1, float value2);
- private delegate float SoftFloat32FPMulAddFpscr(float valueA, float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPMulSub(float valueA, float value1, float value2);
- private delegate float SoftFloat32FPMulSubFpscr(float valueA, float value1, float value2, bool standardFpscr);
- private delegate float SoftFloat32FPMulX(float value1, float value2);
- private delegate float SoftFloat32FPNegMulAdd(float valueA, float value1, float value2);
- private delegate float SoftFloat32FPNegMulSub(float valueA, float value1, float value2);
- private delegate float SoftFloat32FPRecipEstimate(float value);
- private delegate float SoftFloat32FPRecipEstimateFpscr(float value, bool standardFpscr);
- private delegate float SoftFloat32FPRecipStep(float value1, float value2);
- private delegate float SoftFloat32FPRecipStepFused(float value1, float value2);
- private delegate float SoftFloat32FPRecpX(float value);
- private delegate float SoftFloat32FPRSqrtEstimate(float value);
- private delegate float SoftFloat32FPRSqrtEstimateFpscr(float value, bool standardFpscr);
- private delegate float SoftFloat32FPRSqrtStep(float value1, float value2);
- private delegate float SoftFloat32FPRSqrtStepFused(float value1, float value2);
- private delegate float SoftFloat32FPSqrt(float value);
- private delegate float SoftFloat32FPSub(float value1, float value2);
-
- private delegate ushort SoftFloat32_16FPConvert(float value);
-
- private delegate double SoftFloat64FPAdd(double value1, double value2);
- private delegate double SoftFloat64FPAddFpscr(double value1, double value2, bool standardFpscr);
- private delegate int SoftFloat64FPCompare(double value1, double value2, bool signalNaNs);
- private delegate double SoftFloat64FPCompareEQ(double value1, double value2);
- private delegate double SoftFloat64FPCompareEQFpscr(double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPCompareGE(double value1, double value2);
- private delegate double SoftFloat64FPCompareGEFpscr(double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPCompareGT(double value1, double value2);
- private delegate double SoftFloat64FPCompareGTFpscr(double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPCompareLE(double value1, double value2);
- private delegate double SoftFloat64FPCompareLEFpscr(double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPCompareLT(double value1, double value2);
- private delegate double SoftFloat64FPCompareLTFpscr(double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPDiv(double value1, double value2);
- private delegate double SoftFloat64FPMax(double value1, double value2);
- private delegate double SoftFloat64FPMaxFpscr(double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPMaxNum(double value1, double value2);
- private delegate double SoftFloat64FPMaxNumFpscr(double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPMin(double value1, double value2);
- private delegate double SoftFloat64FPMinFpscr(double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPMinNum(double value1, double value2);
- private delegate double SoftFloat64FPMinNumFpscr(double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPMul(double value1, double value2);
- private delegate double SoftFloat64FPMulFpscr(double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPMulAdd(double valueA, double value1, double value2);
- private delegate double SoftFloat64FPMulAddFpscr(double valueA, double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPMulSub(double valueA, double value1, double value2);
- private delegate double SoftFloat64FPMulSubFpscr(double valueA, double value1, double value2, bool standardFpscr);
- private delegate double SoftFloat64FPMulX(double value1, double value2);
- private delegate double SoftFloat64FPNegMulAdd(double valueA, double value1, double value2);
- private delegate double SoftFloat64FPNegMulSub(double valueA, double value1, double value2);
- private delegate double SoftFloat64FPRecipEstimate(double value);
- private delegate double SoftFloat64FPRecipEstimateFpscr(double value, bool standardFpscr);
- private delegate double SoftFloat64FPRecipStep(double value1, double value2);
- private delegate double SoftFloat64FPRecipStepFused(double value1, double value2);
- private delegate double SoftFloat64FPRecpX(double value);
- private delegate double SoftFloat64FPRSqrtEstimate(double value);
- private delegate double SoftFloat64FPRSqrtEstimateFpscr(double value, bool standardFpscr);
- private delegate double SoftFloat64FPRSqrtStep(double value1, double value2);
- private delegate double SoftFloat64FPRSqrtStepFused(double value1, double value2);
- private delegate double SoftFloat64FPSqrt(double value);
- private delegate double SoftFloat64FPSub(double value1, double value2);
-
- private delegate ushort SoftFloat64_16FPConvert(double value);
}
}
diff --git a/src/ARMeilleure/Translation/EmitterContext.cs b/src/ARMeilleure/Translation/EmitterContext.cs
index e2d860f82..3d800e16f 100644
--- a/src/ARMeilleure/Translation/EmitterContext.cs
+++ b/src/ARMeilleure/Translation/EmitterContext.cs
@@ -97,7 +97,7 @@ namespace ARMeilleure.Translation
public virtual Operand Call(MethodInfo info, params Operand[] callArgs)
{
- nint funcPtr = Delegates.GetDelegateFuncPtr(info);
+ nint funcPtr = info.MethodHandle.GetFunctionPointer();
OperandType returnType = GetOperandType(info.ReturnType);
@@ -559,27 +559,27 @@ namespace ARMeilleure.Translation
return dest;
}
- public Operand AddIntrinsic(Intrinsic intrin, params Operand[] args)
+ public Operand AddIntrinsic(Intrinsic intrin, params ReadOnlySpan args)
{
return Add(intrin, Local(OperandType.V128), args);
}
- public Operand AddIntrinsicInt(Intrinsic intrin, params Operand[] args)
+ public Operand AddIntrinsicInt(Intrinsic intrin, params ReadOnlySpan args)
{
return Add(intrin, Local(OperandType.I32), args);
}
- public Operand AddIntrinsicLong(Intrinsic intrin, params Operand[] args)
+ public Operand AddIntrinsicLong(Intrinsic intrin, params ReadOnlySpan args)
{
return Add(intrin, Local(OperandType.I64), args);
}
- public void AddIntrinsicNoRet(Intrinsic intrin, params Operand[] args)
+ public void AddIntrinsicNoRet(Intrinsic intrin, params ReadOnlySpan args)
{
Add(intrin, default, args);
}
- private Operand Add(Intrinsic intrin, Operand dest, params Operand[] sources)
+ private Operand Add(Intrinsic intrin, Operand dest, params ReadOnlySpan sources)
{
NewNextBlockIfNeeded();
diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs
index 841e5fefa..894e825cf 100644
--- a/src/ARMeilleure/Translation/PTC/Ptc.cs
+++ b/src/ARMeilleure/Translation/PTC/Ptc.cs
@@ -29,8 +29,8 @@ namespace ARMeilleure.Translation.PTC
{
private const string OuterHeaderMagicString = "PTCohd\0\0";
private const string InnerHeaderMagicString = "PTCihd\0\0";
-
- private const uint InternalVersion = 6997; //! To be incremented manually for each change to the ARMeilleure project.
+
+ private const uint InternalVersion = 6998; //! To be incremented manually for each change to the ARMeilleure project.
private const string ActualDir = "0";
private const string BackupDir = "1";
@@ -59,7 +59,7 @@ namespace ARMeilleure.Translation.PTC
private readonly ManualResetEvent _waitEvent;
- private readonly object _lock;
+ private readonly Lock _lock = new();
private bool _disposed;
@@ -89,8 +89,6 @@ namespace ARMeilleure.Translation.PTC
_waitEvent = new ManualResetEvent(true);
- _lock = new object();
-
_disposed = false;
TitleIdText = TitleIdTextDefault;
diff --git a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs
index 8e95c5e4b..bdb9abd05 100644
--- a/src/ARMeilleure/Translation/PTC/PtcProfiler.cs
+++ b/src/ARMeilleure/Translation/PTC/PtcProfiler.cs
@@ -1,4 +1,5 @@
using ARMeilleure.State;
+using Humanizer;
using Ryujinx.Common;
using Ryujinx.Common.Logging;
using Ryujinx.Common.Memory;
@@ -41,7 +42,7 @@ namespace ARMeilleure.Translation.PTC
private readonly ManualResetEvent _waitEvent;
- private readonly object _lock;
+ private readonly Lock _lock = new();
private bool _disposed;
@@ -58,15 +59,13 @@ namespace ARMeilleure.Translation.PTC
{
_ptc = ptc;
- _timer = new Timer(SaveInterval * 1000d);
- _timer.Elapsed += PreSave;
+ _timer = new Timer(SaveInterval.Seconds());
+ _timer.Elapsed += TimerElapsed;
_outerHeaderMagic = BinaryPrimitives.ReadUInt64LittleEndian(EncodingCache.UTF8NoBOM.GetBytes(OuterHeaderMagicString).AsSpan());
_waitEvent = new ManualResetEvent(true);
- _lock = new object();
-
_disposed = false;
ProfiledFuncs = new Dictionary();
@@ -74,6 +73,9 @@ namespace ARMeilleure.Translation.PTC
Enabled = false;
}
+ private void TimerElapsed(object _, ElapsedEventArgs __)
+ => new Thread(PreSave) { Name = "Ptc.DiskWriter" }.Start();
+
public void AddEntry(ulong address, ExecutionMode mode, bool highCq)
{
if (IsAddressInStaticCodeRange(address))
@@ -264,7 +266,7 @@ namespace ARMeilleure.Translation.PTC
compressedStream.SetLength(0L);
}
- private void PreSave(object source, ElapsedEventArgs e)
+ private void PreSave()
{
_waitEvent.Reset();
@@ -430,7 +432,7 @@ namespace ARMeilleure.Translation.PTC
{
_disposed = true;
- _timer.Elapsed -= PreSave;
+ _timer.Elapsed -= TimerElapsed;
_timer.Dispose();
Wait();
diff --git a/src/Ryujinx.Audio.Backends.OpenAL/OpenALHardwareDeviceSession.cs b/src/Ryujinx.Audio.Backends.OpenAL/OpenALHardwareDeviceSession.cs
index 3b9129130..7292450a6 100644
--- a/src/Ryujinx.Audio.Backends.OpenAL/OpenALHardwareDeviceSession.cs
+++ b/src/Ryujinx.Audio.Backends.OpenAL/OpenALHardwareDeviceSession.cs
@@ -5,6 +5,7 @@ using Ryujinx.Memory;
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Threading;
namespace Ryujinx.Audio.Backends.OpenAL
{
@@ -18,7 +19,7 @@ namespace Ryujinx.Audio.Backends.OpenAL
private ulong _playedSampleCount;
private float _volume;
- private readonly object _lock = new();
+ private readonly Lock _lock = new();
public OpenALHardwareDeviceSession(OpenALHardwareDeviceDriver driver, IVirtualMemoryManager memoryManager, SampleFormat requestedSampleFormat, uint requestedSampleRate, uint requestedChannelCount) : base(memoryManager, requestedSampleFormat, requestedSampleRate, requestedChannelCount)
{
diff --git a/src/Ryujinx.Audio.Backends.OpenAL/Ryujinx.Audio.Backends.OpenAL.csproj b/src/Ryujinx.Audio.Backends.OpenAL/Ryujinx.Audio.Backends.OpenAL.csproj
index bdf46d688..4ef3aebec 100644
--- a/src/Ryujinx.Audio.Backends.OpenAL/Ryujinx.Audio.Backends.OpenAL.csproj
+++ b/src/Ryujinx.Audio.Backends.OpenAL/Ryujinx.Audio.Backends.OpenAL.csproj
@@ -1,7 +1,6 @@
- net8.0
$(DefaultItemExcludes);._*
diff --git a/src/Ryujinx.Audio.Backends.SDL2/Ryujinx.Audio.Backends.SDL2.csproj b/src/Ryujinx.Audio.Backends.SDL2/Ryujinx.Audio.Backends.SDL2.csproj
index 940e47308..d0d45122e 100644
--- a/src/Ryujinx.Audio.Backends.SDL2/Ryujinx.Audio.Backends.SDL2.csproj
+++ b/src/Ryujinx.Audio.Backends.SDL2/Ryujinx.Audio.Backends.SDL2.csproj
@@ -1,7 +1,6 @@
- net8.0
true
$(DefaultItemExcludes);._*
diff --git a/src/Ryujinx.Audio.Backends.SoundIo/Ryujinx.Audio.Backends.SoundIo.csproj b/src/Ryujinx.Audio.Backends.SoundIo/Ryujinx.Audio.Backends.SoundIo.csproj
index 671a6ad5e..d06f66181 100644
--- a/src/Ryujinx.Audio.Backends.SoundIo/Ryujinx.Audio.Backends.SoundIo.csproj
+++ b/src/Ryujinx.Audio.Backends.SoundIo/Ryujinx.Audio.Backends.SoundIo.csproj
@@ -1,7 +1,6 @@
- net8.0
true
win-x64;osx-x64;linux-x64
$(DefaultItemExcludes);._*
diff --git a/src/Ryujinx.Audio/AudioManager.cs b/src/Ryujinx.Audio/AudioManager.cs
index 370d3d098..8c2c0ef6b 100644
--- a/src/Ryujinx.Audio/AudioManager.cs
+++ b/src/Ryujinx.Audio/AudioManager.cs
@@ -11,7 +11,7 @@ namespace Ryujinx.Audio
///
/// Lock used to control the waiters registration.
///
- private readonly object _lock = new();
+ private readonly Lock _lock = new();
///
/// Events signaled when the driver played audio buffers.
diff --git a/src/Ryujinx.Audio/Backends/Common/DynamicRingBuffer.cs b/src/Ryujinx.Audio/Backends/Common/DynamicRingBuffer.cs
index 7aefe8865..6f31755a3 100644
--- a/src/Ryujinx.Audio/Backends/Common/DynamicRingBuffer.cs
+++ b/src/Ryujinx.Audio/Backends/Common/DynamicRingBuffer.cs
@@ -2,6 +2,7 @@ using Ryujinx.Common;
using Ryujinx.Common.Memory;
using System;
using System.Buffers;
+using System.Threading;
namespace Ryujinx.Audio.Backends.Common
{
@@ -12,7 +13,7 @@ namespace Ryujinx.Audio.Backends.Common
{
private const int RingBufferAlignment = 2048;
- private readonly object _lock = new();
+ private readonly Lock _lock = new();
private MemoryOwner _bufferOwner;
private Memory _buffer;
diff --git a/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs b/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs
index 3a3c1d1b1..5991b816f 100644
--- a/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs
+++ b/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs
@@ -9,20 +9,12 @@ namespace Ryujinx.Audio.Backends.Dummy
{
public class DummyHardwareDeviceDriver : IHardwareDeviceDriver
{
- private readonly ManualResetEvent _updateRequiredEvent;
- private readonly ManualResetEvent _pauseEvent;
+ private readonly ManualResetEvent _updateRequiredEvent = new(false);
+ private readonly ManualResetEvent _pauseEvent = new(true);
public static bool IsSupported => true;
- public float Volume { get; set; }
-
- public DummyHardwareDeviceDriver()
- {
- _updateRequiredEvent = new ManualResetEvent(false);
- _pauseEvent = new ManualResetEvent(true);
-
- Volume = 1f;
- }
+ public float Volume { get; set; } = 1f;
public IHardwareDeviceSession OpenDeviceSession(Direction direction, IVirtualMemoryManager memoryManager, SampleFormat sampleFormat, uint sampleRate, uint channelCount)
{
@@ -60,7 +52,7 @@ namespace Ryujinx.Audio.Backends.Dummy
Dispose(true);
}
- protected virtual void Dispose(bool disposing)
+ private void Dispose(bool disposing)
{
if (disposing)
{
diff --git a/src/Ryujinx.Audio/Input/AudioInputManager.cs b/src/Ryujinx.Audio/Input/AudioInputManager.cs
index d56997e9c..ffc3e6da2 100644
--- a/src/Ryujinx.Audio/Input/AudioInputManager.cs
+++ b/src/Ryujinx.Audio/Input/AudioInputManager.cs
@@ -14,12 +14,12 @@ namespace Ryujinx.Audio.Input
///
public class AudioInputManager : IDisposable
{
- private readonly object _lock = new();
+ private readonly Lock _lock = new();
///
/// Lock used for session allocation.
///
- private readonly object _sessionLock = new();
+ private readonly Lock _sessionLock = new();
///
/// The session ids allocation table.
diff --git a/src/Ryujinx.Audio/Input/AudioInputSystem.cs b/src/Ryujinx.Audio/Input/AudioInputSystem.cs
index 34623b34f..65b99745d 100644
--- a/src/Ryujinx.Audio/Input/AudioInputSystem.cs
+++ b/src/Ryujinx.Audio/Input/AudioInputSystem.cs
@@ -48,7 +48,7 @@ namespace Ryujinx.Audio.Input
///
/// The lock of the parent.
///
- private readonly object _parentLock;
+ private readonly Lock _parentLock;
///
/// The dispose state.
@@ -62,7 +62,7 @@ namespace Ryujinx.Audio.Input
/// The lock of the manager
/// The hardware device session
/// The buffer release event of the audio input
- public AudioInputSystem(AudioInputManager manager, object parentLock, IHardwareDeviceSession deviceSession, IWritableEvent bufferEvent)
+ public AudioInputSystem(AudioInputManager manager, Lock parentLock, IHardwareDeviceSession deviceSession, IWritableEvent bufferEvent)
{
_manager = manager;
_parentLock = parentLock;
diff --git a/src/Ryujinx.Audio/Output/AudioOutputManager.cs b/src/Ryujinx.Audio/Output/AudioOutputManager.cs
index 308cd1564..13e169a24 100644
--- a/src/Ryujinx.Audio/Output/AudioOutputManager.cs
+++ b/src/Ryujinx.Audio/Output/AudioOutputManager.cs
@@ -14,12 +14,12 @@ namespace Ryujinx.Audio.Output
///
public class AudioOutputManager : IDisposable
{
- private readonly object _lock = new();
+ private readonly Lock _lock = new();
///
/// Lock used for session allocation.
///
- private readonly object _sessionLock = new();
+ private readonly Lock _sessionLock = new();
///
/// The session ids allocation table.
diff --git a/src/Ryujinx.Audio/Output/AudioOutputSystem.cs b/src/Ryujinx.Audio/Output/AudioOutputSystem.cs
index f9b9bdcf1..dc7d52ced 100644
--- a/src/Ryujinx.Audio/Output/AudioOutputSystem.cs
+++ b/src/Ryujinx.Audio/Output/AudioOutputSystem.cs
@@ -48,7 +48,7 @@ namespace Ryujinx.Audio.Output
///
/// THe lock of the parent.
///
- private readonly object _parentLock;
+ private readonly Lock _parentLock;
///
/// The dispose state.
@@ -62,7 +62,7 @@ namespace Ryujinx.Audio.Output
/// The lock of the manager
/// The hardware device session
/// The buffer release event of the audio output
- public AudioOutputSystem(AudioOutputManager manager, object parentLock, IHardwareDeviceSession deviceSession, IWritableEvent bufferEvent)
+ public AudioOutputSystem(AudioOutputManager manager, Lock parentLock, IHardwareDeviceSession deviceSession, IWritableEvent bufferEvent)
{
_manager = manager;
_parentLock = parentLock;
diff --git a/src/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs b/src/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs
index 246889c48..65a134af1 100644
--- a/src/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs
+++ b/src/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs
@@ -26,7 +26,7 @@ namespace Ryujinx.Audio.Renderer.Server
{
public class AudioRenderSystem : IDisposable
{
- private readonly object _lock = new();
+ private readonly Lock _lock = new();
private AudioRendererRenderingDevice _renderingDevice;
private AudioRendererExecutionMode _executionMode;
diff --git a/src/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs b/src/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
index e334a89f6..6d7db059f 100644
--- a/src/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
+++ b/src/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
@@ -19,12 +19,12 @@ namespace Ryujinx.Audio.Renderer.Server
///
/// Lock used for session allocation.
///
- private readonly object _sessionLock = new();
+ private readonly Lock _sessionLock = new();
///
/// Lock used to control the running state.
///
- private readonly object _audioProcessorLock = new();
+ private readonly Lock _audioProcessorLock = new();
///
/// The session ids allocation table.
diff --git a/src/Ryujinx.Audio/Renderer/Server/Upsampler/UpsamplerManager.cs b/src/Ryujinx.Audio/Renderer/Server/Upsampler/UpsamplerManager.cs
index dbc2c9b3f..8b3f39439 100644
--- a/src/Ryujinx.Audio/Renderer/Server/Upsampler/UpsamplerManager.cs
+++ b/src/Ryujinx.Audio/Renderer/Server/Upsampler/UpsamplerManager.cs
@@ -1,5 +1,6 @@
using System;
using System.Diagnostics;
+using System.Threading;
namespace Ryujinx.Audio.Renderer.Server.Upsampler
{
@@ -16,7 +17,7 @@ namespace Ryujinx.Audio.Renderer.Server.Upsampler
///
/// Global lock of the object.
///
- private readonly object _lock = new();
+ private readonly Lock _lock = new();
///
/// The upsamplers instances.
diff --git a/src/Ryujinx.Audio/Ryujinx.Audio.csproj b/src/Ryujinx.Audio/Ryujinx.Audio.csproj
index 8901bbf59..92e0fe93f 100644
--- a/src/Ryujinx.Audio/Ryujinx.Audio.csproj
+++ b/src/Ryujinx.Audio/Ryujinx.Audio.csproj
@@ -1,7 +1,6 @@
- net8.0
true
$(DefaultItemExcludes);._*
diff --git a/src/Ryujinx.BuildValidationTasks/IValidationTask.cs b/src/Ryujinx.BuildValidationTasks/IValidationTask.cs
new file mode 100644
index 000000000..682d79a0a
--- /dev/null
+++ b/src/Ryujinx.BuildValidationTasks/IValidationTask.cs
@@ -0,0 +1,7 @@
+namespace Ryujinx.BuildValidationTasks
+{
+ public interface IValidationTask
+ {
+ public bool Execute(string projectPath, bool isGitRunner);
+ }
+}
diff --git a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs
new file mode 100644
index 000000000..1f2c39e95
--- /dev/null
+++ b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs
@@ -0,0 +1,117 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.IO;
+using System.Text.Json;
+using System.Text.Encodings.Web;
+
+namespace Ryujinx.BuildValidationTasks
+{
+ public class LocalesValidationTask : IValidationTask
+ {
+ public LocalesValidationTask() { }
+
+ public bool Execute(string projectPath, bool isGitRunner)
+ {
+ Console.WriteLine("Running Locale Validation Task...");
+
+ string path = projectPath + "src/Ryujinx/Assets/locales.json";
+ string data;
+
+ using (StreamReader sr = new(path))
+ {
+ data = sr.ReadToEnd();
+ }
+
+ LocalesJson json;
+
+ if (isGitRunner && data.Contains("\r\n"))
+ throw new FormatException("locales.json is using CRLF line endings! It should be using LF line endings, build locally to fix...");
+
+ try
+ {
+ json = JsonSerializer.Deserialize(data);
+
+ }
+ catch (JsonException e)
+ {
+ throw new JsonException(e.Message); //shorter and easier stacktrace
+ }
+
+
+
+ bool encounteredIssue = false;
+
+ for (int i = 0; i < json.Locales.Count; i++)
+ {
+ LocalesEntry locale = json.Locales[i];
+
+ foreach (string langCode in json.Languages.Where(lang => !locale.Translations.ContainsKey(lang)))
+ {
+ encounteredIssue = true;
+
+ if (!isGitRunner)
+ {
+ locale.Translations.Add(langCode, string.Empty);
+ Console.WriteLine($"Added '{langCode}' to Locale '{locale.ID}'");
+ }
+ else
+ {
+ Console.WriteLine($"Missing '{langCode}' in Locale '{locale.ID}'!");
+ }
+ }
+
+ foreach (string langCode in json.Languages.Where(lang => locale.Translations.ContainsKey(lang) && lang != "en_US" && locale.Translations[lang] == locale.Translations["en_US"]))
+ {
+ encounteredIssue = true;
+
+ if (!isGitRunner)
+ {
+ locale.Translations[langCode] = string.Empty;
+ Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'! Resetting it...");
+ }
+ else
+ {
+ Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'!");
+ }
+ }
+
+ locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value);
+ json.Locales[i] = locale;
+ }
+
+ if (isGitRunner && encounteredIssue)
+ throw new JsonException("1 or more locales are invalid!");
+
+ JsonSerializerOptions jsonOptions = new JsonSerializerOptions()
+ {
+ WriteIndented = true,
+ NewLine = "\n",
+ Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
+ };
+
+ string jsonString = JsonSerializer.Serialize(json, jsonOptions);
+
+ using (StreamWriter sw = new(path))
+ {
+ sw.Write(jsonString);
+ }
+
+ Console.WriteLine("Finished Locale Validation Task!");
+
+ return true;
+ }
+
+ struct LocalesJson
+ {
+ public List Languages { get; set; }
+ public List Locales { get; set; }
+ }
+
+ struct LocalesEntry
+ {
+ public string ID { get; set; }
+ public Dictionary Translations { get; set; }
+ }
+ }
+}
diff --git a/src/Ryujinx.BuildValidationTasks/Program.cs b/src/Ryujinx.BuildValidationTasks/Program.cs
new file mode 100644
index 000000000..ed1cee490
--- /dev/null
+++ b/src/Ryujinx.BuildValidationTasks/Program.cs
@@ -0,0 +1,37 @@
+using System;
+using System.IO;
+using System.Linq;
+
+namespace Ryujinx.BuildValidationTasks
+{
+ public class Program
+ {
+ static void Main(string[] args)
+ {
+ // Display the number of command line arguments.
+ if (args.Length == 0)
+ throw new ArgumentException("Error: too few arguments!");
+
+ string path = args[0];
+
+ if (string.IsNullOrEmpty(path))
+ throw new ArgumentException("Error: path is null or empty!");
+
+ if (!Path.Exists(path))
+ throw new FileLoadException($"path {{{path}}} does not exist!");
+
+ path = Path.GetFullPath(path);
+
+ if (!Directory.GetDirectories(path).Contains($"{path}src"))
+ throw new FileLoadException($"path {{{path}}} is not a valid ryujinx project!");
+
+ bool isGitRunner = path.Contains("runner") || path.Contains("D:\\a\\Ryujinx\\Ryujinx");
+ if (isGitRunner)
+ Console.WriteLine("Is Git Runner!");
+
+ // Run tasks
+ // Pass extra info needed in the task constructors
+ new LocalesValidationTask().Execute(path, isGitRunner);
+ }
+ }
+}
diff --git a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj
new file mode 100644
index 000000000..c9fea9313
--- /dev/null
+++ b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj
@@ -0,0 +1,17 @@
+
+
+
+ Exe
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Ryujinx.Common/Configuration/AspectRatioExtensions.cs b/src/Ryujinx.Common/Configuration/AspectRatioExtensions.cs
index bae6e35de..05dbe67d9 100644
--- a/src/Ryujinx.Common/Configuration/AspectRatioExtensions.cs
+++ b/src/Ryujinx.Common/Configuration/AspectRatioExtensions.cs
@@ -35,6 +35,8 @@ namespace Ryujinx.Common.Configuration
#pragma warning restore IDE0055
};
}
+
+
public static float ToFloatY(this AspectRatio aspectRatio)
{
diff --git a/src/Ryujinx.Common/Configuration/DirtyHack.cs b/src/Ryujinx.Common/Configuration/DirtyHack.cs
new file mode 100644
index 000000000..9ab9a26a5
--- /dev/null
+++ b/src/Ryujinx.Common/Configuration/DirtyHack.cs
@@ -0,0 +1,60 @@
+using Gommon;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Ryujinx.Common.Configuration
+{
+ [Flags]
+ public enum DirtyHack : byte
+ {
+ Xc2MenuSoftlockFix = 1,
+ ShaderTranslationDelay = 2
+ }
+
+ public readonly struct EnabledDirtyHack(DirtyHack hack, int value)
+ {
+ public DirtyHack Hack => hack;
+ public int Value => value;
+
+
+
+ public ulong Pack() => Raw.PackBitFields(PackedFormat);
+
+ public static EnabledDirtyHack Unpack(ulong packedHack)
+ {
+ var unpackedFields = packedHack.UnpackBitFields(PackedFormat);
+ if (unpackedFields is not [var hack, var value])
+ throw new Exception("The unpack operation on the integer resulted in an invalid unpacked result.");
+
+ return new EnabledDirtyHack((DirtyHack)hack, (int)value);
+ }
+
+ private uint[] Raw => [(uint)Hack, (uint)Value.CoerceAtLeast(0)];
+
+ public static readonly byte[] PackedFormat = [8, 32];
+ }
+
+ public class DirtyHacks : Dictionary
+ {
+ public DirtyHacks(IEnumerable hacks)
+ => hacks.ForEach(edh => Add(edh.Hack, edh.Value));
+
+ public DirtyHacks(ulong[] packedHacks) : this(packedHacks.Select(EnabledDirtyHack.Unpack)) {}
+
+ public ulong[] PackEntries()
+ => Entries.Select(it => it.Pack()).ToArray();
+
+ public EnabledDirtyHack[] Entries
+ => this
+ .Select(it => new EnabledDirtyHack(it.Key, it.Value))
+ .ToArray();
+
+ public static implicit operator DirtyHacks(EnabledDirtyHack[] hacks) => new(hacks);
+ public static implicit operator DirtyHacks(ulong[] packedHacks) => new(packedHacks);
+
+ public new int this[DirtyHack hack] => TryGetValue(hack, out var value) ? value : -1;
+
+ public bool IsEnabled(DirtyHack hack) => ContainsKey(hack);
+ }
+}
diff --git a/src/Ryujinx.Common/Configuration/GraphicsBackend.cs b/src/Ryujinx.Common/Configuration/GraphicsBackend.cs
index e3b4f91b0..9d399d560 100644
--- a/src/Ryujinx.Common/Configuration/GraphicsBackend.cs
+++ b/src/Ryujinx.Common/Configuration/GraphicsBackend.cs
@@ -6,7 +6,9 @@ namespace Ryujinx.Common.Configuration
[JsonConverter(typeof(TypedStringEnumConverter))]
public enum GraphicsBackend
{
+ Auto,
Vulkan,
OpenGl,
+ Metal
}
}
diff --git a/src/Ryujinx.Common/Configuration/ScalingFilter.cs b/src/Ryujinx.Common/Configuration/ScalingFilter.cs
index 1c6a74b3a..474685d49 100644
--- a/src/Ryujinx.Common/Configuration/ScalingFilter.cs
+++ b/src/Ryujinx.Common/Configuration/ScalingFilter.cs
@@ -9,5 +9,6 @@ namespace Ryujinx.Common.Configuration
Bilinear,
Nearest,
Fsr,
+ Area,
}
}
diff --git a/src/Ryujinx.Common/Extensions/StreamExtensions.cs b/src/Ryujinx.Common/Extensions/StreamExtensions.cs
index 4b02781c9..59ff44edc 100644
--- a/src/Ryujinx.Common/Extensions/StreamExtensions.cs
+++ b/src/Ryujinx.Common/Extensions/StreamExtensions.cs
@@ -8,10 +8,10 @@ namespace Ryujinx.Common
public static class StreamExtensions
{
///
- /// Writes a to this stream.
+ /// Writes an int span to this stream.
///
/// This default implementation converts each buffer value to a stack-allocated
- /// byte array, then writes it to the Stream using .
+ /// byte array, then writes it to the Stream using .
///
/// The stream to be written to
/// The buffer of values to be written
diff --git a/src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs b/src/Ryujinx.Common/Helpers/ConsoleHelper.cs
similarity index 98%
rename from src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs
rename to src/Ryujinx.Common/Helpers/ConsoleHelper.cs
index 99b209c6e..105c9881e 100644
--- a/src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs
+++ b/src/Ryujinx.Common/Helpers/ConsoleHelper.cs
@@ -3,7 +3,7 @@ using System;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
-namespace Ryujinx.UI.Common.Helper
+namespace Ryujinx.Common.Helper
{
public static partial class ConsoleHelper
{
diff --git a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs b/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs
similarity index 97%
rename from src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs
rename to src/Ryujinx.Common/Helpers/FileAssociationHelper.cs
index 9333a1b76..476aee228 100644
--- a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs
+++ b/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs
@@ -8,7 +8,7 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
-namespace Ryujinx.UI.Common.Helper
+namespace Ryujinx.Common.Helper
{
public static partial class FileAssociationHelper
{
@@ -23,7 +23,7 @@ namespace Ryujinx.UI.Common.Helper
[LibraryImport("shell32.dll", SetLastError = true)]
public static partial void SHChangeNotify(uint wEventId, uint uFlags, nint dwItem1, nint dwItem2);
- public static bool IsTypeAssociationSupported => (OperatingSystem.IsLinux() || OperatingSystem.IsWindows()) && !ReleaseInformation.IsFlatHubBuild;
+ public static bool IsTypeAssociationSupported => (OperatingSystem.IsLinux() || OperatingSystem.IsWindows());
public static bool AreMimeTypesRegistered
{
@@ -132,7 +132,7 @@ namespace Ryujinx.UI.Common.Helper
if (uninstall)
{
- // If the types don't already exist, there's nothing to do and we can call this operation successful.
+ // If the types don't already exist, there's nothing to do, and we can call this operation successful.
if (!AreMimeTypesRegisteredWindows())
{
return true;
diff --git a/src/Ryujinx.UI.Common/Helper/LinuxHelper.cs b/src/Ryujinx.Common/Helpers/LinuxHelper.cs
similarity index 98%
rename from src/Ryujinx.UI.Common/Helper/LinuxHelper.cs
rename to src/Ryujinx.Common/Helpers/LinuxHelper.cs
index b57793791..2adfd20f8 100644
--- a/src/Ryujinx.UI.Common/Helper/LinuxHelper.cs
+++ b/src/Ryujinx.Common/Helpers/LinuxHelper.cs
@@ -3,7 +3,7 @@ using System.Diagnostics;
using System.IO;
using System.Runtime.Versioning;
-namespace Ryujinx.UI.Common.Helper
+namespace Ryujinx.Common.Helper
{
[SupportedOSPlatform("linux")]
public static class LinuxHelper
diff --git a/src/Ryujinx.UI.Common/Helper/ObjectiveC.cs b/src/Ryujinx.Common/Helpers/ObjectiveC.cs
similarity index 99%
rename from src/Ryujinx.UI.Common/Helper/ObjectiveC.cs
rename to src/Ryujinx.Common/Helpers/ObjectiveC.cs
index f8f972098..d8e02f54d 100644
--- a/src/Ryujinx.UI.Common/Helper/ObjectiveC.cs
+++ b/src/Ryujinx.Common/Helpers/ObjectiveC.cs
@@ -2,7 +2,7 @@ using System;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
-namespace Ryujinx.UI.Common.Helper
+namespace Ryujinx.Common.Helper
{
[SupportedOSPlatform("macos")]
public static partial class ObjectiveC
diff --git a/src/Ryujinx.UI.Common/Helper/OpenHelper.cs b/src/Ryujinx.Common/Helpers/OpenHelper.cs
similarity index 97%
rename from src/Ryujinx.UI.Common/Helper/OpenHelper.cs
rename to src/Ryujinx.Common/Helpers/OpenHelper.cs
index 8b0e1f1fd..6a54b69f3 100644
--- a/src/Ryujinx.UI.Common/Helper/OpenHelper.cs
+++ b/src/Ryujinx.Common/Helpers/OpenHelper.cs
@@ -1,10 +1,11 @@
+using Gommon;
using Ryujinx.Common.Logging;
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
-namespace Ryujinx.UI.Common.Helper
+namespace Ryujinx.Common.Helper
{
public static partial class OpenHelper
{
@@ -34,6 +35,8 @@ namespace Ryujinx.UI.Common.Helper
}
}
+ public static void OpenFolder(FilePath path) => OpenFolder(path.Path);
+
public static void LocateFile(string path)
{
if (File.Exists(path))
diff --git a/src/Ryujinx.Common/Logging/Logger.cs b/src/Ryujinx.Common/Logging/Logger.cs
index 26d343969..6ea6b7ac3 100644
--- a/src/Ryujinx.Common/Logging/Logger.cs
+++ b/src/Ryujinx.Common/Logging/Logger.cs
@@ -4,6 +4,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
+using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading;
@@ -157,21 +158,16 @@ namespace Ryujinx.Common.Logging
_time.Restart();
}
- private static ILogTarget GetTarget(string targetName)
- {
- foreach (var target in _logTargets)
- {
- if (target.Name.Equals(targetName))
- {
- return target;
- }
- }
-
- return null;
- }
+ private static ILogTarget GetTarget(string targetName)
+ => _logTargets.FirstOrDefault(target => target.Name.Equals(targetName));
public static void AddTarget(ILogTarget target)
{
+ if (_logTargets.Any(t => t.Name == target.Name))
+ {
+ return;
+ }
+
_logTargets.Add(target);
Updated += target.Log;
diff --git a/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs b/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs
index a9dbe646a..1fcfea4da 100644
--- a/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs
+++ b/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs
@@ -27,11 +27,7 @@ namespace Ryujinx.Common.Logging.Targets
private readonly int _overflowTimeout;
- string ILogTarget.Name { get => _target.Name; }
-
- public AsyncLogTargetWrapper(ILogTarget target)
- : this(target, -1)
- { }
+ string ILogTarget.Name => _target.Name;
public AsyncLogTargetWrapper(ILogTarget target, int queueLimit = -1, AsyncLogTargetOverflowAction overflowAction = AsyncLogTargetOverflowAction.Block)
{
diff --git a/src/Ryujinx.Common/PreciseSleep/NanosleepPool.cs b/src/Ryujinx.Common/PreciseSleep/NanosleepPool.cs
index c0973dcb3..45b8e95fa 100644
--- a/src/Ryujinx.Common/PreciseSleep/NanosleepPool.cs
+++ b/src/Ryujinx.Common/PreciseSleep/NanosleepPool.cs
@@ -124,7 +124,7 @@ namespace Ryujinx.Common.PreciseSleep
}
}
- private readonly object _lock = new();
+ private readonly Lock _lock = new();
private readonly List _threads = new();
private readonly List _active = new();
private readonly Stack _free = new();
diff --git a/src/Ryujinx.Common/PreciseSleep/WindowsGranularTimer.cs b/src/Ryujinx.Common/PreciseSleep/WindowsGranularTimer.cs
index 3bf092704..cef4dc927 100644
--- a/src/Ryujinx.Common/PreciseSleep/WindowsGranularTimer.cs
+++ b/src/Ryujinx.Common/PreciseSleep/WindowsGranularTimer.cs
@@ -50,7 +50,7 @@ namespace Ryujinx.Common.SystemInterop
private long _lastTicks = PerformanceCounter.ElapsedTicks;
private long _lastId;
- private readonly object _lock = new();
+ private readonly Lock _lock = new();
private readonly List _waitingObjects = new();
private WindowsGranularTimer()
diff --git a/src/Ryujinx.Common/ReactiveObject.cs b/src/Ryujinx.Common/ReactiveObject.cs
index 8df1e20fe..bb2ece81c 100644
--- a/src/Ryujinx.Common/ReactiveObject.cs
+++ b/src/Ryujinx.Common/ReactiveObject.cs
@@ -53,6 +53,9 @@ namespace Ryujinx.Common
{
public static void LogValueChange(LogClass logClass, ReactiveEventArgs eventArgs, string valueName)
{
+ if (eventArgs.AreValuesEqual)
+ return;
+
string message = string.Create(CultureInfo.InvariantCulture, $"{valueName} set to: {eventArgs.NewValue}");
Logger.Info?.Print(logClass, message);
@@ -65,5 +68,22 @@ namespace Ryujinx.Common
{
public T OldValue { get; } = oldValue;
public T NewValue { get; } = newValue;
+
+ public bool AreValuesEqual
+ {
+ get
+ {
+ if (OldValue == null && NewValue == null)
+ return true;
+
+ if (OldValue == null && NewValue != null)
+ return false;
+
+ if (OldValue != null && NewValue == null)
+ return false;
+
+ return OldValue!.Equals(NewValue);
+ }
+ }
}
}
diff --git a/src/Ryujinx.Common/ReleaseInformation.cs b/src/Ryujinx.Common/ReleaseInformation.cs
index 011d9848a..cbf93013f 100644
--- a/src/Ryujinx.Common/ReleaseInformation.cs
+++ b/src/Ryujinx.Common/ReleaseInformation.cs
@@ -6,7 +6,6 @@ namespace Ryujinx.Common
// DO NOT EDIT, filled by CI
public static class ReleaseInformation
{
- private const string FlatHubChannel = "flathub";
private const string CanaryChannel = "canary";
private const string ReleaseChannel = "release";
@@ -29,8 +28,6 @@ namespace Ryujinx.Common
!ReleaseChannelRepo.StartsWith("%%") &&
!ConfigFileName.StartsWith("%%");
- public static bool IsFlatHubBuild => IsValid && ReleaseChannelOwner.Equals(FlatHubChannel);
-
public static bool IsCanaryBuild => IsValid && ReleaseChannelName.Equals(CanaryChannel);
public static bool IsReleaseBuild => IsValid && ReleaseChannelName.Equals(ReleaseChannel);
diff --git a/src/Ryujinx.Common/Ryujinx.Common.csproj b/src/Ryujinx.Common/Ryujinx.Common.csproj
index 85d4b58bd..de163aae7 100644
--- a/src/Ryujinx.Common/Ryujinx.Common.csproj
+++ b/src/Ryujinx.Common/Ryujinx.Common.csproj
@@ -1,7 +1,6 @@
- net8.0
true
$(DefineConstants);$(ExtraDefineConstants)
$(DefaultItemExcludes);._*
diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx.Common/TitleIDs.cs
similarity index 61%
rename from src/Ryujinx.UI.Common/DiscordIntegrationModule.cs
rename to src/Ryujinx.Common/TitleIDs.cs
index 338d28531..43a1f2393 100644
--- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs
+++ b/src/Ryujinx.Common/TitleIDs.cs
@@ -1,129 +1,51 @@
-using DiscordRPC;
-using Humanizer;
-using Humanizer.Localisation;
-using Ryujinx.Common;
-using Ryujinx.HLE.Loaders.Processes;
-using Ryujinx.UI.App.Common;
-using Ryujinx.UI.Common.Configuration;
+using Gommon;
+using Ryujinx.Common.Configuration;
+using System;
using System.Linq;
-using System.Text;
+using System.Runtime.InteropServices;
-namespace Ryujinx.UI.Common
+namespace Ryujinx.Common
{
- public static class DiscordIntegrationModule
+ public static class TitleIDs
{
- public static Timestamps StartedAt { get; set; }
-
- private static string VersionString
- => (ReleaseInformation.IsCanaryBuild ? "Canary " : string.Empty) + $"v{ReleaseInformation.Version}";
-
- private static readonly string _description =
- ReleaseInformation.IsValid
- ? $"{VersionString} {ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelSourceRepo}@{ReleaseInformation.BuildGitHash}"
- : "dev build";
-
- private const string ApplicationId = "1293250299716173864";
-
- private const int ApplicationByteLimit = 128;
- private const string Ellipsis = "…";
-
- private static DiscordRpcClient _discordClient;
- private static RichPresence _discordPresenceMain;
-
- public static void Initialize()
+ public static ReactiveObject> CurrentApplication { get; set; } = new();
+
+ public static GraphicsBackend SelectGraphicsBackend(string titleId, GraphicsBackend currentBackend)
{
- _discordPresenceMain = new RichPresence
+ switch (currentBackend)
{
- Assets = new Assets
- {
- LargeImageKey = "ryujinx",
- LargeImageText = TruncateToByteLength(_description)
- },
- Details = "Main Menu",
- State = "Idling",
- Timestamps = StartedAt
- };
-
- ConfigurationState.Instance.EnableDiscordIntegration.Event += Update;
- }
-
- private static void Update(object sender, ReactiveEventArgs evnt)
- {
- if (evnt.OldValue != evnt.NewValue)
- {
- // If the integration was active, disable it and unload everything
- if (evnt.OldValue)
- {
- _discordClient?.Dispose();
-
- _discordClient = null;
- }
-
- // If we need to activate it and the client isn't active, initialize it
- if (evnt.NewValue && _discordClient == null)
- {
- _discordClient = new DiscordRpcClient(ApplicationId);
-
- _discordClient.Initialize();
- _discordClient.SetPresence(_discordPresenceMain);
- }
- }
- }
-
- public static void SwitchToPlayingState(ApplicationMetadata appMeta, ProcessResult procRes)
- {
- _discordClient?.SetPresence(new RichPresence
- {
- Assets = new Assets
- {
- LargeImageKey = _discordGameAssetKeys.Contains(procRes.ProgramIdText) ? procRes.ProgramIdText : "game",
- LargeImageText = TruncateToByteLength($"{appMeta.Title} (v{procRes.DisplayVersion})"),
- SmallImageKey = "ryujinx",
- SmallImageText = TruncateToByteLength(_description)
- },
- Details = TruncateToByteLength($"Playing {appMeta.Title}"),
- State = appMeta.LastPlayed.HasValue && appMeta.TimePlayed.TotalSeconds > 5
- ? $"Total play time: {appMeta.TimePlayed.Humanize(2, false, maxUnit: TimeUnit.Hour)}"
- : "Never played",
- Timestamps = Timestamps.Now
- });
- }
-
- public static void SwitchToMainState() => _discordClient?.SetPresence(_discordPresenceMain);
-
- private static string TruncateToByteLength(string input)
- {
- if (Encoding.UTF8.GetByteCount(input) <= ApplicationByteLimit)
- {
- return input;
+ case GraphicsBackend.OpenGl when OperatingSystem.IsMacOS():
+ return GraphicsBackend.Vulkan;
+ case GraphicsBackend.Vulkan or GraphicsBackend.OpenGl or GraphicsBackend.Metal:
+ return currentBackend;
}
- // Find the length to trim the string to guarantee we have space for the trailing ellipsis.
- int trimLimit = ApplicationByteLimit - Encoding.UTF8.GetByteCount(Ellipsis);
+ if (!(OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture is Architecture.Arm64))
+ return GraphicsBackend.Vulkan;
- // Make sure the string is long enough to perform the basic trim.
- // Amount of bytes != Length of the string
- if (input.Length > trimLimit)
- {
- // Basic trim to best case scenario of 1 byte characters.
- input = input[..trimLimit];
- }
-
- while (Encoding.UTF8.GetByteCount(input) > trimLimit)
- {
- // Remove one character from the end of the string at a time.
- input = input[..^1];
- }
-
- return input.TrimEnd() + Ellipsis;
+ return GreatMetalTitles.ContainsIgnoreCase(titleId) ? GraphicsBackend.Metal : GraphicsBackend.Vulkan;
}
+
+ public static readonly string[] GreatMetalTitles =
+ [
+ "01006f8002326000", // Animal Crossings: New Horizons
+ "01009bf0072d4000", // Captain Toad: Treasure Tracker
+ "0100a5c00d162000", // Cuphead
+ "010023800d64a000", // Deltarune
+ "010028600EBDA000", // Mario 3D World
+ "0100152000022000", // Mario Kart 8 Deluxe
+ "01005CA01580E000", // Persona 5
+ "0100187003A36000", // Pokémon: Let's Go, Evoli!
+ "010003f003a34000", // Pokémon: Let's Go, Pikachu!
+ "01008C0016544000", // Sea of Stars
+ "01006A800016E000", // Smash Ultimate
+ "0100000000010000", // Super Mario Odyessy
+ ];
+
+ public static string GetDiscordGameAsset(string titleId)
+ => DiscordGameAssetKeys.Contains(titleId) ? titleId : "game";
- public static void Exit()
- {
- _discordClient?.Dispose();
- }
-
- private static readonly string[] _discordGameAssetKeys =
+ public static readonly string[] DiscordGameAssetKeys =
[
"010055d009f78000", // Fire Emblem: Three Houses
"0100a12011cc8000", // Fire Emblem: Shadow Dragon
@@ -249,6 +171,7 @@ namespace Ryujinx.UI.Common
"0100b41013c82000", // Cruis'n Blast
"01001b300b9be000", // Diablo III: Eternal Collection
"01008c8012920000", // Dying Light Platinum Edition
+ "01001cc01b2d4000", // Goat Simulator 3
"010073c01af34000", // LEGO Horizon Adventures
"0100770008dd8000", // Monster Hunter Generations Ultimate
"0100b04011742000", // Monster Hunter Rise
diff --git a/src/Ryujinx.UI.Common/UserError.cs b/src/Ryujinx.Common/UI/UserError.cs
similarity index 96%
rename from src/Ryujinx.UI.Common/UserError.cs
rename to src/Ryujinx.Common/UI/UserError.cs
index 706971efa..cdcc42eac 100644
--- a/src/Ryujinx.UI.Common/UserError.cs
+++ b/src/Ryujinx.Common/UI/UserError.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.UI.Common
+namespace Ryujinx.Common.UI
{
///
/// Represent a common error that could be reported to the user by the emulator.
diff --git a/src/Ryujinx.Common/Utilities/BitUtils.cs b/src/Ryujinx.Common/Utilities/BitUtils.cs
index b9dae2e53..acbdde1f6 100644
--- a/src/Ryujinx.Common/Utilities/BitUtils.cs
+++ b/src/Ryujinx.Common/Utilities/BitUtils.cs
@@ -40,5 +40,35 @@ namespace Ryujinx.Common
return (value >> 32) | (value << 32);
}
+
+ // Never actually written bit packing logic before, so I looked it up.
+ // This code is from https://gist.github.com/Alan-FGR/04938e93e2bffdf5802ceb218a37c195
+
+ public static ulong PackBitFields(this uint[] values, byte[] bitFields)
+ {
+ ulong retVal = values[0]; //we set the first value right away
+ for (int f = 1; f < values.Length; f++)
+ {
+ retVal <<= bitFields[f]; // we shift the previous value
+ retVal += values[f];// and add our current value
+ }
+ return retVal;
+ }
+
+ public static uint[] UnpackBitFields(this ulong packed, byte[] bitFields)
+ {
+ int fields = bitFields.Length - 1; // number of fields to unpack
+ uint[] retArr = new uint[fields + 1]; // init return array
+ int curPos = 0; // current field bit position (start)
+ int lastEnd; // position where last field ended
+ for (int f = fields; f >= 0; f--) // loop from last
+ {
+ lastEnd = curPos; // we store where the last value ended
+ curPos += bitFields[f]; // we get where the current value starts
+ int leftShift = 64 - curPos; // we figure how much left shift we gotta apply for the other numbers to overflow into oblivion
+ retArr[f] = (uint)((packed << leftShift) >> leftShift + lastEnd); // we do magic
+ }
+ return retArr;
+ }
}
}
diff --git a/src/Ryujinx.Common/Utilities/JsonHelper.cs b/src/Ryujinx.Common/Utilities/JsonHelper.cs
index 276dd5f8c..82eeaddc1 100644
--- a/src/Ryujinx.Common/Utilities/JsonHelper.cs
+++ b/src/Ryujinx.Common/Utilities/JsonHelper.cs
@@ -1,3 +1,4 @@
+using System;
using System.IO;
using System.Text;
using System.Text.Json;
@@ -27,9 +28,14 @@ namespace Ryujinx.Common.Utilities
ReadCommentHandling = JsonCommentHandling.Skip
};
- public static string Serialize(T value, JsonTypeInfo typeInfo) => JsonSerializer.Serialize(value, typeInfo);
+ public static string Serialize(T value, JsonTypeInfo typeInfo)
+ => JsonSerializer.Serialize(value, typeInfo);
- public static T Deserialize(string value, JsonTypeInfo typeInfo) => JsonSerializer.Deserialize(value, typeInfo);
+ public static T Deserialize(string value, JsonTypeInfo typeInfo)
+ => JsonSerializer.Deserialize(value, typeInfo);
+
+ public static T Deserialize(ReadOnlySpan utf8Value, JsonTypeInfo typeInfo)
+ => JsonSerializer.Deserialize(utf8Value, typeInfo);
public static void SerializeToFile(string filePath, T value, JsonTypeInfo typeInfo)
{
diff --git a/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs b/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs
index bb56a4344..74c39d6a8 100644
--- a/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs
+++ b/src/Ryujinx.Cpu/AppleHv/HvMemoryManager.cs
@@ -230,25 +230,20 @@ namespace Ryujinx.Cpu.AppleHv
{
if (size == 0)
{
- return Enumerable.Empty();
+ yield break;
}
var guestRegions = GetPhysicalRegionsImpl(va, size);
if (guestRegions == null)
{
- return null;
+ yield break;
}
- var regions = new HostMemoryRange[guestRegions.Count];
-
- for (int i = 0; i < regions.Length; i++)
+ foreach (var guestRegion in guestRegions)
{
- var guestRegion = guestRegions[i];
nint pointer = _backingMemory.GetPointer(guestRegion.Address, guestRegion.Size);
- regions[i] = new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size);
+ yield return new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size);
}
-
- return regions;
}
///
@@ -256,23 +251,24 @@ namespace Ryujinx.Cpu.AppleHv
{
if (size == 0)
{
- return Enumerable.Empty();
+ yield break;
}
- return GetPhysicalRegionsImpl(va, size);
+ foreach (var physicalRegion in GetPhysicalRegionsImpl(va, size))
+ {
+ yield return physicalRegion;
+ }
}
- private List GetPhysicalRegionsImpl(ulong va, ulong size)
+ private IEnumerable GetPhysicalRegionsImpl(ulong va, ulong size)
{
if (!ValidateAddress(va) || !ValidateAddressAndSize(va, size))
{
- return null;
+ yield break;
}
int pages = GetPagesCount(va, (uint)size, out va);
- var regions = new List();
-
ulong regionStart = GetPhysicalAddressInternal(va);
ulong regionSize = PageSize;
@@ -280,14 +276,14 @@ namespace Ryujinx.Cpu.AppleHv
{
if (!ValidateAddress(va + PageSize))
{
- return null;
+ yield break;
}
ulong newPa = GetPhysicalAddressInternal(va + PageSize);
if (GetPhysicalAddressInternal(va) + PageSize != newPa)
{
- regions.Add(new MemoryRange(regionStart, regionSize));
+ yield return new MemoryRange(regionStart, regionSize);
regionStart = newPa;
regionSize = 0;
}
@@ -296,9 +292,7 @@ namespace Ryujinx.Cpu.AppleHv
regionSize += PageSize;
}
- regions.Add(new MemoryRange(regionStart, regionSize));
-
- return regions;
+ yield return new MemoryRange(regionStart, regionSize);
}
///
diff --git a/src/Ryujinx.Cpu/AppleHv/HvVm.cs b/src/Ryujinx.Cpu/AppleHv/HvVm.cs
index a12bbea9b..b4d45f36d 100644
--- a/src/Ryujinx.Cpu/AppleHv/HvVm.cs
+++ b/src/Ryujinx.Cpu/AppleHv/HvVm.cs
@@ -1,6 +1,7 @@
using Ryujinx.Memory;
using System;
using System.Runtime.Versioning;
+using System.Threading;
namespace Ryujinx.Cpu.AppleHv
{
@@ -12,7 +13,7 @@ namespace Ryujinx.Cpu.AppleHv
private static int _addressSpaces;
private static HvIpaAllocator _ipaAllocator;
- private static readonly object _lock = new();
+ private static readonly Lock _lock = new();
public static (ulong, HvIpaAllocator) CreateAddressSpace(MemoryBlock block)
{
diff --git a/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartitionAllocator.cs b/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartitionAllocator.cs
index a49e0179d..f39b295cd 100644
--- a/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartitionAllocator.cs
+++ b/src/Ryujinx.Cpu/Jit/HostTracked/AddressSpacePartitionAllocator.cs
@@ -115,6 +115,9 @@ namespace Ryujinx.Cpu.Jit.HostTracked
}
private readonly AddressIntrusiveRedBlackTree _mappingTree;
+
+ // type is not Lock due to the unique usage of this mechanism,
+ // an arbitrary object is used as the lock passed in by constructor.
private readonly object _lock;
public Block(MemoryTracking tracking, Func readPtCallback, MemoryBlock memory, ulong size, object locker) : base(memory, size)
@@ -174,6 +177,9 @@ namespace Ryujinx.Cpu.Jit.HostTracked
private readonly MemoryTracking _tracking;
private readonly Func _readPtCallback;
+
+ // type is not Lock due to the unique usage of this mechanism,
+ // an arbitrary object is used as the lock passed in by constructor.
private readonly object _lock;
public AddressSpacePartitionAllocator(
diff --git a/src/Ryujinx.Cpu/Jit/MemoryManager.cs b/src/Ryujinx.Cpu/Jit/MemoryManager.cs
index 049e508d0..076fb6ad8 100644
--- a/src/Ryujinx.Cpu/Jit/MemoryManager.cs
+++ b/src/Ryujinx.Cpu/Jit/MemoryManager.cs
@@ -250,25 +250,20 @@ namespace Ryujinx.Cpu.Jit
{
if (size == 0)
{
- return Enumerable.Empty();
+ yield break;
}
var guestRegions = GetPhysicalRegionsImpl(va, size);
if (guestRegions == null)
{
- return null;
+ yield break;
}
- var regions = new HostMemoryRange[guestRegions.Count];
-
- for (int i = 0; i < regions.Length; i++)
+ foreach (var guestRegion in guestRegions)
{
- var guestRegion = guestRegions[i];
nint pointer = _backingMemory.GetPointer(guestRegion.Address, guestRegion.Size);
- regions[i] = new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size);
+ yield return new HostMemoryRange((nuint)(ulong)pointer, guestRegion.Size);
}
-
- return regions;
}
///
@@ -276,23 +271,24 @@ namespace Ryujinx.Cpu.Jit
{
if (size == 0)
{
- return Enumerable.Empty();
+ yield break;
}
- return GetPhysicalRegionsImpl(va, size);
+ foreach (var physicalRegion in GetPhysicalRegionsImpl(va, size))
+ {
+ yield return physicalRegion;
+ }
}
- private List GetPhysicalRegionsImpl(ulong va, ulong size)
+ private IEnumerable GetPhysicalRegionsImpl(ulong va, ulong size)
{
if (!ValidateAddress(va) || !ValidateAddressAndSize(va, size))
{
- return null;
+ yield break;
}
int pages = GetPagesCount(va, (uint)size, out va);
- var regions = new List();
-
ulong regionStart = GetPhysicalAddressInternal(va);
ulong regionSize = PageSize;
@@ -300,14 +296,14 @@ namespace Ryujinx.Cpu.Jit
{
if (!ValidateAddress(va + PageSize))
{
- return null;
+ yield break;
}
ulong newPa = GetPhysicalAddressInternal(va + PageSize);
if (GetPhysicalAddressInternal(va) + PageSize != newPa)
{
- regions.Add(new MemoryRange(regionStart, regionSize));
+ yield return new MemoryRange(regionStart, regionSize);
regionStart = newPa;
regionSize = 0;
}
@@ -316,9 +312,7 @@ namespace Ryujinx.Cpu.Jit
regionSize += PageSize;
}
- regions.Add(new MemoryRange(regionStart, regionSize));
-
- return regions;
+ yield return new MemoryRange(regionStart, regionSize);
}
///
diff --git a/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs b/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs
index 4dab212a7..499f991f2 100644
--- a/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs
+++ b/src/Ryujinx.Cpu/Jit/MemoryManagerHostTracked.cs
@@ -475,17 +475,15 @@ namespace Ryujinx.Cpu.Jit
return GetPhysicalRegionsImpl(va, size);
}
- private List GetPhysicalRegionsImpl(ulong va, ulong size)
+ private IEnumerable GetPhysicalRegionsImpl(ulong va, ulong size)
{
if (!ValidateAddress(va) || !ValidateAddressAndSize(va, size))
{
- return null;
+ yield break;
}
int pages = GetPagesCount(va, (uint)size, out va);
- var regions = new List();
-
ulong regionStart = GetPhysicalAddressInternal(va);
ulong regionSize = PageSize;
@@ -493,14 +491,14 @@ namespace Ryujinx.Cpu.Jit
{
if (!ValidateAddress(va + PageSize))
{
- return null;
+ yield break;
}
ulong newPa = GetPhysicalAddressInternal(va + PageSize);
if (GetPhysicalAddressInternal(va) + PageSize != newPa)
{
- regions.Add(new MemoryRange(regionStart, regionSize));
+ yield return new MemoryRange(regionStart, regionSize);
regionStart = newPa;
regionSize = 0;
}
@@ -509,9 +507,7 @@ namespace Ryujinx.Cpu.Jit
regionSize += PageSize;
}
- regions.Add(new MemoryRange(regionStart, regionSize));
-
- return regions;
+ yield return new MemoryRange(regionStart, regionSize);
}
///
diff --git a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitSystem.cs b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitSystem.cs
index 4d97a2264..21e40b6aa 100644
--- a/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitSystem.cs
+++ b/src/Ryujinx.Cpu/LightningJit/Arm32/Target/Arm64/InstEmitSystem.cs
@@ -478,7 +478,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm32.Target.Arm64
bool skipContext,
int spillBaseOffset,
int? resultRegister,
- params ulong[] callArgs)
+ params ReadOnlySpan callArgs)
{
uint resultMask = 0u;
diff --git a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs
index f534e8b6e..bf9338400 100644
--- a/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs
+++ b/src/Ryujinx.Cpu/LightningJit/Arm64/Target/Arm64/InstEmitSystem.cs
@@ -307,7 +307,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
int tempRegister;
int tempGuestAddress = -1;
- bool inlineLookup = guestAddress.Kind != OperandKind.Constant &&
+ bool inlineLookup = guestAddress.Kind != OperandKind.Constant &&
funcTable is { Sparse: true };
if (guestAddress.Kind == OperandKind.Constant)
@@ -417,7 +417,7 @@ namespace Ryujinx.Cpu.LightningJit.Arm64.Target.Arm64
nint funcPtr,
int spillBaseOffset,
int? resultRegister,
- params ulong[] callArgs)
+ params ReadOnlySpan callArgs)
{
uint resultMask = 0u;
diff --git a/src/Ryujinx.Cpu/LightningJit/Cache/JitCache.cs b/src/Ryujinx.Cpu/LightningJit/Cache/JitCache.cs
index ac1274bf6..10ae050b6 100644
--- a/src/Ryujinx.Cpu/LightningJit/Cache/JitCache.cs
+++ b/src/Ryujinx.Cpu/LightningJit/Cache/JitCache.cs
@@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
+using System.Threading;
namespace Ryujinx.Cpu.LightningJit.Cache
{
@@ -23,7 +24,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
private static readonly List _cacheEntries = new();
- private static readonly object _lock = new();
+ private static readonly Lock _lock = new();
private static bool _initialized;
[SupportedOSPlatform("windows")]
diff --git a/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs b/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs
index 3cf279ae3..e9a342aba 100644
--- a/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs
+++ b/src/Ryujinx.Cpu/LightningJit/Cache/NoWxCache.cs
@@ -4,6 +4,7 @@ using Ryujinx.Memory;
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Threading;
namespace Ryujinx.Cpu.LightningJit.Cache
{
@@ -104,7 +105,7 @@ namespace Ryujinx.Cpu.LightningJit.Cache
private readonly MemoryCache _sharedCache;
private readonly MemoryCache _localCache;
private readonly PageAlignedRangeList _pendingMap;
- private readonly object _lock;
+ private readonly Lock _lock = new();
class ThreadLocalCacheEntry
{
@@ -137,7 +138,6 @@ namespace Ryujinx.Cpu.LightningJit.Cache
_sharedCache = new(allocator, SharedCacheSize);
_localCache = new(allocator, LocalCacheSize);
_pendingMap = new(_sharedCache.ReprotectAsRx, RegisterFunction);
- _lock = new();
}
public unsafe nint Map(nint framePointer, ReadOnlySpan code, ulong guestAddress, ulong guestSize)
diff --git a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/StackWalker.cs b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/StackWalker.cs
index 3ce7c4f9c..1432c4598 100644
--- a/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/StackWalker.cs
+++ b/src/Ryujinx.Cpu/LightningJit/CodeGen/Arm64/StackWalker.cs
@@ -8,8 +8,6 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
{
public IEnumerable GetCallStack(nint framePointer, nint codeRegionStart, int codeRegionSize, nint codeRegion2Start, int codeRegion2Size)
{
- List functionPointers = new();
-
while (true)
{
nint functionPointer = Marshal.ReadIntPtr(framePointer, nint.Size);
@@ -20,11 +18,9 @@ namespace Ryujinx.Cpu.LightningJit.CodeGen.Arm64
break;
}
- functionPointers.Add((ulong)functionPointer - 4);
+ yield return (ulong)functionPointer - 4;
framePointer = Marshal.ReadIntPtr(framePointer);
}
-
- return functionPointers;
}
}
}
diff --git a/src/Ryujinx.Cpu/Ryujinx.Cpu.csproj b/src/Ryujinx.Cpu/Ryujinx.Cpu.csproj
index 0a55a7dea..e58a2ce97 100644
--- a/src/Ryujinx.Cpu/Ryujinx.Cpu.csproj
+++ b/src/Ryujinx.Cpu/Ryujinx.Cpu.csproj
@@ -1,7 +1,6 @@
- net8.0
true
$(DefaultItemExcludes);._*
diff --git a/src/Ryujinx.Cpu/Signal/NativeSignalHandler.cs b/src/Ryujinx.Cpu/Signal/NativeSignalHandler.cs
index 2985f1c21..75a6d3bf8 100644
--- a/src/Ryujinx.Cpu/Signal/NativeSignalHandler.cs
+++ b/src/Ryujinx.Cpu/Signal/NativeSignalHandler.cs
@@ -5,6 +5,7 @@ using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using System.Threading;
namespace Ryujinx.Cpu.Signal
{
@@ -59,7 +60,7 @@ namespace Ryujinx.Cpu.Signal
private static MemoryBlock _codeBlock;
- private static readonly object _lock = new();
+ private static readonly Lock _lock = new();
private static bool _initialized;
static NativeSignalHandler()
diff --git a/src/Ryujinx.Graphics.Device/Ryujinx.Graphics.Device.csproj b/src/Ryujinx.Graphics.Device/Ryujinx.Graphics.Device.csproj
index 58f54de7d..cbe276355 100644
--- a/src/Ryujinx.Graphics.Device/Ryujinx.Graphics.Device.csproj
+++ b/src/Ryujinx.Graphics.Device/Ryujinx.Graphics.Device.csproj
@@ -1,7 +1,6 @@
- net8.0
$(DefaultItemExcludes);._*
diff --git a/src/Ryujinx.Graphics.GAL/AntiAliasing.cs b/src/Ryujinx.Graphics.GAL/AntiAliasing.cs
deleted file mode 100644
index 04b529764..000000000
--- a/src/Ryujinx.Graphics.GAL/AntiAliasing.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace Ryujinx.Graphics.GAL
-{
- public enum AntiAliasing
- {
- None,
- Fxaa,
- SmaaLow,
- SmaaMedium,
- SmaaHigh,
- SmaaUltra,
- }
-}
diff --git a/src/Ryujinx.Graphics.GAL/ComputeSize.cs b/src/Ryujinx.Graphics.GAL/ComputeSize.cs
new file mode 100644
index 000000000..ce9c2531c
--- /dev/null
+++ b/src/Ryujinx.Graphics.GAL/ComputeSize.cs
@@ -0,0 +1,18 @@
+namespace Ryujinx.Graphics.GAL
+{
+ public readonly struct ComputeSize
+ {
+ public readonly static ComputeSize VtgAsCompute = new ComputeSize(32, 32, 1);
+
+ public readonly int X;
+ public readonly int Y;
+ public readonly int Z;
+
+ public ComputeSize(int x, int y, int z)
+ {
+ X = x;
+ Y = y;
+ Z = z;
+ }
+ }
+}
diff --git a/src/Ryujinx.Graphics.GAL/Format.cs b/src/Ryujinx.Graphics.GAL/Format.cs
index 17c42d2d4..b1eb68f72 100644
--- a/src/Ryujinx.Graphics.GAL/Format.cs
+++ b/src/Ryujinx.Graphics.GAL/Format.cs
@@ -339,6 +339,84 @@ namespace Ryujinx.Graphics.GAL
return 1;
}
+ ///
+ /// Get bytes per element for this format.
+ ///
+ /// Texture format
+ /// Byte size for an element of this format (pixel, vertex attribute, etc)
+ public static int GetBytesPerElement(this Format format)
+ {
+ int scalarSize = format.GetScalarSize();
+
+ switch (format)
+ {
+ case Format.R8G8Unorm:
+ case Format.R8G8Snorm:
+ case Format.R8G8Uint:
+ case Format.R8G8Sint:
+ case Format.R8G8Uscaled:
+ case Format.R8G8Sscaled:
+ case Format.R16G16Float:
+ case Format.R16G16Unorm:
+ case Format.R16G16Snorm:
+ case Format.R16G16Uint:
+ case Format.R16G16Sint:
+ case Format.R16G16Uscaled:
+ case Format.R16G16Sscaled:
+ case Format.R32G32Float:
+ case Format.R32G32Uint:
+ case Format.R32G32Sint:
+ case Format.R32G32Uscaled:
+ case Format.R32G32Sscaled:
+ return 2 * scalarSize;
+
+ case Format.R8G8B8Unorm:
+ case Format.R8G8B8Snorm:
+ case Format.R8G8B8Uint:
+ case Format.R8G8B8Sint:
+ case Format.R8G8B8Uscaled:
+ case Format.R8G8B8Sscaled:
+ case Format.R16G16B16Float:
+ case Format.R16G16B16Unorm:
+ case Format.R16G16B16Snorm:
+ case Format.R16G16B16Uint:
+ case Format.R16G16B16Sint:
+ case Format.R16G16B16Uscaled:
+ case Format.R16G16B16Sscaled:
+ case Format.R32G32B32Float:
+ case Format.R32G32B32Uint:
+ case Format.R32G32B32Sint:
+ case Format.R32G32B32Uscaled:
+ case Format.R32G32B32Sscaled:
+ return 3 * scalarSize;
+
+ case Format.R8G8B8A8Unorm:
+ case Format.R8G8B8A8Snorm:
+ case Format.R8G8B8A8Uint:
+ case Format.R8G8B8A8Sint:
+ case Format.R8G8B8A8Srgb:
+ case Format.R8G8B8A8Uscaled:
+ case Format.R8G8B8A8Sscaled:
+ case Format.B8G8R8A8Unorm:
+ case Format.B8G8R8A8Srgb:
+ case Format.R16G16B16A16Float:
+ case Format.R16G16B16A16Unorm:
+ case Format.R16G16B16A16Snorm:
+ case Format.R16G16B16A16Uint:
+ case Format.R16G16B16A16Sint:
+ case Format.R16G16B16A16Uscaled:
+ case Format.R16G16B16A16Sscaled:
+ case Format.R32G32B32A32Float:
+ case Format.R32G32B32A32Uint:
+ case Format.R32G32B32A32Sint:
+ case Format.R32G32B32A32Uscaled:
+ case Format.R32G32B32A32Sscaled:
+ return 4 * scalarSize;
+ }
+
+ return scalarSize;
+ }
+
///
/// Checks if the texture format is a depth or depth-stencil format.
///
diff --git a/src/Ryujinx.Graphics.GAL/IWindow.cs b/src/Ryujinx.Graphics.GAL/IWindow.cs
index 12686cb28..48144f0b0 100644
--- a/src/Ryujinx.Graphics.GAL/IWindow.cs
+++ b/src/Ryujinx.Graphics.GAL/IWindow.cs
@@ -1,3 +1,4 @@
+using Ryujinx.Common.Configuration;
using System;
namespace Ryujinx.Graphics.GAL
diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs
index 0bd3dc592..6375d290c 100644
--- a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs
+++ b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedRenderer.cs
@@ -58,7 +58,7 @@ namespace Ryujinx.Graphics.GAL.Multithreading
public uint ProgramCount { get; set; } = 0;
private Action _interruptAction;
- private readonly object _interruptLock = new();
+ private readonly Lock _interruptLock = new();
public event EventHandler ScreenCaptured;
diff --git a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs
index 102fdb1bb..7a4836982 100644
--- a/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs
+++ b/src/Ryujinx.Graphics.GAL/Multithreading/ThreadedWindow.cs
@@ -1,3 +1,4 @@
+using Ryujinx.Common.Configuration;
using Ryujinx.Graphics.GAL.Multithreading.Commands.Window;
using Ryujinx.Graphics.GAL.Multithreading.Model;
using Ryujinx.Graphics.GAL.Multithreading.Resources;
diff --git a/src/Ryujinx.Graphics.GAL/Ryujinx.Graphics.GAL.csproj b/src/Ryujinx.Graphics.GAL/Ryujinx.Graphics.GAL.csproj
index a230296c1..b94a4ec90 100644
--- a/src/Ryujinx.Graphics.GAL/Ryujinx.Graphics.GAL.csproj
+++ b/src/Ryujinx.Graphics.GAL/Ryujinx.Graphics.GAL.csproj
@@ -1,7 +1,6 @@