Compare commits

..

1 commit

Author SHA1 Message Date
Levi Akatsuki
d3f328ee45 Revert "Removing Warning"
This reverts merge request !185
2024-03-18 19:44:34 +00:00
17 changed files with 53 additions and 102 deletions

1
.gitignore vendored
View file

@ -4,7 +4,6 @@
# 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

View file

@ -8,9 +8,9 @@ variables:
ARTIFACT_COMPRESSION_LEVEL: "fast" ARTIFACT_COMPRESSION_LEVEL: "fast"
CACHE_COMPRESSION_LEVEL: "fastest" CACHE_COMPRESSION_LEVEL: "fastest"
CACHE_REQUEST_TIMEOUT: 5 CACHE_REQUEST_TIMEOUT: 5
# Use FASTZIP for faster compression in cache and artifacts (boolean) # Use FASTZIP for faster compression in cache and artifacts
# https://docs.gitlab.com/runner/configuration/feature-flags.html#available-feature-flags # https://docs.gitlab.com/runner/configuration/feature-flags.html#available-feature-flags
FF_USE_FASTZIP: 1 FF_USE_FASTZIP: true
# Our Variables # Our Variables
CACHE_DIR: "$CI_PROJECT_DIR/ccache" CACHE_DIR: "$CI_PROJECT_DIR/ccache"
@ -78,6 +78,6 @@ android:
paths: paths:
- artifacts/* - artifacts/*
tags: tags:
- Android - Linux
- Parallelized - Parallelized

View file

@ -71,7 +71,7 @@ option(SUYU_ENABLE_PORTABLE "Allow suyu to enable portable mode if a user folder
CMAKE_DEPENDENT_OPTION(SUYU_USE_FASTER_LD "Check if a faster linker is available" ON "NOT WIN32" OFF) CMAKE_DEPENDENT_OPTION(SUYU_USE_FASTER_LD "Check if a faster linker is available" ON "NOT WIN32" OFF)
CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" OFF) CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" ON)
option(USE_CCACHE "Use CCache for faster building" ON) option(USE_CCACHE "Use CCache for faster building" ON)

View file

@ -51,12 +51,10 @@ You can also contact any of the developers on Discord to learn more about the cu
## Downloads ## Downloads
* __Windows__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases) * __Windows__: WIP
* __Linux__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases) * __Linux__: WIP
* __macOS__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases)
* __Android__: [Releases](https://gitlab.com/suyu-emu/suyu/-/releases)
We have official builds [here.](https://gitlab.com/suyu-emu/suyu/-/releases) If any website or person is claiming to have a build for suyu, take that with a grain of salt. We don't have any official builds yet! If any website or person is claiming to have a build for suyu, take that with a grain of salt, because it might contain malware. Until we do have an official build, it might be a better idea to keep using the last version of yuzu.
## Building ## Building

View file

@ -1,72 +1,14 @@
#!/bin/bash mkdir suyu.iconset
# icns_generator.sh GNU GPLv3 License convert -background none -resize 16x16 suyu.svg suyu.iconset/icon_16x16.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_16x16@2x.png;
# You should install Imagemagick to make the conversions: $brew install imagemagick convert -background none -resize 32x32 suyu.svg suyu.iconset/icon_32x32.png;
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;
# Change working dir to where this script is located. iconutil -c icns suyu.iconset
cd "${0%/*}" rm -rf suyu.iconset
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 ""

View file

@ -611,7 +611,7 @@ struct Values {
Category::Network}; Category::Network};
// WebService // WebService
Setting<std::string> web_api_url{linkage, "https://suyu.dev", "web_api_url", Setting<std::string> web_api_url{linkage, "http://74.113.97.71:3000", "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};

View file

@ -11,8 +11,6 @@
#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 {

View file

@ -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, "Cannot handle key file '{}': File not found", LOG_ERROR(Crypto, "Failed to load key file at '{}': File not found",
file_path.generic_string()); file_path.generic_string());
return; return;
} }
@ -803,7 +803,8 @@ bool KeyManager::BaseDeriveNecessary() const {
} }
if (!Common::FS::Exists(suyu_keys_dir / "title.keys")) { if (!Common::FS::Exists(suyu_keys_dir / "title.keys")) {
LOG_WARNING(Crypto, "Could not locate a title.keys file"); LOG_ERROR(Crypto, "No title.keys found");
return true;
} }
if (check_key_existence(S256KeyType::Header)) { if (check_key_existence(S256KeyType::Header)) {

View file

@ -55,6 +55,10 @@ 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, {}};
} }

View file

@ -102,6 +102,10 @@ 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, {}};
} }

View file

@ -71,6 +71,10 @@ 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;

View file

@ -762,8 +762,6 @@ void EmulatedController::StartMotionCalibration() {
void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback, std::size_t index, void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback, std::size_t index,
Common::UUID uuid) { Common::UUID uuid) {
const auto player_index = Service::HID::NpadIdTypeToIndex(npad_id_type);
const auto& player = Settings::values.players.GetValue()[player_index];
if (index >= controller.button_values.size()) { if (index >= controller.button_values.size()) {
return; return;
} }
@ -919,9 +917,14 @@ void EmulatedController::SetButton(const Common::Input::CallbackStatus& callback
lock.unlock(); lock.unlock();
if (player.connected) { if (!is_connected) {
if (npad_id_type == NpadIdType::Player1 && npad_type != NpadStyleIndex::Handheld) {
Connect(); Connect();
} }
if (npad_id_type == NpadIdType::Handheld && npad_type == NpadStyleIndex::Handheld) {
Connect();
}
}
TriggerOnChange(ControllerTriggerType::Button, true); TriggerOnChange(ControllerTriggerType::Button, true);
} }

View file

@ -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://suyu.dev/signup'><span style=\"text-decoration: underline; " tr("<a href='https://profile.suyu.dev/'><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/account'><span style=\"text-decoration: " tr("<a href='https://suyu.dev/wiki/suyu-web-service/'><span style=\"text-decoration: "
"underline; color:#039be5;\">What is my token?</span></a>")); "underline; color:#039be5;\">What is my token?</span></a>"));
} }

View file

@ -1755,9 +1755,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. "
"In order to use this emulator" "You need to provide both your own title.keys "
"you need to provide your own encryption keys" "and your own prod.keys "
"in order to play them.")); "in order to play games"));
return false; return false;
} }
@ -4630,9 +4630,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. "
"In order to use this emulator" "You need to provide both your own title.keys "
"you need to provide your own encryption keys" "and your own prod.keys "
"in order to play them.")); "in order to play games"));
} }
SetFirmwareVersion(); SetFirmwareVersion();

View file

@ -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 OR ARCHITECTURE_arm64) if (APPLE)
# 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)

View file

@ -1364,7 +1364,6 @@ 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";
} }
} }

View file

@ -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 || has_radeon_gpu_profiler; return has_renderdoc || has_nsight_graphics;
} }
/// @returns True if compute pipelines can cause crashing. /// @returns True if compute pipelines can cause crashing.
@ -821,7 +821,6 @@ 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