Compare commits

...

39 Commits

Author SHA1 Message Date
WilliamWsyHK
a1d44ec496 Update translation for Traditional Chinese (ryubing/ryujinx!61)
See merge request ryubing/ryujinx!61
2025-06-14 20:06:12 -05:00
GreemDev
bab3beb0ac [ci skip] Forgot closing / lol 2025-06-13 15:51:23 -05:00
GreemDev
aa9e74339b Add support for notifying the update server when a new update has been pushed instead of relying on periodic refreshes 2025-06-13 01:57:54 -05:00
GreemDev
908273d848 [ci skip] UpdateClient package source
https://git.ryujinx.app/ryubing/update-server/-/packages
2025-06-13 01:57:54 -05:00
shinyoyo
b51ad11574 Updated Simplified Chinese translation (ryubing/ryujinx!58)
See merge request ryubing/ryujinx!58
2025-06-11 19:43:50 -05:00
MrKev
ea027d65a7 Structural and Memory Safety Improvements, Analyzer Cleanup (ryubing/ryujinx!47)
See merge request ryubing/ryujinx!47
2025-06-11 17:58:27 -05:00
Coxxs
d03ae9c164 fix: socket blocking flag is inverted when setting it (ryubing/ryujinx!57)
See merge request ryubing/ryujinx!57
2025-06-11 16:44:07 -05:00
Hack茶ん
90e9492f6c Update Korean translation (ryubing/ryujinx!56)
See merge request ryubing/ryujinx!56
2025-06-11 15:37:48 -05:00
mqudsi
512120db04 Work around Escape hotkey race with exit confirmation dialog
See merge request ryubing/ryujinx!54
2025-06-10 22:52:08 -05:00
rockingdice
90582e9e93 fix: crash caused by cursor overflow
See merge request ryubing/ryujinx!53
2025-06-10 16:34:12 -05:00
rockingdice
b97fae08b5 fix: use the correct font family for CJK characters
See merge request ryubing/ryujinx!52
2025-06-10 15:41:39 -05:00
GreemDev
eed6ef632d infra: [ci skip] update CHANGELOG.md 2025-06-09 19:57:31 -05:00
GreemDev
0409c15903 Remove GitHub updater support. 2025-06-09 19:51:53 -05:00
GreemDev
c58272ac20 infra: CI: Remove GitHub release uploading from Stable workflow. 2025-06-09 18:56:28 -05:00
GreemDev
9d83dfd19c misc: [ci skip] Missed the property part of _chosenProfile 2025-06-09 17:59:40 -05:00
GreemDev
ce31a47934 misc: Code styling changes & cleanups 2025-06-09 17:57:26 -05:00
Goodfeat
d31d1f91cf Added the ability to switch between local and global input in the user configuration
See merge request ryubing/ryujinx!8
2025-06-09 17:24:24 -05:00
Goodfeat
ef02194a77 Update: Compatibility list
See merge request ryubing/ryujinx!29
2025-06-09 02:54:45 -05:00
Goodfeat
a16764d191 Moved "Graphics Backend Multitreading" item to Graphics API & Optimization section
See merge request ryubing/ryujinx!13
2025-06-09 02:37:49 -05:00
GreemDev
5108ab790f UI: RPC: [ci skip] Add BL2, BLTPS, and Minecraft Dungeons RPC images 2025-06-09 01:47:57 -05:00
GreemDev
71dc71fee8 infra: [ci skip] Remove duplicate GLI install in canary CI 2025-06-08 22:37:21 -05:00
GreemDev
c95bf748b2 infra: Update to Ryujinx.LibHac 0.20.0
This is identical to the previous version, it's just on NuGet.org so we can comment out the LibHacAlpha source in nuget.config.
2025-06-08 22:31:32 -05:00
GreemDev
b5e9acc50b misc: [ci skip] Cause GitHub fallback properly 2025-06-08 21:06:34 -05:00
GreemDev
e3fba4e32f docs: compat: further clarify the issue with 'FANTASY LIFE i: The Girl Who Steals Time' with 'crash' and 'vulkan-backend-bug' labels. 2025-06-08 20:44:01 -05:00
GreemDev
efa25d471e docs: compat: ingame: FANTASY LIFE i: The Girl Who Steals Time 2025-06-08 20:41:51 -05:00
GreemDev
b37aa61e47 infra: Remove GitHub uploading from Canary CI workflows 2025-06-08 17:55:36 -05:00
GreemDev
8feeb977b7 infra: [ci skip] fix canary changelog generation 2025-06-08 17:47:45 -05:00
GreemDev
b761a2c86d infra: Custom Update server instead of direct GitLab API calls
This reduces the amount of requests for an update from 3 if an update is needed, or 2 if not; to 1 if an update is needed, and none if an update is not. The difference comes from using this update server to check if an update is needed, and not GETing a snippet content for the release channels.
2025-06-08 17:37:34 -05:00
GreemDev
693837dca7 infra: [ci skip] make the canary release notes look nicer 2025-06-05 23:07:02 -05:00
GreemDev
70abff072b canary CI: checkout code before trying to get current revision 2025-06-05 20:56:17 -05:00
GreemDev
1e861b99a9 misc: Update LibHac
See merge request ryubing/libhac!3
2025-06-05 20:45:35 -05:00
GreemDev
13e404bde0 infra: [ci skip] Move tag creation to the end of the build process in CI 2025-06-05 01:57:21 -05:00
KeatonTheBot
04561a0cd3 Vulkan: Use compute shader for non-indirect unsupported topology index buffer conversions
See merge request ryubing/ryujinx!5
2025-06-05 01:19:44 -05:00
GreemDev
0652d7e740 misc: readme: stable and canary release channels from gitlab 2025-06-04 23:18:44 -05:00
GreemDev
f2aea4fb22 misc: [ci skip] fix typo in comment & rename CheckForUpdateAsync 2025-06-04 21:05:54 -05:00
GreemDev
3950e8adff infra: Embed milestone description in stable release description in CI 2025-06-04 21:05:35 -05:00
GreemDev
0e84f2b1f0 infra: Send a Discord webhook message when a new build is available 2025-06-04 04:31:58 -05:00
TheToid
051c794cc4 Use rcodesign for dylib signing where avaiilable and clear out all "._" files...
See merge request ryubing/ryujinx!14
2025-06-03 23:26:49 -05:00
LotP
053a9cb549 fix: use accurate length for enumerating
See merge request ryubing/ryujinx!49
2025-06-03 23:20:55 -05:00
336 changed files with 2193 additions and 2061 deletions

View File

@ -45,10 +45,10 @@ dotnet_separate_import_directive_groups = false
dotnet_sort_system_directives_first = false dotnet_sort_system_directives_first = false
# this. and Me. preferences # this. and Me. preferences
dotnet_style_qualification_for_event = false:silent dotnet_style_qualification_for_event = false:suggestion
dotnet_style_qualification_for_field = false:silent dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_method = false:silent dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_property = false:silent dotnet_style_qualification_for_property = false:suggestion
# Language keywords vs BCL types preferences # Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true:silent dotnet_style_predefined_type_for_locals_parameters_members = true:silent
@ -257,12 +257,14 @@ csharp_prefer_system_threading_lock = true:suggestion
dotnet_diagnostic.CA1069.severity = none # CA1069: Enums values should not be duplicated dotnet_diagnostic.CA1069.severity = none # CA1069: Enums values should not be duplicated
# Disable Collection initialization can be simplified # Disable Collection initialization can be simplified
dotnet_diagnostic.IDE0028.severity = none dotnet_diagnostic.IDE0028.severity = none
dotnet_diagnostic.IDE0079.severity = none # IDE0079: Remove unnecessary suppression
dotnet_diagnostic.IDE0130.severity = none # IDE0130: Namespace does not match folder structure
dotnet_diagnostic.IDE0300.severity = none dotnet_diagnostic.IDE0300.severity = none
dotnet_diagnostic.IDE0301.severity = none dotnet_diagnostic.IDE0301.severity = none
dotnet_diagnostic.IDE0302.severity = none dotnet_diagnostic.IDE0302.severity = none
dotnet_diagnostic.IDE0305.severity = none dotnet_diagnostic.IDE0305.severity = none
dotnet_diagnostic.CS9113.severity = none # CS9113: Parameter 'value' is unread dotnet_diagnostic.CS9113.severity = none # CS9113: Parameter 'value' is unread
dotnet_diagnostic.IDE0130.severity = none # IDE0130: Namespace does not match folder structure dotnet_diagnostic.CS0649.severity = none # CS0649: Field is never assigned to, and will always have its default value
[src/Ryujinx/UI/ViewModels/**.cs] [src/Ryujinx/UI/ViewModels/**.cs]
# Disable "mark members as static" rule for ViewModels # Disable "mark members as static" rule for ViewModels

View File

@ -24,54 +24,6 @@ env:
RELEASE: 1 RELEASE: 1
jobs: jobs:
tag:
name: Create tag
runs-on: ubuntu-24.04
steps:
- name: Get version info
id: version_info
run: |
echo "build_version=${{ env.RYUJINX_BASE_VERSION }}.${{ github.run_number }}" >> $GITHUB_OUTPUT
echo "prev_build_version=${{ env.RYUJINX_BASE_VERSION }}.$((${{ github.run_number }} - 1))" >> $GITHUB_OUTPUT
shell: bash
- name: Install GitLabCli
run: |
mkdir -p $HOME/.bin
gh release download -R GreemDev/GLI -O gli -p 'GitLabCli-linux_x64'
chmod +x gli
mv gli $HOME/.bin/
echo "$HOME/.bin" >> $GITHUB_PATH
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create GitLab tag
run: gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=CreateTag "Canary-${{ steps.version_info.outputs.build_version }}|master"
- name: Create release
uses: ncipollo/release-action@v1
with:
name: "Canary ${{ steps.version_info.outputs.build_version }}"
tag: ${{ steps.version_info.outputs.build_version }}
body: |
# Canary builds:
These builds are experimental and may sometimes not work, use [regular builds](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/latest) instead if that sounds like something you don't want to deal with.
| Platform | Artifact |
|--|--|
| Windows 64-bit | [Canary Windows Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_CANARY_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
| Windows ARM 64-bit | [Canary Windows ARM Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_CANARY_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_arm64.zip) |
| Linux 64-bit | [Canary Linux Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_CANARY_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
| Linux ARM 64-bit | [Canary Linux ARM Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_CANARY_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
| macOS | [Canary macOS Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_CANARY_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
**[Full Changelog](https://git.ryujinx.app/ryubing/ryujinx/-/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }})**
omitBodyDuringUpdate: true
owner: ${{ secrets.RC_OWNER }}
repo: ${{ secrets.RC_CANARY_NAME }}
token: ${{ secrets.ALT_RELEASE_TOKEN }}
release: release:
name: Release for ${{ matrix.platform.name }} name: Release for ${{ matrix.platform.name }}
runs-on: ${{ matrix.platform.os }} runs-on: ${{ matrix.platform.os }}
@ -91,16 +43,6 @@ jobs:
- name: Overwrite csc problem matcher - name: Overwrite csc problem matcher
run: echo "::add-matcher::.github/csc.json" run: echo "::add-matcher::.github/csc.json"
- name: Install GitLabCli
run: |
mkdir -p $HOME/.bin
gh release download -R GreemDev/GLI -O gli -p 'GitLabCli-linux_x64'
chmod +x gli
mv gli $HOME/.bin/
echo "$HOME/.bin" >> $GITHUB_PATH
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Get version info - name: Get version info
id: version_info id: version_info
@ -202,34 +144,7 @@ jobs:
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage" gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage"
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync" gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-canary-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync"
shell: bash 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,release_output/*AppImage*"
tag: ${{ steps.version_info.outputs.build_version }}
body: |
# Canary builds:
These builds are experimental and may sometimes not work, use [regular builds](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/latest) instead if that sounds like something you don't want to deal with.
| Platform | Artifact |
|--|--|
| Windows 64-bit | [Canary Windows Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_CANARY_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
| Windows ARM 64-bit | [Canary Windows ARM Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_CANARY_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-win_arm64.zip) |
| Linux 64-bit | [Canary Linux Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_CANARY_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
| Linux ARM 64-bit | [Canary Linux ARM Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_CANARY_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
| macOS | [Canary macOS Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_CANARY_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
**[Full Changelog](https://git.ryujinx.app/ryubing/ryujinx/-/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }})**
omitBodyDuringUpdate: true
allowUpdates: true
replacesArtifacts: true
owner: ${{ secrets.RC_OWNER }}
repo: ${{ secrets.RC_CANARY_NAME }}
token: ${{ secrets.ALT_RELEASE_TOKEN }}
macos_release: macos_release:
name: Release MacOS universal name: Release MacOS universal
@ -290,28 +205,15 @@ jobs:
./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish_ava ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 1 ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish_ava ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 1
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|publish_ava/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz" gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=UploadGenericPackage "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|publish_ava/ryujinx-canary-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz"
- name: Pushing new release
uses: ncipollo/release-action@v1
with:
name: "Canary ${{ steps.version_info.outputs.build_version }}"
artifacts: "publish_ava/*.tar.gz"
tag: ${{ steps.version_info.outputs.build_version }}
body: ""
omitBodyDuringUpdate: true
allowUpdates: true
replacesArtifacts: true
owner: ${{ secrets.RC_OWNER }}
repo: ${{ secrets.RC_CANARY_NAME }}
token: ${{ secrets.ALT_RELEASE_TOKEN }}
create_gitlab_release: create_gitlab_release:
name: Create GitLab Release name: Create GitLab Release
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
needs: needs:
- tag
- macos_release - macos_release
- release - release
steps: steps:
- uses: actions/checkout@v4
- name: Get version info - name: Get version info
id: version_info id: version_info
run: | run: |
@ -330,6 +232,18 @@ jobs:
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create tag
run: |
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=CreateTag "Canary-${{ steps.version_info.outputs.build_version }}|${{ steps.version_info.outputs.git_short_hash }}"
- name: Create release - name: Create release
run: | run: |
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=CreateReleaseFromGenericPackageFiles "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|main|Canary ${{ steps.version_info.outputs.build_version }}|**[Full Changelog](https://git.ryujinx.app/ryubing/ryujinx/-/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }})**" gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=CreateReleaseFromGenericPackageFiles "Ryubing-Canary|${{ steps.version_info.outputs.build_version }}|main|Canary ${{ steps.version_info.outputs.build_version }}|**Full Changelog:** [${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }}](https://git.ryujinx.app/ryubing/ryujinx/-/compare/Canary-${{ steps.version_info.outputs.prev_build_version }}...Canary-${{ steps.version_info.outputs.build_version }})"
- name: Send notification webhook
run: |
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/canary --command=SendUpdateMessage "${{ steps.version_info.outputs.build_version }}|FF4500|${{ secrets.CANARY_DISCORD_WEBHOOK }}|https://avatars.githubusercontent.com/u/192939710?s=200&v=4|false"
- name: Notify update server of new builds
run: |
curl 'https://update.ryujinx.app/api/v1/admin/refresh_cache?rc=canary' -X PATCH -H 'accept: */*' -H 'Authorization: ${{ secrets.UPDATE_SERVER_ADMIN_TOKEN }}'

View File

@ -14,38 +14,6 @@ env:
RELEASE: 1 RELEASE: 1
jobs: jobs:
tag:
name: Create tag
runs-on: ubuntu-24.04
steps:
- name: Get version info
id: version_info
run: |
echo "build_version=${{ env.RYUJINX_BASE_VERSION }}.${{ github.run_number }}" >> $GITHUB_OUTPUT
echo "prev_build_version=${{ env.RYUJINX_BASE_VERSION }}.$((${{ github.run_number }} - 1))" >> $GITHUB_OUTPUT
shell: bash
- name: Create release
uses: ncipollo/release-action@v1
with:
name: ${{ steps.version_info.outputs.build_version }}
tag: ${{ steps.version_info.outputs.build_version }}
body: |
# Stable builds:
| Platform | Artifact |
|--|--|
| Windows 64-bit | [Stable Windows Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
| Windows ARM 64-bit | [Stable Windows ARM Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_arm64.zip) |
| Linux 64-bit | [Stable Linux Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
| Linux ARM 64-bit | [Stable Linux ARM Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
| macOS | [Stable macOS Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
**[Full Changelog](https://git.ryujinx.app/ryubing/ryujinx/-/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }})**
omitBodyDuringUpdate: true
owner: ${{ secrets.RC_OWNER }}
repo: ${{ secrets.RC_STABLE_NAME }}
token: ${{ secrets.ALT_RELEASE_TOKEN }}
release: release:
name: Release for ${{ matrix.platform.name }} name: Release for ${{ matrix.platform.name }}
runs-on: ${{ matrix.platform.os }} runs-on: ${{ matrix.platform.os }}
@ -169,30 +137,6 @@ jobs:
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=UploadGenericPackage "Ryubing|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync" gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=UploadGenericPackage "Ryubing|${{ steps.version_info.outputs.build_version }}|release_output/ryujinx-$BUILD_VERSION-$ARCH_NAME.AppImage.zsync"
shell: bash 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,release_output/*AppImage*"
tag: ${{ steps.version_info.outputs.build_version }}
body: |
# Stable builds:
| Platform | Artifact |
|--|--|
| Windows 64-bit | [Stable Windows Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_x64.zip) |
| Windows ARM 64-bit | [Stable Windows ARM Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-win_arm64.zip) |
| Linux 64-bit | [Stable Linux Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_x64.tar.gz) |
| Linux ARM 64-bit | [Stable Linux ARM Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-linux_arm64.tar.gz) |
| macOS | [Stable macOS Artifact](https://github.com/${{ secrets.RC_OWNER }}/${{ secrets.RC_STABLE_NAME }}/releases/download/${{ steps.version_info.outputs.build_version }}/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz) |
**[Full Changelog](https://git.ryujinx.app/ryubing/ryujinx/-/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }})**
omitBodyDuringUpdate: true
allowUpdates: true
replacesArtifacts: true
owner: ${{ secrets.RC_OWNER }}
repo: ${{ secrets.RC_STABLE_NAME }}
token: ${{ secrets.ALT_RELEASE_TOKEN }}
macos_release: macos_release:
name: Release MacOS universal name: Release MacOS universal
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
@ -249,26 +193,11 @@ jobs:
run: | run: |
./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 0 ./distribution/macos/create_macos_build_ava.sh . publish_tmp_ava publish ./distribution/macos/entitlements.xml "${{ steps.version_info.outputs.build_version }}" "${{ steps.version_info.outputs.git_short_hash }}" Release 0
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=UploadGenericPackage "Ryubing|${{ steps.version_info.outputs.build_version }}|publish/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz" gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=UploadGenericPackage "Ryubing|${{ steps.version_info.outputs.build_version }}|publish/ryujinx-${{ steps.version_info.outputs.build_version }}-macos_universal.app.tar.gz"
- name: Pushing new release
uses: ncipollo/release-action@v1
with:
name: ${{ steps.version_info.outputs.build_version }}
artifacts: "publish/*.tar.gz"
tag: ${{ steps.version_info.outputs.build_version }}
body: ""
omitBodyDuringUpdate: true
allowUpdates: true
replacesArtifacts: true
owner: ${{ secrets.RC_OWNER }}
repo: ${{ secrets.RC_STABLE_NAME }}
token: ${{ secrets.ALT_RELEASE_TOKEN }}
create_gitlab_release: create_gitlab_release:
name: Create GitLab Release name: Create GitLab Release
runs-on: ubuntu-24.04 runs-on: ubuntu-24.04
needs: needs:
- tag
- macos_release - macos_release
- release - release
steps: steps:
@ -294,4 +223,12 @@ jobs:
- name: Create release - name: Create release
run: | run: |
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=CreateReleaseFromGenericPackageFiles "Ryubing|${{ steps.version_info.outputs.build_version }}|${{ steps.version_info.outputs.git_short_hash }}|${{ steps.version_info.outputs.build_version }}|**[Full Changelog](https://git.ryujinx.app/ryubing/ryujinx/-/compare/${{ steps.version_info.outputs.prev_build_version }}...${{ steps.version_info.outputs.build_version }})**" gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=CreateReleaseFromGenericPackageFiles "Ryubing|${{ steps.version_info.outputs.build_version }}|${{ steps.version_info.outputs.git_short_hash }}|${{ steps.version_info.outputs.build_version }}|msd:${{ steps.version_info.outputs.build_version }}"
- name: Send notification webhook
run: |
gli --access-token=${{ secrets.GITLAB_TOKEN }} --project=ryubing/ryujinx --command=SendUpdateMessage "${{ steps.version_info.outputs.build_version }}|32cd32|${{ secrets.STABLE_DISCORD_WEBHOOK }}|https://avatars.githubusercontent.com/u/192939710?s=200&v=4|false"
- name: Notify update server of new builds
run: |
curl 'https://update.ryujinx.app/api/v1/admin/refresh_cache?rc=stable' -X PATCH -H 'accept: */*' -H 'Authorization: ${{ secrets.UPDATE_SERVER_ADMIN_TOKEN }}'

View File

@ -2,20 +2,17 @@
All updates to this Ryujinx branch will be documented in this file. All updates to this Ryujinx branch will be documented in this file.
## [1.3.2](<https://git.ryujinx.app/ryubing/ryujinx/-/releases/1.3.2>) - 2025-06-09
## [1.3.1](<https://git.ryujinx.app/ryubing/ryujinx/-/releases/1.3.1>) - 2025-04-23 ## [1.3.1](<https://git.ryujinx.app/ryubing/ryujinx/-/releases/1.3.1>) - 2025-04-23
A list of notable changes can be found on the release linked in the version number above.
## [1.2.86](<https://github.com/Ryubing/Stable-Releases/releases/tag/1.2.86>) - 2025-03-13 ## [1.2.86](<https://github.com/Ryubing/Stable-Releases/releases/tag/1.2.86>) - 2025-03-13
A list of notable changes can be found on the release linked in the version number above.
## [1.2.82](<https://web.archive.org/web/20250312010534/https://github.com/Ryubing/Ryujinx/releases/tag/1.2.82>) - 2025-02-16 ## [1.2.82](<https://web.archive.org/web/20250312010534/https://github.com/Ryubing/Ryujinx/releases/tag/1.2.82>) - 2025-02-16
A list of notable changes can be found on the release linked in the version number above.
## [1.2.80-81](<https://web.archive.org/web/20250302064257/https://github.com/Ryubing/Ryujinx/releases/tag/1.2.81>) - 2025-01-22 ## [1.2.80-81](<https://web.archive.org/web/20250302064257/https://github.com/Ryubing/Ryujinx/releases/tag/1.2.81>) - 2025-01-22
A list of notable changes can be found on the release linked in the version number above.
## [1.2.78](<https://web.archive.org/web/20250301174537/https://github.com/Ryubing/Ryujinx/releases/tag/1.2.78>) - 2024-12-19 ## [1.2.78](<https://web.archive.org/web/20250301174537/https://github.com/Ryubing/Ryujinx/releases/tag/1.2.78>) - 2024-12-19
A list of notable changes can be found on the release linked in the version number above.
## [1.2.73-1.2.76](<https://web.archive.org/web/20250209202612/https://github.com/Ryubing/Ryujinx/releases/tag/1.2.76>) - 2024-11-19 ## [1.2.73-1.2.76](<https://web.archive.org/web/20250209202612/https://github.com/Ryubing/Ryujinx/releases/tag/1.2.76>) - 2024-11-19
A list of notable changes can be found on the release linked in the version number above. A list of notable changes can be found on the release linked in the version number above.
@ -254,4 +251,4 @@ Added Low-power PPTC mode strings to the translation files.
- Autoload DLC/Updates from dir ([#12](https://github.com/GreemDev/Ryujinx/pull/12)). - Autoload DLC/Updates from dir ([#12](https://github.com/GreemDev/Ryujinx/pull/12)).
- Changed executable icon to rainbow logo. - Changed executable icon to rainbow logo.
- Extract Data > Logo now also extracts the square thumbnail you see for the game in the UI. - Extract Data > Logo now also extracts the square thumbnail you see for the game in the UI.
- The "use random UUID hack" checkbox in the Amiibo screen now remembers its last state when you reopen the window in a given session. - The "use random UUID hack" checkbox in the Amiibo screen now remembers its last state when you reopen the window in a given session.

View File

@ -40,7 +40,7 @@
<PackageVersion Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" /> <PackageVersion Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" />
<PackageVersion Include="Ryujinx.Graphics.Nvdec.Dependencies.AllArch" Version="6.1.2-build3" /> <PackageVersion Include="Ryujinx.Graphics.Nvdec.Dependencies.AllArch" Version="6.1.2-build3" />
<PackageVersion Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" /> <PackageVersion Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" />
<PackageVersion Include="Ryujinx.LibHac" Version="0.20.0-alpha.107" /> <PackageVersion Include="Ryujinx.LibHac" Version="0.20.0" />
<PackageVersion Include="Ryujinx.SDL2-CS" Version="2.30.0-build32" /> <PackageVersion Include="Ryujinx.SDL2-CS" Version="2.30.0-build32" />
<PackageVersion Include="Gommon" Version="2.7.1.1" /> <PackageVersion Include="Gommon" Version="2.7.1.1" />
<PackageVersion Include="securifybv.ShellLink" Version="0.1.0" /> <PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />

View File

@ -7,8 +7,8 @@
# Ryujinx # Ryujinx
[![Latest release](https://img.shields.io/github/v/release/Ryubing/Stable-Releases?label=stable)](https://github.com/Ryubing/Stable-Releases/releases/latest) [![Latest release](https://img.shields.io/gitlab/v/release/ryubing%2Fryujinx?gitlab_url=https%3A%2F%2Fgit.ryujinx.app&label=stable&color=32cd32)](https://git.ryujinx.app/ryubing/ryujinx/-/releases)
[![Latest canary release](https://img.shields.io/github/v/release/Ryubing/Canary-Releases?label=canary)](https://github.com/Ryubing/Canary-Releases/releases/latest) [![Latest canary release](https://img.shields.io/gitlab/v/release/ryubing%2Fcanary?gitlab_url=https%3A%2F%2Fgit.ryujinx.app&label=canary&color=FF4500)](https://git.ryujinx.app/ryubing/canary/-/releases)
<br> <br>
<a href="https://discord.gg/PEuzjrFXUA"> <a href="https://discord.gg/PEuzjrFXUA">
<img src="https://img.shields.io/discord/1294443224030511104?color=5865F2&label=Ryubing&logo=discord&logoColor=white" alt="Discord"> <img src="https://img.shields.io/discord/1294443224030511104?color=5865F2&label=Ryubing&logo=discord&logoColor=white" alt="Discord">
@ -31,7 +31,7 @@
<br> <br>
This is not a Ryujinx revival project. This is not a Phoenix project. This is not a Ryujinx revival project. This is not a Phoenix project.
<br> <br>
Guides and documentation can be found on the <a href="https://git.ryujinx.app/ryubing/ryujinx/-/wikis/home">Wiki tab</a>. Guides and documentation can be found on the <a href="https://git.ryujinx.app/groups/ryubing/-/wikis/home">Wiki tab</a>.
</p> </p>
<p align="center"> <p align="center">
@ -49,13 +49,13 @@ Stable builds are made every so often, based on the `master` branch, that then g
These stable builds exist so that the end user can get a more **enjoyable and stable experience**. These stable builds exist so that the end user can get a more **enjoyable and stable experience**.
They are released every month or so, to ensure consistent updates, while not being an annoying amount of individual updates to download over the course of that month. They are released every month or so, to ensure consistent updates, while not being an annoying amount of individual updates to download over the course of that month.
You can find the latest stable release [here](https://github.com/Ryubing/Stable-Releases/releases/latest). You can find the stable releases [here](https://git.ryujinx.app/ryubing/ryujinx/-/releases).
Canary builds are compiled automatically for each commit on the `master` branch. Canary builds are compiled automatically for each commit on the `master` branch.
While we strive to ensure optimal stability and performance prior to pushing an update, these builds **may be unstable or completely broken**. While we strive to ensure optimal stability and performance prior to pushing an update, these builds **may be unstable or completely broken**.
These canary builds are only recommended for experienced users. These canary builds are only recommended for experienced users.
You can find the latest canary release [here](https://github.com/Ryubing/Canary-Releases/releases/latest). You can find the canary releases [here](https://git.ryujinx.app/ryubing/canary/-/releases).
## Documentation ## Documentation
@ -111,7 +111,7 @@ See [LICENSE.txt](LICENSE.txt) and [THIRDPARTY.md](distribution/legal/THIRDPARTY
## Credits ## Credits
- [LibHac](https://github.com/Thealexbarney/LibHac) is used for our file-system. - [LibHac](https://git.ryujinx.app/ryubing/libhac) is used for our file-system.
- [AmiiboAPI](https://www.amiiboapi.com) is used in our Amiibo emulation. - [AmiiboAPI](https://www.amiiboapi.com) is used in our Amiibo emulation.
- [ldn_mitm](https://github.com/spacemeowx2/ldn_mitm) is used for one of our available multiplayer modes. - [ldn_mitm](https://github.com/spacemeowx2/ldn_mitm) is used for one of our available multiplayer modes.
- [ShellLink](https://github.com/securifybv/ShellLink) is used for Windows shortcut generation. - [ShellLink](https://github.com/securifybv/ShellLink) is used for Windows shortcut generation.

View File

@ -1847,6 +1847,131 @@
"zh_TW": "路徑" "zh_TW": "路徑"
} }
}, },
{
"ID": "GameListSortStatusNameAscending",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "Όνομα: A-Z",
"en_US": "Title: A-Z",
"es_ES": "Título: A-Z",
"fr_FR": "Titre : A-Z",
"he_IL": "",
"it_IT": "Titolo: A-Z",
"ja_JP": "タイトルA-Z",
"ko_KR": "제목: A-Z",
"no_NO": "Tittel: A-Z",
"pl_PL": "Tytuł: A-Z",
"pt_BR": "Título: A-Z",
"ru_RU": "Название: А-Z",
"sv_SE": "Titel: A-Z",
"th_TH": "ชื่อเรื่อง: A-Z",
"tr_TR": "Başlık: A-Z",
"uk_UA": "Назва: A-Z",
"zh_CN": "标题A-Z",
"zh_TW": "標題A-Z"
}
},
{
"ID": "GameListSortStatusNameDescending",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "Τίτλος: Z-A",
"en_US": "Title: Z-A",
"es_ES": "Título: Z-A",
"fr_FR": "Titre : Z-A",
"he_IL": "",
"it_IT": "Titolo: Z-A",
"ja_JP": "タイトルZ-A",
"ko_KR": "제목: Z-A",
"no_NO": "Tittel: Z-A",
"pl_PL": "Tytuł: Z-A",
"pt_BR": "Título: Z-A",
"ru_RU": "Название: Z-A",
"sv_SE": "Titel: Z-A",
"th_TH": "ชื่อเรื่อง: Z-A",
"tr_TR": "Başlık: Z-A",
"uk_UA": "Назва: Z-A",
"zh_CN": "标题Z-A",
"zh_TW": "標題Z-A"
}
},
{
"ID": "GameListSortStatusDisable",
"Translations": {
"ar_SA": "",
"de_DE": "Status: Deaktiviert",
"el_GR": "Κατάσταση: Απενεργοποιημένο",
"en_US": "Status: Disabled",
"es_ES": "Estado: Desactivado",
"fr_FR": "Statut : Désactivé",
"he_IL": "",
"it_IT": "Stato: Disabilitato",
"ja_JP": "ステータス:無効",
"ko_KR": "상태: 비활성화됨",
"no_NO": "Status: Deaktivert",
"pl_PL": "Status: Wyłączony",
"pt_BR": "Status: Desativado",
"ru_RU": "Статус: Отключено",
"sv_SE": "Status: Inaktiverad",
"th_TH": "",
"tr_TR": "Durum: Devre Dışı",
"uk_UA": "Статус: Вимкнено",
"zh_CN": "状态:禁用",
"zh_TW": "狀態:停用"
}
},
{
"ID": "GameListSortStatusAscending",
"Translations": {
"ar_SA": "الحالة: تصاعدي",
"de_DE": "Status: Aufsteigend",
"el_GR": "Κατάσταση: Αναγόμενη",
"en_US": "Status: Ascending",
"es_ES": "",
"fr_FR": "Statut : Croissant",
"he_IL": "סטטוס: עולה",
"it_IT": "Stato: Crescente",
"ja_JP": "ステータス:昇順",
"ko_KR": "상태: 오름차순",
"no_NO": "Status: Stigende",
"pl_PL": "Stan: Rosnący",
"pt_BR": "Status: Crescente",
"ru_RU": "Статус: По возрастанию",
"sv_SE": "Status: Stigande",
"th_TH": "สถานะ: เพิ่มขึ้น",
"tr_TR": "Durum: Artan",
"uk_UA": "Статус: Зростання",
"zh_CN": "状态:升序",
"zh_TW": "狀態:遞增"
}
},
{
"ID": "GameListSortStatusDescending",
"Translations": {
"ar_SA": "الحالة: تنازلي",
"de_DE": "Status: Absteigend",
"el_GR": "Κατάσταση: Καθοδική",
"en_US": "Status: Descending",
"es_ES": "",
"fr_FR": "Statut : Décroissant",
"he_IL": "סטטוס: יורד",
"it_IT": "Stato: Decrescente",
"ja_JP": "ステータス:降順",
"ko_KR": "상태: 내림차순",
"no_NO": "Status: Synkende",
"pl_PL": "Stan: Malejący",
"pt_BR": "Status: Decrescente",
"ru_RU": "Статус: По Убыванию",
"sv_SE": "Status: Fallande",
"th_TH": "สถานะ: ลดลง",
"tr_TR": "Durum: Azalan",
"uk_UA": "Статус: Зменшення",
"zh_CN": "状态:降序",
"zh_TW": "狀態:遞減"
}
},
{ {
"ID": "GameListHeaderCompatibilityStatus", "ID": "GameListHeaderCompatibilityStatus",
"Translations": { "Translations": {
@ -1969,7 +2094,7 @@
"tr_TR": "Toplam Oyun Süresi: {0}", "tr_TR": "Toplam Oyun Süresi: {0}",
"uk_UA": "", "uk_UA": "",
"zh_CN": "总游戏时间: {0}", "zh_CN": "总游戏时间: {0}",
"zh_TW": "" "zh_TW": "總遊戲時間: {0}"
} }
}, },
{ {
@ -5450,26 +5575,26 @@
{ {
"ID": "SettingsTabGraphicsAPI", "ID": "SettingsTabGraphicsAPI",
"Translations": { "Translations": {
"ar_SA": "API الرسومات ", "ar_SA": "API الرسومات و تحسين",
"de_DE": "Grafik-API", "de_DE": "Grafik-API & Optimierung",
"el_GR": "API Γραφικά", "el_GR": "API Γραφικά & Βελτιστοποίηση",
"en_US": "Graphics API", "en_US": "Graphics API & Optimization",
"es_ES": "API de gráficos", "es_ES": "API de gráficos & Optimización",
"fr_FR": "API Graphique", "fr_FR": "API Graphique & Optimisation",
"he_IL": "ממשק גראפי", "he_IL": "ממשק גראפי & אופטימיזציה",
"it_IT": "API grafica", "it_IT": "API grafica & Ottimizzazione",
"ja_JP": "グラフィックスAPI", "ja_JP": "グラフィックスAPI&最適化",
"ko_KR": "그래픽 API", "ko_KR": "그래픽 API & 최적화",
"no_NO": "Grafikk API", "no_NO": "Grafikk-API & Optimalisering",
"pl_PL": "Graficzne API", "pl_PL": "Graficzne API & Optymalizacja",
"pt_BR": "API gráfica", "pt_BR": "API gráfica & Otimização",
"ru_RU": "Графические API", "ru_RU": "Графический API & Оптимизация",
"sv_SE": "Grafik-API", "sv_SE": "Grafik-API & Optimering",
"th_TH": "API กราฟฟิก", "th_TH": "API กราฟฟิก & การเพิ่มประสิทธิภาพ",
"tr_TR": "Grafikler API", "tr_TR": "Grafikler API & Optimizasyon",
"uk_UA": "Графічний API", "uk_UA": "Графічний API & Оптимізація",
"zh_CN": "图形 API", "zh_CN": "图形 API & 优化",
"zh_TW": "圖形 API" "zh_TW": "圖形 API & 優化"
} }
}, },
{ {
@ -6547,6 +6672,31 @@
"zh_TW": "輸入" "zh_TW": "輸入"
} }
}, },
{
"ID": "SettingsTabInputUseGlobalInput",
"Translations": {
"ar_SA": "إدخال عالمي",
"de_DE": "Globale Eingabe",
"el_GR": "Παγκόσμια εισαγωγή",
"en_US": "Global Input",
"es_ES": "Entrada Global",
"fr_FR": "Saisie Globale",
"he_IL": "קלט גלובלי",
"it_IT": "Input Globale",
"ja_JP": "グローバル入力",
"ko_KR": "글로벌 입력",
"no_NO": "Global Inndata",
"pl_PL": "Globalny Wpis",
"pt_BR": "Entrada Global",
"ru_RU": "Глобальный Ввод",
"sv_SE": "Global Input",
"th_TH": "การป้อนข้อมูลแบบโกลบอล",
"tr_TR": "Küresel Girdi",
"uk_UA": "Глобальний Ввід",
"zh_CN": "全局输入",
"zh_TW": "全域輸入"
}
},
{ {
"ID": "SettingsTabInputEnableDockedMode", "ID": "SettingsTabInputEnableDockedMode",
"Translations": { "Translations": {
@ -7069,7 +7219,7 @@
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
"zh_CN": "发现配置:\n\n名称:\t{0}\nGUID:\t{1}\n\n 正在等待控制器连接...", "zh_CN": "发现配置:\n\n名称:\t{0}\nGUID:\t{1}\n\n 正在等待控制器连接...",
"zh_TW": "" "zh_TW": "找到控制器的配置:\n\n名稱:\t{0}\nGUID:\t{1}\n\n 正在等待控制器連線..."
} }
}, },
{ {
@ -12973,53 +13123,28 @@
} }
}, },
{ {
"ID": "DialogUpdaterFailedToGetVersionMessage", "ID": "DialogUpdaterConvertFailedServerMessage",
"Translations": { "Translations": {
"ar_SA": "حدث خطأ أثناء محاولة الحصول على معلومات الإصدار من إصدار غيت هاب. يمكن أن يحدث هذا إذا تم تجميع إصدار جديد بواسطة إجراءات غيت هاب. جرب مجددا بعد دقائق.", "ar_SA": "",
"de_DE": "Beim Versuch, Veröffentlichungs-Info von GitHub Release zu erhalten, ist ein Fehler aufgetreten. Dies kann aufgrund einer neuen Veröffentlichung, die gerade von GitHub Actions kompiliert wird, verursacht werden.", "de_DE": "",
"el_GR": "Προέκυψε ένα σφάλμα στη λήψη πληροφοριών έκδοσης από τα GitHub Releases. Αυτό δύναται να συμβεί αν μία έκδοση χτίζεται αυτή τη στιγμή στα GitHub Actions. Παρακαλούμε προσπαθήστε αργότερα.", "el_GR": "",
"en_US": "An error occurred while trying to retrieve release information from GitHub. This may happen if a new release is currently being compiled by GitHub Actions. Please try again in a few minutes.", "en_US": "Failed to convert the Ryujinx version received from the update server.",
"es_ES": "Se ha producido un error al intentar obtener información de liberación de GitHub Release. Esto puede ser causado si una nueva versión está siendo compilada por GitHub Actions. Inténtalo de nuevo en unos minutos.", "es_ES": "",
"fr_FR": "Une erreur s'est produite lors de la tentative d'obtention des informations de publication de la version GitHub. Cela peut survenir lorsqu'une nouvelle version est en cours de compilation par GitHub Actions. Réessayez dans quelques minutes.", "fr_FR": "La conversion de la version de Ryujinx reçue du serveur a échoué.",
"he_IL": "אירעה שגיאה בעת ניסיון לקבל עדכונים מ-גיטהב. זה יכול להיגרם אם הגרסה המעודכנת האחרונה נוצרה על ידי פעולות של גיטהב. נסה שוב בעוד מספר דקות.", "he_IL": "",
"it_IT": "Si è verificato un errore durante il tentativo di recuperare le informazioni sulla versione da GitHub Release. Ciò può verificarsi se una nuova versione è in fase di compilazione da GitHub Actions. Riprova tra qualche minuto.", "it_IT": "",
"ja_JP": "Github からのリリース情報取得時にエラーが発生しました. Github Actions でリリースファイルを作成中かもしれません. 後ほどもう一度試してみてください.", "ja_JP": "",
"ko_KR": "GitHub에서 릴리스 정보를 검색하는 동안 오류가 발생했습니다. 현재 GitHub Actions에서 새 릴리스를 컴파일하는 중일 때 발생할 수 있습니다. 몇 분 후에 다시 시도해 주세요.", "ko_KR": "업데이트 서버에서 받은 Ryujinx 버전을 변환하는 데 실패했습니다.",
"no_NO": "En feil oppstod ved forsøk på å få utgivelsesinformasjon fra GitHub Utgivelse. Dette kan forårsakes hvis en ny utgave blir samlet av GitHub Handlinger. Prøv igjen om noen minutter.", "no_NO": "Kunne ikke konvertere Ryujinx-versjonen som ble mottatt fra oppdateringsserveren.",
"pl_PL": "Wystąpił błąd podczas próby uzyskania informacji o obecnej wersji z GitHub Release. Może to być spowodowane nową wersją kompilowaną przez GitHub Actions. Spróbuj ponownie za kilka minut.", "pl_PL": "",
"pt_BR": "Ocorreu um erro ao tentar obter as informações de atualização do GitHub Release. Isso pode ser causado se uma nova versão estiver sendo compilado pelas Ações do GitHub. Tente novamente em alguns minutos.", "pt_BR": "Falha em atualizar a versão do Ryujinx recebida do servidor de atualização.",
"ru_RU": "Произошла ошибка при попытке получить информацию о выпуске от GitHub Release. Это может быть вызвано тем, что в данный момент в GitHub Actions компилируется новый релиз. Повторите попытку позже.", "ru_RU": "",
"sv_SE": "Ett fel inträffade vid försök att hämta information om utgåvan från GitHub. Detta kan hända om en ny utgåva har kompilerats av GitHub Actions. Försök igen om några minuter.", "sv_SE": "",
"th_TH": "เกิดข้อผิดพลาดขณะพยายามรับข้อมูลเวอร์ชั่นจาก GitHub Release ปัญหานี้อาจเกิดขึ้นได้หากมีการรวบรวมเวอร์ชั่นใหม่โดย GitHub โปรดลองอีกครั้งในอีกไม่กี่นาทีข้างหน้า", "th_TH": "",
"tr_TR": "GitHub tarafından sürüm bilgileri alınırken bir hata oluştu. Eğer yeni sürüm için hazırlıklar yapılıyorsa bu hatayı almanız olasıdır. Lütfen birkaç dakika sonra tekrar deneyiniz.", "tr_TR": "",
"uk_UA": "Під час спроби отримати інформацію про випуск із GitHub Release сталася помилка. Це може бути спричинено, якщо новий випуск компілюється GitHub Actions. Повторіть спробу через кілька хвилин.", "uk_UA": "",
"zh_CN": "尝试从 Github 获取版本信息时无效,可能由于 GitHub Actions 正在编译新版本。\n请过一会再试。", "zh_CN": "无法转换从更新服务器接收的 Ryujinx 版本。",
"zh_TW": "嘗試從 GitHub Release 取得發布資訊時發生錯誤。如果 GitHub Actions 正在編譯新版本,則可能會出現這種情況。請幾分鐘後再試一次。" "zh_TW": "無法轉換從更新何服器接收的 Ryujinx 版本。"
}
},
{
"ID": "DialogUpdaterConvertFailedGithubMessage",
"Translations": {
"ar_SA": "فشل تحويل إصدار ريوجينكس المستلم من إصدار غيت هاب.",
"de_DE": "Fehler beim Konvertieren der erhaltenen Ryujinx-Version von GitHub Release.",
"el_GR": "Αποτυχία μετατροπής της ληφθείσας έκδοσης Ryujinx από την έκδοση GitHub.",
"en_US": "Failed to convert the Ryujinx version received from GitHub.",
"es_ES": "No se pudo convertir la versión de Ryujinx recibida de GitHub Release.",
"fr_FR": "Impossible de convertir la version reçue de Ryujinx depuis GitHub Release.",
"he_IL": "המרת גרסת ריוג'ינקס שהתקבלה מ-עדכון הגרסאות של גיטהב נכשלה.",
"it_IT": "La conversione della versione di Ryujinx ricevuta da GitHub Release è fallita.",
"ja_JP": "Github から取得した Ryujinx バージョンの変換に失敗しました.",
"ko_KR": "GitHub에서 받은 Ryujinx 버전을 변환하지 못했습니다.",
"no_NO": "Kan ikke konvertere mottatt Ryujinx-versjon fra GitHub Utgivelse.",
"pl_PL": "Nie udało się przekonwertować otrzymanej wersji Ryujinx z Github Release.",
"pt_BR": "Falha ao converter a versão Ryujinx recebida do GitHub.",
"ru_RU": "Не удалось преобразовать полученную версию Ryujinx из GitHub Release.",
"sv_SE": "Misslyckades med att konvertera mottagen Ryujinx-version från GitHub.",
"th_TH": "ไม่สามารถแปลงเวอร์ชั่น Ryujinx ที่ได้รับจาก GitHub Release",
"tr_TR": "Github Release'den alınan Ryujinx sürümü dönüştürülemedi.",
"uk_UA": "Не вдалося конвертувати отриману версію Ryujinx із випуску GitHub.",
"zh_CN": "无法切换至从 GitHub 接收到的新版 Ryujinx 模拟器。",
"zh_TW": "無法轉換從 GitHub Release 接收到的 Ryujinx 版本。"
} }
}, },
{ {
@ -16422,6 +16547,31 @@
"zh_TW": "瀏覽自訂 GUI 佈景主題" "zh_TW": "瀏覽自訂 GUI 佈景主題"
} }
}, },
{
"ID": "UseGlobalInputTooltip",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "If this option is enabled in custom settings, the global input configuration will be used.\n\nIn the global settings: you can enable or disable it as needed; this setting will be inherited by any new custom configurations created.",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "사용자 지정 설정에서 이 옵션을 활성화하면 전역 입력 구성이 사용됩니다.\n\n전역 설정에서 필요에 따라 활성화하거나 비활성화할 수 있습니다. 이 설정은 새로 생성된 모든 사용자 지정 구성에 상속됩니다.",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "Если эта опция включена в пользовательских настройках, будет использована глобальная конфигурация ввода.\n\nВ глобальных настройках: переключите эту опцию по своему усмотрению, это будет унаследовано для вновь созданых пользовательских конфигураций",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "如果在自定义设置中启用了此选项,则将使用全局输入配置。\n\n在全局设置中: 您可以根据需要启用或禁用它;之后创建的任何自定义配置都将继承此设置。",
"zh_TW": "如果在自訂設定啟用了此選項,則將使用全域輸入配置。\n\n在全域設定中你可以根據需要啟用或停用它之後建立的任何自訂配置都將繼承此設定。"
}
},
{ {
"ID": "DockModeToggleTooltip", "ID": "DockModeToggleTooltip",
"Translations": { "Translations": {
@ -18394,7 +18544,7 @@
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
"zh_CN": "{0} FPS ({1}毫秒)", "zh_CN": "{0} FPS ({1}毫秒)",
"zh_TW": "" "zh_TW": "{0} FPS ({1}毫秒)"
} }
}, },
{ {
@ -23294,7 +23444,7 @@
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
"zh_CN": "查看更新日志", "zh_CN": "查看更新日志",
"zh_TW": "" "zh_TW": "檢視更新日誌"
} }
}, },
{ {
@ -24372,6 +24522,106 @@
"zh_TW": "開啟相容性列表" "zh_TW": "開啟相容性列表"
} }
}, },
{
"ID": "CompatibilityListGamesAndApplications",
"Translations": {
"ar_SA": "",
"de_DE": "Spiele & Anwendungen",
"el_GR": "Παιχνίδια και Εφαρμογές",
"en_US": "Games & Applications",
"es_ES": "Juegos y Aplicaciones",
"fr_FR": "Jeux et Applications",
"he_IL": "משחקים ואפליקציות",
"it_IT": "Giochi e Applicazioni",
"ja_JP": "ゲームとアプリケーション",
"ko_KR": "게임 및 애플리케이션",
"no_NO": "Spill og Applikasjoner",
"pl_PL": "Gry i Aplikacje",
"pt_BR": "Jogos e Aplicativos",
"ru_RU": "Игры и Приложения",
"sv_SE": "Spel och Applikationer",
"th_TH": "",
"tr_TR": "Oyunlar ve Uygulamalar",
"uk_UA": "Ігри та Додатки",
"zh_CN": "游戏和应用程序",
"zh_TW": "遊戲與應用程式"
}
},
{
"ID": "CompatibilityListStatus",
"Translations": {
"ar_SA": "الحالة",
"de_DE": "",
"el_GR": "Κατάσταση",
"en_US": "Status",
"es_ES": "Estado",
"fr_FR": "Statut",
"he_IL": "מצב",
"it_IT": "Stato",
"ja_JP": "状況",
"ko_KR": "상태",
"no_NO": "",
"pl_PL": "Stan",
"pt_BR": "Estado",
"ru_RU": "Статус",
"sv_SE": "",
"th_TH": "สถานะ",
"tr_TR": "Durum",
"uk_UA": "Статус",
"zh_CN": "状态",
"zh_TW": "狀態"
}
},
{
"ID": "CompatibilityListDescription",
"Translations": {
"ar_SA": "",
"de_DE": "Probleme und Merkmale",
"el_GR": "Προβλήματα και Χαρακτηριστικά",
"en_US": "Issues & Features",
"es_ES": "Problemas y Características",
"fr_FR": "Problèmes et Caractéristiques",
"he_IL": "",
"it_IT": "Problemi e Caratteristiche",
"ja_JP": "問題点と特徴",
"ko_KR": "문제점 및 특징",
"no_NO": "Problemer og Egenskaper",
"pl_PL": "Problemy i Cechy",
"pt_BR": "Problemas e Características",
"ru_RU": "Проблемы и Особенности",
"sv_SE": "Problem och Egenskaper",
"th_TH": "",
"tr_TR": "Sorunlar ve Özellikler",
"uk_UA": "Проблеми та Особливості",
"zh_CN": "问题和特性",
"zh_TW": "問題與特性"
}
},
{
"ID": "CompatibilityListInfo",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "Πληροφορίες",
"en_US": "Info",
"es_ES": "Información",
"fr_FR": "",
"he_IL": "מידע",
"it_IT": "",
"ja_JP": "情報",
"ko_KR": "정보",
"no_NO": "",
"pl_PL": "Informacja",
"pt_BR": "",
"ru_RU": "Инфо",
"sv_SE": "",
"th_TH": "",
"tr_TR": "Bilgi",
"uk_UA": "Інфо",
"zh_CN": "信息",
"zh_TW": "資訊"
}
},
{ {
"ID": "CompatibilityListOnlyShowOwnedGames", "ID": "CompatibilityListOnlyShowOwnedGames",
"Translations": { "Translations": {

View File

@ -33,23 +33,29 @@ echo -n "APPL????" > "$APP_BUNDLE_DIRECTORY/Contents/PkgInfo"
echo "Running bundle fix up python script" echo "Running bundle fix up python script"
python3 bundle_fix_up.py "$APP_BUNDLE_DIRECTORY" MacOS/Ryujinx python3 bundle_fix_up.py "$APP_BUNDLE_DIRECTORY" MacOS/Ryujinx
# Resign all dyplib files as ad-hoc after changing them
find "$APP_BUNDLE_DIRECTORY/Contents/Frameworks" -type f -name "*.dylib" -exec codesign --force --sign - {} \;
# Now sign it # Now sign it
echo "Starting signing process" echo "Starting signing process"
if ! [ -x "$(command -v codesign)" ]; if ! [ -x "$(command -v codesign)" ];
then then
if ! [ -x "$(command -v rcodesign)" ]; if ! [ -x "$(command -v rcodesign)" ];
then then
echo "Cannot find rcodesign on your system, please install rcodesign." echo "Cannot find rcodesign on your system, please install rcodesign and ensure it is in your search path."
exit 1 exit 1
fi fi
# cargo install apple-codesign
echo "Using rcodesign for ad-hoc signing" echo "Using rcodesign for ad-hoc signing"
echo "Resigning all frameworks dylib files as ad-hoc"
find "$APP_BUNDLE_DIRECTORY/Contents/Frameworks" -type f -name "*.dylib" -exec rcodesign sign {} \;
echo "Signing app bundle as ad-hoc"
rcodesign sign --entitlements-xml-path "$ENTITLEMENTS_FILE_PATH" "$APP_BUNDLE_DIRECTORY" rcodesign sign --entitlements-xml-path "$ENTITLEMENTS_FILE_PATH" "$APP_BUNDLE_DIRECTORY"
else else
echo "Using codesign for ad-hoc signing" echo "Using codesign for ad-hoc signing"
echo "Resigning all frameworks dylib files as ad-hoc"
find "$APP_BUNDLE_DIRECTORY/Contents/Frameworks" -type f -name "*.dylib" -exec codesign --force --sign - {} \;
echo "Signing app bundle as ad-hoc"
codesign --entitlements "$ENTITLEMENTS_FILE_PATH" -f -s - "$APP_BUNDLE_DIRECTORY" codesign --entitlements "$ENTITLEMENTS_FILE_PATH" -f -s - "$APP_BUNDLE_DIRECTORY"
fi fi

View File

@ -20,6 +20,18 @@ SOURCE_REVISION_ID=$6
CONFIGURATION=$7 CONFIGURATION=$7
CANARY=$8 CANARY=$8
if [[ "$(uname)" == "Darwin" ]]; then
echo "Clearing xattr on all dot undercsore files"
find "$BASE_DIR" -type f -name "._*" -exec sh -c '
for f; do
dir=$(dirname "$f")
base=$(basename "$f")
orig="$dir/${base#._}"
[ -f "$orig" ] && xattr -c "$orig" || true
done
' sh {} +
fi
if [ "$CANARY" == "1" ]; then if [ "$CANARY" == "1" ]; then
RELEASE_TAR_FILE_NAME=ryujinx-canary-$VERSION-macos_universal.app.tar RELEASE_TAR_FILE_NAME=ryujinx-canary-$VERSION-macos_universal.app.tar
elif [ "$VERSION" == "1.1.0" ]; then elif [ "$VERSION" == "1.1.0" ]; then

View File

@ -20,6 +20,18 @@ SOURCE_REVISION_ID=$6
CONFIGURATION=$7 CONFIGURATION=$7
CANARY=$8 CANARY=$8
if [[ "$(uname)" == "Darwin" ]]; then
echo "Clearing xattr on all dot undercsore files"
find "$BASE_DIR" -type f -name "._*" -exec sh -c '
for f; do
dir=$(dirname "$f")
base=$(basename "$f")
orig="$dir/${base#._}"
[ -f "$orig" ] && xattr -c "$orig" || true
done
' sh {} +
fi
if [ "$CANARY" == "1" ]; then if [ "$CANARY" == "1" ]; then
RELEASE_TAR_FILE_NAME=nogui-ryujinx-canary-$VERSION-macos_universal.tar RELEASE_TAR_FILE_NAME=nogui-ryujinx-canary-$VERSION-macos_universal.tar
elif [ "$VERSION" == "1.1.0" ]; then elif [ "$VERSION" == "1.1.0" ]; then

View File

@ -1125,6 +1125,7 @@
0100034012606000,"Family Mysteries: Poisonous Promises",audio;crash,menus,2021-11-26 12:35:06 0100034012606000,"Family Mysteries: Poisonous Promises",audio;crash,menus,2021-11-26 12:35:06
010017C012726000,"Fantasy Friends",,playable,2022-10-17 19:42:39 010017C012726000,"Fantasy Friends",,playable,2022-10-17 19:42:39
0100767008502000,"FANTASY HERO unsigned legacy",,playable,2022-07-26 12:28:52 0100767008502000,"FANTASY HERO unsigned legacy",,playable,2022-07-26 12:28:52
0100755017EE0000,"FANTASY LIFE i: The Girl Who Steals Time",gpu;crash;vulkan-backend-bug,ingame,2025-06-08 20:41:00
0100944003820000,"Fantasy Strike",online,playable,2021-02-27 01:59:18 0100944003820000,"Fantasy Strike",online,playable,2021-02-27 01:59:18
01000E2012F6E000,"Fantasy Tavern Sextet -Vol.1 New World Days-",gpu;crash;Needs Update,ingame,2022-12-05 16:48:00 01000E2012F6E000,"Fantasy Tavern Sextet -Vol.1 New World Days-",gpu;crash;Needs Update,ingame,2022-12-05 16:48:00
01005C10136CA000,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;crash,ingame,2021-11-06 02:57:29 01005C10136CA000,"Fantasy Tavern Sextet -Vol.2 Adventurer's Days-",gpu;slow;crash,ingame,2021-11-06 02:57:29

1 title_id game_name labels status last_updated
1125 0100034012606000 Family Mysteries: Poisonous Promises audio;crash menus 2021-11-26 12:35:06
1126 010017C012726000 Fantasy Friends playable 2022-10-17 19:42:39
1127 0100767008502000 FANTASY HERO ~unsigned legacy~ playable 2022-07-26 12:28:52
1128 0100755017EE0000 FANTASY LIFE i: The Girl Who Steals Time gpu;crash;vulkan-backend-bug ingame 2025-06-08 20:41:00
1129 0100944003820000 Fantasy Strike online playable 2021-02-27 01:59:18
1130 01000E2012F6E000 Fantasy Tavern Sextet -Vol.1 New World Days- gpu;crash;Needs Update ingame 2022-12-05 16:48:00
1131 01005C10136CA000 Fantasy Tavern Sextet -Vol.2 Adventurer's Days- gpu;slow;crash ingame 2021-11-06 02:57:29

View File

@ -4,20 +4,8 @@
<packageSources> <packageSources>
<clear /> <clear />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="LibHacAlpha" value="https://git.ryujinx.app/api/v4/projects/17/packages/nuget/index.json" /> <!-- Only needed when using pre-release versions of Ryujinx.LibHac. -->
<add key="RyubingPkgs" value="https://git.ryujinx.app/api/v4/projects/1/packages/nuget/index.json" /> <!--<add key="LibHacAlpha" value="https://git.ryujinx.app/api/v4/projects/17/packages/nuget/index.json" />-->
<add key="Ryujinx.UpdateClient" value="https://git.ryujinx.app/api/v4/projects/71/packages/nuget/index.json" />
</packageSources> </packageSources>
<!-- Define mappings by adding package patterns beneath the target source. -->
<!-- Ryujinx.LibHac packages will be restored from LibHacAlpha,
everything else from nuget.org. -->
<packageSourceMapping>
<!-- key value for <packageSource> should match key values from <packageSources> element -->
<packageSource key="nuget.org">
<package pattern="*" />
</packageSource>
<packageSource key="LibHacAlpha">
<package pattern="Ryujinx.LibHac" />
</packageSource>
</packageSourceMapping>
</configuration> </configuration>

View File

@ -1129,7 +1129,6 @@ namespace ARMeilleure.CodeGen.Arm64
}; };
} }
#pragma warning disable IDE0051 // Remove unused private member
private void WriteInt16(short value) private void WriteInt16(short value)
{ {
WriteUInt16((ushort)value); WriteUInt16((ushort)value);
@ -1144,7 +1143,6 @@ namespace ARMeilleure.CodeGen.Arm64
{ {
_stream.WriteByte(value); _stream.WriteByte(value);
} }
#pragma warning restore IDE0051
private void WriteUInt16(ushort value) private void WriteUInt16(ushort value)
{ {

View File

@ -1570,13 +1570,11 @@ namespace ARMeilleure.CodeGen.Arm64
Debug.Assert(op1.Type == op3.Type); Debug.Assert(op1.Type == op3.Type);
} }
#pragma warning disable IDE0051 // Remove unused private member
private static void EnsureSameType(Operand op1, Operand op2, Operand op3, Operand op4) private static void EnsureSameType(Operand op1, Operand op2, Operand op3, Operand op4)
{ {
Debug.Assert(op1.Type == op2.Type); Debug.Assert(op1.Type == op2.Type);
Debug.Assert(op1.Type == op3.Type); Debug.Assert(op1.Type == op3.Type);
Debug.Assert(op1.Type == op4.Type); Debug.Assert(op1.Type == op4.Type);
} }
#pragma warning restore IDE0051
} }
} }

View File

@ -1,5 +1,4 @@
using System; using System;
using System.Diagnostics.CodeAnalysis;
namespace ARMeilleure.CodeGen.X86 namespace ARMeilleure.CodeGen.X86
{ {

View File

@ -20,12 +20,12 @@ namespace ARMeilleure.CodeGen.X86
{ {
if (GetCurrentCallConv() == CallConvName.Windows) if (GetCurrentCallConv() == CallConvName.Windows)
{ {
#pragma warning disable IDE0055 // Disable formatting
return (1 << (int)X86Register.Rax) | return (1 << (int)X86Register.Rax) |
(1 << (int)X86Register.Rcx) | (1 << (int)X86Register.Rcx) |
(1 << (int)X86Register.Rdx) | (1 << (int)X86Register.Rdx) |
(1 << (int)X86Register.R8) | (1 << (int)X86Register.R8) |
(1 << (int)X86Register.R9) | (1 << (int)X86Register.R9) |
(1 << (int)X86Register.R10) | (1 << (int)X86Register.R10) |
(1 << (int)X86Register.R11); (1 << (int)X86Register.R11);
} }
@ -36,11 +36,11 @@ namespace ARMeilleure.CodeGen.X86
(1 << (int)X86Register.Rdx) | (1 << (int)X86Register.Rdx) |
(1 << (int)X86Register.Rsi) | (1 << (int)X86Register.Rsi) |
(1 << (int)X86Register.Rdi) | (1 << (int)X86Register.Rdi) |
(1 << (int)X86Register.R8) | (1 << (int)X86Register.R8) |
(1 << (int)X86Register.R9) | (1 << (int)X86Register.R9) |
(1 << (int)X86Register.R10) | (1 << (int)X86Register.R10) |
(1 << (int)X86Register.R11); (1 << (int)X86Register.R11);
#pragma warning restore IDE0055
} }
} }

View File

@ -2,7 +2,6 @@ using ARMeilleure.CodeGen.RegisterAllocators;
using ARMeilleure.IntermediateRepresentation; using ARMeilleure.IntermediateRepresentation;
using Microsoft.IO; using Microsoft.IO;
using Ryujinx.Common.Memory; using Ryujinx.Common.Memory;
using System.IO;
using System.Numerics; using System.Numerics;
namespace ARMeilleure.CodeGen.X86 namespace ARMeilleure.CodeGen.X86

View File

@ -1,5 +1,3 @@
using System.Diagnostics.CodeAnalysis;
namespace ARMeilleure.CodeGen.X86 namespace ARMeilleure.CodeGen.X86
{ {
enum X86Register enum X86Register

View File

@ -8,8 +8,8 @@ namespace ARMeilleure.Instructions
static class CryptoHelper static class CryptoHelper
{ {
#region "LookUp Tables" #region "LookUp Tables"
#pragma warning disable IDE1006 // Naming rule violation
private static ReadOnlySpan<byte> _sBox => private static ReadOnlySpan<byte> SBox =>
[ [
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
@ -29,7 +29,7 @@ namespace ARMeilleure.Instructions
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
]; ];
private static ReadOnlySpan<byte> _invSBox => private static ReadOnlySpan<byte> InvSBox =>
[ [
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
@ -49,7 +49,7 @@ namespace ARMeilleure.Instructions
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
]; ];
private static ReadOnlySpan<byte> _gfMul02 => private static ReadOnlySpan<byte> GfMul02 =>
[ [
0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,
@ -69,7 +69,7 @@ namespace ARMeilleure.Instructions
0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5
]; ];
private static ReadOnlySpan<byte> _gfMul03 => private static ReadOnlySpan<byte> GfMul03 =>
[ [
0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11,
0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21,
@ -89,7 +89,7 @@ namespace ARMeilleure.Instructions
0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a
]; ];
private static ReadOnlySpan<byte> _gfMul09 => private static ReadOnlySpan<byte> GfMul09 =>
[ [
0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77,
0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7,
@ -109,7 +109,7 @@ namespace ARMeilleure.Instructions
0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46
]; ];
private static ReadOnlySpan<byte> _gfMul0B => private static ReadOnlySpan<byte> GfMul0B =>
[ [
0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69,
0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9,
@ -129,7 +129,7 @@ namespace ARMeilleure.Instructions
0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3
]; ];
private static ReadOnlySpan<byte> _gfMul0D => private static ReadOnlySpan<byte> GfMul0D =>
[ [
0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b,
0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b,
@ -149,7 +149,7 @@ namespace ARMeilleure.Instructions
0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97
]; ];
private static ReadOnlySpan<byte> _gfMul0E => private static ReadOnlySpan<byte> GfMul0E =>
[ [
0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a,
0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba,
@ -169,16 +169,16 @@ namespace ARMeilleure.Instructions
0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d
]; ];
private static ReadOnlySpan<byte> _srPerm => private static ReadOnlySpan<byte> SrPerm =>
[ [
0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3 0, 13, 10, 7, 4, 1, 14, 11, 8, 5, 2, 15, 12, 9, 6, 3
]; ];
private static ReadOnlySpan<byte> _isrPerm => private static ReadOnlySpan<byte> IsrPerm =>
[ [
0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12, 1, 6, 11
]; ];
#pragma warning restore IDE1006
#endregion #endregion
public static V128 AesInvMixColumns(V128 op) public static V128 AesInvMixColumns(V128 op)
@ -195,10 +195,10 @@ namespace ARMeilleure.Instructions
byte row2 = inState[idx + 2]; // C, G, K, O: [row2, col0-col3] byte row2 = inState[idx + 2]; // C, G, K, O: [row2, col0-col3]
byte row3 = inState[idx + 3]; // D, H, L, P: [row3, col0-col3] byte row3 = inState[idx + 3]; // D, H, L, P: [row3, col0-col3]
outState[idx + 0] = (byte)((uint)_gfMul0E[row0] ^ _gfMul0B[row1] ^ _gfMul0D[row2] ^ _gfMul09[row3]); outState[idx + 0] = (byte)((uint)GfMul0E[row0] ^ GfMul0B[row1] ^ GfMul0D[row2] ^ GfMul09[row3]);
outState[idx + 1] = (byte)((uint)_gfMul09[row0] ^ _gfMul0E[row1] ^ _gfMul0B[row2] ^ _gfMul0D[row3]); outState[idx + 1] = (byte)((uint)GfMul09[row0] ^ GfMul0E[row1] ^ GfMul0B[row2] ^ GfMul0D[row3]);
outState[idx + 2] = (byte)((uint)_gfMul0D[row0] ^ _gfMul09[row1] ^ _gfMul0E[row2] ^ _gfMul0B[row3]); outState[idx + 2] = (byte)((uint)GfMul0D[row0] ^ GfMul09[row1] ^ GfMul0E[row2] ^ GfMul0B[row3]);
outState[idx + 3] = (byte)((uint)_gfMul0B[row0] ^ _gfMul0D[row1] ^ _gfMul09[row2] ^ _gfMul0E[row3]); outState[idx + 3] = (byte)((uint)GfMul0B[row0] ^ GfMul0D[row1] ^ GfMul09[row2] ^ GfMul0E[row3]);
} }
return new V128(outState); return new V128(outState);
@ -211,7 +211,7 @@ namespace ARMeilleure.Instructions
for (int idx = 0; idx <= 15; idx++) for (int idx = 0; idx <= 15; idx++)
{ {
outState[_isrPerm[idx]] = inState[idx]; outState[IsrPerm[idx]] = inState[idx];
} }
return new V128(outState); return new V128(outState);
@ -224,7 +224,7 @@ namespace ARMeilleure.Instructions
for (int idx = 0; idx <= 15; idx++) for (int idx = 0; idx <= 15; idx++)
{ {
outState[idx] = _invSBox[inState[idx]]; outState[idx] = InvSBox[inState[idx]];
} }
return new V128(outState); return new V128(outState);
@ -244,10 +244,10 @@ namespace ARMeilleure.Instructions
byte row2 = inState[idx + 2]; // C, G, K, O: [row2, col0-col3] byte row2 = inState[idx + 2]; // C, G, K, O: [row2, col0-col3]
byte row3 = inState[idx + 3]; // D, H, L, P: [row3, col0-col3] byte row3 = inState[idx + 3]; // D, H, L, P: [row3, col0-col3]
outState[idx + 0] = (byte)((uint)_gfMul02[row0] ^ _gfMul03[row1] ^ row2 ^ row3); outState[idx + 0] = (byte)((uint)GfMul02[row0] ^ GfMul03[row1] ^ row2 ^ row3);
outState[idx + 1] = (byte)((uint)row0 ^ _gfMul02[row1] ^ _gfMul03[row2] ^ row3); outState[idx + 1] = (byte)((uint)row0 ^ GfMul02[row1] ^ GfMul03[row2] ^ row3);
outState[idx + 2] = (byte)((uint)row0 ^ row1 ^ _gfMul02[row2] ^ _gfMul03[row3]); outState[idx + 2] = (byte)((uint)row0 ^ row1 ^ GfMul02[row2] ^ GfMul03[row3]);
outState[idx + 3] = (byte)((uint)_gfMul03[row0] ^ row1 ^ row2 ^ _gfMul02[row3]); outState[idx + 3] = (byte)((uint)GfMul03[row0] ^ row1 ^ row2 ^ GfMul02[row3]);
} }
return new V128(outState); return new V128(outState);
@ -260,7 +260,7 @@ namespace ARMeilleure.Instructions
for (int idx = 0; idx <= 15; idx++) for (int idx = 0; idx <= 15; idx++)
{ {
outState[_srPerm[idx]] = inState[idx]; outState[SrPerm[idx]] = inState[idx];
} }
return new V128(outState); return new V128(outState);
@ -273,7 +273,7 @@ namespace ARMeilleure.Instructions
for (int idx = 0; idx <= 15; idx++) for (int idx = 0; idx <= 15; idx++)
{ {
outState[idx] = _sBox[inState[idx]]; outState[idx] = SBox[inState[idx]];
} }
return new V128(outState); return new V128(outState);

View File

@ -2,7 +2,6 @@ using ARMeilleure.Decoders;
using ARMeilleure.IntermediateRepresentation; using ARMeilleure.IntermediateRepresentation;
using ARMeilleure.Translation; using ARMeilleure.Translation;
using System; using System;
using System.Diagnostics.CodeAnalysis;
using static ARMeilleure.Instructions.InstEmitHelper; using static ARMeilleure.Instructions.InstEmitHelper;
namespace ARMeilleure.Instructions namespace ARMeilleure.Instructions

View File

@ -11,11 +11,10 @@ using static ARMeilleure.Instructions.InstEmitHelper;
using static ARMeilleure.Instructions.InstEmitSimdHelper; using static ARMeilleure.Instructions.InstEmitSimdHelper;
using static ARMeilleure.Instructions.InstEmitSimdHelper32; using static ARMeilleure.Instructions.InstEmitSimdHelper32;
using static ARMeilleure.IntermediateRepresentation.Operand.Factory; using static ARMeilleure.IntermediateRepresentation.Operand.Factory;
using Func2I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
namespace ARMeilleure.Instructions namespace ARMeilleure.Instructions
{ {
using Func2I = Func<Operand, Operand, Operand>;
static partial class InstEmit static partial class InstEmit
{ {
public static void Abs_S(ArmEmitterContext context) public static void Abs_S(ArmEmitterContext context)

View File

@ -2,15 +2,13 @@ using ARMeilleure.Decoders;
using ARMeilleure.IntermediateRepresentation; using ARMeilleure.IntermediateRepresentation;
using ARMeilleure.State; using ARMeilleure.State;
using ARMeilleure.Translation; using ARMeilleure.Translation;
using System;
using static ARMeilleure.Instructions.InstEmitHelper; using static ARMeilleure.Instructions.InstEmitHelper;
using static ARMeilleure.Instructions.InstEmitSimdHelper; using static ARMeilleure.Instructions.InstEmitSimdHelper;
using static ARMeilleure.IntermediateRepresentation.Operand.Factory; using static ARMeilleure.IntermediateRepresentation.Operand.Factory;
using Func2I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
namespace ARMeilleure.Instructions namespace ARMeilleure.Instructions
{ {
using Func2I = Func<Operand, Operand, Operand>;
static partial class InstEmit static partial class InstEmit
{ {
public static void Cmeq_S(ArmEmitterContext context) public static void Cmeq_S(ArmEmitterContext context)

View File

@ -2,17 +2,15 @@ using ARMeilleure.Decoders;
using ARMeilleure.IntermediateRepresentation; using ARMeilleure.IntermediateRepresentation;
using ARMeilleure.State; using ARMeilleure.State;
using ARMeilleure.Translation; using ARMeilleure.Translation;
using System;
using static ARMeilleure.Instructions.InstEmitHelper; using static ARMeilleure.Instructions.InstEmitHelper;
using static ARMeilleure.Instructions.InstEmitSimdHelper; using static ARMeilleure.Instructions.InstEmitSimdHelper;
using static ARMeilleure.Instructions.InstEmitSimdHelper32; using static ARMeilleure.Instructions.InstEmitSimdHelper32;
using static ARMeilleure.IntermediateRepresentation.Operand.Factory; using static ARMeilleure.IntermediateRepresentation.Operand.Factory;
using Func2I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
namespace ARMeilleure.Instructions namespace ARMeilleure.Instructions
{ {
using Func2I = Func<Operand, Operand, Operand>;
static partial class InstEmit32 static partial class InstEmit32
{ {
public static void Vceq_V(ArmEmitterContext context) public static void Vceq_V(ArmEmitterContext context)

View File

@ -8,11 +8,10 @@ using System.Reflection;
using static ARMeilleure.Instructions.InstEmitHelper; using static ARMeilleure.Instructions.InstEmitHelper;
using static ARMeilleure.Instructions.InstEmitSimdHelper; using static ARMeilleure.Instructions.InstEmitSimdHelper;
using static ARMeilleure.IntermediateRepresentation.Operand.Factory; using static ARMeilleure.IntermediateRepresentation.Operand.Factory;
using Func1I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
namespace ARMeilleure.Instructions namespace ARMeilleure.Instructions
{ {
using Func1I = Func<Operand, Operand>;
static partial class InstEmit static partial class InstEmit
{ {
public static void Fcvt_S(ArmEmitterContext context) public static void Fcvt_S(ArmEmitterContext context)

View File

@ -8,13 +8,12 @@ using System.Diagnostics;
using System.Reflection; using System.Reflection;
using static ARMeilleure.Instructions.InstEmitHelper; using static ARMeilleure.Instructions.InstEmitHelper;
using static ARMeilleure.IntermediateRepresentation.Operand.Factory; using static ARMeilleure.IntermediateRepresentation.Operand.Factory;
using Func1I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
using Func2I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
using Func3I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
namespace ARMeilleure.Instructions namespace ARMeilleure.Instructions
{ {
using Func1I = Func<Operand, Operand>;
using Func2I = Func<Operand, Operand, Operand>;
using Func3I = Func<Operand, Operand, Operand, Operand>;
static class InstEmitSimdHelper static class InstEmitSimdHelper
{ {
#region "Masks" #region "Masks"

View File

@ -7,13 +7,12 @@ using System.Reflection;
using static ARMeilleure.Instructions.InstEmitHelper; using static ARMeilleure.Instructions.InstEmitHelper;
using static ARMeilleure.Instructions.InstEmitSimdHelper; using static ARMeilleure.Instructions.InstEmitSimdHelper;
using static ARMeilleure.IntermediateRepresentation.Operand.Factory; using static ARMeilleure.IntermediateRepresentation.Operand.Factory;
using Func1I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
using Func2I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
using Func3I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
namespace ARMeilleure.Instructions namespace ARMeilleure.Instructions
{ {
using Func1I = Func<Operand, Operand>;
using Func2I = Func<Operand, Operand, Operand>;
using Func3I = Func<Operand, Operand, Operand, Operand>;
static class InstEmitSimdHelper32 static class InstEmitSimdHelper32
{ {
public static (int, int) GetQuadwordAndSubindex(int index, RegisterSize size) public static (int, int) GetQuadwordAndSubindex(int index, RegisterSize size)

View File

@ -7,13 +7,12 @@ using System.Diagnostics;
using static ARMeilleure.Instructions.InstEmitHelper; using static ARMeilleure.Instructions.InstEmitHelper;
using static ARMeilleure.Instructions.InstEmitSimdHelper; using static ARMeilleure.Instructions.InstEmitSimdHelper;
using static ARMeilleure.IntermediateRepresentation.Operand.Factory; using static ARMeilleure.IntermediateRepresentation.Operand.Factory;
using Func1I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
using Func2I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
using Func3I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
namespace ARMeilleure.Instructions namespace ARMeilleure.Instructions
{ {
using Func1I = Func<Operand, Operand>;
using Func2I = Func<Operand, Operand, Operand>;
using Func3I = Func<Operand, Operand, Operand, Operand>;
static class InstEmitSimdHelper32Arm64 static class InstEmitSimdHelper32Arm64
{ {
// Intrinsic Helpers // Intrinsic Helpers

View File

@ -40,34 +40,36 @@ namespace ARMeilleure.Instructions
long offset = 0; long offset = 0;
#pragma warning disable IDE0055 // Disable formatting for (int rep = 0; rep < op.Reps; rep++)
for (int rep = 0; rep < op.Reps; rep++)
for (int elem = 0; elem < op.Elems; elem++)
for (int sElem = 0; sElem < op.SElems; sElem++)
{ {
int rtt = (op.Rt + rep + sElem) & 0x1f; for (int elem = 0; elem < op.Elems; elem++)
Operand tt = GetVec(rtt);
Operand address = context.Add(n, Const(offset));
if (isLoad)
{ {
EmitLoadSimd(context, address, tt, rtt, elem, op.Size); for (int sElem = 0; sElem < op.SElems; sElem++)
if (op.RegisterSize == RegisterSize.Simd64 && elem == op.Elems - 1)
{ {
context.Copy(tt, context.VectorZeroUpper64(tt)); int rtt = (op.Rt + rep + sElem) & 0x1f;
Operand tt = GetVec(rtt);
Operand address = context.Add(n, Const(offset));
if (isLoad)
{
EmitLoadSimd(context, address, tt, rtt, elem, op.Size);
if (op.RegisterSize == RegisterSize.Simd64 && elem == op.Elems - 1)
{
context.Copy(tt, context.VectorZeroUpper64(tt));
}
}
else
{
EmitStoreSimd(context, address, rtt, elem, op.Size);
}
offset += 1 << op.Size;
} }
} }
else
{
EmitStoreSimd(context, address, rtt, elem, op.Size);
}
offset += 1 << op.Size;
} }
#pragma warning restore IDE0055
if (op.WBack) if (op.WBack)
{ {

View File

@ -9,11 +9,10 @@ using System.Reflection;
using static ARMeilleure.Instructions.InstEmitHelper; using static ARMeilleure.Instructions.InstEmitHelper;
using static ARMeilleure.Instructions.InstEmitSimdHelper; using static ARMeilleure.Instructions.InstEmitSimdHelper;
using static ARMeilleure.IntermediateRepresentation.Operand.Factory; using static ARMeilleure.IntermediateRepresentation.Operand.Factory;
using Func2I = System.Func<ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand, ARMeilleure.IntermediateRepresentation.Operand>;
namespace ARMeilleure.Instructions namespace ARMeilleure.Instructions
{ {
using Func2I = Func<Operand, Operand, Operand>;
static partial class InstEmit static partial class InstEmit
{ {
#region "Masks" #region "Masks"

View File

@ -1,5 +1,4 @@
using System; using System;
using System.Diagnostics.CodeAnalysis;
namespace ARMeilleure.IntermediateRepresentation namespace ARMeilleure.IntermediateRepresentation
{ {

View File

@ -7,10 +7,9 @@ namespace ARMeilleure.IntermediateRepresentation
{ {
private struct Data private struct Data
{ {
#pragma warning disable CS0649 // Field is never assigned to
public byte Kind; public byte Kind;
public byte Type; public byte Type;
#pragma warning restore CS0649
public byte Scale; public byte Scale;
public Operand BaseAddress; public Operand BaseAddress;
public Operand Index; public Operand Index;

View File

@ -1,8 +1,8 @@
using Arm64HardwareCapabilities = ARMeilleure.CodeGen.Arm64.HardwareCapabilities;
using X86HardwareCapabilities = ARMeilleure.CodeGen.X86.HardwareCapabilities;
namespace ARMeilleure namespace ARMeilleure
{ {
using Arm64HardwareCapabilities = ARMeilleure.CodeGen.Arm64.HardwareCapabilities;
using X86HardwareCapabilities = ARMeilleure.CodeGen.X86.HardwareCapabilities;
public static class Optimizations public static class Optimizations
{ {
// low-core count PPTC // low-core count PPTC

View File

@ -218,18 +218,28 @@ namespace ARMeilleure.Translation
{ {
switch (condition) switch (condition)
{ {
#pragma warning disable IDE0055 // Disable formatting
case Condition.Eq: return ICompareEqual (n, m); case Condition.Eq:
case Condition.Ne: return ICompareNotEqual (n, m); return ICompareEqual(n, m);
case Condition.GeUn: return ICompareGreaterOrEqualUI(n, m); case Condition.Ne:
case Condition.LtUn: return ICompareLessUI (n, m); return ICompareNotEqual(n, m);
case Condition.GtUn: return ICompareGreaterUI (n, m); case Condition.GeUn:
case Condition.LeUn: return ICompareLessOrEqualUI (n, m); return ICompareGreaterOrEqualUI(n, m);
case Condition.Ge: return ICompareGreaterOrEqual (n, m); case Condition.LtUn:
case Condition.Lt: return ICompareLess (n, m); return ICompareLessUI(n, m);
case Condition.Gt: return ICompareGreater (n, m); case Condition.GtUn:
case Condition.Le: return ICompareLessOrEqual (n, m); return ICompareGreaterUI(n, m);
#pragma warning restore IDE0055 case Condition.LeUn:
return ICompareLessOrEqualUI(n, m);
case Condition.Ge:
return ICompareGreaterOrEqual(n, m);
case Condition.Lt:
return ICompareLess(n, m);
case Condition.Gt:
return ICompareGreater(n, m);
case Condition.Le:
return ICompareLessOrEqual(n, m);
} }
} }
else if (cmpName == InstName.Adds && _optOpLastCompare is IOpCodeAluImm op) else if (cmpName == InstName.Adds && _optOpLastCompare is IOpCodeAluImm op)
@ -254,14 +264,20 @@ namespace ARMeilleure.Translation
switch (condition) switch (condition)
{ {
#pragma warning disable IDE0055 // Disable formatting
case Condition.Eq: return ICompareEqual (n, m); case Condition.Eq:
case Condition.Ne: return ICompareNotEqual (n, m); return ICompareEqual(n, m);
case Condition.Ge: return ICompareGreaterOrEqual(n, m); case Condition.Ne:
case Condition.Lt: return ICompareLess (n, m); return ICompareNotEqual(n, m);
case Condition.Gt: return ICompareGreater (n, m); case Condition.Ge:
case Condition.Le: return ICompareLessOrEqual (n, m); return ICompareGreaterOrEqual(n, m);
#pragma warning restore IDE0055 case Condition.Lt:
return ICompareLess(n, m);
case Condition.Gt:
return ICompareGreater(n, m);
case Condition.Le:
return ICompareLessOrEqual(n, m);
} }
} }

View File

@ -22,12 +22,11 @@ using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Threading; using System.Threading;
using static ARMeilleure.Translation.PTC.PtcFormatter; using static ARMeilleure.Translation.PTC.PtcFormatter;
using Arm64HardwareCapabilities = ARMeilleure.CodeGen.Arm64.HardwareCapabilities;
using X86HardwareCapabilities = ARMeilleure.CodeGen.X86.HardwareCapabilities;
namespace ARMeilleure.Translation.PTC namespace ARMeilleure.Translation.PTC
{ {
using Arm64HardwareCapabilities = CodeGen.Arm64.HardwareCapabilities;
using X86HardwareCapabilities = CodeGen.X86.HardwareCapabilities;
class Ptc : IPtcLoadState class Ptc : IPtcLoadState
{ {
private const string OuterHeaderMagicString = "PTCohd\0\0"; private const string OuterHeaderMagicString = "PTCohd\0\0";
@ -193,7 +192,7 @@ namespace ARMeilleure.Translation.PTC
_infosStream.Seek(0L, SeekOrigin.Begin); _infosStream.Seek(0L, SeekOrigin.Begin);
bool foundBadFunction = false; bool foundBadFunction = false;
for (int index = 0; index < GetEntriesCount(); index++) for (int index = 0; index < _infosStream.Length / Unsafe.SizeOf<InfoEntry>(); index++)
{ {
InfoEntry infoEntry = DeserializeStructure<InfoEntry>(_infosStream); InfoEntry infoEntry = DeserializeStructure<InfoEntry>(_infosStream);
foreach (ulong address in blacklist) foreach (ulong address in blacklist)

View File

@ -297,12 +297,20 @@ namespace ARMeilleure.Translation
switch (register.Type) switch (register.Type)
{ {
#pragma warning disable IDE0055 // Disable formatting
case RegisterType.Flag: intMask = (1L << RegsCount) << register.Index; break; case RegisterType.Flag:
case RegisterType.Integer: intMask = 1L << register.Index; break; intMask = (1L << RegsCount) << register.Index;
case RegisterType.FpFlag: vecMask = (1L << RegsCount) << register.Index; break; break;
case RegisterType.Vector: vecMask = 1L << register.Index; break; case RegisterType.Integer:
#pragma warning restore IDE0055 intMask = 1L << register.Index;
break;
case RegisterType.FpFlag:
vecMask = (1L << RegsCount) << register.Index;
break;
case RegisterType.Vector:
vecMask = 1L << register.Index;
break;
} }
return new RegisterMask(intMask, vecMask); return new RegisterMask(intMask, vecMask);

View File

@ -12,7 +12,7 @@ using static SDL2.SDL;
namespace Ryujinx.Audio.Backends.SDL2 namespace Ryujinx.Audio.Backends.SDL2
{ {
public class SDL2HardwareDeviceDriver : IHardwareDeviceDriver public partial class SDL2HardwareDeviceDriver : IHardwareDeviceDriver
{ {
private readonly ManualResetEvent _updateRequiredEvent; private readonly ManualResetEvent _updateRequiredEvent;
private readonly ManualResetEvent _pauseEvent; private readonly ManualResetEvent _pauseEvent;
@ -22,10 +22,36 @@ namespace Ryujinx.Audio.Backends.SDL2
public float Volume { get; set; } public float Volume { get; set; }
// TODO: Add this to SDL2-CS // A safe method to get default audio information.
// NOTE: We use a DllImport here because of marshaling issue for spec. private static int GetDefaultAudioInfo(nint name, out SDL_AudioSpec spec, int isCapture)
[DllImport("SDL2")] {
private static extern int SDL_GetDefaultAudioInfo(nint name, out SDL_AudioSpec spec, int isCapture); int result;
spec = new SDL_AudioSpec();
IntPtr specPtr = IntPtr.Zero;
try
{
// Reserve memory
specPtr = Marshal.AllocHGlobal(Marshal.SizeOf<SDL_AudioSpec>());
// Call method
result = SDL_GetDefaultAudioInfo(name, specPtr, isCapture);
// Copy result to managed structure
spec = Marshal.PtrToStructure<SDL_AudioSpec>(specPtr);
}
finally
{
// Free the unmanaged memory to prevent memory leaks
if (specPtr != IntPtr.Zero)
{
Marshal.FreeHGlobal(specPtr);
}
}
return result;
}
[LibraryImport("SDL2")]
private static partial int SDL_GetDefaultAudioInfo(nint name, nint spec, int isCapture);
public SDL2HardwareDeviceDriver() public SDL2HardwareDeviceDriver()
{ {
@ -35,7 +61,7 @@ namespace Ryujinx.Audio.Backends.SDL2
SDL2Driver.Instance.Initialize(); SDL2Driver.Instance.Initialize();
int res = SDL_GetDefaultAudioInfo(nint.Zero, out SDL_AudioSpec spec, 0); int res = GetDefaultAudioInfo(nint.Zero, out SDL_AudioSpec spec, 0);
if (res != 0) if (res != 0)
{ {

View File

@ -23,7 +23,7 @@ namespace Ryujinx.Audio.Backends.SoundIo.Native
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void JackCallbackDelegate(nint msg); public delegate void JackCallbackDelegate(nint msg);
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct SoundIoStruct public struct SoundIoStruct
{ {
public nint UserData; public nint UserData;

View File

@ -20,9 +20,7 @@ namespace Ryujinx.Audio.Renderer.Common
public uint Unknown24; public uint Unknown24;
public uint RenderInfoSize; public uint RenderInfoSize;
#pragma warning disable IDE0051, CS0169 // Remove unused field
private Array4<int> _reserved; private Array4<int> _reserved;
#pragma warning restore IDE0051, CS0169
public uint TotalSize; public uint TotalSize;

View File

@ -12,9 +12,8 @@ namespace Ryujinx.Audio.Renderer.Dsp
private const int SamplesPerFrame = 14; private const int SamplesPerFrame = 14;
private const int NibblesPerFrame = SamplesPerFrame + 2; private const int NibblesPerFrame = SamplesPerFrame + 2;
private const int BytesPerFrame = 8; private const int BytesPerFrame = 8;
#pragma warning disable IDE0051 // Remove unused private member
private const int BitsPerFrame = BytesPerFrame * 8; private const int BitsPerFrame = BytesPerFrame * 8;
#pragma warning restore IDE0051
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static uint GetAdpcmDataSize(int sampleCount) public static uint GetAdpcmDataSize(int sampleCount)

View File

@ -41,10 +41,10 @@ namespace Ryujinx.Audio.Renderer.Server
private UpsamplerManager _upsamplerManager; private UpsamplerManager _upsamplerManager;
private bool _isActive; private bool _isActive;
private BehaviourContext _behaviourContext; private BehaviourContext _behaviourContext;
#pragma warning disable IDE0052 // Remove unread private member
private ulong _totalElapsedTicksUpdating; private ulong _totalElapsedTicksUpdating;
private ulong _totalElapsedTicks; private ulong _totalElapsedTicks;
#pragma warning restore IDE0052
private int _sessionId; private int _sessionId;
private Memory<MemoryPoolState> _memoryPools; private Memory<MemoryPoolState> _memoryPools;

View File

@ -147,9 +147,9 @@ namespace Ryujinx.Common.Collections
Queue<Node<TKey, TValue>> nodes = new(); Queue<Node<TKey, TValue>> nodes = new();
if (this.Root != null) if (Root != null)
{ {
nodes.Enqueue(this.Root); nodes.Enqueue(Root);
} }
while (nodes.TryDequeue(out Node<TKey, TValue> node)) while (nodes.TryDequeue(out Node<TKey, TValue> node))
@ -522,7 +522,7 @@ namespace Ryujinx.Common.Collections
public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex) public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
{ {
if (arrayIndex < 0 || array.Length - arrayIndex < this.Count) if (arrayIndex < 0 || array.Length - arrayIndex < Count)
{ {
throw new ArgumentOutOfRangeException(nameof(arrayIndex)); throw new ArgumentOutOfRangeException(nameof(arrayIndex));
} }

View File

@ -36,8 +36,6 @@ namespace Ryujinx.Common.Configuration
}; };
} }
public static float ToFloatY(this AspectRatio aspectRatio) public static float ToFloatY(this AspectRatio aspectRatio)
{ {
return aspectRatio switch return aspectRatio switch

View File

@ -18,8 +18,6 @@ namespace Ryujinx.Common.Configuration
public DirtyHack Hack => hack; public DirtyHack Hack => hack;
public int Value => value; public int Value => value;
public ulong Pack() => Raw.PackBitFields(PackedFormat); public ulong Pack() => Raw.PackBitFields(PackedFormat);
public static EnabledDirtyHack Unpack(ulong packedHack) public static EnabledDirtyHack Unpack(ulong packedHack)

View File

@ -10,7 +10,7 @@ using System.Runtime.Intrinsics.X86;
namespace Ryujinx.Common namespace Ryujinx.Common
{ {
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Hash128(ulong low, ulong high) : IEquatable<Hash128> public struct Hash128(ulong low, ulong high) : IEquatable<Hash128>
{ {
public ulong Low = low; public ulong Low = low;

View File

@ -219,16 +219,34 @@ namespace Ryujinx.Common.Logging
switch (logLevel) switch (logLevel)
{ {
#pragma warning disable IDE0055 // Disable formatting #pragma warning disable IDE0055 // Disable formatting
case LogLevel.Debug : Debug = enabled ? new Log(LogLevel.Debug) : new Log?(); break; case LogLevel.Debug:
case LogLevel.Info : Info = enabled ? new Log(LogLevel.Info) : new Log?(); break; Debug = enabled ? new Log(LogLevel.Debug) : new Log?();
case LogLevel.Warning : Warning = enabled ? new Log(LogLevel.Warning) : new Log?(); break; break;
case LogLevel.Error : Error = enabled ? new Log(LogLevel.Error) : new Log?(); break; case LogLevel.Info:
case LogLevel.Guest : Guest = enabled ? new Log(LogLevel.Guest) : new Log?(); break; Info = enabled ? new Log(LogLevel.Info) : new Log?();
case LogLevel.AccessLog : AccessLog = enabled ? new Log(LogLevel.AccessLog) : new Log?(); break; break;
case LogLevel.Stub : Stub = enabled ? new Log(LogLevel.Stub) : new Log?(); break; case LogLevel.Warning:
case LogLevel.Trace : Trace = enabled ? new Log(LogLevel.Trace) : new Log?(); break; Warning = enabled ? new Log(LogLevel.Warning) : new Log?();
case LogLevel.Notice : break; break;
default: throw new ArgumentException("Unknown Log Level", nameof(logLevel)); case LogLevel.Error:
Error = enabled ? new Log(LogLevel.Error) : new Log?();
break;
case LogLevel.Guest:
Guest = enabled ? new Log(LogLevel.Guest) : new Log?();
break;
case LogLevel.AccessLog:
AccessLog = enabled ? new Log(LogLevel.AccessLog) : new Log?();
break;
case LogLevel.Stub:
Stub = enabled ? new Log(LogLevel.Stub) : new Log?();
break;
case LogLevel.Trace:
Trace = enabled ? new Log(LogLevel.Trace) : new Log?();
break;
case LogLevel.Notice:
break;
default:
throw new ArgumentException("Unknown Log Level", nameof(logLevel));
#pragma warning restore IDE0055 #pragma warning restore IDE0055
} }
} }

View File

@ -2,9 +2,9 @@ using System;
using System.Diagnostics.Contracts; using System.Diagnostics.Contracts;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
#pragma warning disable CS0169, IDE0051 // Remove unused private member
namespace Ryujinx.Common.Memory namespace Ryujinx.Common.Memory
{ {
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array1<T> : IArray<T> where T : unmanaged public struct Array1<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -15,6 +15,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array2<T> : IArray<T> where T : unmanaged public struct Array2<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -26,6 +27,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array3<T> : IArray<T> where T : unmanaged public struct Array3<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -37,6 +39,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array4<T> : IArray<T> where T : unmanaged public struct Array4<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -48,6 +51,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array5<T> : IArray<T> where T : unmanaged public struct Array5<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -59,6 +63,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array6<T> : IArray<T> where T : unmanaged public struct Array6<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -70,6 +75,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array7<T> : IArray<T> where T : unmanaged public struct Array7<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -81,6 +87,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array8<T> : IArray<T> where T : unmanaged public struct Array8<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -92,6 +99,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array9<T> : IArray<T> where T : unmanaged public struct Array9<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -103,6 +111,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array10<T> : IArray<T> where T : unmanaged public struct Array10<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -114,6 +123,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array11<T> : IArray<T> where T : unmanaged public struct Array11<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -125,6 +135,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array12<T> : IArray<T> where T : unmanaged public struct Array12<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -136,6 +147,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array13<T> : IArray<T> where T : unmanaged public struct Array13<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -147,6 +159,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array14<T> : IArray<T> where T : unmanaged public struct Array14<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -158,6 +171,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array15<T> : IArray<T> where T : unmanaged public struct Array15<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -169,6 +183,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array16<T> : IArray<T> where T : unmanaged public struct Array16<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -180,6 +195,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array17<T> : IArray<T> where T : unmanaged public struct Array17<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -191,6 +207,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array18<T> : IArray<T> where T : unmanaged public struct Array18<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -202,6 +219,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array19<T> : IArray<T> where T : unmanaged public struct Array19<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -213,6 +231,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array20<T> : IArray<T> where T : unmanaged public struct Array20<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -224,6 +243,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array21<T> : IArray<T> where T : unmanaged public struct Array21<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -235,6 +255,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array22<T> : IArray<T> where T : unmanaged public struct Array22<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -246,6 +267,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array23<T> : IArray<T> where T : unmanaged public struct Array23<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -257,6 +279,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array24<T> : IArray<T> where T : unmanaged public struct Array24<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -269,6 +292,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array25<T> : IArray<T> where T : unmanaged public struct Array25<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -281,6 +305,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array26<T> : IArray<T> where T : unmanaged public struct Array26<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -293,6 +318,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array27<T> : IArray<T> where T : unmanaged public struct Array27<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -305,6 +331,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array28<T> : IArray<T> where T : unmanaged public struct Array28<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -317,6 +344,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array29<T> : IArray<T> where T : unmanaged public struct Array29<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -329,6 +357,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array30<T> : IArray<T> where T : unmanaged public struct Array30<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -341,6 +370,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array31<T> : IArray<T> where T : unmanaged public struct Array31<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -353,6 +383,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array32<T> : IArray<T> where T : unmanaged public struct Array32<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -365,6 +396,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array33<T> : IArray<T> where T : unmanaged public struct Array33<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -377,6 +409,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array34<T> : IArray<T> where T : unmanaged public struct Array34<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -389,6 +422,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array35<T> : IArray<T> where T : unmanaged public struct Array35<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -401,6 +435,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array36<T> : IArray<T> where T : unmanaged public struct Array36<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -413,6 +448,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array37<T> : IArray<T> where T : unmanaged public struct Array37<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -425,6 +461,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array38<T> : IArray<T> where T : unmanaged public struct Array38<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -437,6 +474,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array39<T> : IArray<T> where T : unmanaged public struct Array39<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -449,6 +487,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array40<T> : IArray<T> where T : unmanaged public struct Array40<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -461,6 +500,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array41<T> : IArray<T> where T : unmanaged public struct Array41<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -473,6 +513,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array42<T> : IArray<T> where T : unmanaged public struct Array42<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -485,6 +526,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array43<T> : IArray<T> where T : unmanaged public struct Array43<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -497,6 +539,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array44<T> : IArray<T> where T : unmanaged public struct Array44<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -509,6 +552,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array45<T> : IArray<T> where T : unmanaged public struct Array45<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -521,6 +565,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array46<T> : IArray<T> where T : unmanaged public struct Array46<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -533,6 +578,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array47<T> : IArray<T> where T : unmanaged public struct Array47<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -545,6 +591,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array48<T> : IArray<T> where T : unmanaged public struct Array48<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -557,6 +604,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array49<T> : IArray<T> where T : unmanaged public struct Array49<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -569,6 +617,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array50<T> : IArray<T> where T : unmanaged public struct Array50<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -581,6 +630,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array51<T> : IArray<T> where T : unmanaged public struct Array51<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -593,6 +643,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array52<T> : IArray<T> where T : unmanaged public struct Array52<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -605,6 +656,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array53<T> : IArray<T> where T : unmanaged public struct Array53<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -617,6 +669,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array54<T> : IArray<T> where T : unmanaged public struct Array54<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -629,6 +682,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array55<T> : IArray<T> where T : unmanaged public struct Array55<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -641,6 +695,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array56<T> : IArray<T> where T : unmanaged public struct Array56<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -653,6 +708,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array57<T> : IArray<T> where T : unmanaged public struct Array57<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -665,6 +721,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array58<T> : IArray<T> where T : unmanaged public struct Array58<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -677,6 +734,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array59<T> : IArray<T> where T : unmanaged public struct Array59<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -689,6 +747,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array60<T> : IArray<T> where T : unmanaged public struct Array60<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -700,6 +759,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array61<T> : IArray<T> where T : unmanaged public struct Array61<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -711,6 +771,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array62<T> : IArray<T> where T : unmanaged public struct Array62<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -722,6 +783,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array63<T> : IArray<T> where T : unmanaged public struct Array63<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -733,6 +795,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array64<T> : IArray<T> where T : unmanaged public struct Array64<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -744,6 +807,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array65<T> : IArray<T> where T : unmanaged public struct Array65<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -755,6 +819,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array73<T> : IArray<T> where T : unmanaged public struct Array73<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -767,6 +832,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array96<T> : IArray<T> where T : unmanaged public struct Array96<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -779,6 +845,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array127<T> : IArray<T> where T : unmanaged public struct Array127<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -791,6 +858,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array128<T> : IArray<T> where T : unmanaged public struct Array128<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -803,6 +871,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array140<T> : IArray<T> where T : unmanaged public struct Array140<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -816,6 +885,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array256<T> : IArray<T> where T : unmanaged public struct Array256<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -828,6 +898,7 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Array384<T> : IArray<T> where T : unmanaged public struct Array384<T> : IArray<T> where T : unmanaged
{ {
T _e0; T _e0;
@ -844,4 +915,4 @@ namespace Ryujinx.Common.Memory
public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length); public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, Length);
} }
} }
#pragma warning restore CS0169, IDE0051

View File

@ -94,7 +94,7 @@ namespace Ryujinx.Common.PreciseSleep
Bias = GetBias(0); Bias = GetBias(0);
} }
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct Timespec private struct Timespec
{ {
public long tv_sec; // Seconds public long tv_sec; // Seconds

View File

@ -1,10 +1,5 @@
using Ryujinx.Common.Utilities;
using System; using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Reflection; using System.Reflection;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace Ryujinx.Common namespace Ryujinx.Common
{ {
@ -37,6 +32,4 @@ namespace Ryujinx.Common
? $"https://git.ryujinx.app/ryubing/ryujinx/-/compare/Canary-{currentVersion}...Canary-{newVersion}" ? $"https://git.ryujinx.app/ryubing/ryujinx/-/compare/Canary-{currentVersion}...Canary-{newVersion}"
: $"https://git.ryujinx.app/ryubing/ryujinx/-/releases/{newVersion}"; : $"https://git.ryujinx.app/ryubing/ryujinx/-/releases/{newVersion}";
} }
} }

View File

@ -28,12 +28,10 @@ namespace Ryujinx.Common.SystemInterop
{ {
public int GdiplusVersion; public int GdiplusVersion;
#pragma warning disable CS0649 // Field is never assigned to
public nint DebugEventCallback; public nint DebugEventCallback;
public int SuppressBackgroundThread; public int SuppressBackgroundThread;
public int SuppressExternalCodecs; public int SuppressExternalCodecs;
public int StartupParameters; public int StartupParameters;
#pragma warning restore CS0649
public static StartupInputEx Default => new() public static StartupInputEx Default => new()
{ {

View File

@ -12,7 +12,7 @@ namespace Ryujinx.Common.SystemInterop
[SupportedOSPlatform("windows")] [SupportedOSPlatform("windows")]
public partial class WindowsMultimediaTimerResolution : IDisposable public partial class WindowsMultimediaTimerResolution : IDisposable
{ {
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct TimeCaps public struct TimeCaps
{ {
public uint wPeriodMin; public uint wPeriodMin;

View File

@ -133,7 +133,6 @@ namespace Ryujinx.Common
"0100c1f0051b6000", // Donkey Kong Country: Tropical Freeze "0100c1f0051b6000", // Donkey Kong Country: Tropical Freeze
"0100ed000d390000", // Dr. Kawashima's Brain Training "0100ed000d390000", // Dr. Kawashima's Brain Training
"010067b017588000", // Endless Ocean Luminous "010067b017588000", // Endless Ocean Luminous
"0100d2f00d5c0000", // Nintendo Switch Sports
"01006b5012b32000", // Part Time UFO "01006b5012b32000", // Part Time UFO
"0100704000B3A000", // Snipperclips "0100704000B3A000", // Snipperclips
"01006a800016e000", // Super Smash Bros. Ultimate "01006a800016e000", // Super Smash Bros. Ultimate
@ -169,6 +168,8 @@ namespace Ryujinx.Common
"010056e00853a000", // A Hat in Time "010056e00853a000", // A Hat in Time
"0100fd1014726000", // Baldurs Gate: Dark Alliance "0100fd1014726000", // Baldurs Gate: Dark Alliance
"01008c2019598000", // Bluey: The Video Game "01008c2019598000", // Bluey: The Video Game
"010096f00ff22000", // Borderlands 2: Game of the Year Edition
"010007400ff24000", // Borderlands: The Pre-Sequel Ultimate Edition
"0100c6800b934000", // Brawlhalla "0100c6800b934000", // Brawlhalla
"0100dbf01000a000", // Burnout Paradise Remastered "0100dbf01000a000", // Burnout Paradise Remastered
"0100744001588000", // Cars 3: Driven to Win "0100744001588000", // Cars 3: Driven to Win

View File

@ -9,8 +9,8 @@ namespace Ryujinx.Common.Utilities
[StructLayout(LayoutKind.Sequential, Size = 16)] [StructLayout(LayoutKind.Sequential, Size = 16)]
public struct Buffer16 public struct Buffer16
{ {
[DebuggerBrowsable(DebuggerBrowsableState.Never)] private readonly ulong _dummy0; public ulong Low { get; set; }
[DebuggerBrowsable(DebuggerBrowsableState.Never)] private readonly ulong _dummy1; public ulong High { get; set; }
public byte this[int i] public byte this[int i]
{ {

View File

@ -241,7 +241,7 @@ namespace Ryujinx.Common.Utilities
public IndentedStringBuilder Append(object value) public IndentedStringBuilder Append(object value)
{ {
this.Append(value.ToString()); Append(value.ToString());
return this; return this;
} }
@ -271,7 +271,7 @@ namespace Ryujinx.Common.Utilities
{ {
_builder.Append(value); _builder.Append(value);
this.AppendLine(); AppendLine();
return this; return this;
} }

View File

@ -32,7 +32,6 @@ namespace Ryujinx.Common.Utilities
CyclingEnabled = false; CyclingEnabled = false;
} }
public static float Speed { get; set; } = 1; public static float Speed { get; set; } = 1;
private static readonly Lock _lock = new(); private static readonly Lock _lock = new();

View File

@ -1,17 +0,0 @@
using System;
namespace Ryujinx.Cpu.AppleHv
{
public class DummyDiskCacheLoadState : IDiskCacheLoadState
{
#pragma warning disable CS0067 // The event is never used
/// <inheritdoc/>
public event Action<LoadState, int, int> StateChanged;
#pragma warning restore CS0067
/// <inheritdoc/>
public void Cancel()
{
}
}
}

View File

@ -6,11 +6,11 @@ namespace Ryujinx.Cpu.AppleHv
{ {
struct HvVcpuExitException struct HvVcpuExitException
{ {
#pragma warning disable CS0649 // Field is never assigned to
public ulong Syndrome; public ulong Syndrome;
public ulong VirtualAddress; public ulong VirtualAddress;
public ulong PhysicalAddress; public ulong PhysicalAddress;
#pragma warning restore CS0649
} }
enum HvExitReason : uint enum HvExitReason : uint
@ -23,10 +23,10 @@ namespace Ryujinx.Cpu.AppleHv
struct HvVcpuExit struct HvVcpuExit
{ {
#pragma warning disable CS0649 // Field is never assigned to
public HvExitReason Reason; public HvExitReason Reason;
public HvVcpuExitException Exception; public HvVcpuExitException Exception;
#pragma warning restore CS0649
} }
enum HvReg : uint enum HvReg : uint

View File

@ -4,10 +4,10 @@ namespace Ryujinx.Cpu
{ {
public class DummyDiskCacheLoadState : IDiskCacheLoadState public class DummyDiskCacheLoadState : IDiskCacheLoadState
{ {
#pragma warning disable CS0067 // The event is never used
/// <inheritdoc/> /// <inheritdoc/>
public event Action<LoadState, int, int> StateChanged; public event Action<LoadState, int, int> StateChanged;
#pragma warning restore CS0067
public DummyDiskCacheLoadState() => StateChanged?.Invoke(LoadState.Unloaded, 0, 0);
/// <inheritdoc/> /// <inheritdoc/>
public void Cancel() public void Cancel()

View File

@ -15,7 +15,6 @@ namespace Ryujinx.Cpu
/// <inheritdoc/> /// <inheritdoc/>
public ulong Counter => (ulong)(ElapsedSeconds * Frequency); public ulong Counter => (ulong)(ElapsedSeconds * Frequency);
public long TickScalar { get; set; } public long TickScalar { get; set; }
private static long _acumElapsedTicks; private static long _acumElapsedTicks;

View File

@ -143,7 +143,7 @@ namespace Ryujinx.Graphics.GAL
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is TextureCreateInfo info && this.Equals(info); return obj is TextureCreateInfo info && Equals(info);
} }
public static bool operator ==(TextureCreateInfo left, TextureCreateInfo right) public static bool operator ==(TextureCreateInfo left, TextureCreateInfo right)

View File

@ -1,5 +1,3 @@
using System.Diagnostics.CodeAnalysis;
namespace Ryujinx.Graphics.GAL namespace Ryujinx.Graphics.GAL
{ {
public enum ViewportSwizzle public enum ViewportSwizzle

View File

@ -98,7 +98,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Compute
/// </summary> /// </summary>
unsafe struct ComputeClassState unsafe struct ComputeClassState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint SetObject; public uint SetObject;
public readonly int SetObjectClassId => (int)(SetObject & 0xFFFF); public readonly int SetObjectClassId => (int)(SetObject & 0xFFFF);
public readonly int SetObjectEngineId => (int)((SetObject >> 16) & 0x1F); public readonly int SetObjectEngineId => (int)((SetObject >> 16) & 0x1F);
@ -430,6 +430,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Compute
public readonly int StopShaderPerformanceCounterCounterMask => (int)(StopShaderPerformanceCounter & 0xFF); public readonly int StopShaderPerformanceCounterCounterMask => (int)(StopShaderPerformanceCounter & 0xFF);
public fixed uint Reserved33E8[6]; public fixed uint Reserved33E8[6];
public Array256<uint> SetMmeShadowScratch; public Array256<uint> SetMmeShadowScratch;
#pragma warning restore CS0649
} }
} }

View File

@ -179,7 +179,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma
/// </summary> /// </summary>
unsafe struct DmaClassState unsafe struct DmaClassState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public fixed uint Reserved00[64]; public fixed uint Reserved00[64];
public uint Nop; public uint Nop;
public fixed uint Reserved104[15]; public fixed uint Reserved104[15];
@ -266,6 +266,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma
public fixed uint Reserved740[629]; public fixed uint Reserved740[629];
public uint PmTriggerEnd; public uint PmTriggerEnd;
public fixed uint Reserved1118[2490]; public fixed uint Reserved1118[2490];
#pragma warning restore CS0649
} }
} }

View File

@ -7,7 +7,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma
/// </summary> /// </summary>
struct DmaTexture struct DmaTexture
{ {
#pragma warning disable CS0649 // Field is never assigned to
public MemoryLayout MemoryLayout; public MemoryLayout MemoryLayout;
public int Width; public int Width;
public int Height; public int Height;
@ -15,6 +15,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma
public int RegionZ; public int RegionZ;
public ushort RegionX; public ushort RegionX;
public ushort RegionY; public ushort RegionY;
#pragma warning restore CS0649
} }
} }

View File

@ -25,9 +25,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo
struct CompressedMethod struct CompressedMethod
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Method; public uint Method;
#pragma warning restore CS0649
public readonly int MethodAddressOld => (int)((Method >> 2) & 0x7FF); public readonly int MethodAddressOld => (int)((Method >> 2) & 0x7FF);
public readonly int MethodAddress => (int)(Method & 0xFFF); public readonly int MethodAddress => (int)(Method & 0xFFF);
public readonly int SubdeviceMask => (int)((Method >> 4) & 0xFFF); public readonly int SubdeviceMask => (int)((Method >> 4) & 0xFFF);

View File

@ -36,15 +36,15 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo
struct GPEntry struct GPEntry
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Entry0; public uint Entry0;
#pragma warning restore CS0649
public readonly Entry0Fetch Entry0Fetch => (Entry0Fetch)(Entry0 & 0x1); public readonly Entry0Fetch Entry0Fetch => (Entry0Fetch)(Entry0 & 0x1);
public readonly int Entry0Get => (int)((Entry0 >> 2) & 0x3FFFFFFF); public readonly int Entry0Get => (int)((Entry0 >> 2) & 0x3FFFFFFF);
public readonly int Entry0Operand => (int)(Entry0); public readonly int Entry0Operand => (int)(Entry0);
#pragma warning disable CS0649 // Field is never assigned to
public uint Entry1; public uint Entry1;
#pragma warning restore CS0649
public readonly int Entry1GetHi => (int)(Entry1 & 0xFF); public readonly int Entry1GetHi => (int)(Entry1 & 0xFF);
public readonly Entry1Priv Entry1Priv => (Entry1Priv)((Entry1 >> 8) & 0x1); public readonly Entry1Priv Entry1Priv => (Entry1Priv)((Entry1 >> 8) & 0x1);
public readonly Entry1Level Entry1Level => (Entry1Level)((Entry1 >> 9) & 0x1); public readonly Entry1Level Entry1Level => (Entry1Level)((Entry1 >> 9) & 0x1);

View File

@ -151,7 +151,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo
/// </summary> /// </summary>
struct GPFifoClassState struct GPFifoClassState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint SetObject; public uint SetObject;
public readonly int SetObjectNvclass => (int)(SetObject & 0xFFFF); public readonly int SetObjectNvclass => (int)(SetObject & 0xFFFF);
public readonly int SetObjectEngine => (int)((SetObject >> 16) & 0x1F); public readonly int SetObjectEngine => (int)((SetObject >> 16) & 0x1F);
@ -228,6 +228,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo
public uint LoadMmeStartAddressRamPointer; public uint LoadMmeStartAddressRamPointer;
public uint LoadMmeStartAddressRam; public uint LoadMmeStartAddressRam;
public uint SetMmeShadowRamControl; public uint SetMmeShadowRamControl;
#pragma warning restore CS0649
} }
} }

View File

@ -113,7 +113,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.InlineToMemory
/// </summary> /// </summary>
unsafe struct InlineToMemoryClassState unsafe struct InlineToMemoryClassState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint SetObject; public uint SetObject;
public readonly int SetObjectClassId => (int)(SetObject & 0xFFFF); public readonly int SetObjectClassId => (int)(SetObject & 0xFFFF);
public readonly int SetObjectEngineId => (int)((SetObject >> 16) & 0x1F); public readonly int SetObjectEngineId => (int)((SetObject >> 16) & 0x1F);
@ -178,6 +178,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.InlineToMemory
public uint SetI2mSpareNoop03; public uint SetI2mSpareNoop03;
public fixed uint Reserved200[3200]; public fixed uint Reserved200[3200];
public Array256<uint> SetMmeShadowScratch; public Array256<uint> SetMmeShadowScratch;
#pragma warning restore CS0649
} }
} }

View File

@ -469,12 +469,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.MME
for (int i = 0; i < maxDrawCount; i++) for (int i = 0; i < maxDrawCount; i++)
{ {
FifoWord count = FetchParam(); FifoWord count = FetchParam();
#pragma warning disable IDE0059 // Remove unnecessary value assignment
FifoWord instanceCount = FetchParam(); _ = FetchParam(); // Instance count
FifoWord firstIndex = FetchParam(); FifoWord firstIndex = FetchParam();
FifoWord firstVertex = FetchParam(); _ = FetchParam(); // First vertex
FifoWord firstInstance = FetchParam(); _ = FetchParam(); // First instance
#pragma warning restore IDE0059
if (i == 0) if (i == 0)
{ {

View File

@ -9,9 +9,7 @@ namespace Ryujinx.Graphics.Gpu.Engine
[StructLayout(LayoutKind.Sequential, Size = 1024)] [StructLayout(LayoutKind.Sequential, Size = 1024)]
struct MmeShadowScratch struct MmeShadowScratch
{ {
#pragma warning disable CS0169 // The private field is never used
private uint _e0; private uint _e0;
#pragma warning restore CS0169
public ref uint this[int index] => ref AsSpan()[index]; public ref uint this[int index] => ref AsSpan()[index];
public Span<uint> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 256); public Span<uint> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 256);
} }

View File

@ -16,9 +16,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
private int _inlineIndexBufferSize; private int _inlineIndexBufferSize;
private int _inlineIndexCount; private int _inlineIndexCount;
private uint[] _buffer; private uint[] _buffer;
#pragma warning disable IDE0051 // Remove unused private member
private readonly int _bufferOffset; private readonly int _bufferOffset;
#pragma warning restore IDE0051
/// <summary> /// <summary>
/// Indicates if any index buffer data has been pushed. /// Indicates if any index buffer data has been pushed.

View File

@ -1,5 +1,3 @@
using System.Diagnostics.CodeAnalysis;
namespace Ryujinx.Graphics.Gpu.Engine.Threed namespace Ryujinx.Graphics.Gpu.Engine.Threed
{ {
/// <summary> /// <summary>

View File

@ -26,9 +26,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct TessMode struct TessMode
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Packed; public uint Packed;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Unpacks the tessellation abstract patch type. /// Unpacks the tessellation abstract patch type.
@ -63,7 +62,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct TfBufferState struct TfBufferState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Boolean32 Enable; public Boolean32 Enable;
public GpuVa Address; public GpuVa Address;
public int Size; public int Size;
@ -71,7 +70,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
public uint Padding0; public uint Padding0;
public uint Padding1; public uint Padding1;
public uint Padding2; public uint Padding2;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -79,12 +78,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct TfState struct TfState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public int BufferIndex; public int BufferIndex;
public int VaryingsCount; public int VaryingsCount;
public int Stride; public int Stride;
public uint Padding; public uint Padding;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -92,7 +91,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct RtColorState struct RtColorState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public GpuVa Address; public GpuVa Address;
public int WidthOrStride; public int WidthOrStride;
public int Height; public int Height;
@ -108,7 +107,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
public int Padding3; public int Padding3;
public int Padding4; public int Padding4;
public int Padding5; public int Padding5;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -116,7 +115,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct ViewportTransform struct ViewportTransform
{ {
#pragma warning disable CS0649 // Field is never assigned to
public float ScaleX; public float ScaleX;
public float ScaleY; public float ScaleY;
public float ScaleZ; public float ScaleZ;
@ -125,7 +124,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
public float TranslateZ; public float TranslateZ;
public uint Swizzle; public uint Swizzle;
public uint SubpixelPrecisionBias; public uint SubpixelPrecisionBias;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Unpacks viewport swizzle of the position X component. /// Unpacks viewport swizzle of the position X component.
@ -169,14 +167,14 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct ViewportExtents struct ViewportExtents
{ {
#pragma warning disable CS0649 // Field is never assigned to
public ushort X; public ushort X;
public ushort Width; public ushort Width;
public ushort Y; public ushort Y;
public ushort Height; public ushort Height;
public float DepthNear; public float DepthNear;
public float DepthFar; public float DepthFar;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -184,10 +182,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct VertexBufferDrawState struct VertexBufferDrawState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public int First; public int First;
public int Count; public int Count;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -195,12 +193,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct ClearColors struct ClearColors
{ {
#pragma warning disable CS0649 // Field is never assigned to
public float Red; public float Red;
public float Green; public float Green;
public float Blue; public float Blue;
public float Alpha; public float Alpha;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -208,11 +206,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct DepthBiasState struct DepthBiasState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Boolean32 PointEnable; public Boolean32 PointEnable;
public Boolean32 LineEnable; public Boolean32 LineEnable;
public Boolean32 FillEnable; public Boolean32 FillEnable;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -231,14 +229,14 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct ScissorState struct ScissorState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Boolean32 Enable; public Boolean32 Enable;
public ushort X1; public ushort X1;
public ushort X2; public ushort X2;
public ushort Y1; public ushort Y1;
public ushort Y2; public ushort Y2;
public uint Padding; public uint Padding;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -246,11 +244,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct StencilBackMasks struct StencilBackMasks
{ {
#pragma warning disable CS0649 // Field is never assigned to
public int FuncRef; public int FuncRef;
public int Mask; public int Mask;
public int FuncMask; public int FuncMask;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -258,12 +256,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct RtDepthStencilState struct RtDepthStencilState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public GpuVa Address; public GpuVa Address;
public ZetaFormat Format; public ZetaFormat Format;
public MemoryLayout MemoryLayout; public MemoryLayout MemoryLayout;
public int LayerSize; public int LayerSize;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -271,12 +269,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct ScreenScissorState struct ScreenScissorState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public ushort X; public ushort X;
public ushort Width; public ushort Width;
public ushort Y; public ushort Y;
public ushort Height; public ushort Height;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -319,9 +317,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct VertexAttribState struct VertexAttribState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Attribute; public uint Attribute;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Unpacks the index of the vertex buffer this attribute belongs to. /// Unpacks the index of the vertex buffer this attribute belongs to.
@ -383,9 +380,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct RtControl struct RtControl
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Packed; public uint Packed;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Unpacks the number of active draw buffers. /// Unpacks the number of active draw buffers.
@ -412,7 +408,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct Size3D struct Size3D
{ {
#pragma warning disable CS0649 // Field is never assigned to
public int Width; public int Width;
public int Height; public int Height;
public ushort Depth; public ushort Depth;
@ -422,7 +418,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
{ {
return (Flags & 1) == 0; return (Flags & 1) == 0;
} }
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -430,7 +425,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct StencilTestState struct StencilTestState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Boolean32 Enable; public Boolean32 Enable;
public StencilOp FrontSFail; public StencilOp FrontSFail;
public StencilOp FrontDpFail; public StencilOp FrontDpFail;
@ -439,7 +434,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
public int FrontFuncRef; public int FrontFuncRef;
public int FrontFuncMask; public int FrontFuncMask;
public int FrontMask; public int FrontMask;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -457,12 +452,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct RgbHalf struct RgbHalf
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint R; public uint R;
public uint G; public uint G;
public uint B; public uint B;
public uint Padding; public uint Padding;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Unpacks the red color component as a 16-bit float value. /// Unpacks the red color component as a 16-bit float value.
@ -512,10 +506,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct PoolState struct PoolState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public GpuVa Address; public GpuVa Address;
public int MaximumId; public int MaximumId;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -523,13 +517,13 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct StencilBackTestState struct StencilBackTestState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Boolean32 TwoSided; public Boolean32 TwoSided;
public StencilOp BackSFail; public StencilOp BackSFail;
public StencilOp BackDpFail; public StencilOp BackDpFail;
public StencilOp BackDpPass; public StencilOp BackDpPass;
public CompareOp BackFunc; public CompareOp BackFunc;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -537,10 +531,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct PrimitiveRestartState struct PrimitiveRestartState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Boolean32 Enable; public Boolean32 Enable;
public int Index; public int Index;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -549,12 +543,12 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct IndexBufferState struct IndexBufferState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public GpuVa Address; public GpuVa Address;
public GpuVa EndAddress; public GpuVa EndAddress;
public IndexType Type; public IndexType Type;
public int First; public int First;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -562,11 +556,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct FaceState struct FaceState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Boolean32 CullEnable; public Boolean32 CullEnable;
public FrontFace FrontFace; public FrontFace FrontFace;
public Face CullFace; public Face CullFace;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -584,10 +578,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct LogicalOpState struct LogicalOpState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Boolean32 Enable; public Boolean32 Enable;
public LogicalOp LogicalOp; public LogicalOp LogicalOp;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -645,11 +639,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct VertexBufferState struct VertexBufferState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Control; public uint Control;
public GpuVa Address; public GpuVa Address;
public int Divisor; public int Divisor;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Vertex buffer stride, defined as the number of bytes occupied by each vertex in memory. /// Vertex buffer stride, defined as the number of bytes occupied by each vertex in memory.
@ -675,7 +668,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct BlendStateCommon struct BlendStateCommon
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Boolean32 SeparateAlpha; public Boolean32 SeparateAlpha;
public BlendOp ColorOp; public BlendOp ColorOp;
public BlendFactor ColorSrcFactor; public BlendFactor ColorSrcFactor;
@ -684,7 +677,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
public BlendFactor AlphaSrcFactor; public BlendFactor AlphaSrcFactor;
public uint Unknown0x1354; public uint Unknown0x1354;
public BlendFactor AlphaDstFactor; public BlendFactor AlphaDstFactor;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -692,7 +685,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct BlendState struct BlendState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Boolean32 SeparateAlpha; public Boolean32 SeparateAlpha;
public BlendOp ColorOp; public BlendOp ColorOp;
public BlendFactor ColorSrcFactor; public BlendFactor ColorSrcFactor;
@ -701,7 +694,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
public BlendFactor AlphaSrcFactor; public BlendFactor AlphaSrcFactor;
public BlendFactor AlphaDstFactor; public BlendFactor AlphaDstFactor;
public uint Padding; public uint Padding;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -709,7 +702,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct ShaderState struct ShaderState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Control; public uint Control;
public uint Offset; public uint Offset;
public uint Unknown0x8; public uint Unknown0x8;
@ -726,7 +719,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
public uint Unknown0x34; public uint Unknown0x34;
public uint Unknown0x38; public uint Unknown0x38;
public uint Unknown0x3c; public uint Unknown0x3c;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Unpacks shader enable information. /// Unpacks shader enable information.
@ -744,16 +736,16 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
/// </summary> /// </summary>
struct UniformBufferState struct UniformBufferState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public int Size; public int Size;
public GpuVa Address; public GpuVa Address;
public int Offset; public int Offset;
#pragma warning restore CS0649
} }
unsafe struct ThreedClassState : IShadowState unsafe struct ThreedClassState : IShadowState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint SetObject; public uint SetObject;
public readonly int SetObjectClassId => (int)(SetObject & 0xFFFF); public readonly int SetObjectClassId => (int)(SetObject & 0xFFFF);
public readonly int SetObjectEngineId => (int)((SetObject >> 16) & 0x1F); public readonly int SetObjectEngineId => (int)((SetObject >> 16) & 0x1F);
@ -1052,6 +1044,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Threed
public Array4<Array32<uint>> TfVaryingLocations; public Array4<Array32<uint>> TfVaryingLocations;
public fixed uint Reserved2A00[640]; public fixed uint Reserved2A00[640];
public Array256<uint> SetMmeShadowScratch; public Array256<uint> SetMmeShadowScratch;
#pragma warning restore CS0649
} }
} }

View File

@ -486,10 +486,10 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod
/// </summary> /// </summary>
struct RenderSolidPrimPoint struct RenderSolidPrimPoint
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint SetX; public uint SetX;
public uint Y; public uint Y;
#pragma warning restore CS0649
} }
/// <summary> /// <summary>
@ -497,7 +497,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod
/// </summary> /// </summary>
unsafe struct TwodClassState : IShadowState unsafe struct TwodClassState : IShadowState
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint SetObject; public uint SetObject;
public readonly int SetObjectClassId => (int)(SetObject & 0xFFFF); public readonly int SetObjectClassId => (int)(SetObject & 0xFFFF);
public readonly int SetObjectEngineId => (int)((SetObject >> 16) & 0x1F); public readonly int SetObjectEngineId => (int)((SetObject >> 16) & 0x1F);
@ -811,6 +811,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod
public readonly bool MmeDmaWriteMethodBarrierV => (MmeDmaWriteMethodBarrier & 0x1) != 0; public readonly bool MmeDmaWriteMethodBarrierV => (MmeDmaWriteMethodBarrier & 0x1) != 0;
public fixed uint ReservedDF0[2436]; public fixed uint ReservedDF0[2436];
public Array256<uint> SetMmeShadowScratch; public Array256<uint> SetMmeShadowScratch;
#pragma warning restore CS0649
} }
} }

View File

@ -7,7 +7,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod
/// </summary> /// </summary>
struct TwodTexture struct TwodTexture
{ {
#pragma warning disable CS0649 // Field is never assigned to
public ColorFormat Format; public ColorFormat Format;
public Boolean32 LinearLayout; public Boolean32 LinearLayout;
public MemoryLayout MemoryLayout; public MemoryLayout MemoryLayout;
@ -17,6 +17,6 @@ namespace Ryujinx.Graphics.Gpu.Engine.Twod
public int Width; public int Width;
public int Height; public int Height;
public GpuVa Address; public GpuVa Address;
#pragma warning restore CS0649
} }
} }

View File

@ -5,10 +5,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.Types
/// </summary> /// </summary>
struct GpuVa struct GpuVa
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint High; public uint High;
public uint Low; public uint Low;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Packs the split address into a 64-bits address value. /// Packs the split address into a 64-bits address value.

View File

@ -5,9 +5,8 @@ namespace Ryujinx.Graphics.Gpu.Engine.Types
/// </summary> /// </summary>
struct MemoryLayout struct MemoryLayout
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Packed; public uint Packed;
#pragma warning restore CS0649
public readonly int UnpackGobBlocksInX() public readonly int UnpackGobBlocksInX()
{ {

View File

@ -5,12 +5,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.Types
/// </summary> /// </summary>
struct SbDescriptor struct SbDescriptor
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint AddressLow; public uint AddressLow;
public uint AddressHigh; public uint AddressHigh;
public int Size; public int Size;
public int Padding; public int Padding;
#pragma warning restore CS0649
public readonly ulong PackAddress() public readonly ulong PackAddress()
{ {

View File

@ -98,7 +98,6 @@ namespace Ryujinx.Graphics.Gpu
/// </summary> /// </summary>
internal DirtyHacks DirtyHacks { get; } internal DirtyHacks DirtyHacks { get; }
/// <summary> /// <summary>
/// Host hardware capabilities. /// Host hardware capabilities.
/// </summary> /// </summary>

View File

@ -1,6 +1,5 @@
using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
namespace Ryujinx.Graphics.Gpu.Image namespace Ryujinx.Graphics.Gpu.Image
{ {
@ -555,7 +554,6 @@ namespace Ryujinx.Graphics.Gpu.Image
{ VertexAttributeFormat.A2B10G10R10Uscaled, Format.R10G10B10A2Uscaled }, { VertexAttributeFormat.A2B10G10R10Uscaled, Format.R10G10B10A2Uscaled },
{ VertexAttributeFormat.A2B10G10R10Sscaled, Format.R10G10B10A2Sscaled }, { VertexAttributeFormat.A2B10G10R10Sscaled, Format.R10G10B10A2Sscaled },
}; };
#pragma warning restore IDE0055
// Note: Some of those formats have been changed and requires conversion on the shader, // Note: Some of those formats have been changed and requires conversion on the shader,
// as GPUs don't support them when used as buffer texture format. // as GPUs don't support them when used as buffer texture format.
@ -640,6 +638,7 @@ namespace Ryujinx.Graphics.Gpu.Image
{ VertexAttributeFormat.A2B10G10R10Sint, (Format.R10G10B10A2Uint, 4) }, // Sint -> Uint { VertexAttributeFormat.A2B10G10R10Sint, (Format.R10G10B10A2Uint, 4) }, // Sint -> Uint
{ VertexAttributeFormat.A2B10G10R10Uscaled, (Format.R10G10B10A2Uint, 4) }, // Uscaled -> Uint { VertexAttributeFormat.A2B10G10R10Uscaled, (Format.R10G10B10A2Uint, 4) }, // Uscaled -> Uint
{ VertexAttributeFormat.A2B10G10R10Sscaled, (Format.R10G10B10A2Sint, 4) } // Sscaled -> Sint { VertexAttributeFormat.A2B10G10R10Sscaled, (Format.R10G10B10A2Sint, 4) } // Sscaled -> Sint
#pragma warning restore IDE0055
}; };
/// <summary> /// <summary>

View File

@ -53,7 +53,6 @@ namespace Ryujinx.Graphics.Gpu.Image
private const float Frac8ToF32 = 1.0f / 256.0f; private const float Frac8ToF32 = 1.0f / 256.0f;
#pragma warning disable CS0649 // Field is never assigned to
public uint Word0; public uint Word0;
public uint Word1; public uint Word1;
public uint Word2; public uint Word2;
@ -62,7 +61,6 @@ namespace Ryujinx.Graphics.Gpu.Image
public float BorderColorG; public float BorderColorG;
public float BorderColorB; public float BorderColorB;
public float BorderColorA; public float BorderColorA;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Unpacks the texture wrap mode along the X axis. /// Unpacks the texture wrap mode along the X axis.

View File

@ -9,7 +9,7 @@ namespace Ryujinx.Graphics.Gpu.Image
/// </summary> /// </summary>
struct TextureDescriptor : ITextureDescriptor, IEquatable<TextureDescriptor> struct TextureDescriptor : ITextureDescriptor, IEquatable<TextureDescriptor>
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Word0; public uint Word0;
public uint Word1; public uint Word1;
public uint Word2; public uint Word2;
@ -18,7 +18,6 @@ namespace Ryujinx.Graphics.Gpu.Image
public uint Word5; public uint Word5;
public uint Word6; public uint Word6;
public uint Word7; public uint Word7;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Unpacks Maxwell texture format integer. /// Unpacks Maxwell texture format integer.

View File

@ -9,14 +9,13 @@ namespace Ryujinx.Graphics.Gpu.Shader
/// </summary> /// </summary>
struct ShaderAddresses : IEquatable<ShaderAddresses> struct ShaderAddresses : IEquatable<ShaderAddresses>
{ {
#pragma warning disable CS0649 // Field is never assigned to
public ulong VertexA; public ulong VertexA;
public ulong VertexB; public ulong VertexB;
public ulong TessControl; public ulong TessControl;
public ulong TessEvaluation; public ulong TessEvaluation;
public ulong Geometry; public ulong Geometry;
public ulong Fragment; public ulong Fragment;
#pragma warning restore CS0649
/// <summary> /// <summary>
/// Check if the addresses are equal. /// Check if the addresses are equal.

View File

@ -4,7 +4,7 @@ namespace Ryujinx.Graphics.Host1x
{ {
struct Host1xClassRegisters struct Host1xClassRegisters
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint IncrSyncpt; public uint IncrSyncpt;
public uint IncrSyncptCntrl; public uint IncrSyncptCntrl;
public uint IncrSyncptError; public uint IncrSyncptError;
@ -38,6 +38,6 @@ namespace Ryujinx.Graphics.Host1x
public uint Xrefctrl; public uint Xrefctrl;
public uint ChannelXrefHi; public uint ChannelXrefHi;
public uint ChannelXrefLo; public uint ChannelXrefLo;
#pragma warning restore CS0649
} }
} }

View File

@ -4,7 +4,7 @@ namespace Ryujinx.Graphics.Host1x
{ {
struct ThiRegisters struct ThiRegisters
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint IncrSyncpt; public uint IncrSyncpt;
public uint Reserved4; public uint Reserved4;
public uint IncrSyncptErr; public uint IncrSyncptErr;
@ -19,6 +19,6 @@ namespace Ryujinx.Graphics.Host1x
public Array12<uint> Reserved48; public Array12<uint> Reserved48;
public uint IntStatus; public uint IntStatus;
public uint IntMask; public uint IntMask;
#pragma warning restore CS0649
} }
} }

View File

@ -2,7 +2,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
{ {
struct AVCodec struct AVCodec
{ {
#pragma warning disable CS0649 // Field is never assigned to
public unsafe byte* Name; public unsafe byte* Name;
public unsafe byte* LongName; public unsafe byte* LongName;
public int Type; public int Type;
@ -19,6 +19,6 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
public nint Profiles; public nint Profiles;
public unsafe byte* WrapperName; public unsafe byte* WrapperName;
public nint ChLayouts; public nint ChLayouts;
#pragma warning restore CS0649
} }
} }

View File

@ -2,7 +2,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
{ {
struct AVCodec501 struct AVCodec501
{ {
#pragma warning disable CS0649 // Field is never assigned to
public unsafe byte* Name; public unsafe byte* Name;
public unsafe byte* LongName; public unsafe byte* LongName;
public int Type; public int Type;
@ -18,6 +18,6 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
public unsafe nint PrivClass; public unsafe nint PrivClass;
public nint Profiles; public nint Profiles;
public unsafe byte* WrapperName; public unsafe byte* WrapperName;
#pragma warning restore CS0649
} }
} }

View File

@ -4,7 +4,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
{ {
struct AVCodecContext struct AVCodecContext
{ {
#pragma warning disable CS0649 // Field is never assigned to
public unsafe nint AvClass; public unsafe nint AvClass;
public int LogLevelOffset; public int LogLevelOffset;
public int CodecType; public int CodecType;
@ -165,6 +165,6 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
public long MaxSamples; public long MaxSamples;
public int ExportSideData; public int ExportSideData;
public nint GetEncodeBuffer; public nint GetEncodeBuffer;
#pragma warning restore CS0649
} }
} }

View File

@ -4,7 +4,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
{ {
struct AVFrame struct AVFrame
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Array8<nint> Data; public Array8<nint> Data;
public Array8<int> LineSize; public Array8<int> LineSize;
public nint ExtendedData; public nint ExtendedData;
@ -29,7 +29,6 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
public long ReorderedOpaque; public long ReorderedOpaque;
public int SampleRate; public int SampleRate;
public ulong ChannelLayout; public ulong ChannelLayout;
#pragma warning restore CS0649
// NOTE: There is more after, but the layout kind of changed a bit and we don't need more than this. This is safe as we only manipulate this behind a reference. // NOTE: There is more after, but the layout kind of changed a bit and we don't need more than this. This is safe as we only manipulate this behind a reference.
} }

View File

@ -4,7 +4,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
{ {
struct AVPacket struct AVPacket
{ {
#pragma warning disable CS0649 // Field is never assigned to
public unsafe AVBufferRef* Buf; public unsafe AVBufferRef* Buf;
public long Pts; public long Pts;
public long Dts; public long Dts;
@ -19,6 +19,6 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
public AVBufferRef Opaque; public AVBufferRef Opaque;
public unsafe AVBufferRef* OpaqueRef; public unsafe AVBufferRef* OpaqueRef;
public AVRational TimeBase; public AVRational TimeBase;
#pragma warning restore CS0649
} }
} }

View File

@ -2,7 +2,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
{ {
struct FFCodec<T> where T : struct struct FFCodec<T> where T : struct
{ {
#pragma warning disable CS0649 // Field is never assigned to
public T Base; public T Base;
public int CapsInternalOrCbType; public int CapsInternalOrCbType;
public int PrivDataSize; public int PrivDataSize;
@ -12,7 +12,6 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
public nint InitStaticData; public nint InitStaticData;
public nint Init; public nint Init;
public nint CodecCallback; public nint CodecCallback;
#pragma warning restore CS0649
// NOTE: There is more after, but the layout kind of changed a bit and we don't need more than this. This is safe as we only manipulate this behind a reference. // NOTE: There is more after, but the layout kind of changed a bit and we don't need more than this. This is safe as we only manipulate this behind a reference.
} }

View File

@ -2,7 +2,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
{ {
struct FFCodecLegacy<T> where T : struct struct FFCodecLegacy<T> where T : struct
{ {
#pragma warning disable CS0649 // Field is never assigned to
public T Base; public T Base;
public uint CapsInternalOrCbType; public uint CapsInternalOrCbType;
public int PrivDataSize; public int PrivDataSize;
@ -14,7 +14,6 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.Native
public nint EncodeSub; public nint EncodeSub;
public nint Encode2; public nint Encode2;
public nint Decode; public nint Decode;
#pragma warning restore CS0649
// NOTE: There is more after, but the layout kind of changed a bit and we don't need more than this. This is safe as we only manipulate this behind a reference. // NOTE: There is more after, but the layout kind of changed a bit and we don't need more than this. This is safe as we only manipulate this behind a reference.
} }

View File

@ -6,10 +6,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types
// passed it can be loaded into vector registers. // passed it can be loaded into vector registers.
internal struct LoopFilterThresh internal struct LoopFilterThresh
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Array16<byte> Mblim; public Array16<byte> Mblim;
public Array16<byte> Lim; public Array16<byte> Lim;
public Array16<byte> HevThr; public Array16<byte> HevThr;
#pragma warning restore CS0649
} }
} }

View File

@ -4,7 +4,7 @@ namespace Ryujinx.Graphics.Nvdec
{ {
struct NvdecRegisters struct NvdecRegisters
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Array64<uint> Reserved0; public Array64<uint> Reserved0;
public uint Nop; public uint Nop;
public Array63<uint> Reserved104; public Array63<uint> Reserved104;
@ -58,6 +58,6 @@ namespace Ryujinx.Graphics.Nvdec
public uint Vp9SetColMvWriteBufOffset; public uint Vp9SetColMvWriteBufOffset;
public uint Vp9SetColMvReadBufOffset; public uint Vp9SetColMvReadBufOffset;
public uint Vp9SetFilterBufferOffset; public uint Vp9SetFilterBufferOffset;
#pragma warning restore CS0649
} }
} }

View File

@ -4,13 +4,13 @@ namespace Ryujinx.Graphics.Nvdec
{ {
struct NvdecStatus struct NvdecStatus
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint MbsCorrectlyDecoded; public uint MbsCorrectlyDecoded;
public uint MbsInError; public uint MbsInError;
public uint Reserved; public uint Reserved;
public uint ErrorStatus; public uint ErrorStatus;
public FrameStats Stats; public FrameStats Stats;
public uint SliceHeaderErrorCode; public uint SliceHeaderErrorCode;
#pragma warning restore CS0649
} }
} }

View File

@ -1,13 +1,14 @@
using Ryujinx.Common.Memory; using Ryujinx.Common.Memory;
using Ryujinx.Graphics.Video; using Ryujinx.Graphics.Video;
using System.Runtime.InteropServices;
namespace Ryujinx.Graphics.Nvdec.Types.H264 namespace Ryujinx.Graphics.Nvdec.Types.H264
{ {
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct PictureInfo struct PictureInfo
{ {
#pragma warning disable IDE0051, CS0169, CS0649 // Remove unused private member
Array18<uint> Unknown0; Array18<uint> Unknown0;
#pragma warning restore IDE0051
public uint BitstreamSize; public uint BitstreamSize;
public uint NumSlices; public uint NumSlices;
public uint Unknown50; public uint Unknown50;
@ -49,7 +50,6 @@ namespace Ryujinx.Graphics.Nvdec.Types.H264
public Array16<byte> MvcextViewRefMasksL1; public Array16<byte> MvcextViewRefMasksL1;
public uint Flags2; public uint Flags2;
public Array10<uint> Unknown2D4; public Array10<uint> Unknown2D4;
#pragma warning restore CS0169, CS0649
public readonly bool MbAdaptiveFrameFieldFlag => (Flags & (1 << 0)) != 0; public readonly bool MbAdaptiveFrameFieldFlag => (Flags & (1 << 0)) != 0;
public readonly bool Direct8x8InferenceFlag => (Flags & (1 << 1)) != 0; public readonly bool Direct8x8InferenceFlag => (Flags & (1 << 1)) != 0;

View File

@ -4,11 +4,10 @@ namespace Ryujinx.Graphics.Nvdec.Types.H264
{ {
struct ReferenceFrame struct ReferenceFrame
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Flags; public uint Flags;
public Array2<uint> FieldOrderCnt; public Array2<uint> FieldOrderCnt;
public uint FrameNum; public uint FrameNum;
#pragma warning restore CS0649
public readonly uint OutputSurfaceIndex => (uint)Flags & 0x7f; public readonly uint OutputSurfaceIndex => (uint)Flags & 0x7f;
} }

View File

@ -5,7 +5,7 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp8
{ {
struct PictureInfo struct PictureInfo
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Array13<uint> Unknown0; public Array13<uint> Unknown0;
public uint GpTimerTimeoutValue; public uint GpTimerTimeoutValue;
public ushort FrameWidth; public ushort FrameWidth;
@ -58,7 +58,6 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp8
public uint ResultValue; // ucode return result public uint ResultValue; // ucode return result
public Array8<uint> PartitionOffset; public Array8<uint> PartitionOffset;
public Array3<uint> Reserved4; public Array3<uint> Reserved4;
#pragma warning restore CS0649
public Vp8PictureInfo Convert() public Vp8PictureInfo Convert()
{ {

View File

@ -5,7 +5,7 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp9
{ {
struct EntropyProbs struct EntropyProbs
{ {
#pragma warning disable CS0649 // Field is never assigned to
public Array10<Array10<Array8<byte>>> KfYModeProbE0ToE7; public Array10<Array10<Array8<byte>>> KfYModeProbE0ToE7;
public Array10<Array10<byte>> KfYModeProbE8; public Array10<Array10<byte>> KfYModeProbE8;
public Array3<byte> Padding384; public Array3<byte> Padding384;
@ -42,7 +42,6 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp9
public Array5<byte> CompRefProb; public Array5<byte> CompRefProb;
public Array17<byte> Padding58F; public Array17<byte> Padding58F;
public Array4<Array2<Array2<Array6<Array6<Array4<byte>>>>>> CoefProbs; public Array4<Array2<Array2<Array6<Array6<Array4<byte>>>>>> CoefProbs;
#pragma warning restore CS0649
public void Convert(ref Vp9EntropyProbs fc) public void Convert(ref Vp9EntropyProbs fc)
{ {

View File

@ -2,11 +2,11 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp9
{ {
struct FrameSize struct FrameSize
{ {
#pragma warning disable CS0649 // Field is never assigned to
public ushort Width; public ushort Width;
public ushort Height; public ushort Height;
public ushort LumaPitch; public ushort LumaPitch;
public ushort ChromaPitch; public ushort ChromaPitch;
#pragma warning restore CS0649
} }
} }

View File

@ -2,7 +2,7 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp9
{ {
struct FrameStats struct FrameStats
{ {
#pragma warning disable CS0649 // Field is never assigned to
public uint Unknown0; public uint Unknown0;
public uint Unknown4; public uint Unknown4;
public uint Pass2CycleCount; public uint Pass2CycleCount;
@ -16,6 +16,6 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp9
public uint FrameStatusBwdMvyCnt; public uint FrameStatusBwdMvyCnt;
public uint ErrorCtbPos; public uint ErrorCtbPos;
public uint ErrorSlicePos; public uint ErrorSlicePos;
#pragma warning restore CS0649
} }
} }

Some files were not shown because too many files have changed in this diff Show More