mirror of
https://git.suyu.dev/suyu/suyu
synced 2025-12-08 13:52:08 -06:00
Compare commits
62 Commits
ci-fijxu-t
...
ddutchie/u
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
85f94fbc08 | ||
|
|
fec573fd6a | ||
|
|
d0afa9b1ad | ||
|
|
86829beb9d | ||
|
|
e3ad2bd629 | ||
|
|
c6031e8a9a | ||
|
|
3e7c0343bd | ||
|
|
3619f350a1 | ||
|
|
460b6be75f | ||
|
|
93dc7fb6b2 | ||
|
|
e0ff7d0a6e | ||
|
|
fb326514bf | ||
|
|
c6feb95d8d | ||
|
|
e9eb3f3799 | ||
|
|
5b0136dafe | ||
|
|
69cc6e9b6e | ||
|
|
5e9a855f1e | ||
|
|
5eaab8d69b | ||
|
|
b416389533 | ||
|
|
2682e7739a | ||
|
|
2ba2db7795 | ||
|
|
796ca02437 | ||
|
|
2a148c7699 | ||
|
|
a24ee4b6c1 | ||
|
|
f127dd881d | ||
|
|
ee4fd3b2ce | ||
|
|
c433758ed0 | ||
|
|
7295a6c1ad | ||
|
|
94251409c1 | ||
|
|
aaff9411ec | ||
|
|
3075d74067 | ||
|
|
f085f7e917 | ||
|
|
2ceae9a0c1 | ||
|
|
19c2b08ab4 | ||
|
|
2a28c85ff9 | ||
|
|
15b752d63e | ||
|
|
9d9a57a85a | ||
|
|
28ecb35260 | ||
|
|
91e22ebd81 | ||
|
|
71d26161c1 | ||
|
|
d6d0505f1b | ||
|
|
3f178ae15e | ||
|
|
ac4c2702d7 | ||
|
|
c5cbb74628 | ||
|
|
f43f50c1c5 | ||
|
|
b96fcd1370 | ||
|
|
5cd903eabd | ||
|
|
59e997ee07 | ||
|
|
5aa53d12df | ||
|
|
6737a54cdb | ||
|
|
8e08fc1ab9 | ||
|
|
2786311869 | ||
|
|
8ff94c9191 | ||
|
|
6f85fbc9d4 | ||
|
|
6a5d65cc17 | ||
|
|
a2d7dc61f0 | ||
|
|
859ad39852 | ||
|
|
9858de7fce | ||
|
|
ad32b5371d | ||
|
|
8dae7d29d6 | ||
|
|
72d4d7b1b8 | ||
|
|
a1db3cb668 |
@@ -24,7 +24,6 @@ cmake .. \
|
||||
-DSUYU_USE_BUNDLED_FFMPEG=ON \
|
||||
-DSUYU_ENABLE_LTO=ON \
|
||||
-DSUYU_CRASH_DUMPS=ON \
|
||||
-DSUYU_USE_FASTER_LD=ON \
|
||||
-GNinja
|
||||
|
||||
ninja
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,6 +4,7 @@
|
||||
# Build directory
|
||||
[Bb]uild*/
|
||||
doc-build/
|
||||
cmake-build*/
|
||||
|
||||
# Generated source files
|
||||
src/common/scm_rev.cpp
|
||||
|
||||
@@ -15,6 +15,7 @@ clang-format:
|
||||
# - Linux
|
||||
# - Windows
|
||||
- Parallelized
|
||||
- Format
|
||||
#LINUX BUILD - BUILDS LINUX APPIMAGE
|
||||
build-linux:
|
||||
stage: build
|
||||
@@ -51,5 +52,5 @@ android:
|
||||
paths:
|
||||
- artifacts/*
|
||||
tags:
|
||||
- Linux
|
||||
- Android
|
||||
- Parallelized
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
|
||||
set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT OFF)
|
||||
set(CMAKE_XCODE_EMIT_RELATIVE_PATH YES)
|
||||
|
||||
project(suyu)
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
||||
@@ -68,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(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)
|
||||
|
||||
|
||||
@@ -5,5 +5,5 @@ SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
Please check out the
|
||||
|
||||
* [Conributors's guide](https://gitlab.com/suyu-emu/suyu/-/wikis/Contributing).
|
||||
* [Contributors's guide](https://gitlab.com/suyu-emu/suyu/-/wikis/Contributing).
|
||||
* [Merge request guidelines](https://gitlab.com/suyu-emu/suyu/-/wikis/Merge-requests)
|
||||
|
||||
84
dist/icns_generator.sh
vendored
84
dist/icns_generator.sh
vendored
@@ -1,14 +1,72 @@
|
||||
mkdir suyu.iconset
|
||||
convert -background none -resize 16x16 suyu.svg suyu.iconset/icon_16x16.png;
|
||||
convert -background none -resize 32x32 suyu.svg suyu.iconset/icon_16x16@2x.png;
|
||||
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;
|
||||
#!/bin/bash
|
||||
# icns_generator.sh GNU GPLv3 License
|
||||
# Run this script when a new logo is made and the svg file inside.
|
||||
# You should install Imagemagick to make the conversions: $brew install imagemagick
|
||||
|
||||
iconutil -c icns suyu.iconset
|
||||
rm -rf suyu.iconset
|
||||
# Change working dir to where this script is located.
|
||||
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 ""
|
||||
|
||||
@@ -72,6 +72,12 @@ class AppletLauncherFragment : Fragment() {
|
||||
R.string.mii_edit_applet_description,
|
||||
R.drawable.ic_mii,
|
||||
AppletInfo.MiiEdit
|
||||
),
|
||||
Applet(
|
||||
R.string.qlaunch_applet,
|
||||
R.string.qlaunch_description,
|
||||
R.drawable.ic_home,
|
||||
AppletInfo.QLaunch
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ enum class AppletInfo(val appletId: Int, val entryId: Long = 0) {
|
||||
None(0x00),
|
||||
Application(0x01),
|
||||
OverlayDisplay(0x02),
|
||||
QLaunch(0x03),
|
||||
QLaunch(0x03, 0x0100000000001000),
|
||||
Starter(0x04),
|
||||
Auth(0x0A),
|
||||
Cabinet(0x0B, 0x0100000000001002),
|
||||
|
||||
10
src/android/app/src/main/res/drawable/ic_home.xml
Normal file
10
src/android/app/src/main/res/drawable/ic_home.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<vector android:alpha="1"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="?attr/colorControlNormal"
|
||||
android:pathData="M21.59,11.31 L12.41,2.9a0.55,0.55 0,0 0,-0.75 0L2.47,11.31a0.54,0.54 0,0 0,0.38 0.93H4.41a0.35,0.35 0,0 1,0.35 0.35V20.32a0.54,0.54 0,0 0,0.54 0.54H18.77a0.54,0.54 0,0 0,0.54 -0.54V12.58a0.35,0.35 0,0 1,0.35 -0.35H21.21A0.54,0.54 0,0 0,21.59 11.31ZM15,16.65a0.43,0.43 0,0 1,-0.43 0.43H9.5a0.43,0.43 0,0 1,-0.43 -0.43V12.66a0.43,0.43 0,0 1,0.43 -0.43H14.56a0.43,0.43 0,0 1,0.43 0.43Z"
|
||||
/>
|
||||
</vector>
|
||||
@@ -145,6 +145,8 @@
|
||||
<string name="keys_missing_help">https://suyu-emu.org/help/quickstart/#dumping-decryption-keys</string>
|
||||
|
||||
<!-- Applet launcher strings -->
|
||||
<string name="qlaunch_applet">Qlaunch</string>
|
||||
<string name="qlaunch_description">Launch applications from the system home screen</string>
|
||||
<string name="applets">Applet launcher</string>
|
||||
<string name="applets_description">Launch system applets using installed firmware</string>
|
||||
<string name="applets_error_firmware">Firmware not installed</string>
|
||||
|
||||
@@ -611,7 +611,7 @@ struct Values {
|
||||
Category::Network};
|
||||
|
||||
// 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};
|
||||
Setting<std::string> suyu_username{linkage, std::string(), "suyu_username",
|
||||
Category::WebService};
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#include <dynarmic/frontend/A64/decoder/a64.h>
|
||||
#include <dynarmic/frontend/imm.h>
|
||||
|
||||
#include "common/common_types.h"
|
||||
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
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) {
|
||||
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());
|
||||
return;
|
||||
}
|
||||
@@ -803,8 +803,7 @@ bool KeyManager::BaseDeriveNecessary() const {
|
||||
}
|
||||
|
||||
if (!Common::FS::Exists(suyu_keys_dir / "title.keys")) {
|
||||
LOG_ERROR(Crypto, "No title.keys found");
|
||||
return true;
|
||||
LOG_WARNING(Crypto, "Could not locate a title.keys file");
|
||||
}
|
||||
|
||||
if (check_key_existence(S256KeyType::Header)) {
|
||||
|
||||
@@ -38,7 +38,7 @@ ICommonStateGetter::ICommonStateGetter(Core::System& system_, std::shared_ptr<Ap
|
||||
{30, nullptr, "GetHomeButtonReaderLockAccessor"},
|
||||
{31, D<&ICommonStateGetter::GetReaderLockAccessorEx>, "GetReaderLockAccessorEx"},
|
||||
{32, D<&ICommonStateGetter::GetWriterLockAccessorEx>, "GetWriterLockAccessorEx"},
|
||||
{40, nullptr, "GetCradleFwVersion"},
|
||||
{40, D<&ICommonStateGetter::GetCradleFwVersion>, "GetCradleFwVersion"},
|
||||
{50, D<&ICommonStateGetter::IsVrModeEnabled>, "IsVrModeEnabled"},
|
||||
{51, D<&ICommonStateGetter::SetVrModeEnabled>, "SetVrModeEnabled"},
|
||||
{52, D<&ICommonStateGetter::SetLcdBacklighOffEnabled>, "SetLcdBacklighOffEnabled"},
|
||||
@@ -159,6 +159,17 @@ Result ICommonStateGetter::GetBootMode(Out<PM::SystemBootMode> out_boot_mode) {
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ICommonStateGetter::GetCradleFwVersion(OutArray<uint32_t, 4> out_version) {
|
||||
LOG_DEBUG(Service_AM, "(STUBBED) called");
|
||||
|
||||
out_version[0] = 0;
|
||||
out_version[1] = 0;
|
||||
out_version[2] = 0;
|
||||
out_version[3] = 0;
|
||||
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ICommonStateGetter::IsVrModeEnabled(Out<bool> out_is_vr_mode_enabled) {
|
||||
LOG_DEBUG(Service_AM, "called");
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ private:
|
||||
Result GetOperationMode(Out<OperationMode> out_operation_mode);
|
||||
Result GetPerformanceMode(Out<APM::PerformanceMode> out_performance_mode);
|
||||
Result GetBootMode(Out<PM::SystemBootMode> out_boot_mode);
|
||||
Result GetCradleFwVersion(OutArray<uint32_t, 4> out_version);
|
||||
Result IsVrModeEnabled(Out<bool> out_is_vr_mode_enabled);
|
||||
Result SetVrModeEnabled(bool is_vr_mode_enabled);
|
||||
Result SetLcdBacklighOffEnabled(bool is_lcd_backlight_off_enabled);
|
||||
|
||||
@@ -14,7 +14,7 @@ IGlobalStateController::IGlobalStateController(Core::System& system_)
|
||||
static const FunctionInfo functions[] = {
|
||||
{0, nullptr, "RequestToEnterSleep"},
|
||||
{1, nullptr, "EnterSleep"},
|
||||
{2, nullptr, "StartSleepSequence"},
|
||||
{2, D<&IGlobalStateController::StartSleepSequence>, "StartSleepSequence"},
|
||||
{3, D<&IGlobalStateController::StartShutdownSequence>, "StartShutdownSequence"},
|
||||
{4, D<&IGlobalStateController::StartRebootSequence>, "StartRebootSequence"},
|
||||
{9, nullptr, "IsAutoPowerDownRequested"},
|
||||
@@ -31,6 +31,13 @@ IGlobalStateController::IGlobalStateController(Core::System& system_)
|
||||
RegisterHandlers(functions);
|
||||
}
|
||||
|
||||
IGlobalStateController::~IGlobalStateController() = default;
|
||||
|
||||
Result IGlobalStateController::StartSleepSequence(u8 a) {
|
||||
LOG_WARNING(Service_AM, "(STUBBED) called, a={}", a);
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result IGlobalStateController::StartShutdownSequence() {
|
||||
LOG_INFO(Service_AM, "called");
|
||||
system.Exit();
|
||||
@@ -43,8 +50,6 @@ Result IGlobalStateController::StartRebootSequence() {
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
IGlobalStateController::~IGlobalStateController() = default;
|
||||
|
||||
Result IGlobalStateController::LoadAndApplyIdlePolicySettings() {
|
||||
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||
R_SUCCEED();
|
||||
|
||||
@@ -18,6 +18,7 @@ public:
|
||||
~IGlobalStateController() override;
|
||||
|
||||
private:
|
||||
Result StartSleepSequence(u8 a);
|
||||
Result StartShutdownSequence();
|
||||
Result StartRebootSequence();
|
||||
Result LoadAndApplyIdlePolicySettings();
|
||||
|
||||
@@ -23,7 +23,7 @@ IHomeMenuFunctions::IHomeMenuFunctions(Core::System& system_, std::shared_ptr<Ap
|
||||
{21, D<&IHomeMenuFunctions::GetPopFromGeneralChannelEvent>, "GetPopFromGeneralChannelEvent"},
|
||||
{30, nullptr, "GetHomeButtonWriterLockAccessor"},
|
||||
{31, nullptr, "GetWriterLockAccessorEx"},
|
||||
{40, nullptr, "IsSleepEnabled"},
|
||||
{40, D<&IHomeMenuFunctions::IsSleepEnabled>, "IsSleepEnabled"},
|
||||
{41, D<&IHomeMenuFunctions::IsRebootEnabled>, "IsRebootEnabled"},
|
||||
{50, nullptr, "LaunchSystemApplet"},
|
||||
{51, nullptr, "LaunchStarter"},
|
||||
@@ -64,9 +64,15 @@ Result IHomeMenuFunctions::GetPopFromGeneralChannelEvent(
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result IHomeMenuFunctions::IsRebootEnabled(Out<bool> out_is_reboot_enbaled) {
|
||||
Result IHomeMenuFunctions::IsSleepEnabled(Out<bool> out_is_sleep_enabled) {
|
||||
LOG_INFO(Service_AM, "called");
|
||||
*out_is_reboot_enbaled = true;
|
||||
*out_is_sleep_enabled = true;
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result IHomeMenuFunctions::IsRebootEnabled(Out<bool> out_is_reboot_enabled) {
|
||||
LOG_INFO(Service_AM, "called");
|
||||
*out_is_reboot_enabled = true;
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,8 @@ private:
|
||||
Result LockForeground();
|
||||
Result UnlockForeground();
|
||||
Result GetPopFromGeneralChannelEvent(OutCopyHandle<Kernel::KReadableEvent> out_event);
|
||||
Result IsRebootEnabled(Out<bool> out_is_reboot_enbaled);
|
||||
Result IsSleepEnabled(Out<bool> out_is_sleep_enabled);
|
||||
Result IsRebootEnabled(Out<bool> out_is_reboot_enabled);
|
||||
Result IsForceTerminateApplicationDisabledForDebug(
|
||||
Out<bool> out_is_force_terminate_application_disabled_for_debug);
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ FSP_SRV::FSP_SRV(Core::System& system_)
|
||||
{24, nullptr, "RegisterSaveDataFileSystemAtomicDeletion"},
|
||||
{25, nullptr, "DeleteSaveDataFileSystemBySaveDataSpaceId"},
|
||||
{26, nullptr, "FormatSdCardDryRun"},
|
||||
{27, nullptr, "IsExFatSupported"},
|
||||
{27, D<&FSP_SRV::IsExFatSupported>, "IsExFatSupported"},
|
||||
{28, nullptr, "DeleteSaveDataFileSystemBySaveDataAttribute"},
|
||||
{30, nullptr, "OpenGameCardStorage"},
|
||||
{31, nullptr, "OpenGameCardFileSystem"},
|
||||
@@ -235,6 +235,14 @@ Result FSP_SRV::CreateSaveDataFileSystem(FileSys::SaveDataCreationInfo save_crea
|
||||
save_struct));
|
||||
}
|
||||
|
||||
Result FSP_SRV::IsExFatSupported(Out<bool> out_is_supported) {
|
||||
LOG_WARNING(Service_FS, "(STUBBED) called");
|
||||
|
||||
*out_is_supported = true;
|
||||
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result FSP_SRV::CreateSaveDataFileSystemBySystemSaveDataId(
|
||||
FileSys::SaveDataAttribute save_struct, FileSys::SaveDataCreationInfo save_create_struct) {
|
||||
LOG_DEBUG(Service_FS, "called save_struct = {}", save_struct.DebugInfo());
|
||||
|
||||
@@ -53,6 +53,7 @@ private:
|
||||
Result OpenSdCardFileSystem(OutInterface<IFileSystem> out_interface);
|
||||
Result CreateSaveDataFileSystem(FileSys::SaveDataCreationInfo save_create_struct,
|
||||
FileSys::SaveDataAttribute save_struct, u128 uid);
|
||||
Result IsExFatSupported(Out<bool> out_is_supported);
|
||||
Result CreateSaveDataFileSystemBySystemSaveDataId(
|
||||
FileSys::SaveDataAttribute save_struct, FileSys::SaveDataCreationInfo save_create_struct);
|
||||
Result OpenSaveDataFileSystem(OutInterface<IFileSystem> out_interface,
|
||||
|
||||
@@ -30,10 +30,10 @@ Result ISfMonitorService::Initialize(Out<u32> out_value) {
|
||||
}
|
||||
|
||||
Result ISfMonitorService::GetGroupInfo(
|
||||
OutLargeData<GroupInfo, BufferAttr_HipcAutoSelect> out_group_info) {
|
||||
GroupInfo in_group_info, OutLargeData<GroupInfo, BufferAttr_HipcAutoSelect> out_group_info) {
|
||||
LOG_WARNING(Service_LDN, "(STUBBED) called");
|
||||
|
||||
*out_group_info = GroupInfo{};
|
||||
memcpy(out_group_info, &in_group_info, sizeof(GroupInfo));
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,8 @@ public:
|
||||
|
||||
private:
|
||||
Result Initialize(Out<u32> out_value);
|
||||
Result GetGroupInfo(OutLargeData<GroupInfo, BufferAttr_HipcAutoSelect> out_group_info);
|
||||
Result GetGroupInfo(GroupInfo in_group_info,
|
||||
OutLargeData<GroupInfo, BufferAttr_HipcAutoSelect> out_group_info);
|
||||
};
|
||||
|
||||
} // namespace Service::LDN
|
||||
|
||||
@@ -40,10 +40,10 @@ Result ISfServiceMonitor::Initialize(Out<u32> out_value) {
|
||||
}
|
||||
|
||||
Result ISfServiceMonitor::GetGroupInfo(
|
||||
OutLargeData<GroupInfo, BufferAttr_HipcAutoSelect> out_group_info) {
|
||||
GroupInfo in_group_info, OutLargeData<GroupInfo, BufferAttr_HipcAutoSelect> out_group_info) {
|
||||
LOG_WARNING(Service_LDN, "(STUBBED) called");
|
||||
|
||||
*out_group_info = GroupInfo{};
|
||||
memcpy(out_group_info, &in_group_info, sizeof(GroupInfo));
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,8 @@ public:
|
||||
|
||||
private:
|
||||
Result Initialize(Out<u32> out_value);
|
||||
Result GetGroupInfo(OutLargeData<GroupInfo, BufferAttr_HipcAutoSelect> out_group_info);
|
||||
Result GetGroupInfo(GroupInfo in_group_info,
|
||||
OutLargeData<GroupInfo, BufferAttr_HipcAutoSelect> out_group_info);
|
||||
};
|
||||
|
||||
} // namespace Service::LDN
|
||||
|
||||
@@ -507,7 +507,7 @@ void IGeneralService::GetCurrentIpConfigInfo(HLERequestContext& ctx) {
|
||||
}
|
||||
|
||||
void IGeneralService::IsWirelessCommunicationEnabled(HLERequestContext& ctx) {
|
||||
LOG_WARNING(Service_NIFM, "(STUBBED) called");
|
||||
LOG_WARNING(Service_NIFM, "called");
|
||||
|
||||
IPC::ResponseBuilder rb{ctx, 3};
|
||||
rb.Push(ResultSuccess);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include <optional>
|
||||
#include <boost/container/small_vector.hpp>
|
||||
|
||||
#include "common/microprofile.h"
|
||||
|
||||
@@ -509,4 +509,13 @@ struct TvSettings {
|
||||
};
|
||||
static_assert(sizeof(TvSettings) == 0x20, "TvSettings is an invalid size");
|
||||
|
||||
/// This is nn::settings::system::RebootlessSystemUpdateVersion
|
||||
struct RebootlessSystemUpdateVersion {
|
||||
u32 version;
|
||||
u8 reserved[0x1c];
|
||||
char display_version[0x20];
|
||||
};
|
||||
static_assert(sizeof(RebootlessSystemUpdateVersion) == 0x40,
|
||||
"RebootlessSystemUpdateVersion is an invalid size");
|
||||
|
||||
} // namespace Service::Set
|
||||
|
||||
@@ -238,7 +238,7 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_)
|
||||
{146, nullptr, "SetConsoleSixAxisSensorAngularVelocityTimeBias"},
|
||||
{147, nullptr, "GetConsoleSixAxisSensorAngularAcceleration"},
|
||||
{148, nullptr, "SetConsoleSixAxisSensorAngularAcceleration"},
|
||||
{149, nullptr, "GetRebootlessSystemUpdateVersion"},
|
||||
{149, C<&ISystemSettingsServer::GetRebootlessSystemUpdateVersion>, "GetRebootlessSystemUpdateVersion"},
|
||||
{150, C<&ISystemSettingsServer::GetDeviceTimeZoneLocationUpdatedTime>, "GetDeviceTimeZoneLocationUpdatedTime"},
|
||||
{151, C<&ISystemSettingsServer::SetDeviceTimeZoneLocationUpdatedTime>, "SetDeviceTimeZoneLocationUpdatedTime"},
|
||||
{152, C<&ISystemSettingsServer::GetUserSystemClockAutomaticCorrectionUpdatedTime>, "GetUserSystemClockAutomaticCorrectionUpdatedTime"},
|
||||
@@ -1194,6 +1194,16 @@ Result ISystemSettingsServer::SetKeyboardLayout(KeyboardLayout keyboard_layout)
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::GetRebootlessSystemUpdateVersion(
|
||||
Out<RebootlessSystemUpdateVersion> out_rebootless_system_update) {
|
||||
LOG_INFO(Service_SET, "(STUBBED) called");
|
||||
|
||||
out_rebootless_system_update->version = 0;
|
||||
strcpy(out_rebootless_system_update->display_version, "0.0.0");
|
||||
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
Result ISystemSettingsServer::GetDeviceTimeZoneLocationUpdatedTime(
|
||||
Out<Service::PSC::Time::SteadyClockTimePoint> out_time_point) {
|
||||
LOG_INFO(Service_SET, "called");
|
||||
|
||||
@@ -136,6 +136,8 @@ public:
|
||||
Result SetAppletLaunchFlags(u32 applet_launch_flag);
|
||||
Result GetKeyboardLayout(Out<KeyboardLayout> out_keyboard_layout);
|
||||
Result SetKeyboardLayout(KeyboardLayout keyboard_layout);
|
||||
Result GetRebootlessSystemUpdateVersion(
|
||||
Out<RebootlessSystemUpdateVersion> out_rebootless_system_update);
|
||||
Result GetDeviceTimeZoneLocationUpdatedTime(
|
||||
Out<Service::PSC::Time::SteadyClockTimePoint> out_time_point);
|
||||
Result SetDeviceTimeZoneLocationUpdatedTime(
|
||||
|
||||
@@ -55,10 +55,6 @@ AppLoader_NAX::LoadResult AppLoader_NAX::Load(Kernel::KProcess& process, Core::S
|
||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||
}
|
||||
|
||||
if (!Core::Crypto::KeyManager::KeyFileExists(true)) {
|
||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||
}
|
||||
|
||||
return {ResultStatus::ErrorNAXInconvertibleToNCA, {}};
|
||||
}
|
||||
|
||||
|
||||
@@ -102,10 +102,6 @@ AppLoader_NSP::LoadResult AppLoader_NSP::Load(Kernel::KProcess& process, Core::S
|
||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||
}
|
||||
|
||||
if (!Core::Crypto::KeyManager::KeyFileExists(true)) {
|
||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||
}
|
||||
|
||||
return {ResultStatus::ErrorNSPMissingProgramNCA, {}};
|
||||
}
|
||||
|
||||
|
||||
@@ -71,10 +71,6 @@ AppLoader_XCI::LoadResult AppLoader_XCI::Load(Kernel::KProcess& process, Core::S
|
||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||
}
|
||||
|
||||
if (!xci->HasProgramNCA() && !Core::Crypto::KeyManager::KeyFileExists(true)) {
|
||||
return {ResultStatus::ErrorMissingProductionKeyFile, {}};
|
||||
}
|
||||
|
||||
const auto result = nca_loader->Load(process, system);
|
||||
if (result.first != ResultStatus::Success) {
|
||||
return result;
|
||||
|
||||
@@ -63,11 +63,11 @@ void ConfigureWeb::RetranslateUI() {
|
||||
ui->retranslateUi(this);
|
||||
|
||||
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>"));
|
||||
|
||||
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>"));
|
||||
}
|
||||
|
||||
|
||||
@@ -31,23 +31,22 @@ constexpr char PROGRESSBAR_STYLE_BUILD[] = R"(
|
||||
QProgressBar {
|
||||
background-color: black;
|
||||
border: 2px solid white;
|
||||
border-radius: 4px;
|
||||
border-radius: 10px;
|
||||
padding: 2px;
|
||||
}
|
||||
QProgressBar::chunk {
|
||||
background-color: #ff3c28;
|
||||
width: 1px;
|
||||
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: 6px;
|
||||
})";
|
||||
|
||||
constexpr char PROGRESSBAR_STYLE_COMPLETE[] = R"(
|
||||
QProgressBar {
|
||||
background-color: #0ab9e6;
|
||||
background-color: black;
|
||||
border: 2px solid white;
|
||||
border-radius: 4px;
|
||||
padding: 2px;
|
||||
border-radius: 10px;
|
||||
padding: 4px;
|
||||
}
|
||||
QProgressBar::chunk {
|
||||
background-color: #ff3c28;
|
||||
})";
|
||||
|
||||
LoadingScreen::LoadingScreen(QWidget* parent)
|
||||
@@ -99,7 +98,7 @@ void LoadingScreen::Prepare(Loader::AppLoader& loader) {
|
||||
#ifdef SUYU_QT_MOVIE_MISSING
|
||||
QPixmap map;
|
||||
map.loadFromData(buffer.data(), buffer.size());
|
||||
ui->banner->setPixmap(map);
|
||||
setPixmap(map);
|
||||
#else
|
||||
backing_mem = std::make_unique<QByteArray>(reinterpret_cast<char*>(buffer.data()),
|
||||
static_cast<int>(buffer.size()));
|
||||
@@ -116,6 +115,8 @@ void LoadingScreen::Prepare(Loader::AppLoader& loader) {
|
||||
map.loadFromData(buffer.data(), static_cast<uint>(buffer.size()));
|
||||
ui->logo->setPixmap(map);
|
||||
}
|
||||
ui->logo->setVisible(false);
|
||||
ui->banner->setVisible(false);
|
||||
|
||||
slow_shader_compile_start = false;
|
||||
OnLoadProgress(VideoCore::LoadCallbackStage::Prepare, 0, 0);
|
||||
|
||||
@@ -49,6 +49,9 @@
|
||||
</property>
|
||||
<item alignment="Qt::AlignLeft|Qt::AlignTop">
|
||||
<widget class="QLabel" name="logo">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
@@ -78,7 +81,7 @@
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: black; color: white;
|
||||
font: 75 20pt "Arial";</string>
|
||||
font: 500 20pt "Ubuntu";</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Loading Shaders 387 / 1628</string>
|
||||
@@ -96,19 +99,25 @@ font: 75 20pt "Arial";</string>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>500</width>
|
||||
<height>40</height>
|
||||
<height>30</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>30</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QProgressBar {
|
||||
color: white;
|
||||
background-color: black;
|
||||
border: 2px solid white;
|
||||
outline-color: black;
|
||||
border-radius: 20px;
|
||||
border-radius: 10px;
|
||||
padding: 2px;
|
||||
}
|
||||
QProgressBar::chunk {
|
||||
background-color: white;
|
||||
border-radius: 15px;
|
||||
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: 6px;
|
||||
}</string>
|
||||
</property>
|
||||
<property name="value">
|
||||
@@ -129,7 +138,7 @@ border-radius: 15px;
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: black; color: white;
|
||||
font: 75 15pt "Arial";</string>
|
||||
font: 500 15pt "Ubuntu";</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Estimated Time 5m 4s</string>
|
||||
@@ -140,6 +149,9 @@ font: 75 15pt "Arial";</string>
|
||||
</item>
|
||||
<item alignment="Qt::AlignRight|Qt::AlignBottom">
|
||||
<widget class="QLabel" name="banner">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: black;</string>
|
||||
</property>
|
||||
|
||||
@@ -1535,11 +1535,12 @@ void GMainWindow::ConnectMenuEvents() {
|
||||
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_800, &GMainWindow::ResetWindowSize800);
|
||||
connect_menu(ui->action_Reset_Window_Size_900, &GMainWindow::ResetWindowSize900);
|
||||
connect_menu(ui->action_Reset_Window_Size_1080, &GMainWindow::ResetWindowSize1080);
|
||||
ui->menu_Reset_Window_Size->addActions({ui->action_Reset_Window_Size_720,
|
||||
ui->action_Reset_Window_Size_900,
|
||||
ui->action_Reset_Window_Size_1080});
|
||||
ui->menu_Reset_Window_Size->addActions(
|
||||
{ui->action_Reset_Window_Size_720, ui->action_Reset_Window_Size_800,
|
||||
ui->action_Reset_Window_Size_900, ui->action_Reset_Window_Size_1080});
|
||||
|
||||
// Multiplayer
|
||||
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()) {
|
||||
QMessageBox::warning(this, tr("Derivation Components Missing"),
|
||||
tr("Encryption keys are missing. "
|
||||
"You need to provide both your own title.keys "
|
||||
"and your own prod.keys "
|
||||
"in order to play games"));
|
||||
"In order to use this emulator"
|
||||
"you need to provide your own encryption keys"
|
||||
"in order to play them."));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -3530,6 +3531,14 @@ void GMainWindow::ResetWindowSize720() {
|
||||
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() {
|
||||
ResetWindowSize(1600U, 900U);
|
||||
}
|
||||
@@ -4630,9 +4639,9 @@ void GMainWindow::OnCheckFirmwareDecryption() {
|
||||
if (!ContentManager::AreKeysPresent()) {
|
||||
QMessageBox::warning(this, tr("Derivation Components Missing"),
|
||||
tr("Encryption keys are missing. "
|
||||
"You need to provide both your own title.keys "
|
||||
"and your own prod.keys "
|
||||
"in order to play games"));
|
||||
"In order to use this emulator"
|
||||
"you need to provide your own encryption keys"
|
||||
"in order to play them."));
|
||||
}
|
||||
|
||||
SetFirmwareVersion();
|
||||
|
||||
@@ -393,6 +393,7 @@ private slots:
|
||||
void ToggleWindowMode();
|
||||
void ResetWindowSize(u32 width, u32 height);
|
||||
void ResetWindowSize720();
|
||||
void ResetWindowSize800();
|
||||
void ResetWindowSize900();
|
||||
void ResetWindowSize1080();
|
||||
void OnAlbum();
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1280</width>
|
||||
<height>21</height>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menu_File">
|
||||
@@ -102,6 +102,14 @@
|
||||
<property name="iconText">
|
||||
<string>Reset Window Size to 720p</string>
|
||||
</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 name="action_Reset_Window_Size_900">
|
||||
<property name="text">
|
||||
@@ -124,7 +132,7 @@
|
||||
<addaction name="action_Display_Dock_Widget_Headers"/>
|
||||
<addaction name="action_Show_Filter_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="menu_Reset_Window_Size"/>
|
||||
<addaction name="menu_View_Debugging"/>
|
||||
|
||||
@@ -9,7 +9,7 @@ if(LIBVA_FOUND)
|
||||
list(APPEND FFmpeg_LIBRARIES ${LIBVA_LIBRARIES})
|
||||
endif()
|
||||
|
||||
add_library(video_core STATIC
|
||||
set(sources
|
||||
buffer_cache/buffer_base.h
|
||||
buffer_cache/buffer_cache_base.h
|
||||
buffer_cache/buffer_cache.cpp
|
||||
@@ -315,6 +315,67 @@ add_library(video_core STATIC
|
||||
vulkan_common/vulkan.h
|
||||
)
|
||||
|
||||
if (APPLE)
|
||||
list(REMOVE_ITEM sources
|
||||
renderer_opengl/present/filters.cpp
|
||||
renderer_opengl/present/filters.h
|
||||
renderer_opengl/present/fsr.cpp
|
||||
renderer_opengl/present/fsr.h
|
||||
renderer_opengl/present/fxaa.cpp
|
||||
renderer_opengl/present/fxaa.h
|
||||
renderer_opengl/present/layer.cpp
|
||||
renderer_opengl/present/layer.h
|
||||
renderer_opengl/present/present_uniforms.h
|
||||
renderer_opengl/present/smaa.cpp
|
||||
renderer_opengl/present/smaa.h
|
||||
renderer_opengl/present/util.h
|
||||
renderer_opengl/present/window_adapt_pass.cpp
|
||||
renderer_opengl/present/window_adapt_pass.h
|
||||
renderer_opengl/blit_image.cpp
|
||||
renderer_opengl/blit_image.h
|
||||
renderer_opengl/gl_blit_screen.cpp
|
||||
renderer_opengl/gl_blit_screen.h
|
||||
renderer_opengl/gl_buffer_cache_base.cpp
|
||||
renderer_opengl/gl_buffer_cache.cpp
|
||||
renderer_opengl/gl_buffer_cache.h
|
||||
renderer_opengl/gl_compute_pipeline.cpp
|
||||
renderer_opengl/gl_compute_pipeline.h
|
||||
renderer_opengl/gl_device.cpp
|
||||
renderer_opengl/gl_device.h
|
||||
renderer_opengl/gl_fence_manager.cpp
|
||||
renderer_opengl/gl_fence_manager.h
|
||||
renderer_opengl/gl_graphics_pipeline.cpp
|
||||
renderer_opengl/gl_graphics_pipeline.h
|
||||
renderer_opengl/gl_rasterizer.cpp
|
||||
renderer_opengl/gl_rasterizer.h
|
||||
renderer_opengl/gl_resource_manager.cpp
|
||||
renderer_opengl/gl_resource_manager.h
|
||||
renderer_opengl/gl_shader_cache.cpp
|
||||
renderer_opengl/gl_shader_cache.h
|
||||
renderer_opengl/gl_shader_manager.cpp
|
||||
renderer_opengl/gl_shader_manager.h
|
||||
renderer_opengl/gl_shader_context.h
|
||||
renderer_opengl/gl_shader_util.cpp
|
||||
renderer_opengl/gl_shader_util.h
|
||||
renderer_opengl/gl_state_tracker.cpp
|
||||
renderer_opengl/gl_state_tracker.h
|
||||
renderer_opengl/gl_staging_buffer_pool.cpp
|
||||
renderer_opengl/gl_staging_buffer_pool.h
|
||||
renderer_opengl/gl_texture_cache.cpp
|
||||
renderer_opengl/gl_texture_cache.h
|
||||
renderer_opengl/gl_texture_cache_base.cpp
|
||||
renderer_opengl/gl_query_cache.cpp
|
||||
renderer_opengl/gl_query_cache.h
|
||||
renderer_opengl/maxwell_to_gl.h
|
||||
renderer_opengl/renderer_opengl.cpp
|
||||
renderer_opengl/renderer_opengl.h
|
||||
renderer_opengl/util_shaders.cpp
|
||||
renderer_opengl/util_shaders.h
|
||||
)
|
||||
endif()
|
||||
|
||||
add_library(video_core STATIC ${sources})
|
||||
|
||||
target_link_libraries(video_core PUBLIC common core)
|
||||
target_link_libraries(video_core PUBLIC glad shader_recompiler stb bc_decoder)
|
||||
|
||||
@@ -347,7 +408,7 @@ if (MSVC)
|
||||
/we4244 # 'conversion': conversion from 'type1' to 'type2', possible loss of data
|
||||
)
|
||||
else()
|
||||
if (APPLE)
|
||||
if (APPLE OR ARCHITECTURE_arm64)
|
||||
# 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')
|
||||
target_compile_options(video_core PRIVATE -Wno-shadow -Wno-unused-local-typedef)
|
||||
|
||||
@@ -21,9 +21,15 @@ std::unique_ptr<VideoCore::RendererBase> CreateRenderer(
|
||||
auto& device_memory = system.Host1x().MemoryManager();
|
||||
|
||||
switch (Settings::values.renderer_backend.GetValue()) {
|
||||
#ifdef __APPLE__
|
||||
// do nothing for now, include metal in here at later date.
|
||||
#else
|
||||
// openGL, not supported on Apple so not bothering to include if macos
|
||||
case Settings::RendererBackend::OpenGL:
|
||||
return std::make_unique<OpenGL::RendererOpenGL>(emu_window, device_memory, gpu,
|
||||
std::move(context));
|
||||
#endif
|
||||
// common renderers
|
||||
case Settings::RendererBackend::Vulkan:
|
||||
return std::make_unique<Vulkan::RendererVulkan>(emu_window, device_memory, gpu,
|
||||
std::move(context));
|
||||
|
||||
@@ -15,7 +15,11 @@
|
||||
#define VK_USE_PLATFORM_WAYLAND_KHR
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <MoltenVK/mvk_vulkan.h>
|
||||
#else
|
||||
#include <vulkan/vulkan.h>
|
||||
#endif
|
||||
|
||||
// Sanitize macros
|
||||
#undef CreateEvent
|
||||
|
||||
@@ -1364,6 +1364,7 @@ void Device::CollectToolingInfo() {
|
||||
LOG_INFO(Render_Vulkan, "Attached debugging tool: {}", name);
|
||||
has_renderdoc = has_renderdoc || name == "RenderDoc";
|
||||
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.
|
||||
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.
|
||||
@@ -821,6 +821,7 @@ private:
|
||||
bool has_broken_parallel_compiling{}; ///< Has broken parallel shader compiling.
|
||||
bool has_renderdoc{}; ///< Has RenderDoc 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 cant_blit_msaa{}; ///< Does not support MSAA<->MSAA blitting.
|
||||
bool must_emulate_scaled_formats{}; ///< Requires scaled vertex format emulation
|
||||
|
||||
Reference in New Issue
Block a user