mirror of
https://github.com/azahar-emu/azahar.git
synced 2026-06-06 02:33:44 -04:00
Compare commits
18 commits
b3c3ad90c2
...
01785578ae
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01785578ae | ||
|
|
e1d0d230ab | ||
|
|
4867bb2e2b | ||
|
|
4e4c7e687b | ||
|
|
56f738eb06 | ||
|
|
b1e537a485 | ||
|
|
59da460177 | ||
|
|
8bdb60a6e1 | ||
|
|
383a28795e | ||
|
|
725544f3b4 | ||
|
|
135f10320a | ||
|
|
0b7114cbf8 | ||
|
|
95d42cb40a | ||
|
|
f0bc64d967 | ||
|
|
ad8526c4cf | ||
|
|
ae7d7dca1f | ||
|
|
4a4b75b0de | ||
|
|
b186b04995 |
68 changed files with 7041 additions and 6709 deletions
|
|
@ -12,9 +12,9 @@ fi
|
|||
|
||||
echo "Tag name is: $TAG_NAME"
|
||||
|
||||
docker build -f docker/azahar-room/Dockerfile -t azahar-room:$TAG_NAME .
|
||||
docker build --no-cache -f docker/azahar-room/Dockerfile -t azahar-room:$TAG_NAME .
|
||||
mkdir -p build
|
||||
FILENAME="azahar-room-$TAG_NAME.dockerimage"
|
||||
FILENAME="azahar-room-$TARGET-$TAG_NAME.dockerimage"
|
||||
docker save azahar-room:$TAG_NAME > build/$FILENAME
|
||||
|
||||
echo "DOCKER_IMAGE_PATH=artifacts/$FILENAME" >> $GITHUB_ENV
|
||||
echo "DOCKER_IMAGE_PATH=artifacts/$FILENAME" >> $GITHUB_ENV
|
||||
|
|
|
|||
59
.github/workflows/build.yml
vendored
59
.github/workflows/build.yml
vendored
|
|
@ -17,7 +17,7 @@ jobs:
|
|||
if: ${{ !github.head_ref }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Pack
|
||||
|
|
@ -31,7 +31,7 @@ jobs:
|
|||
output-file: artifacts/source.spdx.json
|
||||
upload-artifact: false
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: source
|
||||
path: artifacts/
|
||||
|
|
@ -61,13 +61,13 @@ jobs:
|
|||
SHOULD_RUN: ${{ (matrix.target != 'appimage-wayland' || github.ref_type == 'tag') }}
|
||||
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Set up cache
|
||||
if: ${{ env.SHOULD_RUN == 'true' && env.CACHE_ENABLED == 'true' }}
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ github.job }}-${{ matrix.target }}-${{ github.sha }}
|
||||
|
|
@ -95,7 +95,7 @@ jobs:
|
|||
upload-artifact: false
|
||||
- name: Upload
|
||||
if: ${{ contains(matrix.target, 'appimage') && env.SHOULD_RUN == 'true' }}
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ github.job }}-${{ matrix.target }}
|
||||
path: artifacts/
|
||||
|
|
@ -123,11 +123,11 @@ jobs:
|
|||
OS: linux
|
||||
TARGET: ${{ matrix.target }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Set up cache
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ github.job }}-${{ matrix.target }}-${{ github.sha }}
|
||||
|
|
@ -145,12 +145,12 @@ jobs:
|
|||
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
|
||||
OS: macos
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Set up cache
|
||||
if: ${{ env.CACHE_ENABLED == 'true' }}
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ runner.os }}-${{ github.sha }}
|
||||
|
|
@ -183,7 +183,7 @@ jobs:
|
|||
output-file: artifacts/macos.spdx.json
|
||||
upload-artifact: false
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ env.OS }}
|
||||
path: artifacts/
|
||||
|
|
@ -222,12 +222,12 @@ jobs:
|
|||
OS: windows
|
||||
TARGET: ${{ matrix.target }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Set up cache
|
||||
if: ${{ env.CACHE_ENABLED == 'true' }}
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ env.CCACHE_DIR }}
|
||||
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}
|
||||
|
|
@ -235,7 +235,7 @@ jobs:
|
|||
${{ runner.os }}-${{ matrix.target }}-
|
||||
- name: Set up MSVC
|
||||
if: ${{ matrix.target == 'msvc' }}
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
uses: azahar-emu/msvc-dev-cmd@v1
|
||||
- name: Install extra tools (MSVC)
|
||||
if: ${{ matrix.target == 'msvc' }}
|
||||
run: choco install ccache ninja ptime wget
|
||||
|
|
@ -256,7 +256,7 @@ jobs:
|
|||
qt6-base:p qt6-multimedia:p qt6-multimedia-wmf:p qt6-tools:p qt6-translations:p
|
||||
- name: Install extra tools (MSYS2)
|
||||
if: ${{ matrix.target == 'msys2' }}
|
||||
uses: crazy-max/ghaction-chocolatey@v3
|
||||
uses: crazy-max/ghaction-chocolatey@v4
|
||||
with:
|
||||
args: install ptime wget
|
||||
- name: Install NSIS
|
||||
|
|
@ -300,7 +300,7 @@ jobs:
|
|||
output-file: artifacts/windows-${{ matrix.target }}.spdx.json
|
||||
upload-artifact: false
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||
path: artifacts/
|
||||
|
|
@ -328,13 +328,13 @@ jobs:
|
|||
TARGET: ${{ matrix.target }}
|
||||
SHOULD_RUN: ${{ (matrix.target == 'vanilla' || github.ref_type == 'tag') }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Set up cache
|
||||
if: ${{ env.SHOULD_RUN == 'true' && env.CACHE_ENABLED == 'true' }}
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
|
|
@ -382,7 +382,7 @@ jobs:
|
|||
upload-artifact: false
|
||||
- name: Upload
|
||||
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||
path: src/android/app/artifacts/
|
||||
|
|
@ -396,15 +396,24 @@ jobs:
|
|||
sbom-path: src/android/app/artifacts/android-${{ matrix.target }}.spdx.json
|
||||
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- target: x86_64
|
||||
os: ubuntu-24.04
|
||||
- target: arm64
|
||||
os: ubuntu-24.04-arm
|
||||
runs-on: ${{ matrix.os }}
|
||||
container:
|
||||
image: docker:dind
|
||||
# Can't use docker:dind for ARM64 because it's Alpine-based, see https://github.com/actions/upload-artifact/issues/739
|
||||
image: earthbuild/dind:ubuntu-24.04-docker-28.5.2-1
|
||||
env:
|
||||
TARGET: ${{ matrix.target }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Install tools
|
||||
run: apk add bash
|
||||
- name: Fix git ownership
|
||||
run: git config --global --add safe.directory .
|
||||
- name: Build Docker image
|
||||
|
|
@ -422,9 +431,9 @@ jobs:
|
|||
output-file: artifacts/docker-room.spdx.json
|
||||
upload-artifact: false
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: docker
|
||||
name: docker-${{ env.TARGET }}
|
||||
path: artifacts/
|
||||
- name: Attest artifacts
|
||||
if: ${{ github.ref_type == 'tag' }}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ jobs:
|
|||
(github.event.pull_request.author_association != 'OWNER')
|
||||
steps:
|
||||
- name: Detect PR if author is first-time contributor
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@v9
|
||||
with:
|
||||
script: |
|
||||
const { owner, repo } = context.repo;
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ jobs:
|
|||
if: github.event.issue.pull_request && contains(github.event.issue.labels.*.name, 'needs verification')
|
||||
steps:
|
||||
- name: Verify and reopen PR
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@v9
|
||||
with:
|
||||
script: |
|
||||
const { owner, repo } = context.repo;
|
||||
|
|
|
|||
2
.github/workflows/format.yml
vendored
2
.github/workflows/format.yml
vendored
|
|
@ -13,7 +13,7 @@ jobs:
|
|||
image: opensauce04/azahar-build-environment:latest
|
||||
options: -u 1001
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Build
|
||||
|
|
|
|||
25
.github/workflows/libretro.yml
vendored
25
.github/workflows/libretro.yml
vendored
|
|
@ -28,7 +28,7 @@ jobs:
|
|||
BUILD_DIR: build/android-arm64-v8a
|
||||
EXTRA_PATH: bin/Release
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Set tag name
|
||||
|
|
@ -62,7 +62,7 @@ jobs:
|
|||
output-file: libretro-android.spdx.json
|
||||
upload-artifact: false
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||
path: |
|
||||
|
|
@ -85,7 +85,7 @@ jobs:
|
|||
EXTRA_PATH: bin/Release
|
||||
EXTRA_CORE_ARGS: -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DENABLE_LTO=OFF
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Install tools
|
||||
|
|
@ -108,7 +108,7 @@ jobs:
|
|||
output-file: libretro-linux.spdx.json
|
||||
upload-artifact: false
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||
path: |
|
||||
|
|
@ -133,7 +133,7 @@ jobs:
|
|||
IMAGE: reallibretroretroarch/libretro-build-mxe-win-cross-cores:mingw12
|
||||
EXTRA_PATH: bin/Release
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Build in cross-container
|
||||
|
|
@ -158,7 +158,7 @@ jobs:
|
|||
output-file: libretro-windows.spdx.json
|
||||
upload-artifact: false
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||
path: |
|
||||
|
|
@ -174,6 +174,7 @@ jobs:
|
|||
macos:
|
||||
runs-on: macos-26
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target: ["x86_64", "arm64"]
|
||||
env:
|
||||
|
|
@ -183,7 +184,7 @@ jobs:
|
|||
BUILD_DIR: build/osx-${{ matrix.target }}
|
||||
EXTRA_PATH: bin/Release
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Install tools
|
||||
|
|
@ -204,7 +205,7 @@ jobs:
|
|||
output-file: libretro-macos-${{ matrix.target }}.spdx.json
|
||||
upload-artifact: false
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||
path: |
|
||||
|
|
@ -227,7 +228,7 @@ jobs:
|
|||
EXTRA_PATH: bin/Release
|
||||
EXTRA_CORE_ARGS: -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_C_FLAGS=-DIOS -DCMAKE_CXX_FLAGS=-DIOS -DIOS=ON -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCITRA_USE_PRECOMPILED_HEADERS=OFF -DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_OPT=OFF
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Build
|
||||
|
|
@ -246,7 +247,7 @@ jobs:
|
|||
output-file: libretro-ios.spdx.json
|
||||
upload-artifact: false
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||
path: |
|
||||
|
|
@ -269,7 +270,7 @@ jobs:
|
|||
EXTRA_PATH: bin/Release
|
||||
EXTRA_CORE_ARGS: -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_C_FLAGS=-DIOS -DCMAKE_CXX_FLAGS=-DIOS -DIOS=ON -DCMAKE_SYSTEM_NAME=tvOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCITRA_USE_PRECOMPILED_HEADERS=OFF -DCMAKE_OSX_SYSROOT=appletvos -DCMAKE_OSX_ARCHITECTURES=arm64 -DENABLE_OPT=OFF
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Build
|
||||
|
|
@ -288,7 +289,7 @@ jobs:
|
|||
output-file: libretro-tvos.spdx.json
|
||||
upload-artifact: false
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||
path: |
|
||||
|
|
|
|||
2
.github/workflows/license-header.yml
vendored
2
.github/workflows/license-header.yml
vendored
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
image: opensauce04/azahar-build-environment:latest
|
||||
options: -u 1001
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Fetch master branch
|
||||
|
|
|
|||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
permissions:
|
||||
issues: write
|
||||
steps:
|
||||
- uses: actions/stale@v9.1.0
|
||||
- uses: actions/stale@v10.2.0
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-issue-stale: 90
|
||||
|
|
|
|||
2
.github/workflows/transifex.yml
vendored
2
.github/workflows/transifex.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
container: opensauce04/azahar-build-environment:latest
|
||||
if: ${{ github.repository == 'azahar-emu/azahar' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
|
|
|
|||
9
.gitmodules
vendored
9
.gitmodules
vendored
|
|
@ -55,12 +55,6 @@
|
|||
[submodule "sdl2"]
|
||||
path = externals/sdl2/SDL
|
||||
url = https://github.com/libsdl-org/SDL
|
||||
[submodule "cryptopp-cmake"]
|
||||
path = externals/cryptopp-cmake
|
||||
url = https://github.com/abdes/cryptopp-cmake.git
|
||||
[submodule "cryptopp"]
|
||||
path = externals/cryptopp
|
||||
url = https://github.com/weidai11/cryptopp.git
|
||||
[submodule "dds-ktx"]
|
||||
path = externals/dds-ktx
|
||||
url = https://github.com/septag/dds-ktx
|
||||
|
|
@ -109,3 +103,6 @@
|
|||
[submodule "dllwalker"]
|
||||
path = externals/dllwalker
|
||||
url = https://github.com/azahar-emu/dllwalker
|
||||
[submodule "externals/cryptopp"]
|
||||
path = externals/cryptopp
|
||||
url = https://github.com/cryptopp-modern/cryptopp-modern.git
|
||||
|
|
|
|||
2
dist/languages/.tx/config
vendored
2
dist/languages/.tx/config
vendored
|
|
@ -12,4 +12,4 @@ lang_map = ca@valencia:ca_ES_valencia
|
|||
file_filter = ../../src/android/app/src/main/res/values-<lang>/strings.xml
|
||||
source_file = ../../src/android/app/src/main/res/values/strings.xml
|
||||
type = ANDROID
|
||||
lang_map = es_ES:b+es+ES, hu_HU:b+hu+HU, ru_RU:b+ru+RU, pt_BR:b+pt+BR, zh_CN:b+zh+CN, pl_PL:b+pl+PL, ca@valencia:b+ca+ES+valencia, ko_KR:b+ko+KR, da_DK:b+da+DK, ja_JP:b+ja+JP, lt_LT:b+lt+LT, ro_RO:b+ro+RO, tr_TR:b+tr+TR, vi_VN:b+vi+VN, zh_TW:b+zh+TW, es_419:b+es+419
|
||||
lang_map = ca@valencia:b+ca+ES+valencia, es_419:b+es+419, pt_BR:b+pt+BR, zh_CN:b+zh+CN, zh_TW:b+zh+TW
|
||||
|
|
|
|||
536
dist/languages/ca_ES_valencia.ts
vendored
536
dist/languages/ca_ES_valencia.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/da_DK.ts → dist/languages/da.ts
vendored
538
dist/languages/da_DK.ts → dist/languages/da.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/de.ts
vendored
536
dist/languages/de.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/el.ts
vendored
536
dist/languages/el.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/es_ES.ts → dist/languages/es.ts
vendored
538
dist/languages/es_ES.ts → dist/languages/es.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/es_419.ts
vendored
536
dist/languages/es_419.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/fi.ts
vendored
536
dist/languages/fi.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/fr.ts
vendored
536
dist/languages/fr.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/hu_HU.ts → dist/languages/hu.ts
vendored
538
dist/languages/hu_HU.ts → dist/languages/hu.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/id.ts
vendored
536
dist/languages/id.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/it.ts
vendored
536
dist/languages/it.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/ja_JP.ts → dist/languages/ja.ts
vendored
538
dist/languages/ja_JP.ts → dist/languages/ja.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/ko_KR.ts → dist/languages/ko.ts
vendored
538
dist/languages/ko_KR.ts → dist/languages/ko.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/lt_LT.ts → dist/languages/lt.ts
vendored
538
dist/languages/lt_LT.ts → dist/languages/lt.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/nb.ts
vendored
536
dist/languages/nb.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/nl.ts
vendored
536
dist/languages/nl.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/pl_PL.ts → dist/languages/pl.ts
vendored
538
dist/languages/pl_PL.ts → dist/languages/pl.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/pt_BR.ts
vendored
536
dist/languages/pt_BR.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/ro_RO.ts → dist/languages/ro.ts
vendored
538
dist/languages/ro_RO.ts → dist/languages/ro.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/ru_RU.ts → dist/languages/ru.ts
vendored
538
dist/languages/ru_RU.ts → dist/languages/ru.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/sv.ts
vendored
536
dist/languages/sv.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/tr_TR.ts → dist/languages/tr.ts
vendored
538
dist/languages/tr_TR.ts → dist/languages/tr.ts
vendored
File diff suppressed because it is too large
Load diff
538
dist/languages/vi_VN.ts → dist/languages/vi.ts
vendored
538
dist/languages/vi_VN.ts → dist/languages/vi.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/zh_CN.ts
vendored
536
dist/languages/zh_CN.ts
vendored
File diff suppressed because it is too large
Load diff
536
dist/languages/zh_TW.ts
vendored
536
dist/languages/zh_TW.ts
vendored
File diff suppressed because it is too large
Load diff
|
|
@ -4,24 +4,19 @@
|
|||
# --- Builder ----------------
|
||||
FROM opensauce04/azahar-build-environment:latest AS builder
|
||||
|
||||
COPY . /var/azahar-src
|
||||
RUN mkdir /var/azahar-src/
|
||||
COPY ./ /var/azahar-src/
|
||||
|
||||
RUN mkdir builddir && cd builddir && \
|
||||
cmake /var/azahar-src -G Ninja \
|
||||
RUN mkdir ./builddir/
|
||||
WORKDIR ./builddir/
|
||||
RUN cmake /var/azahar-src -G Ninja \
|
||||
-DENABLE_QT=OFF \
|
||||
-DENABLE_GDBSTUB=OFF \
|
||||
-DENABLE_TESTS=OFF \
|
||||
-DENABLE_ROOM=ON \
|
||||
-DENABLE_ROOM_STANDALONE=ON \
|
||||
-DENABLE_OPENGL=OFF $( : "TODO: Can we disable these automatically when there's no frontend?") \
|
||||
-DENABLE_VULKAN=OFF \
|
||||
-DENABLE_SDL2=OFF \
|
||||
-DENABLE_LIBUSB=OFF \
|
||||
-DENABLE_CUBEB=OFF \
|
||||
-DENABLE_OPENAL=OFF && \
|
||||
ninja && \
|
||||
mv bin/Release/azahar-room /usr/local/bin/ && \
|
||||
cd .. && rm -rf builddir
|
||||
-DENABLE_ROOM_STANDALONE=ON
|
||||
RUN ninja
|
||||
RUN mv ./bin/Release/azahar-room /usr/local/bin/
|
||||
|
||||
# --- Final ------------------
|
||||
FROM debian:trixie AS final
|
||||
|
|
|
|||
10
externals/CMakeLists.txt
vendored
10
externals/CMakeLists.txt
vendored
|
|
@ -69,17 +69,9 @@ if(USE_SYSTEM_CRYPTOPP)
|
|||
add_library(cryptopp INTERFACE)
|
||||
target_link_libraries(cryptopp INTERFACE cryptopp::cryptopp)
|
||||
else()
|
||||
if (WIN32 AND NOT MSVC AND "arm64" IN_LIST ARCHITECTURE)
|
||||
# TODO: CryptoPP ARM64 ASM does not seem to support Windows unless compiled with MSVC.
|
||||
# TODO: See https://github.com/weidai11/cryptopp/issues/1260
|
||||
set(CRYPTOPP_DISABLE_ASM ON CACHE BOOL "")
|
||||
endif()
|
||||
|
||||
set(CRYPTOPP_BUILD_DOCUMENTATION OFF CACHE BOOL "")
|
||||
set(CRYPTOPP_BUILD_TESTING OFF CACHE BOOL "")
|
||||
set(CRYPTOPP_INSTALL OFF CACHE BOOL "")
|
||||
set(CRYPTOPP_SOURCES "${CMAKE_SOURCE_DIR}/externals/cryptopp" CACHE STRING "")
|
||||
add_subdirectory(cryptopp-cmake EXCLUDE_FROM_ALL)
|
||||
add_subdirectory(cryptopp EXCLUDE_FROM_ALL)
|
||||
endif()
|
||||
|
||||
# dds-ktx
|
||||
|
|
|
|||
2
externals/cryptopp
vendored
2
externals/cryptopp
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit 60f81a77e0c9a0e7ffc1ca1bc438ddfa2e43b78e
|
||||
Subproject commit 8d92d788421483a43e09acf1cd4a2861cb2b8cab
|
||||
1
externals/cryptopp-cmake
vendored
1
externals/cryptopp-cmake
vendored
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 00a151f8489daaa32434ab1f340e6750793ddf0c
|
||||
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
package org.citra.citra_emu.features.settings.model
|
||||
|
||||
import org.citra.citra_emu.features.settings.SettingKeys
|
||||
|
||||
enum class IntListSetting(
|
||||
override val key: String,
|
||||
override val section: String,
|
||||
|
|
@ -11,7 +13,7 @@ enum class IntListSetting(
|
|||
val canBeEmpty: Boolean = true
|
||||
) : AbstractListSetting<Int> {
|
||||
|
||||
LAYOUTS_TO_CYCLE("layouts_to_cycle", Settings.SECTION_LAYOUT, listOf(0, 1, 2, 3, 4, 5), canBeEmpty = false);
|
||||
LAYOUTS_TO_CYCLE(SettingKeys.layouts_to_cycle(), Settings.SECTION_LAYOUT, listOf(0, 1, 2, 3, 4, 5), canBeEmpty = false);
|
||||
|
||||
private var backingList: List<Int> = defaultValue
|
||||
private var lastValidList : List<Int> = defaultValue
|
||||
|
|
|
|||
|
|
@ -339,14 +339,13 @@ void Config::Reload() {
|
|||
for (auto key = Settings::Keys::keys_array.begin(); key != Settings::Keys::keys_array.end();
|
||||
++key) {
|
||||
const auto key_declaration_string = std::string(*key) + " =";
|
||||
// FIXME: This code looks so ass when formatted by clang-format -OS
|
||||
if (std::ranges::find(DefaultINI::android_config_omitted_keys, *key) ==
|
||||
std::end(DefaultINI::android_config_omitted_keys) &&
|
||||
std::string(DefaultINI::android_config_default_file_content)
|
||||
.find(key_declaration_string) == std::string::npos) {
|
||||
if ((std::ranges::find(DefaultINI::android_config_omitted_keys, *key) ==
|
||||
std::end(DefaultINI::android_config_omitted_keys)) &&
|
||||
(std::string(DefaultINI::android_config_default_file_content)
|
||||
.find(key_declaration_string) == std::string::npos)) {
|
||||
ASSERT_MSG(false,
|
||||
"Validation of default content config failed: Missing or malformed key "
|
||||
"declaration {}",
|
||||
"Validation of default config content (jni/default_ini.h) failed: Missing "
|
||||
"declaration for key '{}'",
|
||||
*key);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,9 @@
|
|||
#include "citra_qt/debugger/graphics/graphics_vertex_shader.h"
|
||||
#include "citra_qt/debugger/ipc/recorder.h"
|
||||
#include "citra_qt/debugger/lle_service_modules.h"
|
||||
#if MICROPROFILE_ENABLED
|
||||
#include "citra_qt/debugger/profiler.h"
|
||||
#endif
|
||||
#include "citra_qt/debugger/registers.h"
|
||||
#include "citra_qt/debugger/wait_tree.h"
|
||||
#ifdef USE_DISCORD_PRESENCE
|
||||
|
|
@ -712,11 +714,6 @@ void GMainWindow::InitializeDebugWidgets() {
|
|||
microProfileDialog = new MicroProfileDialog(this);
|
||||
microProfileDialog->hide();
|
||||
debug_menu->addAction(microProfileDialog->toggleViewAction());
|
||||
#else
|
||||
auto micro_profile_stub = new QAction(tr("MicroProfile (unavailable)"), this);
|
||||
micro_profile_stub->setEnabled(false);
|
||||
micro_profile_stub->setChecked(false);
|
||||
debug_menu->addAction(micro_profile_stub);
|
||||
#endif
|
||||
|
||||
registersWidget = new RegistersWidget(system, this);
|
||||
|
|
@ -879,6 +876,8 @@ void GMainWindow::InitializeHotkeys() {
|
|||
link_action_shortcut(ui->action_Debug_Pause, QStringLiteral("Debug Pause"));
|
||||
link_action_shortcut(ui->action_Debug_Resume, QStringLiteral("Debug Resume"));
|
||||
link_action_shortcut(ui->action_Debug_Step, QStringLiteral("Debug Step"), false, true);
|
||||
link_action_shortcut(ui->action_Debug_Unschedule_All, QStringLiteral("Debug Unschedule All"));
|
||||
link_action_shortcut(ui->action_Debug_Schedule_All, QStringLiteral("Debug Schedule All"));
|
||||
link_action_shortcut(ui->action_Screen_Layout_Swap_Screens, QStringLiteral("Swap Screens"));
|
||||
link_action_shortcut(ui->action_Screen_Layout_Upright_Screens,
|
||||
QStringLiteral("Rotate Screens Upright"));
|
||||
|
|
@ -1209,6 +1208,10 @@ void GMainWindow::ConnectMenuEvents() {
|
|||
emu_thread->ExecStep();
|
||||
}
|
||||
});
|
||||
connect_menu(ui->action_Debug_Unschedule_All,
|
||||
[this] { system.DebugUnscheduleAllThreadsFromFrontend(true); });
|
||||
connect_menu(ui->action_Debug_Schedule_All,
|
||||
[this] { system.DebugUnscheduleAllThreadsFromFrontend(false); });
|
||||
|
||||
// Tools
|
||||
connect_menu(ui->action_Compress_ROM_File, &GMainWindow::OnCompressFile);
|
||||
|
|
|
|||
|
|
@ -57,15 +57,17 @@ const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> QtConfi
|
|||
// This must be in alphabetical order according to action name as it must have the same order as
|
||||
// UISetting::values.shortcuts, which is alphabetically ordered.
|
||||
// clang-format off
|
||||
const std::array<UISettings::Shortcut, 41> QtConfig::default_hotkeys {{
|
||||
const std::array<UISettings::Shortcut, 43> QtConfig::default_hotkeys {{
|
||||
{QStringLiteral("Advance Frame"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::ApplicationShortcut}},
|
||||
{QStringLiteral("Audio Mute/Unmute"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+M"), Qt::WindowShortcut}},
|
||||
{QStringLiteral("Audio Volume Down"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WindowShortcut}},
|
||||
{QStringLiteral("Audio Volume Up"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WindowShortcut}},
|
||||
{QStringLiteral("Capture Screenshot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+P"), Qt::WidgetWithChildrenShortcut}},
|
||||
{QStringLiteral("Debug Pause"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F4"),Qt::WidgetWithChildrenShortcut}},
|
||||
{QStringLiteral("Debug Resume"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F5"),Qt::WidgetWithChildrenShortcut}},
|
||||
{QStringLiteral("Debug Step"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F6"),Qt::WidgetWithChildrenShortcut}},
|
||||
{QStringLiteral("Debug Pause"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WidgetWithChildrenShortcut}},
|
||||
{QStringLiteral("Debug Resume"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WidgetWithChildrenShortcut}},
|
||||
{QStringLiteral("Debug Step"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WidgetWithChildrenShortcut}},
|
||||
{QStringLiteral("Debug Unschedule All"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WidgetWithChildrenShortcut}},
|
||||
{QStringLiteral("Debug Schedule All"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WidgetWithChildrenShortcut}},
|
||||
{QStringLiteral("Continue/Pause Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F4"), Qt::WindowShortcut}},
|
||||
{QStringLiteral("Decrease 3D Factor"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+-"), Qt::ApplicationShortcut}},
|
||||
{QStringLiteral("Decrease Speed Limit"), QStringLiteral("Main Window"), {QStringLiteral("-"), Qt::ApplicationShortcut}},
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public:
|
|||
|
||||
static const std::array<int, Settings::NativeButton::NumButtons> default_buttons;
|
||||
static const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> default_analogs;
|
||||
static const std::array<UISettings::Shortcut, 41> default_hotkeys;
|
||||
static const std::array<UISettings::Shortcut, 43> default_hotkeys;
|
||||
|
||||
private:
|
||||
void Initialize(const std::string& config_name);
|
||||
|
|
|
|||
|
|
@ -213,6 +213,9 @@
|
|||
<addaction name="action_Debug_Pause"/>
|
||||
<addaction name="action_Debug_Resume"/>
|
||||
<addaction name="action_Debug_Step"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_Debug_Unschedule_All"/>
|
||||
<addaction name="action_Debug_Schedule_All"/>
|
||||
</widget>
|
||||
<addaction name="menu_Debug"/>
|
||||
<addaction name="separator"/>
|
||||
|
|
@ -487,6 +490,22 @@
|
|||
<string>Debug Step</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_Debug_Unschedule_All">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Debug Unschedule All</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_Debug_Schedule_All">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Debug Schedule All</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_Dump_Video">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
|
|
|
|||
|
|
@ -833,6 +833,19 @@ bool System::IsInitialSetup() {
|
|||
return app_loader && app_loader->DoingInitialSetup();
|
||||
}
|
||||
|
||||
void System::DebugUnscheduleAllThreadsFromFrontend(bool unschedule) {
|
||||
if (!is_powered_on)
|
||||
return;
|
||||
|
||||
for (auto proc : kernel->GetProcessList()) {
|
||||
if (unschedule) {
|
||||
proc->SetUnscheduleMode(Kernel::UnscheduleMode::FRONTEND);
|
||||
} else {
|
||||
proc->ClearUnscheduleMode(Kernel::UnscheduleMode::FRONTEND);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <class Archive>
|
||||
void System::serialize(Archive& ar, const unsigned int file_version) {
|
||||
|
||||
|
|
|
|||
|
|
@ -419,6 +419,8 @@ public:
|
|||
debug_next_process = false;
|
||||
}
|
||||
|
||||
void DebugUnscheduleAllThreadsFromFrontend(bool unschedule);
|
||||
|
||||
private:
|
||||
/**
|
||||
* Initialize the emulated system.
|
||||
|
|
|
|||
|
|
@ -877,7 +877,7 @@ static void HandleGetStopReason() {
|
|||
for (const auto& process : process_list) {
|
||||
if (process->codeset->program_id == program_id) {
|
||||
current_process = process.get();
|
||||
current_process->SetDebugBreak(true);
|
||||
current_process->SetUnscheduleMode(Kernel::UnscheduleMode::GDB);
|
||||
is_running = false;
|
||||
if (SetThread(0)) {
|
||||
SendStopReply(current_thread, 0);
|
||||
|
|
@ -900,7 +900,7 @@ static void BreakImpl(int signal) {
|
|||
"and memory exceptions. Disable CPU JIT for more accuracy.");
|
||||
}
|
||||
|
||||
current_process->SetDebugBreak(true);
|
||||
current_process->SetUnscheduleMode(Kernel::UnscheduleMode::GDB);
|
||||
is_running = false;
|
||||
|
||||
latest_signal = signal;
|
||||
|
|
@ -1248,7 +1248,7 @@ static void Continue() {
|
|||
continue_list.push_back(thread_id);
|
||||
}
|
||||
|
||||
current_process->SetDebugBreak(false, continue_list);
|
||||
current_process->ClearUnscheduleMode(Kernel::UnscheduleMode::GDB, continue_list);
|
||||
is_running = true;
|
||||
|
||||
ClearAllInstructionCache();
|
||||
|
|
@ -1414,7 +1414,7 @@ void HandleVCommand() {
|
|||
SendReply("E02");
|
||||
} else {
|
||||
current_process = process.get();
|
||||
current_process->SetDebugBreak(true);
|
||||
current_process->SetUnscheduleMode(Kernel::UnscheduleMode::GDB);
|
||||
is_running = false;
|
||||
if (SetThread(0)) {
|
||||
SendStopReply(current_thread, 0);
|
||||
|
|
@ -1456,7 +1456,7 @@ void HandleVCommand() {
|
|||
HexToInt(reinterpret_cast<const u8*>(threads[i].c_str()), threads[i].size()));
|
||||
}
|
||||
|
||||
current_process->SetDebugBreak(false, thread_ids);
|
||||
current_process->ClearUnscheduleMode(Kernel::UnscheduleMode::GDB, thread_ids);
|
||||
is_running = true;
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@ void Process::Run(s32 main_thread_priority, u32 stack_size) {
|
|||
#ifdef ENABLE_GDBSTUB
|
||||
if (GDBStub::IsServerEnabled()) {
|
||||
LOG_INFO(Loader, "Pausing process {} at start", process_id);
|
||||
SetDebugBreak(true);
|
||||
SetUnscheduleMode(Kernel::UnscheduleMode::GDB);
|
||||
}
|
||||
#endif
|
||||
Core::System::GetInstance().ClearDebugNextProcessFlag();
|
||||
|
|
@ -624,7 +624,8 @@ std::vector<std::shared_ptr<Kernel::Thread>> Kernel::Process::GetThreadList() {
|
|||
return ret;
|
||||
}
|
||||
|
||||
void Kernel::Process::SetDebugBreak(bool debug_break, std::vector<u32> thread_ids) {
|
||||
void Kernel::Process::ChangeUnscheduleMode(UnscheduleMode mode, std::vector<u32> thread_ids,
|
||||
bool set) {
|
||||
auto thread_list = GetThreadList();
|
||||
bool needs_reschedule = false;
|
||||
for (auto& t : thread_list) {
|
||||
|
|
@ -636,7 +637,7 @@ void Kernel::Process::SetDebugBreak(bool debug_break, std::vector<u32> thread_id
|
|||
}
|
||||
}
|
||||
|
||||
needs_reschedule |= t->SetDebugBreak(debug_break);
|
||||
needs_reschedule |= (set ? t->SetUnscheduleMode(mode) : t->ClearUnscheduleMode(mode));
|
||||
}
|
||||
|
||||
if (needs_reschedule) {
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
#include <boost/container/static_vector.hpp>
|
||||
#include <boost/serialization/export.hpp>
|
||||
#include "common/bit_field.h"
|
||||
#include "common/common_funcs.h"
|
||||
#include "common/common_types.h"
|
||||
#include "core/hle/kernel/handle_table.h"
|
||||
#include "core/hle/kernel/object.h"
|
||||
|
|
@ -51,6 +52,13 @@ union ProcessFlags {
|
|||
BitField<12, 1, u16> loaded_high; ///< Application loaded high (not at 0x00100000).
|
||||
};
|
||||
|
||||
enum class UnscheduleMode : u32 {
|
||||
SVC = (1 << 0),
|
||||
GDB = (1 << 1),
|
||||
FRONTEND = (1 << 2),
|
||||
};
|
||||
DECLARE_ENUM_FLAG_OPERATORS(UnscheduleMode);
|
||||
|
||||
enum class ProcessStatus { Created, Running, Exited };
|
||||
|
||||
class ResourceLimit;
|
||||
|
|
@ -228,9 +236,15 @@ public:
|
|||
|
||||
std::vector<std::shared_ptr<Kernel::Thread>> GetThreadList();
|
||||
|
||||
void SetDebugBreak(bool debug_break, std::vector<u32> thread_ids = {});
|
||||
void SetUnscheduleMode(UnscheduleMode mode, std::vector<u32> thread_ids = {}) {
|
||||
ChangeUnscheduleMode(mode, thread_ids, true);
|
||||
}
|
||||
void ClearUnscheduleMode(UnscheduleMode mode, std::vector<u32> thread_ids = {}) {
|
||||
ChangeUnscheduleMode(mode, thread_ids, false);
|
||||
}
|
||||
|
||||
private:
|
||||
void ChangeUnscheduleMode(UnscheduleMode mode, std::vector<u32> thread_ids, bool set);
|
||||
void FreeAllMemory();
|
||||
|
||||
KernelSystem& kernel;
|
||||
|
|
|
|||
|
|
@ -2191,7 +2191,11 @@ Result SVC::ControlProcess(Handle process_handle, u32 process_OP, u32 varg2, u32
|
|||
kernel.GetCurrentThreadManager().GetCurrentThread()->thread_id) {
|
||||
continue;
|
||||
}
|
||||
thread.get()->can_schedule = !varg2;
|
||||
if (varg2) {
|
||||
thread->SetUnscheduleMode(Kernel::UnscheduleMode::SVC);
|
||||
} else {
|
||||
thread->ClearUnscheduleMode(Kernel::UnscheduleMode::SVC);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ResultSuccess;
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ void Thread::serialize(Archive& ar, const unsigned int file_version) {
|
|||
}
|
||||
}
|
||||
ar & wakeup_callback;
|
||||
ar & debug_break;
|
||||
ar & unschedule_mode;
|
||||
}
|
||||
SERIALIZE_IMPL(Thread)
|
||||
|
||||
|
|
@ -545,12 +545,20 @@ VAddr Thread::GetCommandBufferAddress() const {
|
|||
return GetTLSAddress() + command_header_offset;
|
||||
}
|
||||
|
||||
bool Thread::SetDebugBreak(bool _debug_break) {
|
||||
if (debug_break == _debug_break) {
|
||||
return false;
|
||||
}
|
||||
debug_break = _debug_break;
|
||||
return true;
|
||||
bool Thread::SetUnscheduleMode(UnscheduleMode mode) {
|
||||
UnscheduleMode old = unschedule_mode;
|
||||
|
||||
unschedule_mode |= mode;
|
||||
|
||||
return unschedule_mode != old;
|
||||
}
|
||||
|
||||
bool Thread::ClearUnscheduleMode(UnscheduleMode mode) {
|
||||
UnscheduleMode old = unschedule_mode;
|
||||
|
||||
unschedule_mode &= ~mode;
|
||||
|
||||
return unschedule_mode != old;
|
||||
}
|
||||
|
||||
CpuLimiter::~CpuLimiter() {}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
#include "core/arm/arm_interface.h"
|
||||
#include "core/core_timing.h"
|
||||
#include "core/hle/kernel/object.h"
|
||||
#include "core/hle/kernel/process.h"
|
||||
#include "core/hle/kernel/resource_limit.h"
|
||||
#include "core/hle/kernel/wait_object.h"
|
||||
#include "core/hle/result.h"
|
||||
|
|
@ -28,7 +29,6 @@
|
|||
namespace Kernel {
|
||||
|
||||
class Mutex;
|
||||
class Process;
|
||||
|
||||
enum ThreadPriority : u32 {
|
||||
ThreadPrioHighest = 0, ///< Highest thread priority
|
||||
|
|
@ -366,19 +366,16 @@ public:
|
|||
}
|
||||
|
||||
bool CanSchedule() {
|
||||
// TODO(PabloMK7): This may not be the proper way
|
||||
// threads are marked as non-schedulable when they
|
||||
// are in debug break. Figure out and fix.
|
||||
return can_schedule && !debug_break;
|
||||
return static_cast<u32>(unschedule_mode) == 0;
|
||||
}
|
||||
|
||||
bool SetDebugBreak(bool debug_break);
|
||||
bool SetUnscheduleMode(UnscheduleMode mode);
|
||||
bool ClearUnscheduleMode(UnscheduleMode mode);
|
||||
|
||||
Core::ARM_Interface::ThreadContext context{};
|
||||
|
||||
u32 thread_id;
|
||||
|
||||
bool can_schedule{true};
|
||||
ThreadStatus status;
|
||||
VAddr entry_point;
|
||||
VAddr stack_top;
|
||||
|
|
@ -419,7 +416,10 @@ public:
|
|||
|
||||
private:
|
||||
ThreadManager& thread_manager;
|
||||
bool debug_break{};
|
||||
|
||||
// Does not represent how real HW works, instead it mimics behaviour
|
||||
// taking into account how our scheduler works.
|
||||
UnscheduleMode unschedule_mode{};
|
||||
|
||||
friend class boost::serialization::access;
|
||||
template <class Archive>
|
||||
|
|
|
|||
|
|
@ -58,6 +58,9 @@ void PicaCore::InitializeRegs() {
|
|||
// Values initialized by GSP
|
||||
regs.internal.irq_autostop = 1;
|
||||
regs.internal.irq_mask = 0xFFFFFFF0;
|
||||
// Older versions of libctru didn't initialize this, initialize it here to avoid endless black
|
||||
// screen. Not needed on actual hardware due to previous software already having set it up
|
||||
regs.internal.irq_compare = 0x12345678;
|
||||
|
||||
auto& framebuffer_top = regs.framebuffer_config[0];
|
||||
auto& framebuffer_sub = regs.framebuffer_config[1];
|
||||
|
|
|
|||
|
|
@ -666,8 +666,21 @@ void RasterizerOpenGL::SyncTextureUnits(const Framebuffer* framebuffer) {
|
|||
|
||||
// If the texture unit is disabled unbind the corresponding gl unit
|
||||
if (!texture.enabled) {
|
||||
const Surface& null_surface = res_cache.GetSurface(VideoCore::NULL_SURFACE_ID);
|
||||
state.texture_units[texture_index].texture_2d = null_surface.Handle();
|
||||
switch (texture.config.type.Value()) {
|
||||
case TextureType::TextureCube:
|
||||
case TextureType::ShadowCube: {
|
||||
state.texture_units[texture_index].texture_2d =
|
||||
res_cache.GetSurface(VideoCore::NULL_SURFACE_CUBE_ID).Handle();
|
||||
state.texture_units[texture_index].target = GL_TEXTURE_CUBE_MAP;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
state.texture_units[texture_index].texture_2d =
|
||||
res_cache.GetSurface(VideoCore::NULL_SURFACE_ID).Handle();
|
||||
state.texture_units[texture_index].target = GL_TEXTURE_2D;
|
||||
break;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ void FragmentModule::Generate() {
|
|||
break;
|
||||
case TexturingRegs::FogMode::Gas:
|
||||
WriteGas();
|
||||
// Return early due to unimplemented gas mode
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -196,7 +197,12 @@ void FragmentModule::WriteFog() {
|
|||
void FragmentModule::WriteGas() {
|
||||
// TODO: Implement me
|
||||
LOG_CRITICAL(Render, "Unimplemented gas mode");
|
||||
OpKill();
|
||||
// Replace the output color with a transparent pixel,
|
||||
// (just discarding the pixel causes graphical issues
|
||||
// in some MH games).
|
||||
OpStore(color_id, ConstF32(0.f, 0.f, 0.f, 0.f));
|
||||
|
||||
OpReturn();
|
||||
OpFunctionEnd();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue