mirror of
https://git.suyu.dev/suyu/suyu
synced 2025-12-09 06:12:07 -06:00
Compare commits
34 Commits
revert-e9e
...
ddutchie/u
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
85f94fbc08 | ||
|
|
fec573fd6a | ||
|
|
d0afa9b1ad | ||
|
|
86829beb9d | ||
|
|
e3ad2bd629 | ||
|
|
c6031e8a9a | ||
|
|
3e7c0343bd | ||
|
|
3619f350a1 | ||
|
|
460b6be75f | ||
|
|
93dc7fb6b2 | ||
|
|
e0ff7d0a6e | ||
|
|
fb326514bf | ||
|
|
c6feb95d8d | ||
|
|
5b0136dafe | ||
|
|
69cc6e9b6e | ||
|
|
9d9a57a85a | ||
|
|
28ecb35260 | ||
|
|
91e22ebd81 | ||
|
|
71d26161c1 | ||
|
|
d6d0505f1b | ||
|
|
ac4c2702d7 | ||
|
|
c5cbb74628 | ||
|
|
f43f50c1c5 | ||
|
|
b96fcd1370 | ||
|
|
5cd903eabd | ||
|
|
59e997ee07 | ||
|
|
6737a54cdb | ||
|
|
8e08fc1ab9 | ||
|
|
2786311869 | ||
|
|
8ff94c9191 | ||
|
|
6f85fbc9d4 | ||
|
|
6a5d65cc17 | ||
|
|
a2d7dc61f0 | ||
|
|
859ad39852 |
@@ -12,8 +12,6 @@ mkdir build || true && cd build
|
|||||||
cmake .. \
|
cmake .. \
|
||||||
-DBoost_USE_STATIC_LIBS=ON \
|
-DBoost_USE_STATIC_LIBS=ON \
|
||||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||||
-DSUYU_USE_PRECOMPILED_HEADERS=OFF \
|
|
||||||
-DDYNARMIC_USE_PRECOMPILED_HEADERS=OFF \
|
|
||||||
-DCMAKE_CXX_FLAGS="-march=x86-64-v2" \
|
-DCMAKE_CXX_FLAGS="-march=x86-64-v2" \
|
||||||
-DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ \
|
-DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ \
|
||||||
-DCMAKE_C_COMPILER=/usr/lib/ccache/gcc \
|
-DCMAKE_C_COMPILER=/usr/lib/ccache/gcc \
|
||||||
@@ -26,7 +24,6 @@ cmake .. \
|
|||||||
-DSUYU_USE_BUNDLED_FFMPEG=ON \
|
-DSUYU_USE_BUNDLED_FFMPEG=ON \
|
||||||
-DSUYU_ENABLE_LTO=ON \
|
-DSUYU_ENABLE_LTO=ON \
|
||||||
-DSUYU_CRASH_DUMPS=ON \
|
-DSUYU_CRASH_DUMPS=ON \
|
||||||
-DSUYU_USE_FASTER_LD=ON \
|
|
||||||
-GNinja
|
-GNinja
|
||||||
|
|
||||||
ninja
|
ninja
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,6 +4,7 @@
|
|||||||
# Build directory
|
# Build directory
|
||||||
[Bb]uild*/
|
[Bb]uild*/
|
||||||
doc-build/
|
doc-build/
|
||||||
|
cmake-build*/
|
||||||
|
|
||||||
# Generated source files
|
# Generated source files
|
||||||
src/common/scm_rev.cpp
|
src/common/scm_rev.cpp
|
||||||
|
|||||||
@@ -1,22 +1,6 @@
|
|||||||
stages:
|
stages:
|
||||||
- format
|
- format
|
||||||
- build
|
- build
|
||||||
|
|
||||||
variables:
|
|
||||||
# https://docs.gitlab.com/ee/ci/runners/configure_runners.html
|
|
||||||
TRANSFER_METER_FREQUENCY: "2s"
|
|
||||||
ARTIFACT_COMPRESSION_LEVEL: "fast"
|
|
||||||
CACHE_COMPRESSION_LEVEL: "fastest"
|
|
||||||
CACHE_REQUEST_TIMEOUT: 5
|
|
||||||
# Use FASTZIP for faster compression in cache and artifacts
|
|
||||||
# https://docs.gitlab.com/runner/configuration/feature-flags.html#available-feature-flags
|
|
||||||
FF_USE_FASTZIP: true
|
|
||||||
|
|
||||||
# Our Variables
|
|
||||||
CACHE_DIR: "$CI_PROJECT_DIR/ccache"
|
|
||||||
CCACHE_DIR: $CACHE_DIR
|
|
||||||
|
|
||||||
|
|
||||||
#CLANG FORMAT - CHECKS CODE FOR FORMATTING ISSUES
|
#CLANG FORMAT - CHECKS CODE FOR FORMATTING ISSUES
|
||||||
clang-format:
|
clang-format:
|
||||||
stage: format
|
stage: format
|
||||||
@@ -32,20 +16,11 @@ clang-format:
|
|||||||
# - Windows
|
# - Windows
|
||||||
- Parallelized
|
- Parallelized
|
||||||
- Format
|
- Format
|
||||||
|
|
||||||
#LINUX BUILD - BUILDS LINUX APPIMAGE
|
#LINUX BUILD - BUILDS LINUX APPIMAGE
|
||||||
build-linux:
|
build-linux:
|
||||||
stage: build
|
stage: build
|
||||||
image: suyuemu/cibuild:linux-x64
|
image: suyuemu/cibuild:linux-x64
|
||||||
resource_group: linux-ci
|
resource_group: linux-ci
|
||||||
cache:
|
|
||||||
key: "$CI_COMMIT_REF_NAME-ccache"
|
|
||||||
paths:
|
|
||||||
- $CACHE_DIR
|
|
||||||
before_script:
|
|
||||||
- mkdir -p $CACHE_DIR
|
|
||||||
- chmod -R 777 $CACHE_DIR
|
|
||||||
- ls -la $CACHE_DIR
|
|
||||||
variables:
|
variables:
|
||||||
GIT_SUBMODULE_STRATEGY: recursive
|
GIT_SUBMODULE_STRATEGY: recursive
|
||||||
GIT_SUBMODULE_DEPTH: 1
|
GIT_SUBMODULE_DEPTH: 1
|
||||||
@@ -59,7 +34,6 @@ build-linux:
|
|||||||
tags:
|
tags:
|
||||||
- Linux
|
- Linux
|
||||||
- Parallelized
|
- Parallelized
|
||||||
|
|
||||||
#ANDROID BUILD - BUILDS APK
|
#ANDROID BUILD - BUILDS APK
|
||||||
android:
|
android:
|
||||||
stage: build
|
stage: build
|
||||||
@@ -78,6 +52,5 @@ android:
|
|||||||
paths:
|
paths:
|
||||||
- artifacts/*
|
- artifacts/*
|
||||||
tags:
|
tags:
|
||||||
- Linux
|
- Android
|
||||||
- Parallelized
|
- Parallelized
|
||||||
|
|
||||||
|
|||||||
84
dist/icns_generator.sh
vendored
84
dist/icns_generator.sh
vendored
@@ -1,14 +1,72 @@
|
|||||||
mkdir suyu.iconset
|
#!/bin/bash
|
||||||
convert -background none -resize 16x16 suyu.svg suyu.iconset/icon_16x16.png;
|
# icns_generator.sh GNU GPLv3 License
|
||||||
convert -background none -resize 32x32 suyu.svg suyu.iconset/icon_16x16@2x.png;
|
# Run this script when a new logo is made and the svg file inside.
|
||||||
convert -background none -resize 32x32 suyu.svg suyu.iconset/icon_32x32.png;
|
# You should install Imagemagick to make the conversions: $brew install imagemagick
|
||||||
convert -background none -resize 64x64 suyu.svg suyu.iconset/icon_32x32@2x.png;
|
|
||||||
convert -background none -resize 128x128 suyu.svg suyu.iconset/icon_128x128.png;
|
|
||||||
convert -background none -resize 256x256 suyu.svg suyu.iconset/icon_256x256.png;
|
|
||||||
convert -background none -resize 256x256 suyu.svg suyu.iconset/icon_128x128@2x.png;
|
|
||||||
convert -background none -resize 512x512 suyu.svg suyu.iconset/icon_256x256@2x.png;
|
|
||||||
convert -background none -resize 512x512 suyu.svg suyu.iconset/icon_512x512.png;
|
|
||||||
convert -background none -resize 1024x1024 suyu.svg suyu.iconset/icon_512x512@2x.png;
|
|
||||||
|
|
||||||
iconutil -c icns suyu.iconset
|
# Change working dir to where this script is located.
|
||||||
rm -rf suyu.iconset
|
cd "${0%/*}"
|
||||||
|
|
||||||
|
if [ -z $1 ]; then
|
||||||
|
echo "icns_generator.sh GNU GPLv3 License"
|
||||||
|
echo "Run this script when a new logo is made and the svg file inside."
|
||||||
|
echo ""
|
||||||
|
echo "Syntax: ./icns_generator <input.svg>"
|
||||||
|
echo ""
|
||||||
|
echo "Don't forget to install imagemagick: "
|
||||||
|
echo "$ brew install imagemagick"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Error Handling Stuff:
|
||||||
|
## Check command availability
|
||||||
|
check_command() {
|
||||||
|
if ! command -v "$1" &> /dev/null; then
|
||||||
|
read -s -n 1 -p "Error: '$1' command not found. Please install $2."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
## Convert image with error handling
|
||||||
|
convert_image() {
|
||||||
|
convert -background none -resize "$2" "$1" "$3" || {
|
||||||
|
read -s -n 1 -p "Error: Conversion failed for $1"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check required commands
|
||||||
|
check_command "convert" "ImageMagick"
|
||||||
|
check_command "iconutil" "macOS"
|
||||||
|
|
||||||
|
# Create the iconset directory
|
||||||
|
mkdir suyu.iconset || {
|
||||||
|
read -s -n 1 -p "Error: Unable to create suyu.iconset directory."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convert images
|
||||||
|
convert_image "$1" 16x16 suyu.iconset/icon_16x16.png
|
||||||
|
convert_image "$1" 32x32 suyu.iconset/icon_16x16@2x.png
|
||||||
|
convert_image "$1" 32x32 suyu.iconset/icon_32x32.png
|
||||||
|
convert_image "$1" 64x64 suyu.iconset/icon_32x32@2x.png
|
||||||
|
convert_image "$1" 128x128 suyu.iconset/icon_128x128.png
|
||||||
|
convert_image "$1" 256x256 suyu.iconset/icon_256x256.png
|
||||||
|
convert_image "$1" 256x256 suyu.iconset/icon_128x128@2x.png
|
||||||
|
convert_image "$1" 512x512 suyu.iconset/icon_256x256@2x.png
|
||||||
|
convert_image "$1" 512x512 suyu.iconset/icon_512x512.png
|
||||||
|
convert_image "$1" 1024x1024 suyu.iconset/icon_512x512@2x.png
|
||||||
|
|
||||||
|
# Create the ICNS file
|
||||||
|
iconutil -c icns suyu.iconset || {
|
||||||
|
read -s -n 1 -p "Error: Failed to create ICNS file."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove the temporary iconset directory
|
||||||
|
rm -rf suyu.iconset || {
|
||||||
|
read -s -n 1 -p "Error: Unable to remove suyu.iconset directory."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
echo -s -n 1 -p "Icon generation completed successfully."
|
||||||
|
echo ""
|
||||||
|
|||||||
@@ -611,7 +611,7 @@ struct Values {
|
|||||||
Category::Network};
|
Category::Network};
|
||||||
|
|
||||||
// WebService
|
// WebService
|
||||||
Setting<std::string> web_api_url{linkage, "http://74.113.97.71:3000", "web_api_url",
|
Setting<std::string> web_api_url{linkage, "https://suyu.dev", "web_api_url",
|
||||||
Category::WebService};
|
Category::WebService};
|
||||||
Setting<std::string> suyu_username{linkage, std::string(), "suyu_username",
|
Setting<std::string> suyu_username{linkage, std::string(), "suyu_username",
|
||||||
Category::WebService};
|
Category::WebService};
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
#include <dynarmic/frontend/A64/decoder/a64.h>
|
#include <dynarmic/frontend/A64/decoder/a64.h>
|
||||||
#include <dynarmic/frontend/imm.h>
|
#include <dynarmic/frontend/imm.h>
|
||||||
|
|
||||||
|
#include "common/common_types.h"
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|||||||
@@ -668,7 +668,7 @@ static bool ValidCryptoRevisionString(std::string_view base, size_t begin, size_
|
|||||||
|
|
||||||
void KeyManager::LoadFromFile(const std::filesystem::path& file_path, bool is_title_keys) {
|
void KeyManager::LoadFromFile(const std::filesystem::path& file_path, bool is_title_keys) {
|
||||||
if (!Common::FS::Exists(file_path)) {
|
if (!Common::FS::Exists(file_path)) {
|
||||||
LOG_ERROR(Crypto, "Failed to load key file at '{}': File not found",
|
LOG_ERROR(Crypto, "Cannot handle key file '{}': File not found",
|
||||||
file_path.generic_string());
|
file_path.generic_string());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -803,8 +803,7 @@ bool KeyManager::BaseDeriveNecessary() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!Common::FS::Exists(suyu_keys_dir / "title.keys")) {
|
if (!Common::FS::Exists(suyu_keys_dir / "title.keys")) {
|
||||||
LOG_ERROR(Crypto, "No title.keys found");
|
LOG_WARNING(Crypto, "Could not locate a title.keys file");
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (check_key_existence(S256KeyType::Header)) {
|
if (check_key_existence(S256KeyType::Header)) {
|
||||||
|
|||||||
@@ -55,10 +55,6 @@ AppLoader_NAX::LoadResult AppLoader_NAX::Load(Kernel::KProcess& process, Core::S
|
|||||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Core::Crypto::KeyManager::KeyFileExists(true)) {
|
|
||||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
|
||||||
}
|
|
||||||
|
|
||||||
return {ResultStatus::ErrorNAXInconvertibleToNCA, {}};
|
return {ResultStatus::ErrorNAXInconvertibleToNCA, {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,10 +102,6 @@ AppLoader_NSP::LoadResult AppLoader_NSP::Load(Kernel::KProcess& process, Core::S
|
|||||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Core::Crypto::KeyManager::KeyFileExists(true)) {
|
|
||||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
|
||||||
}
|
|
||||||
|
|
||||||
return {ResultStatus::ErrorNSPMissingProgramNCA, {}};
|
return {ResultStatus::ErrorNSPMissingProgramNCA, {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,10 +71,6 @@ AppLoader_XCI::LoadResult AppLoader_XCI::Load(Kernel::KProcess& process, Core::S
|
|||||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!xci->HasProgramNCA() && !Core::Crypto::KeyManager::KeyFileExists(true)) {
|
|
||||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto result = nca_loader->Load(process, system);
|
const auto result = nca_loader->Load(process, system);
|
||||||
if (result.first != ResultStatus::Success) {
|
if (result.first != ResultStatus::Success) {
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -63,11 +63,11 @@ void ConfigureWeb::RetranslateUI() {
|
|||||||
ui->retranslateUi(this);
|
ui->retranslateUi(this);
|
||||||
|
|
||||||
ui->web_signup_link->setText(
|
ui->web_signup_link->setText(
|
||||||
tr("<a href='https://profile.suyu.dev/'><span style=\"text-decoration: underline; "
|
tr("<a href='https://suyu.dev/signup'><span style=\"text-decoration: underline; "
|
||||||
"color:#039be5;\">Sign up</span></a>"));
|
"color:#039be5;\">Sign up</span></a>"));
|
||||||
|
|
||||||
ui->web_token_info_link->setText(
|
ui->web_token_info_link->setText(
|
||||||
tr("<a href='https://suyu.dev/wiki/suyu-web-service/'><span style=\"text-decoration: "
|
tr("<a href='https://suyu.dev/account'><span style=\"text-decoration: "
|
||||||
"underline; color:#039be5;\">What is my token?</span></a>"));
|
"underline; color:#039be5;\">What is my token?</span></a>"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,23 +31,22 @@ constexpr char PROGRESSBAR_STYLE_BUILD[] = R"(
|
|||||||
QProgressBar {
|
QProgressBar {
|
||||||
background-color: black;
|
background-color: black;
|
||||||
border: 2px solid white;
|
border: 2px solid white;
|
||||||
border-radius: 4px;
|
border-radius: 10px;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
}
|
}
|
||||||
QProgressBar::chunk {
|
QProgressBar::chunk {
|
||||||
background-color: #ff3c28;
|
background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(98, 160, 234, 255), stop:1 rgba(237, 51, 59, 255));
|
||||||
width: 1px;
|
border-radius: 6px;
|
||||||
})";
|
})";
|
||||||
|
|
||||||
constexpr char PROGRESSBAR_STYLE_COMPLETE[] = R"(
|
constexpr char PROGRESSBAR_STYLE_COMPLETE[] = R"(
|
||||||
QProgressBar {
|
QProgressBar {
|
||||||
background-color: #0ab9e6;
|
background-color: black;
|
||||||
border: 2px solid white;
|
border: 2px solid white;
|
||||||
border-radius: 4px;
|
border-radius: 10px;
|
||||||
padding: 2px;
|
padding: 4px;
|
||||||
}
|
}
|
||||||
QProgressBar::chunk {
|
QProgressBar::chunk {
|
||||||
background-color: #ff3c28;
|
|
||||||
})";
|
})";
|
||||||
|
|
||||||
LoadingScreen::LoadingScreen(QWidget* parent)
|
LoadingScreen::LoadingScreen(QWidget* parent)
|
||||||
@@ -99,7 +98,7 @@ void LoadingScreen::Prepare(Loader::AppLoader& loader) {
|
|||||||
#ifdef SUYU_QT_MOVIE_MISSING
|
#ifdef SUYU_QT_MOVIE_MISSING
|
||||||
QPixmap map;
|
QPixmap map;
|
||||||
map.loadFromData(buffer.data(), buffer.size());
|
map.loadFromData(buffer.data(), buffer.size());
|
||||||
ui->banner->setPixmap(map);
|
setPixmap(map);
|
||||||
#else
|
#else
|
||||||
backing_mem = std::make_unique<QByteArray>(reinterpret_cast<char*>(buffer.data()),
|
backing_mem = std::make_unique<QByteArray>(reinterpret_cast<char*>(buffer.data()),
|
||||||
static_cast<int>(buffer.size()));
|
static_cast<int>(buffer.size()));
|
||||||
@@ -116,6 +115,8 @@ void LoadingScreen::Prepare(Loader::AppLoader& loader) {
|
|||||||
map.loadFromData(buffer.data(), static_cast<uint>(buffer.size()));
|
map.loadFromData(buffer.data(), static_cast<uint>(buffer.size()));
|
||||||
ui->logo->setPixmap(map);
|
ui->logo->setPixmap(map);
|
||||||
}
|
}
|
||||||
|
ui->logo->setVisible(false);
|
||||||
|
ui->banner->setVisible(false);
|
||||||
|
|
||||||
slow_shader_compile_start = false;
|
slow_shader_compile_start = false;
|
||||||
OnLoadProgress(VideoCore::LoadCallbackStage::Prepare, 0, 0);
|
OnLoadProgress(VideoCore::LoadCallbackStage::Prepare, 0, 0);
|
||||||
|
|||||||
@@ -49,6 +49,9 @@
|
|||||||
</property>
|
</property>
|
||||||
<item alignment="Qt::AlignLeft|Qt::AlignTop">
|
<item alignment="Qt::AlignLeft|Qt::AlignTop">
|
||||||
<widget class="QLabel" name="logo">
|
<widget class="QLabel" name="logo">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string/>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
@@ -78,7 +81,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<property name="styleSheet">
|
<property name="styleSheet">
|
||||||
<string notr="true">background-color: black; color: white;
|
<string notr="true">background-color: black; color: white;
|
||||||
font: 75 20pt "Arial";</string>
|
font: 500 20pt "Ubuntu";</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Loading Shaders 387 / 1628</string>
|
<string>Loading Shaders 387 / 1628</string>
|
||||||
@@ -96,19 +99,25 @@ font: 75 20pt "Arial";</string>
|
|||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>500</width>
|
<width>500</width>
|
||||||
<height>40</height>
|
<height>30</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>30</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="styleSheet">
|
<property name="styleSheet">
|
||||||
<string notr="true">QProgressBar {
|
<string notr="true">QProgressBar {
|
||||||
color: white;
|
background-color: black;
|
||||||
border: 2px solid white;
|
border: 2px solid white;
|
||||||
outline-color: black;
|
border-radius: 10px;
|
||||||
border-radius: 20px;
|
padding: 2px;
|
||||||
}
|
}
|
||||||
QProgressBar::chunk {
|
QProgressBar::chunk {
|
||||||
background-color: white;
|
background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(98, 160, 234, 255), stop:1 rgba(237, 51, 59, 255));
|
||||||
border-radius: 15px;
|
border-radius: 6px;
|
||||||
}</string>
|
}</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
@@ -129,7 +138,7 @@ border-radius: 15px;
|
|||||||
</property>
|
</property>
|
||||||
<property name="styleSheet">
|
<property name="styleSheet">
|
||||||
<string notr="true">background-color: black; color: white;
|
<string notr="true">background-color: black; color: white;
|
||||||
font: 75 15pt "Arial";</string>
|
font: 500 15pt "Ubuntu";</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Estimated Time 5m 4s</string>
|
<string>Estimated Time 5m 4s</string>
|
||||||
@@ -140,6 +149,9 @@ font: 75 15pt "Arial";</string>
|
|||||||
</item>
|
</item>
|
||||||
<item alignment="Qt::AlignRight|Qt::AlignBottom">
|
<item alignment="Qt::AlignRight|Qt::AlignBottom">
|
||||||
<widget class="QLabel" name="banner">
|
<widget class="QLabel" name="banner">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
<property name="styleSheet">
|
<property name="styleSheet">
|
||||||
<string notr="true">background-color: black;</string>
|
<string notr="true">background-color: black;</string>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -1535,11 +1535,12 @@ void GMainWindow::ConnectMenuEvents() {
|
|||||||
connect_menu(ui->action_Show_Folders_In_List, &GMainWindow::OnToggleFoldersInList);
|
connect_menu(ui->action_Show_Folders_In_List, &GMainWindow::OnToggleFoldersInList);
|
||||||
|
|
||||||
connect_menu(ui->action_Reset_Window_Size_720, &GMainWindow::ResetWindowSize720);
|
connect_menu(ui->action_Reset_Window_Size_720, &GMainWindow::ResetWindowSize720);
|
||||||
|
connect_menu(ui->action_Reset_Window_Size_800, &GMainWindow::ResetWindowSize800);
|
||||||
connect_menu(ui->action_Reset_Window_Size_900, &GMainWindow::ResetWindowSize900);
|
connect_menu(ui->action_Reset_Window_Size_900, &GMainWindow::ResetWindowSize900);
|
||||||
connect_menu(ui->action_Reset_Window_Size_1080, &GMainWindow::ResetWindowSize1080);
|
connect_menu(ui->action_Reset_Window_Size_1080, &GMainWindow::ResetWindowSize1080);
|
||||||
ui->menu_Reset_Window_Size->addActions({ui->action_Reset_Window_Size_720,
|
ui->menu_Reset_Window_Size->addActions(
|
||||||
ui->action_Reset_Window_Size_900,
|
{ui->action_Reset_Window_Size_720, ui->action_Reset_Window_Size_800,
|
||||||
ui->action_Reset_Window_Size_1080});
|
ui->action_Reset_Window_Size_900, ui->action_Reset_Window_Size_1080});
|
||||||
|
|
||||||
// Multiplayer
|
// Multiplayer
|
||||||
connect(ui->action_View_Lobby, &QAction::triggered, multiplayer_state,
|
connect(ui->action_View_Lobby, &QAction::triggered, multiplayer_state,
|
||||||
@@ -1755,9 +1756,9 @@ bool GMainWindow::LoadROM(const QString& filename, Service::AM::FrontendAppletPa
|
|||||||
if (!ContentManager::AreKeysPresent()) {
|
if (!ContentManager::AreKeysPresent()) {
|
||||||
QMessageBox::warning(this, tr("Derivation Components Missing"),
|
QMessageBox::warning(this, tr("Derivation Components Missing"),
|
||||||
tr("Encryption keys are missing. "
|
tr("Encryption keys are missing. "
|
||||||
"You need to provide both your own title.keys "
|
"In order to use this emulator"
|
||||||
"and your own prod.keys "
|
"you need to provide your own encryption keys"
|
||||||
"in order to play games"));
|
"in order to play them."));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3530,6 +3531,14 @@ void GMainWindow::ResetWindowSize720() {
|
|||||||
ResetWindowSize(Layout::ScreenUndocked::Width, Layout::ScreenUndocked::Height);
|
ResetWindowSize(Layout::ScreenUndocked::Width, Layout::ScreenUndocked::Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GMainWindow::ResetWindowSize800() {
|
||||||
|
if (!ui->action_Single_Window_Mode->isChecked()) {
|
||||||
|
render_window->resize(1280, 800);
|
||||||
|
} else {
|
||||||
|
resize(1280, 800);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GMainWindow::ResetWindowSize900() {
|
void GMainWindow::ResetWindowSize900() {
|
||||||
ResetWindowSize(1600U, 900U);
|
ResetWindowSize(1600U, 900U);
|
||||||
}
|
}
|
||||||
@@ -4630,9 +4639,9 @@ void GMainWindow::OnCheckFirmwareDecryption() {
|
|||||||
if (!ContentManager::AreKeysPresent()) {
|
if (!ContentManager::AreKeysPresent()) {
|
||||||
QMessageBox::warning(this, tr("Derivation Components Missing"),
|
QMessageBox::warning(this, tr("Derivation Components Missing"),
|
||||||
tr("Encryption keys are missing. "
|
tr("Encryption keys are missing. "
|
||||||
"You need to provide both your own title.keys "
|
"In order to use this emulator"
|
||||||
"and your own prod.keys "
|
"you need to provide your own encryption keys"
|
||||||
"in order to play games"));
|
"in order to play them."));
|
||||||
}
|
}
|
||||||
|
|
||||||
SetFirmwareVersion();
|
SetFirmwareVersion();
|
||||||
|
|||||||
@@ -393,6 +393,7 @@ private slots:
|
|||||||
void ToggleWindowMode();
|
void ToggleWindowMode();
|
||||||
void ResetWindowSize(u32 width, u32 height);
|
void ResetWindowSize(u32 width, u32 height);
|
||||||
void ResetWindowSize720();
|
void ResetWindowSize720();
|
||||||
|
void ResetWindowSize800();
|
||||||
void ResetWindowSize900();
|
void ResetWindowSize900();
|
||||||
void ResetWindowSize1080();
|
void ResetWindowSize1080();
|
||||||
void OnAlbum();
|
void OnAlbum();
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1280</width>
|
<width>1280</width>
|
||||||
<height>21</height>
|
<height>22</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menu_File">
|
<widget class="QMenu" name="menu_File">
|
||||||
@@ -102,6 +102,14 @@
|
|||||||
<property name="iconText">
|
<property name="iconText">
|
||||||
<string>Reset Window Size to 720p</string>
|
<string>Reset Window Size to 720p</string>
|
||||||
</property>
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="action_Reset_Window_Size_800">
|
||||||
|
<property name="text">
|
||||||
|
<string>Reset Window Size to &800p</string>
|
||||||
|
</property>
|
||||||
|
<property name="iconText">
|
||||||
|
<string>Reset Window Size to 800p</string>
|
||||||
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="action_Reset_Window_Size_900">
|
<action name="action_Reset_Window_Size_900">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
@@ -124,7 +132,7 @@
|
|||||||
<addaction name="action_Display_Dock_Widget_Headers"/>
|
<addaction name="action_Display_Dock_Widget_Headers"/>
|
||||||
<addaction name="action_Show_Filter_Bar"/>
|
<addaction name="action_Show_Filter_Bar"/>
|
||||||
<addaction name="action_Show_Status_Bar"/>
|
<addaction name="action_Show_Status_Bar"/>
|
||||||
<addaction name="action_Show_Folders_In_List" />
|
<addaction name="action_Show_Folders_In_List"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="menu_Reset_Window_Size"/>
|
<addaction name="menu_Reset_Window_Size"/>
|
||||||
<addaction name="menu_View_Debugging"/>
|
<addaction name="menu_View_Debugging"/>
|
||||||
|
|||||||
@@ -408,7 +408,7 @@ if (MSVC)
|
|||||||
/we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
|
/we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
if (APPLE)
|
if (APPLE OR ARCHITECTURE_arm64)
|
||||||
# error: declaration shadows a typedef in 'interval_base_set<SubType, DomainT, Compare, Interval, Alloc>'
|
# error: declaration shadows a typedef in 'interval_base_set<SubType, DomainT, Compare, Interval, Alloc>'
|
||||||
# error: implicit conversion loses integer precision: 'int' to 'boost::icl::bound_type' (aka 'unsigned char')
|
# error: implicit conversion loses integer precision: 'int' to 'boost::icl::bound_type' (aka 'unsigned char')
|
||||||
target_compile_options(video_core PRIVATE -Wno-shadow -Wno-unused-local-typedef)
|
target_compile_options(video_core PRIVATE -Wno-shadow -Wno-unused-local-typedef)
|
||||||
|
|||||||
@@ -1364,6 +1364,7 @@ void Device::CollectToolingInfo() {
|
|||||||
LOG_INFO(Render_Vulkan, "Attached debugging tool: {}", name);
|
LOG_INFO(Render_Vulkan, "Attached debugging tool: {}", name);
|
||||||
has_renderdoc = has_renderdoc || name == "RenderDoc";
|
has_renderdoc = has_renderdoc || name == "RenderDoc";
|
||||||
has_nsight_graphics = has_nsight_graphics || name == "NVIDIA Nsight Graphics";
|
has_nsight_graphics = has_nsight_graphics || name == "NVIDIA Nsight Graphics";
|
||||||
|
has_radeon_gpu_profiler = has_radeon_gpu_profiler || name == "Radeon GPU Profiler";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -592,7 +592,7 @@ public:
|
|||||||
|
|
||||||
/// Returns true when a known debugging tool is attached.
|
/// Returns true when a known debugging tool is attached.
|
||||||
bool HasDebuggingToolAttached() const {
|
bool HasDebuggingToolAttached() const {
|
||||||
return has_renderdoc || has_nsight_graphics;
|
return has_renderdoc || has_nsight_graphics || has_radeon_gpu_profiler;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @returns True if compute pipelines can cause crashing.
|
/// @returns True if compute pipelines can cause crashing.
|
||||||
@@ -821,6 +821,7 @@ private:
|
|||||||
bool has_broken_parallel_compiling{}; ///< Has broken parallel shader compiling.
|
bool has_broken_parallel_compiling{}; ///< Has broken parallel shader compiling.
|
||||||
bool has_renderdoc{}; ///< Has RenderDoc attached
|
bool has_renderdoc{}; ///< Has RenderDoc attached
|
||||||
bool has_nsight_graphics{}; ///< Has Nsight Graphics attached
|
bool has_nsight_graphics{}; ///< Has Nsight Graphics attached
|
||||||
|
bool has_radeon_gpu_profiler{}; ///< Has Radeon GPU Profiler attached.
|
||||||
bool supports_d24_depth{}; ///< Supports D24 depth buffers.
|
bool supports_d24_depth{}; ///< Supports D24 depth buffers.
|
||||||
bool cant_blit_msaa{}; ///< Does not support MSAA<->MSAA blitting.
|
bool cant_blit_msaa{}; ///< Does not support MSAA<->MSAA blitting.
|
||||||
bool must_emulate_scaled_formats{}; ///< Requires scaled vertex format emulation
|
bool must_emulate_scaled_formats{}; ///< Requires scaled vertex format emulation
|
||||||
|
|||||||
Reference in New Issue
Block a user