diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml index a0653f540..d93d4fbed 100644 --- a/.github/workflows/canary.yml +++ b/.github/workflows/canary.yml @@ -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,71 +116,69 @@ 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 -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 + 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 + 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,release_output/*AppImage*" + artifacts: "release_output/*.tar.gz,release_output/*.zip,release_output/*AppImage*" tag: ${{ steps.version_info.outputs.build_version }} body: | # Canary builds: diff --git a/.github/workflows/nightly_pr_comment.yml b/.github/workflows/nightly_pr_comment.yml index fb7cdb359..24d23d98b 100644 --- a/.github/workflows/nightly_pr_comment.yml +++ b/.github/workflows/nightly_pr_comment.yml @@ -37,11 +37,11 @@ jobs: if (!artifacts.length) { return core.error(`No artifacts found`); } - let body = `*You need to be logged into GitHub to download these files.*\n\nDownload the artifacts for this pull request:\n`; + let body = `Download the artifacts for this pull request:\n`; let hidden_debug_artifacts = `\n\n
Only for Developers\n`; for (const art of artifacts) { - const url = `https://github.com/Ryubing/Ryujinx/actions/runs/${run_id}/artifacts/${art.id}`; - if(art.name.includes('Debug')) { + 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}](${url})`; diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 584507d75..d8bbdd175 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -121,6 +121,15 @@ jobs: 7z a ../release_output/ryujinx-${{ 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 + 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 - name: Build AppImage (Linux) if: matrix.platform.os == 'ubuntu-latest' @@ -157,15 +166,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 shell: bash - name: Pushing new release diff --git a/Directory.Packages.props b/Directory.Packages.props index 7054dcd7d..203f40588 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -42,8 +42,9 @@ - + + diff --git a/distribution/linux/appimage/build-appimage.sh b/distribution/linux/appimage/build-appimage.sh index 9b52928f8..a9de4866b 100755 --- a/distribution/linux/appimage/build-appimage.sh +++ b/distribution/linux/appimage/build-appimage.sh @@ -6,7 +6,7 @@ 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 diff --git a/docs/compatibility.csv b/docs/compatibility.csv new file mode 100644 index 000000000..9976c3bd5 --- /dev/null +++ b/docs/compatibility.csv @@ -0,0 +1,3433 @@ +"issue_title","extracted_game_id","issue_labels","extracted_status","last_event_date" +"-KLAUS-",,nvdec;status-playable,playable,2020-06-27 13:27:30.000 +".hack//G.U. Last Recode",0100BA9014A02000,deadlock;status-boots,boots,2022-03-12 19:15:47.000 +"#Funtime",,status-playable,playable,2020-12-10 16:54:35.000 +"#Halloween, Super Puzzles Dream",,nvdec;status-playable,playable,2020-12-10 20:43:58.000 +"#KillAllZombies",,slow;status-playable,playable,2020-12-16 01:50:25.000 +"#NoLimitFantasy, Super Puzzles Dream",,nvdec;status-playable,playable,2020-12-12 17:21:32.000 +"#RaceDieRun",,status-playable,playable,2020-07-04 20:23:16.000 +"#womenUp, Super Puzzles Dream",,status-playable,playable,2020-12-12 16:57:25.000 +"#womenUp, Super Puzzles Dream Demo",0100D87012A14000,nvdec;status-playable,playable,2021-02-09 00:03:31.000 +"1-2-Switch",01000320000CC000,services;status-playable,playable,2022-02-18 14:44:03.000 +"10 Second Run Returns",01004D1007926000,gpu;status-ingame,ingame,2022-07-17 13:06:18.000 +"10 Second Run RETURNS Demo",0100DC000A472000,gpu;status-ingame,ingame,2021-02-09 00:17:18.000 +"112 Operator",0100D82015774000,status-playable;nvdec,playable,2022-11-13 22:42:50.000 +"112th Seed",,status-playable,playable,2020-10-03 10:32:38.000 +"12 is Better Than 6",01007F600D1B8000,status-playable,playable,2021-02-22 16:10:12.000 +"12 Labours of Hercules II: The Cretan Bull",0100B1A010014000,cpu;status-nothing;32-bit;crash,nothing,2022-12-07 13:43:10.000 +"12 orbits",,status-playable,playable,2020-05-28 16:13:26.000 +"13 Sentinels Aegis Rim",01003FC01670C000,slow;status-ingame,ingame,2024-06-10 20:33:38.000 +"13 Sentinels Aegis Rim Demo",0100C54015002000,status-playable;demo,playable,2022-04-13 14:15:48.000 +"140",,status-playable,playable,2020-08-05 20:01:33.000 +"16-Bit Soccer Demo",0100B94013D28000,status-playable,playable,2021-02-09 00:23:07.000 +"1917 - The Alien Invasion DX",,status-playable,playable,2021-01-08 22:11:16.000 +"1971 PROJECT HELIOS",0100829010F4A000,status-playable,playable,2021-04-14 13:50:19.000 +"1979 Revolution: Black Friday",0100D1000B18C000,nvdec;status-playable,playable,2021-02-21 21:03:43.000 +"198X",,status-playable,playable,2020-08-07 13:24:38.000 +"1993 Shenandoah",,status-playable,playable,2020-10-24 13:55:42.000 +"1993 Shenandoah Demo",0100148012550000,status-playable,playable,2021-02-09 00:43:43.000 +"2048 Battles",,status-playable,playable,2020-12-12 14:21:25.000 +"2064: Read Only Memories",,deadlock;status-menus,menus,2020-05-28 16:53:58.000 +"20XX",0100749009844000,gpu;status-ingame,ingame,2023-08-14 09:41:44.000 +"2urvive",01007550131EE000,status-playable,playable,2022-11-17 13:49:37.000 +"2weistein – The Curse of the Red Dragon",0100E20012886000,status-playable;nvdec;UE4,playable,2022-11-18 14:47:07.000 +"30 in 1 game collection vol. 2",0100DAC013D0A000,status-playable;online-broken,playable,2022-10-15 17:22:27.000 +"30-in-1 Game Collection",010056D00E234000,status-playable;online-broken,playable,2022-10-15 17:47:09.000 +"3000th Duel",0100FB5010D2E000,status-playable,playable,2022-09-21 17:12:08.000 +"36 Fragments of Midnight",,status-playable,playable,2020-05-28 15:12:59.000 +"39 Days to Mars",0100AF400C4CE000,status-playable,playable,2021-02-21 22:12:46.000 +"3D Arcade Fishing",010010C013F2A000,status-playable,playable,2022-10-25 21:50:51.000 +"3D MiniGolf",,status-playable,playable,2021-01-06 09:22:11.000 +"4x4 Dirt Track",,status-playable,playable,2020-12-12 21:41:42.000 +"60 Parsecs!",010010100FF14000,status-playable,playable,2022-09-17 11:01:17.000 +"60 Seconds!",0100969005E98000,services;status-ingame,ingame,2021-11-30 01:04:14.000 +"6180 the moon",,status-playable,playable,2020-05-28 15:39:24.000 +"64",,status-playable,playable,2020-12-12 21:31:58.000 +"7 Billion Humans",,32-bit;status-playable,playable,2020-12-17 21:04:58.000 +"7th Sector",,nvdec;status-playable,playable,2020-08-10 14:22:14.000 +"8-BIT ADVENTURE STEINS;GATE",,audio;status-ingame,ingame,2020-01-12 15:05:06.000 +"80 Days",,status-playable,playable,2020-06-22 21:43:01.000 +"80's OVERDRIVE",,status-playable,playable,2020-10-16 14:33:32.000 +"88 Heroes",,status-playable,playable,2020-05-28 14:13:02.000 +"9 Monkeys of Shaolin",,UE4;gpu;slow;status-ingame,ingame,2020-11-17 11:58:43.000 +"9 Monkeys of Shaolin Demo",0100C5F012E3E000,UE4;gpu;nvdec;status-ingame,ingame,2021-02-09 01:03:30.000 +"911 Operator Deluxe Edition",,status-playable,playable,2020-07-14 13:57:44.000 +"99Vidas",,online;status-playable,playable,2020-10-29 13:00:40.000 +"99Vidas Demo",010023500C2F0000,status-playable,playable,2021-02-09 12:51:31.000 +"9th Dawn III",,status-playable,playable,2020-12-12 22:27:27.000 +"A Ch'ti Bundle",010096A00CC80000,status-playable;nvdec,playable,2022-10-04 12:48:44.000 +"A Dark Room",,gpu;status-ingame,ingame,2020-12-14 16:14:28.000 +"A Duel Hand Disaster Trackher: DEMO",0100582012B90000,crash;demo;nvdec;status-ingame,ingame,2021-03-24 18:45:27.000 +"A Duel Hand Disaster: Trackher",010026B006802000,status-playable;nvdec;online-working,playable,2022-09-04 14:24:55.000 +"A Frog Game",,status-playable,playable,2020-12-14 16:09:53.000 +"A Hat In Time",010056E00853A000,status-playable,playable,2024-06-25 19:52:44.000 +"A HERO AND A GARDEN",01009E1011EC4000,status-playable,playable,2022-12-05 16:37:47.000 +"A Knight's Quest",01005EF00CFDA000,status-playable;UE4,playable,2022-09-12 20:44:20.000 +"A magical high school girl",01008DD006C52000,status-playable,playable,2022-07-19 14:40:50.000 +"A Short Hike",,status-playable,playable,2020-10-15 00:19:58.000 +"A Sound Plan",,crash;status-boots,boots,2020-12-14 16:46:21.000 +"A Summer with the Shiba Inu",01007DD011C4A000,status-playable,playable,2021-06-10 20:51:16.000 +"A-Train: All Aboard! Tourism",0100A3E010E56000,nvdec;status-playable,playable,2021-04-06 17:48:19.000 +"Aaero",010097A00CC0A000,status-playable;nvdec,playable,2022-07-19 14:49:55.000 +"Aborigenus",,status-playable,playable,2020-08-05 19:47:24.000 +"Absolute Drift",,status-playable,playable,2020-12-10 14:02:44.000 +"Abyss of The Sacrifice",010047F012BE2000,status-playable;nvdec,playable,2022-10-21 13:56:28.000 +"ABZU",0100C1300BBC6000,status-playable;UE4,playable,2022-07-19 15:02:52.000 +"ACA NEOGEO 2020 SUPER BASEBALL",01003C400871E000,online;status-playable,playable,2021-04-12 13:23:51.000 +"ACA NEOGEO 3 COUNT BOUT",0100FC000AFC6000,online;status-playable,playable,2021-04-12 13:16:42.000 +"ACA NEOGEO AERO FIGHTERS 2",0100AC40038F4000,online;status-playable,playable,2021-04-08 15:44:09.000 +"ACA NEOGEO AERO FIGHTERS 3",0100B91008780000,online;status-playable,playable,2021-04-12 13:11:17.000 +"ACA NEOGEO AGGRESSORS OF DARK KOMBAT",0100B4800AFBA000,online;status-playable,playable,2021-04-01 22:48:01.000 +"ACA NEOGEO BASEBALL STARS PROFESSIONAL",01003FE00A2F6000,online;status-playable,playable,2021-04-01 21:23:05.000 +"ACA NEOGEO BLAZING STAR",,crash;services;status-menus,menus,2020-05-26 17:29:02.000 +"ACA NEOGEO CROSSED SWORDS",0100D2400AFB0000,online;status-playable,playable,2021-04-01 20:42:59.000 +"ACA NEOGEO FATAL FURY",0100EE6002B48000,online;status-playable,playable,2021-04-01 20:36:23.000 +"ACA NEOGEO FOOTBALL FRENZY",,status-playable,playable,2021-03-29 20:12:12.000 +"ACA NEOGEO GAROU: MARK OF THE WOLVES",0100CB2001DB8000,online;status-playable,playable,2021-04-01 20:31:10.000 +"ACA NEOGEO GHOST PILOTS",01005D700A2F8000,online;status-playable,playable,2021-04-01 20:26:45.000 +"ACA NEOGEO LAST RESORT",01000D10038E6000,online;status-playable,playable,2021-04-01 19:51:22.000 +"ACA NEOGEO LEAGUE BOWLING",,crash;services;status-menus,menus,2020-05-26 17:11:04.000 +"ACA NEOGEO MAGICAL DROP II",,crash;services;status-menus,menus,2020-05-26 16:48:24.000 +"ACA NEOGEO MAGICIAN LORD",01007920038F6000,online;status-playable,playable,2021-04-01 19:33:26.000 +"ACA NEOGEO METAL SLUG",0100EBE002B3E000,status-playable,playable,2021-02-21 13:56:48.000 +"ACA NEOGEO METAL SLUG 2",010086300486E000,online;status-playable,playable,2021-04-01 19:25:52.000 +"ACA NEOGEO METAL SLUG 3",,crash;services;status-menus,menus,2020-05-26 16:32:45.000 +"ACA NEOGEO METAL SLUG 4",01009CE00AFAE000,online;status-playable,playable,2021-04-01 18:12:18.000 +"ACA NEOGEO Metal Slug X",,crash;services;status-menus,menus,2020-05-26 14:07:20.000 +"ACA NEOGEO Money Puzzle Exchanger",010038F00AFA0000,online;status-playable,playable,2021-04-01 17:59:56.000 +"ACA NEOGEO NEO TURF MASTERS",01002E70032E8000,status-playable,playable,2021-02-21 15:12:01.000 +"ACA NEOGEO NINJA COMBAT",010052A00A306000,status-playable,playable,2021-03-29 21:17:28.000 +"ACA NEOGEO NINJA COMMANDO",01007E800AFB6000,online;status-playable,playable,2021-04-01 17:28:18.000 +"ACA NEOGEO OVER TOP",01003A5001DBA000,status-playable,playable,2021-02-21 13:16:25.000 +"ACA NEOGEO REAL BOUT FATAL FURY SPECIAL",010088500878C000,online;status-playable,playable,2021-04-01 17:18:27.000 +"ACA NEOGEO SAMURAI SHODOWN",01005C9002B42000,online;status-playable,playable,2021-04-01 17:11:35.000 +"ACA NEOGEO SAMURAI SHODOWN IV",010047F001DBC000,online;status-playable,playable,2021-04-12 12:58:54.000 +"ACA NEOGEO SAMURAI SHODOWN SPECIAL V",010049F00AFE8000,online;status-playable,playable,2021-04-10 18:07:13.000 +"ACA NEOGEO SENGOKU 2",01009B300872A000,online;status-playable,playable,2021-04-10 17:36:44.000 +"ACA NEOGEO SENGOKU 3",01008D000877C000,online;status-playable,playable,2021-04-10 16:11:53.000 +"ACA NEOGEO SHOCK TROOPERS",,crash;services;status-menus,menus,2020-05-26 15:29:34.000 +"ACA NEOGEO SPIN MASTER",01007D1004DBA000,online;status-playable,playable,2021-04-10 15:50:19.000 +"ACA NEOGEO SUPER SIDEKICKS 2",010055A00A300000,online;status-playable,playable,2021-04-10 16:05:58.000 +"ACA NEOGEO SUPER SIDEKICKS 3: THE NEXT GLORY",0100A4D00A308000,online;status-playable,playable,2021-04-10 15:39:22.000 +"ACA NEOGEO THE KING OF FIGHTERS '94",,crash;services;status-menus,menus,2020-05-26 15:03:44.000 +"ACA NEOGEO THE KING OF FIGHTERS '95",01009DC001DB6000,status-playable,playable,2021-03-29 20:27:35.000 +"ACA NEOGEO THE KING OF FIGHTERS '96",01006F0004FB4000,online;status-playable,playable,2021-04-10 14:49:10.000 +"ACA NEOGEO THE KING OF FIGHTERS '97",0100170008728000,online;status-playable,playable,2021-04-10 14:43:27.000 +"ACA NEOGEO THE KING OF FIGHTERS '98",,crash;services;status-menus,menus,2020-05-26 14:54:20.000 +"ACA NEOGEO THE KING OF FIGHTERS '99",0100583001DCA000,online;status-playable,playable,2021-04-10 14:36:56.000 +"ACA NEOGEO THE KING OF FIGHTERS 2000",0100B97002B44000,online;status-playable,playable,2021-04-10 15:24:35.000 +"ACA NEOGEO THE KING OF FIGHTERS 2001",010048200AFC2000,online;status-playable,playable,2021-04-10 15:16:23.000 +"ACA NEOGEO THE KING OF FIGHTERS 2002",0100CFD00AFDE000,online;status-playable,playable,2021-04-10 15:01:55.000 +"ACA NEOGEO THE KING OF FIGHTERS 2003",0100EF100AFE6000,online;status-playable,playable,2021-04-10 14:54:31.000 +"ACA NEOGEO THE LAST BLADE 2",0100699008792000,online;status-playable,playable,2021-04-10 14:31:54.000 +"ACA NEOGEO THE SUPER SPY",0100F7F00AFA2000,online;status-playable,playable,2021-04-10 14:26:33.000 +"ACA NEOGEO WAKU WAKU 7",0100CEF001DC0000,online;status-playable,playable,2021-04-10 14:20:52.000 +"ACA NEOGEO WORLD HEROES PERFECT",,crash;services;status-menus,menus,2020-05-26 14:14:36.000 +"ACA NEOGEO ZUPAPA!",,online;status-playable,playable,2021-03-25 20:07:33.000 +"Access Denied",0100A9900CB5C000,status-playable,playable,2022-07-19 15:25:10.000 +"Ace Angler: Fishing Spirits",01007C50132C8000,status-menus;crash,menus,2023-03-03 03:21:39.000 +"Ace Attorney Investigations Collection DEMO",010033401E68E000,status-playable,playable,2024-09-07 06:16:42.000 +"Ace Combat 7 - Skies Unknown Deluxe Edition",010039301B7E0000,gpu;status-ingame;UE4,ingame,2024-09-27 14:31:43.000 +"Ace of Seafood",0100FF1004D56000,status-playable,playable,2022-07-19 15:32:25.000 +"Aces of the Luftwaffe Squadron",,nvdec;slow;status-playable,playable,2020-05-27 12:29:42.000 +"Aces of the Luftwaffe Squadron Demo",010054300D822000,nvdec;status-playable,playable,2021-02-09 13:12:28.000 +"ACORN Tactics",0100DBC0081A4000,status-playable,playable,2021-02-22 12:57:40.000 +"Across the Grooves",,status-playable,playable,2020-06-27 12:29:51.000 +"Acthung! Cthulhu Tactics",,status-playable,playable,2020-12-14 18:40:27.000 +"Active Neurons",010039A010DA0000,status-playable,playable,2021-01-27 21:31:21.000 +"Active Neurons 2",01000D1011EF0000,status-playable,playable,2022-10-07 16:21:42.000 +"Active Neurons 2 Demo",010031C0122B0000,status-playable,playable,2021-02-09 13:40:21.000 +"Active Neurons 3",0100EE1013E12000,status-playable,playable,2021-03-24 12:20:20.000 +"Actual Sunlight",,gpu;status-ingame,ingame,2020-12-14 17:18:41.000 +"Adam's Venture: Origins",0100C0C0040E4000,status-playable,playable,2021-03-04 18:43:57.000 +"Adrenaline Rush - Miami Drive",,status-playable,playable,2020-12-12 22:49:50.000 +"Advance Wars 1+2: Re-Boot Camp",0100300012F2A000,status-playable,playable,2024-01-30 18:19:44.000 +"Adventure Llama",,status-playable,playable,2020-12-14 19:32:24.000 +"Adventure Pinball Bundle",,slow;status-playable,playable,2020-12-14 20:31:53.000 +"Adventures of Bertram Fiddle: Episode 1: A Dreadly Business",01003B400A00A000,status-playable;nvdec,playable,2022-09-17 11:07:56.000 +"Adventures of Chris",,status-playable,playable,2020-12-12 23:00:02.000 +"Adventures of Chris Demo",0100A0A0136E8000,status-playable,playable,2021-02-09 13:49:21.000 +"Adventures of Pip",,nvdec;status-playable,playable,2020-12-12 22:11:55.000 +"ADVERSE",01008C901266E000,UE4;status-playable,playable,2021-04-26 14:32:51.000 +"Aegis Defenders Demo",010064500AF72000,status-playable,playable,2021-02-09 14:04:17.000 +"Aegis Defenders0",01008E6006502000,status-playable,playable,2021-02-22 13:29:33.000 +"Aeolis Tournament",,online;status-playable,playable,2020-12-12 22:02:14.000 +"Aeolis Tournament Demo",01006710122CE000,nvdec;status-playable,playable,2021-02-09 14:22:30.000 +"AER - Memories of Old",0100A0400DDE0000,nvdec;status-playable,playable,2021-03-05 18:43:43.000 +"Aerial Knight's Never Yield",0100E9B013D4A000,status-playable,playable,2022-10-25 22:05:00.000 +"Aery",0100875011D0C000,status-playable,playable,2021-03-07 15:25:51.000 +"Aery - Sky Castle",010018E012914000,status-playable,playable,2022-10-21 17:58:49.000 +"Aery - A Journey Beyond Time",0100DF8014056000,status-playable,playable,2021-04-05 15:52:25.000 +"Aery - Broken Memories",0100087012810000,status-playable,playable,2022-10-04 13:11:52.000 +"Aery - Calm Mind - 0100A801539000",,status-playable,playable,2022-11-14 14:26:58.000 +"AeternoBlade Demo Version",0100B1C00949A000,nvdec;status-playable,playable,2021-02-09 14:39:26.000 +"AeternoBlade I",,nvdec;status-playable,playable,2020-12-14 20:06:48.000 +"AeternoBlade II",01009D100EA28000,status-playable;online-broken;UE4;vulkan-backend-bug,playable,2022-09-12 21:11:18.000 +"AeternoBlade II Demo Version",,gpu;nvdec;status-ingame,ingame,2021-02-09 15:10:19.000 +"AFL Evolution 2",01001B400D334000,slow;status-playable;online-broken;UE4,playable,2022-12-07 12:45:56.000 +"Afterparty",0100DB100BBCE000,status-playable,playable,2022-09-22 12:23:19.000 +"Agatha Christie - The ABC Murders",,status-playable,playable,2020-10-27 17:08:23.000 +"Agatha Knife",,status-playable,playable,2020-05-28 12:37:58.000 +"Agent A: A puzzle in disguise",,status-playable,playable,2020-11-16 22:53:27.000 +"Agent A: A puzzle in disguise (Demo)",01008E8012C02000,status-playable,playable,2021-02-09 18:30:41.000 +"Ages of Mages: the Last Keeper",0100E4700E040000,status-playable;vulkan-backend-bug,playable,2022-10-04 11:44:05.000 +"Aggelos",010004D00A9C0000,gpu;status-ingame,ingame,2023-02-19 13:24:23.000 +"Agony",,UE4;crash;status-boots,boots,2020-07-10 16:21:18.000 +"Ai: the Somnium Files",010089B00D09C000,status-playable;nvdec,playable,2022-09-04 14:45:06.000 +"AI: The Somnium Files Demo",0100C1700FB34000,nvdec;status-playable,playable,2021-02-10 12:52:33.000 +"Ailment",,status-playable,playable,2020-12-12 22:30:41.000 +"Air Conflicts: Pacific Carriers",,status-playable,playable,2021-01-04 10:52:50.000 +"Air Hockey",,status-playable,playable,2020-05-28 16:44:37.000 +"Air Missions: HIND",,status-playable,playable,2020-12-13 10:16:45.000 +"Aircraft Evolution",0100E95011FDC000,nvdec;status-playable,playable,2021-06-14 13:30:18.000 +"Airfield Mania Demo",010010A00DB72000,services;status-boots;demo,boots,2022-04-10 03:43:02.000 +"AIRHEART - Tales of Broken Wings",01003DD00BFEE000,status-playable,playable,2021-02-26 15:20:27.000 +"Akane",01007F100DE52000,status-playable;nvdec,playable,2022-07-21 00:12:18.000 +"Akash Path of the Five",,gpu;nvdec;status-ingame,ingame,2020-12-14 22:33:12.000 +"Akihabara - Feel the Rhythm Remixed",010053100B0EA000,status-playable,playable,2021-02-22 14:39:35.000 +"Akuarium",,slow;status-playable,playable,2020-12-12 23:43:36.000 +"Akuto",,status-playable,playable,2020-08-04 19:43:27.000 +"Alchemic Jousts",0100F5400AB6C000,gpu;status-ingame,ingame,2022-12-08 15:06:28.000 +"Alchemist's Castle",,status-playable,playable,2020-12-12 23:54:08.000 +"Alder's Blood",,status-playable,playable,2020-08-28 15:15:23.000 +"Alder's Blood Prologue",01004510110C4000,crash;status-ingame,ingame,2021-02-09 19:03:03.000 +"Aldred - Knight of Honor",01000E000EEF8000,services;status-playable,playable,2021-11-30 01:49:17.000 +"Alex Kidd in Miracle World DX",010025D01221A000,status-playable,playable,2022-11-14 15:01:34.000 +"Alien Cruise",,status-playable,playable,2020-08-12 13:56:05.000 +"Alien Escape",,status-playable,playable,2020-06-03 23:43:18.000 +"Alien: Isolation",010075D00E8BA000,status-playable;nvdec;vulkan-backend-bug,playable,2022-09-17 11:48:41.000 +"All Walls Must Fall",0100CBD012FB6000,status-playable;UE4,playable,2022-10-15 19:16:30.000 +"All-Star Fruit Racing",0100C1F00A9B8000,status-playable;nvdec;UE4,playable,2022-07-21 00:35:37.000 +"Alluris",0100AC501122A000,gpu;status-ingame;UE4,ingame,2023-08-02 23:13:50.000 +"Almightree the Last Dreamer",,slow;status-playable,playable,2020-12-15 13:59:03.000 +"Along the Edge",,status-playable,playable,2020-11-18 15:00:07.000 +"Alpaca Ball: Allstars",,nvdec;status-playable,playable,2020-12-11 12:26:29.000 +"ALPHA",,status-playable,playable,2020-12-13 12:17:45.000 +"Alphaset by POWGI",,status-playable,playable,2020-12-15 15:15:15.000 +"Alt-Frequencies",,status-playable,playable,2020-12-15 19:01:33.000 +"Alteric",,status-playable,playable,2020-11-08 13:53:22.000 +"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz",,status-playable,playable,2020-08-31 14:17:42.000 +"Alternate Jake Hunter: DAEDALUS The Awakening of Golden Jazz Trial version",0100A8A00D27E000,status-playable,playable,2021-02-10 13:33:59.000 +"Aluna: Sentinel of the Shards",010045201487C000,status-playable;nvdec,playable,2022-10-25 22:17:03.000 +"Alwa's Awakening",,status-playable,playable,2020-10-13 11:52:01.000 +"Alwa's Legacy",,status-playable,playable,2020-12-13 13:00:57.000 +"American Fugitive",,nvdec;status-playable,playable,2021-01-04 20:45:11.000 +"American Ninja Warrior: Challenge",010089D00A3FA000,nvdec;status-playable,playable,2021-06-09 13:11:17.000 +"Amnesia: Collection",01003CC00D0BE000,status-playable,playable,2022-10-04 13:36:15.000 +"Amoeba Battle - Microscopic RTS Action",010041D00DEB2000,status-playable,playable,2021-05-06 13:33:41.000 +"Among the Sleep - Enhanced Edition",010046500C8D2000,nvdec;status-playable,playable,2021-06-03 15:06:25.000 +"Among Us",0100B0C013912000,status-menus;online;ldn-broken,menus,2021-09-22 15:20:17.000 +"Anarcute",010050900E1C6000,status-playable,playable,2021-02-22 13:17:59.000 +"Ancestors Legacy",01009EE0111CC000,status-playable;nvdec;UE4,playable,2022-10-01 12:25:36.000 +"Ancient Rush 2",,UE4;crash;status-menus,menus,2020-07-14 14:58:47.000 +"Angels of Death",0100AE000AEBC000,nvdec;status-playable,playable,2021-02-22 14:17:15.000 +"AngerForce: Reloaded for Nintendo Switch",010001E00A5F6000,status-playable,playable,2022-07-21 10:37:17.000 +"Angry Bunnies: Colossal Carrot Crusade",0100F3500D05E000,status-playable;online-broken,playable,2022-09-04 14:53:26.000 +"Angry Video Game Nerd I & II Deluxe",,crash;status-ingame,ingame,2020-12-12 23:59:54.000 +"Anima Gate of Memories: The Nameless Chronicles",01007A400B3F8000,status-playable,playable,2021-06-14 14:33:06.000 +"Anima: Arcane Edition",010033F00B3FA000,nvdec;status-playable,playable,2021-01-26 16:55:51.000 +"Anima: Gate of Memories",0100706005B6A000,nvdec;status-playable,playable,2021-06-16 18:13:18.000 +"Animal Crossing New Horizons Island Transfer Tool",0100F38011CFE000,services;status-ingame;Needs Update;Incomplete,ingame,2022-12-07 13:51:19.000 +"Animal Crossing: New Horizons",01006F8002326000,gpu;status-ingame;crash;nvdec;online-broken;ldn-works;mac-bug,ingame,2024-09-23 13:31:49.000 +"Animal Fight Club",,gpu;status-ingame,ingame,2020-12-13 13:13:33.000 +"Animal Fun for Toddlers and Kids",,services;status-boots,boots,2020-12-15 16:45:29.000 +"Animal Hunter Z",,status-playable,playable,2020-12-13 12:50:35.000 +"Animal Pairs - Matching & Concentration Game for Toddlers & Kids",010033C0121DC000,services;status-boots,boots,2021-11-29 23:43:14.000 +"Animal Rivals Switch",010065B009B3A000,status-playable,playable,2021-02-22 14:02:42.000 +"Animal Super Squad",0100EFE009424000,UE4;status-playable,playable,2021-04-23 20:50:50.000 +"Animal Up",,status-playable,playable,2020-12-13 15:39:02.000 +"ANIMAL WELL",010020D01AD24000,status-playable,playable,2024-05-22 18:01:49.000 +"Animals for Toddlers",,services;status-boots,boots,2020-12-15 17:27:27.000 +"Animated Jigsaws Collection",,nvdec;status-playable,playable,2020-12-15 15:58:34.000 +"Animated Jigsaws: Beautiful Japanese Scenery DEMO",0100A1900B5B8000,nvdec;status-playable,playable,2021-02-10 13:49:56.000 +"Anime Studio Story",,status-playable,playable,2020-12-15 18:14:05.000 +"Anime Studio Story Demo",01002B300EB86000,status-playable,playable,2021-02-10 14:50:39.000 +"ANIMUS",,status-playable,playable,2020-12-13 15:11:47.000 +"Animus: Harbinger",0100E5A00FD38000,status-playable,playable,2022-09-13 22:09:20.000 +"Ankh Guardian - Treasure of the Demon's Temple",,status-playable,playable,2020-12-13 15:55:49.000 +"Anode",,status-playable,playable,2020-12-15 17:18:58.000 +"Another Code: Recollection",0100CB9018F5A000,gpu;status-ingame;crash,ingame,2024-09-06 05:58:52.000 +"Another Sight",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-03 16:49:59.000 +"Another World",01003C300AAAE000,slow;status-playable,playable,2022-07-21 10:42:38.000 +"AnShi",01000FD00DF78000,status-playable;nvdec;UE4,playable,2022-10-21 19:37:01.000 +"Anthill",010054C00D842000,services;status-menus;nvdec,menus,2021-11-18 09:25:25.000 +"Anti-Hero Bundle",0100596011E20000,status-playable;nvdec,playable,2022-10-21 20:10:30.000 +"Antiquia Lost",,status-playable,playable,2020-05-28 11:57:32.000 +"Antventor",,nvdec;status-playable,playable,2020-12-15 20:09:27.000 +"Ao no Kanata no Four Rhythm",0100FA100620C000,status-playable,playable,2022-07-21 10:50:42.000 +"AO Tennis 2",010047000E9AA000,status-playable;online-broken,playable,2022-09-17 12:05:07.000 +"Aokana - Four Rhythms Across the Blue",0100990011866000,status-playable,playable,2022-10-04 13:50:26.000 +"Ape Out",01005B100C268000,status-playable,playable,2022-09-26 19:04:47.000 +"APE OUT DEMO",010054500E6D4000,status-playable,playable,2021-02-10 14:33:06.000 +"Aperion Cyberstorm",,status-playable,playable,2020-12-14 00:40:16.000 +"Aperion Cyberstorm Demo",01008CA00D71C000,status-playable,playable,2021-02-10 15:53:21.000 +"Apocalipsis",,deadlock;status-menus,menus,2020-05-27 12:56:37.000 +"Apocryph",,gpu;status-ingame,ingame,2020-12-13 23:24:10.000 +"Apparition",,nvdec;slow;status-ingame,ingame,2020-12-13 23:57:04.000 +"AQUA KITTY UDX",0100AC10085CE000,online;status-playable,playable,2021-04-12 15:34:11.000 +"Aqua Lungers",,crash;status-ingame,ingame,2020-12-14 11:25:57.000 +"Aqua Moto Racing Utopia",0100D0D00516A000,status-playable,playable,2021-02-21 21:21:00.000 +"Aragami: Shadow Edition",010071800BA74000,nvdec;status-playable,playable,2021-02-21 20:33:23.000 +"Arc of Alchemist",0100C7D00E6A0000,status-playable;nvdec,playable,2022-10-07 19:15:54.000 +"Arcade Archives 10-Yard Fight",0100BE80097FA000,online;status-playable,playable,2021-03-25 21:26:41.000 +"Arcade Archives ALPHA MISSION",01005DD00BE08000,online;status-playable,playable,2021-04-15 09:20:43.000 +"Arcade Archives ALPINE SKI",010083800DC70000,online;status-playable,playable,2021-04-15 09:28:46.000 +"Arcade Archives ARGUS",010014F001DE2000,online;status-playable,playable,2021-04-16 06:51:25.000 +"Arcade Archives Armed F",010014F001DE2000,online;status-playable,playable,2021-04-16 07:00:17.000 +"Arcade Archives ATHENA",0100BEC00C7A2000,online;status-playable,playable,2021-04-16 07:10:12.000 +"Arcade Archives Atomic Robo-Kid",0100426001DE4000,online;status-playable,playable,2021-04-16 07:20:29.000 +"Arcade Archives BOMB JACK",0100192009824000,online;status-playable,playable,2021-04-16 09:48:26.000 +"Arcade Archives City CONNECTION",010007A00980C000,online;status-playable,playable,2021-03-25 22:16:15.000 +"Arcade Archives CLU CLU LAND",0100EDC00E35A000,online;status-playable,playable,2021-04-16 10:00:42.000 +"Arcade Archives CRAZY CLIMBER",0100BB1001DD6000,online;status-playable,playable,2021-03-25 22:24:15.000 +"Arcade Archives DONKEY KONG",,Needs Update;crash;services;status-menus,menus,2021-03-24 18:18:43.000 +"Arcade Archives DOUBLE DRAGON",0100F25001DD0000,online;status-playable,playable,2021-03-25 22:44:34.000 +"Arcade Archives DOUBLE DRAGON II The Revenge",01009E3001DDE000,online;status-playable,playable,2021-04-12 16:05:29.000 +"Arcade Archives FRONT LINE",0100496006EC8000,online;status-playable,playable,2021-05-05 14:10:49.000 +"Arcade Archives HEROIC EPISODE",01009A4008A30000,online;status-playable,playable,2021-03-25 23:01:26.000 +"Arcade Archives ICE CLIMBER",01007D200D3FC000,online;status-playable,playable,2021-05-05 14:18:34.000 +"Arcade Archives IKARI WARRIORS",010049400C7A8000,online;status-playable,playable,2021-05-05 14:24:46.000 +"Arcade Archives Ikki",01000DB00980A000,online;status-playable,playable,2021-03-25 23:11:28.000 +"Arcade Archives IMAGE FIGHT",010008300C978000,online;status-playable,playable,2021-05-05 14:31:21.000 +"Arcade Archives Kid Niki Radical Ninja",010010B008A36000,audio;status-ingame;online,ingame,2022-07-21 11:02:04.000 +"Arcade Archives Kid's Horehore Daisakusen",0100E7C001DE0000,online;status-playable,playable,2021-04-12 16:21:29.000 +"Arcade Archives LIFE FORCE",,status-playable,playable,2020-09-04 13:26:25.000 +"Arcade Archives MARIO BROS.",0100755004608000,online;status-playable,playable,2021-03-26 11:31:32.000 +"Arcade Archives MOON CRESTA",01000BE001DD8000,online;status-playable,playable,2021-05-05 14:39:29.000 +"Arcade Archives MOON PATROL",01003000097FE000,online;status-playable,playable,2021-03-26 11:42:04.000 +"Arcade Archives NINJA GAIDEN",01003EF00D3B4000,audio;online;status-ingame,ingame,2021-04-12 16:27:53.000 +"Arcade Archives Ninja Spirit",01002F300D2C6000,online;status-playable,playable,2021-05-05 14:45:31.000 +"Arcade Archives Ninja-Kid",,online;status-playable,playable,2021-03-26 20:55:07.000 +"Arcade Archives OMEGA FIGHTER",,crash;services;status-menus,menus,2020-08-18 20:50:54.000 +"Arcade Archives PLUS ALPHA",,audio;status-ingame,ingame,2020-07-04 20:47:55.000 +"Arcade Archives POOYAN",0100A6E00D3F8000,online;status-playable,playable,2021-05-05 17:58:19.000 +"Arcade Archives PSYCHO SOLDIER",01000D200C7A4000,online;status-playable,playable,2021-05-05 18:02:19.000 +"Arcade Archives PUNCH-OUT!!",01001530097F8000,online;status-playable,playable,2021-03-25 22:10:55.000 +"Arcade Archives Renegade",010081E001DD2000,status-playable;online,playable,2022-07-21 11:45:40.000 +"Arcade Archives ROAD FIGHTER",0100FBA00E35C000,online;status-playable,playable,2021-05-05 18:09:17.000 +"Arcade Archives ROUTE 16",010060000BF7C000,online;status-playable,playable,2021-05-05 18:40:41.000 +"Arcade Archives RYGAR",0100C2D00981E000,online;status-playable,playable,2021-04-15 08:48:30.000 +"Arcade Archives Shusse Ozumo",01007A4009834000,online;status-playable,playable,2021-05-05 17:52:25.000 +"Arcade Archives Sky Skipper",010008F00B054000,online;status-playable,playable,2021-04-15 08:58:09.000 +"Arcade Archives Solomon's Key",01008C900982E000,online;status-playable,playable,2021-04-19 16:27:18.000 +"Arcade Archives STAR FORCE",010069F008A38000,online;status-playable,playable,2021-04-15 08:39:09.000 +"Arcade Archives TERRA CRESTA",,crash;services;status-menus,menus,2020-08-18 20:20:55.000 +"Arcade Archives TERRA FORCE",0100348001DE6000,online;status-playable,playable,2021-04-16 20:03:27.000 +"Arcade Archives TETRIS THE GRAND MASTER",0100DFD016B7A000,status-playable,playable,2024-06-23 01:50:29.000 +"Arcade Archives THE NINJA WARRIORS",0100DC000983A000,online;slow;status-ingame,ingame,2021-04-16 19:54:56.000 +"Arcade Archives TIME PILOT",0100AF300D2E8000,online;status-playable,playable,2021-04-16 19:22:31.000 +"Arcade Archives Traverse USA",010029D006ED8000,online;status-playable,playable,2021-04-15 08:11:06.000 +"Arcade Archives URBAN CHAMPION",010042200BE0C000,online;status-playable,playable,2021-04-16 10:20:03.000 +"Arcade Archives VS. GRADIUS",01004EC00E634000,online;status-playable,playable,2021-04-12 14:53:58.000 +"Arcade Archives VS. SUPER MARIO BROS.",,online;status-playable,playable,2021-04-08 14:48:11.000 +"Arcade Archives WILD WESTERN",01001B000D8B6000,online;status-playable,playable,2021-04-16 10:11:36.000 +"Arcade Classics Anniversary Collection",010050000D6C4000,status-playable,playable,2021-06-03 13:55:10.000 +"ARCADE FUZZ",,status-playable,playable,2020-08-15 12:37:36.000 +"Arcade Spirits",,status-playable,playable,2020-06-21 11:45:03.000 +"Arcaea",0100E680149DC000,status-playable,playable,2023-03-16 19:31:21.000 +"Arcanoid Breakout",0100E53013E1C000,status-playable,playable,2021-01-25 23:28:02.000 +"Archaica: Path of LightInd",,crash;status-nothing,nothing,2020-10-16 13:22:26.000 +"Area 86",,status-playable,playable,2020-12-16 16:45:52.000 +"ARIA CHRONICLE",0100691013C46000,status-playable,playable,2022-11-16 13:50:55.000 +"Ark: Survival Evolved",0100D4A00B284000,gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2024-04-16 00:53:56.000 +"Arkanoid vs Space Invaders",,services;status-ingame,ingame,2021-01-21 12:50:30.000 +"Arkham Horror: Mother's Embrace",010069A010606000,nvdec;status-playable,playable,2021-04-19 15:40:55.000 +"Armed 7 DX",,status-playable,playable,2020-12-14 11:49:56.000 +"Armello",,nvdec;status-playable,playable,2021-01-07 11:43:26.000 +"ARMS",01009B500007C000,status-playable;ldn-works;LAN,playable,2024-08-28 07:49:24.000 +"ARMS Demo",,status-playable,playable,2021-02-10 16:30:13.000 +"Arrest of a stone Buddha",0100184011B32000,status-nothing;crash,nothing,2022-12-07 16:55:00.000 +"Arrog",,status-playable,playable,2020-12-16 17:20:50.000 +"Art of Balance",01008EC006BE2000,gpu;status-ingame;ldn-works,ingame,2022-07-21 17:13:57.000 +"Art of Balance DEMO",010062F00CAE2000,gpu;slow;status-ingame,ingame,2021-02-10 17:17:12.000 +"Art Sqool",01006AA013086000,status-playable;nvdec,playable,2022-10-16 20:42:37.000 +"Artifact Adventure Gaiden DX",,status-playable,playable,2020-12-16 17:49:25.000 +"Ary and the Secret of Seasons",0100C2500CAB6000,status-playable,playable,2022-10-07 20:45:09.000 +"ASCENDANCE",,status-playable,playable,2021-01-05 10:54:40.000 +"Asemblance",,UE4;gpu;status-ingame,ingame,2020-12-16 18:01:23.000 +"Ash of Gods: Redemption",,deadlock;status-nothing,nothing,2020-08-10 18:08:32.000 +"Ashen",010027B00E40E000,status-playable;nvdec;online-broken;UE4,playable,2022-09-17 12:19:14.000 +"Asphalt 9: Legends",01007B000C834000,services;status-menus;crash;online-broken,menus,2022-12-07 13:28:29.000 +"Assassin's Creed III Remastered",01007F600B134000,status-boots;nvdec,boots,2024-06-25 20:12:11.000 +"Assassin's Creed The Rebel Collection",010044700DEB0000,gpu;status-ingame,ingame,2024-05-19 07:58:56.000 +"Assault Android Cactus+",0100DF200B24C000,status-playable,playable,2021-06-03 13:23:55.000 +"Assault Chainguns KM",,crash;gpu;status-ingame,ingame,2020-12-14 12:48:34.000 +"Assault on Metaltron Demo",0100C5E00E540000,status-playable,playable,2021-02-10 19:48:06.000 +"Astebreed",010057A00C1F6000,status-playable,playable,2022-07-21 17:33:54.000 +"Asterix & Obelix XXL 2",010050400BD38000,deadlock;status-ingame;nvdec,ingame,2022-07-21 17:54:14.000 +"Asterix & Obelix XXL: Romastered",0100F46011B50000,gpu;status-ingame;nvdec;opengl,ingame,2023-08-16 21:22:06.000 +"Asterix & Obelix XXL3: The Crystal Menhir",010081500EA1E000,gpu;status-ingame;nvdec;regression,ingame,2022-11-28 14:19:23.000 +"Astral Chain",01007300020FA000,status-playable,playable,2024-07-17 18:02:19.000 +"Astro Bears Party",,status-playable,playable,2020-05-28 11:21:58.000 +"Astro Duel Deluxe",0100F0400351C000,32-bit;status-playable,playable,2021-06-03 11:21:48.000 +"Astrologaster",0100B80010C48000,cpu;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:31.000 +"AstroWings SpaceWar",,status-playable,playable,2020-12-14 13:10:44.000 +"Atari 50 The Anniversary Celebration",010099801870E000,slow;status-playable,playable,2022-11-14 19:42:10.000 +"Atelier Ayesha: The Alchemist of Dusk DX",0100D9D00EE8C000,status-menus;crash;nvdec;Needs Update,menus,2021-11-24 07:29:54.000 +"Atelier Escha & Logy: Alchemists Of The Dusk Sky DX",0100E5600EE8E000,status-playable;nvdec,playable,2022-11-20 16:01:41.000 +"Atelier Firis: The Alchemist and the Mysterious Journey DX",010023201421E000,gpu;status-ingame;nvdec,ingame,2022-10-25 22:46:19.000 +"Atelier Lulua ~ The Scion of Arland ~",,nvdec;status-playable,playable,2020-12-16 14:29:19.000 +"Atelier Lydie & Suelle: The Alchemists and the Mysterious Paintings",010009900947A000,nvdec;status-playable,playable,2021-06-03 18:37:01.000 +"Atelier Meruru ~ The Apprentice of Arland ~ DX",,nvdec;status-playable,playable,2020-06-12 00:50:48.000 +"Atelier Rorona - The Alchemist of Arland - DX",010088600C66E000,nvdec;status-playable,playable,2021-04-08 15:33:15.000 +"Atelier Rorona Arland no Renkinjutsushi DX (JP)",01002D700B906000,status-playable;nvdec,playable,2022-12-02 17:26:54.000 +"Atelier Ryza 2: Lost Legends & the Secret Fairy",01009A9012022000,status-playable,playable,2022-10-16 21:06:06.000 +"Atelier Ryza: Ever Darkness & the Secret Hideout",0100D1900EC80000,status-playable,playable,2023-10-15 16:36:50.000 +"Atelier Shallie: Alchemists of the Dusk Sea DX",,nvdec;status-playable,playable,2020-11-25 20:54:12.000 +"Atelier Sophie 2: The Alchemist of the Mysterious Dream",010082A01538E000,status-ingame;crash,ingame,2022-12-01 04:34:03.000 +"Atelier Sophie: The Alchemist of the Mysterious Book DX",01001A5014220000,status-playable,playable,2022-10-25 23:06:20.000 +"Atelier Totori ~ The Adventurer of Arland ~ DX",,nvdec;status-playable,playable,2020-06-12 01:04:56.000 +"ATOM RPG",0100B9400FA38000,status-playable;nvdec,playable,2022-10-22 10:11:48.000 +"Atomic Heist",01005FE00EC4E000,status-playable,playable,2022-10-16 21:24:32.000 +"Atomicrops",0100AD30095A4000,status-playable,playable,2022-08-06 10:05:07.000 +"ATOMIK RunGunJumpGun",,status-playable,playable,2020-12-14 13:19:24.000 +"ATOMINE",,gpu;nvdec;slow;status-playable,playable,2020-12-14 18:56:50.000 +"Attack of the Toy Tanks",,slow;status-ingame,ingame,2020-12-14 12:59:12.000 +"Attack on Titan 2",,status-playable,playable,2021-01-04 11:40:01.000 +"ATV Drift & Tricks",01000F600B01E000,UE4;online;status-playable,playable,2021-04-08 17:29:17.000 +"Automachef",,status-playable,playable,2020-12-16 19:51:25.000 +"Automachef Demo",01006B700EA6A000,status-playable,playable,2021-02-10 20:35:37.000 +"Aviary Attorney: Definitive Edition",,status-playable,playable,2020-08-09 20:32:12.000 +"Avicii Invector",,status-playable,playable,2020-10-25 12:12:56.000 +"AVICII Invector Demo",0100E100128BA000,status-playable,playable,2021-02-10 21:04:58.000 +"AvoCuddle",,status-playable,playable,2020-09-02 14:50:13.000 +"Awakening of Cthulhu",0100085012D64000,UE4;status-playable,playable,2021-04-26 13:03:07.000 +"Away: Journey to the Unexpected",01002F1005F3C000,status-playable;nvdec;vulkan-backend-bug,playable,2022-11-06 15:31:04.000 +"Awesome Pea",,status-playable,playable,2020-10-11 12:39:23.000 +"Awesome Pea (Demo)",010023800D3F2000,status-playable,playable,2021-02-10 21:48:21.000 +"Awesome Pea 2",0100B7D01147E000,status-playable,playable,2022-10-01 12:34:19.000 +"Awesome Pea 2 (Demo) - 0100D2011E28000",,crash;status-nothing,nothing,2021-02-10 22:08:27.000 +"Axes",0100DA3011174000,status-playable,playable,2021-04-08 13:01:58.000 +"Axiom Verge",,status-playable,playable,2020-10-20 01:07:18.000 +"Ayakashi koi gikyoku Free Trial",010075400DEC6000,status-playable,playable,2021-02-10 22:22:11.000 +"Azur Lane: Crosswave",01006AF012FC8000,UE4;nvdec;status-playable,playable,2021-04-05 15:15:25.000 +"Azuran Tales: Trials",,status-playable,playable,2020-08-12 15:23:07.000 +"Azure Reflections",01006FB00990E000,nvdec;online;status-playable,playable,2021-04-08 13:18:25.000 +"Azure Striker GUNVOLT 3",01004E90149AA000,status-playable,playable,2022-08-10 13:46:49.000 +"Azure Striker Gunvolt: STRIKER PACK",0100192003FA4000,32-bit;status-playable,playable,2024-02-10 23:51:21.000 +"Azurebreak Heroes",,status-playable,playable,2020-12-16 21:26:17.000 +"B.ARK",01009B901145C000,status-playable;nvdec,playable,2022-11-17 13:35:02.000 +"Baba Is You",01002CD00A51C000,status-playable,playable,2022-07-17 05:36:54.000 +"Back to Bed",,nvdec;status-playable,playable,2020-12-16 20:52:04.000 +"Backworlds",0100FEA014316000,status-playable,playable,2022-10-25 23:20:34.000 +"BaconMan",0100EAF00E32E000,status-menus;crash;nvdec,menus,2021-11-20 02:36:21.000 +"Bad Dream: Coma",01000CB00D094000,deadlock;status-boots,boots,2023-08-03 00:54:18.000 +"Bad Dream: Fever",0100B3B00D81C000,status-playable,playable,2021-06-04 18:33:12.000 +"Bad Dudes",,status-playable,playable,2020-12-10 12:30:56.000 +"Bad North",0100E98006F22000,status-playable,playable,2022-07-17 13:44:25.000 +"Bad North Demo",,status-playable,playable,2021-02-10 22:48:38.000 +"BAFL",,status-playable,playable,2021-01-13 08:32:51.000 +"Baila Latino",010076B011EC8000,status-playable,playable,2021-04-14 16:40:24.000 +"Bakugan Champions of Vestroia",,status-playable,playable,2020-11-06 19:07:39.000 +"Bakumatsu Renka SHINSENGUMI",01008260138C4000,status-playable,playable,2022-10-25 23:37:31.000 +"Balan Wonderworld",0100438012EC8000,status-playable;nvdec;UE4,playable,2022-10-22 13:08:43.000 +"Balan Wonderworld Demo",0100E48013A34000,gpu;services;status-ingame;UE4;demo,ingame,2023-02-16 20:05:07.000 +"Balatro",0100CD801CE5E000,status-ingame,ingame,2024-04-21 02:01:53.000 +"Baldur's Gate and Baldur's Gate II: Enhanced Editions",010010A00DA48000,32-bit;status-playable,playable,2022-09-12 23:52:15.000 +"Balthazar's Dreams",0100BC400FB64000,status-playable,playable,2022-09-13 00:13:22.000 +"Bamerang",01008D30128E0000,status-playable,playable,2022-10-26 00:29:39.000 +"Bang Dream Girls Band Party for Nintendo Switch",,status-playable,playable,2021-09-19 03:06:58.000 +"Banner of the Maid",010013C010C5C000,status-playable,playable,2021-06-14 15:23:37.000 +"Banner Saga 2",,crash;status-boots,boots,2021-01-13 08:56:09.000 +"Banner Saga 3",,slow;status-boots,boots,2021-01-11 16:53:57.000 +"Banner Saga Trilogy",0100CE800B94A000,slow;status-playable,playable,2024-03-06 11:25:20.000 +"Baobabs Mauseoleum Ep 1: Ovnifagos Don't Eat Flamingos",,status-playable,playable,2020-07-15 05:06:29.000 +"Baobabs Mausoleum Ep.3: Un Pato en Muertoburgo",,nvdec;status-playable,playable,2020-12-17 11:43:10.000 +"Baobabs Mausoleum Ep2: 1313 Barnabas Dead Ends Drive",,status-playable,playable,2020-12-17 11:22:50.000 +"Baobabs Mausoleum: DEMO",0100D3000AEC2000,status-playable,playable,2021-02-10 22:59:25.000 +"Barbarous! Tavern of Emyr",01003350102E2000,status-playable,playable,2022-10-16 21:50:24.000 +"Barbearian",0100F7E01308C000,Needs Update;gpu;status-ingame,ingame,2021-06-28 16:27:50.000 +"Baron: Fur Is Gonna Fly",010039C0106C6000,status-boots;crash,boots,2022-02-06 02:05:43.000 +"Barry Bradford's Putt Panic Party",,nvdec;status-playable,playable,2020-06-17 01:08:34.000 +"Baseball Riot",01004860080A0000,status-playable,playable,2021-06-04 18:07:27.000 +"Bass Pro Shops: The Strike - Championship Edition",0100E3100450E000,gpu;status-boots;32-bit,boots,2022-12-09 15:58:16.000 +"Bastion",010038600B27E000,status-playable,playable,2022-02-15 14:15:24.000 +"Batbarian: Testament of the Primordials",,status-playable,playable,2020-12-17 12:00:59.000 +"Baten Kaitos I & II HD Remaster (Europe/USA)",0100C07018CA6000,services;status-boots;Needs Update,boots,2023-10-01 00:44:32.000 +"Baten Kaitos I & II HD Remaster (Japan)",0100F28018CA4000,services;status-boots;Needs Update,boots,2023-10-24 23:11:54.000 +"Batman - The Telltale Series",,nvdec;slow;status-playable,playable,2021-01-11 18:19:35.000 +"Batman: Arkham City",01003f00163ce000,status-playable,playable,2024-09-11 00:30:19.000 +"Batman: Arkham Knight",0100ACD0163D0000,gpu;status-ingame;mac-bug,ingame,2024-06-25 20:24:42.000 +"Batman: The Enemy Within",,crash;status-nothing,nothing,2020-10-16 05:49:27.000 +"Battle Axe",0100747011890000,status-playable,playable,2022-10-26 00:38:01.000 +"Battle Chasers: Nightwar",,nvdec;slow;status-playable,playable,2021-01-12 12:27:34.000 +"Battle Chef Brigade",,status-playable,playable,2021-01-11 14:16:28.000 +"Battle Chef Brigade Demo",0100DBB00CAEE000,status-playable,playable,2021-02-10 23:15:07.000 +"Battle Hunters",0100A3B011EDE000,gpu;status-ingame,ingame,2022-11-12 09:19:17.000 +"Battle of Kings",,slow;status-playable,playable,2020-12-17 12:45:23.000 +"Battle Planet - Judgement Day",,status-playable,playable,2020-12-17 14:06:20.000 +"Battle Princess Madelyn",,status-playable,playable,2021-01-11 13:47:23.000 +"Battle Princess Madelyn Royal Edition",0100A7500DF64000,status-playable,playable,2022-09-26 19:14:49.000 +"Battle Supremacy - Evolution",010099B00E898000,gpu;status-boots;nvdec,boots,2022-02-17 09:02:50.000 +"Battle Worlds: Kronos",0100DEB00D5A8000,nvdec;status-playable,playable,2021-06-04 17:48:02.000 +"Battleground",0100650010DD4000,status-ingame;crash,ingame,2021-09-06 11:53:23.000 +"BATTLESLOTHS",,status-playable,playable,2020-10-03 08:32:22.000 +"BATTLESTAR GALACTICA Deadlock",,nvdec;status-playable,playable,2020-06-27 17:35:44.000 +"Battlezone Gold Edition",01006D800A988000,gpu;ldn-untested;online;status-boots,boots,2021-06-04 18:36:05.000 +"BATTLLOON",,status-playable,playable,2020-12-17 15:48:23.000 +"bayala - the game",0100194010422000,status-playable,playable,2022-10-04 14:09:25.000 +"Bayonetta",010076F0049A2000,status-playable;audout,playable,2022-11-20 15:51:59.000 +"Bayonetta 2",01007960049A0000,status-playable;nvdec;ldn-works;LAN,playable,2022-11-26 03:46:09.000 +"Bayonetta 3",01004A4010FEA000,gpu;status-ingame;crash;nvdec;vulkan-backend-bug;opengl-backend-bug;amd-vendor-bug;ASTC,ingame,2024-09-28 14:34:33.000 +"Bayonetta Origins Cereza and the Lost Demon Demo",010002801A3FA000,gpu;status-ingame;demo,ingame,2024-02-17 06:06:28.000 +"Bayonetta Origins: Cereza and the Lost Demon",0100CF5010FEC000,gpu;status-ingame,ingame,2024-02-27 01:39:49.000 +"Be-A Walker",,slow;status-ingame,ingame,2020-09-02 15:00:31.000 +"Beach Buggy Racing",010095C00406C000,online;status-playable,playable,2021-04-13 23:16:50.000 +"Bear With Me - The Lost Robots",010020700DE04000,nvdec;status-playable,playable,2021-02-27 14:20:10.000 +"Bear With Me - The Lost Robots Demo",010024200E97E800,nvdec;status-playable,playable,2021-02-12 22:38:12.000 +"Bear's Restaurant - 0100CE014A4E000",,status-playable,playable,2024-08-11 21:26:59.000 +"BEAST Darling! ~Kemomimi Danshi to Himitsu no Ryou~",,crash;status-menus,menus,2020-10-04 06:12:08.000 +"Beat Cop",,status-playable,playable,2021-01-06 19:26:48.000 +"Beat Me!",01002D20129FC000,status-playable;online-broken,playable,2022-10-16 21:59:26.000 +"Beautiful Desolation",01006B0014590000,gpu;status-ingame;nvdec,ingame,2022-10-26 10:34:38.000 +"Bee Simulator",,UE4;crash;status-boots,boots,2020-07-15 12:13:13.000 +"BeeFense BeeMastered",010018F007786000,status-playable,playable,2022-11-17 15:38:12.000 +"Behold the Kickmen",,status-playable,playable,2020-06-27 12:49:45.000 +"Beholder",,status-playable,playable,2020-10-16 12:48:58.000 +"Ben 10",01006E1004404000,nvdec;status-playable,playable,2021-02-26 14:08:35.000 +"Ben 10: Power Trip",01009CD00E3AA000,status-playable;nvdec,playable,2022-10-09 10:52:12.000 +"Bendy and the Ink Machine",010074500BBC4000,status-playable,playable,2023-05-06 20:35:39.000 +"Bertram Fiddle Episode 2: A Bleaker Predicklement",010021F00C1C0000,nvdec;status-playable,playable,2021-02-22 14:56:37.000 +"Beyblade Burst Battle Zero",010068600AD16000,services;status-menus;crash;Needs Update,menus,2022-11-20 15:48:32.000 +"Beyond Enemy Lines: Covert Operations",010056500CAD8000,status-playable;UE4,playable,2022-10-01 13:11:50.000 +"Beyond Enemy Lines: Essentials",0100B8F00DACA000,status-playable;nvdec;UE4,playable,2022-09-26 19:48:16.000 +"Bibi & Tina - Adventures with Horses",,nvdec;slow;status-playable,playable,2021-01-13 08:58:09.000 +"Bibi & Tina at the horse farm",010062400E69C000,status-playable,playable,2021-04-06 16:31:39.000 +"Bibi Blocksberg - Big Broom Race 3",,status-playable,playable,2021-01-11 19:07:16.000 +"Big Buck Hunter Arcade",,nvdec;status-playable,playable,2021-01-12 20:31:39.000 +"Big Crown: Showdown",010088100C35E000,status-menus;nvdec;online;ldn-untested,menus,2022-07-17 18:25:32.000 +"Big Dipper",0100A42011B28000,status-playable,playable,2021-06-14 15:08:19.000 +"Big Drunk Satanic Massacre",01002FA00DE72000,status-playable,playable,2021-03-04 21:28:22.000 +"Big Pharma",,status-playable,playable,2020-07-14 15:27:30.000 +"BIG-Bobby-Car - The Big Race",,slow;status-playable,playable,2020-12-10 14:25:06.000 +"Billion Road",010057700FF7C000,status-playable,playable,2022-11-19 15:57:43.000 +"BINGO for Nintendo Switch",,status-playable,playable,2020-07-23 16:17:36.000 +"Biomutant",01004BA017CD6000,status-ingame;crash,ingame,2024-05-16 15:46:36.000 +"BioShock 2 Remastered",01002620102C6000,services;status-nothing,nothing,2022-10-29 14:39:22.000 +"BioShock Infinite: The Complete Edition",0100D560102C8000,services-horizon;status-nothing;crash,nothing,2024-08-11 21:35:01.000 +"BioShock Remastered",0100AD10102B2000,services-horizon;status-boots;crash;Needs Update,boots,2024-06-06 01:08:52.000 +"Biped",010053B0117F8000,status-playable;nvdec,playable,2022-10-01 13:32:58.000 +"Bird Game +",01001B700B278000,status-playable;online,playable,2022-07-17 18:41:57.000 +"Birds and Blocks Demo",0100B6B012FF4000,services;status-boots;demo,boots,2022-04-10 04:53:03.000 +"BIT.TRIP RUNNER",0100E62012D3C000,status-playable,playable,2022-10-17 14:23:24.000 +"BIT.TRIP VOID",01000AD012D3A000,status-playable,playable,2022-10-17 14:31:23.000 +"Bite the Bullet",,status-playable,playable,2020-10-14 23:10:11.000 +"Bitmaster",010026E0141C8000,status-playable,playable,2022-12-13 14:05:51.000 +"Biz Builder Delux",,slow;status-playable,playable,2020-12-15 21:36:25.000 +"Black Book",0100DD1014AB8000,status-playable;nvdec,playable,2022-12-13 16:38:53.000 +"Black Future '88",010049000B69E000,status-playable;nvdec,playable,2022-09-13 11:24:37.000 +"Black Hole Demo",01004BE00A682000,status-playable,playable,2021-02-12 23:02:17.000 +"Black Legend",0100C3200E7E6000,gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-22 12:54:48.000 +"Blackjack Hands",,status-playable,playable,2020-11-30 14:04:51.000 +"Blackmoor2",0100A0A00E660000,status-playable;online-broken,playable,2022-09-26 20:26:34.000 +"Blacksad: Under the Skin",010032000EA2C000,status-playable,playable,2022-09-13 11:38:04.000 +"Blacksea Odyssey",01006B400C178000,status-playable;nvdec,playable,2022-10-16 22:14:34.000 +"Blacksmith of the Sand Kingdom",010068E013450000,status-playable,playable,2022-10-16 22:37:44.000 +"BLADE ARCUS Rebellion From Shining",0100C4400CB7C000,status-playable,playable,2022-07-17 18:52:28.000 +"Blade Assault",0100EA1018A2E000,audio;status-nothing,nothing,2024-04-29 14:32:50.000 +"Blade II The Return of Evil",01009CC00E224000,audio;status-ingame;crash;UE4,ingame,2021-11-14 02:49:59.000 +"Blade Strangers",01005950022EC000,status-playable;nvdec,playable,2022-07-17 19:02:43.000 +"Bladed Fury",0100DF0011A6A000,status-playable,playable,2022-10-26 11:36:26.000 +"Blades of Time",0100CFA00CC74000,deadlock;status-boots;online,boots,2022-07-17 19:19:58.000 +"Blair Witch",01006CC01182C000,status-playable;nvdec;UE4,playable,2022-10-01 14:06:16.000 +"Blanc",010039501405E000,gpu;slow;status-ingame,ingame,2023-02-22 14:00:13.000 +"Blasphemous",0100698009C6E000,nvdec;status-playable,playable,2021-03-01 12:15:31.000 +"Blasphemous Demo",0100302010338000,status-playable,playable,2021-02-12 23:49:56.000 +"Blaster Master Zero",0100225000FEE000,32-bit;status-playable,playable,2021-03-05 13:22:33.000 +"Blaster Master Zero 2",01005AA00D676000,status-playable,playable,2021-04-08 15:22:59.000 +"Blaster Master Zero DEMO",010025B002E92000,status-playable,playable,2021-02-12 23:59:06.000 +"BLAZBLUE CENTRALFICTION Special Edition",,nvdec;status-playable,playable,2020-12-15 23:50:04.000 +"BlazBlue: Cross Tag Battle",,nvdec;online;status-playable,playable,2021-01-05 20:29:37.000 +"Blazing Beaks",,status-playable,playable,2020-06-04 20:37:06.000 +"Blazing Chrome",,status-playable,playable,2020-11-16 04:56:54.000 +"Bleep Bloop DEMO",010091700EA2A000,nvdec;status-playable,playable,2021-02-13 00:20:53.000 +"Blind Men",010089D011310000,audout;status-playable,playable,2021-02-20 14:15:38.000 +"Blizzard Arcade Collection",0100743013D56000,status-playable;nvdec,playable,2022-08-03 19:37:26.000 +"BlobCat",0100F3500A20C000,status-playable,playable,2021-04-23 17:09:30.000 +"Block-a-Pix Deluxe Demo",0100E1C00DB6C000,status-playable,playable,2021-02-13 00:37:39.000 +"Bloo Kid",0100C6A01AD56000,status-playable,playable,2024-05-01 17:18:04.000 +"Bloo Kid 2",010055900FADA000,status-playable,playable,2024-05-01 17:16:57.000 +"Blood & Guts Bundle",,status-playable,playable,2020-06-27 12:57:35.000 +"Blood Waves",01007E700D17E000,gpu;status-ingame,ingame,2022-07-18 13:04:46.000 +"Blood will be Spilled",,nvdec;status-playable,playable,2020-12-17 03:02:03.000 +"Bloodstained: Curse of the Moon",,status-playable,playable,2020-09-04 10:42:17.000 +"Bloodstained: Curse of the Moon 2",,status-playable,playable,2020-09-04 10:56:27.000 +"Bloodstained: Ritual of the Night",010025A00DF2A000,status-playable;nvdec;UE4,playable,2022-07-18 14:27:35.000 +"Bloody Bunny : The Game",0100E510143EC000,status-playable;nvdec;UE4,playable,2022-10-22 13:18:55.000 +"Bloons TD 5",0100B8400A1C6000,Needs Update;audio;gpu;services;status-boots,boots,2021-04-18 23:02:46.000 +"Blossom Tales",0100C1000706C000,status-playable,playable,2022-07-18 16:43:07.000 +"Blossom Tales Demo",01000EB01023E000,status-playable,playable,2021-02-13 14:22:53.000 +"Blue Fire",010073B010F6E000,status-playable;UE4,playable,2022-10-22 14:46:11.000 +"Body of Evidence",0100721013510000,status-playable,playable,2021-04-25 22:22:11.000 +"Bohemian Killing",0100AD1010CCE000,status-playable;vulkan-backend-bug,playable,2022-09-26 22:41:37.000 +"Boku to Nurse no Kenshuu Nisshi",010093700ECEC000,status-playable,playable,2022-11-21 20:38:34.000 +"Bokujou Monogatari Saikai no Mineraru Taun (Story of Seasons: Friends of Mineral Town)",01001D900D9AC000,slow;status-ingame;crash;Needs Update,ingame,2022-04-24 22:46:04.000 +"Bomb Rush Cyberfunk",0100317014B7C000,status-playable,playable,2023-09-28 19:51:57.000 +"Bomber Crew",01007900080B6000,status-playable,playable,2021-06-03 14:21:28.000 +"Bomber Fox",0100A1F012948000,nvdec;status-playable,playable,2021-04-19 17:58:13.000 +"Bombslinger",010087300445A000,services;status-menus,menus,2022-07-19 12:53:15.000 +"Book of Demons",01007A200F452000,status-playable,playable,2022-09-29 12:03:43.000 +"Bookbound Brigade",,status-playable,playable,2020-10-09 14:30:29.000 +"Boom Blaster",,status-playable,playable,2021-03-24 10:55:56.000 +"Boomerang Fu",010081A00EE62000,status-playable,playable,2024-07-28 01:12:41.000 +"Boomerang Fu Demo Version",010069F0135C4000,demo;status-playable,playable,2021-02-13 14:38:13.000 +"Borderlands 2: Game of the Year Edition",010096F00FF22000,status-playable,playable,2022-04-22 18:35:07.000 +"Borderlands 3",01009970122E4000,gpu;status-ingame,ingame,2024-07-15 04:38:14.000 +"Borderlands: Game of the Year Edition",010064800F66A000,slow;status-ingame;online-broken;ldn-untested,ingame,2023-07-23 21:10:36.000 +"Borderlands: The Pre-Sequel Ultimate Edition",010007400FF24000,nvdec;status-playable,playable,2021-06-09 20:17:10.000 +"Boreal Blade",01008E500AFF6000,gpu;ldn-untested;online;status-ingame,ingame,2021-06-11 15:37:14.000 +"Boris The Rocket",010092C013FB8000,status-playable,playable,2022-10-26 13:23:09.000 +"Bossgard",010076F00EBE4000,status-playable;online-broken,playable,2022-10-04 14:21:13.000 +"Bot Vice Demo",010069B00EAC8000,crash;demo;status-ingame,ingame,2021-02-13 14:52:42.000 +"Bouncy Bob 2",,status-playable,playable,2020-07-14 16:51:53.000 +"Bounty Battle",0100E1200DC1A000,status-playable;nvdec,playable,2022-10-04 14:40:51.000 +"Bow to Blood: Last Captain Standing",,slow;status-playable,playable,2020-10-23 10:51:21.000 +"BOX Align",,crash;services;status-nothing,nothing,2020-04-03 17:26:56.000 +"BOXBOY! + BOXGIRL!",,status-playable,playable,2020-11-08 01:11:54.000 +"BOXBOY! + BOXGIRL! Demo",0100B7200E02E000,demo;status-playable,playable,2021-02-13 14:59:08.000 +"BQM BlockQuest Maker",,online;status-playable,playable,2020-07-31 20:56:50.000 +"Bramble The Mountain King",0100E87017D0E000,services-horizon;status-playable,playable,2024-03-06 09:32:17.000 +"Brave Dungeon + Dark Witch's Story: COMBAT",,status-playable,playable,2021-01-12 21:06:34.000 +"Bravely Default II",01006DC010326000,gpu;status-ingame;crash;Needs Update;UE4,ingame,2024-04-26 06:11:26.000 +"Bravely Default II Demo",0100B6801137E000,gpu;status-ingame;crash;UE4;demo,ingame,2022-09-27 05:39:47.000 +"BraveMatch",010081501371E000,status-playable;UE4,playable,2022-10-26 13:32:15.000 +"Bravery and Greed",0100F60017D4E000,gpu;deadlock;status-boots,boots,2022-12-04 02:23:47.000 +"Brawl",,nvdec;slow;status-playable,playable,2020-06-04 14:23:18.000 +"Brawl Chess",010068F00F444000,status-playable;nvdec,playable,2022-10-26 13:59:17.000 +"Brawlhalla",0100C6800B934000,online;opengl;status-playable,playable,2021-06-03 18:26:09.000 +"Brawlout",010060200A4BE000,ldn-untested;online;status-playable,playable,2021-06-04 17:35:35.000 +"Brawlout Demo",0100C1B00E1CA000,demo;status-playable,playable,2021-02-13 22:46:53.000 +"Breakout: Recharged",010022C016DC8000,slow;status-ingame,ingame,2022-11-06 15:32:57.000 +"Breathedge",01000AA013A5E000,UE4;nvdec;status-playable,playable,2021-05-06 15:44:28.000 +"Breathing Fear",,status-playable,playable,2020-07-14 15:12:29.000 +"Brick Breaker",,crash;status-ingame,ingame,2020-12-15 17:03:59.000 +"Brick Breaker",,nvdec;online;status-playable,playable,2020-12-15 18:26:23.000 +"Bridge 3",,status-playable,playable,2020-10-08 20:47:24.000 +"Bridge Constructor: The Walking Dead",,gpu;slow;status-ingame,ingame,2020-12-11 17:31:32.000 +"Brigandine: The Legend of Runersia",010011000EA7A000,status-playable,playable,2021-06-20 06:52:25.000 +"Brigandine: The Legend of Runersia Demo",0100703011258000,status-playable,playable,2021-02-14 14:44:10.000 +"Bring Them Home",01000BF00BE40000,UE4;status-playable,playable,2021-04-12 14:14:43.000 +"Broforce",010060A00B53C000,ldn-untested;online;status-playable,playable,2021-05-28 12:23:38.000 +"Broken Age",0100EDD0068A6000,status-playable,playable,2021-06-04 17:40:32.000 +"Broken Lines",,status-playable,playable,2020-10-16 00:01:37.000 +"Broken Sword 5 - the Serpent's Curse",01001E60085E6000,status-playable,playable,2021-06-04 17:28:59.000 +"Brotherhood United Demo",0100F19011226000,demo;status-playable,playable,2021-02-14 21:10:57.000 +"Brothers: A Tale of Two Sons",01000D500D08A000,status-playable;nvdec;UE4,playable,2022-07-19 14:02:22.000 +"Brunch Club",,status-playable,playable,2020-06-24 13:54:07.000 +"Bubble Bobble 4 Friends",010010900F7B4000,nvdec;status-playable,playable,2021-06-04 15:27:55.000 +"Bubsy: Paws on Fire!",0100DBE00C554000,slow;status-ingame,ingame,2023-08-24 02:44:51.000 +"Bucket Knight",,crash;status-ingame,ingame,2020-09-04 13:11:24.000 +"Bucket Knight demo",0100F1B010A90000,demo;status-playable,playable,2021-02-14 21:23:09.000 +"Bud Spencer & Terence Hill - Slaps and Beans",01000D200AC0C000,status-playable,playable,2022-07-17 12:37:00.000 +"Bug Fables",,status-playable,playable,2020-06-09 11:27:00.000 +"BULLETSTORM: DUKE OF SWITCH EDITION",01003DD00D658000,status-playable;nvdec,playable,2022-03-03 08:30:24.000 +"BurgerTime Party!",,slow;status-playable,playable,2020-11-21 14:11:53.000 +"BurgerTime Party! Demo",01005780106E8000,demo;status-playable,playable,2021-02-14 21:34:16.000 +"Buried Stars",,status-playable,playable,2020-09-07 14:11:58.000 +"Burnout Paradise Remastered",0100DBF01000A000,nvdec;online;status-playable,playable,2021-06-13 02:54:46.000 +"Bury me, my Love",,status-playable,playable,2020-11-07 12:47:37.000 +"Bus Driver Simulator",010030D012FF6000,status-playable,playable,2022-10-17 13:55:27.000 +"BUSTAFELLOWS",,nvdec;status-playable,playable,2020-10-17 20:04:41.000 +"BUTCHER",,status-playable,playable,2021-01-11 18:50:17.000 +"Cabela's: The Hunt - Championship Edition",0100E24004510000,status-menus;32-bit,menus,2022-07-21 20:21:25.000 +"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda",01000B900D8B0000,slow;status-playable;nvdec,playable,2024-04-01 22:43:40.000 +"Cadence of Hyrule Crypt of the NecroDancer Featuring The Legend of Zelda Demo - 010065700EE0600",,demo;gpu;nvdec;status-ingame,ingame,2021-02-14 21:48:15.000 +"Café Enchanté",,status-playable,playable,2020-11-13 14:54:25.000 +"Cafeteria Nipponica Demo",010060400D21C000,demo;status-playable,playable,2021-02-14 22:11:35.000 +"Cake Bash Demo",0100699012F82000,crash;demo;status-ingame,ingame,2021-02-14 22:21:15.000 +"Caladrius Blaze",01004FD00D66A000,deadlock;status-nothing;nvdec,nothing,2022-12-07 16:44:37.000 +"Calculation Castle: Greco's Ghostly Challenge ""Addition",,32-bit;status-playable,playable,2020-11-01 23:40:11.000 +"Calculation Castle: Greco's Ghostly Challenge ""Division",,32-bit;status-playable,playable,2020-11-01 23:54:55.000 +"Calculation Castle: Greco's Ghostly Challenge ""Multiplication",,32-bit;status-playable,playable,2020-11-02 00:04:33.000 +"Calculation Castle: Greco's Ghostly Challenge ""Subtraction",,32-bit;status-playable,playable,2020-11-01 23:47:42.000 +"Calculator",010004701504A000,status-playable,playable,2021-06-11 13:27:20.000 +"Calico",010013A00E750000,status-playable,playable,2022-10-17 14:44:28.000 +"Call of Cthulhu",010046000EE40000,status-playable;nvdec;UE4,playable,2022-12-18 03:08:30.000 +"Call of Juarez: Gunslinger",0100B4700BFC6000,gpu;status-ingame;nvdec,ingame,2022-09-17 16:49:46.000 +"Can't Drive This",0100593008BDC000,status-playable,playable,2022-10-22 14:55:17.000 +"Candle - The Power of the Flame",,nvdec;status-playable,playable,2020-05-26 12:10:20.000 +"Capcom Arcade Stadium",01001E0013208000,status-playable,playable,2021-03-17 05:45:14.000 +"Capcom Beat 'Em Up Bundle",,status-playable,playable,2020-03-23 18:31:24.000 +"CAPCOM BELT ACTION COLLECTION",0100F6400A77E000,status-playable;online;ldn-untested,playable,2022-07-21 20:51:23.000 +"Captain Toad: Treasure Tracker",01009BF0072D4000,32-bit;status-playable,playable,2024-04-25 00:50:16.000 +"Captain Toad: Treasure Tracker Demo",01002C400B6B6000,32-bit;demo;status-playable,playable,2021-02-14 22:36:09.000 +"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS",0100EAE010560000,status-playable;online-broken;vulkan-backend-bug,playable,2022-10-09 11:20:50.000 +"CAPTAIN TSUBASA: RISE OF NEW CHAMPIONS DEMO VERSION",01002320137CC000,slow;status-playable,playable,2021-02-14 22:45:35.000 +"Car Mechanic Manager",,status-playable,playable,2020-07-23 18:50:17.000 +"Car Quest",01007BD00AE70000,deadlock;status-menus,menus,2021-11-18 08:59:18.000 +"Caretaker",0100DA70115E6000,status-playable,playable,2022-10-04 14:52:24.000 +"Cargo Crew Driver",0100DD6014870000,status-playable,playable,2021-04-19 12:54:22.000 +"Carnival Games",010088C0092FE000,status-playable;nvdec,playable,2022-07-21 21:01:22.000 +"Carnivores: Dinosaur Hunt",,status-playable,playable,2022-12-14 18:46:06.000 +"CARRION",,crash;status-nothing,nothing,2020-08-13 17:15:12.000 +"Cars 3 Driven to Win",01008D1001512000,gpu;status-ingame,ingame,2022-07-21 21:21:05.000 +"Carto",0100810012A1A000,status-playable,playable,2022-09-04 15:37:06.000 +"Cartoon Network Adventure Time: Pirates of the Enchiridion",0100C4E004406000,status-playable;nvdec,playable,2022-07-21 21:49:01.000 +"Cartoon Network Battle Crashers",0100085003A2A000,status-playable,playable,2022-07-21 21:55:40.000 +"CASE 2: Animatronics Survival",0100C4C0132F8000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-09 11:45:03.000 +"Cassette Beasts",010066F01A0E0000,status-playable,playable,2024-07-22 20:38:43.000 +"Castle Crashers Remastered",010001300D14A000,gpu;status-boots,boots,2024-08-10 09:21:20.000 +"Castle Crashers Remastered Demo",0100F6D01060E000,gpu;status-boots;demo,boots,2022-04-10 10:57:10.000 +"Castle of Heart",01003C100445C000,status-playable;nvdec,playable,2022-07-21 23:10:45.000 +"Castle of No Escape 2",0100F5500FA0E000,status-playable,playable,2022-09-13 13:51:42.000 +"Castle Pals",0100DA2011F18000,status-playable,playable,2021-03-04 21:00:33.000 +"Castlestorm",010097C00AB66000,status-playable;nvdec,playable,2022-07-21 22:49:14.000 +"CastleStorm 2",,UE4;crash;nvdec;status-boots,boots,2020-10-25 11:22:44.000 +"Castlevania Anniversary Collection",,audio;status-playable,playable,2020-05-23 11:40:29.000 +"Cat Girl Without Salad: Amuse-Bouche",010076000C86E000,status-playable,playable,2022-09-03 13:01:47.000 +"Cat Quest",,status-playable,playable,2020-04-02 23:09:32.000 +"Cat Quest II",,status-playable,playable,2020-07-06 23:52:09.000 +"Cat Quest II Demo",0100E86010220000,demo;status-playable,playable,2021-02-15 14:11:57.000 +"Catherine Full Body",0100BF00112C0000,status-playable;nvdec,playable,2023-04-02 11:00:37.000 +"Catherine Full Body for Nintendo Switch (JP)",0100BAE0077E4000,Needs Update;gpu;status-ingame,ingame,2021-02-21 18:06:11.000 +"Cattails",010004400B28A000,status-playable,playable,2021-06-03 14:36:57.000 +"Cave Story+",,status-playable,playable,2020-05-22 09:57:25.000 +"Caveblazers",01001A100C0E8000,slow;status-ingame,ingame,2021-06-09 17:57:28.000 +"Caveman Warriors",,status-playable,playable,2020-05-22 11:44:20.000 +"Caveman Warriors Demo",,demo;status-playable,playable,2021-02-15 14:44:08.000 +"Celeste",,status-playable,playable,2020-06-17 10:14:40.000 +"Cendrillon palikA",01006B000A666000,gpu;status-ingame;nvdec,ingame,2022-07-21 22:52:24.000 +"CHAOS CODE -NEW SIGN OF CATASTROPHE-",01007600115CE000,status-boots;crash;nvdec,boots,2022-04-04 12:24:21.000 +"CHAOS;HEAD NOAH",0100957016B90000,status-playable,playable,2022-06-02 22:57:19.000 +"Charge Kid",0100F52013A66000,gpu;status-boots;audout,boots,2024-02-11 01:17:47.000 +"Chasm",,status-playable,playable,2020-10-23 11:03:43.000 +"Chasm: The Rift",010034301A556000,gpu;status-ingame,ingame,2024-04-29 19:02:48.000 +"Chess Ultra",0100A5900472E000,status-playable;UE4,playable,2023-08-30 23:06:31.000 +"Chicken Assassin: Reloaded",0100E3C00A118000,status-playable,playable,2021-02-20 13:29:01.000 +"Chicken Police - Paint it RED!",,nvdec;status-playable,playable,2020-12-10 15:10:11.000 +"Chicken Range",0100F6C00A016000,status-playable,playable,2021-04-23 12:14:23.000 +"Chicken Rider",,status-playable,playable,2020-05-22 11:31:17.000 +"Chickens Madness DEMO",0100CAC011C3A000,UE4;demo;gpu;nvdec;status-ingame,ingame,2021-02-15 15:02:10.000 +"Child of Light",,nvdec;status-playable,playable,2020-12-16 10:23:10.000 +"Children of Morta",01002DE00C250000,gpu;status-ingame;nvdec,ingame,2022-09-13 17:48:47.000 +"Children of Zodiarcs",,status-playable,playable,2020-10-04 14:23:33.000 +"Chinese Parents",010046F012A04000,status-playable,playable,2021-04-08 12:56:41.000 +"Chocobo GP",01006A30124CA000,gpu;status-ingame;crash,ingame,2022-06-04 14:52:18.000 +"Chocobo's Mystery Dungeon Every Buddy!",,slow;status-playable,playable,2020-05-26 13:53:13.000 +"Choices That Matter: And The Sun Went Out",,status-playable,playable,2020-12-17 15:44:08.000 +"Chou no Doku Hana no Kusari: Taishou Irokoi Ibun",,gpu;nvdec;status-ingame,ingame,2020-09-28 17:58:04.000 +"ChromaGun",,status-playable,playable,2020-05-26 12:56:42.000 +"Chronos",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-11 22:16:35.000 +"Circle of Sumo",,status-playable,playable,2020-05-22 12:45:21.000 +"Circuits",01008FA00D686000,status-playable,playable,2022-09-19 11:52:50.000 +"Cities: Skylines - Nintendo Switch Edition",,status-playable,playable,2020-12-16 10:34:57.000 +"Citizens of Space",0100E4200D84E000,gpu;status-boots,boots,2023-10-22 06:45:44.000 +"Citizens Unite!: Earth x Space",0100D9C012900000,gpu;status-ingame,ingame,2023-10-22 06:44:19.000 +"City Bus Driving Simulator",01005E501284E000,status-playable,playable,2021-06-15 21:25:59.000 +"CLANNAD",0100A3A00CC7E000,status-playable,playable,2021-06-03 17:01:02.000 +"CLANNAD Side Stories - 01007B01372C000",,status-playable,playable,2022-10-26 15:03:04.000 +"Clash Force",01005ED0107F4000,status-playable,playable,2022-10-01 23:45:48.000 +"Claybook",010009300AA6C000,slow;status-playable;nvdec;online;UE4,playable,2022-07-22 11:11:34.000 +"Clea",,crash;status-ingame,ingame,2020-12-15 16:22:56.000 +"Clea 2",010045E0142A4000,status-playable,playable,2021-04-18 14:25:18.000 +"Clock Zero ~Shuuen no Ichibyou~ Devote",01008C100C572000,status-playable;nvdec,playable,2022-12-04 22:19:14.000 +"Clocker",0100DF9013AD4000,status-playable,playable,2021-04-05 15:05:13.000 +"Close to the Sun",0100B7200DAC6000,status-boots;crash;nvdec;UE4,boots,2021-11-04 09:19:41.000 +"Clubhouse Games: 51 Worldwide Classics",010047700D540000,status-playable;ldn-works,playable,2024-05-21 16:12:57.000 +"Clue",,crash;online;status-menus,menus,2020-11-10 09:23:48.000 +"ClusterPuck 99",,status-playable,playable,2021-01-06 00:28:12.000 +"Clustertruck",010096900A4D2000,slow;status-ingame,ingame,2021-02-19 21:07:09.000 +"Cobra Kai The Karate Kid Saga Continues",01005790110F0000,status-playable,playable,2021-06-17 15:59:13.000 +"COCOON",01002E700C366000,gpu;status-ingame,ingame,2024-03-06 11:33:08.000 +"Code of Princess EX",010034E005C9C000,nvdec;online;status-playable,playable,2021-06-03 10:50:13.000 +"CODE SHIFTER",,status-playable,playable,2020-08-09 15:20:55.000 +"Code: Realize ~Future Blessings~",010002400F408000,status-playable;nvdec,playable,2023-03-31 16:57:47.000 +"Coffee Crisis",0100CF800C810000,status-playable,playable,2021-02-20 12:34:52.000 +"Coffee Talk",,status-playable,playable,2020-08-10 09:48:44.000 +"Coffin Dodgers",0100178009648000,status-playable,playable,2021-02-20 14:57:41.000 +"Cold Silence",010035B01706E000,cpu;status-nothing;crash,nothing,2024-07-11 17:06:14.000 +"Collar X Malice",010083E00F40E000,status-playable;nvdec,playable,2022-10-02 11:51:56.000 +"Collar X Malice -Unlimited-",0100E3B00F412000,status-playable;nvdec,playable,2022-10-04 15:30:40.000 +"Collection of Mana",,status-playable,playable,2020-10-19 19:29:45.000 +"COLLECTION of SaGA FINAL FANTASY LEGEND",,status-playable,playable,2020-12-30 19:11:16.000 +"Collidalot",010030800BC36000,status-playable;nvdec,playable,2022-09-13 14:09:27.000 +"Color Zen",,status-playable,playable,2020-05-22 10:56:17.000 +"Colorgrid",,status-playable,playable,2020-10-04 01:50:52.000 +"Coloring Book",0100A7000BD28000,status-playable,playable,2022-07-22 11:17:05.000 +"Colors Live",010020500BD86000,gpu;services;status-boots;crash,boots,2023-02-26 02:51:07.000 +"Colossus Down",0100E2F0128B4000,status-playable,playable,2021-02-04 20:49:50.000 +"Commander Keen in Keen Dreams",0100C4D00D16A000,gpu;status-ingame,ingame,2022-08-04 20:34:20.000 +"Commander Keen in Keen Dreams: Definitive Edition",0100E400129EC000,status-playable,playable,2021-05-11 19:33:54.000 +"Commandos 2 HD Remaster",010065A01158E000,gpu;status-ingame;nvdec,ingame,2022-08-10 21:52:27.000 +"CONARIUM",010015801308E000,UE4;nvdec;status-playable,playable,2021-04-26 17:57:53.000 +"Concept Destruction",0100971011224000,status-playable,playable,2022-09-29 12:28:56.000 +"Conduct TOGETHER!",010043700C9B0000,nvdec;status-playable,playable,2021-02-20 12:59:00.000 +"Conga Master Party!",,status-playable,playable,2020-05-22 13:22:24.000 +"Connection Haunted",,slow;status-playable,playable,2020-12-10 18:57:14.000 +"Construction Simulator 3 - Console Edition",0100A5600FAC0000,status-playable,playable,2023-02-06 09:31:23.000 +"Constructor Plus",,status-playable,playable,2020-05-26 12:37:40.000 +"Contra Anniversary Collection",0100DCA00DA7E000,status-playable,playable,2022-07-22 11:30:12.000 +"CONTRA: ROGUE CORPS",,crash;nvdec;regression;status-menus,menus,2021-01-07 13:23:35.000 +"CONTRA: ROGUE CORPS Demo",0100B8200ECA6000,gpu;status-ingame,ingame,2022-09-04 16:46:52.000 +"Contraptions",01007D701298A000,status-playable,playable,2021-02-08 18:40:50.000 +"Control Ultimate Edition - Cloud Version",0100041013360000,Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:34:06.000 +"Convoy",,status-playable,playable,2020-10-15 14:43:50.000 +"Cook, Serve, Delicious! 3?!",0100B82010B6C000,status-playable,playable,2022-10-09 12:09:34.000 +"Cooking Mama: Cookstar",010060700EFBA000,status-menus;crash;loader-allocator,menus,2021-11-20 03:19:35.000 +"Cooking Simulator",01001E400FD58000,status-playable,playable,2021-04-18 13:25:23.000 +"Cooking Tycoons 2: 3 in 1 Bundle",,status-playable,playable,2020-11-16 22:19:33.000 +"Cooking Tycoons: 3 in 1 Bundle",,status-playable,playable,2020-11-16 22:44:26.000 +"Copperbell",,status-playable,playable,2020-10-04 15:54:36.000 +"Corpse Party: Blood Drive",010016400B1FE000,nvdec;status-playable,playable,2021-03-01 12:44:23.000 +"Cosmic Fantasy Collection",0100CCB01B1A0000,status-ingame,ingame,2024-05-21 17:56:37.000 +"Cosmic Star Heroine",010067C00A776000,status-playable,playable,2021-02-20 14:30:47.000 +"COTTOn Reboot! [ コットン リブート! ]",01003DD00F94A000,status-playable,playable,2022-05-24 16:29:24.000 +"Cotton/Guardian Saturn Tribute Games",,gpu;status-boots,boots,2022-11-27 21:00:51.000 +"Couch Co-Op Bundle Vol. 2",01000E301107A000,status-playable;nvdec,playable,2022-10-02 12:04:21.000 +"Country Tales",0100C1E012A42000,status-playable,playable,2021-06-17 16:45:39.000 +"Cozy Grove",01003370136EA000,gpu;status-ingame,ingame,2023-07-30 22:22:19.000 +"Crash Bandicoot 4: It's About Time",010073401175E000,status-playable;nvdec;UE4,playable,2024-03-17 07:13:45.000 +"Crash Bandicoot N. Sane Trilogy",0100D1B006744000,status-playable,playable,2024-02-11 11:38:14.000 +"Crash Drive 2",,online;status-playable,playable,2020-12-17 02:45:46.000 +"Crash Dummy",,nvdec;status-playable,playable,2020-05-23 11:12:43.000 +"Crash Team Racing Nitro-Fueled",0100F9F00C696000,gpu;status-ingame;nvdec;online-broken,ingame,2023-06-25 02:40:17.000 +"Crashbots",0100BF200CD74000,status-playable,playable,2022-07-22 13:50:52.000 +"Crashlands",010027100BD16000,status-playable,playable,2021-05-27 20:30:06.000 +"Crawl",,status-playable,playable,2020-05-22 10:16:05.000 +"Crayola Scoot",0100C66007E96000,status-playable;nvdec,playable,2022-07-22 14:01:55.000 +"Crayon Shin-chan Ora to Hakase no Natsuyasumi Owaranai Nanokakan no Tabi",01005BA00F486000,status-playable,playable,2021-07-21 10:41:33.000 +"Crayon Shin-chan The Storm Called Flaming Kasukabe Runner!",,services;status-menus,menus,2020-03-20 14:00:57.000 +"Crazy Strike Bowling EX",,UE4;gpu;nvdec;status-ingame,ingame,2020-08-07 18:15:59.000 +"Crazy Zen Mini Golf",,status-playable,playable,2020-08-05 14:00:00.000 +"Creaks",,status-playable,playable,2020-08-15 12:20:52.000 +"Creature in the Well",,UE4;gpu;status-ingame,ingame,2020-11-16 12:52:40.000 +"Creepy Tale",,status-playable,playable,2020-12-15 21:58:03.000 +"Cresteaju",,gpu;status-ingame,ingame,2021-03-24 10:46:06.000 +"Cricket 19",010022D00D4F0000,gpu;status-ingame,ingame,2021-06-14 14:56:07.000 +"Cricket 22",0100387017100000,status-boots;crash,boots,2023-10-18 08:01:57.000 +"Crimsonland",01005640080B0000,status-playable,playable,2021-05-27 20:50:54.000 +"Cris Tales",0100B0400EBC4000,crash;status-ingame,ingame,2021-07-29 15:10:53.000 +"CRISIS CORE –FINAL FANTASY VII– REUNION",01004BC0166CC000,status-playable,playable,2022-12-19 15:53:59.000 +"Croc's World",,status-playable,playable,2020-05-22 11:21:09.000 +"Croc's World 2",,status-playable,playable,2020-12-16 20:01:40.000 +"Croc's World 3",,status-playable,playable,2020-12-30 18:53:26.000 +"Croixleur Sigma",01000F0007D92000,status-playable;online,playable,2022-07-22 14:26:54.000 +"CrossCode",01003D90058FC000,status-playable,playable,2024-02-17 10:23:19.000 +"Crossing Souls",0100B1E00AA56000,nvdec;status-playable,playable,2021-02-20 15:42:54.000 +"Crown Trick",0100059012BAE000,status-playable,playable,2021-06-16 19:36:29.000 +"Cruis'n Blast",0100B41013C82000,gpu;status-ingame,ingame,2023-07-30 10:33:47.000 +"Crymachina Trial Edition ( Demo ) [ クライマキナ ]",01000CC01C108000,status-playable;demo,playable,2023-08-06 05:33:21.000 +"Crypt of the Necrodancer",0100CEA007D08000,status-playable;nvdec,playable,2022-11-01 09:52:06.000 +"Crysis 2 Remastered",0100582010AE0000,deadlock;status-menus,menus,2023-09-21 10:46:17.000 +"Crysis 3 Remastered",0100CD3010AE2000,deadlock;status-menus,menus,2023-09-10 16:03:50.000 +"Crysis Remastered",0100E66010ADE000,status-menus;nvdec,menus,2024-08-13 05:23:24.000 +"Crystal Crisis",0100972008234000,nvdec;status-playable,playable,2021-02-20 13:52:44.000 +"Cthulhu Saves Christmas",,status-playable,playable,2020-12-14 00:58:55.000 +"Cube Creator X",010001600D1E8000,status-menus;crash,menus,2021-11-25 08:53:28.000 +"Cubers: Arena",010082E00F1CE000,status-playable;nvdec;UE4,playable,2022-10-04 16:05:40.000 +"Cubicity",010040D011D04000,status-playable,playable,2021-06-14 14:19:51.000 +"Cuphead",0100A5C00D162000,status-playable,playable,2022-02-01 22:45:55.000 +"Cupid Parasite",0100F7E00DFC8000,gpu;status-ingame,ingame,2023-08-21 05:52:36.000 +"Curious Cases",,status-playable,playable,2020-08-10 09:30:48.000 +"Curse of the Dead Gods",0100D4A0118EA000,status-playable,playable,2022-08-30 12:25:38.000 +"Curved Space",0100CE5014026000,status-playable,playable,2023-01-14 22:03:50.000 +"Cyber Protocol",,nvdec;status-playable,playable,2020-09-28 14:47:40.000 +"Cyber Shadow",0100C1F0141AA000,status-playable,playable,2022-07-17 05:37:41.000 +"Cybxus Heart",01006B9013672000,gpu;slow;status-ingame,ingame,2022-01-15 05:00:49.000 +"Cytus α",010063100B2C2000,nvdec;status-playable,playable,2021-02-20 13:40:46.000 +"DAEMON X MACHINA",0100B6400CA56000,UE4;audout;ldn-untested;nvdec;status-playable,playable,2021-06-09 19:22:29.000 +"Dairoku: Ayakashimori",010061300DF48000,status-nothing;Needs Update;loader-allocator,nothing,2021-11-30 05:09:38.000 +"Damsel",0100BD2009A1C000,status-playable,playable,2022-09-06 11:54:39.000 +"Dandara",,status-playable,playable,2020-05-26 12:42:33.000 +"Dandy Dungeon: Legend of Brave Yamada",,status-playable,playable,2021-01-06 09:48:47.000 +"Danger Mouse",01003ED0099B0000,status-boots;crash;online,boots,2022-07-22 15:49:45.000 +"Danger Scavenger -",,nvdec;status-playable,playable,2021-04-17 15:53:04.000 +"Danmaku Unlimited 3",,status-playable,playable,2020-11-15 00:48:35.000 +"Darius Cozmic Collection",,status-playable,playable,2021-02-19 20:59:06.000 +"Darius Cozmic Collection Special Edition",010059C00BED4000,status-playable,playable,2022-07-22 16:26:50.000 +"Dariusburst - Another Chronicle EX+",010015800F93C000,online;status-playable,playable,2021-04-05 14:21:43.000 +"Dark Arcana: The Carnival",01003D301357A000,gpu;slow;status-ingame,ingame,2022-02-19 08:52:28.000 +"Dark Devotion",010083A00BF6C000,status-playable;nvdec,playable,2022-08-09 09:41:18.000 +"Dark Quest 2",,status-playable,playable,2020-11-16 21:34:52.000 +"DARK SOULS™: REMASTERED",01004AB00A260000,gpu;status-ingame;nvdec;online-broken,ingame,2024-04-09 19:47:58.000 +"Dark Witch Music Episode: Rudymical",,status-playable,playable,2020-05-22 09:44:44.000 +"Darkest Dungeon",01008F1008DA6000,status-playable;nvdec,playable,2022-07-22 18:49:18.000 +"Darksiders Genesis",0100F2300D4BA000,status-playable;nvdec;online-broken;UE4;ldn-broken,playable,2022-09-21 18:06:25.000 +"Darksiders II Deathinitive Edition",010071800BA98000,gpu;status-ingame;nvdec;online-broken,ingame,2024-06-26 00:37:25.000 +"Darksiders Warmastered Edition",0100E1400BA96000,status-playable;nvdec,playable,2023-03-02 18:08:09.000 +"Darkwood",,status-playable,playable,2021-01-08 21:24:06.000 +"DARQ Complete Edition",0100440012FFA000,audout;status-playable,playable,2021-04-07 15:26:21.000 +"Darts Up",0100BA500B660000,status-playable,playable,2021-04-14 17:22:22.000 +"Dawn of the Breakers",0100F0B0081DA000,status-menus;online-broken;vulkan-backend-bug,menus,2022-12-08 14:40:03.000 +"Day and Night",,status-playable,playable,2020-12-17 12:30:51.000 +"De Blob",,nvdec;status-playable,playable,2021-01-06 17:34:46.000 +"de Blob 2",,nvdec;status-playable,playable,2021-01-06 13:00:16.000 +"De Mambo",01008E900471E000,status-playable,playable,2021-04-10 12:39:40.000 +"Dead by Daylight",01004C400CF96000,status-boots;nvdec;online-broken;UE4,boots,2022-09-13 14:32:13.000 +"Dead Cells",0100646009FBE000,status-playable,playable,2021-09-22 22:18:49.000 +"Dead End Job",01004C500BD40000,status-playable;nvdec,playable,2022-09-19 12:48:44.000 +"DEAD OR ALIVE Xtreme 3 Scarlet",01009CC00C97C000,status-playable,playable,2022-07-23 17:05:06.000 +"DEAD OR SCHOOL",0100A5000F7AA000,status-playable;nvdec,playable,2022-09-06 12:04:09.000 +"Dead Z Meat",0100A24011F52000,UE4;services;status-ingame,ingame,2021-04-14 16:50:16.000 +"Deadly Days",,status-playable,playable,2020-11-27 13:38:55.000 +"Deadly Premonition 2",0100BAC011928000,status-playable,playable,2021-06-15 14:12:36.000 +"DEADLY PREMONITION Origins",0100EBE00F22E000,32-bit;status-playable;nvdec,playable,2024-03-25 12:47:46.000 +"Dear Magi - Mahou Shounen Gakka -",,status-playable,playable,2020-11-22 16:45:16.000 +"Death and Taxes",,status-playable,playable,2020-12-15 20:27:49.000 +"Death Come True",010012B011AB2000,nvdec;status-playable,playable,2021-06-10 22:30:49.000 +"Death Coming",0100F3B00CF32000,status-nothing;crash,nothing,2022-02-06 07:43:03.000 +"Death end re;Quest",0100AEC013DDA000,status-playable,playable,2023-07-09 12:19:54.000 +"Death Mark",,status-playable,playable,2020-12-13 10:56:25.000 +"Death Road to Canada",0100423009358000,gpu;audio;status-nothing;32-bit;crash,nothing,2023-06-28 15:39:26.000 +"Death Squared",,status-playable,playable,2020-12-04 13:00:15.000 +"Death Tales",,status-playable,playable,2020-12-17 10:55:52.000 +"Death's Hangover",0100492011A8A000,gpu;status-boots,boots,2023-08-01 22:38:06.000 +"Deathsmiles I・II",01009120119B4000,status-playable,playable,2024-04-08 19:29:00.000 +"Debris Infinity",010034F00BFC8000,nvdec;online;status-playable,playable,2021-05-28 12:14:39.000 +"Decay of Logos",010027700FD2E000,status-playable;nvdec,playable,2022-09-13 14:42:13.000 +"Deedlit in Wonder Labyrinth",0100EF0015A9A000,deadlock;status-ingame;Needs Update;Incomplete,ingame,2022-01-19 10:00:59.000 +"Deemo",01002CC0062B8000,status-playable,playable,2022-07-24 11:34:33.000 +"DEEMO -Reborn-",01008B10132A2000,status-playable;nvdec;online-broken,playable,2022-10-17 15:18:11.000 +"Deep Diving Adventures",010026800FA88000,status-playable,playable,2022-09-22 16:43:37.000 +"Deep Ones",,services;status-nothing,nothing,2020-04-03 02:54:19.000 +"Deep Sky Derelicts Definitive Edition",0100C3E00D68E000,status-playable,playable,2022-09-27 11:21:08.000 +"Deep Space Rush",,status-playable,playable,2020-07-07 23:30:33.000 +"DeepOne",0100961011BE6000,services-horizon;status-nothing;Needs Update,nothing,2024-01-18 15:01:05.000 +"Defenders of Ekron - Definitive Edition",01008BB00F824000,status-playable,playable,2021-06-11 16:31:03.000 +"Defentron",0100CDE0136E6000,status-playable,playable,2022-10-17 15:47:56.000 +"Defunct",,status-playable,playable,2021-01-08 21:33:46.000 +"Degrees of Separation",,status-playable,playable,2021-01-10 13:40:04.000 +"Dei Gratia no Rashinban",010071C00CBA4000,crash;status-nothing,nothing,2021-07-13 02:25:32.000 +"Deleveled",,slow;status-playable,playable,2020-12-15 21:02:29.000 +"DELTARUNE Chapter 1",010023800D64A000,status-playable,playable,2023-01-22 04:47:44.000 +"Dementium: The Ward (Dementium Remastered)",010038B01D2CA000,status-boots;crash,boots,2024-09-02 08:28:14.000 +"Demetrios - The BIG Cynical Adventure",0100AB600ACB4000,status-playable,playable,2021-06-04 12:01:01.000 +"Demolish & Build",010099D00D1A4000,status-playable,playable,2021-06-13 15:27:26.000 +"Demon Pit",010084600F51C000,status-playable;nvdec,playable,2022-09-19 13:35:15.000 +"Demon's Crystals",0100A2B00BD88000,status-nothing;crash;regression,nothing,2022-12-07 16:33:17.000 +"Demon's Rise",,status-playable,playable,2020-07-29 12:26:27.000 +"Demon's Rise - Lords of Chaos",0100E29013818000,status-playable,playable,2021-04-06 16:20:06.000 +"Demon's Tier+",0100161011458000,status-playable,playable,2021-06-09 17:25:36.000 +"DEMON'S TILT",0100BE800E6D8000,status-playable,playable,2022-09-19 13:22:46.000 +"Demong Hunter",,status-playable,playable,2020-12-12 15:27:08.000 +"Densha de go!! Hashirou Yamanote Sen",0100BC501355A000,status-playable;nvdec;UE4,playable,2023-11-09 07:47:58.000 +"Depixtion",,status-playable,playable,2020-10-10 18:52:37.000 +"Deployment",01000BF00B6BC000,slow;status-playable;online-broken,playable,2022-10-17 16:23:59.000 +"Deponia",010023600C704000,nvdec;status-playable,playable,2021-01-26 17:17:19.000 +"DERU - The Art of Cooperation",,status-playable,playable,2021-01-07 16:59:59.000 +"Descenders",,gpu;status-ingame,ingame,2020-12-10 15:22:36.000 +"Desire remaster ver.",,crash;status-boots,boots,2021-01-17 02:34:37.000 +"DESTINY CONNECT",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 12:20:36.000 +"Destrobots",01008BB011ED6000,status-playable,playable,2021-03-06 14:37:05.000 +"Destroy All Humans!",01009E701356A000,gpu;status-ingame;nvdec;UE4,ingame,2023-01-14 22:23:53.000 +"Detective Dolittle",010030600E65A000,status-playable,playable,2021-03-02 14:03:59.000 +"Detective Gallo",01009C0009842000,status-playable;nvdec,playable,2022-07-24 11:51:04.000 +"Detective Jinguji Saburo Prism of Eyes",,status-playable,playable,2020-10-02 21:54:41.000 +"Detective Pikachu Returns",010007500F27C000,status-playable,playable,2023-10-07 10:24:59.000 +"Devil Engine",010031B00CF66000,status-playable,playable,2021-06-04 11:54:30.000 +"Devil Kingdom",01002F000E8F2000,status-playable,playable,2023-01-31 08:58:44.000 +"Devil May Cry",,nvdec;status-playable,playable,2021-01-04 19:43:08.000 +"Devil May Cry 2",01007CF00D5BA000,status-playable;nvdec,playable,2023-01-24 23:03:20.000 +"Devil May Cry 3 Special Edition",01007B600D5BC000,status-playable;nvdec,playable,2024-07-08 12:33:23.000 +"Devil Slayer - Raksasi",01003C900EFF6000,status-playable,playable,2022-10-26 19:42:32.000 +"Devious Dungeon",01009EA00A320000,status-playable,playable,2021-03-04 13:03:06.000 +"Dex",,nvdec;status-playable,playable,2020-08-12 16:48:12.000 +"Dexteritrip",,status-playable,playable,2021-01-06 12:51:12.000 +"Dezatopia",0100AFC00E06A000,online;status-playable,playable,2021-06-15 21:06:11.000 +"Diablo 2 Resurrected",0100726014352000,gpu;status-ingame;nvdec,ingame,2023-08-18 18:42:47.000 +"Diablo III: Eternal Collection",01001B300B9BE000,status-playable;online-broken;ldn-works,playable,2023-08-21 23:48:03.000 +"Diabolic",0100F73011456000,status-playable,playable,2021-06-11 14:45:08.000 +"DIABOLIK LOVERS CHAOS LINEAGE",010027400BD24000,gpu;status-ingame;Needs Update,ingame,2023-06-08 02:20:44.000 +"Dicey Dungeons",0100BBF011394000,gpu;audio;slow;status-ingame,ingame,2023-08-02 20:30:12.000 +"Die for Valhalla!",,status-playable,playable,2021-01-06 16:09:14.000 +"Dies irae Amantes amentes For Nintendo Switch",0100BB900B5B4000,status-nothing;32-bit;crash,nothing,2022-02-16 07:09:05.000 +"Dig Dog",0100A5A00DBB0000,gpu;status-ingame,ingame,2021-06-02 17:17:51.000 +"Digerati Presents: The Dungeon Crawl Vol. 1",010035D0121EC000,slow;status-ingame,ingame,2021-04-18 14:04:55.000 +"Digimon Story Cyber Sleuth: Complete Edition",010014E00DB56000,status-playable;nvdec;opengl,playable,2022-09-13 15:02:37.000 +"Digimon World: Next Order",0100F00014254000,status-playable,playable,2023-05-09 20:41:06.000 +"Ding Dong XL",,status-playable,playable,2020-07-14 16:13:19.000 +"Dininho Adventures",,status-playable,playable,2020-10-03 17:25:51.000 +"Dininho Space Adventure",010027E0158A6000,status-playable,playable,2023-01-14 22:43:04.000 +"Dirt Bike Insanity",0100A8A013DA4000,status-playable,playable,2021-01-31 13:27:38.000 +"Dirt Trackin Sprint Cars",01004CB01378A000,status-playable;nvdec;online-broken,playable,2022-10-17 16:34:56.000 +"Disagaea 6: Defiance of Destiny Demo",0100918014B02000,status-playable;demo,playable,2022-10-26 20:02:04.000 +"Disaster Report 4: Summer Memories",010020700E2A2000,status-playable;nvdec;UE4,playable,2022-09-27 19:41:31.000 +"Disc Jam",0100510004D2C000,UE4;ldn-untested;nvdec;online;status-playable,playable,2021-04-08 16:40:35.000 +"Disco Dodgeball Remix",,online;status-playable,playable,2020-09-28 23:24:49.000 +"Disgaea 1 Complete",01004B100AF18000,status-playable,playable,2023-01-30 21:45:23.000 +"Disgaea 4 Complete Plus",,gpu;slow;status-playable,playable,2020-02-18 10:54:28.000 +"Disgaea 4 Complete+ Demo",010068C00F324000,status-playable;nvdec,playable,2022-09-13 15:21:59.000 +"Disgaea 5 Complete",01005700031AE000,nvdec;status-playable,playable,2021-03-04 15:32:54.000 +"Disgaea 6: Defiance of Destiny",0100ABC013136000,deadlock;status-ingame,ingame,2023-04-15 00:50:32.000 +"Disgaea 6: Defiance of Destiny [ FG ] [ 魔界戦記ディスガイア6 ]",0100307011D80000,status-playable,playable,2021-06-08 13:20:33.000 +"Disgaea 6: Defiance of Destiny Demo [ 魔界戦記ディスガイア6 ]",01005EE013888000,gpu;status-ingame;demo,ingame,2022-12-06 15:27:59.000 +"Disjunction",01000B70122A2000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-04-28 23:55:24.000 +"Disney Classic Games: Aladdin and The Lion King",0100A2F00EEFC000,status-playable;online-broken,playable,2022-09-13 15:44:17.000 +"Disney Epic Mickey: Rebrushed",0100DA201EBF8000,status-ingame;crash,ingame,2024-09-26 22:11:51.000 +"Disney SpeedStorm",0100F0401435E000,services;status-boots,boots,2023-11-27 02:15:32.000 +"Disney Tsum Tsum Festival",,crash;status-menus,menus,2020-07-14 14:05:28.000 +"DISTRAINT 2",,status-playable,playable,2020-09-03 16:08:12.000 +"DISTRAINT: Deluxe Edition",,status-playable,playable,2020-06-15 23:42:24.000 +"Divinity Original Sin 2",010027400CDC6000,services;status-menus;crash;online-broken;regression,menus,2023-08-13 17:20:03.000 +"Dodo Peak",01001770115C8000,status-playable;nvdec;UE4,playable,2022-10-04 16:13:05.000 +"DoDonPachi Resurrection - 怒首領蜂大復活",01005A001489A000,status-ingame;32-bit;crash,ingame,2024-01-25 14:37:32.000 +"Dogurai",,status-playable,playable,2020-10-04 02:40:16.000 +"Dokapon Up! Mugen no Roulette",010048100D51A000,gpu;status-menus;Needs Update,menus,2022-12-08 19:39:10.000 +"Dokuro",,nvdec;status-playable,playable,2020-12-17 14:47:09.000 +"Don't Die Mr. Robot DX",010007200AC0E000,status-playable;nvdec,playable,2022-09-02 18:34:38.000 +"Don't Knock Twice",0100E470067A8000,status-playable,playable,2024-05-08 22:37:58.000 +"Don't Sink",0100C4D00B608000,gpu;status-ingame,ingame,2021-02-26 15:41:11.000 +"Don't Starve",0100751007ADA000,status-playable;nvdec,playable,2022-02-05 20:43:34.000 +"Dongo Adventure",010088B010DD2000,status-playable,playable,2022-10-04 16:22:26.000 +"Donkey Kong Country Tropical Freeze",0100C1F0051B6000,status-playable,playable,2024-08-05 16:46:10.000 +"Doodle Derby",,status-boots,boots,2020-12-04 22:51:48.000 +"DOOM",0100416004C00000,gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-09-23 15:40:07.000 +"DOOM (1993)",010018900DD00000,status-menus;nvdec;online-broken,menus,2022-09-06 13:32:19.000 +"DOOM + DOOM II",01008CB01E52E000,status-playable;opengl;ldn-untested;LAN,playable,2024-09-12 07:06:01.000 +"DOOM 2",0100D4F00DD02000,nvdec;online;status-playable,playable,2021-06-03 20:10:01.000 +"DOOM 3",010029D00E740000,status-menus;crash,menus,2024-08-03 05:25:47.000 +"DOOM 64",,nvdec;status-playable;vulkan,playable,2020-10-13 23:47:28.000 +"DOOM Eternal",0100B1A00D8CE000,gpu;slow;status-ingame;nvdec;online-broken,ingame,2024-08-28 15:57:17.000 +"Door Kickers: Action Squad",01005ED00CD70000,status-playable;online-broken;ldn-broken,playable,2022-09-13 16:28:53.000 +"DORAEMON STORY OF SEASONS",,nvdec;status-playable,playable,2020-07-13 20:28:11.000 +"Double Cross",,status-playable,playable,2021-01-07 15:34:22.000 +"Double Dragon & Kunio-Kun: Retro Brawler Bundle",,status-playable,playable,2020-09-01 12:48:46.000 +"DOUBLE DRAGON Ⅲ: The Sacred Stones",01001AD00E49A000,online;status-playable,playable,2021-06-11 15:41:44.000 +"Double Dragon Neon",01005B10132B2000,gpu;audio;status-ingame;32-bit,ingame,2022-09-20 18:00:20.000 +"Double Kick Heroes",,gpu;status-ingame,ingame,2020-10-03 14:33:59.000 +"Double Pug Switch",0100A5D00C7C0000,status-playable;nvdec,playable,2022-10-10 10:59:35.000 +"Double Switch - 25th Anniversary Edition",0100FC000EE10000,status-playable;nvdec,playable,2022-09-19 13:41:50.000 +"Down to Hell",0100B6600FE06000,gpu;status-ingame;nvdec,ingame,2022-09-19 14:01:26.000 +"Downwell",010093D00C726000,status-playable,playable,2021-04-25 20:05:24.000 +"Dr Kawashima's Brain Training",0100ED000D390000,services;status-ingame,ingame,2023-06-04 00:06:46.000 +"Dracula's Legacy",,nvdec;status-playable,playable,2020-12-10 13:24:25.000 +"DragoDino",,gpu;nvdec;status-ingame,ingame,2020-08-03 20:49:16.000 +"Dragon Audit",0100DBC00BD5A000,crash;status-ingame,ingame,2021-05-16 14:24:46.000 +"DRAGON BALL FighterZ",0100A250097F0000,UE4;ldn-broken;nvdec;online;status-playable,playable,2021-06-11 16:19:04.000 +"Dragon Ball Xenoverse 2",010078D000F88000,gpu;status-ingame;nvdec;online;ldn-untested,ingame,2022-07-24 12:31:01.000 +"DRAGON BALL Z: KAKAROT + A NEW POWER AWAKENS SET",010051C0134F8000,status-playable;vulkan-backend-bug,playable,2024-08-28 00:03:50.000 +"Dragon Marked for Death: Frontline Fighters (Empress & Warrior)",010089700150E000,status-playable;ldn-untested;audout,playable,2022-03-10 06:44:34.000 +"Dragon Quest",0100EFC00EFB2000,gpu;status-boots,boots,2021-11-09 03:31:32.000 +"Dragon Quest Builders",010008900705C000,gpu;status-ingame;nvdec,ingame,2023-08-14 09:54:36.000 +"Dragon Quest Builders 2",010042000A986000,status-playable,playable,2024-04-19 16:36:38.000 +"Dragon Quest Heroes I + II (JP)",0100CD3000BDC000,nvdec;status-playable,playable,2021-04-08 14:27:16.000 +"Dragon Quest II: Luminaries of the Legendary Line",010062200EFB4000,status-playable,playable,2022-09-13 16:44:11.000 +"Dragon Quest III HD-2D Remake",01003E601E324000,status-ingame;vulkan-backend-bug;UE4;audout;mac-bug,ingame,2025-01-07 04:10:27.000 +"Dragon Quest III: The Seeds of Salvation",010015600EFB6000,gpu;status-boots,boots,2021-11-09 03:38:34.000 +"DRAGON QUEST MONSTERS: The Dark Prince",0100A77018EA0000,status-playable,playable,2023-12-29 16:10:05.000 +"Dragon Quest Treasures",0100217014266000,gpu;status-ingame;UE4,ingame,2023-05-09 11:16:52.000 +"Dragon Quest X Awakening Five Races Offline",0100E2E0152E4000,status-playable;nvdec;UE4,playable,2024-08-20 10:04:24.000 +"Dragon Quest XI S: Echoes of an Elusive Age - Definitive Edition",01006C300E9F0000,status-playable;UE4,playable,2021-11-27 12:27:11.000 +"Dragon's Dogma: Dark Arisen",010032C00AC58000,status-playable,playable,2022-07-24 12:58:33.000 +"Dragon's Lair Trilogy",,nvdec;status-playable,playable,2021-01-13 22:12:07.000 +"DragonBlaze for Nintendo Switch",,32-bit;status-playable,playable,2020-10-14 11:11:28.000 +"DragonFangZ",,status-playable,playable,2020-09-28 21:35:18.000 +"Dragons Dawn of New Riders",,nvdec;status-playable,playable,2021-01-27 20:05:26.000 +"Drawful 2",0100F7800A434000,status-ingame,ingame,2022-07-24 13:50:21.000 +"Drawngeon: Dungeons of Ink and Paper",0100B7E0102E4000,gpu;status-ingame,ingame,2022-09-19 15:41:25.000 +"Dream",,status-playable,playable,2020-12-15 19:55:07.000 +"Dream Alone - 0100AA0093DC000",,nvdec;status-playable,playable,2021-01-27 19:41:50.000 +"DreamBall",,UE4;crash;gpu;status-ingame,ingame,2020-08-05 14:45:25.000 +"Dreaming Canvas",010058B00F3C0000,UE4;gpu;status-ingame,ingame,2021-06-13 22:50:07.000 +"Dreamo",0100D24013466000,status-playable;UE4,playable,2022-10-17 18:25:28.000 +"DreamWorks Spirit Lucky's Big Adventure",0100236011B4C000,status-playable,playable,2022-10-27 13:30:52.000 +"Drone Fight",010058C00A916000,status-playable,playable,2022-07-24 14:31:56.000 +"Drowning",010052000A574000,status-playable,playable,2022-07-25 14:28:26.000 +"Drums",,status-playable,playable,2020-12-17 17:21:51.000 +"Duck Life Adventure",01005BC012C66000,status-playable,playable,2022-10-10 11:27:03.000 +"Duke Nukem 3D: 20th Anniversary World Tour",01007EF00CB88000,32-bit;status-playable;ldn-untested,playable,2022-08-19 22:22:40.000 +"Dull Grey",010068D0141F2000,status-playable,playable,2022-10-27 13:40:38.000 +"Dungeon Nightmares 1 + 2 Collection",0100926013600000,status-playable,playable,2022-10-17 18:54:22.000 +"Dungeon of the Endless",010034300F0E2000,nvdec;status-playable,playable,2021-05-27 19:16:26.000 +"Dungeon Stars",,status-playable,playable,2021-01-18 14:28:37.000 +"Dungeons & Bombs",,status-playable,playable,2021-04-06 12:46:22.000 +"Dunk Lords",0100EC30140B6000,status-playable,playable,2024-06-26 00:07:26.000 +"Dusk Diver",010011C00E636000,status-boots;crash;UE4,boots,2021-11-06 09:01:30.000 +"Dust: An Elysian Tail",0100B6E00A420000,status-playable,playable,2022-07-25 15:28:12.000 +"Dustoff Z",,status-playable,playable,2020-12-04 23:22:29.000 +"Dying Light: Platinum Edition",01008c8012920000,services-horizon;status-boots,boots,2024-03-11 10:43:32.000 +"Dyna Bomb",,status-playable,playable,2020-06-07 13:26:55.000 +"DYNASTY WARRIORS 8: Xtreme Legends Definitive Edition",0100E9A00CB30000,status-playable;nvdec,playable,2024-06-26 00:16:30.000 +"DYSMANTLE",010008900BC5A000,gpu;status-ingame,ingame,2024-07-15 16:24:12.000 +"EA Sports FC 24",0100BDB01A0E6000,status-boots,boots,2023-10-04 18:32:59.000 +"EA SPORTS FC 25",010054E01D878000,status-ingame;crash,ingame,2024-09-25 21:07:50.000 +"EA SPORTS FIFA 23 Nintendo Switch™ Legacy Edition",01001C8016B4E000,gpu;status-ingame;crash,ingame,2024-06-10 23:33:05.000 +"Eagle Island",010037400C7DA000,status-playable,playable,2021-04-10 13:15:42.000 +"Earth Defense Force World Brothers ( ま~るい地球が四角くなった!? デジボク地球防衛軍 )",0100B9E012992000,status-playable;UE4,playable,2022-12-07 12:59:16.000 +"Earth Defense Force: World Brothers",0100298014030000,status-playable;UE4,playable,2022-10-27 14:13:31.000 +"EARTH WARS",01009B7006C88000,status-playable,playable,2021-06-05 11:18:33.000 +"Earthfall: Alien Horde",0100DFC00E472000,status-playable;nvdec;UE4;ldn-untested,playable,2022-09-13 17:32:37.000 +"Earthlock",01006E50042EA000,status-playable,playable,2021-06-05 11:51:02.000 +"EarthNight",0100A2E00BB0C000,status-playable,playable,2022-09-19 21:02:20.000 +"Earthworms",0100DCE00B756000,status-playable,playable,2022-07-25 16:28:55.000 +"Earthworms Demo",,status-playable,playable,2021-01-05 16:57:11.000 +"Easy Come Easy Golf",0100ECF01800C000,status-playable;online-broken;regression,playable,2024-04-04 16:15:00.000 +"EAT BEAT DEADSPIKE-san",0100A9B009678000,audio;status-playable;Needs Update,playable,2022-12-02 19:25:29.000 +"eBaseball Powerful Pro Yakyuu 2022",0100BCA016636000,gpu;services-horizon;status-nothing;crash,nothing,2024-05-26 23:07:19.000 +"Eclipse: Edge of Light",,status-playable,playable,2020-08-11 23:06:29.000 +"eCrossminton",,status-playable,playable,2020-07-11 18:24:27.000 +"Edna & Harvey: Harvey's New Eyes",0100ABE00DB4E000,nvdec;status-playable,playable,2021-01-26 14:36:08.000 +"Edna & Harvey: The Breakout - Anniversary Edition",01004F000B716000,status-ingame;crash;nvdec,ingame,2022-08-01 16:59:56.000 +"Effie",01002550129F0000,status-playable,playable,2022-10-27 14:36:39.000 +"Ego Protocol",,nvdec;status-playable,playable,2020-12-16 20:16:35.000 +"Eiga Sumikko Gurashi Tobidasu Ehon to Himitsu no Ko Game de Asobo Ehon no Sekai",,status-playable,playable,2020-11-12 00:11:50.000 +"Eight Dragons",01003AD013BD2000,status-playable;nvdec,playable,2022-10-27 14:47:28.000 +"El Hijo - A Wild West Tale",010020A01209C000,nvdec;status-playable,playable,2021-04-19 17:44:08.000 +"Elden: Path of the Forgotten",,status-playable,playable,2020-12-15 00:33:19.000 +"ELEA: Paradigm Shift",,UE4;crash;status-nothing,nothing,2020-10-04 19:07:43.000 +"Element",0100A6700AF10000,status-playable,playable,2022-07-25 17:17:16.000 +"Elliot Quest",0100128003A24000,status-playable,playable,2022-07-25 17:46:14.000 +"Elrador Creatures",,slow;status-playable,playable,2020-12-12 12:35:35.000 +"Ember",010041A00FEC6000,status-playable;nvdec,playable,2022-09-19 21:16:11.000 +"Embracelet",,status-playable,playable,2020-12-04 23:45:00.000 +"Emma: Lost in Memories",010017b0102a8000,nvdec;status-playable,playable,2021-01-28 16:19:10.000 +"Enchanted in the Moonlight - Kiryu, Chikage & Yukinojo",010068300E08E000,gpu;status-ingame;nvdec,ingame,2022-11-20 16:18:45.000 +"Enchanting Mahjong Match",,gpu;status-ingame,ingame,2020-04-17 22:01:31.000 +"Endless Fables: Dark Moor",01004F3011F92000,gpu;nvdec;status-ingame,ingame,2021-03-07 15:31:03.000 +"Endless Ocean Luminous",010067B017588000,services-horizon;status-ingame;crash,ingame,2024-05-30 02:05:57.000 +"Energy Cycle Edge",0100B8700BD14000,services;status-ingame,ingame,2021-11-30 05:02:31.000 +"Energy Invasion",,status-playable,playable,2021-01-14 21:32:26.000 +"Enigmatis 2: The Mists of Ravenwood",0100C6200A0AA000,crash;regression;status-boots,boots,2021-06-06 15:15:30.000 +"Enter the Gungeon",01009D60076F6000,status-playable,playable,2022-07-25 20:28:33.000 +"Epic Loon",0100262009626000,status-playable;nvdec,playable,2022-07-25 22:06:13.000 +"EQI",01000FA0149B6000,status-playable;nvdec;UE4,playable,2022-10-27 16:42:32.000 +"EQQO",0100E95010058000,UE4;nvdec;status-playable,playable,2021-06-13 23:10:51.000 +"Escape First",,status-playable,playable,2020-10-20 22:46:53.000 +"Escape First 2",010021201296A000,status-playable,playable,2021-03-24 11:59:41.000 +"Escape from Chernobyl",0100FEF00F0AA000,status-boots;crash,boots,2022-09-19 21:36:58.000 +"Escape from Life Inc",010023E013244000,status-playable,playable,2021-04-19 17:34:09.000 +"Escape from Tethys",,status-playable,playable,2020-10-14 22:38:25.000 +"Escape Game Fort Boyard",,status-playable,playable,2020-07-12 12:45:43.000 +"ESP Ra.De. Psi",0100F9600E746000,audio;slow;status-ingame,ingame,2024-03-07 15:05:08.000 +"Esports powerful pro yakyuu 2020",010073000FE18000,gpu;status-ingame;crash;Needs More Attention,ingame,2024-04-29 05:34:14.000 +"Estranged: The Departure",01004F9012FD8000,status-playable;nvdec;UE4,playable,2022-10-24 10:37:58.000 +"Eternum Ex",,status-playable,playable,2021-01-13 20:28:32.000 +"Europa (Demo)",010092501EB2C000,gpu;status-ingame;crash;UE4,ingame,2024-04-23 10:47:12.000 +"EVE ghost enemies",01007BE0160D6000,gpu;status-ingame,ingame,2023-01-14 03:13:30.000 +"even if TEMPEST",010095E01581C000,gpu;status-ingame,ingame,2023-06-22 23:50:25.000 +"Event Horizon: Space Defense",,status-playable,playable,2020-07-31 20:31:24.000 +"EVERSPACE",0100DCF0093EC000,status-playable;UE4,playable,2022-08-14 01:16:24.000 +"Everybody 1-2-Switch!",01006F900BF8E000,services;deadlock;status-nothing,nothing,2023-07-01 05:52:55.000 +"Evil Defenders",,nvdec;status-playable,playable,2020-09-28 17:11:00.000 +"Evolution Board Game",01006A800FA22000,online;status-playable,playable,2021-01-20 22:37:56.000 +"Exception",0100F2D00C7DE000,status-playable;online-broken,playable,2022-09-20 12:47:10.000 +"Exit the Gungeon",0100DD30110CC000,status-playable,playable,2022-09-22 17:04:43.000 +"Exodemon",0100A82013976000,status-playable,playable,2022-10-27 20:17:52.000 +"Exorder",0100FA800A1F4000,nvdec;status-playable,playable,2021-04-15 14:17:20.000 +"Explosive Jake",01009B7010B42000,status-boots;crash,boots,2021-11-03 07:48:32.000 +"Eyes: The Horror Game",0100EFE00A3C2000,status-playable,playable,2021-01-20 21:59:46.000 +"Fable of Fairy Stones",0100E3D0103CE000,status-playable,playable,2021-05-05 21:04:54.000 +"Factorio",01004200189F4000,deadlock;status-boots,boots,2024-06-11 19:26:16.000 +"Fae Farm",010073F0189B6000,status-playable,playable,2024-08-25 15:12:12.000 +"Faeria",010069100DB08000,status-menus;nvdec;online-broken,menus,2022-10-04 16:44:41.000 +"Fairune Collection",01008A6009758000,status-playable,playable,2021-06-06 15:29:56.000 +"Fairy Fencer F™: Advent Dark Force",0100F6D00B8F2000,status-ingame;32-bit;crash;nvdec,ingame,2023-04-16 03:53:48.000 +"Fairy Tail",0100CF900FA3E000,status-playable;nvdec,playable,2022-10-04 23:00:32.000 +"Fall Of Light - Darkest Edition",01005A600BE60000,slow;status-ingame;nvdec,ingame,2024-07-24 04:19:26.000 +"Fallen Legion Revenants",0100AA801258C000,status-menus;crash,menus,2021-11-25 08:53:20.000 +"Famicom Detective Club: The Girl Who Stands Behind",0100D670126F6000,status-playable;nvdec,playable,2022-10-27 20:41:40.000 +"Famicom Detective Club: The Missing Heir",010033F0126F4000,status-playable;nvdec,playable,2022-10-27 20:56:23.000 +"Family Feud 2021",010060200FC44000,status-playable;online-broken,playable,2022-10-10 11:42:21.000 +"Family Mysteries: Poisonous Promises",0100034012606000,audio;status-menus;crash,menus,2021-11-26 12:35:06.000 +"Fantasy Friends",010017C012726000,status-playable,playable,2022-10-17 19:42:39.000 +"Fantasy Hero Unsigned Legacy",0100767008502000,status-playable,playable,2022-07-26 12:28:52.000 +"Fantasy Strike",0100944003820000,online;status-playable,playable,2021-02-27 01:59:18.000 +"Fantasy Tavern Sextet -Vol.1 New World Days-",01000E2012F6E000,gpu;status-ingame;crash;Needs Update,ingame,2022-12-05 16:48:00.000 +"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",,gpu;slow;status-ingame;crash,ingame,2021-11-06 02:57:29.000 +"FAR: Lone Sails",010022700E7D6000,status-playable,playable,2022-09-06 16:33:05.000 +"Farabel",,status-playable,playable,2020-08-03 17:47:28.000 +"Farm Expert 2019 for Nintendo Switch",,status-playable,playable,2020-07-09 21:42:57.000 +"Farm Mystery",01000E400ED98000,status-playable;nvdec,playable,2022-09-06 16:46:47.000 +"Farm Together",,status-playable,playable,2021-01-19 20:01:19.000 +"Farming Simulator 20",0100EB600E914000,nvdec;status-playable,playable,2021-06-13 10:52:44.000 +"Farming Simulator Nintendo Switch Edition",,nvdec;status-playable,playable,2021-01-19 14:46:44.000 +"Fashion Dreamer",0100E99019B3A000,status-playable,playable,2023-11-12 06:42:52.000 +"Fast RMX",01009510001CA000,slow;status-ingame;crash;ldn-partial,ingame,2024-06-22 20:48:58.000 +"Fatal Frame: Maiden of Black Water",0100BEB015604000,status-playable,playable,2023-07-05 16:01:40.000 +"Fatal Frame: Mask of the Lunar Eclipse",0100DAE019110000,status-playable;Incomplete,playable,2024-04-11 06:01:30.000 +"Fate/EXTELLA",010053E002EA2000,gpu;status-ingame;nvdec;online-broken;vulkan-backend-bug;opengl-backend-bug,ingame,2023-04-24 23:37:55.000 +"Fate/EXTELLA LINK",010051400B17A000,ldn-untested;nvdec;status-playable,playable,2021-01-27 00:45:50.000 +"fault - milestone one",,nvdec;status-playable,playable,2021-03-24 10:41:49.000 +"Fear Effect Sedna",,nvdec;status-playable,playable,2021-01-19 13:10:33.000 +"Fearmonium",0100F5501CE12000,status-boots;crash,boots,2024-03-06 11:26:11.000 +"Feather",0100E4300CB3E000,status-playable,playable,2021-06-03 14:11:27.000 +"Felix the Reaper",,nvdec;status-playable,playable,2020-10-20 23:43:03.000 +"Feudal Alloy",,status-playable,playable,2021-01-14 08:48:14.000 +"FEZ",01008D900B984000,gpu;status-ingame,ingame,2021-04-18 17:10:16.000 +"FIA European Truck Racing Championship",01007510040E8000,status-playable;nvdec,playable,2022-09-06 17:51:59.000 +"FIFA 18",0100F7B002340000,gpu;status-ingame;online-broken;ldn-untested,ingame,2022-07-26 12:43:59.000 +"FIFA 19",0100FFA0093E8000,gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-07-26 13:07:07.000 +"FIFA 20 Legacy Edition",01005DE00D05C000,gpu;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-09-13 17:57:20.000 +"FIFA 21 Legacy Edition",01000A001171A000,gpu;status-ingame;online-broken,ingame,2023-12-11 22:10:19.000 +"FIFA 22 Legacy Edition",0100216014472000,gpu;status-ingame,ingame,2024-03-02 14:13:48.000 +"Fight Crab",01006980127F0000,status-playable;online-broken;ldn-untested,playable,2022-10-05 10:24:04.000 +"Fight of Animals",,online;status-playable,playable,2020-10-15 15:08:28.000 +"Fight'N Rage",,status-playable,playable,2020-06-16 23:35:19.000 +"Fighting EX Layer Another Dash",0100D02014048000,status-playable;online-broken;UE4,playable,2024-04-07 10:22:33.000 +"Figment",0100118009C68000,nvdec;status-playable,playable,2021-01-27 19:36:05.000 +"Fill-a-Pix: Phil's Epic Adventure",,status-playable,playable,2020-12-22 13:48:22.000 +"Fimbul",0100C3A00BB76000,status-playable;nvdec,playable,2022-07-26 13:31:47.000 +"Fin and the Ancient Mystery",,nvdec;status-playable,playable,2020-12-17 16:40:39.000 +"FINAL FANTASY CRYSTAL CHRONICLES Remastered Edition",0100CE4010AAC000,status-playable,playable,2023-04-02 23:39:12.000 +"FINAL FANTASY I",01000EA014150000,status-nothing;crash,nothing,2024-09-05 20:55:30.000 +"FINAL FANTASY II",01006B7014156000,status-nothing;crash,nothing,2024-04-13 19:18:04.000 +"FINAL FANTASY IX",01006F000B056000,audout;nvdec;status-playable,playable,2021-06-05 11:35:00.000 +"FINAL FANTASY V",0100AA201415C000,status-playable,playable,2023-04-26 01:11:55.000 +"Final Fantasy VII",0100A5B00BDC6000,status-playable,playable,2022-12-09 17:03:30.000 +"FINAL FANTASY VIII REMASTERED",01008B900DC0A000,status-playable;nvdec,playable,2023-02-15 10:57:48.000 +"FINAL FANTASY X/X-2 HD REMASTER",0100BC300CB48000,gpu;status-ingame,ingame,2022-08-16 20:29:26.000 +"FINAL FANTASY XII THE ZODIAC AGE",0100EB100AB42000,status-playable;opengl;vulkan-backend-bug,playable,2024-08-11 07:01:54.000 +"FINAL FANTASY XV POCKET EDITION HD",,status-playable,playable,2021-01-05 17:52:08.000 +"Final Light, The Prison",,status-playable,playable,2020-07-31 21:48:44.000 +"Finding Teddy 2 : Definitive Edition",0100FF100FB68000,gpu;status-ingame,ingame,2024-04-19 16:51:33.000 +"Fire & Water",,status-playable,playable,2020-12-15 15:43:20.000 +"Fire Emblem Warriors",0100F15003E64000,status-playable;nvdec,playable,2023-05-10 01:53:10.000 +"Fire Emblem Warriors: Three Hopes",010071F0143EA000,gpu;status-ingame;nvdec,ingame,2024-05-01 07:07:42.000 +"Fire Emblem: Engage",0100A6301214E000,status-playable;amd-vendor-bug;mac-bug,playable,2024-09-01 23:37:26.000 +"Fire Emblem: Shadow Dragon and the Blade of Light",0100A12011CC8000,status-playable,playable,2022-10-17 19:49:14.000 +"Fire Emblem: Three Houses",010055D009F78000,status-playable;online-broken,playable,2024-09-14 23:53:50.000 +"Fire: Ungh's Quest",010025C014798000,status-playable;nvdec,playable,2022-10-27 21:41:26.000 +"Firefighters - The Simulation",0100434003C58000,status-playable,playable,2021-02-19 13:32:05.000 +"Firefighters: Airport Fire Department",,status-playable,playable,2021-02-15 19:17:00.000 +"Firewatch",0100AC300919A000,status-playable,playable,2021-06-03 10:56:38.000 +"Firework",,status-playable,playable,2020-12-04 20:20:09.000 +"Fishing Star World Tour",0100DEB00ACE2000,status-playable,playable,2022-09-13 19:08:51.000 +"Fishing Universe Simulator",010069800D292000,status-playable,playable,2021-04-15 14:00:43.000 +"Fit Boxing",0100807008868000,status-playable,playable,2022-07-26 19:24:55.000 +"Fitness Boxing",,services;status-ingame,ingame,2020-05-17 14:00:48.000 +"Fitness Boxing",0100E7300AAD4000,status-playable,playable,2021-04-14 20:33:33.000 +"Fitness Boxing 2: Rhythm & Exercise",0100073011382000,crash;status-ingame,ingame,2021-04-14 20:40:48.000 +"Five Dates",,nvdec;status-playable,playable,2020-12-11 15:17:11.000 +"Five Nights at Freddy's",0100B6200D8D2000,status-playable,playable,2022-09-13 19:26:36.000 +"Five Nights at Freddy's 2",01004EB00E43A000,status-playable,playable,2023-02-08 15:48:24.000 +"Five Nights at Freddy's 3",010056100E43C000,status-playable,playable,2022-09-13 20:58:07.000 +"Five Nights at Freddy's 4",010083800E43E000,status-playable,playable,2023-08-19 07:28:03.000 +"Five Nights at Freddy's: Help Wanted",0100F7901118C000,status-playable;UE4,playable,2022-09-29 12:40:09.000 +"Five Nights at Freddy's: Sister Location",01003B200E440000,status-playable,playable,2023-10-06 09:00:58.000 +"Five Nights At Freddy’s Security Breach",01009060193C4000,gpu;status-ingame;crash;mac-bug,ingame,2023-04-23 22:33:28.000 +"Flan",010038200E088000,status-ingame;crash;regression,ingame,2021-11-17 07:39:28.000 +"Flashback",,nvdec;status-playable,playable,2020-05-14 13:57:29.000 +"Flat Heroes",0100C53004C52000,gpu;status-ingame,ingame,2022-07-26 19:37:37.000 +"Flatland: Prologue",,status-playable,playable,2020-12-11 20:41:12.000 +"Flinthook",,online;status-playable,playable,2021-03-25 20:42:29.000 +"Flip Wars",010095A004040000,services;status-ingame;ldn-untested,ingame,2022-05-02 15:39:18.000 +"Flipping Death",01009FB002B2E000,status-playable,playable,2021-02-17 16:12:30.000 +"Flood of Light",,status-playable,playable,2020-05-15 14:15:25.000 +"Floor Kids",0100DF9005E7A000,status-playable;nvdec,playable,2024-08-18 19:38:49.000 +"Florence",,status-playable,playable,2020-09-05 01:22:30.000 +"Flowlines VS",,status-playable,playable,2020-12-17 17:01:53.000 +"Flux8",,nvdec;status-playable,playable,2020-06-19 20:55:11.000 +"Fly O'Clock VS",,status-playable,playable,2020-05-17 13:39:52.000 +"Fly Punch Boom!",,online;status-playable,playable,2020-06-21 12:06:11.000 +"Flying Hero X",0100419013A8A000,status-menus;crash,menus,2021-11-17 07:46:58.000 +"Fobia",,status-playable,playable,2020-12-14 21:05:23.000 +"Food Truck Tycoon",0100F3900D0F0000,status-playable,playable,2022-10-17 20:15:55.000 +"Football Manager 2021 Touch",01007CF013152000,gpu;status-ingame,ingame,2022-10-17 20:08:23.000 +"FOOTBALL MANAGER 2023 TOUCH",0100EDC01990E000,gpu;status-ingame,ingame,2023-08-01 03:40:53.000 +"Football Manager Touch 2018",010097F0099B4000,status-playable,playable,2022-07-26 20:17:56.000 +"For The King",010069400B6BE000,nvdec;status-playable,playable,2021-02-15 18:51:44.000 +"Forager",01001D200BCC4000,status-menus;crash,menus,2021-11-24 07:10:17.000 +"Foreclosed",0100AE001256E000,status-ingame;crash;Needs More Attention;nvdec,ingame,2022-12-06 14:41:12.000 +"Foregone",,deadlock;status-ingame,ingame,2020-12-17 15:26:53.000 +"Forgotton Anne",010059E00B93C000,nvdec;status-playable,playable,2021-02-15 18:28:07.000 +"FORMA.8",,nvdec;status-playable,playable,2020-11-15 01:04:32.000 +"Fort Boyard",,nvdec;slow;status-playable,playable,2020-05-15 13:22:53.000 +"Fortnite",010025400AECE000,services-horizon;status-nothing,nothing,2024-04-06 18:23:25.000 +"Fossil Hunters",0100CA500756C000,status-playable;nvdec,playable,2022-07-27 11:37:20.000 +"FOX n FORESTS",01008A100A028000,status-playable,playable,2021-02-16 14:27:49.000 +"FoxyLand",,status-playable,playable,2020-07-29 20:55:20.000 +"FoxyLand 2",,status-playable,playable,2020-08-06 14:41:30.000 +"Fractured Minds",01004200099F2000,status-playable,playable,2022-09-13 21:21:40.000 +"FRAMED COLLECTION",0100F1A00A5DC000,status-playable;nvdec,playable,2022-07-27 11:48:15.000 +"Fred3ric",0100AC40108D8000,status-playable,playable,2021-04-15 13:30:31.000 +"Frederic 2",,status-playable,playable,2020-07-23 16:44:37.000 +"Frederic: Resurrection of Music",,nvdec;status-playable,playable,2020-07-23 16:59:53.000 +"Freedom Finger",010082B00EE50000,nvdec;status-playable,playable,2021-06-09 19:31:30.000 +"Freedom Planet",,status-playable,playable,2020-05-14 12:23:06.000 +"Friday the 13th: Killer Puzzle",010003F00BD48000,status-playable,playable,2021-01-28 01:33:38.000 +"Friday the 13th: The Game",010092A00C4B6000,status-playable;nvdec;online-broken;UE4,playable,2022-09-06 17:33:27.000 +"Front Mission 1st Remake",0100F200178F4000,status-playable,playable,2023-06-09 07:44:24.000 +"Frontline Zed",,status-playable,playable,2020-10-03 12:55:59.000 +"Frost",0100B5300B49A000,status-playable,playable,2022-07-27 12:00:36.000 +"Fruitfall Crush",,status-playable,playable,2020-10-20 11:33:33.000 +"FullBlast",,status-playable,playable,2020-05-19 10:34:13.000 +"FUN! FUN! Animal Park",010002F00CC20000,status-playable,playable,2021-04-14 17:08:52.000 +"FunBox Party",,status-playable,playable,2020-05-15 12:07:02.000 +"Funghi Puzzle Funghi Explosion",,status-playable,playable,2020-11-23 14:17:41.000 +"Funimation",01008E10130F8000,gpu;status-boots,boots,2021-04-08 13:08:17.000 +"Funny Bunny Adventures",,status-playable,playable,2020-08-05 13:46:56.000 +"Furi",01000EC00AF98000,status-playable,playable,2022-07-27 12:21:20.000 +"Furi Definitive Edition",01000EC00AF98000,status-playable,playable,2022-07-27 12:35:08.000 +"Furwind",0100A6B00D4EC000,status-playable,playable,2021-02-19 19:44:08.000 +"Fury Unleashed",,crash;services;status-ingame,ingame,2020-10-18 11:52:40.000 +"Fury Unleashed Demo",,status-playable,playable,2020-10-08 20:09:21.000 +"FUSER",0100E1F013674000,status-playable;nvdec;UE4,playable,2022-10-17 20:58:32.000 +"Fushigi no Gensokyo Lotus Labyrinth",,Needs Update;audio;gpu;nvdec;status-ingame,ingame,2021-01-20 15:30:02.000 +"Futari de! Nyanko Daisensou",01003C300B274000,status-playable,playable,2024-01-05 22:26:52.000 +"FUZE Player",010055801134E000,status-ingame;online-broken;vulkan-backend-bug,ingame,2022-10-18 12:23:53.000 +"FUZE4",0100EAD007E98000,status-playable;vulkan-backend-bug,playable,2022-09-06 19:25:01.000 +"FuzzBall",010067600F1A0000,crash;status-nothing,nothing,2021-03-29 20:13:21.000 +"G-MODE Archives 06 The strongest ever Julia Miyamoto",,status-playable,playable,2020-10-15 13:06:26.000 +"G.I. Joe Operation Blackout",,UE4;crash;status-boots,boots,2020-11-21 12:37:44.000 +"Gal Metal - 01B8000C2EA000",,status-playable,playable,2022-07-27 20:57:48.000 +"Gal*Gun 2",010024700901A000,status-playable;nvdec;UE4,playable,2022-07-27 12:45:37.000 +"Gal*Gun Returns [ ぎゃる☆がん りたーんず ]",0100047013378000,status-playable;nvdec,playable,2022-10-17 23:50:46.000 +"GALAK-Z: Variant S",0100C9800A454000,status-boots;online-broken,boots,2022-07-29 11:59:12.000 +"Game Boy - Nintendo Switch Online",0100C62011050000,status-playable,playable,2023-03-21 12:43:48.000 +"Game Boy Advance - Nintendo Switch Online",010012F017576000,status-playable,playable,2023-02-16 20:38:15.000 +"Game Builder Garage",0100FA5010788000,status-ingame,ingame,2024-04-20 21:46:22.000 +"Game Dev Story",,status-playable,playable,2020-05-20 00:00:38.000 +"Game Doraemon Nobita no Shin Kyoryu",01006BD00F8C0000,gpu;status-ingame,ingame,2023-02-27 02:03:28.000 +"Garage",,status-playable,playable,2020-05-19 20:59:53.000 +"Garfield Kart Furious Racing",010061E00E8BE000,status-playable;ldn-works;loader-allocator,playable,2022-09-13 21:40:25.000 +"Gates of Hell",,slow;status-playable,playable,2020-10-22 12:44:26.000 +"Gato Roboto",010025500C098000,status-playable,playable,2023-01-20 15:04:11.000 +"Gear.Club Unlimited",010065E003FD8000,status-playable,playable,2021-06-08 13:03:19.000 +"Gear.Club Unlimited 2",010072900AFF0000,status-playable;nvdec;online-broken,playable,2022-07-29 12:52:16.000 +"Geki Yaba Runner Anniversary Edition",01000F000D9F0000,status-playable,playable,2021-02-19 18:59:07.000 +"Gekido Kintaro's Revenge",,status-playable,playable,2020-10-27 12:44:05.000 +"Gelly Break",01009D000AF3A000,UE4;status-playable,playable,2021-03-03 16:04:02.000 +"Gem Smashers",01001A4008192000,nvdec;status-playable,playable,2021-06-08 13:40:51.000 +"Genetic Disaster",,status-playable,playable,2020-06-19 21:41:12.000 +"Genkai Tokki Moero Crystal H- 極限凸起 萌情水晶 H - 한계돌파 모에로크리스탈 H",0100D7E0110B2000,32-bit;status-playable,playable,2022-06-06 00:42:09.000 +"Gensokyo Defenders",010000300C79C000,status-playable;online-broken;UE4,playable,2022-07-29 13:48:12.000 +"Gensou Rougoku no Kaleidscope",0100AC600EB4C000,status-menus;crash,menus,2021-11-24 08:45:07.000 +"Georifters",,UE4;crash;nvdec;status-menus,menus,2020-12-04 22:30:50.000 +"Gerrrms",,status-playable,playable,2020-08-15 11:32:52.000 +"Get 10 Quest",,status-playable,playable,2020-08-03 12:48:39.000 +"Get Over Here",0100B5B00E77C000,status-playable,playable,2022-10-28 11:53:52.000 +"Ghost 1.0",0100EEB005ACC000,status-playable,playable,2021-02-19 20:48:47.000 +"Ghost Blade HD",010063200C588000,status-playable;online-broken,playable,2022-09-13 21:51:21.000 +"Ghost Grab 3000",,status-playable,playable,2020-07-11 18:09:52.000 +"Ghost Parade",,status-playable,playable,2020-07-14 00:43:54.000 +"Ghost Sweeper",01004B301108C000,status-playable,playable,2022-10-10 12:45:36.000 +"Ghost Trick Phantom Detective",010029B018432000,status-playable,playable,2023-08-23 14:50:12.000 +"Ghostbusters: The Video Game Remastered",010008A00F632000,status-playable;nvdec,playable,2021-09-17 07:26:57.000 +"Ghostrunner",,UE4;crash;gpu;nvdec;status-ingame,ingame,2020-12-17 13:01:59.000 +"Ghosts 'n Goblins Resurrection",0100D6200F2BA000,status-playable,playable,2023-05-09 12:40:41.000 +"Giana Sisters: Twisted Dreams - Owltimate Edition",01003830092B8000,status-playable,playable,2022-07-29 14:06:12.000 +"Gibbous - A Cthulhu Adventure",0100D95012C0A000,status-playable;nvdec,playable,2022-10-10 12:57:17.000 +"GIGA WRECKER Alt.",010045F00BFC2000,status-playable,playable,2022-07-29 14:13:54.000 +"Gigantosaurus The Game",01002C400E526000,status-playable;UE4,playable,2022-09-27 21:20:00.000 +"Ginger: Beyond the Crystal",0100C50007070000,status-playable,playable,2021-02-17 16:27:00.000 +"Girabox",,status-playable,playable,2020-12-12 13:55:05.000 +"Giraffe and Annika",,UE4;crash;status-ingame,ingame,2020-12-04 22:41:57.000 +"Girls und Panzer Dream Tank Match DX",01006DD00CC96000,status-playable;ldn-untested,playable,2022-09-12 16:07:11.000 +"Glaive: Brick Breaker",,status-playable,playable,2020-05-20 12:15:59.000 +"Glitch's Trip",,status-playable,playable,2020-12-17 16:00:57.000 +"Glyph",0100EB501130E000,status-playable,playable,2021-02-08 19:56:51.000 +"Gnome More War",,status-playable,playable,2020-12-17 16:33:07.000 +"Gnomes Garden 2",,status-playable,playable,2021-02-19 20:08:13.000 +"Gnomes Garden: Lost King",010036C00D0D6000,deadlock;status-menus,menus,2021-11-18 11:14:03.000 +"Gnosia",01008EF013A7C000,status-playable,playable,2021-04-05 17:20:30.000 +"Go All Out",01000C800FADC000,status-playable;online-broken,playable,2022-09-21 19:16:34.000 +"Go Rally",010055A0161F4000,gpu;status-ingame,ingame,2023-08-16 21:18:23.000 +"GO VACATION",0100C1800A9B6000,status-playable;nvdec;ldn-works,playable,2024-05-13 19:28:53.000 +"Go! Fish Go!",,status-playable,playable,2020-07-27 13:52:28.000 +"Goat Simulator",010032600C8CE000,32-bit;status-playable,playable,2022-07-29 21:02:33.000 +"GOD EATER 3",01001C700873E000,gpu;status-ingame;nvdec,ingame,2022-07-29 21:33:21.000 +"GOD WARS THE COMPLETE LEGEND",,nvdec;status-playable,playable,2020-05-19 14:37:50.000 +"Gods Will Fall",0100CFA0111C8000,status-playable,playable,2021-02-08 16:49:59.000 +"Goetia",,status-playable,playable,2020-05-19 12:55:39.000 +"Going Under",,deadlock;nvdec;status-ingame,ingame,2020-12-11 22:29:46.000 +"Goken",,status-playable,playable,2020-08-05 20:22:38.000 +"Golazo - 010013800F0A4000",010013800F0A4000,status-playable,playable,2022-09-13 21:58:37.000 +"Golem Gates",01003C000D84C000,status-ingame;crash;nvdec;online-broken;UE4,ingame,2022-07-30 11:35:11.000 +"Golf Story",,status-playable,playable,2020-05-14 14:56:17.000 +"Golf With Your Friends",01006FB00EBE0000,status-playable;online-broken,playable,2022-09-29 12:55:11.000 +"Gone Home",0100EEC00AA6E000,status-playable,playable,2022-08-01 11:14:20.000 +"Gonner",,status-playable,playable,2020-05-19 12:05:02.000 +"Good Job!",,status-playable,playable,2021-03-02 13:15:55.000 +"Good Night, Knight",01003AD0123A2000,status-nothing;crash,nothing,2023-07-30 23:38:13.000 +"Good Pizza, Great Pizza",,status-playable,playable,2020-12-04 22:59:18.000 +"Goosebumps Dead of Night",,gpu;nvdec;status-ingame,ingame,2020-12-10 20:02:16.000 +"Goosebumps: The Game",,status-playable,playable,2020-05-19 11:56:52.000 +"Gorogoa",0100F2A005C98000,status-playable,playable,2022-08-01 11:55:08.000 +"GORSD",,status-playable,playable,2020-12-04 22:15:21.000 +"Gotcha Racing 2nd",,status-playable,playable,2020-07-23 17:14:04.000 +"Gothic Murder: Adventure That Changes Destiny",,deadlock;status-ingame;crash,ingame,2022-09-30 23:16:53.000 +"Grab the Bottle",,status-playable,playable,2020-07-14 17:06:41.000 +"Graceful Explosion Machine",,status-playable,playable,2020-05-19 20:36:55.000 +"Grand Brix Shooter",,slow;status-playable,playable,2020-06-24 13:23:54.000 +"Grand Guilds",010038100D436000,UE4;nvdec;status-playable,playable,2021-04-26 12:49:05.000 +"Grand Prix Story",0100BE600D07A000,status-playable,playable,2022-08-01 12:42:23.000 +"Grand Theft Auto 3",05B1D2ABD3D30000,services;status-nothing;crash;homebrew,nothing,2023-05-01 22:01:58.000 +"Grandia HD Collection",0100E0600BBC8000,status-boots;crash,boots,2024-08-19 04:29:48.000 +"Grass Cutter",,slow;status-ingame,ingame,2020-05-19 18:27:42.000 +"Grave Danger",,status-playable,playable,2020-05-18 17:41:28.000 +"GraviFire",010054A013E0C000,status-playable,playable,2021-04-05 17:13:32.000 +"Gravity Rider Zero",01002C2011828000,gpu;status-ingame;vulkan-backend-bug,ingame,2022-09-29 13:56:13.000 +"Greedroid",,status-playable,playable,2020-12-14 11:14:32.000 +"GREEN",010068D00AE68000,status-playable,playable,2022-08-01 12:54:15.000 +"Green Game",0100CBB0070EE000,nvdec;status-playable,playable,2021-02-19 18:51:55.000 +"GREEN The Life Algorithm",0100DFE00F002000,status-playable,playable,2022-09-27 21:37:13.000 +"Grey Skies: A War of the Worlds Story",0100DA7013792000,status-playable;UE4,playable,2022-10-24 11:13:59.000 +"GRID Autosport",0100DC800A602000,status-playable;nvdec;online-broken;ldn-untested,playable,2023-03-02 20:14:45.000 +"Grid Mania",,status-playable,playable,2020-05-19 14:11:05.000 +"Gridd: Retroenhanced",,status-playable,playable,2020-05-20 11:32:40.000 +"Grim Fandango Remastered",0100B7900B024000,status-playable;nvdec,playable,2022-08-01 13:55:58.000 +"Grim Legends 2: Song Of The Dark Swan",010078E012D80000,status-playable;nvdec,playable,2022-10-18 12:58:45.000 +"Grim Legends: The Forsaken Bride",010009F011F90000,status-playable;nvdec,playable,2022-10-18 13:14:06.000 +"Grimshade",01001E200F2F8000,status-playable,playable,2022-10-02 12:44:20.000 +"Grindstone",0100538012496000,status-playable,playable,2023-02-08 15:54:06.000 +"GRIP",0100459009A2A000,status-playable;nvdec;online-broken;UE4,playable,2022-08-01 15:00:22.000 +"GRIS",0100E1700C31C000,nvdec;status-playable,playable,2021-06-03 13:33:44.000 +"GRISAIA PHANTOM TRIGGER 01&02",01009D7011B02000,status-playable;nvdec,playable,2022-12-04 21:16:06.000 +"Grisaia Phantom Trigger 03",01005250123B8000,audout;status-playable,playable,2021-01-31 12:30:47.000 +"GRISAIA PHANTOM TRIGGER 04 -0100D970123BA000",0100D970123BA000,audout;status-playable,playable,2021-01-31 12:40:37.000 +"GRISAIA PHANTOM TRIGGER 05",01002330123BC000,audout;nvdec;status-playable,playable,2021-01-31 12:49:59.000 +"GRISAIA PHANTOM TRIGGER 5.5",0100CAF013AE6000,audout;nvdec;status-playable,playable,2021-01-31 12:59:44.000 +"Grizzland",010091300FFA0000,gpu;status-ingame,ingame,2024-07-11 16:28:34.000 +"Groove Coaster: Wai Wai Party!!!!",0100EB500D92E000,status-playable;nvdec;ldn-broken,playable,2021-11-06 14:54:27.000 +"Guacamelee! 2",,status-playable,playable,2020-05-15 14:56:59.000 +"Guacamelee! Super Turbo Championship Edition",,status-playable,playable,2020-05-13 23:44:18.000 +"Guess the Character",,status-playable,playable,2020-05-20 13:14:19.000 +"Guess The Word",,status-playable,playable,2020-07-26 21:34:25.000 +"GUILTY GEAR XX ACCENT CORE PLUS R",,nvdec;status-playable,playable,2021-01-13 09:28:33.000 +"GUNBIRD for Nintendo Switch",01003C6008940000,32-bit;status-playable,playable,2021-06-04 19:16:01.000 +"GUNBIRD2 for Nintendo Switch",,status-playable,playable,2020-10-10 14:41:16.000 +"Gunka o haita neko",,gpu;nvdec;status-ingame,ingame,2020-08-25 12:37:56.000 +"Gunman Clive HD Collection",,status-playable,playable,2020-10-09 12:17:35.000 +"Guns Gore and Cannoli 2",,online;status-playable,playable,2021-01-06 18:43:59.000 +"Gunvolt Chronicles: Luminous Avenger iX",,status-playable,playable,2020-06-16 22:47:07.000 +"Gunvolt Chronicles: Luminous Avenger iX 2",0100763015C2E000,status-nothing;crash;Needs Update,nothing,2022-04-29 15:34:34.000 +"Gurimugurimoa OnceMore Demo",01002C8018554000,status-playable,playable,2022-07-29 22:07:31.000 +"Gylt",0100AC601DCA8000,status-ingame;crash,ingame,2024-03-18 20:16:51.000 +"HAAK",0100822012D76000,gpu;status-ingame,ingame,2023-02-19 14:31:05.000 +"Habroxia",,status-playable,playable,2020-06-16 23:04:42.000 +"Hades",0100535012974000,status-playable;vulkan,playable,2022-10-05 10:45:21.000 +"Hakoniwa Explorer Plus",,slow;status-ingame,ingame,2021-02-19 16:56:19.000 +"Halloween Pinball",,status-playable,playable,2021-01-12 16:00:46.000 +"Hamidashi Creative",01006FF014152000,gpu;status-ingame,ingame,2021-12-19 15:30:51.000 +"Hammerwatch",01003B9007E86000,status-playable;online-broken;ldn-broken,playable,2022-08-01 16:28:46.000 +"Hand of Fate 2",01003620068EA000,status-playable,playable,2022-08-01 15:44:16.000 +"Hang the Kings",,status-playable,playable,2020-07-28 22:56:59.000 +"Happy Animals Mini Golf",010066C018E50000,gpu;status-ingame,ingame,2022-12-04 19:24:28.000 +"Hard West",0100ECE00D13E000,status-nothing;regression,nothing,2022-02-09 07:45:56.000 +"HARDCORE Maze Cube",,status-playable,playable,2020-12-04 20:01:24.000 +"HARDCORE MECHA",,slow;status-playable,playable,2020-11-01 15:06:33.000 +"HardCube",01000C90117FA000,status-playable,playable,2021-05-05 18:33:03.000 +"Hardway Party",,status-playable,playable,2020-07-26 12:35:07.000 +"Harvest Life",0100D0500AD30000,status-playable,playable,2022-08-01 16:51:45.000 +"Harvest Moon One World - 010016B010FDE00",,status-playable,playable,2023-05-26 09:17:19.000 +"Harvestella",0100A280187BC000,status-playable;UE4;vulkan-backend-bug;mac-bug,playable,2024-02-13 07:04:11.000 +"Has-Been Heroes",,status-playable,playable,2021-01-13 13:31:48.000 +"Hatsune Miku: Project DIVA Mega Mix",01001CC00FA1A000,audio;status-playable;online-broken,playable,2024-01-07 23:12:57.000 +"Haunted Dawn: The Zombie Apocalypse",01009E6014F18000,status-playable,playable,2022-10-28 12:31:51.000 +"Haunted Dungeons: Hyakki Castle",,status-playable,playable,2020-08-12 14:21:48.000 +"Haven",0100E2600DBAA000,status-playable,playable,2021-03-24 11:52:41.000 +"Hayfever",0100EA900FB2C000,status-playable;loader-allocator,playable,2022-09-22 17:35:41.000 +"Headliner: NoviNews",0100EFE00E1DC000,online;status-playable,playable,2021-03-01 11:36:00.000 +"Headsnatchers",,UE4;crash;status-menus,menus,2020-07-14 13:29:14.000 +"Headspun",,status-playable,playable,2020-07-31 19:46:47.000 +"Heart and Slash",,status-playable,playable,2021-01-13 20:56:32.000 +"Heaven Dust",,status-playable,playable,2020-05-17 14:02:41.000 +"Heaven's Vault",0100FD901000C000,crash;status-ingame,ingame,2021-02-08 18:22:01.000 +"Helheim Hassle",,status-playable,playable,2020-10-14 11:38:36.000 +"Hell is Other Demons",,status-playable,playable,2021-01-13 13:23:02.000 +"Hell Pie0",01000938017E5C00,status-playable;nvdec;UE4,playable,2022-11-03 16:48:46.000 +"Hell Warders",0100A4600E27A000,online;status-playable,playable,2021-02-27 02:31:03.000 +"Hellblade: Senua's Sacrifice",010044500CF8E000,gpu;status-ingame;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-01 19:36:50.000 +"Hello Kitty Kruisers With Sanrio Friends",010087D0084A8000,nvdec;status-playable,playable,2021-06-04 19:08:46.000 +"Hello Neighbor",0100FAA00B168000,status-playable;UE4,playable,2022-08-01 21:32:23.000 +"Hello Neighbor: Hide And Seek",,UE4;gpu;slow;status-ingame,ingame,2020-10-24 10:59:57.000 +"Hellpoint",010024600C794000,status-menus,menus,2021-11-26 13:24:20.000 +"Hero Express",,nvdec;status-playable,playable,2020-08-06 13:23:43.000 +"Hero-U: Rogue to Redemption",010077D01094C000,nvdec;status-playable,playable,2021-03-24 11:40:01.000 +"Heroes of Hammerwatch",0100D2B00BC54000,status-playable,playable,2022-08-01 18:30:21.000 +"Heroine Anthem Zero episode 1",01001B70080F0000,status-playable;vulkan-backend-bug,playable,2022-08-01 22:02:36.000 +"Heroki",010057300B0DC000,gpu;status-ingame,ingame,2023-07-30 19:30:01.000 +"Heroland",,status-playable,playable,2020-08-05 15:35:39.000 +"Hexagravity",01007AC00E012000,status-playable,playable,2021-05-28 13:47:48.000 +"Hidden",01004E800F03C000,slow;status-ingame,ingame,2022-10-05 10:56:53.000 +"Higurashi no Naku Koro ni Hō",0100F6A00A684000,audio;status-ingame,ingame,2021-09-18 14:40:28.000 +"Himehibi 1 gakki - Princess Days",0100F8D0129F4000,status-nothing;crash,nothing,2021-11-03 08:34:19.000 +"Hiragana Pixel Party",,status-playable,playable,2021-01-14 08:36:50.000 +"Hitman 3 - Cloud Version",01004990132AC000,Needs Update;crash;services;status-nothing,nothing,2021-04-18 22:35:07.000 +"Hitman: Blood Money - Reprisal",010083A018262000,deadlock;status-ingame,ingame,2024-09-28 16:28:50.000 +"Hob: The Definitive Edition",,status-playable,playable,2021-01-13 09:39:19.000 +"Hoggy 2",0100F7300ED2C000,status-playable,playable,2022-10-10 13:53:35.000 +"Hogwarts Legacy 0100F7E00C70E000",0100F7E00C70E000,status-ingame;slow,ingame,2024-09-03 19:53:58.000 +"Hollow Knight",0100633007D48000,status-playable;nvdec,playable,2023-01-16 15:44:56.000 +"Hollow0",0100F2100061E800,UE4;gpu;status-ingame,ingame,2021-03-03 23:42:56.000 +"Holy Potatoes! What the Hell?!",,status-playable,playable,2020-07-03 10:48:56.000 +"HoPiKo",,status-playable,playable,2021-01-13 20:12:38.000 +"Hopping girl KOHANE Jumping Kingdom: Princess of the Black Rabbit",010087800EE5A000,status-boots;crash,boots,2023-02-19 00:51:21.000 +"Horace",010086D011EB8000,status-playable,playable,2022-10-10 14:03:50.000 +"Horizon Chase 2",0100001019F6E000,deadlock;slow;status-ingame;crash;UE4,ingame,2024-08-19 04:24:06.000 +"Horizon Chase Turbo",01009EA00B714000,status-playable,playable,2021-02-19 19:40:56.000 +"Horror Pinball Bundle",0100E4200FA82000,status-menus;crash,menus,2022-09-13 22:15:34.000 +"Hotel Transylvania 3: Monsters Overboard",0100017007980000,nvdec;status-playable,playable,2021-01-27 18:55:31.000 +"Hotline Miami Collection",0100D0E00E51E000,status-playable;nvdec,playable,2022-09-09 16:41:19.000 +"Hotshot Racing",0100BDE008218000,gpu;status-ingame;nvdec;online-broken;ldn-untested;vulkan-backend-bug,ingame,2024-02-04 21:31:17.000 +"House Flipper",0100CAE00EB02000,status-playable,playable,2021-06-16 18:28:32.000 +"Hover",0100F6800910A000,status-playable;online-broken,playable,2022-09-20 12:54:46.000 +"Hulu",0100A66003384000,status-boots;online-broken,boots,2022-12-09 10:05:00.000 +"Human Resource Machine",,32-bit;status-playable,playable,2020-12-17 21:47:09.000 +"Human: Fall Flat",,status-playable,playable,2021-01-13 18:36:05.000 +"Hungry Shark World",,status-playable,playable,2021-01-13 18:26:08.000 +"Huntdown",0100EBA004726000,status-playable,playable,2021-04-05 16:59:54.000 +"Hunter's Legacy: Purrfect Edition",010068000CAC0000,status-playable,playable,2022-08-02 10:33:31.000 +"Hunting Simulator",0100C460040EA000,status-playable;UE4,playable,2022-08-02 10:54:08.000 +"Hunting Simulator 2",010061F010C3A000,status-playable;UE4,playable,2022-10-10 14:25:51.000 +"Hyper Jam",,UE4;crash;status-boots,boots,2020-12-15 22:52:11.000 +"Hyper Light Drifter - Special Edition",01003B200B372000,status-playable;vulkan-backend-bug,playable,2023-01-13 15:44:48.000 +"HyperBrawl Tournament",,crash;services;status-boots,boots,2020-12-04 23:03:27.000 +"HYPERCHARGE: Unboxed",0100A8B00F0B4000,status-playable;nvdec;online-broken;UE4;ldn-untested,playable,2022-09-27 21:52:39.000 +"HyperParasite",010061400ED90000,status-playable;nvdec;UE4,playable,2022-09-27 22:05:44.000 +"Hypnospace Outlaw",0100959010466000,status-ingame;nvdec,ingame,2023-08-02 22:46:49.000 +"Hyrule Warriors: Age of Calamity",01002B00111A2000,gpu;deadlock;slow;status-ingame;crash;nvdec;amd-vendor-bug,ingame,2024-02-28 00:47:00.000 +"Hyrule Warriors: Age of Calamity - Demo Version",0100A2C01320E000,slow;status-playable,playable,2022-10-10 17:37:41.000 +"Hyrule Warriors: Definitive Edition",0100AE00096EA000,services-horizon;status-ingame;nvdec,ingame,2024-06-16 10:34:05.000 +"I AM SETSUNA",0100849000BDA000,status-playable,playable,2021-11-28 11:06:11.000 +"I Saw Black Clouds",01001860140B0000,nvdec;status-playable,playable,2021-04-19 17:22:16.000 +"I, Zombie",,status-playable,playable,2021-01-13 14:53:44.000 +"Ice Age Scrat's Nutty Adventure",01004E5007E92000,status-playable;nvdec,playable,2022-09-13 22:22:29.000 +"Ice Cream Surfer",,status-playable,playable,2020-07-29 12:04:07.000 +"Ice Station Z",0100954014718000,status-menus;crash,menus,2021-11-21 20:02:15.000 +"ICEY",,status-playable,playable,2021-01-14 16:16:04.000 +"Iconoclasts",0100BC60099FE000,status-playable,playable,2021-08-30 21:11:04.000 +"Idle Champions of the Forgotten Realms",,online;status-boots,boots,2020-12-17 18:24:57.000 +"Idol Days - 愛怒流でいす",01002EC014BCA000,gpu;status-ingame;crash,ingame,2021-12-19 15:31:28.000 +"If Found...",,status-playable,playable,2020-12-11 13:43:14.000 +"If My Heart Had Wings",01001AC00ED72000,status-playable,playable,2022-09-29 14:54:57.000 +"Ikaruga",01009F20086A0000,status-playable,playable,2023-04-06 15:00:02.000 +"Ikenfell",010040900AF46000,status-playable,playable,2021-06-16 17:18:44.000 +"Immortal Planet",01007BC00E55A000,status-playable,playable,2022-09-20 13:40:43.000 +"Immortal Realms: Vampire Wars",010079501025C000,nvdec;status-playable,playable,2021-06-17 17:41:46.000 +"Immortal Redneck - 0100F400435A000",,nvdec;status-playable,playable,2021-01-27 18:36:28.000 +"Immortals Fenyx Rising",01004A600EC0A000,gpu;status-menus;crash,menus,2023-02-24 16:19:55.000 +"IMPLOSION",0100737003190000,status-playable;nvdec,playable,2021-12-12 03:52:13.000 +"In rays of the Light",0100A760129A0000,status-playable,playable,2021-04-07 15:18:07.000 +"Indie Darling Bundle Vol. 3",01004DE011076000,status-playable,playable,2022-10-02 13:01:57.000 +"Indie Puzzle Bundle Vol 1",0100A2101107C000,status-playable,playable,2022-09-27 22:23:21.000 +"Indiecalypse",,nvdec;status-playable,playable,2020-06-11 20:19:09.000 +"Indivisible",01001D3003FDE000,status-playable;nvdec,playable,2022-09-29 15:20:57.000 +"Inertial Drift",01002BD00F626000,status-playable;online-broken,playable,2022-10-11 12:22:19.000 +"Infernium",,UE4;regression;status-nothing,nothing,2021-01-13 16:36:07.000 +"Infinite Minigolf",,online;status-playable,playable,2020-09-29 12:26:25.000 +"Infliction",01001CB00EFD6000,status-playable;nvdec;UE4,playable,2022-10-02 13:15:55.000 +"INMOST",0100F1401161E000,status-playable,playable,2022-10-05 11:27:40.000 +"InnerSpace",,status-playable,playable,2021-01-13 19:36:14.000 +"INSIDE",0100D2D009028000,status-playable,playable,2021-12-25 20:24:56.000 +"Inside Grass: A little adventure",,status-playable,playable,2020-10-15 15:26:27.000 +"INSTANT SPORTS",010099700D750000,status-playable,playable,2022-09-09 12:59:40.000 +"Instant Sports Summer Games",,gpu;status-menus,menus,2020-09-02 13:39:28.000 +"Instant Sports Tennis",010031B0145B8000,status-playable,playable,2022-10-28 16:42:17.000 +"Interrogation: You will be deceived",010041501005E000,status-playable,playable,2022-10-05 11:40:10.000 +"Into the Dead 2",01000F700DECE000,status-playable;nvdec,playable,2022-09-14 12:36:14.000 +"INVERSUS Deluxe",01001D0003B96000,status-playable;online-broken,playable,2022-08-02 14:35:36.000 +"Invisible Fist",,status-playable,playable,2020-08-08 13:25:52.000 +"Invisible, Inc.",,crash;status-nothing,nothing,2021-01-29 16:28:13.000 +"Invisigun Reloaded",01005F400E644000,gpu;online;status-ingame,ingame,2021-06-10 12:13:24.000 +"Ion Fury",010041C00D086000,status-ingame;vulkan-backend-bug,ingame,2022-08-07 08:27:51.000 +"Iridium",010095C016C14000,status-playable,playable,2022-08-05 23:19:53.000 +"Iris Fall",0100945012168000,status-playable;nvdec,playable,2022-10-18 13:40:22.000 +"Iris School of Wizardry - Vinculum Hearts -",0100AD300B786000,status-playable,playable,2022-12-05 13:11:15.000 +"Iron Wings",01005270118D6000,slow;status-ingame,ingame,2022-08-07 08:32:57.000 +"Ironcast",,status-playable,playable,2021-01-13 13:54:29.000 +"Irony Curtain: From Matryoshka with Love",0100E5700CD56000,status-playable,playable,2021-06-04 20:12:37.000 +"Is It Wrong to Try to Pick Up Girls in a Dungeon? Infinite Combate",,status-playable,playable,2020-08-31 13:52:21.000 +"ISLAND",0100F06013710000,status-playable,playable,2021-05-06 15:11:47.000 +"Island Flight Simulator",010077900440A000,status-playable,playable,2021-06-04 19:42:46.000 +"Island Saver",,nvdec;status-playable,playable,2020-10-23 22:07:02.000 +"Isoland",,status-playable,playable,2020-07-26 13:48:16.000 +"Isoland 2: Ashes of Time",,status-playable,playable,2020-07-26 14:29:05.000 +"Isolomus",010001F0145A8000,services;status-boots,boots,2021-11-03 07:48:21.000 +"ITTA",010068700C70A000,status-playable,playable,2021-06-07 03:15:52.000 +"Ittle Dew 2+",,status-playable,playable,2020-11-17 11:44:32.000 +"IxSHE Tell",0100DEB00F12A000,status-playable;nvdec,playable,2022-12-02 18:00:42.000 +"Izneo",0100D8E00C874000,status-menus;online-broken,menus,2022-08-06 15:56:23.000 +"James Pond Operation Robocod",,status-playable,playable,2021-01-13 09:48:45.000 +"Japanese Rail Sim: Journey to Kyoto",,nvdec;status-playable,playable,2020-07-29 17:14:21.000 +"JDM Racing",,status-playable,playable,2020-08-03 17:02:37.000 +"Jenny LeClue - Detectivu",,crash;status-nothing,nothing,2020-12-15 21:07:07.000 +"Jeopardy!",01006E400AE2A000,audout;nvdec;online;status-playable,playable,2021-02-22 13:53:46.000 +"Jet Kave Adventure",0100E4900D266000,status-playable;nvdec,playable,2022-09-09 14:50:39.000 +"Jet Lancer",0100F3500C70C000,gpu;status-ingame,ingame,2021-02-15 18:15:47.000 +"Jettomero: Hero of the Universe",0100A5A00AF26000,status-playable,playable,2022-08-02 14:46:43.000 +"Jiffy",01008330134DA000,gpu;status-ingame;opengl,ingame,2024-02-03 23:11:24.000 +"Jim Is Moving Out!",,deadlock;status-ingame,ingame,2020-06-03 22:05:19.000 +"Jinrui no Ninasama he",0100F4D00D8BE000,status-ingame;crash,ingame,2023-03-07 02:04:17.000 +"Jisei: The First Case HD",010038D011F08000,audio;status-playable,playable,2022-10-05 11:43:33.000 +"Job the Leprechaun",,status-playable,playable,2020-06-05 12:10:06.000 +"John Wick Hex",01007090104EC000,status-playable,playable,2022-08-07 08:29:12.000 +"Johnny Turbo's Arcade Gate of Doom",010069B002CDE000,status-playable,playable,2022-07-29 12:17:50.000 +"Johnny Turbo's Arcade Two Crude Dudes",010080D002CC6000,status-playable,playable,2022-08-02 20:29:50.000 +"Johnny Turbo's Arcade Wizard Fire",0100D230069CC000,status-playable,playable,2022-08-02 20:39:15.000 +"JoJos Bizarre Adventure All-Star Battle R",01008120128C2000,status-playable,playable,2022-12-03 10:45:10.000 +"Journey to the Savage Planet",01008B60117EC000,status-playable;nvdec;UE4;ldn-untested,playable,2022-10-02 18:48:12.000 +"Juicy Realm - 0100C7600F654000",0100C7600F654000,status-playable,playable,2023-02-21 19:16:20.000 +"Jumanji",,UE4;crash;status-boots,boots,2020-07-12 13:52:25.000 +"JUMP FORCE Deluxe Edition",0100183010F12000,status-playable;nvdec;online-broken;UE4,playable,2023-10-01 15:56:05.000 +"Jump King",,status-playable,playable,2020-06-09 10:12:39.000 +"Jump Rope Challenge",0100B9C012706000,services;status-boots;crash;Needs Update,boots,2023-02-27 01:24:28.000 +"Jumping Joe & Friends",,status-playable,playable,2021-01-13 17:09:42.000 +"JunkPlanet",,status-playable,playable,2020-11-09 12:38:33.000 +"Jurassic Pinball",0100CE100A826000,status-playable,playable,2021-06-04 19:02:37.000 +"Jurassic World Evolution Complete Edition",010050A011344000,cpu;status-menus;crash,menus,2023-08-04 18:06:54.000 +"Just Dance 2017",0100BCE000598000,online;status-playable,playable,2021-03-05 09:46:01.000 +"Just Dance 2019",,gpu;online;status-ingame,ingame,2021-02-27 17:21:27.000 +"JUST DANCE 2020",0100DDB00DB38000,status-playable,playable,2022-01-24 13:31:57.000 +"Just Dance 2022",0100EA6014BB8000,gpu;services;status-ingame;crash;Needs Update,ingame,2022-10-28 11:01:53.000 +"Just Dance 2023",0100BEE017FC0000,status-nothing,nothing,2023-06-05 16:44:54.000 +"Just Die Already",0100AC600CF0A000,status-playable;UE4,playable,2022-12-13 13:37:50.000 +"Just Glide",,status-playable,playable,2020-08-07 17:38:10.000 +"Just Shapes & Beats",,ldn-untested;nvdec;status-playable,playable,2021-02-09 12:18:36.000 +"JYDGE",010035A0044E8000,status-playable,playable,2022-08-02 21:20:13.000 +"Kagamihara/Justice",0100D58012FC2000,crash;status-nothing,nothing,2021-06-21 16:41:29.000 +"Kairobotica",0100D5F00EC52000,status-playable,playable,2021-05-06 12:17:56.000 +"KAMEN RIDER CLIMAX SCRAMBLE",0100BDC00A664000,status-playable;nvdec;ldn-untested,playable,2024-07-03 08:51:11.000 +"KAMEN RIDER memory of heroez / Premium Sound Edition",0100A9801180E000,status-playable,playable,2022-12-06 03:14:26.000 +"KAMIKO",,status-playable,playable,2020-05-13 12:48:57.000 +"Kangokuto Mary Skelter Finale",,audio;crash;status-ingame,ingame,2021-01-09 22:39:28.000 +"Katakoi Contrast - collection of branch -",01007FD00DB20000,status-playable;nvdec,playable,2022-12-09 09:41:26.000 +"Katamari Damacy REROLL",0100D7000C2C6000,status-playable,playable,2022-08-02 21:35:05.000 +"KATANA KAMI: A Way of the Samurai Story",0100F9800EDFA000,slow;status-playable,playable,2022-04-09 10:40:16.000 +"Katana ZERO",010029600D56A000,status-playable,playable,2022-08-26 08:09:09.000 +"Kaze and the Wild Masks",010038B00F142000,status-playable,playable,2021-04-19 17:11:03.000 +"Keen: One Girl Army",,status-playable,playable,2020-12-14 23:19:52.000 +"Keep Talking and Nobody Explodes",01008D400A584000,status-playable,playable,2021-02-15 18:05:21.000 +"Kemono Friends Picross",01004B100BDA2000,status-playable,playable,2023-02-08 15:54:34.000 +"Kentucky Robo Chicken",,status-playable,playable,2020-05-12 20:54:17.000 +"Kentucky Route Zero [0100327005C94000]",0100327005C94000,status-playable,playable,2024-04-09 23:22:46.000 +"KeroBlaster",,status-playable,playable,2020-05-12 20:42:52.000 +"Kholat",0100F680116A2000,UE4;nvdec;status-playable,playable,2021-06-17 11:52:48.000 +"Kid Tripp",,crash;status-nothing,nothing,2020-10-15 07:41:23.000 +"Kill la Kill - IF",,status-playable,playable,2020-06-09 14:47:08.000 +"Kill The Bad Guy",,status-playable,playable,2020-05-12 22:16:10.000 +"Killer Queen Black",0100F2900B3E2000,ldn-untested;online;status-playable,playable,2021-04-08 12:46:18.000 +"Kin'iro no Corda Octave",,status-playable,playable,2020-09-22 13:23:12.000 +"Kine",010089000F0E8000,status-playable;UE4,playable,2022-09-14 14:28:37.000 +"King Lucas",0100E6B00FFBA000,status-playable,playable,2022-09-21 19:43:23.000 +"King Oddball",,status-playable,playable,2020-05-13 13:47:57.000 +"King of Seas",01008D80148C8000,status-playable;nvdec;UE4,playable,2022-10-28 18:29:41.000 +"King of Seas Demo",0100515014A94000,status-playable;nvdec;UE4,playable,2022-10-28 18:09:31.000 +"KINGDOM HEARTS Melody of Memory",,crash;nvdec;status-ingame,ingame,2021-03-03 17:34:12.000 +"Kingdom Rush",0100A280121F6000,status-nothing;32-bit;crash;Needs More Attention,nothing,2022-10-05 12:34:00.000 +"Kingdom: New Lands",0100BD9004AB6000,status-playable,playable,2022-08-02 21:48:50.000 +"Kingdom: Two Crowns",,status-playable,playable,2020-05-16 19:36:21.000 +"Kingdoms of Amalur: Re-Reckoning",0100EF50132BE000,status-playable,playable,2023-08-10 13:05:08.000 +"Kirby and the Forgotten Land",01004D300C5AE000,gpu;status-ingame,ingame,2024-03-11 17:11:21.000 +"Kirby and the Forgotten Land (Demo version)",010091201605A000,status-playable;demo,playable,2022-08-21 21:03:01.000 +"Kirby Fighters 2",0100227010460000,ldn-works;online;status-playable,playable,2021-06-17 13:06:39.000 +"Kirby Star Allies",01007E3006DDA000,status-playable;nvdec,playable,2023-11-15 17:06:19.000 +"Kirby’s Dream Buffet",0100A8E016236000,status-ingame;crash;online-broken;Needs Update;ldn-works,ingame,2024-03-03 17:04:44.000 +"Kirby’s Return to Dream Land Deluxe",01006B601380E000,status-playable,playable,2024-05-16 19:58:04.000 +"Kirby’s Return to Dream Land Deluxe - Demo",010091D01A57E000,status-playable;demo,playable,2023-02-18 17:21:55.000 +"Kissed by the Baddest Bidder",0100F3A00F4CA000,gpu;status-ingame;nvdec,ingame,2022-12-04 20:57:11.000 +"Kitten Squad",01000C900A136000,status-playable;nvdec,playable,2022-08-03 12:01:59.000 +"Klondike Solitaire",,status-playable,playable,2020-12-13 16:17:27.000 +"Knight Squad",,status-playable,playable,2020-08-09 16:54:51.000 +"Knight Squad 2",010024B00E1D6000,status-playable;nvdec;online-broken,playable,2022-10-28 18:38:09.000 +"Knight Terrors",,status-playable,playable,2020-05-13 13:09:22.000 +"Knightin'+",,status-playable,playable,2020-08-31 18:18:21.000 +"Knights of Pen and Paper +1 Deluxier Edition",,status-playable,playable,2020-05-11 21:46:32.000 +"Knights of Pen and Paper 2 Deluxiest Edition",,status-playable,playable,2020-05-13 14:07:00.000 +"Knock-Knock",010001A00A1F6000,nvdec;status-playable,playable,2021-02-01 20:03:19.000 +"Knockout City",01009EF00DDB4000,services;status-boots;online-broken,boots,2022-12-09 09:48:58.000 +"Koa and the Five Pirates of Mara",0100C57019BA2000,gpu;status-ingame,ingame,2024-07-11 16:14:44.000 +"Koi DX",,status-playable,playable,2020-05-11 21:37:51.000 +"Koi no Hanasaku Hyakkaen",,32-bit;gpu;nvdec;status-ingame,ingame,2020-10-03 14:17:10.000 +"Koloro",01005D200C9AA000,status-playable,playable,2022-08-03 12:34:02.000 +"Kona",0100464009294000,status-playable,playable,2022-08-03 12:48:19.000 +"Kono Subarashii Sekai ni Shukufuku o Kono Yokubo no Isho ni Choai o",010016C011AAA000,status-playable,playable,2023-04-26 09:51:08.000 +"Koral",,UE4;crash;gpu;status-menus,menus,2020-11-16 12:41:26.000 +"KORG Gadget",,status-playable,playable,2020-05-13 13:57:24.000 +"Kotodama: The 7 Mysteries of Fujisawa",010046600CCA4000,audout;status-playable,playable,2021-02-01 20:28:37.000 +"KukkoroDays",010022801242C000,status-menus;crash,menus,2021-11-25 08:52:56.000 +"KUNAI",010035A00DF62000,status-playable;nvdec,playable,2022-09-20 13:48:34.000 +"Kunio-Kun: The World Classics Collection",010060400ADD2000,online;status-playable,playable,2021-01-29 20:21:46.000 +"KUUKIYOMI 2: Consider It More! - New Era",010037500F282000,status-nothing;crash;Needs Update,nothing,2021-11-02 09:34:40.000 +"Kwaidan ~Azuma manor story~",0100894011F62000,status-playable,playable,2022-10-05 12:50:44.000 +"L.A. Noire",0100830004FB6000,status-playable,playable,2022-08-03 16:49:35.000 +"L.F.O. - Lost Future Omega -",,UE4;deadlock;status-boots,boots,2020-10-16 12:16:44.000 +"L.O.L. Surprise! Remix: We Rule the World",0100F2B0123AE000,status-playable,playable,2022-10-11 22:48:03.000 +"La Mulana 2",010038000F644000,status-playable,playable,2022-09-03 13:45:57.000 +"LA-MULANA",010026000F662800,gpu;status-ingame,ingame,2022-08-12 01:06:21.000 +"LA-MULANA 1 & 2",0100E5D00F4AE000,status-playable,playable,2022-09-22 17:56:36.000 +"Labyrinth of Refrain: Coven of Dusk",010058500B3E0000,status-playable,playable,2021-02-15 17:38:48.000 +"Labyrinth of the Witch",,status-playable,playable,2020-11-01 14:42:37.000 +"Langrisser I and II",0100BAB00E8C0000,status-playable,playable,2021-02-19 15:46:10.000 +"Lanota",,status-playable,playable,2019-09-04 01:58:14.000 +"Lapis x Labyrinth",01005E000D3D8000,status-playable,playable,2021-02-01 18:58:08.000 +"Laraan",,status-playable,playable,2020-12-16 12:45:48.000 +"Last Day of June",0100DA700879C000,nvdec;status-playable,playable,2021-06-08 11:35:32.000 +"LAST FIGHT",01009E100BDD6000,status-playable,playable,2022-09-20 13:54:55.000 +"Late Shift",0100055007B86000,nvdec;status-playable,playable,2021-02-01 18:43:58.000 +"Later Daters",,status-playable,playable,2020-07-29 16:35:45.000 +"Layers of Fear 2",01001730144DA000,status-playable;nvdec;UE4,playable,2022-10-28 18:49:52.000 +"Layers of Fear: Legacy",,nvdec;status-playable,playable,2021-02-15 16:30:41.000 +"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy - Deluxe Edition",0100CE500D226000,status-playable;nvdec;opengl,playable,2022-09-14 15:01:57.000 +"Layton's Mystery Journey: Katrielle and the Millionaires' Conspiracy DX+0",0100FDB00AA80000,gpu;status-ingame;nvdec;opengl,ingame,2022-09-14 15:15:55.000 +"League of Evil",01009C100390E000,online;status-playable,playable,2021-06-08 11:23:27.000 +"Left-Right: The Mansion",,status-playable,playable,2020-05-13 13:02:12.000 +"Legacy of Kain™ Soul Reaver 1&2 Remastered",010079901C898000,status-playable,playable,2025-01-07 05:50:01.000 +"Legend of Kay Anniversary",01002DB007A96000,nvdec;status-playable,playable,2021-01-29 18:38:29.000 +"Legend of the Skyfish",,status-playable,playable,2020-06-24 13:04:22.000 +"Legend of the Tetrarchs",,deadlock;status-ingame,ingame,2020-07-10 07:54:03.000 +"Legendary Eleven",0100A73006E74000,status-playable,playable,2021-06-08 12:09:03.000 +"Legendary Fishing",0100A7700B46C000,online;status-playable,playable,2021-04-14 15:08:46.000 +"LEGO 2K Drive",0100739018020000,gpu;status-ingame;ldn-works,ingame,2024-04-09 02:05:12.000 +"Lego City Undercover",01003A30012C0000,status-playable;nvdec,playable,2024-09-30 08:44:27.000 +"LEGO DC Super-Villains",010070D009FEC000,status-playable,playable,2021-05-27 18:10:37.000 +"LEGO Harry Potter Collection",010052A00B5D2000,status-ingame;crash,ingame,2024-01-31 10:28:07.000 +"LEGO Horizon Adventures",010073C01AF34000,status-ingame;vulkan-backend-bug;opengl-backend-bug;UE4,ingame,2025-01-07 04:24:56.000 +"LEGO Jurassic World",01001C100E772000,status-playable,playable,2021-05-27 17:00:20.000 +"LEGO Marvel Super Heroes",01006F600FFC8000,status-playable,playable,2024-09-10 19:02:19.000 +"LEGO Marvel Super Heroes 2",0100D3A00409E000,status-nothing;crash,nothing,2023-03-02 17:12:33.000 +"LEGO Star Wars: The Skywalker Saga",010042D00D900000,gpu;slow;status-ingame,ingame,2024-04-13 20:08:46.000 +"LEGO The Incredibles",0100A01006E00000,status-nothing;crash,nothing,2022-08-03 18:36:59.000 +"LEGO Worlds",,crash;slow;status-ingame,ingame,2020-07-17 13:35:39.000 +"Legrand Legacy: Tale of the Fatebounds",,nvdec;status-playable,playable,2020-07-26 12:27:36.000 +"Leisure Suit Larry - Wet Dreams Dry Twice",010031A0135CA000,status-playable,playable,2022-10-28 19:00:57.000 +"Leisure Suit Larry: Wet Dreams Don't Dry",0100A8E00CAA0000,status-playable,playable,2022-08-03 19:51:44.000 +"Lethal League Blaze",01003AB00983C000,online;status-playable,playable,2021-01-29 20:13:31.000 +"Letter Quest Remastered",,status-playable,playable,2020-05-11 21:30:34.000 +"Letters - a written adventure",0100CE301678E800,gpu;status-ingame,ingame,2023-02-21 20:12:38.000 +"Levelhead",,online;status-ingame,ingame,2020-10-18 11:44:51.000 +"Levels+",,status-playable,playable,2020-05-12 13:51:39.000 +"Liberated",0100C8000F146000,gpu;status-ingame;nvdec,ingame,2024-07-04 04:58:24.000 +"Liberated: Enhanced Edition",01003A90133A6000,gpu;status-ingame;nvdec,ingame,2024-07-04 04:48:48.000 +"Lichtspeer: Double Speer Edition",,status-playable,playable,2020-05-12 16:43:09.000 +"Liege Dragon",010041F0128AE000,status-playable,playable,2022-10-12 10:27:03.000 +"Life Goes On",010006300AFFE000,status-playable,playable,2021-01-29 19:01:20.000 +"Life is Strange 2",0100FD101186C000,status-playable;UE4,playable,2024-07-04 05:05:58.000 +"Life is Strange Remastered",0100DC301186A000,status-playable;UE4,playable,2022-10-03 16:54:44.000 +"Life is Strange: Before the Storm Remastered",010008501186E000,status-playable,playable,2023-09-28 17:15:44.000 +"Life is Strange: True Colors [0100500012AB4000]",0100500012AB4000,gpu;status-ingame;UE4,ingame,2024-04-08 16:11:52.000 +"Life of Boris: Super Slav",,status-ingame,ingame,2020-12-17 11:40:05.000 +"Life of Fly",0100B3A0135D6000,status-playable,playable,2021-01-25 23:41:07.000 +"Life of Fly 2",010069A01506E000,slow;status-playable,playable,2022-10-28 19:26:52.000 +"Lifeless Planet",01005B6008132000,status-playable,playable,2022-08-03 21:25:13.000 +"Light Fall",,nvdec;status-playable,playable,2021-01-18 14:55:36.000 +"Light Tracer",010087700D07C000,nvdec;status-playable,playable,2021-05-05 19:15:43.000 +"LIMBO",01009C8009026000,cpu;status-boots;32-bit,boots,2023-06-28 15:39:19.000 +"Linelight",,status-playable,playable,2020-12-17 12:18:07.000 +"Lines X",,status-playable,playable,2020-05-11 15:28:30.000 +"Lines XL",,status-playable,playable,2020-08-31 17:48:23.000 +"Little Busters! Converted Edition",0100943010310000,status-playable;nvdec,playable,2022-09-29 15:34:56.000 +"Little Dragons Cafe",,status-playable,playable,2020-05-12 00:00:52.000 +"LITTLE FRIENDS -DOGS & CATS-",,status-playable,playable,2020-11-12 12:45:51.000 +"Little Inferno",,32-bit;gpu;nvdec;status-ingame,ingame,2020-12-17 21:43:56.000 +"Little Misfortune",0100E7000E826000,nvdec;status-playable,playable,2021-02-23 20:39:44.000 +"Little Mouse's Encyclopedia",0100FE0014200000,status-playable,playable,2022-10-28 19:38:58.000 +"Little Nightmares",01002FC00412C000,status-playable;nvdec;UE4,playable,2022-08-03 21:45:35.000 +"Little Nightmares II",010097100EDD6000,status-playable;UE4,playable,2023-02-10 18:24:44.000 +"Little Nightmares II DEMO",010093A0135D6000,status-playable;UE4;demo;vulkan-backend-bug,playable,2024-05-16 18:47:20.000 +"Little Noah: Scion of Paradise",0100535014D76000,status-playable;opengl-backend-bug,playable,2022-09-14 04:17:13.000 +"Little Racer",0100E6D00E81C000,status-playable,playable,2022-10-18 16:41:13.000 +"Little Shopping",,status-playable,playable,2020-10-03 16:34:35.000 +"Little Town Hero",,status-playable,playable,2020-10-15 23:28:48.000 +"Little Triangle",,status-playable,playable,2020-06-17 14:46:26.000 +"LIVE A LIVE",0100CF801776C000,status-playable;UE4;amd-vendor-bug,playable,2023-02-05 15:12:07.000 +"LOCO-SPORTS",0100BA000FC9C000,status-playable,playable,2022-09-20 14:09:30.000 +"Lode Runner Legacy",,status-playable,playable,2021-01-10 14:10:28.000 +"Lofi Ping Pong",,crash;status-ingame,ingame,2020-12-15 20:09:22.000 +"Lone Ruin",0100B6D016EE6000,status-ingame;crash;nvdec,ingame,2023-01-17 06:41:19.000 +"Lonely Mountains Downhill",0100A0C00E0DE000,status-playable;online-broken,playable,2024-07-04 05:08:11.000 +"LOOPERS",010062A0178A8000,gpu;slow;status-ingame;crash,ingame,2022-06-17 19:21:45.000 +"Lost Horizon",,status-playable,playable,2020-09-01 13:41:22.000 +"Lost Horizon 2",,nvdec;status-playable,playable,2020-06-16 12:02:12.000 +"Lost in Random",01005FE01291A000,gpu;status-ingame,ingame,2022-12-18 07:09:28.000 +"Lost Lands 3: The Golden Curse",0100156014C6A000,status-playable;nvdec,playable,2022-10-24 16:30:00.000 +"Lost Lands: Dark Overlord",0100BDD010AC8000,status-playable,playable,2022-10-03 11:52:58.000 +"Lost Lands: The Four Horsemen",0100133014510000,status-playable;nvdec,playable,2022-10-24 16:41:00.000 +"LOST ORBIT: Terminal Velocity",010054600AC74000,status-playable,playable,2021-06-14 12:21:12.000 +"Lost Phone Stories",,services;status-ingame,ingame,2020-04-05 23:17:33.000 +"Lost Ruins",01008AD013A86800,gpu;status-ingame,ingame,2023-02-19 14:09:00.000 +"LOST SPHEAR",,status-playable,playable,2021-01-10 06:01:21.000 +"Lost Words: Beyond the Page",0100018013124000,status-playable,playable,2022-10-24 17:03:21.000 +"Love Letter from Thief X",0100D36011AD4000,gpu;status-ingame;nvdec,ingame,2023-11-14 03:55:31.000 +"Ludo Mania",,crash;services;status-nothing,nothing,2020-04-03 00:33:47.000 +"Luigi's Mansion 2 HD",010048701995E000,status-ingame;ldn-broken;amd-vendor-bug,ingame,2024-09-05 23:47:27.000 +"Luigi's Mansion 3",0100DCA0064A6000,gpu;slow;status-ingame;Needs Update;ldn-works,ingame,2024-09-27 22:17:36.000 +"Lumini",,status-playable,playable,2020-08-09 20:45:09.000 +"Lumo",0100FF00042EE000,status-playable;nvdec,playable,2022-02-11 18:20:30.000 +"Lust for Darkness",,nvdec;status-playable,playable,2020-07-26 12:09:15.000 +"Lust for Darkness: Dawn Edition",0100F0B00F68E000,nvdec;status-playable,playable,2021-06-16 13:47:46.000 +"LUXAR",0100EC2011A80000,status-playable,playable,2021-03-04 21:11:57.000 +"Machi Knights Blood bagos",0100F2400D434000,status-playable;nvdec;UE4,playable,2022-09-14 15:08:04.000 +"Mad Carnage",,status-playable,playable,2021-01-10 13:00:07.000 +"Mad Father",,status-playable,playable,2020-11-12 13:22:10.000 +"Mad Games Tycoon",010061E00EB1E000,status-playable,playable,2022-09-20 14:23:14.000 +"Magazine Mogul",01004A200E722000,status-playable;loader-allocator,playable,2022-10-03 12:05:34.000 +"MagiCat",,status-playable,playable,2020-12-11 15:22:07.000 +"Magicolors",,status-playable,playable,2020-08-12 18:39:11.000 +"Mahjong Solitaire Refresh",01008C300B624000,status-boots;crash,boots,2022-12-09 12:02:55.000 +"Mahluk dark demon",010099A0145E8000,status-playable,playable,2021-04-15 13:14:24.000 +"Mainlining",,status-playable,playable,2020-06-05 01:02:00.000 +"Maitetsu: Pure Station",0100D9900F220000,status-playable,playable,2022-09-20 15:12:49.000 +"Makai Senki Disgaea 7",0100A78017BD6000,status-playable,playable,2023-10-05 00:22:18.000 +"Mana Spark",,status-playable,playable,2020-12-10 13:41:01.000 +"Maneater",010093D00CB22000,status-playable;nvdec;UE4,playable,2024-05-21 16:11:57.000 +"Manifold Garden",,status-playable,playable,2020-10-13 20:27:13.000 +"Manticore - Galaxy on Fire",0100C9A00952A000,status-boots;crash;nvdec,boots,2024-02-04 04:37:24.000 +"Mantis Burn Racing",0100E98002F6E000,status-playable;online-broken;ldn-broken,playable,2024-09-02 02:13:04.000 +"Marble Power Blast",01008E800D1FE000,status-playable,playable,2021-06-04 16:00:02.000 +"Märchen Forest - 0100B201D5E000",,status-playable,playable,2021-02-04 21:33:34.000 +"Marco & The Galaxy Dragon Demo",0100DA7017C9E000,gpu;status-ingame;demo,ingame,2023-06-03 13:05:33.000 +"Mario & Luigi: Brothership",01006D0017F7A000,status-ingame;crash;slow;UE4;mac-bug,ingame,2025-01-07 04:00:00.000 +"MARIO & SONIC AT THE OLYMPIC GAMES TOKYO 2020",010002C00C270000,status-ingame;crash;online-broken;ldn-works,ingame,2024-08-23 16:12:55.000 +"Mario + Rabbids Kingdom Battle",010067300059A000,slow;status-playable;opengl-backend-bug,playable,2024-05-06 10:16:54.000 +"Mario + Rabbids® Sparks of Hope",0100317013770000,gpu;status-ingame;Needs Update,ingame,2024-06-20 19:56:19.000 +"Mario Golf: Super Rush",0100C9C00E25C000,gpu;status-ingame,ingame,2024-08-18 21:31:48.000 +"Mario Kart 8 Deluxe",0100152000022000,32-bit;status-playable;ldn-works;LAN;amd-vendor-bug,playable,2024-09-19 11:55:17.000 +"Mario Kart Live: Home Circuit",0100ED100BA3A000,services;status-nothing;crash;Needs More Attention,nothing,2022-12-07 22:36:52.000 +"Mario Party Superstars",01006FE013472000,gpu;status-ingame;ldn-works;mac-bug,ingame,2024-05-16 11:23:34.000 +"Mario Strikers: Battle League Football",010019401051C000,status-boots;crash;nvdec,boots,2024-05-07 06:23:56.000 +"Mario Tennis Aces",0100BDE00862A000,gpu;status-ingame;nvdec;ldn-works;LAN,ingame,2024-09-28 15:54:40.000 +"Mario vs. Donkey Kong",0100B99019412000,status-playable,playable,2024-05-04 21:22:39.000 +"Mario vs. Donkey Kong™ Demo",0100D9E01DBB0000,status-playable,playable,2024-02-18 10:40:06.000 +"Mark of the Ninja Remastered",01009A700A538000,status-playable,playable,2022-08-04 15:48:30.000 +"Marooners",010044600FDF0000,status-playable;nvdec;online-broken,playable,2022-10-18 21:35:26.000 +"Marvel Ultimate Alliance 3: The Black Order",010060700AC50000,status-playable;nvdec;ldn-untested,playable,2024-02-14 19:51:51.000 +"Mary Skelter 2",01003DE00C95E000,status-ingame;crash;regression,ingame,2023-09-12 07:37:28.000 +"Masquerada: Songs and Shadows",0100113008262000,status-playable,playable,2022-09-20 15:18:54.000 +"Master Detective Archives: Rain Code",01004800197F0000,gpu;status-ingame,ingame,2024-04-19 20:11:09.000 +"Masters of Anima",0100CC7009196000,status-playable;nvdec,playable,2022-08-04 16:00:09.000 +"Mathland",,status-playable,playable,2020-09-01 15:40:06.000 +"Max & The Book of Chaos",,status-playable,playable,2020-09-02 12:24:43.000 +"Max: The Curse Of Brotherhood",01001C9007614000,status-playable;nvdec,playable,2022-08-04 16:33:04.000 +"Maze",,status-playable,playable,2020-12-17 16:13:58.000 +"MEANDERS",0100EEF00CBC0000,UE4;gpu;status-ingame,ingame,2021-06-11 19:19:33.000 +"Mech Rage",,status-playable,playable,2020-11-18 12:30:16.000 +"Mecho Tales",0100C4F005EB4000,status-playable,playable,2022-08-04 17:03:19.000 +"Mechstermination Force",0100E4600D31A000,status-playable,playable,2024-07-04 05:39:15.000 +"Medarot Classics Plus Kabuto Ver",,status-playable,playable,2020-11-21 11:31:18.000 +"Medarot Classics Plus Kuwagata Ver",,status-playable,playable,2020-11-21 11:30:40.000 +"Mega Mall Story",0100BBC00CB9A000,slow;status-playable,playable,2022-08-04 17:10:58.000 +"Mega Man 11",0100B0C0086B0000,status-playable,playable,2021-04-26 12:07:53.000 +"Mega Man Battle Network Legacy Collection Vol. 2",0100734016266000,status-playable,playable,2023-08-03 18:04:32.000 +"Mega Man Legacy Collection Vol.1",01002D4007AE0000,gpu;status-ingame,ingame,2021-06-03 18:17:17.000 +"Mega Man X Legacy Collection",,audio;crash;services;status-menus,menus,2020-12-04 04:30:17.000 +"Megabyte Punch",,status-playable,playable,2020-10-16 14:07:18.000 +"Megadimension Neptunia VII",,32-bit;nvdec;status-playable,playable,2020-12-17 20:56:03.000 +"Megaman Battle Network Legacy Collection Vol 1",010038E016264000,status-playable,playable,2023-04-25 03:55:57.000 +"Megaman Legacy Collection 2",,status-playable,playable,2021-01-06 08:47:59.000 +"MEGAMAN ZERO/ZX LEGACY COLLECTION",010025C00D410000,status-playable,playable,2021-06-14 16:17:32.000 +"Megaquarium",010082B00E8B8000,status-playable,playable,2022-09-14 16:50:00.000 +"Megaton Rainfall",010005A00B312000,gpu;status-boots;opengl,boots,2022-08-04 18:29:43.000 +"Meiji Katsugeki Haikara Ryuuseigumi - Seibai Shimaseu, Yonaoshi Kagyou",0100EA100DF92000,32-bit;status-playable;nvdec,playable,2022-12-05 13:19:12.000 +"Mekorama",0100B360068B2000,gpu;status-boots,boots,2021-06-17 16:37:21.000 +"Melbits World",01000FA010340000,status-menus;nvdec;online,menus,2021-11-26 13:51:22.000 +"Melon Journey",0100F68019636000,status-playable,playable,2023-04-23 21:20:01.000 +"Memories Off -Innocent Fille- for Dearest",,status-playable,playable,2020-08-04 07:31:22.000 +"Memory Lane",010062F011E7C000,status-playable;UE4,playable,2022-10-05 14:31:03.000 +"Meow Motors",,UE4;gpu;status-ingame,ingame,2020-12-18 00:24:01.000 +"Mercenaries Saga Chronicles",,status-playable,playable,2021-01-10 12:48:19.000 +"Mercenaries Wings The False Phoenix",,crash;services;status-nothing,nothing,2020-05-08 22:42:12.000 +"Mercenary Kings",,online;status-playable,playable,2020-10-16 13:05:58.000 +"Merchants of Kaidan",0100E5000D3CA000,status-playable,playable,2021-04-15 11:44:28.000 +"METAGAL",,status-playable,playable,2020-06-05 00:05:48.000 +"Metal Gear Solid Master Collection Vol. 1: Metal Gear Solid 3",010047F01AA10000,services-horizon;status-menus,menus,2024-07-24 06:34:06.000 +"METAL MAX Xeno Reborn",0100E8F00F6BE000,status-playable,playable,2022-12-05 15:33:53.000 +"Metaloid: Origin",,status-playable,playable,2020-06-04 20:26:35.000 +"Metamorphosis",010055200E87E000,UE4;audout;gpu;nvdec;status-ingame,ingame,2021-06-16 16:18:11.000 +"Metro 2033 Redux",0100D4900E82C000,gpu;status-ingame,ingame,2022-11-09 10:53:13.000 +"Metro: Last Light Redux",0100F0400E850000,slow;status-ingame;nvdec;vulkan-backend-bug,ingame,2023-11-01 11:53:52.000 +"Metroid Dread",010093801237C000,status-playable,playable,2023-11-13 04:02:36.000 +"Metroid Prime Remastered",010012101468C000,gpu;status-ingame;Needs Update;vulkan-backend-bug;opengl-backend-bug,ingame,2024-05-07 22:48:15.000 +"Midnight Evil",0100A1200F20C000,status-playable,playable,2022-10-18 22:55:19.000 +"Mighty Fight Federation",0100C1E0135E0000,online;status-playable,playable,2021-04-06 18:39:56.000 +"Mighty Goose",0100AD701344C000,status-playable;nvdec,playable,2022-10-28 20:25:38.000 +"Mighty Gunvolt Burst",,status-playable,playable,2020-10-19 16:05:49.000 +"Mighty Switch Force! Collection",010060D00AE36000,status-playable,playable,2022-10-28 20:40:32.000 +"Miitopia",01003DA010E8A000,gpu;services-horizon;status-ingame,ingame,2024-09-06 10:39:13.000 +"Miitopia Demo",01007DA0140E8000,services;status-menus;crash;demo,menus,2023-02-24 11:50:58.000 +"Miles & Kilo",,status-playable,playable,2020-10-22 11:39:49.000 +"Millie",0100976008FBE000,status-playable,playable,2021-01-26 20:47:19.000 +"MIND Path to Thalamus",0100F5700C9A8000,UE4;status-playable,playable,2021-06-16 17:37:25.000 +"Minecraft",0100D71004694000,status-ingame;crash;ldn-broken,ingame,2024-09-29 12:08:59.000 +"Minecraft - Nintendo Switch Edition",01006BD001E06000,status-playable;ldn-broken,playable,2023-10-15 01:47:08.000 +"Minecraft Dungeons",01006C100EC08000,status-playable;nvdec;online-broken;UE4,playable,2024-06-26 22:10:43.000 +"Minecraft Legends",01007C6012CC8000,gpu;status-ingame;crash,ingame,2024-03-04 00:32:24.000 +"Minecraft: Story Mode - Season Two",01003EF007ABA000,status-playable;online-broken,playable,2023-03-04 00:30:50.000 +"Minecraft: Story Mode - The Complete Adventure",010059C002AC2000,status-boots;crash;online-broken,boots,2022-08-04 18:56:58.000 +"Minefield",0100B7500F756000,status-playable,playable,2022-10-05 15:03:29.000 +"Mini Motor Racing X",01003560119A6000,status-playable,playable,2021-04-13 17:54:49.000 +"Mini Trains",,status-playable,playable,2020-07-29 23:06:20.000 +"Miniature - The Story Puzzle",010039200EC66000,status-playable;UE4,playable,2022-09-14 17:18:50.000 +"Ministry of Broadcast",010069200EB80000,status-playable,playable,2022-08-10 00:31:16.000 +"Minna de Wai Wai! Spelunker",0100C3F000BD8000,status-nothing;crash,nothing,2021-11-03 07:17:11.000 +"Minoria",0100FAE010864000,status-playable,playable,2022-08-06 18:50:50.000 +"Miss Kobayashi's Dragonmaid Burst Forth!! Choro-gon☆Breath",01005AB015994000,gpu;status-playable,playable,2022-03-28 02:22:24.000 +"Missile Dancer",0100CFA0138C8000,status-playable,playable,2021-01-31 12:22:03.000 +"Missing Features 2D",0100E3601495C000,status-playable,playable,2022-10-28 20:52:54.000 +"Mist Hunter",010059200CC40000,status-playable,playable,2021-06-16 13:58:58.000 +"Mittelborg: City of Mages",,status-playable,playable,2020-08-12 19:58:06.000 +"MLB The Show 22 Tech Test",0100A9F01776A000,services;status-nothing;crash;Needs Update;demo,nothing,2022-12-09 10:28:34.000 +"MLB The Show 24",0100E2E01C32E000,services-horizon;status-nothing,nothing,2024-03-31 04:54:11.000 +"MLB® The Show™ 22",0100876015D74000,gpu;slow;status-ingame,ingame,2023-04-25 06:28:43.000 +"MLB® The Show™ 23",0100913019170000,gpu;status-ingame,ingame,2024-07-26 00:56:50.000 +"MO:Astray",,crash;status-ingame,ingame,2020-12-11 21:45:44.000 +"Moai VI: Unexpected Guests",,slow;status-playable,playable,2020-10-27 16:40:20.000 +"Modern Combat Blackout",0100D8700B712000,crash;status-nothing,nothing,2021-03-29 19:47:15.000 +"Modern Tales: Age of Invention",010004900D772000,slow;status-playable,playable,2022-10-12 11:20:19.000 +"Moero Chronicle Hyper",0100B8500D570000,32-bit;status-playable,playable,2022-08-11 07:21:56.000 +"Moero Crystal H",01004EB0119AC000,32-bit;status-playable;nvdec;vulkan-backend-bug,playable,2023-07-05 12:04:22.000 +"MOFUMOFU Sensen",0100B46017500000,gpu;status-menus,menus,2024-09-21 21:51:08.000 +"Momodora: Revere Under the Moonlight",01004A400C320000,deadlock;status-nothing,nothing,2022-02-06 03:47:43.000 +"Momonga Pinball Adventures",01002CC00BC4C000,status-playable,playable,2022-09-20 16:00:40.000 +"Momotaro Dentetsu Showa, Heisei, Reiwa mo Teiban!",010093100DA04000,gpu;status-ingame,ingame,2023-09-22 10:21:46.000 +"MONKEY BARRELS",0100FBD00ED24000,status-playable,playable,2022-09-14 17:28:52.000 +"Monkey King: Master of the Clouds",,status-playable,playable,2020-09-28 22:35:48.000 +"Monomals",01003030161DC000,gpu;status-ingame,ingame,2024-08-06 22:02:51.000 +"Mononoke Slashdown",0100F3A00FB78000,status-menus;crash,menus,2022-05-04 20:55:47.000 +"Monopoly for Nintendo Switch",01007430037F6000,status-playable;nvdec;online-broken,playable,2024-02-06 23:13:01.000 +"Monopoly Madness",01005FF013DC2000,status-playable,playable,2022-01-29 21:13:52.000 +"Monster Blast",0100E2D0128E6000,gpu;status-ingame,ingame,2023-09-02 20:02:32.000 +"Monster Boy and the Cursed Kingdom",01006F7001D10000,status-playable;nvdec,playable,2022-08-04 20:06:32.000 +"Monster Bugs Eat People",,status-playable,playable,2020-07-26 02:05:34.000 +"Monster Energy Supercross - The Official Videogame",0100742007266000,status-playable;nvdec;UE4,playable,2022-08-04 20:25:00.000 +"Monster Energy Supercross - The Official Videogame 2",0100F8100B982000,status-playable;nvdec;UE4;ldn-untested,playable,2022-08-04 21:21:24.000 +"Monster Energy Supercross - The Official Videogame 3",010097800EA20000,UE4;audout;nvdec;online;status-playable,playable,2021-06-14 12:37:54.000 +"Monster Farm",0100E9900ED74000,32-bit;nvdec;status-playable,playable,2021-05-05 19:29:13.000 +"Monster Hunter Generation Ultimate",0100770008DD8000,32-bit;status-playable;online-broken;ldn-works,playable,2024-03-18 14:35:36.000 +"Monster Hunter Rise",0100B04011742000,gpu;slow;status-ingame;crash;nvdec;online-broken;Needs Update;ldn-works,ingame,2024-08-24 11:04:59.000 +"Monster Hunter Rise Demo",010093A01305C000,status-playable;online-broken;ldn-works;demo,playable,2022-10-18 23:04:17.000 +"Monster Hunter Stories 2: Wings of Ruin ID 0100E2101144600",,services;status-ingame,ingame,2022-07-10 19:27:30.000 +"MONSTER HUNTER STORIES 2: WINGS OF RUIN Trial Version",010042501329E000,status-playable;demo,playable,2022-11-13 22:20:26.000 +"Monster Hunter XX Demo",,32-bit;cpu;status-nothing,nothing,2020-03-22 10:12:28.000 +"Monster Hunter XX Nintendo Switch Ver ( Double Cross )",0100C3800049C000,status-playable,playable,2024-07-21 14:08:09.000 +"MONSTER JAM CRUSH IT!™",010088400366E000,UE4;nvdec;online;status-playable,playable,2021-04-08 19:29:27.000 +"Monster Jam Steel Titans",010095C00F354000,status-menus;crash;nvdec;UE4,menus,2021-11-14 09:45:38.000 +"Monster Jam Steel Titans 2",010051B0131F0000,status-playable;nvdec;UE4,playable,2022-10-24 17:17:59.000 +"Monster Puzzle",,status-playable,playable,2020-09-28 22:23:10.000 +"Monster Sanctuary",,crash;status-ingame,ingame,2021-04-04 05:06:41.000 +"Monster Truck Championship",0100D30010C42000,slow;status-playable;nvdec;online-broken;UE4,playable,2022-10-18 23:16:51.000 +"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. - モンスターを倒して強い剣や鎧を手にしなさい。死んでも諦めずに強くなりなさい。勇者隊が魔王を倒すその日を信じています。",01004E10142FE000,crash;status-ingame,ingame,2021-07-23 10:56:44.000 +"Monstrum",010039F00EF70000,status-playable,playable,2021-01-31 11:07:26.000 +"Moonfall Ultimate",,nvdec;status-playable,playable,2021-01-17 14:01:25.000 +"Moorhuhn Jump and Run Traps and Treasures",0100E3D014ABC000,status-playable,playable,2024-03-08 15:10:02.000 +"Moorkuhn Kart 2",010045C00F274000,status-playable;online-broken,playable,2022-10-28 21:10:35.000 +"Morbid: The Seven Acolytes",010040E00F642000,status-playable,playable,2022-08-09 17:21:58.000 +"More Dark",,status-playable,playable,2020-12-15 16:01:06.000 +"Morphies Law",,UE4;crash;ldn-untested;nvdec;online;status-menus,menus,2020-11-22 17:05:29.000 +"Morphite",,status-playable,playable,2021-01-05 19:40:55.000 +"Mortal Kombat 1",01006560184E6000,gpu;status-ingame,ingame,2024-09-04 15:45:47.000 +"Mortal Kombat 11",0100F2200C984000,slow;status-ingame;nvdec;online-broken;ldn-broken,ingame,2024-06-19 02:22:17.000 +"Mosaic",,status-playable,playable,2020-08-11 13:07:35.000 +"Moto GP 24",010040401D564000,gpu;status-ingame,ingame,2024-05-10 23:41:00.000 +"Moto Racer 4",01002ED00B01C000,UE4;nvdec;online;status-playable,playable,2021-04-08 19:09:11.000 +"Moto Rush GT",01003F200D0F2000,status-playable,playable,2022-08-05 11:23:55.000 +"MotoGP 18",0100361007268000,status-playable;nvdec;UE4;ldn-untested,playable,2022-08-05 11:41:45.000 +"MotoGP 19",01004B800D0E8000,status-playable;nvdec;online-broken;UE4,playable,2022-08-05 11:54:14.000 +"MotoGP 20",01001FA00FBBC000,status-playable;ldn-untested,playable,2022-09-29 17:58:01.000 +"MotoGP 21",01000F5013820000,gpu;status-ingame;nvdec;online-broken;UE4;ldn-untested,ingame,2022-10-28 21:35:08.000 +"Motorsport Manager for Nintendo Switch",01002A900D6D6000,status-playable;nvdec,playable,2022-08-05 12:48:14.000 +"Mountain Rescue Simulator",01009DB00D6E0000,status-playable,playable,2022-09-20 16:36:48.000 +"Moving Out",0100C4C00E73E000,nvdec;status-playable,playable,2021-06-07 21:17:24.000 +"Mr Blaster",0100D3300F110000,status-playable,playable,2022-09-14 17:56:24.000 +"Mr. DRILLER DrillLand",,nvdec;status-playable,playable,2020-07-24 13:56:48.000 +"Mr. Shifty",,slow;status-playable,playable,2020-05-08 15:28:16.000 +"Ms. Splosion Man",,online;status-playable,playable,2020-05-09 20:45:43.000 +"Muddledash",,services;status-ingame,ingame,2020-05-08 16:46:14.000 +"MudRunner - American Wilds",01009D200952E000,gpu;status-ingame;ldn-untested;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-16 11:40:52.000 +"Mugsters",010073E008E6E000,status-playable,playable,2021-01-28 17:57:17.000 +"MUJO",,status-playable,playable,2020-05-08 16:31:04.000 +"Mulaka",0100211005E94000,status-playable,playable,2021-01-28 18:07:20.000 +"Mummy Pinball",010038B00B9AE000,status-playable,playable,2022-08-05 16:08:11.000 +"Muse Dash",,status-playable,playable,2020-06-06 14:41:29.000 +"Mushroom Quest",,status-playable,playable,2020-05-17 13:07:08.000 +"Mushroom Wars 2",,nvdec;status-playable,playable,2020-09-28 15:26:08.000 +"Music Racer",,status-playable,playable,2020-08-10 08:51:23.000 +"MUSNYX",,status-playable,playable,2020-05-08 14:24:43.000 +"Musou Orochi 2 Ultimate",,crash;nvdec;status-boots,boots,2021-04-09 19:39:16.000 +"Must Dash Amigos",0100F6000EAA8000,status-playable,playable,2022-09-20 16:45:56.000 +"Mutant Football League Dynasty Edition",0100C3E00ACAA000,status-playable;online-broken,playable,2022-08-05 17:01:51.000 +"Mutant Mudds Collection",01004BE004A86000,status-playable,playable,2022-08-05 17:11:38.000 +"Mutant Year Zero: Road to Eden",0100E6B00DEA4000,status-playable;nvdec;UE4,playable,2022-09-10 13:31:10.000 +"MX Nitro",0100161009E5C000,status-playable,playable,2022-09-27 22:34:33.000 +"MX vs ATV All Out",0100218011E7E000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-25 19:51:46.000 +"MXGP3 - The Official Motocross Videogame",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 14:00:20.000 +"My Aunt is a Witch",01002C6012334000,status-playable,playable,2022-10-19 09:21:17.000 +"My Butler",,status-playable,playable,2020-06-27 13:46:23.000 +"My Friend Pedro: Blood Bullets Bananas",010031200B94C000,nvdec;status-playable,playable,2021-05-28 11:19:17.000 +"My Girlfriend is a Mermaid!?",,nvdec;status-playable,playable,2020-05-08 13:32:55.000 +"MY HERO ONE'S JUSTICE",,UE4;crash;gpu;online;status-menus,menus,2020-12-10 13:11:04.000 +"MY HERO ONE'S JUSTICE 2",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-18 14:08:47.000 +"My Hidden Things",0100E4701373E000,status-playable,playable,2021-04-15 11:26:06.000 +"My Little Dog Adventure",,gpu;status-ingame,ingame,2020-12-10 17:47:37.000 +"My Little Riding Champion",,slow;status-playable,playable,2020-05-08 17:00:53.000 +"My Lovely Daughter",010086B00C784000,status-playable,playable,2022-11-24 17:25:32.000 +"My Memory of Us",0100E7700C284000,status-playable,playable,2022-08-20 11:03:14.000 +"My Riding Stables - Life with Horses",010028F00ABAE000,status-playable,playable,2022-08-05 21:39:07.000 +"My Riding Stables 2: A New Adventure",010042A00FBF0000,status-playable,playable,2021-05-16 14:14:59.000 +"My Time At Portia",0100E25008E68000,status-playable,playable,2021-05-28 12:42:55.000 +"My Universe - Cooking Star Restaurant",0100CD5011A02000,status-playable,playable,2022-10-19 10:00:44.000 +"My Universe - Fashion Boutique",0100F71011A0A000,status-playable;nvdec,playable,2022-10-12 14:54:19.000 +"My Universe - Pet Clinic Cats & Dogs",0100CD5011A02000,status-boots;crash;nvdec,boots,2022-02-06 02:05:53.000 +"My Universe - School Teacher",01006C301199C000,nvdec;status-playable,playable,2021-01-21 16:02:52.000 +"n Verlore Verstand",,slow;status-ingame,ingame,2020-12-10 18:00:28.000 +"n Verlore Verstand - Demo",01009A500E3DA000,status-playable,playable,2021-02-09 00:13:32.000 +"N++",01000D5005974000,status-playable,playable,2022-08-05 21:54:58.000 +"NAIRI: Tower of Shirin",,nvdec;status-playable,playable,2020-08-09 19:49:12.000 +"NAMCO MUSEUM",010002F001220000,status-playable;ldn-untested,playable,2024-08-13 07:52:21.000 +"NAMCO MUSEUM ARCADE PAC",0100DAA00AEE6000,status-playable,playable,2021-06-07 21:44:50.000 +"NAMCOT COLLECTION",,audio;status-playable,playable,2020-06-25 13:35:22.000 +"Narcos: Rise of the Cartels",010072B00BDDE000,UE4;crash;nvdec;status-boots,boots,2021-03-22 13:18:47.000 +"NARUTO SHIPPUDEN: ULTIMATE NINJA STORM 4 ROAD TO BORUTO",010084D00CF5E000,status-playable,playable,2024-06-29 13:04:22.000 +"NARUTO SHIPPUDEN™: Ultimate Ninja Storm 3 Full Burst",01006BB00800A000,status-playable;nvdec,playable,2024-06-16 14:58:05.000 +"NARUTO X BARUTO Ultimate Ninja STORM CONNECTIONS",0100D2D0190A4000,services-horizon;status-nothing,nothing,2024-07-25 05:16:48.000 +"NARUTO™: Ultimate Ninja® STORM",0100715007354000,status-playable;nvdec,playable,2022-08-06 14:10:31.000 +"NASCAR Rivals",0100545016D5E000,status-ingame;crash;Incomplete,ingame,2023-04-21 01:17:47.000 +"Naught",0100103011894000,UE4;status-playable,playable,2021-04-26 13:31:45.000 +"NBA 2K Playgrounds 2",01001AE00C1B2000,status-playable;nvdec;online-broken;UE4;vulkan-backend-bug,playable,2022-08-06 14:40:38.000 +"NBA 2K18",0100760002048000,gpu;status-ingame;ldn-untested,ingame,2022-08-06 14:17:51.000 +"NBA 2K19",01001FF00B544000,crash;ldn-untested;services;status-nothing,nothing,2021-04-16 13:07:21.000 +"NBA 2K21",0100E24011D1E000,gpu;status-boots,boots,2022-10-05 15:31:51.000 +"NBA 2K23",0100ACA017E4E800,status-boots,boots,2023-10-10 23:07:14.000 +"NBA 2K24",010006501A8D8000,cpu;gpu;status-boots,boots,2024-08-11 18:23:08.000 +"NBA Playgrounds",0100F5A008126000,status-playable;nvdec;online-broken;UE4,playable,2022-08-06 16:13:44.000 +"NBA Playgrounds",010002900294A000,status-playable;nvdec;online-broken;UE4,playable,2022-08-06 17:06:59.000 +"Need a Packet?",,status-playable,playable,2020-08-12 16:09:01.000 +"Need for Speed Hot Pursuit Remastered",010029B0118E8000,status-playable;online-broken,playable,2024-03-20 21:58:02.000 +"Need For Speed Hot Pursuit Remastered",,audio;online;slow;status-ingame,ingame,2020-10-27 17:46:58.000 +"Nefarious",,status-playable,playable,2020-12-17 03:20:33.000 +"Negative",01008390136FC000,nvdec;status-playable,playable,2021-03-24 11:29:41.000 +"Neighbours back From Hell",010065F00F55A000,status-playable;nvdec,playable,2022-10-12 15:36:48.000 +"Nekopara Vol.1",0100B4900AD3E000,status-playable;nvdec,playable,2022-08-06 18:25:54.000 +"Nekopara Vol.2",,status-playable,playable,2020-12-16 11:04:47.000 +"Nekopara Vol.3",010045000E418000,status-playable,playable,2022-10-03 12:49:04.000 +"Nekopara Vol.4",,crash;status-ingame,ingame,2021-01-17 01:47:18.000 +"Nelke & the Legendary Alchemists ~Ateliers of the New World~",01006ED00BC76000,status-playable,playable,2021-01-28 19:39:42.000 +"Nelly Cootalot",,status-playable,playable,2020-06-11 20:55:42.000 +"Neo : The World Ends with You (DEMO)- 新すばらしきこのせかい (体験版)",01001AB0141A8000,crash;status-ingame,ingame,2021-07-18 07:29:18.000 +"Neo Cab",0100EBB00D2F4000,status-playable,playable,2021-04-24 00:27:58.000 +"Neo Cab Demo",,crash;status-boots,boots,2020-06-16 00:14:00.000 +"NEOGEO POCKET COLOR SELECTION Vol.1",010006D0128B4000,status-playable,playable,2023-07-08 20:55:36.000 +"Neon Abyss",0100BAB01113A000,status-playable,playable,2022-10-05 15:59:44.000 +"Neon Chrome",010075E0047F8000,status-playable,playable,2022-08-06 18:38:34.000 +"Neon Drive",010032000EAC6000,status-playable,playable,2022-09-10 13:45:48.000 +"Neon White",0100B9201406A000,status-ingame;crash,ingame,2023-02-02 22:25:06.000 +"Neonwall",0100743008694000,status-playable;nvdec,playable,2022-08-06 18:49:52.000 +"Neoverse Trinity Edition - 01001A20133E000",,status-playable,playable,2022-10-19 10:28:03.000 +"Nerdook Bundle Vol. 1",,gpu;slow;status-ingame,ingame,2020-10-07 14:27:10.000 +"Nerved",01008B0010160000,status-playable;UE4,playable,2022-09-20 17:14:03.000 +"NeuroVoider",,status-playable,playable,2020-06-04 18:20:05.000 +"Nevaeh",0100C20012A54000,gpu;nvdec;status-ingame,ingame,2021-06-16 17:29:03.000 +"Never Breakup",010039801093A000,status-playable,playable,2022-10-05 16:12:12.000 +"Neverending Nightmares",0100F79012600000,crash;gpu;status-boots,boots,2021-04-24 01:43:35.000 +"Neverlast",,slow;status-ingame,ingame,2020-07-13 23:55:19.000 +"Neverwinter Nights: Enhanced Edition",010013700DA4A000,gpu;status-menus;nvdec,menus,2024-09-30 02:59:19.000 +"New Frontier Days -Founding Pioneers-",,status-playable,playable,2020-12-10 12:45:07.000 +"New Pokémon Snap",0100F4300BF2C000,status-playable,playable,2023-01-15 23:26:57.000 +"New Super Lucky's Tale",010017700B6C2000,status-playable,playable,2024-03-11 14:14:10.000 +"New Super Mario Bros. U Deluxe",0100EA80032EA000,32-bit;status-playable,playable,2023-10-08 02:06:37.000 +"Newt One",,status-playable,playable,2020-10-17 21:21:48.000 +"Nexomon: Extinction",,status-playable,playable,2020-11-30 15:02:22.000 +"Nexoria: Dungeon Rogue Heroes",0100B69012EC6000,gpu;status-ingame,ingame,2021-10-04 18:41:29.000 +"Next Up Hero",,online;status-playable,playable,2021-01-04 22:39:36.000 +"Ni No Kuni Wrath of the White Witch",0100E5600D446000,status-boots;32-bit;nvdec,boots,2024-07-12 04:52:59.000 +"Nice Slice",,nvdec;status-playable,playable,2020-06-17 15:13:27.000 +"Niche - a genetics survival game",,nvdec;status-playable,playable,2020-11-27 14:01:11.000 +"Nickelodeon All-Star Brawl 2",010010701AFB2000,status-playable,playable,2024-06-03 14:15:01.000 +"Nickelodeon Kart Racers",,status-playable,playable,2021-01-07 12:16:49.000 +"Nickelodeon Paw Patrol: On a Roll",0100CEC003A4A000,nvdec;status-playable,playable,2021-01-28 21:14:49.000 +"Nicky: The Home Alone Golf Ball",,status-playable,playable,2020-08-08 13:45:39.000 +"Nicole",0100A95012668000,status-playable;audout,playable,2022-10-05 16:41:44.000 +"NieR:Automata The End of YoRHa Edition",0100B8E016F76000,slow;status-ingame;crash,ingame,2024-05-17 01:06:34.000 +"Night Call",0100F3A0095A6000,status-playable;nvdec,playable,2022-10-03 12:57:00.000 +"Night in the Woods",0100921006A04000,status-playable,playable,2022-12-03 20:17:54.000 +"Night Trap - 25th Anniversary Edition",0100D8500A692000,status-playable;nvdec,playable,2022-08-08 13:16:14.000 +"Nightmare Boy",,status-playable,playable,2021-01-05 15:52:29.000 +"Nightmares from the Deep 2: The Siren's Call",01006E700B702000,status-playable;nvdec,playable,2022-10-19 10:58:53.000 +"Nights of Azure 2: Bride of the New Moon",0100628004BCE000,status-menus;crash;nvdec;regression,menus,2022-11-24 16:00:39.000 +"Nightshade",,nvdec;status-playable,playable,2020-05-10 19:43:31.000 +"Nihilumbra",,status-playable,playable,2020-05-10 16:00:12.000 +"Nine Parchments",0100D03003F0E000,status-playable;ldn-untested,playable,2022-08-07 12:32:08.000 +"NINJA GAIDEN 3: Razor's Edge",01002AF014F4C000,status-playable;nvdec,playable,2023-08-11 08:25:31.000 +"Ninja Gaiden Sigma",0100E2F014F46000,status-playable;nvdec,playable,2022-11-13 16:27:02.000 +"Ninja Gaiden Sigma 2 - 0100696014FA000",,status-playable;nvdec,playable,2024-07-31 21:53:48.000 +"Ninja Shodown",,status-playable,playable,2020-05-11 12:31:21.000 +"Ninja Striker",,status-playable,playable,2020-12-08 19:33:29.000 +"Ninjala",0100CCD0073EA000,status-boots;online-broken;UE4,boots,2024-07-03 20:04:49.000 +"Ninjin: Clash of Carrots",010003C00B868000,status-playable;online-broken,playable,2024-07-10 05:12:26.000 +"NinNinDays",0100746010E4C000,status-playable,playable,2022-11-20 15:17:29.000 +"Nintendo 64 - Nintendo Switch Online",0100C9A00ECE6000,gpu;status-ingame;vulkan,ingame,2024-04-23 20:21:07.000 +"Nintendo Entertainment System - Nintendo Switch Online",0100D870045B6000,status-playable;online,playable,2022-07-01 15:45:06.000 +"Nintendo Labo - Toy-Con 01: Variety Kit",0100C4B0034B2000,gpu;status-ingame,ingame,2022-08-07 12:56:07.000 +"Nintendo Labo Toy-Con 02: Robot Kit",01009AB0034E0000,gpu;status-ingame,ingame,2022-08-07 13:03:19.000 +"Nintendo Labo Toy-Con 03: Vehicle Kit",01001E9003502000,services;status-menus;crash,menus,2022-08-03 17:20:11.000 +"Nintendo Labo Toy-Con 04: VR Kit",0100165003504000,services;status-boots;crash,boots,2023-01-17 22:30:24.000 +"Nintendo Switch Sports",0100D2F00D5C0000,deadlock;status-boots,boots,2024-09-10 14:20:24.000 +"Nintendo Switch Sports Online Play Test",01000EE017182000,gpu;status-ingame,ingame,2022-03-16 07:44:12.000 +"Nippon Marathon",010037200C72A000,nvdec;status-playable,playable,2021-01-28 20:32:46.000 +"Nirvana Pilot Yume",010020901088A000,status-playable,playable,2022-10-29 11:49:49.000 +"No Heroes Here",,online;status-playable,playable,2020-05-10 02:41:57.000 +"No Man’s Sky",0100853015E86000,gpu;status-ingame,ingame,2024-07-25 05:18:17.000 +"No More Heroes",0100F0400F202000,32-bit;status-playable,playable,2022-09-13 07:44:27.000 +"No More Heroes 2 Desperate Struggle",010071400F204000,32-bit;status-playable;nvdec,playable,2022-11-19 01:38:13.000 +"No More Heroes 3",01007C600EB42000,gpu;status-ingame;UE4,ingame,2024-03-11 17:06:19.000 +"No Straight Roads",01009F3011004000,status-playable;nvdec,playable,2022-10-05 17:01:38.000 +"NO THING",,status-playable,playable,2021-01-04 19:06:01.000 +"Nongunz: Doppelganger Edition",0100542012884000,status-playable,playable,2022-10-29 12:00:39.000 +"Norman's Great Illusion",,status-playable,playable,2020-12-15 19:28:24.000 +"Norn9 ~Norn + Nonette~ LOFN",01001A500AD6A000,status-playable;nvdec;vulkan-backend-bug,playable,2022-12-09 09:29:16.000 +"NORTH",,nvdec;status-playable,playable,2021-01-05 16:17:44.000 +"Northgard",0100A9E00D97A000,status-menus;crash,menus,2022-02-06 02:05:35.000 +"nOS new Operating System",01008AE019614000,status-playable,playable,2023-03-22 16:49:08.000 +"NOT A HERO",0100CB800B07E000,status-playable,playable,2021-01-28 19:31:24.000 +"Not Not a Brain Buster",,status-playable,playable,2020-05-10 02:05:26.000 +"Not Tonight",0100DAF00D0E2000,status-playable;nvdec,playable,2022-10-19 11:48:47.000 +"Nubarron: The adventure of an unlucky gnome",,status-playable,playable,2020-12-17 16:45:17.000 +"Nuclien",,status-playable,playable,2020-05-10 05:32:55.000 +"Numbala",,status-playable,playable,2020-05-11 12:01:07.000 +"Number Place 10000",010020500C8C8000,gpu;status-menus,menus,2021-11-24 09:14:23.000 +"Nurse Love Syndrome",010003701002C000,status-playable,playable,2022-10-13 10:05:22.000 +"nx-hbmenu",0000000000000000,status-boots;Needs Update;homebrew,boots,2024-04-06 22:05:32.000 +"nxquake2",,services;status-nothing;crash;homebrew,nothing,2022-08-04 23:14:04.000 +"Nyan Cat: Lost in Space",010049F00EC30000,online;status-playable,playable,2021-06-12 13:22:03.000 +"O---O",01002E6014FC4000,status-playable,playable,2022-10-29 12:12:14.000 +"OBAKEIDORO!",,nvdec;online;status-playable,playable,2020-10-16 16:57:34.000 +"Observer",01002A000C478000,UE4;gpu;nvdec;status-ingame,ingame,2021-03-03 20:19:45.000 +"Oceanhorn",,status-playable,playable,2021-01-05 13:55:22.000 +"Oceanhorn 2 Knights of the Lost Realm",01006CB010840000,status-playable,playable,2021-05-21 18:26:10.000 +"Octocopter: Double or Squids",,status-playable,playable,2021-01-06 01:30:16.000 +"Octodad Dadliest Catch",0100CAB006F54000,crash;status-boots,boots,2021-04-23 15:26:12.000 +"Octopath Traveler",,UE4;crash;gpu;status-ingame,ingame,2020-08-31 02:34:36.000 +"Octopath Traveler II",0100A3501946E000,gpu;status-ingame;amd-vendor-bug,ingame,2024-09-22 11:39:20.000 +"Odallus",010084300C816000,status-playable,playable,2022-08-08 12:37:58.000 +"Oddworld: Munch's Oddysee",0100BB500EE3C000,gpu;nvdec;status-ingame,ingame,2021-06-17 12:11:50.000 +"Oddworld: New 'n' Tasty",01005E700ABB8000,nvdec;status-playable,playable,2021-06-17 17:51:32.000 +"Oddworld: Soulstorm",0100D210177C6000,services-horizon;status-boots;crash,boots,2024-08-18 13:13:26.000 +"Oddworld: Stranger's Wrath HD",01002EA00ABBA000,status-menus;crash;nvdec;loader-allocator,menus,2021-11-23 09:23:21.000 +"Odium to the Core",,gpu;status-ingame,ingame,2021-01-08 14:03:52.000 +"Off And On Again",01006F5013202000,status-playable,playable,2022-10-29 19:46:26.000 +"Offroad Racing",01003CD00E8BC000,status-playable;online-broken;UE4,playable,2022-09-14 18:53:22.000 +"Oh My Godheads: Party Edition",01003B900AE12000,status-playable,playable,2021-04-15 11:04:11.000 +"Oh...Sir! The Hollywood Roast",,status-ingame,ingame,2020-12-06 00:42:30.000 +"OK K.O.! Let's Play Heroes",,nvdec;status-playable,playable,2021-01-11 18:41:02.000 +"OKAMI HD",0100276009872000,status-playable;nvdec,playable,2024-04-05 06:24:58.000 +"OkunoKA",01006AB00BD82000,status-playable;online-broken,playable,2022-08-08 14:41:51.000 +"Old Man's Journey",0100CE2007A86000,nvdec;status-playable,playable,2021-01-28 19:16:52.000 +"Old School Musical",,status-playable,playable,2020-12-10 12:51:12.000 +"Old School Racer 2",,status-playable,playable,2020-10-19 12:11:26.000 +"OlliOlli: Switch Stance",0100E0200B980000,gpu;status-boots,boots,2024-04-25 08:36:37.000 +"Olympia Soiree",0100F9D00C186000,status-playable,playable,2022-12-04 21:07:12.000 +"OLYMPIC GAMES TOKYO 2020",,ldn-untested;nvdec;online;status-playable,playable,2021-01-06 01:20:24.000 +"Omega Labyrinth Life",01001D600E51A000,status-playable,playable,2021-02-23 21:03:03.000 +"Omega Vampire",,nvdec;status-playable,playable,2020-10-17 19:15:35.000 +"Omensight: Definitive Edition",,UE4;crash;nvdec;status-ingame,ingame,2020-07-26 01:45:14.000 +"OMG Zombies!",01006DB00D970000,32-bit;status-playable,playable,2021-04-12 18:04:45.000 +"OMORI",010014E017B14000,status-playable,playable,2023-01-07 20:21:02.000 +"Once Upon A Coma",,nvdec;status-playable,playable,2020-08-01 12:09:39.000 +"One More Dungeon",,status-playable,playable,2021-01-06 09:10:58.000 +"One Person Story",,status-playable,playable,2020-07-14 11:51:02.000 +"One Piece Pirate Warriors 3",,nvdec;status-playable,playable,2020-05-10 06:23:52.000 +"One Piece Unlimited World Red Deluxe Edition",,status-playable,playable,2020-05-10 22:26:32.000 +"ONE PIECE: PIRATE WARRIORS 4",01008FE00E2F6000,status-playable;online-broken;ldn-untested,playable,2022-09-27 22:55:46.000 +"Oneiros",0100463013246000,status-playable,playable,2022-10-13 10:17:22.000 +"OneWayTicket",,UE4;status-playable,playable,2020-06-20 17:20:49.000 +"Oniken",010057C00D374000,status-playable,playable,2022-09-10 14:22:38.000 +"Oniken: Unstoppable Edition",010037900C814000,status-playable,playable,2022-08-08 14:52:06.000 +"Onimusha: Warlords",,nvdec;status-playable,playable,2020-07-31 13:08:39.000 +"OniNaki",0100CF4011B2A000,nvdec;status-playable,playable,2021-02-27 21:52:42.000 +"oOo: Ascension",010074000BE8E000,status-playable,playable,2021-01-25 14:13:34.000 +"Operación Triunfo 2017",0100D5400BD90000,services;status-ingame;nvdec,ingame,2022-08-08 15:06:42.000 +"Operencia The Stolen Sun",01006CF00CFA4000,UE4;nvdec;status-playable,playable,2021-06-08 13:51:07.000 +"OPUS Collection",01004A200BE82000,status-playable,playable,2021-01-25 15:24:04.000 +"OPUS: The Day We Found Earth",010049C0075F0000,nvdec;status-playable,playable,2021-01-21 18:29:31.000 +"Ord.",,status-playable,playable,2020-12-14 11:59:06.000 +"Ori and the Blind Forest: Definitive Edition",010061D00DB74000,status-playable;nvdec;online-broken,playable,2022-09-14 19:58:13.000 +"Ori and the Blind Forest: Definitive Edition Demo",010005800F46E000,status-playable,playable,2022-09-10 14:40:12.000 +"Ori and the Will of the Wisps",01008DD013200000,status-playable,playable,2023-03-07 00:47:13.000 +"Orn: The Tiny Forest Sprite",,UE4;gpu;status-ingame,ingame,2020-08-07 14:25:30.000 +"Othercide",0100E5900F49A000,status-playable;nvdec,playable,2022-10-05 19:04:38.000 +"OTOKOMIZU",,status-playable,playable,2020-07-13 21:00:44.000 +"Otti house keeper",01006AF013A9E000,status-playable,playable,2021-01-31 12:11:24.000 +"OTTTD",,slow;status-ingame,ingame,2020-10-10 19:31:07.000 +"Our two Bedroom Story",010097F010FE6000,gpu;status-ingame;nvdec,ingame,2023-10-10 17:41:20.000 +"Our World Is Ended.",,nvdec;status-playable,playable,2021-01-19 22:46:57.000 +"Out Of The Box",01005A700A166000,status-playable,playable,2021-01-28 01:34:27.000 +"Outbreak: Endless Nightmares",0100A0D013464000,status-playable,playable,2022-10-29 12:35:49.000 +"Outbreak: Epidemic",0100C850130FE000,status-playable,playable,2022-10-13 10:27:31.000 +"Outbreak: Lost Hope",0100D9F013102000,crash;status-boots,boots,2021-04-26 18:01:23.000 +"Outbreak: The New Nightmare",0100B450130FC000,status-playable,playable,2022-10-19 15:42:07.000 +"Outbreak: The Nightmare Chronicles",01006EE013100000,status-playable,playable,2022-10-13 10:41:57.000 +"Outbuddies DX",0100B8900EFA6000,gpu;status-ingame,ingame,2022-08-04 22:39:24.000 +"Outlast",01008D4007A1E000,status-playable;nvdec;loader-allocator;vulkan-backend-bug,playable,2024-01-27 04:44:26.000 +"Outlast 2",0100DE70085E8000,status-ingame;crash;nvdec,ingame,2022-01-22 22:28:05.000 +"Overcooked! 2",01006FD0080B2000,status-playable;ldn-untested,playable,2022-08-08 16:48:10.000 +"Overcooked! All You Can Eat",0100F28011892000,ldn-untested;online;status-playable,playable,2021-04-15 10:33:52.000 +"Overcooked! Special Edition",01009B900401E000,status-playable,playable,2022-08-08 20:48:52.000 +"Overlanders",0100D7F00EC64000,status-playable;nvdec;UE4,playable,2022-09-14 20:15:06.000 +"Overpass",01008EA00E816000,status-playable;online-broken;UE4;ldn-untested,playable,2022-10-17 15:29:47.000 +"Override 2 Super Mech League",0100647012F62000,status-playable;online-broken;UE4,playable,2022-10-19 15:56:04.000 +"Override: Mech City Brawl - Super Charged Mega Edition",01008A700F7EE000,status-playable;nvdec;online-broken;UE4,playable,2022-09-20 17:33:32.000 +"Overwatch®: Legendary Edition",0100F8600E21E000,deadlock;status-boots,boots,2022-09-14 20:22:22.000 +"OVERWHELM",01005F000CC18000,status-playable,playable,2021-01-21 18:37:18.000 +"Owlboy",,status-playable,playable,2020-10-19 14:24:45.000 +"PAC-MAN 99",0100AD9012510000,gpu;status-ingame;online-broken,ingame,2024-04-23 00:48:25.000 +"PAC-MAN CHAMPIONSHIP EDITION 2 PLUS",,status-playable,playable,2021-01-19 22:06:18.000 +"Paladins",011123900AEE0000,online;status-menus,menus,2021-01-21 19:21:37.000 +"PAN-PAN A tiny big adventure",0100F0D004CAE000,audout;status-playable,playable,2021-01-25 14:42:00.000 +"Pang Adventures",010083700B730000,status-playable,playable,2021-04-10 12:16:59.000 +"Pantsu Hunter",,status-playable,playable,2021-02-19 15:12:27.000 +"Panzer Dragoon: Remake",,status-playable,playable,2020-10-04 04:03:55.000 +"Panzer Paladin",01004AE0108E0000,status-playable,playable,2021-05-05 18:26:00.000 +"Paper Dolls Original",,UE4;crash;status-boots,boots,2020-07-13 20:26:21.000 +"Paper Mario The Origami King",0100A3900C3E2000,audio;status-playable;Needs Update,playable,2024-08-09 18:27:40.000 +"Paper Mario: The Thousand-Year Door",0100ECD018EBE000,gpu;status-ingame;intel-vendor-bug;slow,ingame,2025-01-07 04:27:35.000 +"Paperbound Brawlers",01006AD00B82C000,status-playable,playable,2021-01-25 14:32:15.000 +"Paradigm Paradox",0100DC70174E0000,status-playable;vulkan-backend-bug,playable,2022-12-03 22:28:13.000 +"Paradise Killer",01007FB010DC8000,status-playable;UE4,playable,2022-10-05 19:33:05.000 +"Paranautical Activity",010063400B2EC000,status-playable,playable,2021-01-25 13:49:19.000 +"Part Time UFO",01006B5012B32000,status-ingame;crash,ingame,2023-03-03 03:13:05.000 +"Party Arcade",01007FC00A040000,status-playable;online-broken;UE4;ldn-untested,playable,2022-08-09 12:32:53.000 +"Party Golf",0100B8E00359E000,status-playable;nvdec,playable,2022-08-09 12:38:30.000 +"Party Hard 2",010022801217E000,status-playable;nvdec,playable,2022-10-05 20:31:48.000 +"Party Treats",,status-playable,playable,2020-07-02 00:05:00.000 +"Path of Sin: Greed",01001E500EA16000,status-menus;crash,menus,2021-11-24 08:00:00.000 +"Pato Box",010031F006E76000,status-playable,playable,2021-01-25 15:17:52.000 +"PAW Patrol: Grand Prix",0100360016800000,gpu;status-ingame,ingame,2024-05-03 16:16:11.000 +"Paw Patrol: Might Pups Save Adventure Bay!",01001F201121E000,status-playable,playable,2022-10-13 12:17:55.000 +"Pawapoke R",01000c4015030000,services-horizon;status-nothing,nothing,2024-05-14 14:28:32.000 +"Pawarumi",0100A56006CEE000,status-playable;online-broken,playable,2022-09-10 15:19:33.000 +"PAYDAY 2",0100274004052000,status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-09 12:56:39.000 +"PBA Pro Bowling",010085700ABC8000,status-playable;nvdec;online-broken;UE4,playable,2022-09-14 23:00:49.000 +"PBA Pro Bowling 2021",0100F95013772000,status-playable;online-broken;UE4,playable,2022-10-19 16:46:40.000 +"PC Building Simulator",,status-playable,playable,2020-06-12 00:31:58.000 +"Peaky Blinders: Mastermind",010002100CDCC000,status-playable,playable,2022-10-19 16:56:35.000 +"Peasant Knight",,status-playable,playable,2020-12-22 09:30:50.000 +"Penny-Punching Princess",0100C510049E0000,status-playable,playable,2022-08-09 13:37:05.000 +"Penny's Big Breakaway",0100CA901AA9C000,status-playable;amd-vendor-bug,playable,2024-05-27 07:58:51.000 +"Perception",,UE4;crash;nvdec;status-menus,menus,2020-12-18 11:49:23.000 +"Perchang",010011700D1B2000,status-playable,playable,2021-01-25 14:19:52.000 +"Perfect Angle",010089F00A3B4000,status-playable,playable,2021-01-21 18:48:45.000 +"Perky Little Things",01005CD012DC0000,status-boots;crash;vulkan,boots,2024-08-04 07:22:46.000 +"Persephone",,status-playable,playable,2021-03-23 22:39:19.000 +"Perseverance",,status-playable,playable,2020-07-13 18:48:27.000 +"Persona 4 Golden",010062B01525C000,status-playable,playable,2024-08-07 17:48:07.000 +"Persona 5 Royal",01005CA01580E000,gpu;status-ingame,ingame,2024-08-17 21:45:15.000 +"Persona 5 Tactica",010087701B092000,status-playable,playable,2024-04-01 22:21:03.000 +"Persona 5: Scramble",,deadlock;status-boots,boots,2020-10-04 03:22:29.000 +"Persona 5: Strikers (US)",0100801011C3E000,status-playable;nvdec;mac-bug,playable,2023-09-26 09:36:01.000 +"Petoons Party",010044400EEAE000,nvdec;status-playable,playable,2021-03-02 21:07:58.000 +"PGA TOUR 2K21",010053401147C000,deadlock;status-ingame;nvdec,ingame,2022-10-05 21:53:50.000 +"Phantaruk",0100DDD00C0EA000,status-playable,playable,2021-06-11 18:09:54.000 +"PHANTOM BREAKER: BATTLE GROUNDS OVER DRIVE",0100063005C86000,audio;status-playable;nvdec,playable,2024-02-29 14:20:35.000 +"Phantom Doctrine",010096F00E5B0000,status-playable;UE4,playable,2022-09-15 10:51:50.000 +"Phantom Trigger",0100C31005A50000,status-playable,playable,2022-08-09 14:27:30.000 +"Phoenix Wright: Ace Attorney Trilogy",0100CB000A142000,status-playable,playable,2023-09-15 22:03:12.000 +"PHOGS!",,online;status-playable,playable,2021-01-18 15:18:37.000 +"Physical Contact: 2048",,slow;status-playable,playable,2021-01-25 15:18:32.000 +"Physical Contact: Speed",01008110036FE000,status-playable,playable,2022-08-09 14:40:46.000 +"Pianista: The Legendary Virtuoso",010077300A86C000,status-playable;online-broken,playable,2022-08-09 14:52:56.000 +"Picross Lord Of The Nazarick",010012100E8DC000,status-playable,playable,2023-02-08 15:54:56.000 +"Picross S2",,status-playable,playable,2020-10-15 12:01:40.000 +"Picross S3",,status-playable,playable,2020-10-15 11:55:27.000 +"Picross S4",,status-playable,playable,2020-10-15 12:33:46.000 +"Picross S5",0100AC30133EC000,status-playable,playable,2022-10-17 18:51:42.000 +"Picross S6",010025901432A000,status-playable,playable,2022-10-29 17:52:19.000 +"Picross S7",,status-playable,playable,2022-02-16 12:51:25.000 +"PictoQuest",010043B00E1CE000,status-playable,playable,2021-02-27 15:03:16.000 +"Piczle Lines DX",,UE4;crash;nvdec;status-menus,menus,2020-11-16 04:21:31.000 +"Piczle Lines DX 500 More Puzzles!",,UE4;status-playable,playable,2020-12-15 23:42:51.000 +"Pig Eat Ball",01000FD00D5CC000,services;status-ingame,ingame,2021-11-30 01:57:45.000 +"Pikmin 1",0100AA80194B0000,audio;status-ingame,ingame,2024-05-28 18:56:11.000 +"Pikmin 2",0100D680194B2000,gpu;status-ingame,ingame,2023-07-31 08:53:41.000 +"Pikmin 3 Deluxe",0100F4C009322000,gpu;status-ingame;32-bit;nvdec;Needs Update,ingame,2024-09-03 00:28:26.000 +"Pikmin 3 Deluxe Demo",01001CB0106F8000,32-bit;crash;demo;gpu;status-ingame,ingame,2021-06-16 18:38:07.000 +"Pikmin 4",0100B7C00933A000,gpu;status-ingame;crash;UE4,ingame,2024-08-26 03:39:08.000 +"Pikmin 4 Demo",0100E0B019974000,gpu;status-ingame;nvdec;UE4;demo;amd-vendor-bug,ingame,2023-09-22 21:41:08.000 +"Pillars of Eternity",0100D6200E130000,status-playable,playable,2021-02-27 00:24:21.000 +"Pilot Sports",01007A500B0B2000,status-playable,playable,2021-01-20 15:04:17.000 +"Pinball FX",0100DA70186D4000,status-playable,playable,2024-05-03 17:09:11.000 +"Pinball FX3",0100DB7003828000,status-playable;online-broken,playable,2022-11-11 23:49:07.000 +"Pine",,slow;status-ingame,ingame,2020-07-29 16:57:39.000 +"Pinstripe",,status-playable,playable,2020-11-26 10:40:40.000 +"Piofiore: Episodio 1926",01002B20174EE000,status-playable,playable,2022-11-23 18:36:05.000 +"Piofiore: Fated Memories",,nvdec;status-playable,playable,2020-11-30 14:27:50.000 +"Pixel Game Maker Series Puzzle Pedestrians",0100EA2013BCC000,status-playable,playable,2022-10-24 20:15:50.000 +"Pixel Game Maker Series Werewolf Princess Kaguya",0100859013CE6000,crash;services;status-nothing,nothing,2021-03-26 00:23:07.000 +"Pixel Gladiator",,status-playable,playable,2020-07-08 02:41:26.000 +"Pixel Puzzle Makeout League",010000E00E612000,status-playable,playable,2022-10-13 12:34:00.000 +"PixelJunk Eden 2",,crash;status-ingame,ingame,2020-12-17 11:55:52.000 +"Pixeljunk Monsters 2",0100E4D00A690000,status-playable,playable,2021-06-07 03:40:01.000 +"Pizza Titan Ultra",01004A900C352000,nvdec;status-playable,playable,2021-01-20 15:58:42.000 +"Pizza Tower",05000FD261232000,status-ingame;crash,ingame,2024-09-16 00:21:56.000 +"Plague Road",0100FF8005EB2000,status-playable,playable,2022-08-09 15:27:14.000 +"Planescape: Torment and Icewind Dale: Enhanced Editions",010030B00C316000,cpu;status-boots;32-bit;crash;Needs Update,boots,2022-09-10 03:58:26.000 +"PLANET ALPHA",,UE4;gpu;status-ingame,ingame,2020-12-16 14:42:20.000 +"Planet Cube Edge",01007EA019CFC000,status-playable,playable,2023-03-22 17:10:12.000 +"planetarian HD ~the reverie of a little planet~",,status-playable,playable,2020-10-17 20:26:20.000 +"Plantera",010087000428E000,status-playable,playable,2022-08-09 15:36:28.000 +"Plants vs. Zombies: Battle for Neighborville Complete Edition",0100C56010FD8000,gpu;audio;status-boots;crash,boots,2024-09-02 12:58:14.000 +"Ploid Saga",0100E5B011F48000,status-playable,playable,2021-04-19 16:58:45.000 +"Pode",01009440095FE000,nvdec;status-playable,playable,2021-01-25 12:58:35.000 +"Poi: Explorer Edition",010086F0064CE000,nvdec;status-playable,playable,2021-01-21 19:32:00.000 +"Poison Control",0100EB6012FD2000,status-playable,playable,2021-05-16 14:01:54.000 +"Pokémon Brilliant Diamond",0100000011D90000,gpu;status-ingame;ldn-works,ingame,2024-08-28 13:26:35.000 +"Pokémon Café Mix",010072400E04A000,status-playable,playable,2021-08-17 20:00:04.000 +"Pokémon HOME",,Needs Update;crash;services;status-menus,menus,2020-12-06 06:01:51.000 +"Pokémon Legends: Arceus",01001F5010DFA000,gpu;status-ingame;Needs Update;ldn-works,ingame,2024-09-19 10:02:02.000 +"Pokémon Mystery Dungeon Rescue Team DX",01003D200BAA2000,status-playable;mac-bug,playable,2024-01-21 00:16:32.000 +"Pokemon Quest",01005D100807A000,status-playable,playable,2022-02-22 16:12:32.000 +"Pokémon Scarlet",0100A3D008C5C000,gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug,ingame,2023-12-14 13:18:29.000 +"Pokémon Shield",01008DB008C2C000,deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-12 07:20:22.000 +"Pokémon Sword",0100ABF008968000,deadlock;status-ingame;crash;online-broken;ldn-works;LAN,ingame,2024-08-26 15:40:37.000 +"Pokémon Violet",01008F6008C5E000,gpu;status-ingame;nvdec;ldn-works;amd-vendor-bug;mac-bug,ingame,2024-07-30 02:51:48.000 +"Pokémon: Let's Go, Eevee!",0100187003A36000,status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-06-01 15:03:04.000 +"Pokémon: Let's Go, Pikachu!",010003F003A34000,status-ingame;crash;nvdec;online-broken;ldn-broken,ingame,2024-03-15 07:55:41.000 +"Pokémon: Let's Go, Pikachu! demo",01009AD008C4C000,slow;status-playable;demo,playable,2023-11-26 11:23:20.000 +"Pokkén Tournament DX",0100B3F000BE2000,status-playable;nvdec;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug;intel-vendor-bug,playable,2024-07-18 23:11:08.000 +"Pokken Tournament DX Demo",010030D005AE6000,status-playable;demo;opengl-backend-bug,playable,2022-08-10 12:03:19.000 +"Polandball: Can Into Space!",,status-playable,playable,2020-06-25 15:13:26.000 +"Poly Bridge",,services;status-playable,playable,2020-06-08 23:32:41.000 +"Polygod",010017600B180000,slow;status-ingame;regression,ingame,2022-08-10 14:38:14.000 +"Polyroll",010074B00ED32000,gpu;status-boots,boots,2021-07-01 16:16:50.000 +"Ponpu",,status-playable,playable,2020-12-16 19:09:34.000 +"Pooplers",,status-playable,playable,2020-11-02 11:52:10.000 +"Port Royale 4",01007EF013CA0000,status-menus;crash;nvdec,menus,2022-10-30 14:34:06.000 +"Portal",01007BB017812000,status-playable,playable,2024-06-12 03:48:29.000 +"Portal 2",0100ABD01785C000,gpu;status-ingame,ingame,2023-02-20 22:44:15.000 +"Portal Dogs",,status-playable,playable,2020-09-04 12:55:46.000 +"Portal Knights",0100437004170000,ldn-untested;online;status-playable,playable,2021-05-27 19:29:04.000 +"Potata: Fairy Flower",,nvdec;status-playable,playable,2020-06-17 09:51:34.000 +"Potion Party",01000A4014596000,status-playable,playable,2021-05-06 14:26:54.000 +"Power Rangers: Battle for the Grid",,status-playable,playable,2020-06-21 16:52:42.000 +"Powerful Pro Baseball 2024-2025",0100D1C01C194000,gpu;status-ingame,ingame,2024-08-25 06:40:48.000 +"PowerSlave Exhumed",01008E100E416000,gpu;status-ingame,ingame,2023-07-31 23:19:10.000 +"Prehistoric Dude",,gpu;status-ingame,ingame,2020-10-12 12:38:48.000 +"Pretty Princess Magical Coordinate",,status-playable,playable,2020-10-15 11:43:41.000 +"Pretty Princess Party",01007F00128CC000,status-playable,playable,2022-10-19 17:23:58.000 +"Preventive Strike",010009300D278000,status-playable;nvdec,playable,2022-10-06 10:55:51.000 +"Prince of Persia: The Lost Crown",0100210019428000,status-ingame;crash,ingame,2024-06-08 21:31:58.000 +"Princess Peach: Showtime!",01007A3009184000,status-playable;UE4,playable,2024-09-21 13:39:45.000 +"Princess Peach: Showtime! Demo",010024701DC2E000,status-playable;UE4;demo,playable,2024-03-10 17:46:45.000 +"Prinny 2: Dawn of Operation Panties, Dood!",01008FA01187A000,32-bit;status-playable,playable,2022-10-13 12:42:58.000 +"Prinny Presents NIS Classics Volume 1",0100A6E01681C000,status-boots;crash;Needs Update,boots,2023-02-02 07:23:09.000 +"Prinny: Can I Really Be the Hero?",01007A0011878000,32-bit;status-playable;nvdec,playable,2023-10-22 09:25:25.000 +"PriPara: All Idol Perfect Stage",010007F00879E000,status-playable,playable,2022-11-22 16:35:52.000 +"Prison Architect",010029200AB1C000,status-playable,playable,2021-04-10 12:27:58.000 +"Prison City",0100C1801B914000,gpu;status-ingame,ingame,2024-03-01 08:19:33.000 +"Prison Princess",0100F4800F872000,status-playable,playable,2022-11-20 15:00:25.000 +"Professional Construction - The Simulation",0100A9800A1B6000,slow;status-playable,playable,2022-08-10 15:15:45.000 +"Professional Farmer: Nintendo Switch Edition",,slow;status-playable,playable,2020-12-16 13:38:19.000 +"Professor Lupo and his Horrible Pets",,status-playable,playable,2020-06-12 00:08:45.000 +"Professor Lupo: Ocean",0100D1F0132F6000,status-playable,playable,2021-04-14 16:33:33.000 +"Project Highrise: Architect's Edition",0100BBD00976C000,status-playable,playable,2022-08-10 17:19:12.000 +"Project Nimbus: Complete Edition",0100ACE00DAB6000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-10 17:35:43.000 +"Project TRIANGLE STRATEGY Debut Demo",01002980140F6000,status-playable;UE4;demo,playable,2022-10-24 21:40:27.000 +"Project Warlock",,status-playable,playable,2020-06-16 10:50:41.000 +"Psikyo Collection Vol 1",,32-bit;status-playable,playable,2020-10-11 13:18:47.000 +"Psikyo Collection Vol. 3",0100A2300DB78000,status-ingame,ingame,2021-06-07 02:46:23.000 +"Psikyo Collection Vol.2",01009D400C4A8000,32-bit;status-playable,playable,2021-06-07 03:22:07.000 +"Psikyo Shooting Stars Alpha",01007A200F2E2000,32-bit;status-playable,playable,2021-04-13 12:03:43.000 +"Psikyo Shooting Stars Bravo",0100D7400F2E4000,32-bit;status-playable,playable,2021-06-14 12:09:07.000 +"PSYVARIAR DELTA",0100EC100A790000,nvdec;status-playable,playable,2021-01-20 13:01:46.000 +"Puchitto kurasutā",,Need-Update;crash;services;status-menus,menus,2020-07-04 16:44:28.000 +"Pulstario",0100861012474000,status-playable,playable,2022-10-06 11:02:01.000 +"Pumped BMX Pro",01009AE00B788000,status-playable;nvdec;online-broken,playable,2022-09-20 17:40:50.000 +"Pumpkin Jack",01006C10131F6000,status-playable;nvdec;UE4,playable,2022-10-13 12:52:32.000 +"PUSH THE CRATE",010016400F07E000,status-playable;nvdec;UE4,playable,2022-09-15 13:28:41.000 +"Push the Crate 2",0100B60010432000,UE4;gpu;nvdec;status-ingame,ingame,2021-06-10 14:20:01.000 +"Pushy and Pully in Blockland",,status-playable,playable,2020-07-04 11:44:41.000 +"Puyo Puyo Champions",,online;status-playable,playable,2020-06-19 11:35:08.000 +"Puyo Puyo Tetris 2",010038E011940000,status-playable;ldn-untested,playable,2023-09-26 11:35:25.000 +"Puzzle and Dragons GOLD",,slow;status-playable,playable,2020-05-13 15:09:34.000 +"Puzzle Bobble Everybubble!",010079E01A1E0000,audio;status-playable;ldn-works,playable,2023-06-10 03:53:40.000 +"Puzzle Book",,status-playable,playable,2020-09-28 13:26:01.000 +"Puzzle Box Maker",0100476004A9E000,status-playable;nvdec;online-broken,playable,2022-08-10 18:00:52.000 +"Pyramid Quest",0100A4E017372000,gpu;status-ingame,ingame,2023-08-16 21:14:52.000 +"Q-YO Blaster",,gpu;status-ingame,ingame,2020-06-07 22:36:53.000 +"Q.U.B.E. 2",010023600AA34000,UE4;status-playable,playable,2021-03-03 21:38:57.000 +"Qbics Paint",0100A8D003BAE000,gpu;services;status-ingame,ingame,2021-06-07 10:54:09.000 +"Quake",0100BA5012E54000,gpu;status-menus;crash,menus,2022-08-08 12:40:34.000 +"Quake II",010048F0195E8000,status-playable,playable,2023-08-15 03:42:14.000 +"QuakespasmNX",,status-nothing;crash;homebrew,nothing,2022-07-23 19:28:07.000 +"Quantum Replica",010045101288A000,status-playable;nvdec;UE4,playable,2022-10-30 21:17:22.000 +"Quarantine Circular",0100F1400BA88000,status-playable,playable,2021-01-20 15:24:15.000 +"Queen's Quest 4: Sacred Truce",0100DCF00F13A000,status-playable;nvdec,playable,2022-10-13 12:59:21.000 +"Quell Zen",0100492012378000,gpu;status-ingame,ingame,2021-06-11 15:59:53.000 +"Quest of Dungeons",01001DE005012000,status-playable,playable,2021-06-07 10:29:22.000 +"QuietMansion2",,status-playable,playable,2020-09-03 14:59:35.000 +"Quiplash 2 InterLASHional",0100AF100EE76000,status-playable;online-working,playable,2022-10-19 17:43:45.000 +"R-Type Dimensions EX",,status-playable,playable,2020-10-09 12:04:43.000 +"R-TYPE FINAL 2",0100F930136B6000,slow;status-ingame;nvdec;UE4,ingame,2022-10-30 21:46:29.000 +"R-TYPE FINAL 2 Demo",01007B0014300000,slow;status-ingame;nvdec;UE4;demo,ingame,2022-10-24 21:57:42.000 +"R.B.I. Baseball 17",0100B5A004302000,status-playable;online-working,playable,2022-08-11 11:55:47.000 +"R.B.I. Baseball 18",01005CC007616000,status-playable;nvdec;online-working,playable,2022-08-11 11:27:52.000 +"R.B.I. Baseball 19",0100FCB00BF40000,status-playable;nvdec;online-working,playable,2022-08-11 11:43:52.000 +"R.B.I. Baseball 20",010061400E7D4000,status-playable,playable,2021-06-15 21:16:29.000 +"R.B.I. Baseball 21",0100B4A0115CA000,status-playable;online-working,playable,2022-10-24 22:31:45.000 +"Rabi-Ribi",01005BF00E4DE000,status-playable,playable,2022-08-06 17:02:44.000 +"Race With Ryan",,UE4;gpu;nvdec;slow;status-ingame,ingame,2020-11-16 04:35:33.000 +"Rack N Ruin",,status-playable,playable,2020-09-04 15:20:26.000 +"RAD",010024400C516000,gpu;status-menus;crash;UE4,menus,2021-11-29 02:01:56.000 +"Rad Rodgers Radical Edition",010000600CD54000,status-playable;nvdec;online-broken,playable,2022-08-10 19:57:23.000 +"Radiation City",0100DA400E07E000,status-ingame;crash,ingame,2022-09-30 11:15:04.000 +"Radiation Island",01009E40095EE000,status-ingame;opengl;vulkan-backend-bug,ingame,2022-08-11 10:51:04.000 +"Radical Rabbit Stew",,status-playable,playable,2020-08-03 12:02:56.000 +"Radio Commander",0100BAD013B6E000,nvdec;status-playable,playable,2021-03-24 11:20:46.000 +"RADIO HAMMER STATION",01008FA00ACEC000,audout;status-playable,playable,2021-02-26 20:20:06.000 +"Raging Justice",01003D00099EC000,status-playable,playable,2021-06-03 14:06:50.000 +"Raiden IV x Mikado Remix [ 雷電Ⅳ×MIKADO remix ]",01005CD013116000,status-playable,playable,2022-07-29 15:50:13.000 +"Raiden V: Director's Cut",01002B000D97E000,deadlock;status-boots;nvdec,boots,2024-07-12 07:31:46.000 +"Railway Empire",01002EE00DC02000,status-playable;nvdec,playable,2022-10-03 13:53:50.000 +"Rain City",,status-playable,playable,2020-10-08 16:59:03.000 +"Rain on Your Parade",0100BDD014232000,status-playable,playable,2021-05-06 19:32:04.000 +"Rain World",010047600BF72000,status-playable,playable,2023-05-10 23:34:08.000 +"Rainbows, toilets & unicorns",,nvdec;status-playable,playable,2020-10-03 18:08:18.000 +"Raji An Ancient Epic",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-16 10:05:25.000 +"Rapala Fishing: Pro Series",,nvdec;status-playable,playable,2020-12-16 13:26:53.000 +"Rascal Fight",,status-playable,playable,2020-10-08 13:23:30.000 +"Rawr-Off",,crash;nvdec;status-menus,menus,2020-07-02 00:14:44.000 +"Rayman Legends: Definitive Edition",01005FF002E2A000,status-playable;nvdec;ldn-works,playable,2023-05-27 18:33:07.000 +"Re:Turn - One Way Trip",0100F03011616000,status-playable,playable,2022-08-29 22:42:53.000 +"Re:ZERO -Starting Life in Another World- The Prophecy of the Throne",,gpu;status-boots;crash;nvdec;vulkan,boots,2023-03-07 21:27:24.000 +"Real Drift Racing",,status-playable,playable,2020-07-25 14:31:31.000 +"Real Heroes: Firefighter",010048600CC16000,status-playable,playable,2022-09-20 18:18:44.000 +"realMyst: Masterpiece Edition",,nvdec;status-playable,playable,2020-11-30 15:25:42.000 +"Reaper: Tale of a Pale Swordsman",,status-playable,playable,2020-12-12 15:12:23.000 +"Rebel Cops",0100D9B00E22C000,status-playable,playable,2022-09-11 10:02:53.000 +"Rebel Galaxy: Outlaw",0100CAA01084A000,status-playable;nvdec,playable,2022-12-01 07:44:56.000 +"Red Bow",0100CF600FF7A000,services;status-ingame,ingame,2021-11-29 03:51:34.000 +"Red Colony",0100351013A06000,status-playable,playable,2021-01-25 20:44:41.000 +"Red Dead Redemption",01007820196A6000,status-playable;amd-vendor-bug,playable,2024-09-13 13:26:13.000 +"Red Death",,status-playable,playable,2020-08-30 13:07:37.000 +"Red Faction Guerrilla Re-Mars-tered",010075000C608000,ldn-untested;nvdec;online;status-playable,playable,2021-06-07 03:02:13.000 +"Red Game Without a Great Name",,status-playable,playable,2021-01-19 21:42:35.000 +"Red Siren : Space Defense",010045400D73E000,UE4;status-playable,playable,2021-04-25 21:21:29.000 +"Red Wings - Aces of the Sky",,status-playable,playable,2020-06-12 01:19:53.000 +"Redeemer: Enhanced Edition",01000D100DCF8000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-09-11 10:20:24.000 +"Redout: Space Assault",0100326010B98000,status-playable;UE4,playable,2022-10-19 23:04:35.000 +"Reel Fishing: Road Trip Adventure",010007C00E558000,status-playable,playable,2021-03-02 16:06:43.000 +"Reflection of Mine",,audio;status-playable,playable,2020-12-17 15:06:37.000 +"Refreshing Sideways Puzzle Ghost Hammer",,status-playable,playable,2020-10-18 12:08:54.000 +"Refunct",,UE4;status-playable,playable,2020-12-15 22:46:21.000 +"Regalia: Of Men and Monarchs - Royal Edition",0100FDF0083A6000,status-playable,playable,2022-08-11 12:24:01.000 +"Regions of Ruin",,status-playable,playable,2020-08-05 11:38:58.000 +"Reine des Fleurs",,cpu;crash;status-boots,boots,2020-09-27 18:50:39.000 +"REKT",,online;status-playable,playable,2020-09-28 12:33:56.000 +"Relicta",01002AD013C52000,status-playable;nvdec;UE4,playable,2022-10-31 12:48:33.000 +"Remi Lore",010095900B436000,status-playable,playable,2021-06-03 18:58:15.000 +"Remothered: Broken Porcelain",0100FBD00F5F6000,UE4;gpu;nvdec;status-ingame,ingame,2021-06-17 15:13:11.000 +"Remothered: Tormented Fathers",01001F100E8AE000,status-playable;nvdec;UE4,playable,2022-10-19 23:26:50.000 +"Rento Fortune Monolit",,ldn-untested;online;status-playable,playable,2021-01-19 19:52:21.000 +"Renzo Racer",01007CC0130C6000,status-playable,playable,2021-03-23 22:28:05.000 +"Rescue Tale",01003C400AD42000,status-playable,playable,2022-09-20 18:40:18.000 +"Resident Evil 4",010099A00BC1E000,status-playable;nvdec,playable,2022-11-16 21:16:04.000 +"Resident Evil 5",010018100CD46000,status-playable;nvdec,playable,2024-02-18 17:15:29.000 +"RESIDENT EVIL 6",01002A000CD48000,status-playable;nvdec,playable,2022-09-15 14:31:47.000 +"Resident Evil Revelations",0100643002136000,status-playable;nvdec;ldn-untested,playable,2022-08-11 12:44:19.000 +"RESIDENT EVIL REVELATIONS 2",010095300212A000,status-playable;online-broken;ldn-untested,playable,2022-08-11 12:57:50.000 +"Resolutiion",0100E7F00FFB8000,crash;status-boots,boots,2021-04-25 21:57:56.000 +"Restless Night [0100FF201568E000]",0100FF201568E000,status-nothing;crash,nothing,2022-02-09 10:54:49.000 +"Retail Interactive Display Menu (DevQuestMenu)- 0100069000078000",0100069000078000,services;status-nothing;crash,nothing,2022-08-11 13:19:41.000 +"Retimed",010086E00BCB2000,status-playable,playable,2022-08-11 13:32:39.000 +"Retro City Rampage DX",,status-playable,playable,2021-01-05 17:04:17.000 +"Retrograde Arena",01000ED014A2C000,status-playable;online-broken,playable,2022-10-31 13:38:58.000 +"Return of the Obra Dinn",010032E00E6E2000,status-playable,playable,2022-09-15 19:56:45.000 +"Revenge of Justice",010027400F708000,status-playable;nvdec,playable,2022-11-20 15:43:23.000 +"Reventure",0100E2E00EA42000,status-playable,playable,2022-09-15 20:07:06.000 +"REZ PLZ",,status-playable,playable,2020-10-24 13:26:12.000 +"Rhythm Fighter",0100729012D18000,crash;status-nothing,nothing,2021-02-16 18:51:30.000 +"Rhythm of the Gods",,UE4;crash;status-nothing,nothing,2020-10-03 17:39:59.000 +"RICO",01009D5009234000,status-playable;nvdec;online-broken,playable,2022-08-11 20:16:40.000 +"Riddled Corpses EX",01002C700C326000,status-playable,playable,2021-06-06 16:02:44.000 +"Rift Keeper",0100AC600D898000,status-playable,playable,2022-09-20 19:48:20.000 +"RiME",,UE4;crash;gpu;status-boots,boots,2020-07-20 15:52:38.000 +"Rimelands",01006AC00EE6E000,status-playable,playable,2022-10-13 13:32:56.000 +"Ring Fit Adventure",01002FF008C24000,crash;services;status-nothing,nothing,2021-04-14 19:00:01.000 +"RIOT: Civil Unrest",010088E00B816000,status-playable,playable,2022-08-11 20:27:56.000 +"Riptide GP: Renegade",01002A6006AA4000,online;status-playable,playable,2021-04-13 23:33:02.000 +"Rise and Shine",,status-playable,playable,2020-12-12 15:56:43.000 +"Rise of Insanity",,status-playable,playable,2020-08-30 15:42:14.000 +"Rise: Race the Future",01006BA00E652000,status-playable,playable,2021-02-27 13:29:06.000 +"Rising Hell",010020C012F48000,status-playable,playable,2022-10-31 13:54:02.000 +"Risk",0100E8300A67A000,status-playable;nvdec;online-broken,playable,2022-08-01 18:53:28.000 +"Risk of Rain 2",010076D00E4BA000,status-playable;online-broken,playable,2024-03-04 17:01:05.000 +"Ritual",0100BD300F0EC000,status-playable,playable,2021-03-02 13:51:19.000 +"Ritual: Crown of Horns",010042500FABA000,status-playable,playable,2021-01-26 16:01:47.000 +"Rival Megagun",,nvdec;online;status-playable,playable,2021-01-19 14:01:46.000 +"RIVE: Ultimate Edition",,status-playable,playable,2021-03-24 18:45:55.000 +"River City Girls",,nvdec;status-playable,playable,2020-06-10 23:44:09.000 +"River City Girls 2",01002E80168F4000,status-playable,playable,2022-12-07 00:46:27.000 +"River City Melee Mach!!",0100B2100767C000,status-playable;online-broken,playable,2022-09-20 20:51:57.000 +"RMX Real Motocross",,status-playable,playable,2020-10-08 21:06:15.000 +"Road Redemption",010053000B986000,status-playable;online-broken,playable,2022-08-12 11:26:20.000 +"Road to Ballhalla",010002F009A7A000,UE4;status-playable,playable,2021-06-07 02:22:36.000 +"Road to Guangdong",,slow;status-playable,playable,2020-10-12 12:15:32.000 +"Roarr!",010068200C5BE000,status-playable,playable,2022-10-19 23:57:45.000 +"Robonauts",0100618004096000,status-playable;nvdec,playable,2022-08-12 11:33:23.000 +"ROBOTICS;NOTES DaSH",,status-playable,playable,2020-11-16 23:09:54.000 +"ROBOTICS;NOTES ELITE",,status-playable,playable,2020-11-26 10:28:20.000 +"Robozarro",,status-playable,playable,2020-09-03 13:33:40.000 +"Rock 'N Racing Off Road DX",,status-playable,playable,2021-01-10 15:27:15.000 +"Rock N' Racing Grand Prix",,status-playable,playable,2021-01-06 20:23:57.000 +"Rock of Ages 3: Make & Break",0100A1B00DB36000,status-playable;UE4,playable,2022-10-06 12:18:29.000 +"Rocket League",01005EE0036EC000,gpu;status-ingame;online-broken;ldn-untested,ingame,2024-02-08 19:51:36.000 +"Rocket Wars",,status-playable,playable,2020-07-24 14:27:39.000 +"Rogue Aces",0100EC7009348000,gpu;services;status-ingame;nvdec,ingame,2021-11-30 02:18:30.000 +"Rogue Heroes: Ruins of Tasos",01009FA010848000,online;status-playable,playable,2021-04-01 15:41:25.000 +"Rogue Legacy",,status-playable,playable,2020-08-10 19:17:28.000 +"Rogue Robots",,status-playable,playable,2020-06-16 12:16:11.000 +"Rogue Trooper Redux",01001CC00416C000,status-playable;nvdec;online-broken,playable,2022-08-12 11:53:01.000 +"RogueCube",0100C7300C0EC000,status-playable,playable,2021-06-16 12:16:42.000 +"Roll'd",,status-playable,playable,2020-07-04 20:24:01.000 +"RollerCoaster Tycoon 3: Complete Edition",01004900113F8000,32-bit;status-playable,playable,2022-10-17 14:18:01.000 +"RollerCoaster Tycoon Adventures",,nvdec;status-playable,playable,2021-01-05 18:14:18.000 +"Rolling Gunner",010076200CA16000,status-playable,playable,2021-05-26 12:54:18.000 +"Rolling Sky 2",0100579011B40000,status-playable,playable,2022-11-03 10:21:12.000 +"Romancing SaGa 2",01001F600829A000,status-playable,playable,2022-08-12 12:02:24.000 +"Romancing SaGa 3",,audio;gpu;status-ingame,ingame,2020-06-27 20:26:18.000 +"Roof Rage",010088100DD42000,status-boots;crash;regression,boots,2023-11-12 03:47:18.000 +"Roombo: First Blood",,nvdec;status-playable,playable,2020-08-05 12:11:37.000 +"Root Double -Before Crime * After Days- Xtend Edition",0100936011556000,status-nothing;crash,nothing,2022-02-05 02:03:49.000 +"Root Letter: Last Answer",010030A00DA3A000,status-playable;vulkan-backend-bug,playable,2022-09-17 10:25:57.000 +"Royal Roads",,status-playable,playable,2020-11-17 12:54:38.000 +"RPG Maker MV",,nvdec;status-playable,playable,2021-01-05 20:12:01.000 +"rRootage Reloaded [01005CD015986000]",01005CD015986000,status-playable,playable,2022-08-05 23:20:18.000 +"RSDKv5u",0000000000000000,status-ingame;homebrew,ingame,2024-04-01 16:25:34.000 +"Rugby Challenge 4",010009B00D33C000,slow;status-playable;online-broken;UE4,playable,2022-10-06 12:45:53.000 +"Ruiner",01006EC00F2CC000,status-playable;UE4,playable,2022-10-03 14:11:33.000 +"Run the Fan",010074F00DE4A000,status-playable,playable,2021-02-27 13:36:28.000 +"Runbow",,online;status-playable,playable,2021-01-08 22:47:44.000 +"Runbow Deluxe Edition",0100D37009B8A000,status-playable;online-broken,playable,2022-08-12 12:20:25.000 +"Rune Factory 3 Special",010081C0191D8000,status-playable,playable,2023-10-15 08:32:49.000 +"Rune Factory 4 Special",010051D00E3A4000,status-ingame;32-bit;crash;nvdec,ingame,2023-05-06 08:49:17.000 +"Rune Factory 5 (JP)",010014D01216E000,gpu;status-ingame,ingame,2021-06-01 12:00:36.000 +"RWBY: Grimm Eclipse",0100E21013908000,status-playable;online-broken,playable,2022-11-03 10:44:01.000 +"RXN -Raijin-",,nvdec;status-playable,playable,2021-01-10 16:05:43.000 +"S.N.I.P.E.R. Hunter Scope",0100B8B012ECA000,status-playable,playable,2021-04-19 15:58:09.000 +"Saboteur II: Avenging Angel",,Needs Update;cpu;crash;status-nothing,nothing,2021-01-26 14:47:37.000 +"Saboteur SiO",,slow;status-ingame,ingame,2020-12-17 16:59:49.000 +"Safety First!",,status-playable,playable,2021-01-06 09:05:23.000 +"SaGa Frontier Remastered",0100A51013530000,status-playable;nvdec,playable,2022-11-03 13:54:56.000 +"SaGa SCARLET GRACE: AMBITIONS",010003A00D0B4000,status-playable,playable,2022-10-06 13:20:31.000 +"Saints Row IV",01008D100D43E000,status-playable;ldn-untested;LAN,playable,2023-12-04 18:33:37.000 +"Saints Row: The Third - The Full Package",0100DE600BEEE000,slow;status-playable;LAN,playable,2023-08-24 02:40:58.000 +"Sakai and...",01007F000EB36000,status-playable;nvdec,playable,2022-12-15 13:53:19.000 +"Sakuna: Of Rice and Ruin",0100B1400E8FE000,status-playable,playable,2023-07-24 13:47:13.000 +"Sally Face",0100BBF0122B4000,status-playable,playable,2022-06-06 18:41:24.000 +"Salt And Sanctuary",,status-playable,playable,2020-10-22 11:52:19.000 +"Sam & Max Save the World",,status-playable,playable,2020-12-12 13:11:51.000 +"Samsara",,status-playable,playable,2021-01-11 15:14:12.000 +"Samurai Jack Battle Through Time",01006C600E46E000,status-playable;nvdec;UE4,playable,2022-10-06 13:33:59.000 +"SAMURAI SHODOWN",,UE4;crash;nvdec;status-menus,menus,2020-09-06 02:17:00.000 +"SAMURAI SHOWDOWN NEOGEO COLLECTION",0100F6800F48E000,nvdec;status-playable,playable,2021-06-14 17:12:56.000 +"Samurai Warrior",0100B6501A360000,status-playable,playable,2023-02-27 18:42:38.000 +"SamuraiAces for Nintendo Switch",,32-bit;status-playable,playable,2020-11-24 20:26:55.000 +"Sangoku Rensenki ~Otome no Heihou!~",,gpu;nvdec;status-ingame,ingame,2020-10-17 19:13:14.000 +"Satsujin Tantei Jack the Ripper",0100A4700BC98000,status-playable,playable,2021-06-21 16:32:54.000 +"Saturday Morning RPG",0100F0000869C000,status-playable;nvdec,playable,2022-08-12 12:41:50.000 +"Sausage Sports Club",,gpu;status-ingame,ingame,2021-01-10 05:37:17.000 +"Save Koch",0100C8300FA90000,status-playable,playable,2022-09-26 17:06:56.000 +"Save the Ninja Clan",,status-playable,playable,2021-01-11 13:56:37.000 +"Save Your Nuts",010091000F72C000,status-playable;nvdec;online-broken;UE4,playable,2022-09-27 23:12:02.000 +"Saviors of Sapphire Wings & Stranger of Sword City Revisited",0100AA00128BA000,status-menus;crash,menus,2022-10-24 23:00:46.000 +"Say No! More",01001C3012912000,status-playable,playable,2021-05-06 13:43:34.000 +"Sayonara Wild Hearts",010010A00A95E000,status-playable,playable,2023-10-23 03:20:01.000 +"Schlag den Star",0100ACB004006000,slow;status-playable;nvdec,playable,2022-08-12 14:28:22.000 +"Scott Pilgrim vs The World: The Game",0100394011C30000,services-horizon;status-nothing;crash,nothing,2024-07-12 08:13:03.000 +"Scribblenauts Mega Pack",,nvdec;status-playable,playable,2020-12-17 22:56:14.000 +"Scribblenauts Showdown",,gpu;nvdec;status-ingame,ingame,2020-12-17 23:05:53.000 +"SD GUNDAM BATTLE ALLIANCE Demo",0100829018568000,audio;status-ingame;crash;demo,ingame,2022-08-01 23:01:20.000 +"SD GUNDAM G GENERATION CROSS RAYS",010055700CEA8000,status-playable;nvdec,playable,2022-09-15 20:58:44.000 +"SD GUNDAM G GENERATION CROSS RAYS PREMIUM G SOUND EDITION - 010022900D3EC00",,status-playable;nvdec,playable,2022-09-15 20:45:57.000 +"Sea King",0100E4A00D066000,UE4;nvdec;status-playable,playable,2021-06-04 15:49:22.000 +"Sea of Solitude The Director's Cut",0100AFE012BA2000,gpu;status-ingame,ingame,2024-07-12 18:29:29.000 +"Sea of Stars",01008C0016544000,status-playable,playable,2024-03-15 20:27:12.000 +"Sea of Stars Demo",010036F0182C4000,status-playable;demo,playable,2023-02-12 15:33:56.000 +"SeaBed",,status-playable,playable,2020-05-17 13:25:37.000 +"Season Match Bundle - Part 1 and 2",,status-playable,playable,2021-01-11 13:28:23.000 +"Season Match Full Bundle - Parts 1, 2 and 3",,status-playable,playable,2020-10-27 16:15:22.000 +"Secret Files 3",,nvdec;status-playable,playable,2020-10-24 15:32:39.000 +"Seek Hearts",010075D0101FA000,status-playable,playable,2022-11-22 15:06:26.000 +"Seers Isle",,status-playable,playable,2020-11-17 12:28:50.000 +"SEGA AGES Alex Kidd in Miracle World",0100A8900AF04000,online;status-playable,playable,2021-05-05 16:35:47.000 +"SEGA AGES Gain Ground",01001E600AF08000,online;status-playable,playable,2021-05-05 16:16:27.000 +"SEGA AGES OUTRUN",,status-playable,playable,2021-01-11 13:13:59.000 +"SEGA AGES PHANTASY STAR",,status-playable,playable,2021-01-11 12:49:48.000 +"SEGA AGES Puyo Puyo",01005F600CB0E000,online;status-playable,playable,2021-05-05 16:09:28.000 +"SEGA AGES SONIC THE HEDGEHOG 2",01000D200C614000,status-playable,playable,2022-09-21 20:26:35.000 +"SEGA AGES SPACE HARRIER",,status-playable,playable,2021-01-11 12:57:40.000 +"SEGA AGES Wonder Boy: Monster Land",01001E700AC60000,online;status-playable,playable,2021-05-05 16:28:25.000 +"SEGA Ages: Sonic The Hedgehog",010051F00AC5E000,slow;status-playable,playable,2023-03-05 20:16:31.000 +"SEGA Ages: Virtua Racing",010054400D2E6000,status-playable;online-broken,playable,2023-01-29 17:08:39.000 +"SEGA Genesis - Nintendo Switch Online",0100B3C014BDA000,status-nothing;crash;regression,nothing,2022-04-11 07:27:21.000 +"SEGA Mega Drive Classics",,online;status-playable,playable,2021-01-05 11:08:00.000 +"Semispheres",,status-playable,playable,2021-01-06 23:08:31.000 +"SENRAN KAGURA Peach Ball",0100D1800D902000,status-playable,playable,2021-06-03 15:12:10.000 +"SENRAN KAGURA Reflexions",,status-playable,playable,2020-03-23 19:15:23.000 +"Sentinels of Freedom",01009E500D29C000,status-playable,playable,2021-06-14 16:42:19.000 +"SENTRY",,status-playable,playable,2020-12-13 12:00:24.000 +"Sephirothic Stories",010059700D4A0000,services;status-menus,menus,2021-11-25 08:52:17.000 +"Serious Sam Collection",010007D00D43A000,status-boots;vulkan-backend-bug,boots,2022-10-13 13:53:34.000 +"Served! A gourmet race",0100B2C00E4DA000,status-playable;nvdec,playable,2022-09-28 12:46:00.000 +"Seven Knights -Time Wanderer-",010018400C24E000,status-playable;vulkan-backend-bug,playable,2022-10-13 22:08:54.000 +"Seven Pirates H",0100D6F016676000,status-playable,playable,2024-06-03 14:54:12.000 +"Severed",,status-playable,playable,2020-12-15 21:48:48.000 +"Shadow Blade Reload",0100D5500DA94000,nvdec;status-playable,playable,2021-06-11 18:40:43.000 +"Shadow Gangs",0100BE501382A000,cpu;gpu;status-ingame;crash;regression,ingame,2024-04-29 00:07:26.000 +"Shadow Man Remastered",0100C3A013840000,gpu;status-ingame,ingame,2024-05-20 06:01:39.000 +"Shadowgate",,status-playable,playable,2021-04-24 07:32:57.000 +"Shadowrun Returns",0100371013B3E000,gpu;status-ingame;Needs Update,ingame,2022-10-04 21:32:31.000 +"Shadowrun: Dragonfall - Director's Cut",01008310154C4000,gpu;status-ingame;Needs Update,ingame,2022-10-04 20:52:18.000 +"Shadowrun: Hong Kong - Extended Edition",0100C610154CA000,gpu;status-ingame;Needs Update,ingame,2022-10-04 20:53:09.000 +"Shadows 2: Perfidia",,status-playable,playable,2020-08-07 12:43:46.000 +"Shadows of Adam",,status-playable,playable,2021-01-11 13:35:58.000 +"Shadowverse Champions Battle",01002A800C064000,status-playable,playable,2022-10-02 22:59:29.000 +"Shadowverse: Champion’s Battle",01003B90136DA000,status-nothing;crash,nothing,2023-03-06 00:31:50.000 +"Shady Part of Me",0100820013612000,status-playable,playable,2022-10-20 11:31:55.000 +"Shakedown: Hawaii",,status-playable,playable,2021-01-07 09:44:36.000 +"Shakes on a Plane",01008DA012EC0000,status-menus;crash,menus,2021-11-25 08:52:25.000 +"Shalnor Legends: Sacred Lands",0100B4900E008000,status-playable,playable,2021-06-11 14:57:11.000 +"Shanky: The Vegan's Nightmare - 01000C00CC10000",,status-playable,playable,2021-01-26 15:03:55.000 +"Shantae",0100430013120000,status-playable,playable,2021-05-21 04:53:26.000 +"Shantae and the Pirate's Curse",0100EFD00A4FA000,status-playable,playable,2024-04-29 17:21:57.000 +"Shantae and the Seven Sirens",,nvdec;status-playable,playable,2020-06-19 12:23:40.000 +"Shantae: Half-Genie Hero Ultimate Edition",,status-playable,playable,2020-06-04 20:14:20.000 +"Shantae: Risky's Revenge - Director's Cut",0100ADA012370000,status-playable,playable,2022-10-06 20:47:39.000 +"Shaolin vs Wutang : Eastern Heroes",01003AB01062C000,deadlock;status-nothing,nothing,2021-03-29 20:38:54.000 +"Shape Of The World0",0100B250009B9600,UE4;status-playable,playable,2021-03-05 16:42:28.000 +"She Remembered Caterpillars",01004F50085F2000,status-playable,playable,2022-08-12 17:45:14.000 +"She Sees Red",01000320110C2000,status-playable;nvdec,playable,2022-09-30 11:30:15.000 +"Shelter Generations",01009EB004CB0000,status-playable,playable,2021-06-04 16:52:39.000 +"Sherlock Holmes: The Devil's Daughter",010020F014DBE000,gpu;status-ingame,ingame,2022-07-11 00:07:26.000 +"Shift Happens",,status-playable,playable,2021-01-05 21:24:18.000 +"SHIFT QUANTUM",,UE4;crash;status-ingame,ingame,2020-11-06 21:54:08.000 +"Shiftlings",01000750084B2000,nvdec;status-playable,playable,2021-03-04 13:49:54.000 +"Shin Megami Tensei III Nocturne HD Remaster",01003B0012DC2000,status-playable,playable,2022-11-03 22:53:27.000 +"Shin Megami Tensei III NOCTURNE HD REMASTER",010045800ED1E000,gpu;status-ingame;Needs Update,ingame,2022-11-03 19:57:01.000 +"Shin Megami Tensei V",010063B012DC6000,status-playable;UE4,playable,2024-02-21 06:30:07.000 +"Shin Megami Tensei V: Vengeance",010069C01AB82000,gpu;status-ingame;vulkan-backend-bug,ingame,2024-07-14 11:28:24.000 +"Shing! (サムライフォース:斬!)",01009050133B4000,status-playable;nvdec,playable,2022-10-22 00:48:54.000 +"Shining Resonance Refrain",01009A5009A9E000,status-playable;nvdec,playable,2022-08-12 18:03:01.000 +"Shinsekai Into the Depths",01004EE0104F6000,status-playable,playable,2022-09-28 14:07:51.000 +"Shio",0100C2F00A568000,status-playable,playable,2021-02-22 16:25:09.000 +"Shipped",,status-playable,playable,2020-11-21 14:22:32.000 +"Ships",01000E800FCB4000,status-playable,playable,2021-06-11 16:14:37.000 +"Shiren the Wanderer: The Tower of Fortune and the Dice of Fate",01007430122D0000,status-playable;nvdec,playable,2022-10-20 11:44:36.000 +"Shiritsu Berubara Gakuen ~Versailles no Bara Re*imagination~",,cpu;crash;status-boots,boots,2020-09-27 19:01:25.000 +"Shiro0",01000244016BAE00,gpu;status-ingame,ingame,2024-01-13 08:54:39.000 +"Shoot 1UP DX",,status-playable,playable,2020-12-13 12:32:47.000 +"Shovel Knight: Specter of Torment",,status-playable,playable,2020-05-30 08:34:17.000 +"Shovel Knight: Treasure Trove",,status-playable,playable,2021-02-14 18:24:39.000 +"Shred!2 - Freeride MTB",,status-playable,playable,2020-05-30 14:34:09.000 +"Shu",,nvdec;status-playable,playable,2020-05-30 09:08:59.000 +"Shut Eye",,status-playable,playable,2020-07-23 18:08:35.000 +"Sid Meier's Civilization VI",010044500C182000,status-playable;ldn-untested,playable,2024-04-08 16:03:40.000 +"Sigi - A Fart for Melusina",01007FC00B674000,status-playable,playable,2021-02-22 16:46:58.000 +"Silence",0100F1400B0D6000,nvdec;status-playable,playable,2021-06-03 14:46:17.000 +"Silent World",,status-playable,playable,2020-08-28 13:45:13.000 +"Silk",010045500DFE2000,nvdec;status-playable,playable,2021-06-10 15:34:37.000 +"SilverStarChess",010016D00A964000,status-playable,playable,2021-05-06 15:25:57.000 +"Simona's Requiem",0100E8C019B36000,gpu;status-ingame,ingame,2023-02-21 18:29:19.000 +"Sin Slayers",01006FE010438000,status-playable,playable,2022-10-20 11:53:52.000 +"Sine Mora EX",01002820036A8000,gpu;status-ingame;online-broken,ingame,2022-08-12 19:36:18.000 +"Singled Out",,online;status-playable,playable,2020-08-03 13:06:18.000 +"Sinless",,nvdec;status-playable,playable,2020-08-09 20:18:55.000 +"SINNER: Sacrifice for Redemption",0100B16009C10000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-12 20:37:33.000 +"Sir Lovelot",0100E9201410E000,status-playable,playable,2021-04-05 16:21:46.000 +"Skate City",0100134011E32000,status-playable,playable,2022-11-04 11:37:39.000 +"Skee-Ball",,status-playable,playable,2020-11-16 04:44:07.000 +"Skelattack",01001A900F862000,status-playable,playable,2021-06-09 15:26:26.000 +"Skelittle: A Giant Party!!",01008E700F952000,status-playable,playable,2021-06-09 19:08:34.000 +"Skelly Selest",,status-playable,playable,2020-05-30 15:38:18.000 +"Skies of Fury",,status-playable,playable,2020-05-30 16:40:54.000 +"Skullgirls: 2nd Encore",010046B00DE62000,status-playable,playable,2022-09-15 21:21:25.000 +"Skulls of the Shogun: Bone-a-fide Edition",,status-playable,playable,2020-08-31 18:58:12.000 +"Skully",0100D7B011654000,status-playable;nvdec;UE4,playable,2022-10-06 13:52:59.000 +"Sky Force Anniversary",010083100B5CA000,status-playable;online-broken,playable,2022-08-12 20:50:07.000 +"Sky Force Reloaded",,status-playable,playable,2021-01-04 20:06:57.000 +"Sky Gamblers - Afterburner",010003F00CC98000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2022-08-12 21:04:55.000 +"Sky Gamblers: Storm Raiders",010093D00AC38000,gpu;audio;status-ingame;32-bit,ingame,2022-08-12 21:13:36.000 +"Sky Gamblers: Storm Raiders 2",010068200E96E000,gpu;status-ingame,ingame,2022-09-13 12:24:04.000 +"Sky Racket",,status-playable,playable,2020-09-07 12:22:24.000 +"Sky Ride",0100DDB004F30000,status-playable,playable,2021-02-22 16:53:07.000 +"Sky Rogue",,status-playable,playable,2020-05-30 08:26:28.000 +"Sky: Children of the Light",0100C52011460000,cpu;status-nothing;online-broken,nothing,2023-02-23 10:57:10.000 +"Skybolt Zack",010041C01014E000,status-playable,playable,2021-04-12 18:28:00.000 +"SKYHILL",0100A0A00D1AA000,status-playable,playable,2021-03-05 15:19:11.000 +"Skylanders Imaginators",,crash;services;status-boots,boots,2020-05-30 18:49:18.000 +"SKYPEACE",,status-playable,playable,2020-05-29 14:14:30.000 +"SkyScrappers",,status-playable,playable,2020-05-28 22:11:25.000 +"SkyTime",,slow;status-ingame,ingame,2020-05-30 09:24:51.000 +"SlabWell",01003AD00DEAE000,status-playable,playable,2021-02-22 17:02:51.000 +"Slain",,status-playable,playable,2020-05-29 14:26:16.000 +"Slain Back from Hell",0100BB100AF4C000,status-playable,playable,2022-08-12 23:36:19.000 +"Slay the Spire",010026300BA4A000,status-playable,playable,2023-01-20 15:09:26.000 +"Slayaway Camp: Butcher's Cut",0100501006494000,status-playable;opengl-backend-bug,playable,2022-08-12 23:44:05.000 +"Slayin 2",01004E900EDDA000,gpu;status-ingame,ingame,2024-04-19 16:15:26.000 +"Sleep Tight",01004AC0081DC000,gpu;status-ingame;UE4,ingame,2022-08-13 00:17:32.000 +"Slice Dice & Rice",0100F4500AA4E000,online;status-playable,playable,2021-02-22 17:44:23.000 +"Slide Stars",010010D011E1C000,status-menus;crash,menus,2021-11-25 08:53:43.000 +"Slime-san",,status-playable,playable,2020-05-30 16:15:12.000 +"Slime-san Superslime Edition",,status-playable,playable,2020-05-30 19:08:08.000 +"SMASHING THE BATTLE",01002AA00C974000,status-playable,playable,2021-06-11 15:53:57.000 +"SmileBASIC 4",0100C9100B06A000,gpu;status-menus,menus,2021-07-29 17:35:59.000 +"Smoke and Sacrifice",0100207007EB2000,status-playable,playable,2022-08-14 12:38:27.000 +"Smurfs Kart",01009790186FE000,status-playable,playable,2023-10-18 00:55:00.000 +"Snack World The Dungeon Crawl Gold",0100F2800D46E000,gpu;slow;status-ingame;nvdec;audout,ingame,2022-05-01 21:12:44.000 +"Snake Pass",0100C0F0020E8000,status-playable;nvdec;UE4,playable,2022-01-03 04:31:52.000 +"Sniper Elite 3 Ultimate Edition",010075A00BA14000,status-playable;ldn-untested,playable,2024-04-18 07:47:49.000 +"Sniper Elite 4",010007B010FCC000,gpu;status-ingame;vulkan-backend-bug;opengl-backend-bug,ingame,2024-06-18 17:53:15.000 +"Sniper Elite V2 Remastered",0100BB000A3AA000,slow;status-ingame;nvdec;online-broken;ldn-untested,ingame,2022-08-14 13:23:13.000 +"Snipperclips",0100704000B3A000,status-playable,playable,2022-12-05 12:44:55.000 +"Snipperclips Plus",01008E20047DC000,status-playable,playable,2023-02-14 20:20:13.000 +"SNK 40th Anniversary Collection",01004AB00AEF8000,status-playable,playable,2022-08-14 13:33:15.000 +"SNK HEROINES Tag Team Frenzy",010027F00AD6C000,status-playable;nvdec;online-broken;ldn-untested,playable,2022-08-14 14:19:25.000 +"Snooker 19",01008DA00CBBA000,status-playable;nvdec;online-broken;UE4,playable,2022-09-11 17:43:22.000 +"Snow Moto Racing Freedom",010045300516E000,gpu;status-ingame;vulkan-backend-bug,ingame,2022-08-15 16:05:14.000 +"Snowboarding the Next Phase",0100BE200C34A000,nvdec;status-playable,playable,2021-02-23 12:56:58.000 +"SnowRunner - 0100FBD13AB6000",,services;status-boots;crash,boots,2023-10-07 00:01:16.000 +"Soccer Club Life: Playing Manager",010017B012AFC000,gpu;status-ingame,ingame,2022-10-25 11:59:22.000 +"Soccer Pinball",0100B5000E05C000,UE4;gpu;status-ingame,ingame,2021-06-15 20:56:51.000 +"Soccer Slammers",,status-playable,playable,2020-05-30 07:48:14.000 +"Soccer, Tactics & Glory",010095C00F9DE000,gpu;status-ingame,ingame,2022-09-26 17:15:58.000 +"SOLDAM Drop, Connect, Erase",,status-playable,playable,2020-05-30 09:18:54.000 +"SolDivide for Nintendo Switch",0100590009C38000,32-bit;status-playable,playable,2021-06-09 14:13:03.000 +"Solo: Islands of the Heart",010008600D1AC000,gpu;status-ingame;nvdec,ingame,2022-09-11 17:54:43.000 +"Some Distant Memory",01009EE00E91E000,status-playable,playable,2022-09-15 21:48:19.000 +"Song of Nunu: A League of Legends Story",01004F401BEBE000,status-ingame,ingame,2024-07-12 18:53:44.000 +"Songbird Symphony",0100E5400BF94000,status-playable,playable,2021-02-27 02:44:04.000 +"Songbringer",,status-playable,playable,2020-06-22 10:42:02.000 +"Sonic 1 (2013)",0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-06 18:31:20.000 +"Sonic 2 (2013)",0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-01 16:25:30.000 +"Sonic A.I.R",0000000000000000,status-ingame;homebrew,ingame,2024-04-01 16:25:32.000 +"Sonic CD",0000000000000000,status-ingame;crash;homebrew,ingame,2024-04-01 16:25:31.000 +"Sonic Colors Ultimate [010040E0116B8000]",010040E0116B8000,status-playable,playable,2022-11-12 21:24:26.000 +"Sonic Forces",01001270012B6000,status-playable,playable,2024-07-28 13:11:21.000 +"Sonic Frontiers",01004AD014BF0000,gpu;deadlock;status-ingame;amd-vendor-bug;intel-vendor-bug,ingame,2024-09-05 09:18:53.000 +"Sonic Mania",01009AA000FAA000,status-playable,playable,2020-06-08 17:30:57.000 +"Sonic Mania Plus",01009AA000FAA000,status-playable,playable,2022-01-16 04:09:11.000 +"Sonic Superstars",01008F701C074000,gpu;status-ingame;nvdec,ingame,2023-10-28 17:48:07.000 +"Sonic Superstars Digital Art Book with Mini Digital Soundtrack",010088801C150000,status-playable,playable,2024-08-20 13:26:56.000 +"SONIC X SHADOW GENERATIONS",01005EA01C0FC000,status-ingame;crash,ingame,2025-01-07 04:20:45.000 +"Soul Axiom Rebooted",,nvdec;slow;status-ingame,ingame,2020-09-04 12:41:01.000 +"Soul Searching",,status-playable,playable,2020-07-09 18:39:07.000 +"South Park: The Fractured But Whole",01008F2005154000,slow;status-playable;online-broken,playable,2024-07-08 17:47:28.000 +"Space Blaze",,status-playable,playable,2020-08-30 16:18:05.000 +"Space Cows",,UE4;crash;status-menus,menus,2020-06-15 11:33:20.000 +"SPACE ELITE FORCE",,status-playable,playable,2020-11-27 15:21:05.000 +"Space Pioneer",010047B010260000,status-playable,playable,2022-10-20 12:24:37.000 +"Space Ribbon",010010A009830000,status-playable,playable,2022-08-15 17:17:10.000 +"SpaceCadetPinball",0000000000000000,status-ingame;homebrew,ingame,2024-04-18 19:30:04.000 +"Spacecats with Lasers",0100D9B0041CE000,status-playable,playable,2022-08-15 17:22:44.000 +"Spaceland",,status-playable,playable,2020-11-01 14:31:56.000 +"Sparkle 2",,status-playable,playable,2020-10-19 11:51:39.000 +"Sparkle Unleashed",01000DC007E90000,status-playable,playable,2021-06-03 14:52:15.000 +"Sparkle ZERO",,gpu;slow;status-ingame,ingame,2020-03-23 18:19:18.000 +"Sparklite",01007ED00C032000,status-playable,playable,2022-08-06 11:35:41.000 +"Spartan",0100E6A009A26000,UE4;nvdec;status-playable,playable,2021-03-05 15:53:19.000 +"Speaking Simulator",,status-playable,playable,2020-10-08 13:00:39.000 +"Spectrum",01008B000A5AE000,status-playable,playable,2022-08-16 11:15:59.000 +"Speed 3: Grand Prix",0100F18010BA0000,status-playable;UE4,playable,2022-10-20 12:32:31.000 +"Speed Brawl",,slow;status-playable,playable,2020-09-18 22:08:16.000 +"Speed Limit",01000540139F6000,gpu;status-ingame,ingame,2022-09-02 18:37:40.000 +"Speed Truck Racing",010061F013A0E000,status-playable,playable,2022-10-20 12:57:04.000 +"Spellspire",0100E74007EAC000,status-playable,playable,2022-08-16 11:21:21.000 +"Spelunker Party!",010021F004270000,services;status-boots,boots,2022-08-16 11:25:49.000 +"Spelunky",0100710013ABA000,status-playable,playable,2021-11-20 17:45:03.000 +"Sphinx and the Cursed Mummy™",0100BD500BA94000,gpu;status-ingame;32-bit;opengl,ingame,2024-05-20 06:00:51.000 +"Spider Solitaire",,status-playable,playable,2020-12-16 16:19:30.000 +"Spinch",010076D0122A8000,status-playable,playable,2024-07-12 19:02:10.000 +"Spinny's journey",01001E40136FE000,status-ingame;crash,ingame,2021-11-30 03:39:44.000 +"Spiral Splatter",,status-playable,playable,2020-06-04 14:03:57.000 +"Spirit Hunter: NG",,32-bit;status-playable,playable,2020-12-17 20:38:47.000 +"Spirit of the North",01005E101122E000,status-playable;UE4,playable,2022-09-30 11:40:47.000 +"Spirit Roots",,nvdec;status-playable,playable,2020-07-10 13:33:32.000 +"Spiritfarer",0100BD400DC52000,gpu;status-ingame,ingame,2022-10-06 16:31:38.000 +"SpiritSphere DX",01009D60080B4000,status-playable,playable,2021-07-03 23:37:49.000 +"Spitlings",010042700E3FC000,status-playable;online-broken,playable,2022-10-06 16:42:39.000 +"Splatoon 2",01003BC0000A0000,status-playable;ldn-works;LAN,playable,2024-07-12 19:11:15.000 +"Splatoon 3",0100C2500FC20000,status-playable;ldn-works;opengl-backend-bug;LAN;amd-vendor-bug,playable,2024-08-04 23:49:11.000 +"Splatoon 3: Splatfest World Premiere",0100BA0018500000,gpu;status-ingame;online-broken;demo,ingame,2022-09-19 03:17:12.000 +"SpongeBob SquarePants The Cosmic Shake",01009FB0172F4000,gpu;status-ingame;UE4,ingame,2023-08-01 19:29:53.000 +"SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated",010062800D39C000,status-playable;online-broken;UE4;ldn-broken;vulkan-backend-bug,playable,2023-08-01 19:29:34.000 +"Spooky Chase",010097C01336A000,status-playable,playable,2022-11-04 12:17:44.000 +"Spooky Ghosts Dot Com",0100C6100D75E000,status-playable,playable,2021-06-15 15:16:11.000 +"Sports Party",0100DE9005170000,nvdec;status-playable,playable,2021-03-05 13:40:42.000 +"Spot The Difference",0100E04009BD4000,status-playable,playable,2022-08-16 11:49:52.000 +"Spot the Differences: Party!",010052100D1B4000,status-playable,playable,2022-08-16 11:55:26.000 +"Spy Alarm",01000E6015350000,services;status-ingame,ingame,2022-12-09 10:12:51.000 +"SpyHack",01005D701264A000,status-playable,playable,2021-04-15 10:53:51.000 +"Spyro Reignited Trilogy",,Needs More Attention;UE4;crash;gpu;nvdec;status-menus,menus,2021-01-22 13:01:56.000 +"Spyro Reignited Trilogy",010077B00E046000,status-playable;nvdec;UE4,playable,2022-09-11 18:38:33.000 +"Squeakers",,status-playable,playable,2020-12-13 12:13:05.000 +"Squidgies Takeover",,status-playable,playable,2020-07-20 22:28:08.000 +"Squidlit",,status-playable,playable,2020-08-06 12:38:32.000 +"STAR OCEAN First Departure R",0100EBF00E702000,nvdec;status-playable,playable,2021-07-05 19:29:16.000 +"STAR OCEAN The Second Story R",010065301A2E0000,status-ingame;crash,ingame,2024-06-01 02:39:59.000 +"Star Renegades",,nvdec;status-playable,playable,2020-12-11 12:19:23.000 +"Star Story: The Horizon Escape",,status-playable,playable,2020-08-11 22:31:38.000 +"Star Trek Prodigy: Supernova",01009DF015776000,status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 10:18:50.000 +"Star Wars - Knights Of The Old Republic",0100854015868000,gpu;deadlock;status-boots,boots,2024-02-12 10:13:51.000 +"STAR WARS Battlefront Classic Collection",010040701B948000,gpu;status-ingame;vulkan,ingame,2024-07-12 19:24:21.000 +"STAR WARS Episode I: Racer",0100BD100FFBE000,slow;status-playable;nvdec,playable,2022-10-03 16:08:36.000 +"STAR WARS Jedi Knight II Jedi Outcast",0100BB500EACA000,gpu;status-ingame,ingame,2022-09-15 22:51:00.000 +"Star Wars Jedi Knight: Jedi Academy",01008CA00FAE8000,gpu;status-boots,boots,2021-06-16 12:35:30.000 +"Star Wars: Republic Commando",0100FA10115F8000,gpu;status-ingame;32-bit,ingame,2023-10-31 15:57:17.000 +"STAR WARS: The Force Unleashed",0100153014544000,status-playable,playable,2024-05-01 17:41:28.000 +"Star Wars™ Pinball",01006DA00DEAC000,status-playable;online-broken,playable,2022-09-11 18:53:31.000 +"Star-Crossed Myth - The Department of Wishes",01005EB00EA10000,gpu;status-ingame,ingame,2021-06-04 19:34:36.000 +"Star99",0100E6B0115FC000,status-menus;online,menus,2021-11-26 14:18:51.000 +"Stardash",01002100137BA000,status-playable,playable,2021-01-21 16:31:19.000 +"Stardew Valley",0100E65002BB8000,status-playable;online-broken;ldn-untested,playable,2024-02-14 03:11:19.000 +"Starlink: Battle for Atlas",01002CC003FE6000,services-horizon;status-nothing;crash;Needs Update,nothing,2024-05-05 17:25:11.000 +"Starlit Adventures Golden Stars",,status-playable,playable,2020-11-21 12:14:43.000 +"Starship Avenger Operation: Take Back Earth",,status-playable,playable,2021-01-12 15:52:55.000 +"State of Anarchy: Master of Mayhem",,nvdec;status-playable,playable,2021-01-12 19:00:05.000 +"State of Mind",,UE4;crash;status-boots,boots,2020-06-22 22:17:50.000 +"STAY",0100616009082000,crash;services;status-boots,boots,2021-04-23 14:24:52.000 +"STAY COOL, KOBAYASHI-SAN! A RIVER RANSOM STORY",0100B61009C60000,status-playable,playable,2021-01-26 17:37:28.000 +"Steam Prison",01008010118CC000,nvdec;status-playable,playable,2021-04-01 15:34:11.000 +"Steam Tactics",0100AE100DAFA000,status-playable,playable,2022-10-06 16:53:45.000 +"Steamburg",,status-playable,playable,2021-01-13 08:42:01.000 +"SteamWorld Dig",01009320084A4000,status-playable,playable,2024-08-19 12:12:23.000 +"SteamWorld Dig 2",0100CA9002322000,status-playable,playable,2022-12-21 19:25:42.000 +"SteamWorld Quest",,nvdec;status-playable,playable,2020-11-09 13:10:04.000 +"Steel Assault",01001C6014772000,status-playable,playable,2022-12-06 14:48:30.000 +"Steins;Gate Elite",,status-playable,playable,2020-08-04 07:33:32.000 +"STEINS;GATE: My Darling's Embrace",0100CB400E9BC000,status-playable;nvdec,playable,2022-11-20 16:48:34.000 +"Stela",01002DE01043E000,UE4;status-playable,playable,2021-06-15 13:28:34.000 +"Stellar Interface",01005A700C954000,status-playable,playable,2022-10-20 13:44:33.000 +"STELLATUM",0100BC800EDA2000,gpu;status-playable,playable,2021-03-07 16:30:23.000 +"Steredenn",,status-playable,playable,2021-01-13 09:19:42.000 +"Stern Pinball Arcade",0100AE0006474000,status-playable,playable,2022-08-16 14:24:41.000 +"Stikbold! A Dodgeball Adventure DELUXE",,status-playable,playable,2021-01-11 20:12:54.000 +"Stitchy in Tooki Trouble",010077B014518000,status-playable,playable,2021-05-06 16:25:53.000 +"STONE",010070D00F640000,status-playable;UE4,playable,2022-09-30 11:53:32.000 +"Stories Untold",010074400F6A8000,status-playable;nvdec,playable,2022-12-22 01:08:46.000 +"Storm Boy",010040D00BCF4000,status-playable,playable,2022-10-20 14:15:06.000 +"Storm in a Teacup",0100B2300B932000,gpu;status-ingame,ingame,2021-11-06 02:03:19.000 +"Story of a Gladiator",,status-playable,playable,2020-07-29 15:08:18.000 +"STORY OF SEASONS Pioneers of Olive [ 牧場物語 オリーブタウンと希望の大地 ]",010017301007E000,status-playable,playable,2021-03-18 11:42:19.000 +"Story of Seasons: Friends of Mineral Town",0100ED400EEC2000,status-playable,playable,2022-10-03 16:40:31.000 +"Stranded Sails: Explorers of the Cursed Islands - 010078D00E8F4000",010078D00E8F4000,slow;status-playable;nvdec;UE4,playable,2022-09-16 11:58:38.000 +"Strange Field Football",01000A6013F86000,status-playable,playable,2022-11-04 12:25:57.000 +"Stranger Things 3: The Game",,status-playable,playable,2021-01-11 17:44:09.000 +"Strawberry Vinegar",0100D7E011C64000,status-playable;nvdec,playable,2022-12-05 16:25:40.000 +"Stray",010075101EF84000,status-ingame;crash,ingame,2025-01-07 04:03:00.000 +"Street Fighter 30th Anniversary Collection",0100024008310000,status-playable;online-broken;ldn-partial,playable,2022-08-20 16:50:47.000 +"Street Outlaws: The List",010012400D202000,nvdec;status-playable,playable,2021-06-11 12:15:32.000 +"Street Power Soccer",,UE4;crash;status-boots,boots,2020-11-21 12:28:57.000 +"Streets of Rage 4",,nvdec;online;status-playable,playable,2020-07-07 21:21:22.000 +"Strife: Veteran Edition",0100BDE012928000,gpu;status-ingame,ingame,2022-01-15 05:10:42.000 +"Strike Force - War on Terror",010039100DACC000,status-menus;crash;Needs Update,menus,2021-11-24 08:08:20.000 +"Strike Suit Zero: Director's Cut",010072500D52E000,crash;status-boots,boots,2021-04-23 17:15:14.000 +"StrikeForce Kitty",,nvdec;status-playable,playable,2020-07-29 16:22:15.000 +"STRIKERS1945 for Nintendo Switch",0100FF5005B76000,32-bit;status-playable,playable,2021-06-03 19:35:04.000 +"STRIKERS1945II for Nintendo Switch",0100720008ED2000,32-bit;status-playable,playable,2021-06-03 19:43:00.000 +"Struggling",,status-playable,playable,2020-10-15 20:37:03.000 +"Stunt Kite Party",0100AF000B4AE000,nvdec;status-playable,playable,2021-01-25 17:16:56.000 +"STURMWIND EX",0100C5500E7AE000,audio;32-bit;status-playable,playable,2022-09-16 12:01:39.000 +"Sub Level Zero: Redux",0100E6400BCE8000,status-playable,playable,2022-09-16 12:30:03.000 +"Subarashiki Kono Sekai -Final Remix-",,services;slow;status-ingame,ingame,2020-02-10 16:21:51.000 +"Subdivision Infinity DX",010001400E474000,UE4;crash;status-boots,boots,2021-03-03 14:26:46.000 +"Submerged",0100EDA00D866000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-08-16 15:17:01.000 +"Subnautica",0100429011144000,status-playable;vulkan-backend-bug,playable,2022-11-04 13:07:29.000 +"Subnautica Below Zero",010014C011146000,status-playable,playable,2022-12-23 14:15:13.000 +"Suguru Nature",0100BF9012AC6000,crash;status-ingame,ingame,2021-07-29 11:36:27.000 +"Suicide Guy",01005CD00A2A2000,status-playable,playable,2021-01-26 13:13:54.000 +"Suicide Guy: Sleepin' Deeply",0100DE000C2E4000,status-ingame;Needs More Attention,ingame,2022-09-20 23:45:25.000 +"Sumire",01003D50126A4000,status-playable,playable,2022-11-12 13:40:43.000 +"Summer in Mara",0100A130109B2000,nvdec;status-playable,playable,2021-03-06 14:10:38.000 +"Summer Sweetheart",01004E500DB9E000,status-playable;nvdec,playable,2022-09-16 12:51:46.000 +"Sunblaze",0100BFE014476000,status-playable,playable,2022-11-12 13:59:23.000 +"Sundered: Eldritch Edition",01002D3007962000,gpu;status-ingame,ingame,2021-06-07 11:46:00.000 +"Super Beat Sports",0100F7000464A000,status-playable;ldn-untested,playable,2022-08-16 16:05:50.000 +"Super Blood Hockey",,status-playable,playable,2020-12-11 20:01:41.000 +"Super Bomberman R",01007AD00013E000,status-playable;nvdec;online-broken;ldn-works,playable,2022-08-16 19:19:14.000 +"SUPER BOMBERMAN R 2",0100B87017D94000,deadlock;status-boots,boots,2023-09-29 13:19:51.000 +"Super Cane Magic ZERO",0100D9B00DB5E000,status-playable,playable,2022-09-12 15:33:46.000 +"Super Chariot",010065F004E5E000,status-playable,playable,2021-06-03 13:19:01.000 +"SUPER DRAGON BALL HEROES WORLD MISSION",0100E5E00C464000,status-playable;nvdec;online-broken,playable,2022-08-17 12:56:30.000 +"Super Dungeon Tactics",010023100B19A000,status-playable,playable,2022-10-06 17:40:40.000 +"Super Inefficient Golf",010056800B534000,status-playable;UE4,playable,2022-08-17 15:53:45.000 +"Super Jumpy Ball",,status-playable,playable,2020-07-04 18:40:36.000 +"Super Kickers League",0100196009998000,status-playable,playable,2021-01-26 13:36:48.000 +"Super Kirby Clash",01003FB00C5A8000,status-playable;ldn-works,playable,2024-07-30 18:21:55.000 +"Super Korotama",010000D00F81A000,status-playable,playable,2021-06-06 19:06:22.000 +"Super Loop Drive",01003E300FCAE000,status-playable;nvdec;UE4,playable,2022-09-22 10:58:05.000 +"Super Mario 3D All-Stars",010049900F546000,services-horizon;slow;status-ingame;vulkan;amd-vendor-bug,ingame,2024-05-07 02:38:16.000 +"Super Mario 3D World + Bowser's Fury",010028600EBDA000,status-playable;ldn-works,playable,2024-07-31 10:45:37.000 +"Super Mario 64",054507E0B7552000,status-ingame;homebrew,ingame,2024-03-20 16:57:27.000 +"Super Mario Bros. 35",0100277011F1A000,status-menus;online-broken,menus,2022-08-07 16:27:25.000 +"Super Mario Bros. Wonder",010015100B514000,status-playable;amd-vendor-bug,playable,2024-09-06 13:21:21.000 +"Super Mario Maker 2",01009B90006DC000,status-playable;online-broken;ldn-broken,playable,2024-08-25 11:05:19.000 +"Super Mario Odyssey",0100000000010000,status-playable;nvdec;intel-vendor-bug;mac-bug,playable,2024-08-25 01:32:34.000 +"Super Mario Party",010036B0034E4000,gpu;status-ingame;Needs Update;ldn-works,ingame,2024-06-21 05:10:16.000 +"Super Mario RPG",0100BC0018138000,gpu;audio;status-ingame;nvdec,ingame,2024-06-19 17:43:42.000 +"Super Mario World",0000000000000000,status-boots;homebrew,boots,2024-06-13 01:40:31.000 +"Super Meat Boy",,services;status-playable,playable,2020-04-02 23:10:07.000 +"Super Meat Boy Forever",01009C200D60E000,gpu;status-boots,boots,2021-04-26 14:25:39.000 +"Super Mega Space Blaster Special Turbo",,online;status-playable,playable,2020-08-06 12:13:25.000 +"Super Monkey Ball Banana Rumble",010031F019294000,status-playable,playable,2024-06-28 10:39:18.000 +"Super Monkey Ball: Banana Blitz HD",0100B2A00E1E0000,status-playable;online-broken,playable,2022-09-16 13:16:25.000 +"Super Mutant Alien Assault",,status-playable,playable,2020-06-07 23:32:45.000 +"Super Neptunia RPG",01004D600AC14000,status-playable;nvdec,playable,2022-08-17 16:38:52.000 +"Super Nintendo Entertainment System - Nintendo Switch Online",,status-playable,playable,2021-01-05 00:29:48.000 +"Super One More Jump",0100284007D6C000,status-playable,playable,2022-08-17 16:47:47.000 +"Super Punch Patrol",01001F90122B2000,status-playable,playable,2024-07-12 19:49:02.000 +"Super Putty Squad",0100331005E8E000,gpu;status-ingame;32-bit,ingame,2024-04-29 15:51:54.000 +"SUPER ROBOT WARS T",,online;status-playable,playable,2021-03-25 11:00:40.000 +"SUPER ROBOT WARS V",,online;status-playable,playable,2020-06-23 12:56:37.000 +"SUPER ROBOT WARS X",,online;status-playable,playable,2020-08-05 19:18:51.000 +"Super Saurio Fly",,nvdec;status-playable,playable,2020-08-06 13:12:14.000 +"Super Skelemania",,status-playable,playable,2020-06-07 22:59:50.000 +"Super Smash Bros. Ultimate",01006A800016E000,gpu;status-ingame;crash;nvdec;ldn-works;intel-vendor-bug,ingame,2024-09-14 23:05:21.000 +"Super Soccer Blast",0100D61012270000,gpu;status-ingame,ingame,2022-02-16 08:39:12.000 +"Super Sportmatchen",0100A9300A4AE000,status-playable,playable,2022-08-19 12:34:40.000 +"Super Street: Racer",0100FB400F54E000,status-playable;UE4,playable,2022-09-16 13:43:14.000 +"Super Tennis Blast - 01000500DB50000",,status-playable,playable,2022-08-19 16:20:48.000 +"Super Toy Cars 2",0100C6800D770000,gpu;regression;status-ingame,ingame,2021-03-02 20:15:15.000 +"Super Volley Blast",010035B00B3F0000,status-playable,playable,2022-08-19 18:14:40.000 +"Superbeat: Xonic EX",0100FF60051E2000,status-ingame;crash;nvdec,ingame,2022-08-19 18:54:40.000 +"SuperEpic: The Entertainment War",0100630010252000,status-playable,playable,2022-10-13 23:02:48.000 +"Superhot",01001A500E8B4000,status-playable,playable,2021-05-05 19:51:30.000 +"Superliminal",,status-playable,playable,2020-09-03 13:20:50.000 +"Supermarket Shriek",0100C01012654000,status-playable,playable,2022-10-13 23:19:20.000 +"Supraland",0100A6E01201C000,status-playable;nvdec;UE4;opengl-backend-bug,playable,2022-10-14 09:49:11.000 +"Survive! Mr. Cube",010029A00AEB0000,status-playable,playable,2022-10-20 14:44:47.000 +"SUSHI REVERSI",01005AB01119C000,status-playable,playable,2021-06-11 19:26:58.000 +"Sushi Striker: The Way of Sushido",,nvdec;status-playable,playable,2020-06-26 20:49:11.000 +"Sweet Witches",0100D6D00EC2C000,status-playable;nvdec,playable,2022-10-20 14:56:37.000 +"Swimsanity!",010049D00C8B0000,status-menus;online,menus,2021-11-26 14:27:16.000 +"SWORD ART ONLINE: FATAL BULLET COMPLETE EDITION",01005DF00DC26000,UE4;gpu;online;status-ingame,ingame,2021-06-09 16:58:50.000 +"SWORD ART ONLINE: Hollow Realization Deluxe Edition",01001B600D1D6000,status-playable;nvdec,playable,2022-08-19 19:19:15.000 +"Sword of the Guardian",,status-playable,playable,2020-07-16 12:24:39.000 +"Sword of the Necromancer",0100E4701355C000,status-ingame;crash,ingame,2022-12-10 01:28:39.000 +"Syberia 1 & 2",01004BB00421E000,status-playable,playable,2021-12-24 12:06:25.000 +"Syberia 2",010028C003FD6000,gpu;status-ingame,ingame,2022-08-24 12:43:03.000 +"Syberia 3",0100CBE004E6C000,nvdec;status-playable,playable,2021-01-25 16:15:12.000 +"Sydney Hunter and the Curse of the Mayan",,status-playable,playable,2020-06-15 12:15:57.000 +"SYNAPTIC DRIVE",,online;status-playable,playable,2020-09-07 13:44:05.000 +"Synergia",01009E700F448000,status-playable,playable,2021-04-06 17:58:04.000 +"SYNTHETIK: Ultimate",01009BF00E7D2000,gpu;status-ingame;crash,ingame,2022-08-30 03:19:25.000 +"Table Top Racing World Tour Nitro Edition",,status-playable,playable,2020-04-05 23:21:30.000 +"Tactical Mind",01000F20083A8000,status-playable,playable,2021-01-25 18:05:00.000 +"Tactical Mind 2",,status-playable,playable,2020-07-01 23:11:07.000 +"Tactics Ogre Reborn",0100E12013C1A000,status-playable;vulkan-backend-bug,playable,2024-04-09 06:21:35.000 +"Tactics V: ""Obsidian Brigade",01007C7006AEE000,status-playable,playable,2021-02-28 15:09:42.000 +"Taiko no Tatsujin Rhythmic Adventure Pack",,status-playable,playable,2020-12-03 07:28:26.000 +"Taiko no Tatsujin: Drum 'n' Fun!",01002C000B552000,status-playable;online-broken;ldn-broken,playable,2023-05-20 15:10:12.000 +"Taiko no Tatsujin: Rhythm Festival",0100BCA0135A0000,status-playable,playable,2023-11-13 13:16:34.000 +"Taiko Risshiden V DX",0100346017304000,status-nothing;crash,nothing,2022-06-06 16:25:31.000 +"Taimumari: Complete Edition",010040A00EA26000,status-playable,playable,2022-12-06 13:34:49.000 +"Tales from the Borderlands",0100F0C011A68000,status-playable;nvdec,playable,2022-10-25 18:44:14.000 +"Tales of the Tiny Planet",0100408007078000,status-playable,playable,2021-01-25 15:47:41.000 +"Tales of Vesperia: Definitive Edition",01002C0008E52000,status-playable,playable,2024-09-28 03:20:47.000 +"Tamashii",010012800EE3E000,status-playable,playable,2021-06-10 15:26:20.000 +"Tamiku",010008A0128C4000,gpu;status-ingame,ingame,2021-06-15 20:06:55.000 +"Tangledeep",,crash;status-boots,boots,2021-01-05 04:08:41.000 +"TaniNani",01007DB010D2C000,crash;kernel;status-nothing,nothing,2021-04-08 03:06:44.000 +"Tank Mechanic Simulator",,status-playable,playable,2020-12-11 15:10:45.000 +"Tanuki Justice",01007A601318C000,status-playable;opengl,playable,2023-02-21 18:28:10.000 +"Tanzia",01004DF007564000,status-playable,playable,2021-06-07 11:10:25.000 +"Task Force Kampas",,status-playable,playable,2020-11-30 14:44:15.000 +"Taxi Chaos",0100B76011DAA000,slow;status-playable;online-broken;UE4,playable,2022-10-25 19:13:00.000 +"Tcheco in the Castle of Lucio",,status-playable,playable,2020-06-27 13:35:43.000 +"Team Sonic Racing",010092B0091D0000,status-playable;online-broken;ldn-works,playable,2024-02-05 15:05:27.000 +"Teenage Mutant Ninja Turtles: Shredder's Revenge",0100FE701475A000,deadlock;status-boots;crash,boots,2024-09-28 09:31:39.000 +"Teenage Mutant Ninja Turtles: Splintered Fate",01005CF01E784000,status-playable,playable,2024-08-03 13:50:42.000 +"Teenage Mutant Ninja Turtles: The Cowabunga Collection",0100FDB0154E4000,status-playable,playable,2024-01-22 19:39:04.000 +"Telling Lies",,status-playable,playable,2020-10-23 21:14:51.000 +"Temtem",0100C8B012DEA000,status-menus;online-broken,menus,2022-12-17 17:36:11.000 +"TENGAI for Nintendo Switch",,32-bit;status-playable,playable,2020-11-25 19:52:26.000 +"Tennis",,status-playable,playable,2020-06-01 20:50:36.000 +"Tennis in the Face",01002970080AA000,status-playable,playable,2022-08-22 14:10:54.000 +"Tennis World Tour",0100092006814000,status-playable;online-broken,playable,2022-08-22 14:27:10.000 +"Tennis World Tour 2",0100950012F66000,status-playable;online-broken,playable,2022-10-14 10:43:16.000 +"Terraria",0100E46006708000,status-playable;online-broken,playable,2022-09-12 16:14:57.000 +"TERROR SQUID",010070C00FB56000,status-playable;online-broken,playable,2023-10-30 22:29:29.000 +"TERRORHYTHM (TRRT)",010043700EB68000,status-playable,playable,2021-02-27 13:18:14.000 +"Tesla vs Lovecraft",0100FBC007EAE000,status-playable,playable,2023-11-21 06:19:36.000 +"Teslagrad",01005C8005F34000,status-playable,playable,2021-02-23 14:41:02.000 +"Tested on Humans: Escape Room",01006F701507A000,status-playable,playable,2022-11-12 14:42:52.000 +"Testra's Escape",,status-playable,playable,2020-06-03 18:21:14.000 +"TETRA for Nintendo Switch",,status-playable,playable,2020-06-26 20:49:55.000 +"TETRIS 99",010040600C5CE000,gpu;status-ingame;online-broken;ldn-untested,ingame,2024-05-02 16:36:41.000 +"Tetsumo Party",,status-playable,playable,2020-06-09 22:39:55.000 +"The Adventure Pals",01008ED0087A4000,status-playable,playable,2022-08-22 14:48:52.000 +"The Adventures of 00 Dilly",,status-playable,playable,2020-12-30 19:32:29.000 +"The Adventures of Elena Temple",,status-playable,playable,2020-06-03 23:15:35.000 +"The Alliance Alive HD Remastered",010045A00E038000,nvdec;status-playable,playable,2021-03-07 15:43:45.000 +"The Almost Gone",,status-playable,playable,2020-07-05 12:33:07.000 +"The Bard's Tale ARPG: Remastered and Resnarkled",0100CD500DDAE000,gpu;status-ingame;nvdec;online-working,ingame,2024-07-18 12:52:01.000 +"The Battle Cats Unite!",01001E50141BC000,deadlock;status-ingame,ingame,2021-12-14 21:38:34.000 +"The Big Journey",010089600E66A000,status-playable,playable,2022-09-16 14:03:08.000 +"The Binding of Isaac: Afterbirth+",010021C000B6A000,status-playable,playable,2021-04-26 14:11:56.000 +"The Bluecoats: North & South",,nvdec;status-playable,playable,2020-12-10 21:22:29.000 +"The Book of Unwritten Tales 2",010062500BFC0000,status-playable,playable,2021-06-09 14:42:53.000 +"The Bridge",,status-playable,playable,2020-06-03 13:53:26.000 +"The Bug Butcher",,status-playable,playable,2020-06-03 12:02:04.000 +"The Bunker",01001B40086E2000,status-playable;nvdec,playable,2022-09-16 14:24:05.000 +"The Caligula Effect: Overdose",,UE4;gpu;status-ingame,ingame,2021-01-04 11:07:50.000 +"The Childs Sight",010066800E9F8000,status-playable,playable,2021-06-11 19:04:56.000 +"The Coma 2: Vicious Sisters",,gpu;status-ingame,ingame,2020-06-20 12:51:51.000 +"The Coma: Recut",,status-playable,playable,2020-06-03 15:11:23.000 +"The Complex",01004170113D4000,status-playable;nvdec,playable,2022-09-28 14:35:41.000 +"The Copper Canyon Dixie Dash",01000F20102AC000,status-playable;UE4,playable,2022-09-29 11:42:29.000 +"The Count Lucanor",01000850037C0000,status-playable;nvdec,playable,2022-08-22 15:26:37.000 +"The Cruel King and the Great Hero",0100EBA01548E000,gpu;services;status-ingame,ingame,2022-12-02 07:02:08.000 +"The Dark Crystal",,status-playable,playable,2020-08-11 13:43:41.000 +"The Darkside Detective",,status-playable,playable,2020-06-03 22:16:18.000 +"The Elder Scrolls V: Skyrim",01000A10041EA000,gpu;status-ingame;crash,ingame,2024-07-14 03:21:31.000 +"The End is Nigh",,status-playable,playable,2020-06-01 11:26:45.000 +"The Escapists 2",,nvdec;status-playable,playable,2020-09-24 12:31:31.000 +"The Escapists: Complete Edition",01001B700BA7C000,status-playable,playable,2021-02-24 17:50:31.000 +"The Executioner",0100C2E0129A6000,nvdec;status-playable,playable,2021-01-23 00:31:28.000 +"The Experiment: Escape Room",01006050114D4000,gpu;status-ingame,ingame,2022-09-30 13:20:35.000 +"The Eyes of Ara",0100B5900DFB2000,status-playable,playable,2022-09-16 14:44:06.000 +"The Fall",,gpu;status-ingame,ingame,2020-05-31 23:31:16.000 +"The Fall Part 2: Unbound",,status-playable,playable,2021-11-06 02:18:08.000 +"The Final Station",0100CDC00789E000,status-playable;nvdec,playable,2022-08-22 15:54:39.000 +"The First Tree",010098800A1E4000,status-playable,playable,2021-02-24 15:51:05.000 +"The Flame in the Flood: Complete Edition",0100C38004DCC000,gpu;status-ingame;nvdec;UE4,ingame,2022-08-22 16:23:49.000 +"The Forbidden Arts - 01007700D4AC000",,status-playable,playable,2021-01-26 16:26:24.000 +"The friends of Ringo Ishikawa",010030700CBBC000,status-playable,playable,2022-08-22 16:33:17.000 +"The Gardener and the Wild Vines",01006350148DA000,gpu;status-ingame,ingame,2024-04-29 16:32:10.000 +"The Gardens Between",0100B13007A6A000,status-playable,playable,2021-01-29 16:16:53.000 +"The Great Ace Attorney Chronicles",010036E00FB20000,status-playable,playable,2023-06-22 21:26:29.000 +"The Great Perhaps",,status-playable,playable,2020-09-02 15:57:04.000 +"THE GRISAIA TRILOGY",01003b300e4aa000,status-playable,playable,2021-01-31 15:53:59.000 +"The Hong Kong Massacre",,crash;status-ingame,ingame,2021-01-21 12:06:56.000 +"The House of Da Vinci",,status-playable,playable,2021-01-05 14:17:19.000 +"The House of Da Vinci 2",,status-playable,playable,2020-10-23 20:47:17.000 +"The Infectious Madness of Doctor Dekker",01008940086E0000,status-playable;nvdec,playable,2022-08-22 16:45:01.000 +"The Inner World",,nvdec;status-playable,playable,2020-06-03 21:22:29.000 +"The Inner World - The Last Wind Monk",,nvdec;status-playable,playable,2020-11-16 13:09:40.000 +"The Jackbox Party Pack",0100AE5003EE6000,status-playable;online-working,playable,2023-05-28 09:28:40.000 +"The Jackbox Party Pack 2",010015D003EE4000,status-playable;online-working,playable,2022-08-22 18:23:40.000 +"The Jackbox Party Pack 3",0100CC80013D6000,slow;status-playable;online-working,playable,2022-08-22 18:41:06.000 +"The Jackbox Party Pack 4",0100E1F003EE8000,status-playable;online-working,playable,2022-08-22 18:56:34.000 +"The Journey Down: Chapter One",010052C00B184000,nvdec;status-playable,playable,2021-02-24 13:32:41.000 +"The Journey Down: Chapter Three",01006BC00B188000,nvdec;status-playable,playable,2021-02-24 13:45:27.000 +"The Journey Down: Chapter Two",,nvdec;status-playable,playable,2021-02-24 13:32:13.000 +"The King's Bird",010020500BD98000,status-playable,playable,2022-08-22 19:07:46.000 +"The Knight & the Dragon",010031B00DB34000,gpu;status-ingame,ingame,2023-08-14 10:31:43.000 +"The Language of Love",,Needs Update;crash;status-nothing,nothing,2020-12-03 17:54:00.000 +"The Lara Croft Collection",010079C017F5E000,services-horizon;deadlock;status-nothing,nothing,2024-07-12 22:45:51.000 +"The Last Campfire",0100449011506000,status-playable,playable,2022-10-20 16:44:19.000 +"The Last Dead End",0100AAD011592000,gpu;status-ingame;UE4,ingame,2022-10-20 16:59:44.000 +"THE LAST REMNANT Remastered",0100AC800D022000,status-playable;nvdec;UE4,playable,2023-02-09 17:24:44.000 +"The Legend of Dark Witch",,status-playable,playable,2020-07-12 15:18:33.000 +"The Legend of Heroes: Trails from Zero",01001920156C2000,gpu;status-ingame;mac-bug,ingame,2024-09-14 21:41:41.000 +"The Legend of Heroes: Trails of Cold Steel III",,status-playable,playable,2020-12-16 10:59:18.000 +"The Legend of Heroes: Trails of Cold Steel III Demo",01009B101044C000,demo;nvdec;status-playable,playable,2021-04-23 01:07:32.000 +"The Legend of Heroes: Trails of Cold Steel IV",0100D3C010DE8000,nvdec;status-playable,playable,2021-04-23 14:01:05.000 +"THE LEGEND OF HEROES: ZERO NO KISEKI KAI [英雄傳說 零之軌跡:改]",01005E5013862000,status-nothing;crash,nothing,2021-09-30 14:41:07.000 +"The Legend of Zelda Echoes of Wisdom",01008CF01BAAC000,status-playable;nvdec;ASTC;intel-vendor-bug,playable,2024-10-01 14:11:01.000 +"The Legend of Zelda: Breath of the Wild",01007EF00011E000,gpu;status-ingame;amd-vendor-bug;mac-bug,ingame,2024-09-23 19:35:46.000 +"The Legend of Zelda: Breath of the Wild Demo",0100509005AF2000,status-ingame;demo,ingame,2022-12-24 05:02:58.000 +"The Legend of Zelda: Link's Awakening",01006BB00C6F0000,gpu;status-ingame;nvdec;mac-bug,ingame,2023-08-09 17:37:40.000 +"The Legend of Zelda: Skyward Sword HD",01002DA013484000,gpu;status-ingame,ingame,2024-06-14 16:48:29.000 +"The Legend of Zelda: Tears of the Kingdom",0100F2C0115B6000,gpu;status-ingame;amd-vendor-bug;intel-vendor-bug;mac-bug,ingame,2024-08-24 12:38:30.000 +"The LEGO Movie 2 - Videogame",0100A4400BE74000,status-playable,playable,2023-03-01 11:23:37.000 +"The LEGO NINJAGO Movie Video Game",01007FC00206E000,status-nothing;crash,nothing,2022-08-22 19:12:53.000 +"The Liar Princess and the Blind Prince",010064B00B95C000,audio;slow;status-playable,playable,2020-06-08 21:23:28.000 +"The Lion's Song",0100735004898000,status-playable,playable,2021-06-09 15:07:16.000 +"The Little Acre",0100A5000D590000,nvdec;status-playable,playable,2021-03-02 20:22:27.000 +"The Long Dark",01007A700A87C000,status-playable,playable,2021-02-21 14:19:52.000 +"The Long Reach",010052B003A38000,nvdec;status-playable,playable,2021-02-24 14:09:48.000 +"The Long Return",,slow;status-playable,playable,2020-12-10 21:05:10.000 +"The Longest Five Minutes",0100CE1004E72000,gpu;status-boots,boots,2023-02-19 18:33:11.000 +"The Longing",0100F3D0122C2000,gpu;status-ingame,ingame,2022-11-12 15:00:58.000 +"The Lord of the Rings: Adventure Card Game",010085A00C5E8000,status-menus;online-broken,menus,2022-09-16 15:19:32.000 +"The Lost Child",01008A000A404000,nvdec;status-playable,playable,2021-02-23 15:44:20.000 +"The Low Road",0100BAB00A116000,status-playable,playable,2021-02-26 13:23:22.000 +"The Mahjong",,Needs Update;crash;services;status-nothing,nothing,2021-04-01 22:06:22.000 +"The Messenger",,status-playable,playable,2020-03-22 13:51:37.000 +"The Midnight Sanctuary",0100DEC00B2BC000,status-playable;nvdec;UE4;vulkan-backend-bug,playable,2022-10-03 17:17:32.000 +"The MISSING: J.J. Macfield and the Island of Memories",0100F1B00B456000,status-playable,playable,2022-08-22 19:36:18.000 +"The Mooseman",010033300AC1A000,status-playable,playable,2021-02-24 12:58:57.000 +"The movie The Quintessential Bride -Five Memories Spent with You-",01005E9016BDE000,status-playable,playable,2023-12-14 14:43:43.000 +"The Mummy Demastered",0100496004194000,status-playable,playable,2021-02-23 13:11:27.000 +"The Mystery of the Hudson Case",,status-playable,playable,2020-06-01 11:03:36.000 +"The Next Penelope",01000CF0084BC000,status-playable,playable,2021-01-29 16:26:11.000 +"THE NINJA SAVIORS Return of the Warriors",01001FB00E386000,online;status-playable,playable,2021-03-25 23:48:07.000 +"The Oregon Trail",0100B080184BC000,gpu;status-ingame,ingame,2022-11-25 16:11:49.000 +"The Otterman Empire",0100B0101265C000,UE4;gpu;status-ingame,ingame,2021-06-17 12:27:15.000 +"The Outbound Ghost",01000BC01801A000,status-nothing,nothing,2024-03-02 17:10:58.000 +"The Outer Worlds",0100626011656000,gpu;status-ingame;nvdec;UE4;vulkan-backend-bug;opengl-backend-bug,ingame,2022-10-03 17:55:32.000 +"The Park",,UE4;crash;gpu;status-ingame,ingame,2020-12-18 12:50:07.000 +"The Persistence",010050101127C000,nvdec;status-playable,playable,2021-06-06 19:15:40.000 +"The Pinball Arcade",0100CD300880E000,status-playable;online-broken,playable,2022-08-22 19:49:46.000 +"The Plucky Squire",01006BD018B54000,status-ingame;crash,ingame,2024-09-27 22:32:33.000 +"The Princess Guide",0100E6A00B960000,status-playable,playable,2021-02-24 14:23:34.000 +"The Raven Remastered",010058A00BF1C000,status-playable;nvdec,playable,2022-08-22 20:02:47.000 +"The Red Strings Club",,status-playable,playable,2020-06-01 10:51:18.000 +"The Room",010079400BEE0000,status-playable,playable,2021-04-14 18:57:05.000 +"The Ryuo's Work is Never Done!",010033100EE12000,status-playable,playable,2022-03-29 00:35:37.000 +"The Savior's Gang",01002BA00C7CE000,gpu;status-ingame;nvdec;UE4,ingame,2022-09-21 12:37:48.000 +"The Settlers: New Allies",0100F3200E7CA000,deadlock;status-nothing,nothing,2023-10-25 00:18:05.000 +"The Sexy Brutale",,status-playable,playable,2021-01-06 17:48:28.000 +"The Shapeshifting Detective",,nvdec;status-playable,playable,2021-01-10 13:10:49.000 +"The Sinking City",010028D00BA1A000,status-playable;nvdec;UE4,playable,2022-09-12 16:41:55.000 +"The Spectrum Retreat",010041C00A68C000,status-playable,playable,2022-10-03 18:52:40.000 +"The Stanley Parable: Ultra Deluxe",010029300E5C4000,gpu;status-ingame,ingame,2024-07-12 23:18:26.000 +"The Station",010007F00AF56000,status-playable,playable,2022-09-28 18:15:27.000 +"the StoryTale",0100858010DC4000,status-playable,playable,2022-09-03 13:00:25.000 +"The Stretchers",0100AA400A238000,status-playable;nvdec;UE4,playable,2022-09-16 15:40:58.000 +"The Survivalists",,status-playable,playable,2020-10-27 15:51:13.000 +"The Swindle",010040D00B7CE000,status-playable;nvdec,playable,2022-08-22 20:53:52.000 +"The Swords of Ditto",,slow;status-ingame,ingame,2020-12-06 00:13:12.000 +"The Tiny Bang Story",01009B300D76A000,status-playable,playable,2021-03-05 15:39:05.000 +"The Touryst",0100C3300D8C4000,status-ingame;crash,ingame,2023-08-22 01:32:38.000 +"The Tower of Beatrice",010047300EBA6000,status-playable,playable,2022-09-12 16:51:42.000 +"The Town of Light",010058000A576000,gpu;status-playable,playable,2022-09-21 12:51:34.000 +"The Trail: Frontier Challenge",0100B0E0086F6000,slow;status-playable,playable,2022-08-23 15:10:51.000 +"The Turing Test",0100EA100F516000,status-playable;nvdec,playable,2022-09-21 13:24:07.000 +"The Unicorn Princess",010064E00ECBC000,status-playable,playable,2022-09-16 16:20:56.000 +"The Vanishing of Ethan Carter",0100BCF00E970000,UE4;status-playable,playable,2021-06-09 17:14:47.000 +"The VideoKid",,nvdec;status-playable,playable,2021-01-06 09:28:24.000 +"The Voice",,services;status-menus,menus,2020-07-28 20:48:49.000 +"The Walking Dead",010029200B6AA000,status-playable,playable,2021-06-04 13:10:56.000 +"The Walking Dead: A New Frontier",010056E00B4F4000,status-playable,playable,2022-09-21 13:40:48.000 +"The Walking Dead: Season Two",,status-playable,playable,2020-08-09 12:57:06.000 +"The Walking Dead: The Final Season",010060F00AA70000,status-playable;online-broken,playable,2022-08-23 17:22:32.000 +"The Wanderer: Frankenstein's Creature",,status-playable,playable,2020-07-11 12:49:51.000 +"The Wardrobe: Even Better Edition",01008B200FC6C000,status-playable,playable,2022-09-16 19:14:55.000 +"The Witcher 3: Wild Hunt",01003D100E9C6000,status-playable;nvdec;vulkan-backend-bug;amd-vendor-bug,playable,2024-02-22 12:21:51.000 +"The Wonderful 101: Remastered",0100B1300FF08000,slow;status-playable;nvdec,playable,2022-09-30 13:49:28.000 +"The World Ends With You -Final Remix-",0100C1500B82E000,status-playable;ldn-untested,playable,2022-07-09 01:11:21.000 +"The World Next Door",0100E6200D56E000,status-playable,playable,2022-09-21 14:15:23.000 +"Thea: The Awakening",,status-playable,playable,2021-01-18 15:08:47.000 +"THEATRHYTHM FINAL BAR LINE",010024201834A000,status-playable,playable,2023-02-19 19:58:57.000 +"THEATRHYTHM FINAL BAR LINE",010081B01777C000,status-ingame;Incomplete,ingame,2024-08-05 14:24:55.000 +"They Bleed Pixels",01001C2010D08000,gpu;status-ingame,ingame,2024-08-09 05:52:18.000 +"They Came From the Sky",,status-playable,playable,2020-06-12 16:38:19.000 +"Thief of Thieves",0100CE700F62A000,status-nothing;crash;loader-allocator,nothing,2021-11-03 07:16:30.000 +"Thief Simulator",0100CE400E34E000,status-playable,playable,2023-04-22 04:39:11.000 +"Thimbleweed Park",01009BD003B36000,status-playable,playable,2022-08-24 11:15:31.000 +"Think of the Children",0100F2300A5DA000,deadlock;status-menus,menus,2021-11-23 09:04:45.000 +"This Is the Police",0100066004D68000,status-playable,playable,2022-08-24 11:37:05.000 +"This Is the Police 2",01004C100A04C000,status-playable,playable,2022-08-24 11:49:17.000 +"This Strange Realm of Mine",,status-playable,playable,2020-08-28 12:07:24.000 +"This War of Mine: Complete Edition",0100A8700BC2A000,gpu;status-ingame;32-bit;nvdec,ingame,2022-08-24 12:00:44.000 +"THOTH",,status-playable,playable,2020-08-05 18:35:28.000 +"Thronebreaker: The Witcher Tales",0100E910103B4000,nvdec;status-playable,playable,2021-06-03 16:40:15.000 +"Thumper",01006F6002840000,gpu;status-ingame,ingame,2024-08-12 02:41:07.000 +"Thy Sword",01000AC011588000,status-ingame;crash,ingame,2022-09-30 16:43:14.000 +"Tick Tock: A Tale for Two",,status-menus,menus,2020-07-14 14:49:38.000 +"Tied Together",0100B6D00C2DE000,nvdec;status-playable,playable,2021-04-10 14:03:46.000 +"Timber Tennis Versus",,online;status-playable,playable,2020-10-03 17:07:15.000 +"Time Carnage",01004C500B698000,status-playable,playable,2021-06-16 17:57:28.000 +"Time Recoil",0100F770045CA000,status-playable,playable,2022-08-24 12:44:03.000 +"Timespinner",0100DD300CF3A000,gpu;status-ingame,ingame,2022-08-09 09:39:11.000 +"Timothy and the Mysterious Forest",0100393013A10000,gpu;slow;status-ingame,ingame,2021-06-02 00:42:11.000 +"Tin & Kuna",,status-playable,playable,2020-11-17 12:16:12.000 +"Tiny Gladiators",,status-playable,playable,2020-12-14 00:09:43.000 +"Tiny Hands Adventure",010061A00AE64000,status-playable,playable,2022-08-24 16:07:48.000 +"TINY METAL",010074800741A000,UE4;gpu;nvdec;status-ingame,ingame,2021-03-05 17:11:57.000 +"Tiny Racer",01005D0011A40000,status-playable,playable,2022-10-07 11:13:03.000 +"Tiny Thor",010002401AE94000,gpu;status-ingame,ingame,2024-07-26 08:37:35.000 +"Tinykin",0100A73016576000,gpu;status-ingame,ingame,2023-06-18 12:12:24.000 +"Titan Glory",0100FE801185E000,status-boots,boots,2022-10-07 11:36:40.000 +"Titan Quest",0100605008268000,status-playable;nvdec;online-broken,playable,2022-08-19 21:54:15.000 +"Titans Pinball",,slow;status-playable,playable,2020-06-09 16:53:52.000 +"Tlicolity Eyes - twinkle showtime -",010019500DB1E000,gpu;status-boots,boots,2021-05-29 19:43:44.000 +"To the Moon",,status-playable,playable,2021-03-20 15:33:38.000 +"Toast Time: Smash Up!",,crash;services;status-menus,menus,2020-04-03 12:26:59.000 +"Toby: The Secret Mine",,nvdec;status-playable,playable,2021-01-06 09:22:33.000 +"ToeJam & Earl: Back in the Groove",,status-playable,playable,2021-01-06 22:56:58.000 +"TOHU",0100B5E011920000,slow;status-playable,playable,2021-02-08 15:40:44.000 +"Toki",,nvdec;status-playable,playable,2021-01-06 19:59:23.000 +"TOKYO DARK - REMEMBRANCE -",01003E500F962000,nvdec;status-playable,playable,2021-06-10 20:09:49.000 +"Tokyo Mirage Sessions #FE Encore",0100A9400C9C2000,32-bit;status-playable;nvdec,playable,2022-07-07 09:41:07.000 +"Tokyo School Life",0100E2E00CB14000,status-playable,playable,2022-09-16 20:25:54.000 +"Tomb Raider I-III Remastered",010024601BB16000,gpu;status-ingame;opengl,ingame,2024-09-27 12:32:04.000 +"Tomba! Special Edition",0100D7F01E49C000,services-horizon;status-nothing,nothing,2024-09-15 21:59:54.000 +"Tonight we Riot",0100D400100F8000,status-playable,playable,2021-02-26 15:55:09.000 +"TONY HAWK'S™ PRO SKATER™ 1 + 2",0100CC00102B4000,gpu;status-ingame;Needs Update,ingame,2024-09-24 08:18:14.000 +"Tools Up!",,crash;status-ingame,ingame,2020-07-21 12:58:17.000 +"Toon War",01009EA00E2B8000,status-playable,playable,2021-06-11 16:41:53.000 +"Torchlight 2",,status-playable,playable,2020-07-27 14:18:37.000 +"Torchlight III",010075400DDB8000,status-playable;nvdec;online-broken;UE4,playable,2022-10-14 22:20:17.000 +"TORICKY-S",01007AF011732000,deadlock;status-menus,menus,2021-11-25 08:53:36.000 +"Torn Tales - Rebound Edition",,status-playable,playable,2020-11-01 14:11:59.000 +"Total Arcade Racing",0100A64010D48000,status-playable,playable,2022-11-12 15:12:48.000 +"Totally Reliable Delivery Service",0100512010728000,status-playable;online-broken,playable,2024-09-27 19:32:22.000 +"Touhou Genso Wanderer RELOADED",01004E900B082000,gpu;status-ingame;nvdec,ingame,2022-08-25 11:57:36.000 +"Touhou Kobuto V: Burst Battle",,status-playable,playable,2021-01-11 15:28:58.000 +"Touhou Spell Bubble",,status-playable,playable,2020-10-18 11:43:43.000 +"Tower of Babel",,status-playable,playable,2021-01-06 17:05:15.000 +"Tower of Time",,gpu;nvdec;status-ingame,ingame,2020-07-03 11:11:12.000 +"TowerFall",,status-playable,playable,2020-05-16 18:58:07.000 +"Towertale",,status-playable,playable,2020-10-15 13:56:58.000 +"Townsmen - A Kingdom Rebuilt",010049E00BA34000,status-playable;nvdec,playable,2022-10-14 22:48:59.000 +"Toy Stunt Bike: Tiptop's Trials",01009FF00A160000,UE4;status-playable,playable,2021-04-10 13:56:34.000 +"Tracks - Toybox Edition",0100192010F5A000,UE4;crash;status-nothing,nothing,2021-02-08 15:19:18.000 +"Trailblazers",0100BCA00843A000,status-playable,playable,2021-03-02 20:40:49.000 +"Transcripted",010009F004E66000,status-playable,playable,2022-08-25 12:13:11.000 +"TRANSFORMERS: BATTLEGROUNDS",01005E500E528000,online;status-playable,playable,2021-06-17 18:08:19.000 +"Transistor",,status-playable,playable,2020-10-22 11:28:02.000 +"Travel Mosaics 2: Roman Holiday",0100A8D010BFA000,status-playable,playable,2021-05-26 12:33:16.000 +"Travel Mosaics 3: Tokyo Animated",0100102010BFC000,status-playable,playable,2021-05-26 12:06:27.000 +"Travel Mosaics 4: Adventures in Rio",010096D010BFE000,status-playable,playable,2021-05-26 11:54:58.000 +"Travel Mosaics 5: Waltzing Vienna",01004C4010C00000,status-playable,playable,2021-05-26 11:49:35.000 +"Travel Mosaics 6: Christmas Around the World",0100D520119D6000,status-playable,playable,2021-05-26 00:52:47.000 +"Travel Mosaics 7: Fantastic Berlin -",,status-playable,playable,2021-05-22 18:37:34.000 +"Travel Mosaics: A Paris Tour",01007DB00A226000,status-playable,playable,2021-05-26 12:42:26.000 +"Travis Strikes Again: No More Heroes",010011600C946000,status-playable;nvdec;UE4,playable,2022-08-25 12:36:38.000 +"Treadnauts",,status-playable,playable,2021-01-10 14:57:41.000 +"Trials of Mana",0100D7800E9E0000,status-playable;UE4,playable,2022-09-30 21:50:37.000 +"Trials of Mana Demo",0100E1D00FBDE000,status-playable;nvdec;UE4;demo;vulkan-backend-bug,playable,2022-09-26 18:00:02.000 +"Trials Rising",01003E800A102000,status-playable,playable,2024-02-11 01:36:39.000 +"TRIANGLE STRATEGY",0100CC80140F8000,gpu;status-ingame;Needs Update;UE4;vulkan-backend-bug,ingame,2024-09-25 20:48:37.000 +"Trine",0100D9000A930000,ldn-untested;nvdec;status-playable,playable,2021-06-03 11:28:15.000 +"Trine 2",010064E00A932000,nvdec;status-playable,playable,2021-06-03 11:45:20.000 +"Trine 3: The Artifacts of Power",0100DEC00A934000,ldn-untested;online;status-playable,playable,2021-06-03 12:01:24.000 +"Trine 4: The Nightmare Prince",010055E00CA68000,gpu;status-nothing,nothing,2025-01-07 05:47:46.000 +"Trinity Trigger",01002D7010A54000,status-ingame;crash,ingame,2023-03-03 03:09:09.000 +"Trivial Pursuit Live! 2",0100868013FFC000,status-boots,boots,2022-12-19 00:04:33.000 +"Troll and I",0100F78002040000,gpu;nvdec;status-ingame,ingame,2021-06-04 16:58:50.000 +"Trollhunters: Defenders of Arcadia",,gpu;nvdec;status-ingame,ingame,2020-11-30 13:27:09.000 +"Tropico 6",0100FBE0113CC000,status-playable;nvdec;UE4,playable,2022-10-14 23:21:03.000 +"Trouble Witches Final! Episode 01: Daughters of Amalgam",0100D06018DCA000,status-playable,playable,2024-04-08 15:08:11.000 +"Troubleshooter",,UE4;crash;status-nothing,nothing,2020-10-04 13:46:50.000 +"Trover Saves the Universe",,UE4;crash;status-nothing,nothing,2020-10-03 10:25:27.000 +"Truberbrook",0100E6300D448000,status-playable,playable,2021-06-04 17:08:00.000 +"Truck & Logistics Simulator",0100F2100AA5C000,status-playable,playable,2021-06-11 13:29:08.000 +"Truck Driver",0100CB50107BA000,status-playable;online-broken,playable,2022-10-20 17:42:33.000 +"True Fear: Forsaken Souls - Part 1",,nvdec;status-playable,playable,2020-12-15 21:39:52.000 +"TT Isle of Man",,nvdec;status-playable,playable,2020-06-22 12:25:13.000 +"TT Isle of Man 2",010000400F582000,gpu;status-ingame;nvdec;online-broken,ingame,2022-09-30 22:13:05.000 +"TTV2",,status-playable,playable,2020-11-27 13:21:36.000 +"Tumblestone",,status-playable,playable,2021-01-07 17:49:20.000 +"Turok",010085500D5F6000,gpu;status-ingame,ingame,2021-06-04 13:16:24.000 +"Turok 2: Seeds of Evil",0100CDC00D8D6000,gpu;status-ingame;vulkan,ingame,2022-09-12 17:50:05.000 +"Turrican Flashback - 01004B0130C8000",,status-playable;audout,playable,2021-08-30 10:07:56.000 +"TurtlePop: Journey to Freedom",,status-playable,playable,2020-06-12 17:45:39.000 +"Twin Robots: Ultimate Edition",0100047009742000,status-playable;nvdec,playable,2022-08-25 14:24:03.000 +"Two Point Hospital",010031200E044000,status-ingame;crash;nvdec,ingame,2022-09-22 11:22:23.000 +"TY the Tasmanian Tiger",,32-bit;crash;nvdec;status-menus,menus,2020-12-17 21:15:00.000 +"Tyd wag vir Niemand",010073A00C4B2000,status-playable,playable,2021-03-02 13:39:53.000 +"Type:Rider",,status-playable,playable,2021-01-06 13:12:55.000 +"UBERMOSH:SANTICIDE",,status-playable,playable,2020-11-27 15:05:01.000 +"Ubongo - Deluxe Edition",,status-playable,playable,2021-02-04 21:15:01.000 +"UglyDolls: An Imperfect Adventure",010079000B56C000,status-playable;nvdec;UE4,playable,2022-08-25 14:42:16.000 +"Ultimate Fishing Simulator",010048901295C000,status-playable,playable,2021-06-16 18:38:23.000 +"Ultimate Racing 2D",,status-playable,playable,2020-08-05 17:27:09.000 +"Ultimate Runner",010045200A1C2000,status-playable,playable,2022-08-29 12:52:40.000 +"Ultimate Ski Jumping 2020",01006B601117E000,online;status-playable,playable,2021-03-02 20:54:11.000 +"Ultra Hat Dimension",01002D4012222000,services;audio;status-menus,menus,2021-11-18 09:05:20.000 +"Ultra Hyperball",,status-playable,playable,2021-01-06 10:09:55.000 +"Ultra Street Fighter II: The Final Challengers",01007330027EE000,status-playable;ldn-untested,playable,2021-11-25 07:54:58.000 +"Umineko no Naku Koro ni Saku - うみねこのなく頃に咲 ~猫箱と夢想の交響曲~",01006A300BA2C000,status-playable;audout,playable,2023-05-04 17:25:23.000 +"Unbox: Newbie's Adventure",0100592005164000,status-playable;UE4,playable,2022-08-29 13:12:56.000 +"Uncanny Valley",01002D900C5E4000,nvdec;status-playable,playable,2021-06-04 13:28:45.000 +"Undead and Beyond",010076F011F54000,status-playable;nvdec,playable,2022-10-04 09:11:18.000 +"Under Leaves",01008F3013E4E000,status-playable,playable,2021-05-22 18:13:58.000 +"Undertale",010080B00AD66000,status-playable,playable,2022-08-31 17:31:46.000 +"Unepic",01008F80049C6000,status-playable,playable,2024-01-15 17:03:00.000 +"UnExplored - Unlocked Edition",,status-playable,playable,2021-01-06 10:02:16.000 +"Unhatched",,status-playable,playable,2020-12-11 12:11:09.000 +"Unicorn Overlord",010069401ADB8000,status-playable,playable,2024-09-27 14:04:32.000 +"Unit 4",,status-playable,playable,2020-12-16 18:54:13.000 +"Unknown Fate",,slow;status-ingame,ingame,2020-10-15 12:27:42.000 +"Unlock the King",,status-playable,playable,2020-09-01 13:58:27.000 +"Unlock the King 2",0100A3E011CB0000,status-playable,playable,2021-06-15 20:43:55.000 +"UNO",01005AA00372A000,status-playable;nvdec;ldn-untested,playable,2022-07-28 14:49:47.000 +"Unravel TWO",0100E5D00CC0C000,status-playable;nvdec,playable,2024-05-23 15:45:05.000 +"Unruly Heroes",,status-playable,playable,2021-01-07 18:09:31.000 +"Unspottable",0100B410138C0000,status-playable,playable,2022-10-25 19:28:49.000 +"Untitled Goose Game",,status-playable,playable,2020-09-26 13:18:06.000 +"Unto The End",0100E49013190000,gpu;status-ingame,ingame,2022-10-21 11:13:29.000 +"Urban Flow",,services;status-playable,playable,2020-07-05 12:51:47.000 +"Urban Street Fighting",010054F014016000,status-playable,playable,2021-02-20 19:16:36.000 +"Urban Trial Playground",01001B10068EC000,UE4;nvdec;online;status-playable,playable,2021-03-25 20:56:51.000 +"Urban Trial Tricky",0100A2500EB92000,status-playable;nvdec;UE4,playable,2022-12-06 13:07:56.000 +"Use Your Words",01007C0003AEC000,status-menus;nvdec;online-broken,menus,2022-08-29 17:22:10.000 +"Uta no Prince-sama Amazing Aria & Sweet Serenade LOVE",0100D4300EBF8000,status-nothing;crash;Needs More Attention;Needs Update,nothing,2022-02-09 08:57:44.000 +"Uta no☆Prince-sama♪ Repeat Love",010024200E00A000,status-playable;nvdec,playable,2022-12-09 09:21:51.000 +"Utopia 9 - A Volatile Vacation",,nvdec;status-playable,playable,2020-12-16 17:06:42.000 +"V-Rally 4",010064400B138000,gpu;nvdec;status-ingame,ingame,2021-06-07 19:37:31.000 +"VA-11 HALL-A",0100A6700D66E000,status-playable,playable,2021-02-26 15:05:34.000 +"Vaccine",,nvdec;status-playable,playable,2021-01-06 01:02:07.000 +"Valfaris",010089700F30C000,status-playable,playable,2022-09-16 21:37:24.000 +"Valkyria Chronicles",0100CAF00B744000,status-ingame;32-bit;crash;nvdec,ingame,2022-11-23 20:03:32.000 +"Valkyria Chronicles 4",01005C600AC68000,audout;nvdec;status-playable,playable,2021-06-03 18:12:25.000 +"Valkyria Chronicles 4 Demo",0100FBD00B91E000,slow;status-ingame;demo,ingame,2022-08-29 20:39:07.000 +"Valley",0100E0E00B108000,status-playable;nvdec,playable,2022-09-28 19:27:58.000 +"Vampire Survivors",010089A0197E4000,status-ingame,ingame,2024-06-17 09:57:38.000 +"Vampyr",01000BD00CE64000,status-playable;nvdec;UE4,playable,2022-09-16 22:15:51.000 +"Vandals",01007C500D650000,status-playable,playable,2021-01-27 21:45:46.000 +"Vaporum",010030F00CA1E000,nvdec;status-playable,playable,2021-05-28 14:25:33.000 +"VARIABLE BARRICADE NS",010045C0109F2000,status-playable;nvdec,playable,2022-02-26 15:50:13.000 +"VASARA Collection",0100FE200AF48000,nvdec;status-playable,playable,2021-02-28 15:26:10.000 +"Vasilis",,status-playable,playable,2020-09-01 15:05:35.000 +"Vegas Party",01009CD003A0A000,status-playable,playable,2021-04-14 19:21:41.000 +"Vektor Wars",010098400E39E000,status-playable;online-broken;vulkan-backend-bug,playable,2022-10-04 09:23:46.000 +"Vengeful Guardian: Moonrider",01003A8018E60000,deadlock;status-boots,boots,2024-03-17 23:35:37.000 +"Venture Kid",010095B00DBC8000,crash;gpu;status-ingame,ingame,2021-04-18 16:33:17.000 +"Vera Blanc: Full Moon",,audio;status-playable,playable,2020-12-17 12:09:30.000 +"Very Very Valet",0100379013A62000,status-playable;nvdec,playable,2022-11-12 15:25:51.000 +"Very Very Valet Demo - 01006C8014DDA000",01006C8014DDA000,status-boots;crash;Needs Update;demo,boots,2022-11-12 15:26:13.000 +"Vesta",010057B00712C000,status-playable;nvdec,playable,2022-08-29 21:03:39.000 +"Victor Vran Overkill Edition",0100E81007A06000,gpu;deadlock;status-ingame;nvdec;opengl,ingame,2022-08-30 11:46:56.000 +"Violett",01005880063AA000,nvdec;status-playable,playable,2021-01-28 13:09:36.000 +"Viviette",010037900CB1C000,status-playable,playable,2021-06-11 15:33:40.000 +"Void Bastards",0100D010113A8000,status-playable,playable,2022-10-15 00:04:19.000 +"void* tRrLM(); //Void Terrarium",0100FF7010E7E000,gpu;status-ingame;Needs Update;regression,ingame,2023-02-10 01:13:25.000 +"void* tRrLM2(); //Void Terrarium 2",010078D0175EE000,status-playable,playable,2023-12-21 11:00:41.000 +"Volgarr the Viking",,status-playable,playable,2020-12-18 15:25:50.000 +"Volta-X",0100A7900E79C000,status-playable;online-broken,playable,2022-10-07 12:20:51.000 +"Vostok, Inc.",01004D8007368000,status-playable,playable,2021-01-27 17:43:59.000 +"Voxel Galaxy",0100B1E0100A4000,status-playable,playable,2022-09-28 22:45:02.000 +"Voxel Pirates",0100AFA011068000,status-playable,playable,2022-09-28 22:55:02.000 +"Voxel Sword",0100BFB00D1F4000,status-playable,playable,2022-08-30 14:57:27.000 +"Vroom in the Night Sky",01004E90028A2000,status-playable;Needs Update;vulkan-backend-bug,playable,2023-02-20 02:32:29.000 +"VSR: Void Space Racing",0100C7C00AE6C000,status-playable,playable,2021-01-27 14:08:59.000 +"VtM Coteries of New York",,status-playable,playable,2020-10-04 14:55:22.000 +"Waifu Uncovered",0100B130119D0000,status-ingame;crash,ingame,2023-02-27 01:17:46.000 +"Wanba Warriors",,status-playable,playable,2020-10-04 17:56:22.000 +"Wanderjahr TryAgainOrWalkAway",,status-playable,playable,2020-12-16 09:46:04.000 +"Wanderlust Travel Stories",0100B27010436000,status-playable,playable,2021-04-07 16:09:12.000 +"Wandersong",0100F8A00853C000,nvdec;status-playable,playable,2021-06-04 15:33:34.000 +"Wanna Survive",0100D67013910000,status-playable,playable,2022-11-12 21:15:43.000 +"War Of Stealth - assassin",01004FA01391A000,status-playable,playable,2021-05-22 17:34:38.000 +"War Tech Fighters",010049500DE56000,status-playable;nvdec,playable,2022-09-16 22:29:31.000 +"War Theatre",010084D00A134000,gpu;status-ingame,ingame,2021-06-07 19:42:45.000 +"War Truck Simulator",0100B6B013B8A000,status-playable,playable,2021-01-31 11:22:54.000 +"War-Torn Dreams",,crash;status-nothing,nothing,2020-10-21 11:36:16.000 +"WARBORN",,status-playable,playable,2020-06-25 12:36:47.000 +"Wardogs: Red's Return",010056901285A000,status-playable,playable,2022-11-13 15:29:01.000 +"WarGroove",01000F0002BB6000,status-playable;online-broken,playable,2022-08-31 10:30:45.000 +"Warhammer 40,000: Mechanicus",0100C6000EEA8000,nvdec;status-playable,playable,2021-06-13 10:46:38.000 +"Warhammer 40,000: Space Wolf",0100E5600D7B2000,status-playable;online-broken,playable,2022-09-20 21:11:20.000 +"Warhammer Age of Sigmar: Storm Ground",010031201307A000,status-playable;nvdec;online-broken;UE4,playable,2022-11-13 15:46:14.000 +"Warhammer Quest 2",,status-playable,playable,2020-08-04 15:28:03.000 +"WarioWare: Get It Together!",0100563010E0C000,gpu;status-ingame;opengl-backend-bug,ingame,2024-04-23 01:04:56.000 +"Warioware: Move IT!",010045B018EC2000,status-playable,playable,2023-11-14 00:23:51.000 +"Warlocks 2: God Slayers",,status-playable,playable,2020-12-16 17:36:50.000 +"Warp Shift",,nvdec;status-playable,playable,2020-12-15 14:48:48.000 +"Warparty",,nvdec;status-playable,playable,2021-01-27 18:26:32.000 +"WarriOrb",010032700EAC4000,UE4;status-playable,playable,2021-06-17 15:45:14.000 +"WARRIORS OROCHI 4 ULTIMATE",0100E8500AD58000,status-playable;nvdec;online-broken,playable,2024-08-07 01:50:37.000 +"Wartile Complete Edition",,UE4;crash;gpu;status-menus,menus,2020-12-11 21:56:10.000 +"Wasteland 2: Director's Cut",010039A00BC64000,nvdec;status-playable,playable,2021-01-27 13:34:11.000 +"Water Balloon Mania",,status-playable,playable,2020-10-23 20:20:59.000 +"Way of the Passive Fist",0100BA200C378000,gpu;status-ingame,ingame,2021-02-26 21:07:06.000 +"We should talk.",,crash;status-nothing,nothing,2020-08-03 12:32:36.000 +"Welcome to Hanwell",,UE4;crash;status-boots,boots,2020-08-03 11:54:57.000 +"Welcome to Primrose Lake",0100D7F010B94000,status-playable,playable,2022-10-21 11:30:57.000 +"Wenjia",,status-playable,playable,2020-06-08 11:38:30.000 +"West of Loathing",010031B00A4E8000,status-playable,playable,2021-01-28 12:35:19.000 +"What Remains of Edith Finch",010038900DFE0000,slow;status-playable;UE4,playable,2022-08-31 19:57:59.000 +"Wheel of Fortune [010033600ADE6000]",010033600ADE6000,status-boots;crash;Needs More Attention;nvdec,boots,2023-11-12 20:29:24.000 +"Wheels of Aurelia",0100DFC00405E000,status-playable,playable,2021-01-27 21:59:25.000 +"Where Angels Cry",010027D011C9C000,gpu;status-ingame;nvdec,ingame,2022-09-30 22:24:47.000 +"Where Are My Friends?",0100FDB0092B4000,status-playable,playable,2022-09-21 14:39:26.000 +"Where the Bees Make Honey",,status-playable,playable,2020-07-15 12:40:49.000 +"Whipsey and the Lost Atlas",,status-playable,playable,2020-06-23 20:24:14.000 +"Whispering Willows",010015A00AF1E000,status-playable;nvdec,playable,2022-09-30 22:33:05.000 +"Who Wants to Be a Millionaire?",,crash;status-nothing,nothing,2020-12-11 20:22:42.000 +"Widget Satchel",0100C7800CA06000,status-playable,playable,2022-09-16 22:41:07.000 +"WILD GUNS Reloaded",0100CFC00A1D8000,status-playable,playable,2021-01-28 12:29:05.000 +"Wilmot's Warehouse",010071F00D65A000,audio;gpu;status-ingame,ingame,2021-06-02 17:24:32.000 +"WINDJAMMERS",,online;status-playable,playable,2020-10-13 11:24:25.000 +"Windscape",010059900BA3C000,status-playable,playable,2022-10-21 11:49:42.000 +"Windstorm",,UE4;gpu;nvdec;status-ingame,ingame,2020-12-22 13:17:48.000 +"Windstorm - Ari's Arrival",0100D6800CEAC000,UE4;status-playable,playable,2021-06-07 19:33:19.000 +"Wing of Darkness - 010035B012F2000",,status-playable;UE4,playable,2022-11-13 16:03:51.000 +"Winter Games 2023",0100A4A015FF0000,deadlock;status-menus,menus,2023-11-07 20:47:36.000 +"Witch On The Holy Night",010012A017F18800,status-playable,playable,2023-03-06 23:28:11.000 +"Witch Spring 3 Re:Fine -The Story of the Marionette Witch Eirudy-",0100454012E32000,status-ingame;crash,ingame,2021-08-08 11:56:18.000 +"Witch Thief",01002FC00C6D0000,status-playable,playable,2021-01-27 18:16:07.000 +"Witch's Garden",010061501904E000,gpu;status-ingame;crash;vulkan-backend-bug;opengl-backend-bug,ingame,2023-01-11 02:11:24.000 +"Witcheye",,status-playable,playable,2020-12-14 22:56:08.000 +"Wizard of Legend",0100522007AAA000,status-playable,playable,2021-06-07 12:20:46.000 +"Wizards of Brandel",,status-nothing,nothing,2020-10-14 15:52:33.000 +"Wizards: Wand of Epicosity",0100C7600E77E000,status-playable,playable,2022-10-07 12:32:06.000 +"Wolfenstein II The New Colossus",01009040091E0000,gpu;status-ingame,ingame,2024-04-05 05:39:46.000 +"Wolfenstein: Youngblood",01003BD00CAAE000,status-boots;online-broken,boots,2024-07-12 23:49:20.000 +"Wonder Blade",,status-playable,playable,2020-12-11 17:55:31.000 +"Wonder Boy Anniversary Collection",0100B49016FF0000,deadlock;status-nothing,nothing,2023-04-20 16:01:48.000 +"Wonder Boy Asha in Monster World [ ワンダーボーイ アーシャ・イン・モンスターワールド ]",0100EB2012E36000,status-nothing;crash,nothing,2021-11-03 08:45:06.000 +"Wonder Boy: The Dragon's Trap",0100A6300150C000,status-playable,playable,2021-06-25 04:53:21.000 +"Wondershot",0100F5D00C812000,status-playable,playable,2022-08-31 21:05:31.000 +"Woodle Tree 2",,gpu;slow;status-ingame,ingame,2020-06-04 18:44:00.000 +"Woodsalt",0100288012966000,status-playable,playable,2021-04-06 17:01:48.000 +"Wordify",,status-playable,playable,2020-10-03 09:01:07.000 +"World Conqueror X",,status-playable,playable,2020-12-22 16:10:29.000 +"World Neverland",01008E9007064000,status-playable,playable,2021-01-28 17:44:23.000 +"World of Final Fantasy Maxima",,status-playable,playable,2020-06-07 13:57:23.000 +"World of Goo",010009E001D90000,gpu;status-boots;32-bit;crash;regression,boots,2024-04-12 05:52:14.000 +"World of Goo 2",010061F01DB7C800,status-boots,boots,2024-08-08 22:52:49.000 +"World Soccer Pinball",,status-playable,playable,2021-01-06 00:37:02.000 +"Worldend Syndrome",,status-playable,playable,2021-01-03 14:16:32.000 +"Worlds of Magic: Planar Conquest",010000301025A000,status-playable,playable,2021-06-12 12:51:28.000 +"Worm Jazz",01009CD012CC0000,gpu;services;status-ingame;UE4;regression,ingame,2021-11-10 10:33:04.000 +"Worms W.M.D",01001AE005166000,gpu;status-boots;crash;nvdec;ldn-untested,boots,2023-09-16 21:42:59.000 +"Worse Than Death",010037500C4DE000,status-playable,playable,2021-06-11 16:05:40.000 +"Woven",01006F100EB16000,nvdec;status-playable,playable,2021-06-02 13:41:08.000 +"WRC 8 FIA World Rally Championship",010087800DCEA000,status-playable;nvdec,playable,2022-09-16 23:03:36.000 +"WRC 9 The Official Game",01001A0011798000,gpu;slow;status-ingame;nvdec,ingame,2022-10-25 19:47:39.000 +"Wreckfest",0100DC0012E48000,status-playable,playable,2023-02-12 16:13:00.000 +"Wreckin' Ball Adventure",0100C5D00EDB8000,status-playable;UE4,playable,2022-09-12 18:56:28.000 +"Wulverblade",010033700418A000,nvdec;status-playable,playable,2021-01-27 22:29:05.000 +"Wunderling",01001C400482C000,audio;status-ingame;crash,ingame,2022-09-10 13:20:12.000 +"Wurroom",,status-playable,playable,2020-10-07 22:46:21.000 +"WWE 2K Battlegrounds",010081700EDF4000,status-playable;nvdec;online-broken;UE4,playable,2022-10-07 12:44:40.000 +"WWE 2K18",010009800203E000,status-playable;nvdec,playable,2023-10-21 17:22:01.000 +"X-Morph: Defense",,status-playable,playable,2020-06-22 11:05:31.000 +"XCOM 2 Collection",0100D0B00FB74000,gpu;status-ingame;crash,ingame,2022-10-04 09:38:30.000 +"XEL",0100CC9015360000,gpu;status-ingame,ingame,2022-10-03 10:19:39.000 +"Xenoblade Chronicles 2",0100E95004038000,deadlock;status-ingame;amd-vendor-bug,ingame,2024-03-28 14:31:41.000 +"Xenoblade Chronicles 2: Torna - The Golden Country",0100C9F009F7A000,slow;status-playable;nvdec,playable,2023-01-28 16:47:28.000 +"Xenoblade Chronicles 3",010074F013262000,gpu;status-ingame;crash;nvdec;vulkan-backend-bug;amd-vendor-bug,ingame,2024-08-06 19:56:44.000 +"Xenoblade Chronicles Definitive Edition",0100FF500E34A000,status-playable;nvdec,playable,2024-05-04 20:12:41.000 +"Xenon Racer",010028600BA16000,status-playable;nvdec;UE4,playable,2022-08-31 22:05:30.000 +"Xenon Valkyrie+",010064200C324000,status-playable,playable,2021-06-07 20:25:53.000 +"Xenoraid",0100928005BD2000,status-playable,playable,2022-09-03 13:01:10.000 +"Xeodrifter",01005B5009364000,status-playable,playable,2022-09-03 13:18:39.000 +"Yaga",01006FB00DB02000,status-playable;nvdec,playable,2022-09-16 23:17:17.000 +"YesterMorrow",,crash;status-ingame,ingame,2020-12-17 17:15:25.000 +"Yet Another Zombie Defense HD",,status-playable,playable,2021-01-06 00:18:39.000 +"YGGDRA UNION We’ll Never Fight Alone",,status-playable,playable,2020-04-03 02:20:47.000 +"YIIK: A Postmodern RPG",0100634008266000,status-playable,playable,2021-01-28 13:38:37.000 +"Yo kai watch 1 for Nintendo Switch",0100C0000CEEA000,gpu;status-ingame;opengl,ingame,2024-05-28 11:11:49.000 +"Yo-Kai Watch 4++",010086C00AF7C000,status-playable,playable,2024-06-18 20:21:44.000 +"Yoku's Island Express",010002D00632E000,status-playable;nvdec,playable,2022-09-03 13:59:02.000 +"Yomawari 3",0100F47016F26000,status-playable,playable,2022-05-10 08:26:51.000 +"Yomawari: The Long Night Collection",010012F00B6F2000,status-playable,playable,2022-09-03 14:36:59.000 +"Yonder: The Cloud Catcher Chronicles",0100CC600ABB2000,status-playable,playable,2021-01-28 14:06:25.000 +"Yono and the Celestial Elephants",0100BE50042F6000,status-playable,playable,2021-01-28 18:23:58.000 +"Yooka-Laylee",0100F110029C8000,status-playable,playable,2021-01-28 14:21:45.000 +"Yooka-Laylee and the Impossible Lair",010022F00DA66000,status-playable,playable,2021-03-05 17:32:21.000 +"Yoshi's Crafted World",01006000040C2000,gpu;status-ingame;audout,ingame,2021-08-30 13:25:51.000 +"Yoshi's Crafted World Demo Version",,gpu;status-boots;status-ingame,boots,2020-12-16 14:57:40.000 +"Yoshiwara Higanbana Kuon no Chigiri",,nvdec;status-playable,playable,2020-10-17 19:14:46.000 +"YouTube",01003A400C3DA800,status-playable,playable,2024-06-08 05:24:10.000 +"Youtubers Life00",00100A7700CCAA40,status-playable;nvdec,playable,2022-09-03 14:56:19.000 +"Ys IX: Monstrum Nox",0100E390124D8000,status-playable,playable,2022-06-12 04:14:42.000 +"Ys Origin",0100F90010882000,status-playable;nvdec,playable,2024-04-17 05:07:33.000 +"Ys VIII: Lacrimosa of Dana",01007F200B0C0000,status-playable;nvdec,playable,2023-08-05 09:26:41.000 +"Yu-Gi-Oh! Legacy of the Duelist: Link Evolution!",010022400BE5A000,status-playable,playable,2024-09-27 21:48:43.000 +"Yu-Gi-Oh! Rush Duel: Dawn of the Battle Royale!! Let's Go! Go Rush!!",01002D60188DE000,status-ingame;crash,ingame,2023-03-17 01:54:01.000 +"YU-NO: A GIRL WHO CHANTS LOVE AT THE BOUND OF THIS WORLD.",010037D00DBDC000,nvdec;status-playable,playable,2021-01-26 17:03:52.000 +"Yumeutsutsu Re:After",0100B56011502000,status-playable,playable,2022-11-20 16:09:06.000 +"Yunohana Spring! - Mellow Times -",,audio;crash;status-menus,menus,2020-09-27 19:27:40.000 +"Yuppie Psycho: Executive Edition",,crash;status-ingame,ingame,2020-12-11 10:37:06.000 +"Yuri",0100FC900963E000,status-playable,playable,2021-06-11 13:08:50.000 +"Zaccaria Pinball",010092400A678000,status-playable;online-broken,playable,2022-09-03 15:44:28.000 +"Zarvot - 0100E7900C40000",,status-playable,playable,2021-01-28 13:51:36.000 +"ZenChess",,status-playable,playable,2020-07-01 22:28:27.000 +"Zenge",,status-playable,playable,2020-10-22 13:23:57.000 +"Zengeon",0100057011E50000,services-horizon;status-boots;crash,boots,2024-04-29 15:43:07.000 +"Zenith",0100AAC00E692000,status-playable,playable,2022-09-17 09:57:02.000 +"ZERO GUNNER 2",,status-playable,playable,2021-01-04 20:17:14.000 +"Zero Strain",01004B001058C000,services;status-menus;UE4,menus,2021-11-10 07:48:32.000 +"Zettai kaikyu gakuen",,gpu;nvdec;status-ingame,ingame,2020-08-25 15:15:54.000 +"Ziggy The Chaser",0100D7B013DD0000,status-playable,playable,2021-02-04 20:34:27.000 +"ZikSquare",010086700EF16000,gpu;status-ingame,ingame,2021-11-06 02:02:48.000 +"Zoids Wild Blast Unleashed",010069C0123D8000,status-playable;nvdec,playable,2022-10-15 11:26:59.000 +"Zombie Army Trilogy",,ldn-untested;online;status-playable,playable,2020-12-16 12:02:28.000 +"Zombie Driver",,nvdec;status-playable,playable,2020-12-14 23:15:10.000 +"ZOMBIE GOLD RUSH",,online;status-playable,playable,2020-09-24 12:56:08.000 +"Zombie's Cool",,status-playable,playable,2020-12-17 12:41:26.000 +"Zombieland: Double Tap - Road Trip0",01000E5800D32C00,status-playable,playable,2022-09-17 10:08:45.000 +"Zombillie",,status-playable,playable,2020-07-23 17:42:23.000 +"Zotrix: Solar Division",01001EE00A6B0000,status-playable,playable,2021-06-07 20:34:05.000 +"この世の果てで恋を唄う少女YU-NO",,audio;status-ingame,ingame,2021-01-22 07:00:16.000 +"スーパーファミコン Nintendo Switch Online",,slow;status-ingame,ingame,2020-03-14 05:48:38.000 +"トラブル・マギア ~訳アリ少女は未来を勝ち取るために異国の魔法学校へ留学します~(Trouble Magia ~Wakeari Shoujo wa Mirai o Kachitoru Tame ni Ikoku no Mahou Gakkou e Ryuugaku Shimasu~)",01000BB01CB8A000,status-nothing,nothing,2024-09-28 07:03:14.000 +"メモリーズオフ - Innocent Fille",010065500B218000,status-playable,playable,2022-12-02 17:36:48.000 +"二ノ国 白き聖灰の女王",010032400E700000,services;status-menus;32-bit,menus,2023-04-16 17:11:06.000 +"初音ミク Project DIVA MEGA39's",0100F3100DA46000,audio;status-playable;loader-allocator,playable,2022-07-29 11:45:52.000 +"御伽活劇 豆狸のバケル ~オラクル祭太郎の祭難!!~ (Otogi Katsugeki Mameda no Bakeru Oracle Saitarou no Sainan!!)",0100BF401AF9C000,slow;status-playable,playable,2023-12-31 14:37:17.000 +"死神と少女/Shinigami to Shoujo",0100AFA01750C000,gpu;status-ingame;Incomplete,ingame,2024-03-22 01:06:45.000 +"燃えよ! 乙女道士 ~華遊恋語~ (Moeyo! Otome Doushi Kayu Koigatari)",01001BA01EBFC000,services-horizon;status-nothing,nothing,2024-09-28 12:22:55.000 +"牧場物語 Welcome!ワンダフルライフ",0100936018EB4000,status-ingame;crash,ingame,2023-04-25 19:43:52.000 +"索尼克:起源 / Sonic Origins",01009FB016286000,status-ingame;crash,ingame,2024-06-02 07:20:15.000 +"超探偵事件簿 レインコード (Master Detective Archives: Rain Code)",0100F4401940A000,status-ingame;crash,ingame,2024-02-12 20:58:31.000 +"超次元ゲイム ネプテューヌ GameMaker R:Evolution",010064801a01c000,status-nothing;crash,nothing,2023-10-30 22:37:40.000 +"逆转检察官1&2 御剑精选集 (Ace Attorney Investigations Collection)",010005501E68C000,status-playable,playable,2024-09-19 16:38:05.000 +"逆转裁判四五六 王泥喜精选集 (Apollo Justice: Ace Attorney Trilogy)",010020D01B890000,status-playable,playable,2024-06-21 21:54:27.000 +"鬼滅之刃:火之神血風譚 / Demon Slayer -Kimetsu no Yaiba- The Hinokami Chronicles",0100309016E7A000,status-playable;UE4,playable,2024-08-08 04:51:49.000 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 899326c4b..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,41 +237,49 @@ 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); @@ -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/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 22b6b9842..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); diff --git a/src/ARMeilleure/Translation/PTC/Ptc.cs b/src/ARMeilleure/Translation/PTC/Ptc.cs index 4675abc49..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"; diff --git a/src/Ryujinx.Common/Configuration/DirtyHack.cs b/src/Ryujinx.Common/Configuration/DirtyHack.cs index 6e21fe44e..9ab9a26a5 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHack.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHack.cs @@ -25,7 +25,7 @@ namespace Ryujinx.Common.Configuration { var unpackedFields = packedHack.UnpackBitFields(PackedFormat); if (unpackedFields is not [var hack, var value]) - throw new ArgumentException(nameof(packedHack)); + throw new Exception("The unpack operation on the integer resulted in an invalid unpacked result."); return new EnabledDirtyHack((DirtyHack)hack, (int)value); } 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/TitleIDs.cs b/src/Ryujinx.Common/TitleIDs.cs index ab6cfeb03..43a1f2393 100644 --- a/src/Ryujinx.Common/TitleIDs.cs +++ b/src/Ryujinx.Common/TitleIDs.cs @@ -171,6 +171,7 @@ namespace Ryujinx.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.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 910e9aea0..eb0f72af1 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -367,7 +367,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { try { - if (_context.DirtyHacks.IsEnabled(DirtyHack.ShaderTranslationDelay)) + if (_context.Capabilities.Api == TargetApi.Metal && _context.DirtyHacks.IsEnabled(DirtyHack.ShaderTranslationDelay)) Thread.Sleep(_context.DirtyHacks[DirtyHack.ShaderTranslationDelay]); AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute); diff --git a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs index e79248a47..f7f78b613 100644 --- a/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs +++ b/src/Ryujinx.Graphics.Vulkan/BufferMirrorRangeList.cs @@ -168,13 +168,15 @@ namespace Ryujinx.Graphics.Vulkan return BinarySearch(list, offset, size) >= 0; } - public readonly IEnumerable FindOverlaps(int offset, int size) + public readonly List FindOverlaps(int offset, int size) { var list = _ranges; if (list == null) { - yield break; + return null; } + + List result = null; int index = BinarySearch(list, offset, size); @@ -187,10 +189,12 @@ namespace Ryujinx.Graphics.Vulkan do { - yield return list[index++]; + (result ??= []).Add(list[index++]); } while (index < list.Count && list[index].OverlapsWith(offset, size)); } + + return result; } private static int BinarySearch(List list, int offset, int size) diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs index 3d197ac19..ad4cccc44 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs @@ -15,8 +15,10 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy { _baseStorage = SharedRef.CreateMove(ref baseStorage); } - - private const string Xc2TitleId = "0100e95004038000"; + + private const string Xc2JpTitleId = "0100f3400332c000"; + private const string Xc2GlobalTitleId = "0100e95004038000"; + private static bool IsXc2 => TitleIDs.CurrentApplication.Value.OrDefault() is Xc2GlobalTitleId or Xc2JpTitleId; [CommandCmif(0)] // Read(u64 offset, u64 length) -> buffer buffer @@ -39,7 +41,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseStorage.Get.Read((long)offset, new OutBuffer(region.Memory.Span), (long)size); - if (context.Device.DirtyHacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix) && TitleIDs.CurrentApplication.Value == Xc2TitleId) + if (context.Device.DirtyHacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix) && IsXc2) { // Add a load-bearing sleep to avoid XC2 softlock // https://web.archive.org/web/20240728045136/https://github.com/Ryujinx/Ryujinx/issues/2357 diff --git a/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs b/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs index c69eca7ee..2ba0b60a3 100644 --- a/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs +++ b/src/Ryujinx.UI.LocaleGenerator/LocaleGenerator.cs @@ -19,7 +19,7 @@ namespace Ryujinx.UI.LocaleGenerator StringBuilder enumSourceBuilder = new(); enumSourceBuilder.AppendLine("namespace Ryujinx.Ava.Common.Locale;"); - enumSourceBuilder.AppendLine("internal enum LocaleKeys"); + enumSourceBuilder.AppendLine("public enum LocaleKeys"); enumSourceBuilder.AppendLine("{"); foreach (var line in lines) { diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index c728ee9c9..a35a79e86 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -3,7 +3,6 @@ using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input; using Avalonia.Threading; -using Gommon; using LibHac.Common; using LibHac.Ns; using LibHac.Tools.FsSystem; @@ -43,7 +42,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.Input; using Ryujinx.Input.HLE; -using Silk.NET.Vulkan; using SkiaSharp; using SPB.Graphics.Vulkan; using System; diff --git a/src/Ryujinx/Assets/Fonts/Mono/AUTHORS.txt b/src/Ryujinx/Assets/Fonts/Mono/AUTHORS.txt new file mode 100644 index 000000000..881494169 --- /dev/null +++ b/src/Ryujinx/Assets/Fonts/Mono/AUTHORS.txt @@ -0,0 +1,10 @@ +# This is the official list of project authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS.txt file. +# See the latter for an explanation. +# +# Names should be added to this file as: +# Name or Organization + +JetBrains <> +Philipp Nurullin +Konstantin Bulenkov diff --git a/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Bold.ttf b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Bold.ttf new file mode 100644 index 000000000..f78f84fb4 Binary files /dev/null and b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Bold.ttf differ diff --git a/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-BoldItalic.ttf b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-BoldItalic.ttf new file mode 100644 index 000000000..9fb8c8325 Binary files /dev/null and b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-BoldItalic.ttf differ diff --git a/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Italic.ttf b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Italic.ttf new file mode 100644 index 000000000..4e9c3802d Binary files /dev/null and b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Italic.ttf differ diff --git a/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Regular.ttf b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Regular.ttf new file mode 100644 index 000000000..70d2ec9e2 Binary files /dev/null and b/src/Ryujinx/Assets/Fonts/Mono/JetBrainsMonoNL-Regular.ttf differ diff --git a/src/Ryujinx/Assets/Fonts/Mono/OFL.txt b/src/Ryujinx/Assets/Fonts/Mono/OFL.txt new file mode 100644 index 000000000..8bee4148c --- /dev/null +++ b/src/Ryujinx/Assets/Fonts/Mono/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The JetBrains Mono Project Authors (https://github.com/JetBrains/JetBrainsMono) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/Ryujinx/Assets/Styles/Styles.xaml b/src/Ryujinx/Assets/Styles/Styles.xaml index 878b5e7f1..3d0c91840 100644 --- a/src/Ryujinx/Assets/Styles/Styles.xaml +++ b/src/Ryujinx/Assets/Styles/Styles.xaml @@ -402,7 +402,7 @@ 13 26 28 - 700 + 900 756 diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 6f22e7d06..8ba216e45 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -22596,6 +22596,231 @@ "zh_CN": "降低自定义刷新率:", "zh_TW": "" } + }, + { + "ID": "CompatibilityListWarning", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "This compatibility list might contain out of date entries.\nDo not be opposed to testing games in the \"Ingame\" status.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListSearchBoxWatermark", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Search compatibility entries...", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListOpen", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Open Compatibility List", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListOnlyShowOwnedGames", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Only show owned games", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListPlayable", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Playable", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListIngame", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Ingame", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListMenus", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Menus", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListBoots", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Boots", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "CompatibilityListNothing", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Nothing", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } } ] } diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index 3cb0afca3..5730254f7 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -52,7 +52,7 @@ namespace Ryujinx.Headless // Make process DPI aware for proper window sizing on high-res screens. ForceDpiAware.Windows(); - Console.Title = $"Ryujinx Console {Program.Version} (Headless)"; + Console.Title = $"HeadlessRyujinx Console {Program.Version}"; if (OperatingSystem.IsMacOS() || OperatingSystem.IsLinux()) { @@ -162,6 +162,11 @@ namespace Ryujinx.Headless } ReloadConfig(); + + if (option.InheritConfig) + { + option.InheritMainConfigInput(originalArgs, ConfigurationState.Instance); + } _virtualFileSystem = VirtualFileSystem.CreateInstance(); _libHacHorizonManager = new LibHacHorizonManager(); @@ -224,15 +229,7 @@ namespace Ryujinx.Headless _enableKeyboard = option.EnableKeyboard; _enableMouse = option.EnableMouse; - static void LoadPlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index) - { - InputConfig inputConfig = HandlePlayerConfiguration(inputProfileName, inputId, index); - if (inputConfig != null) - { - _inputConfiguration.Add(inputConfig); - } - } LoadPlayerConfiguration(option.InputProfile1Name, option.InputId1, PlayerIndex.Player1); LoadPlayerConfiguration(option.InputProfile2Name, option.InputId2, PlayerIndex.Player2); @@ -244,7 +241,6 @@ namespace Ryujinx.Headless LoadPlayerConfiguration(option.InputProfile8Name, option.InputId8, PlayerIndex.Player8); LoadPlayerConfiguration(option.InputProfileHandheldName, option.InputIdHandheld, PlayerIndex.Handheld); - if (_inputConfiguration.Count == 0) { return; @@ -306,6 +302,24 @@ namespace Ryujinx.Headless } _inputManager.Dispose(); + + return; + + void LoadPlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index) + { + if (index == PlayerIndex.Handheld && _inputConfiguration.Count > 0) + { + Logger.Info?.Print(LogClass.Configuration, "Skipping handheld configuration as there are already other players configured."); + return; + } + + InputConfig inputConfig = option.InheritedInputConfigs[index] ?? HandlePlayerConfiguration(inputProfileName, inputId, index); + + if (inputConfig != null) + { + _inputConfiguration.Add(inputConfig); + } + } } private static void SetupProgressHandler() diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index c0def95c1..0d7e46285 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -154,10 +154,37 @@ namespace Ryujinx.Headless return; bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey))); - - string OptionName(string propertyName) => - typeof(Options)!.GetProperty(propertyName)!.GetCustomAttribute()!.LongName; } + + public void InheritMainConfigInput(string[] originalArgs, ConfigurationState configurationState) + { + Dictionary indicesToProperties = new() + { + { PlayerIndex.Handheld, (nameof(InputIdHandheld), nameof(InputProfileHandheldName)) }, + { PlayerIndex.Player1, (nameof(InputId1), nameof(InputProfile1Name)) }, + { PlayerIndex.Player2, (nameof(InputId2), nameof(InputProfile2Name)) }, + { PlayerIndex.Player3, (nameof(InputId3), nameof(InputProfile3Name)) }, + { PlayerIndex.Player4, (nameof(InputId4), nameof(InputProfile4Name)) }, + { PlayerIndex.Player5, (nameof(InputId5), nameof(InputProfile5Name)) }, + { PlayerIndex.Player6, (nameof(InputId6), nameof(InputProfile6Name)) }, + { PlayerIndex.Player7, (nameof(InputId7), nameof(InputProfile7Name)) }, + { PlayerIndex.Player8, (nameof(InputId8), nameof(InputProfile8Name)) } + }; + + foreach ((PlayerIndex playerIndex, _) in indicesToProperties + .Where(it => NeedsOverride(it.Value.InputId) && NeedsOverride(it.Value.InputProfileName))) + { + configurationState.Hid.InputConfig.Value.FindFirst(x => x.PlayerIndex == playerIndex) + .IfPresent(ic => InheritedInputConfigs[playerIndex] = ic); + } + + return; + + bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey))); + } + + private static string OptionName(string propertyName) => + typeof(Options)!.GetProperty(propertyName)!.GetCustomAttribute()!.LongName; // General @@ -391,5 +418,7 @@ namespace Ryujinx.Headless [Value(0, MetaName = "input", HelpText = "Input to load.", Required = true)] public string InputPath { get; set; } + + public SafeDictionary InheritedInputConfigs = new(); } } diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 0991cf9ce..ab9a3696d 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -61,6 +61,7 @@ + @@ -113,6 +114,10 @@ Designer + + + + MSBuild:Compile @@ -140,6 +145,9 @@ Assets\ShortcutFiles\shortcut-template.plist + + Assets\RyujinxGameCompatibility.csv + @@ -163,4 +171,7 @@ + + + diff --git a/src/Ryujinx/RyujinxApp.axaml b/src/Ryujinx/RyujinxApp.axaml index e07d7ff26..aca69645a 100644 --- a/src/Ryujinx/RyujinxApp.axaml +++ b/src/Ryujinx/RyujinxApp.axaml @@ -6,6 +6,9 @@ + + avares://Ryujinx/Assets/Fonts/Mono/#JetBrains Mono + diff --git a/src/Ryujinx/UI/Helpers/MiniCommand.cs b/src/Ryujinx/UI/Helpers/MiniCommand.cs index 7e1bb9a68..9782aa69d 100644 --- a/src/Ryujinx/UI/Helpers/MiniCommand.cs +++ b/src/Ryujinx/UI/Helpers/MiniCommand.cs @@ -63,6 +63,7 @@ namespace Ryujinx.Ava.UI.Helpers public static MiniCommand Create(Action callback) => new MiniCommand(_ => callback()); public static MiniCommand Create(Action callback) => new MiniCommand(callback); public static MiniCommand CreateFromTask(Func callback) => new MiniCommand(_ => callback()); + public static MiniCommand CreateFromTask(Func callback) => new MiniCommand(callback); public abstract bool CanExecute(object parameter); public abstract void Execute(object parameter); diff --git a/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs b/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs new file mode 100644 index 000000000..a894f0246 --- /dev/null +++ b/src/Ryujinx/UI/Helpers/PlayabilityStatusConverter.cs @@ -0,0 +1,28 @@ +using Avalonia.Data.Converters; +using Avalonia.Media; +using Gommon; +using Ryujinx.Ava.Common.Locale; +using System; +using System.Globalization; + +namespace Ryujinx.Ava.UI.Helpers +{ + public class PlayabilityStatusConverter : IValueConverter + { + private static readonly Lazy _shared = new(() => new()); + public static PlayabilityStatusConverter Shared => _shared.Value; + + public object Convert(object? value, Type _, object? __, CultureInfo ___) => + value.Cast() switch + { + LocaleKeys.CompatibilityListNothing or + LocaleKeys.CompatibilityListBoots or + LocaleKeys.CompatibilityListMenus => Brushes.Red, + LocaleKeys.CompatibilityListIngame => Brushes.Yellow, + _ => Brushes.ForestGreen + }; + + public object ConvertBack(object? value, Type _, object? __, CultureInfo ___) + => throw new NotSupportedException(); + } +} diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml b/src/Ryujinx/UI/Renderer/RendererHost.axaml deleted file mode 100644 index e0b586b45..000000000 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml +++ /dev/null @@ -1,12 +0,0 @@ - - diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Ryujinx/UI/Renderer/RendererHost.cs similarity index 94% rename from src/Ryujinx/UI/Renderer/RendererHost.axaml.cs rename to src/Ryujinx/UI/Renderer/RendererHost.cs index fa9aec0c5..7dfec8d62 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.cs @@ -1,16 +1,15 @@ -using Avalonia; +using Avalonia; using Avalonia.Controls; -using Gommon; +using Avalonia.Media; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using System; -using System.Runtime.InteropServices; namespace Ryujinx.Ava.UI.Renderer { - public partial class RendererHost : UserControl, IDisposable + public class RendererHost : UserControl, IDisposable { public readonly EmbeddedWindow EmbeddedWindow; @@ -19,7 +18,8 @@ namespace Ryujinx.Ava.UI.Renderer public RendererHost() { - InitializeComponent(); + Focusable = true; + FlowDirection = FlowDirection.LeftToRight; EmbeddedWindow = ConfigurationState.Instance.Graphics.GraphicsBackend.Value switch { @@ -43,8 +43,6 @@ namespace Ryujinx.Ava.UI.Renderer public RendererHost(string titleId) { - InitializeComponent(); - switch (TitleIDs.SelectGraphicsBackend(titleId, ConfigurationState.Instance.Graphics.GraphicsBackend)) { case GraphicsBackend.OpenGl: @@ -109,3 +107,4 @@ namespace Ryujinx.Ava.UI.Renderer } } } + diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index 6bc1e1f03..979ae8253 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -1,6 +1,7 @@ using Avalonia.Media.Imaging; using Avalonia.Styling; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Utilities.Configuration; @@ -8,42 +9,11 @@ using System; namespace Ryujinx.Ava.UI.ViewModels { - public class AboutWindowViewModel : BaseModel, IDisposable + public partial class AboutWindowViewModel : BaseModel, IDisposable { - private Bitmap _githubLogo; - private Bitmap _discordLogo; - - private string _version; - - public Bitmap GithubLogo - { - get => _githubLogo; - set - { - _githubLogo = value; - OnPropertyChanged(); - } - } - - public Bitmap DiscordLogo - { - get => _discordLogo; - set - { - _discordLogo = value; - OnPropertyChanged(); - } - } - - public string Version - { - get => _version; - set - { - _version = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private Bitmap _githubLogo; + [ObservableProperty] private Bitmap _discordLogo; + [ObservableProperty] private string _version; public string Developers => "GreemDev"; diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index acc26decb..52f97cf02 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -2,6 +2,7 @@ using Avalonia.Collections; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Platform.Storage; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using DynamicData; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; @@ -17,13 +18,13 @@ using Application = Avalonia.Application; namespace Ryujinx.Ava.UI.ViewModels { - public class DownloadableContentManagerViewModel : BaseModel + public partial class DownloadableContentManagerViewModel : BaseModel { private readonly ApplicationLibrary _applicationLibrary; private AvaloniaList _downloadableContents = new(); - private AvaloniaList _selectedDownloadableContents = new(); - private AvaloniaList _views = new(); - private bool _showBundledContentNotice = false; + [ObservableProperty] private AvaloniaList _selectedDownloadableContents = new(); + [ObservableProperty] private AvaloniaList _views = new(); + [ObservableProperty] private bool _showBundledContentNotice = false; private string _search; private readonly ApplicationData _applicationData; @@ -41,26 +42,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public AvaloniaList Views - { - get => _views; - set - { - _views = value; - OnPropertyChanged(); - } - } - - public AvaloniaList SelectedDownloadableContents - { - get => _selectedDownloadableContents; - set - { - _selectedDownloadableContents = value; - OnPropertyChanged(); - } - } - public string Search { get => _search; @@ -77,16 +58,6 @@ namespace Ryujinx.Ava.UI.ViewModels get => string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowHeading], DownloadableContents.Count); } - public bool ShowBundledContentNotice - { - get => _showBundledContentNotice; - set - { - _showBundledContentNotice = value; - OnPropertyChanged(); - } - } - public DownloadableContentManagerViewModel(ApplicationLibrary applicationLibrary, ApplicationData applicationData) { _applicationLibrary = applicationLibrary; @@ -135,9 +106,9 @@ namespace Ryujinx.Ava.UI.ViewModels // NOTE(jpr): this works around a bug where calling _views.Clear also clears SelectedDownloadableContents for // some reason. so we save the items here and add them back after var items = SelectedDownloadableContents.ToArray(); - - _views.Clear(); - _views.AddRange(view); + + Views.Clear(); + Views.AddRange(view); foreach (DownloadableContentModel item in items) { diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 6df1f76ad..e11d855a6 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -80,7 +80,9 @@ namespace Ryujinx.Ava.UI.ViewModels [ObservableProperty] private Brush _progressBarForegroundColor; [ObservableProperty] private Brush _progressBarBackgroundColor; [ObservableProperty] private Brush _vSyncModeColor; - [ObservableProperty] private byte[] _selectedIcon; + #nullable enable + [ObservableProperty] private byte[]? _selectedIcon; + #nullable disable [ObservableProperty] private int _statusBarProgressMaximum; [ObservableProperty] private int _statusBarProgressValue; [ObservableProperty] private string _statusBarProgressStatusText; @@ -125,43 +127,6 @@ namespace Ryujinx.Ava.UI.ViewModels private ApplicationData _listSelectedApplication; private ApplicationData _gridSelectedApplication; - public ApplicationData ListSelectedApplication - { - get => _listSelectedApplication; - set - { - _listSelectedApplication = value; - -#pragma warning disable MVVMTK0034 - if (_listSelectedApplication != null && _listAppContextMenu == null) - - ListAppContextMenu = new ApplicationContextMenu(); - else if (_listSelectedApplication == null && _listAppContextMenu != null) - ListAppContextMenu = null!; -#pragma warning restore MVVMTK0034 - - OnPropertyChanged(); - } - } - - public ApplicationData GridSelectedApplication - { - get => _gridSelectedApplication; - set - { - _gridSelectedApplication = value; - -#pragma warning disable MVVMTK0034 - if (_gridSelectedApplication != null && _gridAppContextMenu == null) - GridAppContextMenu = new ApplicationContextMenu(); - else if (_gridSelectedApplication == null && _gridAppContextMenu != null) - GridAppContextMenu = null!; -#pragma warning restore MVVMTK0034 - - OnPropertyChanged(); - } - } - // Key is Title ID public SafeDictionary LdnData = []; @@ -182,8 +147,11 @@ namespace Ryujinx.Ava.UI.ViewModels Applications.ToObservableChangeSet() .Filter(Filter) .Sort(GetComparer()) - .Bind(out _appsObservableList) - .AsObservableList(); + .OnItemAdded(_ => OnPropertyChanged(nameof(AppsObservableList))) + .OnItemRemoved(_ => OnPropertyChanged(nameof(AppsObservableList))) +#pragma warning disable MVVMTK0034 // Event to update is fired below + .Bind(out _appsObservableList); +#pragma warning restore MVVMTK0034 _rendererWaitEvent = new AutoResetEvent(false); @@ -192,8 +160,8 @@ namespace Ryujinx.Ava.UI.ViewModels LoadConfigurableHotKeys(); Volume = ConfigurationState.Instance.System.AudioVolume; + CustomVSyncInterval = ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value; } - CustomVSyncInterval = ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value; } public void Initialize( @@ -331,6 +299,43 @@ namespace Ryujinx.Ava.UI.ViewModels OnPropertyChanged(nameof(ShowFirmwareStatus)); } } + + public ApplicationData ListSelectedApplication + { + get => _listSelectedApplication; + set + { + _listSelectedApplication = value; + +#pragma warning disable MVVMTK0034 + if (_listSelectedApplication != null && _listAppContextMenu == null) + + ListAppContextMenu = new ApplicationContextMenu(); + else if (_listSelectedApplication == null && _listAppContextMenu != null) + ListAppContextMenu = null!; +#pragma warning restore MVVMTK0034 + + OnPropertyChanged(); + } + } + + public ApplicationData GridSelectedApplication + { + get => _gridSelectedApplication; + set + { + _gridSelectedApplication = value; + +#pragma warning disable MVVMTK0034 + if (_gridSelectedApplication != null && _gridAppContextMenu == null) + GridAppContextMenu = new ApplicationContextMenu(); + else if (_gridSelectedApplication == null && _gridAppContextMenu != null) + GridAppContextMenu = null!; +#pragma warning restore MVVMTK0034 + + OnPropertyChanged(); + } + } public ApplicationData SelectedApplication { @@ -1751,7 +1756,7 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public async void ProcessTrimResult(String filename, Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome operationOutcome) + public async void ProcessTrimResult(String filename, XCIFileTrimmer.OperationOutcome operationOutcome) { string notifyUser = operationOutcome.ToLocalisedText(); @@ -1766,12 +1771,8 @@ namespace Ryujinx.Ava.UI.ViewModels { switch (operationOutcome) { - case Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome.Successful: - if (Avalonia.Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) - { - if (desktop.MainWindow is MainWindow mainWindow) - mainWindow.LoadApplications(); - } + case XCIFileTrimmer.OperationOutcome.Successful: + RyujinxApp.MainWindow.LoadApplications(); break; } } diff --git a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs index 9c26376ce..ce40ce16c 100644 --- a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs @@ -1,8 +1,7 @@ -using Avalonia; using Avalonia.Collections; -using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Platform.Storage; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using DynamicData; using Gommon; using Ryujinx.Ava.Common.Locale; @@ -18,13 +17,13 @@ using System.Linq; namespace Ryujinx.Ava.UI.ViewModels { - public class ModManagerViewModel : BaseModel + public partial class ModManagerViewModel : BaseModel { private readonly string _modJsonPath; private AvaloniaList _mods = new(); - private AvaloniaList _views = new(); - private AvaloniaList _selectedMods = new(); + [ObservableProperty] private AvaloniaList _views = new(); + [ObservableProperty] private AvaloniaList _selectedMods = new(); private string _search; private readonly ulong _applicationId; @@ -44,26 +43,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public AvaloniaList Views - { - get => _views; - set - { - _views = value; - OnPropertyChanged(); - } - } - - public AvaloniaList SelectedMods - { - get => _selectedMods; - set - { - _selectedMods = value; - OnPropertyChanged(); - } - } - public string Search { get => _search; @@ -143,8 +122,10 @@ namespace Ryujinx.Ava.UI.ViewModels .Filter(Filter) .Bind(out var view).AsObservableList(); +#pragma warning disable MVVMTK0034 // Event to update is fired below _views.Clear(); _views.AddRange(view); +#pragma warning restore MVVMTK0034 SelectedMods = new(Views.Where(x => x.Enabled)); diff --git a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs index b93cdd6dc..5096a716d 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs @@ -1,9 +1,10 @@ -using Gommon; +using CommunityToolkit.Mvvm.ComponentModel; +using Gommon; using Ryujinx.Ava.Utilities.Configuration; namespace Ryujinx.Ava.UI.ViewModels { - public class SettingsHacksViewModel : BaseModel + public partial class SettingsHacksViewModel : BaseModel { private readonly SettingsViewModel _baseViewModel; @@ -14,33 +15,11 @@ namespace Ryujinx.Ava.UI.ViewModels _baseViewModel = settingsVm; } - private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; - private bool _shaderTranslationThreadSleep = ConfigurationState.Instance.Hacks.EnableShaderTranslationDelay; + [ObservableProperty] private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; + [ObservableProperty] private bool _shaderTranslationDelayEnabled = ConfigurationState.Instance.Hacks.EnableShaderTranslationDelay; private int _shaderTranslationSleepDelay = ConfigurationState.Instance.Hacks.ShaderTranslationDelay; - - public bool Xc2MenuSoftlockFixEnabled - { - get => _xc2MenuSoftlockFix; - set - { - _xc2MenuSoftlockFix = value; - - OnPropertyChanged(); - } - } - - public bool ShaderTranslationDelayEnabled - { - get => _shaderTranslationThreadSleep; - set - { - _shaderTranslationThreadSleep = value; - - OnPropertyChanged(); - } - } - public string ShaderTranslationDelayTooltipText => $"Current value: {ShaderTranslationDelay}"; + public string ShaderTranslationDelayValueText => $"{ShaderTranslationDelay}ms"; public int ShaderTranslationDelay { @@ -49,7 +28,7 @@ namespace Ryujinx.Ava.UI.ViewModels { _shaderTranslationSleepDelay = value; - OnPropertiesChanged(nameof(ShaderTranslationDelay), nameof(ShaderTranslationDelayTooltipText)); + OnPropertiesChanged(nameof(ShaderTranslationDelay), nameof(ShaderTranslationDelayValueText)); } } diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index a5bdd2f88..2678bbf98 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -1,6 +1,7 @@ using Avalonia.Collections; using Avalonia.Controls; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using Gommon; using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.OpenAL; @@ -46,9 +47,9 @@ namespace Ryujinx.Ava.UI.ViewModels private int _resolutionScale; private int _graphicsBackendMultithreadingIndex; private float _volume; - private bool _isVulkanAvailable = true; - private bool _gameDirectoryChanged; - private bool _autoloadDirectoryChanged; + [ObservableProperty] private bool _isVulkanAvailable = true; + [ObservableProperty] private bool _gameDirectoryChanged; + [ObservableProperty] private bool _autoloadDirectoryChanged; private readonly List _gpuIds = new(); private int _graphicsBackendIndex; private int _scalingFilter; @@ -63,7 +64,7 @@ namespace Ryujinx.Ava.UI.ViewModels private int _networkInterfaceIndex; private int _multiplayerModeIndex; private string _ldnPassphrase; - private string _ldnServer; + [ObservableProperty] private string _ldnServer; public SettingsHacksViewModel DirtyHacks { get; } @@ -111,43 +112,10 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public bool IsVulkanAvailable - { - get => _isVulkanAvailable; - set - { - _isVulkanAvailable = value; - - OnPropertyChanged(); - } - } - public bool IsOpenGLAvailable => !OperatingSystem.IsMacOS(); public bool IsAppleSiliconMac => OperatingSystem.IsMacOS() && RuntimeInformation.ProcessArchitecture == Architecture.Arm64; - public bool GameDirectoryChanged - { - get => _gameDirectoryChanged; - set - { - _gameDirectoryChanged = value; - - OnPropertyChanged(); - } - } - - public bool AutoloadDirectoryChanged - { - get => _autoloadDirectoryChanged; - set - { - _autoloadDirectoryChanged = value; - - OnPropertyChanged(); - } - } - public bool IsMacOS => OperatingSystem.IsMacOS(); public bool EnableDiscordIntegration { get; set; } @@ -182,19 +150,12 @@ namespace Ryujinx.Ava.UI.ViewModels _customVSyncInterval = newInterval; _customVSyncIntervalPercentageProxy = value; OnPropertiesChanged( - nameof(CustomVSyncInterval), + nameof(CustomVSyncInterval), nameof(CustomVSyncIntervalPercentageText)); } } - public string CustomVSyncIntervalPercentageText - { - get - { - string text = CustomVSyncIntervalPercentageProxy + "%"; - return text; - } - } + public string CustomVSyncIntervalPercentageText => CustomVSyncIntervalPercentageProxy + "%"; public bool EnableCustomVSyncInterval { @@ -356,7 +317,6 @@ namespace Ryujinx.Ava.UI.ViewModels set { _networkInterfaceIndex = value != -1 ? value : 0; - ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value = _networkInterfaces[NetworkInterfaceList[_networkInterfaceIndex]]; } } @@ -366,7 +326,6 @@ namespace Ryujinx.Ava.UI.ViewModels set { _multiplayerModeIndex = value; - ConfigurationState.Instance.Multiplayer.Mode.Value = (MultiplayerMode)_multiplayerModeIndex; } } @@ -375,16 +334,6 @@ namespace Ryujinx.Ava.UI.ViewModels public bool IsInvalidLdnPassphraseVisible { get; set; } - public string LdnServer - { - get => _ldnServer; - set - { - _ldnServer = value; - OnPropertyChanged(); - } - } - public SettingsViewModel(VirtualFileSystem virtualFileSystem, ContentManager contentManager) : this() { _virtualFileSystem = virtualFileSystem; @@ -466,11 +415,10 @@ namespace Ryujinx.Ava.UI.ViewModels public void MatchSystemTime() { - var dto = DateTimeOffset.Now; - - CurrentDate = new DateTimeOffset(dto.Year, dto.Month, dto.Day, 0, 0, 0, dto.Offset); + (DateTimeOffset dto, TimeSpan timeOfDay) = DateTimeOffset.Now.Extract(); - CurrentTime = dto.TimeOfDay; + CurrentDate = dto; + CurrentTime = timeOfDay; OnPropertyChanged(nameof(CurrentDate)); OnPropertyChanged(nameof(CurrentTime)); @@ -648,16 +596,14 @@ namespace Ryujinx.Ava.UI.ViewModels config.ShowTitleBar.Value = ShowTitleBar; config.HideCursor.Value = (HideCursorMode)HideCursor; - if (_gameDirectoryChanged) + if (GameDirectoryChanged) { - List gameDirs = new(GameDirectories); - config.UI.GameDirs.Value = gameDirs; + config.UI.GameDirs.Value = [..GameDirectories]; } - if (_autoloadDirectoryChanged) + if (AutoloadDirectoryChanged) { - List autoloadDirs = new(AutoloadDirectories); - config.UI.AutoloadDirs.Value = autoloadDirs; + config.UI.AutoloadDirs.Value = [..AutoloadDirectories]; } config.UI.BaseStyle.Value = BaseStyleIndex switch @@ -756,7 +702,7 @@ namespace Ryujinx.Ava.UI.ViewModels config.Multiplayer.LdnServer.Value = LdnServer; // Dirty Hacks - config.Hacks.Xc2MenuSoftlockFix.Value = DirtyHacks.Xc2MenuSoftlockFixEnabled; + config.Hacks.Xc2MenuSoftlockFix.Value = DirtyHacks.Xc2MenuSoftlockFix; config.Hacks.EnableShaderTranslationDelay.Value = DirtyHacks.ShaderTranslationDelayEnabled; config.Hacks.ShaderTranslationDelay.Value = DirtyHacks.ShaderTranslationDelay; @@ -767,8 +713,8 @@ namespace Ryujinx.Ava.UI.ViewModels SaveSettingsEvent?.Invoke(); - _gameDirectoryChanged = false; - _autoloadDirectoryChanged = false; + GameDirectoryChanged = false; + AutoloadDirectoryChanged = false; } private static void RevertIfNotSaved() diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index 0748efeb4..86d59d6b4 100644 --- a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -1,74 +1,32 @@ using Avalonia.Collections; -using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Platform.Storage; using Avalonia.Threading; +using CommunityToolkit.Mvvm.ComponentModel; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.HLE.FileSystem; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; -using Application = Avalonia.Application; namespace Ryujinx.Ava.UI.ViewModels { - public record TitleUpdateViewNoUpdateSentinal(); + public record TitleUpdateViewModelNoUpdate; - public class TitleUpdateViewModel : BaseModel + public partial class TitleUpdateViewModel : BaseModel { private ApplicationLibrary ApplicationLibrary { get; } private ApplicationData ApplicationData { get; } - private AvaloniaList _titleUpdates = new(); - private AvaloniaList _views = new(); - private object _selectedUpdate = new TitleUpdateViewNoUpdateSentinal(); - private bool _showBundledContentNotice = false; + [ObservableProperty] private AvaloniaList _titleUpdates = new(); + [ObservableProperty] private AvaloniaList _views = new(); + [ObservableProperty] private object _selectedUpdate = new TitleUpdateViewModelNoUpdate(); + [ObservableProperty] private bool _showBundledContentNotice; - public AvaloniaList TitleUpdates - { - get => _titleUpdates; - set - { - _titleUpdates = value; - OnPropertyChanged(); - } - } - - public AvaloniaList Views - { - get => _views; - set - { - _views = value; - OnPropertyChanged(); - } - } - - public object SelectedUpdate - { - get => _selectedUpdate; - set - { - _selectedUpdate = value; - OnPropertyChanged(); - } - } - - public bool ShowBundledContentNotice - { - get => _showBundledContentNotice; - set - { - _showBundledContentNotice = value; - OnPropertyChanged(); - } - } - - public IStorageProvider StorageProvider; + private readonly IStorageProvider _storageProvider; public TitleUpdateViewModel(ApplicationLibrary applicationLibrary, ApplicationData applicationData) { @@ -76,7 +34,7 @@ namespace Ryujinx.Ava.UI.ViewModels ApplicationData = applicationData; - StorageProvider = RyujinxApp.MainWindow.StorageProvider; + _storageProvider = RyujinxApp.MainWindow.StorageProvider; LoadUpdates(); } @@ -87,7 +45,7 @@ namespace Ryujinx.Ava.UI.ViewModels .Where(it => it.TitleUpdate.TitleIdBase == ApplicationData.IdBase); bool hasBundledContent = false; - SelectedUpdate = new TitleUpdateViewNoUpdateSentinal(); + SelectedUpdate = new TitleUpdateViewModelNoUpdate(); foreach ((TitleUpdateModel update, bool isSelected) in updates) { TitleUpdates.Add(update); @@ -113,12 +71,12 @@ namespace Ryujinx.Ava.UI.ViewModels var selected = SelectedUpdate; Views.Clear(); - Views.Add(new TitleUpdateViewNoUpdateSentinal()); + Views.Add(new TitleUpdateViewModelNoUpdate()); Views.AddRange(sortedUpdates); SelectedUpdate = selected; - if (SelectedUpdate is TitleUpdateViewNoUpdateSentinal) + if (SelectedUpdate is TitleUpdateViewModelNoUpdate) { SelectedUpdate = Views[0]; } @@ -176,7 +134,7 @@ namespace Ryujinx.Ava.UI.ViewModels } else if (update == SelectedUpdate as TitleUpdateModel) { - SelectedUpdate = new TitleUpdateViewNoUpdateSentinal(); + SelectedUpdate = new TitleUpdateViewModelNoUpdate(); } SortUpdates(); @@ -184,7 +142,7 @@ namespace Ryujinx.Ava.UI.ViewModels public async Task Add() { - var result = await StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions + var result = await _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { AllowMultiple = true, FileTypeFilter = new List diff --git a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs index b07bf78b9..29c81308b 100644 --- a/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserFirmwareAvatarSelectorViewModel.cs @@ -1,4 +1,5 @@ using Avalonia.Media; +using CommunityToolkit.Mvvm.ComponentModel; using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Fsa; @@ -20,12 +21,12 @@ using Image = SkiaSharp.SKImage; namespace Ryujinx.Ava.UI.ViewModels { - internal class UserFirmwareAvatarSelectorViewModel : BaseModel + internal partial class UserFirmwareAvatarSelectorViewModel : BaseModel { private static readonly Dictionary _avatarStore = new(); - private ObservableCollection _images; - private Color _backgroundColor = Colors.White; + [ObservableProperty] private ObservableCollection _images; + [ObservableProperty] private Color _backgroundColor = Colors.White; private int _selectedIndex; @@ -34,27 +35,11 @@ namespace Ryujinx.Ava.UI.ViewModels _images = new ObservableCollection(); LoadImagesFromStore(); - } - - public Color BackgroundColor - { - get => _backgroundColor; - set + PropertyChanged += (_, args) => { - _backgroundColor = value; - OnPropertyChanged(); - ChangeImageBackground(); - } - } - - public ObservableCollection Images - { - get => _images; - set - { - _images = value; - OnPropertyChanged(); - } + if (args.PropertyName == nameof(BackgroundColor)) + ChangeImageBackground(); + }; } public int SelectedIndex @@ -70,7 +55,7 @@ namespace Ryujinx.Ava.UI.ViewModels } else { - SelectedImage = _images[_selectedIndex].Data; + SelectedImage = Images[_selectedIndex].Data; } OnPropertyChanged(); diff --git a/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs b/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs index 8e7d41a55..36a9a62f9 100644 --- a/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserProfileImageSelectorViewModel.cs @@ -1,18 +1,9 @@ +using CommunityToolkit.Mvvm.ComponentModel; + namespace Ryujinx.Ava.UI.ViewModels { - internal class UserProfileImageSelectorViewModel : BaseModel + internal partial class UserProfileImageSelectorViewModel : BaseModel { - private bool _firmwareFound; - - public bool FirmwareFound - { - get => _firmwareFound; - - set - { - _firmwareFound = value; - OnPropertyChanged(); - } - } + [ObservableProperty] private bool _firmwareFound; } } diff --git a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs index 85adef005..187df0449 100644 --- a/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/UserSaveManagerViewModel.cs @@ -1,3 +1,4 @@ +using CommunityToolkit.Mvvm.ComponentModel; using DynamicData; using DynamicData.Binding; using Ryujinx.Ava.Common.Locale; @@ -8,74 +9,31 @@ using System.Collections.ObjectModel; namespace Ryujinx.Ava.UI.ViewModels { - public class UserSaveManagerViewModel : BaseModel + public partial class UserSaveManagerViewModel : BaseModel { - private int _sortIndex; - private int _orderIndex; - private string _search; - private ObservableCollection _saves = new(); - private ObservableCollection _views = new(); + [ObservableProperty] private int _sortIndex; + [ObservableProperty] private int _orderIndex; + [ObservableProperty] private string _search; + [ObservableProperty] private ObservableCollection _saves = new(); + [ObservableProperty] private ObservableCollection _views = new(); private readonly AccountManager _accountManager; public string SaveManagerHeading => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.SaveManagerHeading, _accountManager.LastOpenedUser.Name, _accountManager.LastOpenedUser.UserId); - public int SortIndex - { - get => _sortIndex; - set - { - _sortIndex = value; - OnPropertyChanged(); - Sort(); - } - } - - public int OrderIndex - { - get => _orderIndex; - set - { - _orderIndex = value; - OnPropertyChanged(); - Sort(); - } - } - - public string Search - { - get => _search; - set - { - _search = value; - OnPropertyChanged(); - Sort(); - } - } - - public ObservableCollection Saves - { - get => _saves; - set - { - _saves = value; - OnPropertyChanged(); - Sort(); - } - } - - public ObservableCollection Views - { - get => _views; - set - { - _views = value; - OnPropertyChanged(); - } - } - public UserSaveManagerViewModel(AccountManager accountManager) { _accountManager = accountManager; + PropertyChanged += (_, evt) => + { + if (evt.PropertyName is + nameof(SortIndex) or + nameof(OrderIndex) or + nameof(Search) or + nameof(Saves)) + { + Sort(); + } + }; } public void Sort() @@ -85,8 +43,10 @@ namespace Ryujinx.Ava.UI.ViewModels .Sort(GetComparer()) .Bind(out var view).AsObservableList(); +#pragma warning disable MVVMTK0034 _views.Clear(); _views.AddRange(view); +#pragma warning restore MVVMTK0034 OnPropertyChanged(nameof(Views)); } @@ -94,7 +54,7 @@ namespace Ryujinx.Ava.UI.ViewModels { if (arg is SaveModel save) { - return string.IsNullOrWhiteSpace(_search) || save.Title.ToLower().Contains(_search.ToLower()); + return string.IsNullOrWhiteSpace(Search) || save.Title.ToLower().Contains(Search.ToLower()); } return false; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 2c07bd8ef..6bce21851 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -56,7 +56,7 @@ ToolTip.Tip="{ext:Locale LoadTitleUpdatesFromFolderTooltip}" /> @@ -72,7 +72,7 @@ ToolTip.Tip="{ext:Locale OpenRyujinxLogsTooltip}" /> @@ -167,7 +167,7 @@ Header="{ext:Locale MenuBarShowFileTypes}" /> @@ -276,52 +275,55 @@ - - + + - + - - - - + + + + + diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index be444faa4..0885349f8 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -1,13 +1,15 @@ using Avalonia; using Avalonia.Controls; -using Avalonia.Interactivity; +using Avalonia.Layout; using Avalonia.Threading; +using CommunityToolkit.Mvvm.Input; using Gommon; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Utilities.Compat; using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Helper; @@ -16,6 +18,7 @@ using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Views.Main { @@ -33,9 +36,37 @@ namespace Ryujinx.Ava.UI.Views.Main ToggleFileTypesMenuItem.ItemsSource = GenerateToggleFileTypeItems(); ChangeLanguageMenuItem.ItemsSource = GenerateLanguageMenuItems(); + + MiiAppletMenuItem.Command = new AsyncRelayCommand(OpenMiiApplet); + CloseRyujinxMenuItem.Command = new RelayCommand(CloseWindow); + OpenSettingsMenuItem.Command = new AsyncRelayCommand(OpenSettings); + PauseEmulationMenuItem.Command = new RelayCommand(() => ViewModel.AppHost?.Pause()); + ResumeEmulationMenuItem.Command = new RelayCommand(() => ViewModel.AppHost?.Resume()); + StopEmulationMenuItem.Command = new AsyncRelayCommand(() => ViewModel.AppHost?.ShowExitPrompt().OrCompleted()); + CheatManagerMenuItem.Command = new AsyncRelayCommand(OpenCheatManagerForCurrentApp); + InstallFileTypesMenuItem.Command = new AsyncRelayCommand(InstallFileTypes); + UninstallFileTypesMenuItem.Command = new AsyncRelayCommand(UninstallFileTypes); + XciTrimmerMenuItem.Command = new AsyncRelayCommand(() => XCITrimmerWindow.Show(ViewModel)); + AboutWindowMenuItem.Command = new AsyncRelayCommand(AboutWindow.Show); + CompatibilityListMenuItem.Command = new AsyncRelayCommand(CompatibilityList.Show); + + UpdateMenuItem.Command = new AsyncRelayCommand(async () => + { + if (Updater.CanUpdate(true)) + await Updater.BeginUpdateAsync(true); + }); + + FaqMenuItem.Command = + SetupGuideMenuItem.Command = + LdnGuideMenuItem.Command = new RelayCommand(OpenHelper.OpenUrl); + + WindowSize720PMenuItem.Command = + WindowSize1080PMenuItem.Command = + WindowSize1440PMenuItem.Command = + WindowSize2160PMenuItem.Command = new RelayCommand(ChangeWindowSize); } - private CheckBox[] GenerateToggleFileTypeItems() => + private IEnumerable GenerateToggleFileTypeItems() => Enum.GetValues() .Select(it => (FileName: Enum.GetName(it)!, FileType: it)) .Select(it => @@ -45,15 +76,13 @@ namespace Ryujinx.Ava.UI.Views.Main IsChecked = it.FileType.GetConfigValue(ConfigurationState.Instance.UI.ShownFileTypes), Command = MiniCommand.Create(() => Window.ToggleFileType(it.FileName)) } - ).ToArray(); + ); - private static MenuItem[] GenerateLanguageMenuItems() + private static IEnumerable GenerateLanguageMenuItems() { - List menuItems = new(); + const string LocalePath = "Ryujinx/Assets/locales.json"; - string localePath = "Ryujinx/Assets/locales.json"; - - string languageJson = EmbeddedResources.ReadAllText(localePath); + string languageJson = EmbeddedResources.ReadAllText(LocalePath); LocalesJson locales = JsonHelper.Deserialize(languageJson, LocalesJsonContext.Default.LocalesJson); @@ -68,20 +97,23 @@ namespace Ryujinx.Ava.UI.Views.Main } else { - languageName = locales.Locales[index].Translations[language] == "" ? language : locales.Locales[index].Translations[language]; + string tr = locales.Locales[index].Translations[language]; + languageName = string.IsNullOrEmpty(tr) + ? language + : tr; } MenuItem menuItem = new() { - Padding = new Thickness(10, 0, 0, 0), - Header = " " + languageName, + Padding = new Thickness(15, 0, 0, 0), + Margin = new Thickness(3, 0, 3, 0), + HorizontalAlignment = HorizontalAlignment.Stretch, + Header = languageName, Command = MiniCommand.Create(() => MainWindowViewModel.ChangeLanguage(language)) }; - menuItems.Add(menuItem); + yield return menuItem; } - - return menuItems.ToArray(); } protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) @@ -95,22 +127,7 @@ namespace Ryujinx.Ava.UI.Views.Main } } - private async void StopEmulation_Click(object sender, RoutedEventArgs e) - { - await ViewModel.AppHost?.ShowExitPrompt().OrCompleted()!; - } - - private void PauseEmulation_Click(object sender, RoutedEventArgs e) - { - ViewModel.AppHost?.Pause(); - } - - private void ResumeEmulation_Click(object sender, RoutedEventArgs e) - { - ViewModel.AppHost?.Resume(); - } - - public async void OpenSettings(object sender, RoutedEventArgs e) + public async Task OpenSettings() { Window.SettingsWindow = new(Window.VirtualFileSystem, Window.ContentManager); @@ -123,7 +140,7 @@ namespace Ryujinx.Ava.UI.Views.Main public static readonly AppletMetadata MiiApplet = new("miiEdit", 0x0100000000001009); - public async void OpenMiiApplet(object sender, RoutedEventArgs e) + public async Task OpenMiiApplet() { if (MiiApplet.CanStart(ViewModel.ContentManager, out var appData, out var nacpData)) { @@ -131,13 +148,7 @@ namespace Ryujinx.Ava.UI.Views.Main } } - public async void OpenAmiiboWindow(object sender, RoutedEventArgs e) - => await ViewModel.OpenAmiiboWindow(); - - public async void OpenBinFile(object sender, RoutedEventArgs e) - => await ViewModel.OpenBinFile(); - - public async void OpenCheatManagerForCurrentApp(object sender, RoutedEventArgs e) + public async Task OpenCheatManagerForCurrentApp() { if (!ViewModel.IsGameRunning) return; @@ -165,7 +176,7 @@ namespace Ryujinx.Ava.UI.Views.Main ViewModel.IsAmiiboBinRequested = ViewModel.IsAmiiboRequested && AmiiboBinReader.HasAmiiboKeyFile; } - private async void InstallFileTypes_Click(object sender, RoutedEventArgs e) + private async Task InstallFileTypes() { ViewModel.AreMimeTypesRegistered = FileAssociationHelper.Install(); if (ViewModel.AreMimeTypesRegistered) @@ -174,7 +185,7 @@ namespace Ryujinx.Ava.UI.Views.Main await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesErrorMessage]); } - private async void UninstallFileTypes_Click(object sender, RoutedEventArgs e) + private async Task UninstallFileTypes() { ViewModel.AreMimeTypesRegistered = !FileAssociationHelper.Uninstall(); if (!ViewModel.AreMimeTypesRegistered) @@ -183,11 +194,8 @@ namespace Ryujinx.Ava.UI.Views.Main await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogUninstallFileTypesErrorMessage]); } - private async void ChangeWindowSize_Click(object sender, RoutedEventArgs e) + private void ChangeWindowSize(string resolution) { - if (sender is not MenuItem { Tag: string resolution }) - return; - (int resolutionWidth, int resolutionHeight) = resolution.Split(' ', 2) .Into(parts => (int.Parse(parts[0]), int.Parse(parts[1])) @@ -200,7 +208,7 @@ namespace Ryujinx.Ava.UI.Views.Main double windowWidthScaled = (resolutionWidth * Program.WindowScaleFactor); double windowHeightScaled = ((resolutionHeight + barsHeight) * Program.WindowScaleFactor); - await Dispatcher.UIThread.InvokeAsync(() => + Dispatcher.UIThread.Post(() => { ViewModel.WindowState = WindowState.Normal; @@ -208,22 +216,7 @@ namespace Ryujinx.Ava.UI.Views.Main }); } - public async void CheckForUpdates(object sender, RoutedEventArgs e) - { - if (Updater.CanUpdate(true)) - await Updater.BeginUpdateAsync(true); - } - - private void MenuItem_OnClick(object sender, RoutedEventArgs e) - { - if (sender is MenuItem { Tag: string url }) - OpenHelper.OpenUrl(url); - } - - public async void OpenXCITrimmerWindow(object sender, RoutedEventArgs e) => await XCITrimmerWindow.Show(ViewModel); - - public async void OpenAboutWindow(object sender, RoutedEventArgs e) => await AboutWindow.Show(); - - public void CloseWindow(object sender, RoutedEventArgs e) => Window.Close(); + public void CloseWindow() => Window.Close(); + } } diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index 087112368..f1900a69a 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -37,7 +37,7 @@ ToolTip.Tip="{Binding DirtyHacks.Xc2MenuFixTooltip}"> + IsChecked="{Binding DirtyHacks.Xc2MenuSoftlockFix}"/> @@ -54,21 +54,27 @@ - + + + + diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml b/src/Ryujinx/UI/Windows/MainWindow.axaml index cb2e5936d..3326c36b7 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml @@ -40,6 +40,7 @@ + diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml index 3a1c4e6dd..a8fd3a2e7 100644 --- a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml +++ b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml @@ -93,6 +93,7 @@ Padding="10" MinWidth="0" MinHeight="0" + ToolTip.Tip="{Binding Path}" Click="OpenLocation"> + DataType="viewModels:TitleUpdateViewModelNoUpdate"> diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index 28b4262f1..e79602eaf 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -1,4 +1,5 @@ using DynamicData; +using DynamicData.Kernel; using Gommon; using LibHac; using LibHac.Common; @@ -1069,10 +1070,11 @@ namespace Ryujinx.Ava.Utilities.AppLibrary { if (update == null) return false; - var currentlySelected = TitleUpdates.Items.FindFirst(it => + var currentlySelected = TitleUpdates.Items.FirstOrOptional(it => it.TitleUpdate.TitleIdBase == update.TitleIdBase && it.IsSelected); - var shouldSelect = currentlySelected.Check(curr => curr.TitleUpdate?.Version < update.Version); + var shouldSelect = !currentlySelected.HasValue || + currentlySelected.Value.TitleUpdate.Version < update.Version; _titleUpdates.AddOrUpdate((update, shouldSelect)); @@ -1463,7 +1465,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary TitleUpdatesHelper.LoadTitleUpdatesJson(_virtualFileSystem, application.IdBase); it.AddOrUpdate(savedUpdates); - var selectedUpdate = savedUpdates.FindFirst(update => update.IsSelected); + var selectedUpdate = savedUpdates.FirstOrOptional(update => update.IsSelected); if (TryGetTitleUpdatesFromFile(application.Path, out var bundledUpdates)) { @@ -1475,10 +1477,11 @@ namespace Ryujinx.Ava.Utilities.AppLibrary if (!savedUpdateLookup.Contains(update)) { bool shouldSelect = false; - if (selectedUpdate.Check(su => su.Update?.Version < update.Version)) + if (!selectedUpdate.HasValue || selectedUpdate.Value.Item1.Version < update.Version) { shouldSelect = true; - _titleUpdates.AddOrUpdate((selectedUpdate.Value.Update, false)); + if (selectedUpdate.HasValue) + _titleUpdates.AddOrUpdate((selectedUpdate.Value.Update, false)); selectedUpdate = (update, true); } diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs new file mode 100644 index 000000000..8a3482c01 --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs @@ -0,0 +1,153 @@ +using Gommon; +using nietras.SeparatedValues; +using Ryujinx.Ava.Common.Locale; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace Ryujinx.Ava.Utilities.Compat +{ + public class CompatibilityCsv + { + public static CompatibilityCsv Shared { get; set; } + + public CompatibilityCsv(SepReader reader) + { + var entries = new List(); + + foreach (var row in reader) + { + entries.Add(new CompatibilityEntry(reader.Header, row)); + } + + Entries = entries.Where(x => x.Status != null) + .OrderBy(it => it.GameName).ToArray(); + } + + public CompatibilityEntry[] Entries { get; } + } + + public class CompatibilityEntry + { + public CompatibilityEntry(SepReaderHeader header, SepReader.Row row) + { + if (row.ColCount != header.ColNames.Count) + throw new InvalidDataException($"CSV row {row.RowIndex} ({row.ToString()}) has mismatched column count"); + + var titleIdRow = ColStr(row[header.IndexOf("\"extracted_game_id\"")]); + TitleId = !string.IsNullOrEmpty(titleIdRow) + ? titleIdRow + : default(Optional); + + var issueTitleRow = ColStr(row[header.IndexOf("\"issue_title\"")]); + if (TitleId.HasValue) + issueTitleRow = issueTitleRow.ReplaceIgnoreCase($" - {TitleId}", string.Empty); + + GameName = issueTitleRow.Trim().Trim('"'); + + IssueLabels = ColStr(row[header.IndexOf("\"issue_labels\"")]).Split(';'); + Status = ColStr(row[header.IndexOf("\"extracted_status\"")]).ToLower() switch + { + "playable" => LocaleKeys.CompatibilityListPlayable, + "ingame" => LocaleKeys.CompatibilityListIngame, + "menus" => LocaleKeys.CompatibilityListMenus, + "boots" => LocaleKeys.CompatibilityListBoots, + "nothing" => LocaleKeys.CompatibilityListNothing, + _ => null + }; + + if (DateTime.TryParse(ColStr(row[header.IndexOf("\"last_event_date\"")]), out var dt)) + LastEvent = dt; + + return; + + string ColStr(SepReader.Col col) => col.ToString().Trim('"'); + } + + public string GameName { get; } + public Optional TitleId { get; } + public string[] IssueLabels { get; } + public LocaleKeys? Status { get; } + public DateTime LastEvent { get; } + + public string LocalizedStatus => LocaleManager.Instance[Status!.Value]; + public string FormattedTitleId => TitleId + .OrElse(new string(' ', 16)); + + public string FormattedIssueLabels => IssueLabels + .Where(it => !it.StartsWithIgnoreCase("status")) + .Select(FormatLabelName) + .JoinToString(", "); + + public override string ToString() + { + var sb = new StringBuilder("CompatibilityEntry: {"); + sb.Append($"{nameof(GameName)}=\"{GameName}\", "); + sb.Append($"{nameof(TitleId)}={TitleId}, "); + sb.Append($"{nameof(IssueLabels)}=\"{IssueLabels}\", "); + sb.Append($"{nameof(Status)}=\"{Status}\", "); + sb.Append($"{nameof(LastEvent)}=\"{LastEvent}\""); + sb.Append('}'); + + return sb.ToString(); + } + + public static string FormatLabelName(string labelName) => labelName.ToLower() switch + { + "audio" => "Audio", + "bug" => "Bug", + "cpu" => "CPU", + "gpu" => "GPU", + "gui" => "GUI", + "help wanted" => "Help Wanted", + "horizon" => "Horizon", + "infra" => "Project Infra", + "invalid" => "Invalid", + "kernel" => "Kernel", + "ldn" => "LDN", + "linux" => "Linux", + "macos" => "macOS", + "question" => "Question", + "windows" => "Windows", + "graphics-backend:opengl" => "Graphics: OpenGL", + "graphics-backend:vulkan" => "Graphics: Vulkan", + "ldn-works" => "LDN Works", + "ldn-untested" => "LDN Untested", + "ldn-broken" => "LDN Broken", + "ldn-partial" => "Partial LDN", + "nvdec" => "NVDEC", + "services" => "NX Services", + "services-horizon" => "Horizon OS Services", + "slow" => "Runs Slow", + "crash" => "Crashes", + "deadlock" => "Deadlock", + "regression" => "Regression", + "opengl" => "OpenGL", + "opengl-backend-bug" => "OpenGL Backend Bug", + "vulkan-backend-bug" => "Vulkan Backend Bug", + "mac-bug" => "Mac-specific Bug(s)", + "amd-vendor-bug" => "AMD GPU Bug", + "intel-vendor-bug" => "Intel GPU Bug", + "loader-allocator" => "Loader Allocator", + "audout" => "AudOut", + "32-bit" => "32-bit Game", + "UE4" => "Unreal Engine 4", + "homebrew" => "Homebrew Content", + "online-broken" => "Online Broken", + _ => Capitalize(labelName) + }; + + public static string Capitalize(string value) + { + if (value == string.Empty) + return string.Empty; + + var firstChar = value[0]; + var rest = value[1..]; + + return $"{char.ToUpper(firstChar)}{rest}"; + } + } +} diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml new file mode 100644 index 000000000..8e14c3904 --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs new file mode 100644 index 000000000..80f124121 --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -0,0 +1,65 @@ +using Avalonia.Controls; +using Avalonia.Styling; +using FluentAvalonia.UI.Controls; +using nietras.SeparatedValues; +using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.Helpers; +using System.IO; +using System.Reflection; +using System.Threading.Tasks; + +namespace Ryujinx.Ava.Utilities.Compat +{ + public partial class CompatibilityList : UserControl + { + public static async Task Show() + { + if (CompatibilityCsv.Shared is null) + { + await using Stream csvStream = Assembly.GetExecutingAssembly() + .GetManifestResourceStream("RyujinxGameCompatibilityList")!; + csvStream.Position = 0; + + CompatibilityCsv.Shared = new CompatibilityCsv(Sep.Reader().From(csvStream)); + } + + ContentDialog contentDialog = new() + { + PrimaryButtonText = string.Empty, + SecondaryButtonText = string.Empty, + CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose], + Content = new CompatibilityList + { + DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary) + } + }; + + Style closeButton = new(x => x.Name("CloseButton")); + closeButton.Setters.Add(new Setter(WidthProperty, 80d)); + + Style closeButtonParent = new(x => x.Name("CommandSpace")); + closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, Avalonia.Layout.HorizontalAlignment.Right)); + + contentDialog.Styles.Add(closeButton); + contentDialog.Styles.Add(closeButtonParent); + + await ContentDialogHelper.ShowAsync(contentDialog); + } + + public CompatibilityList() + { + InitializeComponent(); + } + + private void TextBox_OnTextChanged(object? sender, TextChangedEventArgs e) + { + if (DataContext is not CompatibilityViewModel cvm) + return; + + if (sender is not TextBox searchBox) + return; + + cvm.Search(searchBox.Text); + } + } +} diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs b/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs new file mode 100644 index 000000000..8140c041f --- /dev/null +++ b/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs @@ -0,0 +1,59 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using ExCSS; +using Gommon; +using Ryujinx.Ava.Utilities.AppLibrary; +using System.Collections.Generic; +using System.Linq; + +namespace Ryujinx.Ava.Utilities.Compat +{ + public partial class CompatibilityViewModel : ObservableObject + { + [ObservableProperty] private bool _onlyShowOwnedGames = true; + + private IEnumerable _currentEntries = CompatibilityCsv.Shared.Entries; + private readonly string[] _ownedGameTitleIds = []; + private readonly ApplicationLibrary _appLibrary; + + public IEnumerable CurrentEntries => OnlyShowOwnedGames + ? _currentEntries.Where(x => + x.TitleId.Check(tid => _ownedGameTitleIds.ContainsIgnoreCase(tid)) + || _appLibrary.Applications.Items.Any(a => a.Name.EqualsIgnoreCase(x.GameName))) + : _currentEntries; + + public CompatibilityViewModel() {} + + public CompatibilityViewModel(ApplicationLibrary appLibrary) + { + _appLibrary = appLibrary; + _ownedGameTitleIds = appLibrary.Applications.Keys.Select(x => x.ToString("X16")).ToArray(); + + PropertyChanged += (_, args) => + { + if (args.PropertyName is nameof(OnlyShowOwnedGames)) + OnPropertyChanged(nameof(CurrentEntries)); + }; + } + + public void Search(string searchTerm) + { + if (string.IsNullOrEmpty(searchTerm)) + { + SetEntries(CompatibilityCsv.Shared.Entries); + return; + } + + SetEntries(CompatibilityCsv.Shared.Entries.Where(x => + x.GameName.ContainsIgnoreCase(searchTerm) + || x.TitleId.Check(tid => tid.ContainsIgnoreCase(searchTerm)))); + } + + private void SetEntries(IEnumerable entries) + { +#pragma warning disable MVVMTK0034 + _currentEntries = entries.ToList(); +#pragma warning restore MVVMTK0034 + OnPropertyChanged(nameof(CurrentEntries)); + } + } +} diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index 4fc25addb..fe5f2c3ad 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -645,6 +645,9 @@ namespace Ryujinx.Ava.Utilities.Configuration private void HackChanged(object sender, ReactiveEventArgs rxe) { + if (!ShowDirtyHacks) + return; + var newHacks = EnabledHacks.Select(x => x.Hack) .JoinToString(", ");