mirror of
https://github.com/azahar-emu/azahar.git
synced 2026-06-06 02:33:44 -04:00
Compare commits
19 commits
2126.0-alp
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
379649dbce | ||
|
|
c03248f158 | ||
|
|
4867bb2e2b | ||
|
|
4e4c7e687b | ||
|
|
56f738eb06 | ||
|
|
b1e537a485 | ||
|
|
59da460177 | ||
|
|
8bdb60a6e1 | ||
|
|
383a28795e | ||
|
|
725544f3b4 | ||
|
|
135f10320a | ||
|
|
0b7114cbf8 | ||
|
|
95d42cb40a | ||
|
|
f0bc64d967 | ||
|
|
ad8526c4cf | ||
|
|
ae7d7dca1f | ||
|
|
4a4b75b0de | ||
|
|
b186b04995 | ||
|
|
ab6896a2ca |
71 changed files with 7054 additions and 6725 deletions
|
|
@ -12,9 +12,9 @@ fi
|
||||||
|
|
||||||
echo "Tag name is: $TAG_NAME"
|
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
|
mkdir -p build
|
||||||
FILENAME="azahar-room-$TAG_NAME.dockerimage"
|
FILENAME="azahar-room-$TARGET-$TAG_NAME.dockerimage"
|
||||||
docker save azahar-room:$TAG_NAME > build/$FILENAME
|
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 }}
|
if: ${{ !github.head_ref }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Pack
|
- name: Pack
|
||||||
|
|
@ -31,7 +31,7 @@ jobs:
|
||||||
output-file: artifacts/source.spdx.json
|
output-file: artifacts/source.spdx.json
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: source
|
name: source
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
|
|
@ -61,13 +61,13 @@ jobs:
|
||||||
SHOULD_RUN: ${{ (matrix.target != 'appimage-wayland' || github.ref_type == 'tag') }}
|
SHOULD_RUN: ${{ (matrix.target != 'appimage-wayland' || github.ref_type == 'tag') }}
|
||||||
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
|
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
if: ${{ env.SHOULD_RUN == 'true' }}
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up cache
|
- name: Set up cache
|
||||||
if: ${{ env.SHOULD_RUN == 'true' && env.CACHE_ENABLED == 'true' }}
|
if: ${{ env.SHOULD_RUN == 'true' && env.CACHE_ENABLED == 'true' }}
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: ${{ github.job }}-${{ matrix.target }}-${{ github.sha }}
|
key: ${{ github.job }}-${{ matrix.target }}-${{ github.sha }}
|
||||||
|
|
@ -95,7 +95,7 @@ jobs:
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
if: ${{ contains(matrix.target, 'appimage') && env.SHOULD_RUN == 'true' }}
|
if: ${{ contains(matrix.target, 'appimage') && env.SHOULD_RUN == 'true' }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ github.job }}-${{ matrix.target }}
|
name: ${{ github.job }}-${{ matrix.target }}
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
|
|
@ -123,11 +123,11 @@ jobs:
|
||||||
OS: linux
|
OS: linux
|
||||||
TARGET: ${{ matrix.target }}
|
TARGET: ${{ matrix.target }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up cache
|
- name: Set up cache
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: ${{ github.job }}-${{ matrix.target }}-${{ github.sha }}
|
key: ${{ github.job }}-${{ matrix.target }}-${{ github.sha }}
|
||||||
|
|
@ -145,12 +145,12 @@ jobs:
|
||||||
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
|
CACHE_ENABLED: ${{ github.ref_type != 'tag' }}
|
||||||
OS: macos
|
OS: macos
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up cache
|
- name: Set up cache
|
||||||
if: ${{ env.CACHE_ENABLED == 'true' }}
|
if: ${{ env.CACHE_ENABLED == 'true' }}
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: ${{ runner.os }}-${{ github.sha }}
|
key: ${{ runner.os }}-${{ github.sha }}
|
||||||
|
|
@ -183,7 +183,7 @@ jobs:
|
||||||
output-file: artifacts/macos.spdx.json
|
output-file: artifacts/macos.spdx.json
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}
|
name: ${{ env.OS }}
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
|
|
@ -222,12 +222,12 @@ jobs:
|
||||||
OS: windows
|
OS: windows
|
||||||
TARGET: ${{ matrix.target }}
|
TARGET: ${{ matrix.target }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up cache
|
- name: Set up cache
|
||||||
if: ${{ env.CACHE_ENABLED == 'true' }}
|
if: ${{ env.CACHE_ENABLED == 'true' }}
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ${{ env.CCACHE_DIR }}
|
path: ${{ env.CCACHE_DIR }}
|
||||||
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}
|
key: ${{ runner.os }}-${{ matrix.target }}-${{ github.sha }}
|
||||||
|
|
@ -235,7 +235,7 @@ jobs:
|
||||||
${{ runner.os }}-${{ matrix.target }}-
|
${{ runner.os }}-${{ matrix.target }}-
|
||||||
- name: Set up MSVC
|
- name: Set up MSVC
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
uses: ilammy/msvc-dev-cmd@v1
|
uses: azahar-emu/msvc-dev-cmd@v1
|
||||||
- name: Install extra tools (MSVC)
|
- name: Install extra tools (MSVC)
|
||||||
if: ${{ matrix.target == 'msvc' }}
|
if: ${{ matrix.target == 'msvc' }}
|
||||||
run: choco install ccache ninja ptime wget
|
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
|
qt6-base:p qt6-multimedia:p qt6-multimedia-wmf:p qt6-tools:p qt6-translations:p
|
||||||
- name: Install extra tools (MSYS2)
|
- name: Install extra tools (MSYS2)
|
||||||
if: ${{ matrix.target == 'msys2' }}
|
if: ${{ matrix.target == 'msys2' }}
|
||||||
uses: crazy-max/ghaction-chocolatey@v3
|
uses: crazy-max/ghaction-chocolatey@v4
|
||||||
with:
|
with:
|
||||||
args: install ptime wget
|
args: install ptime wget
|
||||||
- name: Install NSIS
|
- name: Install NSIS
|
||||||
|
|
@ -300,7 +300,7 @@ jobs:
|
||||||
output-file: artifacts/windows-${{ matrix.target }}.spdx.json
|
output-file: artifacts/windows-${{ matrix.target }}.spdx.json
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
|
|
@ -328,13 +328,13 @@ jobs:
|
||||||
TARGET: ${{ matrix.target }}
|
TARGET: ${{ matrix.target }}
|
||||||
SHOULD_RUN: ${{ (matrix.target == 'vanilla' || github.ref_type == 'tag') }}
|
SHOULD_RUN: ${{ (matrix.target == 'vanilla' || github.ref_type == 'tag') }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
if: ${{ env.SHOULD_RUN == 'true' }}
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set up cache
|
- name: Set up cache
|
||||||
if: ${{ env.SHOULD_RUN == 'true' && env.CACHE_ENABLED == 'true' }}
|
if: ${{ env.SHOULD_RUN == 'true' && env.CACHE_ENABLED == 'true' }}
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
~/.gradle/caches
|
~/.gradle/caches
|
||||||
|
|
@ -382,7 +382,7 @@ jobs:
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
if: ${{ env.SHOULD_RUN == 'true' }}
|
if: ${{ env.SHOULD_RUN == 'true' }}
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: src/android/app/artifacts/
|
path: src/android/app/artifacts/
|
||||||
|
|
@ -396,15 +396,24 @@ jobs:
|
||||||
sbom-path: src/android/app/artifacts/android-${{ matrix.target }}.spdx.json
|
sbom-path: src/android/app/artifacts/android-${{ matrix.target }}.spdx.json
|
||||||
|
|
||||||
docker:
|
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:
|
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:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Install tools
|
|
||||||
run: apk add bash
|
|
||||||
- name: Fix git ownership
|
- name: Fix git ownership
|
||||||
run: git config --global --add safe.directory .
|
run: git config --global --add safe.directory .
|
||||||
- name: Build Docker image
|
- name: Build Docker image
|
||||||
|
|
@ -422,9 +431,9 @@ jobs:
|
||||||
output-file: artifacts/docker-room.spdx.json
|
output-file: artifacts/docker-room.spdx.json
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: docker
|
name: docker-${{ env.TARGET }}
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
- name: Attest artifacts
|
- name: Attest artifacts
|
||||||
if: ${{ github.ref_type == 'tag' }}
|
if: ${{ github.ref_type == 'tag' }}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ jobs:
|
||||||
(github.event.pull_request.author_association != 'OWNER')
|
(github.event.pull_request.author_association != 'OWNER')
|
||||||
steps:
|
steps:
|
||||||
- name: Detect PR if author is first-time contributor
|
- name: Detect PR if author is first-time contributor
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const { owner, repo } = context.repo;
|
const { owner, repo } = context.repo;
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ jobs:
|
||||||
if: github.event.issue.pull_request && contains(github.event.issue.labels.*.name, 'needs verification')
|
if: github.event.issue.pull_request && contains(github.event.issue.labels.*.name, 'needs verification')
|
||||||
steps:
|
steps:
|
||||||
- name: Verify and reopen PR
|
- name: Verify and reopen PR
|
||||||
uses: actions/github-script@v7
|
uses: actions/github-script@v9
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const { owner, repo } = context.repo;
|
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
|
image: opensauce04/azahar-build-environment:latest
|
||||||
options: -u 1001
|
options: -u 1001
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Build
|
- 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
|
BUILD_DIR: build/android-arm64-v8a
|
||||||
EXTRA_PATH: bin/Release
|
EXTRA_PATH: bin/Release
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Set tag name
|
- name: Set tag name
|
||||||
|
|
@ -62,7 +62,7 @@ jobs:
|
||||||
output-file: libretro-android.spdx.json
|
output-file: libretro-android.spdx.json
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -85,7 +85,7 @@ jobs:
|
||||||
EXTRA_PATH: bin/Release
|
EXTRA_PATH: bin/Release
|
||||||
EXTRA_CORE_ARGS: -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DENABLE_LTO=OFF
|
EXTRA_CORE_ARGS: -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DENABLE_LTO=OFF
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Install tools
|
- name: Install tools
|
||||||
|
|
@ -108,7 +108,7 @@ jobs:
|
||||||
output-file: libretro-linux.spdx.json
|
output-file: libretro-linux.spdx.json
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -133,7 +133,7 @@ jobs:
|
||||||
IMAGE: reallibretroretroarch/libretro-build-mxe-win-cross-cores:mingw12
|
IMAGE: reallibretroretroarch/libretro-build-mxe-win-cross-cores:mingw12
|
||||||
EXTRA_PATH: bin/Release
|
EXTRA_PATH: bin/Release
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Build in cross-container
|
- name: Build in cross-container
|
||||||
|
|
@ -158,7 +158,7 @@ jobs:
|
||||||
output-file: libretro-windows.spdx.json
|
output-file: libretro-windows.spdx.json
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -174,6 +174,7 @@ jobs:
|
||||||
macos:
|
macos:
|
||||||
runs-on: macos-26
|
runs-on: macos-26
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
target: ["x86_64", "arm64"]
|
target: ["x86_64", "arm64"]
|
||||||
env:
|
env:
|
||||||
|
|
@ -183,7 +184,7 @@ jobs:
|
||||||
BUILD_DIR: build/osx-${{ matrix.target }}
|
BUILD_DIR: build/osx-${{ matrix.target }}
|
||||||
EXTRA_PATH: bin/Release
|
EXTRA_PATH: bin/Release
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Install tools
|
- name: Install tools
|
||||||
|
|
@ -204,7 +205,7 @@ jobs:
|
||||||
output-file: libretro-macos-${{ matrix.target }}.spdx.json
|
output-file: libretro-macos-${{ matrix.target }}.spdx.json
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -227,7 +228,7 @@ jobs:
|
||||||
EXTRA_PATH: bin/Release
|
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
|
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:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Build
|
- name: Build
|
||||||
|
|
@ -246,7 +247,7 @@ jobs:
|
||||||
output-file: libretro-ios.spdx.json
|
output-file: libretro-ios.spdx.json
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: |
|
path: |
|
||||||
|
|
@ -269,7 +270,7 @@ jobs:
|
||||||
EXTRA_PATH: bin/Release
|
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
|
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:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Build
|
- name: Build
|
||||||
|
|
@ -288,7 +289,7 @@ jobs:
|
||||||
output-file: libretro-tvos.spdx.json
|
output-file: libretro-tvos.spdx.json
|
||||||
upload-artifact: false
|
upload-artifact: false
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: ${{ env.OS }}-${{ env.TARGET }}
|
name: ${{ env.OS }}-${{ env.TARGET }}
|
||||||
path: |
|
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
|
image: opensauce04/azahar-build-environment:latest
|
||||||
options: -u 1001
|
options: -u 1001
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Fetch master branch
|
- name: Fetch master branch
|
||||||
|
|
|
||||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
||||||
permissions:
|
permissions:
|
||||||
issues: write
|
issues: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v9.1.0
|
- uses: actions/stale@v10.2.0
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
days-before-issue-stale: 90
|
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
|
container: opensauce04/azahar-build-environment:latest
|
||||||
if: ${{ github.repository == 'azahar-emu/azahar' }}
|
if: ${{ github.repository == 'azahar-emu/azahar' }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
|
||||||
9
.gitmodules
vendored
9
.gitmodules
vendored
|
|
@ -55,12 +55,6 @@
|
||||||
[submodule "sdl2"]
|
[submodule "sdl2"]
|
||||||
path = externals/sdl2/SDL
|
path = externals/sdl2/SDL
|
||||||
url = https://github.com/libsdl-org/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"]
|
[submodule "dds-ktx"]
|
||||||
path = externals/dds-ktx
|
path = externals/dds-ktx
|
||||||
url = https://github.com/septag/dds-ktx
|
url = https://github.com/septag/dds-ktx
|
||||||
|
|
@ -109,3 +103,6 @@
|
||||||
[submodule "dllwalker"]
|
[submodule "dllwalker"]
|
||||||
path = externals/dllwalker
|
path = externals/dllwalker
|
||||||
url = https://github.com/azahar-emu/dllwalker
|
url = https://github.com/azahar-emu/dllwalker
|
||||||
|
[submodule "externals/cryptopp"]
|
||||||
|
path = externals/cryptopp
|
||||||
|
url = https://github.com/cryptopp-modern/cryptopp-modern.git
|
||||||
|
|
|
||||||
|
|
@ -411,13 +411,21 @@ if (APPLE)
|
||||||
endif()
|
endif()
|
||||||
find_library(AVFOUNDATION_LIBRARY AVFoundation REQUIRED)
|
find_library(AVFOUNDATION_LIBRARY AVFoundation REQUIRED)
|
||||||
find_library(IOSURFACE_LIBRARY IOSurface REQUIRED)
|
find_library(IOSURFACE_LIBRARY IOSurface REQUIRED)
|
||||||
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOSURFACE_LIBRARY} ${MOLTENVK_LIBRARY})
|
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOSURFACE_LIBRARY})
|
||||||
|
|
||||||
if (ENABLE_VULKAN AND NOT ENABLE_LIBRETRO)
|
if (ENABLE_VULKAN AND NOT ENABLE_LIBRETRO)
|
||||||
if (NOT USE_SYSTEM_MOLTENVK)
|
if (USE_SYSTEM_MOLTENVK)
|
||||||
|
find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED)
|
||||||
|
else()
|
||||||
download_moltenvk()
|
download_moltenvk()
|
||||||
|
if (IOS)
|
||||||
|
set(MOLTENVK_RELATIVE_LIBPATH "static/MoltenVK.xcframework/ios-arm64/libMoltenVK.a")
|
||||||
|
else()
|
||||||
|
set(MOLTENVK_RELATIVE_LIBPATH "dynamic/dylib/macOS/libMoltenVK.dylib")
|
||||||
|
endif()
|
||||||
|
set(MOLTENVK_LIBRARY "${CMAKE_BINARY_DIR}/externals/MoltenVK/MoltenVK/${MOLTENVK_RELATIVE_LIBPATH}")
|
||||||
endif()
|
endif()
|
||||||
find_library(MOLTENVK_LIBRARY MoltenVK REQUIRED)
|
|
||||||
message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.")
|
message(STATUS "Using MoltenVK at ${MOLTENVK_LIBRARY}.")
|
||||||
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} ${MOLTENVK_LIBRARY})
|
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} ${MOLTENVK_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -171,15 +171,8 @@ function(download_qt target)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(download_moltenvk)
|
function(download_moltenvk)
|
||||||
if (IOS)
|
|
||||||
set(MOLTENVK_PLATFORM "static/MoltenVK.xcframework/ios-arm64")
|
|
||||||
else()
|
|
||||||
set(MOLTENVK_PLATFORM "dynamic/dylib/macOS")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK")
|
|
||||||
set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
|
set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
|
||||||
if (NOT EXISTS ${MOLTENVK_DIR})
|
if (NOT EXISTS "${CMAKE_BINARY_DIR}/externals/MoltenVK")
|
||||||
if (NOT EXISTS ${MOLTENVK_TAR})
|
if (NOT EXISTS ${MOLTENVK_TAR})
|
||||||
file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.9/MoltenVK-all.tar
|
file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.9/MoltenVK-all.tar
|
||||||
${MOLTENVK_TAR} SHOW_PROGRESS)
|
${MOLTENVK_TAR} SHOW_PROGRESS)
|
||||||
|
|
@ -188,10 +181,6 @@ function(download_moltenvk)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Add the MoltenVK library path to the prefix so find_library can locate it.
|
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/${MOLTENVK_PLATFORM}")
|
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(get_external_prefix lib_name prefix_var)
|
function(get_external_prefix lib_name prefix_var)
|
||||||
|
|
|
||||||
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
|
file_filter = ../../src/android/app/src/main/res/values-<lang>/strings.xml
|
||||||
source_file = ../../src/android/app/src/main/res/values/strings.xml
|
source_file = ../../src/android/app/src/main/res/values/strings.xml
|
||||||
type = ANDROID
|
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 ----------------
|
# --- Builder ----------------
|
||||||
FROM opensauce04/azahar-build-environment:latest AS 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 && \
|
RUN mkdir ./builddir/
|
||||||
cmake /var/azahar-src -G Ninja \
|
WORKDIR ./builddir/
|
||||||
|
RUN cmake /var/azahar-src -G Ninja \
|
||||||
-DENABLE_QT=OFF \
|
-DENABLE_QT=OFF \
|
||||||
-DENABLE_GDBSTUB=OFF \
|
-DENABLE_GDBSTUB=OFF \
|
||||||
-DENABLE_TESTS=OFF \
|
-DENABLE_TESTS=OFF \
|
||||||
-DENABLE_ROOM=ON \
|
-DENABLE_ROOM=ON \
|
||||||
-DENABLE_ROOM_STANDALONE=ON \
|
-DENABLE_ROOM_STANDALONE=ON
|
||||||
-DENABLE_OPENGL=OFF $( : "TODO: Can we disable these automatically when there's no frontend?") \
|
RUN ninja
|
||||||
-DENABLE_VULKAN=OFF \
|
RUN mv ./bin/Release/azahar-room /usr/local/bin/
|
||||||
-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
|
|
||||||
|
|
||||||
# --- Final ------------------
|
# --- Final ------------------
|
||||||
FROM debian:trixie AS 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)
|
add_library(cryptopp INTERFACE)
|
||||||
target_link_libraries(cryptopp INTERFACE cryptopp::cryptopp)
|
target_link_libraries(cryptopp INTERFACE cryptopp::cryptopp)
|
||||||
else()
|
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_BUILD_TESTING OFF CACHE BOOL "")
|
||||||
set(CRYPTOPP_INSTALL OFF CACHE BOOL "")
|
set(CRYPTOPP_INSTALL OFF CACHE BOOL "")
|
||||||
set(CRYPTOPP_SOURCES "${CMAKE_SOURCE_DIR}/externals/cryptopp" CACHE STRING "")
|
add_subdirectory(cryptopp EXCLUDE_FROM_ALL)
|
||||||
add_subdirectory(cryptopp-cmake EXCLUDE_FROM_ALL)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# dds-ktx
|
# 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
|
package org.citra.citra_emu.features.settings.model
|
||||||
|
|
||||||
|
import org.citra.citra_emu.features.settings.SettingKeys
|
||||||
|
|
||||||
enum class IntListSetting(
|
enum class IntListSetting(
|
||||||
override val key: String,
|
override val key: String,
|
||||||
override val section: String,
|
override val section: String,
|
||||||
|
|
@ -11,7 +13,7 @@ enum class IntListSetting(
|
||||||
val canBeEmpty: Boolean = true
|
val canBeEmpty: Boolean = true
|
||||||
) : AbstractListSetting<Int> {
|
) : 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 backingList: List<Int> = defaultValue
|
||||||
private var lastValidList : 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();
|
for (auto key = Settings::Keys::keys_array.begin(); key != Settings::Keys::keys_array.end();
|
||||||
++key) {
|
++key) {
|
||||||
const auto key_declaration_string = std::string(*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) ==
|
||||||
if (std::ranges::find(DefaultINI::android_config_omitted_keys, *key) ==
|
std::end(DefaultINI::android_config_omitted_keys)) &&
|
||||||
std::end(DefaultINI::android_config_omitted_keys) &&
|
(std::string(DefaultINI::android_config_default_file_content)
|
||||||
std::string(DefaultINI::android_config_default_file_content)
|
.find(key_declaration_string) == std::string::npos)) {
|
||||||
.find(key_declaration_string) == std::string::npos) {
|
|
||||||
ASSERT_MSG(false,
|
ASSERT_MSG(false,
|
||||||
"Validation of default content config failed: Missing or malformed key "
|
"Validation of default config content (jni/default_ini.h) failed: Missing "
|
||||||
"declaration {}",
|
"declaration for key '{}'",
|
||||||
*key);
|
*key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,9 @@
|
||||||
#include "citra_qt/debugger/graphics/graphics_vertex_shader.h"
|
#include "citra_qt/debugger/graphics/graphics_vertex_shader.h"
|
||||||
#include "citra_qt/debugger/ipc/recorder.h"
|
#include "citra_qt/debugger/ipc/recorder.h"
|
||||||
#include "citra_qt/debugger/lle_service_modules.h"
|
#include "citra_qt/debugger/lle_service_modules.h"
|
||||||
|
#if MICROPROFILE_ENABLED
|
||||||
#include "citra_qt/debugger/profiler.h"
|
#include "citra_qt/debugger/profiler.h"
|
||||||
|
#endif
|
||||||
#include "citra_qt/debugger/registers.h"
|
#include "citra_qt/debugger/registers.h"
|
||||||
#include "citra_qt/debugger/wait_tree.h"
|
#include "citra_qt/debugger/wait_tree.h"
|
||||||
#ifdef USE_DISCORD_PRESENCE
|
#ifdef USE_DISCORD_PRESENCE
|
||||||
|
|
@ -712,11 +714,6 @@ void GMainWindow::InitializeDebugWidgets() {
|
||||||
microProfileDialog = new MicroProfileDialog(this);
|
microProfileDialog = new MicroProfileDialog(this);
|
||||||
microProfileDialog->hide();
|
microProfileDialog->hide();
|
||||||
debug_menu->addAction(microProfileDialog->toggleViewAction());
|
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
|
#endif
|
||||||
|
|
||||||
registersWidget = new RegistersWidget(system, this);
|
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_Pause, QStringLiteral("Debug Pause"));
|
||||||
link_action_shortcut(ui->action_Debug_Resume, QStringLiteral("Debug Resume"));
|
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_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_Swap_Screens, QStringLiteral("Swap Screens"));
|
||||||
link_action_shortcut(ui->action_Screen_Layout_Upright_Screens,
|
link_action_shortcut(ui->action_Screen_Layout_Upright_Screens,
|
||||||
QStringLiteral("Rotate Screens Upright"));
|
QStringLiteral("Rotate Screens Upright"));
|
||||||
|
|
@ -1209,6 +1208,10 @@ void GMainWindow::ConnectMenuEvents() {
|
||||||
emu_thread->ExecStep();
|
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
|
// Tools
|
||||||
connect_menu(ui->action_Compress_ROM_File, &GMainWindow::OnCompressFile);
|
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
|
// 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.
|
// UISetting::values.shortcuts, which is alphabetically ordered.
|
||||||
// clang-format off
|
// 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("Advance Frame"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::ApplicationShortcut}},
|
||||||
{QStringLiteral("Audio Mute/Unmute"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+M"), Qt::WindowShortcut}},
|
{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 Down"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WindowShortcut}},
|
||||||
{QStringLiteral("Audio Volume Up"), 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("Capture Screenshot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+P"), Qt::WidgetWithChildrenShortcut}},
|
||||||
{QStringLiteral("Debug Pause"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F4"),Qt::WidgetWithChildrenShortcut}},
|
{QStringLiteral("Debug Pause"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WidgetWithChildrenShortcut}},
|
||||||
{QStringLiteral("Debug Resume"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F5"),Qt::WidgetWithChildrenShortcut}},
|
{QStringLiteral("Debug Resume"), QStringLiteral("Main Window"), {QStringLiteral(""), Qt::WidgetWithChildrenShortcut}},
|
||||||
{QStringLiteral("Debug Step"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+F6"),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("Continue/Pause Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F4"), Qt::WindowShortcut}},
|
||||||
{QStringLiteral("Decrease 3D Factor"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+-"), Qt::ApplicationShortcut}},
|
{QStringLiteral("Decrease 3D Factor"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+-"), Qt::ApplicationShortcut}},
|
||||||
{QStringLiteral("Decrease Speed Limit"), QStringLiteral("Main Window"), {QStringLiteral("-"), 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<int, Settings::NativeButton::NumButtons> default_buttons;
|
||||||
static const std::array<std::array<int, 5>, Settings::NativeAnalog::NumAnalogs> default_analogs;
|
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:
|
private:
|
||||||
void Initialize(const std::string& config_name);
|
void Initialize(const std::string& config_name);
|
||||||
|
|
|
||||||
|
|
@ -213,6 +213,9 @@
|
||||||
<addaction name="action_Debug_Pause"/>
|
<addaction name="action_Debug_Pause"/>
|
||||||
<addaction name="action_Debug_Resume"/>
|
<addaction name="action_Debug_Resume"/>
|
||||||
<addaction name="action_Debug_Step"/>
|
<addaction name="action_Debug_Step"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="action_Debug_Unschedule_All"/>
|
||||||
|
<addaction name="action_Debug_Schedule_All"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="menu_Debug"/>
|
<addaction name="menu_Debug"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
|
|
@ -487,6 +490,22 @@
|
||||||
<string>Debug Step</string>
|
<string>Debug Step</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</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">
|
<action name="action_Dump_Video">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
|
|
|
||||||
|
|
@ -833,6 +833,19 @@ bool System::IsInitialSetup() {
|
||||||
return app_loader && app_loader->DoingInitialSetup();
|
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>
|
template <class Archive>
|
||||||
void System::serialize(Archive& ar, const unsigned int file_version) {
|
void System::serialize(Archive& ar, const unsigned int file_version) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -419,6 +419,8 @@ public:
|
||||||
debug_next_process = false;
|
debug_next_process = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DebugUnscheduleAllThreadsFromFrontend(bool unschedule);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* Initialize the emulated system.
|
* Initialize the emulated system.
|
||||||
|
|
|
||||||
|
|
@ -877,7 +877,7 @@ static void HandleGetStopReason() {
|
||||||
for (const auto& process : process_list) {
|
for (const auto& process : process_list) {
|
||||||
if (process->codeset->program_id == program_id) {
|
if (process->codeset->program_id == program_id) {
|
||||||
current_process = process.get();
|
current_process = process.get();
|
||||||
current_process->SetDebugBreak(true);
|
current_process->SetUnscheduleMode(Kernel::UnscheduleMode::GDB);
|
||||||
is_running = false;
|
is_running = false;
|
||||||
if (SetThread(0)) {
|
if (SetThread(0)) {
|
||||||
SendStopReply(current_thread, 0);
|
SendStopReply(current_thread, 0);
|
||||||
|
|
@ -900,7 +900,7 @@ static void BreakImpl(int signal) {
|
||||||
"and memory exceptions. Disable CPU JIT for more accuracy.");
|
"and memory exceptions. Disable CPU JIT for more accuracy.");
|
||||||
}
|
}
|
||||||
|
|
||||||
current_process->SetDebugBreak(true);
|
current_process->SetUnscheduleMode(Kernel::UnscheduleMode::GDB);
|
||||||
is_running = false;
|
is_running = false;
|
||||||
|
|
||||||
latest_signal = signal;
|
latest_signal = signal;
|
||||||
|
|
@ -1248,7 +1248,7 @@ static void Continue() {
|
||||||
continue_list.push_back(thread_id);
|
continue_list.push_back(thread_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
current_process->SetDebugBreak(false, continue_list);
|
current_process->ClearUnscheduleMode(Kernel::UnscheduleMode::GDB, continue_list);
|
||||||
is_running = true;
|
is_running = true;
|
||||||
|
|
||||||
ClearAllInstructionCache();
|
ClearAllInstructionCache();
|
||||||
|
|
@ -1414,7 +1414,7 @@ void HandleVCommand() {
|
||||||
SendReply("E02");
|
SendReply("E02");
|
||||||
} else {
|
} else {
|
||||||
current_process = process.get();
|
current_process = process.get();
|
||||||
current_process->SetDebugBreak(true);
|
current_process->SetUnscheduleMode(Kernel::UnscheduleMode::GDB);
|
||||||
is_running = false;
|
is_running = false;
|
||||||
if (SetThread(0)) {
|
if (SetThread(0)) {
|
||||||
SendStopReply(current_thread, 0);
|
SendStopReply(current_thread, 0);
|
||||||
|
|
@ -1456,7 +1456,7 @@ void HandleVCommand() {
|
||||||
HexToInt(reinterpret_cast<const u8*>(threads[i].c_str()), threads[i].size()));
|
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;
|
is_running = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,7 @@ void Process::Run(s32 main_thread_priority, u32 stack_size) {
|
||||||
#ifdef ENABLE_GDBSTUB
|
#ifdef ENABLE_GDBSTUB
|
||||||
if (GDBStub::IsServerEnabled()) {
|
if (GDBStub::IsServerEnabled()) {
|
||||||
LOG_INFO(Loader, "Pausing process {} at start", process_id);
|
LOG_INFO(Loader, "Pausing process {} at start", process_id);
|
||||||
SetDebugBreak(true);
|
SetUnscheduleMode(Kernel::UnscheduleMode::GDB);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
Core::System::GetInstance().ClearDebugNextProcessFlag();
|
Core::System::GetInstance().ClearDebugNextProcessFlag();
|
||||||
|
|
@ -624,7 +624,8 @@ std::vector<std::shared_ptr<Kernel::Thread>> Kernel::Process::GetThreadList() {
|
||||||
return ret;
|
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();
|
auto thread_list = GetThreadList();
|
||||||
bool needs_reschedule = false;
|
bool needs_reschedule = false;
|
||||||
for (auto& t : thread_list) {
|
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) {
|
if (needs_reschedule) {
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
#include <boost/container/static_vector.hpp>
|
#include <boost/container/static_vector.hpp>
|
||||||
#include <boost/serialization/export.hpp>
|
#include <boost/serialization/export.hpp>
|
||||||
#include "common/bit_field.h"
|
#include "common/bit_field.h"
|
||||||
|
#include "common/common_funcs.h"
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "core/hle/kernel/handle_table.h"
|
#include "core/hle/kernel/handle_table.h"
|
||||||
#include "core/hle/kernel/object.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).
|
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 };
|
enum class ProcessStatus { Created, Running, Exited };
|
||||||
|
|
||||||
class ResourceLimit;
|
class ResourceLimit;
|
||||||
|
|
@ -228,9 +236,15 @@ public:
|
||||||
|
|
||||||
std::vector<std::shared_ptr<Kernel::Thread>> GetThreadList();
|
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:
|
private:
|
||||||
|
void ChangeUnscheduleMode(UnscheduleMode mode, std::vector<u32> thread_ids, bool set);
|
||||||
void FreeAllMemory();
|
void FreeAllMemory();
|
||||||
|
|
||||||
KernelSystem& kernel;
|
KernelSystem& kernel;
|
||||||
|
|
|
||||||
|
|
@ -2191,7 +2191,11 @@ Result SVC::ControlProcess(Handle process_handle, u32 process_OP, u32 varg2, u32
|
||||||
kernel.GetCurrentThreadManager().GetCurrentThread()->thread_id) {
|
kernel.GetCurrentThreadManager().GetCurrentThread()->thread_id) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
thread.get()->can_schedule = !varg2;
|
if (varg2) {
|
||||||
|
thread->SetUnscheduleMode(Kernel::UnscheduleMode::SVC);
|
||||||
|
} else {
|
||||||
|
thread->ClearUnscheduleMode(Kernel::UnscheduleMode::SVC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ResultSuccess;
|
return ResultSuccess;
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ void Thread::serialize(Archive& ar, const unsigned int file_version) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ar & wakeup_callback;
|
ar & wakeup_callback;
|
||||||
ar & debug_break;
|
ar & unschedule_mode;
|
||||||
}
|
}
|
||||||
SERIALIZE_IMPL(Thread)
|
SERIALIZE_IMPL(Thread)
|
||||||
|
|
||||||
|
|
@ -545,12 +545,20 @@ VAddr Thread::GetCommandBufferAddress() const {
|
||||||
return GetTLSAddress() + command_header_offset;
|
return GetTLSAddress() + command_header_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Thread::SetDebugBreak(bool _debug_break) {
|
bool Thread::SetUnscheduleMode(UnscheduleMode mode) {
|
||||||
if (debug_break == _debug_break) {
|
UnscheduleMode old = unschedule_mode;
|
||||||
return false;
|
|
||||||
}
|
unschedule_mode |= mode;
|
||||||
debug_break = _debug_break;
|
|
||||||
return true;
|
return unschedule_mode != old;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Thread::ClearUnscheduleMode(UnscheduleMode mode) {
|
||||||
|
UnscheduleMode old = unschedule_mode;
|
||||||
|
|
||||||
|
unschedule_mode &= ~mode;
|
||||||
|
|
||||||
|
return unschedule_mode != old;
|
||||||
}
|
}
|
||||||
|
|
||||||
CpuLimiter::~CpuLimiter() {}
|
CpuLimiter::~CpuLimiter() {}
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@
|
||||||
#include "core/arm/arm_interface.h"
|
#include "core/arm/arm_interface.h"
|
||||||
#include "core/core_timing.h"
|
#include "core/core_timing.h"
|
||||||
#include "core/hle/kernel/object.h"
|
#include "core/hle/kernel/object.h"
|
||||||
|
#include "core/hle/kernel/process.h"
|
||||||
#include "core/hle/kernel/resource_limit.h"
|
#include "core/hle/kernel/resource_limit.h"
|
||||||
#include "core/hle/kernel/wait_object.h"
|
#include "core/hle/kernel/wait_object.h"
|
||||||
#include "core/hle/result.h"
|
#include "core/hle/result.h"
|
||||||
|
|
@ -28,7 +29,6 @@
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
class Mutex;
|
class Mutex;
|
||||||
class Process;
|
|
||||||
|
|
||||||
enum ThreadPriority : u32 {
|
enum ThreadPriority : u32 {
|
||||||
ThreadPrioHighest = 0, ///< Highest thread priority
|
ThreadPrioHighest = 0, ///< Highest thread priority
|
||||||
|
|
@ -366,19 +366,16 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CanSchedule() {
|
bool CanSchedule() {
|
||||||
// TODO(PabloMK7): This may not be the proper way
|
return static_cast<u32>(unschedule_mode) == 0;
|
||||||
// threads are marked as non-schedulable when they
|
|
||||||
// are in debug break. Figure out and fix.
|
|
||||||
return can_schedule && !debug_break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SetDebugBreak(bool debug_break);
|
bool SetUnscheduleMode(UnscheduleMode mode);
|
||||||
|
bool ClearUnscheduleMode(UnscheduleMode mode);
|
||||||
|
|
||||||
Core::ARM_Interface::ThreadContext context{};
|
Core::ARM_Interface::ThreadContext context{};
|
||||||
|
|
||||||
u32 thread_id;
|
u32 thread_id;
|
||||||
|
|
||||||
bool can_schedule{true};
|
|
||||||
ThreadStatus status;
|
ThreadStatus status;
|
||||||
VAddr entry_point;
|
VAddr entry_point;
|
||||||
VAddr stack_top;
|
VAddr stack_top;
|
||||||
|
|
@ -419,7 +416,10 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ThreadManager& thread_manager;
|
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;
|
friend class boost::serialization::access;
|
||||||
template <class Archive>
|
template <class Archive>
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ void Directory::Read(Kernel::HLERequestContext& ctx) {
|
||||||
ctx.RunAsync(
|
ctx.RunAsync(
|
||||||
[this, async_data](Kernel::HLERequestContext& ctx) {
|
[this, async_data](Kernel::HLERequestContext& ctx) {
|
||||||
std::vector<FileSys::Entry> entries(async_data->count);
|
std::vector<FileSys::Entry> entries(async_data->count);
|
||||||
LOG_TRACE(Service_FS, "Read {}: count={}", GetName(), count);
|
LOG_TRACE(Service_FS, "Read {}: count={}", GetName(), async_data->count);
|
||||||
// Number of entries actually read
|
// Number of entries actually read
|
||||||
async_data->read = backend->Read(static_cast<u32>(entries.size()), entries.data());
|
async_data->read = backend->Read(static_cast<u32>(entries.size()), entries.data());
|
||||||
async_data->buffer->Write(entries.data(), 0, async_data->read * sizeof(FileSys::Entry));
|
async_data->buffer->Write(entries.data(), 0, async_data->read * sizeof(FileSys::Entry));
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,9 @@ void PicaCore::InitializeRegs() {
|
||||||
// Values initialized by GSP
|
// Values initialized by GSP
|
||||||
regs.internal.irq_autostop = 1;
|
regs.internal.irq_autostop = 1;
|
||||||
regs.internal.irq_mask = 0xFFFFFFF0;
|
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_top = regs.framebuffer_config[0];
|
||||||
auto& framebuffer_sub = regs.framebuffer_config[1];
|
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 the texture unit is disabled unbind the corresponding gl unit
|
||||||
if (!texture.enabled) {
|
if (!texture.enabled) {
|
||||||
const Surface& null_surface = res_cache.GetSurface(VideoCore::NULL_SURFACE_ID);
|
switch (texture.config.type.Value()) {
|
||||||
state.texture_units[texture_index].texture_2d = null_surface.Handle();
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@ void FragmentModule::Generate() {
|
||||||
break;
|
break;
|
||||||
case TexturingRegs::FogMode::Gas:
|
case TexturingRegs::FogMode::Gas:
|
||||||
WriteGas();
|
WriteGas();
|
||||||
|
// Return early due to unimplemented gas mode
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
@ -196,7 +197,12 @@ void FragmentModule::WriteFog() {
|
||||||
void FragmentModule::WriteGas() {
|
void FragmentModule::WriteGas() {
|
||||||
// TODO: Implement me
|
// TODO: Implement me
|
||||||
LOG_CRITICAL(Render, "Unimplemented gas mode");
|
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();
|
OpFunctionEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue