mirror of
https://git.suyu.dev/suyu/suyu
synced 2025-09-24 06:52:08 -05:00
Compare commits
20 Commits
8cd1a0a7c8
...
textureima
Author | SHA1 | Date | |
---|---|---|---|
![]() |
fa80f8f9f8 | ||
![]() |
66993e2603 | ||
![]() |
6be886d0ff | ||
![]() |
ae65020815 | ||
![]() |
e886f27816 | ||
![]() |
9490b5264e | ||
![]() |
5f485a5863 | ||
![]() |
4eb41467f8 | ||
![]() |
daf2c1f496 | ||
![]() |
5f351bf2b3 | ||
![]() |
7b13512b41 | ||
![]() |
e1f809079e | ||
![]() |
b95cfe6483 | ||
![]() |
433bcabb72 | ||
![]() |
267ba83d40 | ||
![]() |
93b7854f95 | ||
![]() |
2bacc25996 | ||
![]() |
99ead71239 | ||
![]() |
e090ec8b21 | ||
![]() |
89468f90a2 |
@@ -7,6 +7,8 @@
|
||||
export NDK_CCACHE="$(which ccache)"
|
||||
ccache -s
|
||||
|
||||
git submodule update --init --recursive
|
||||
|
||||
BUILD_FLAVOR="mainline"
|
||||
|
||||
BUILD_TYPE="release"
|
||||
|
@@ -7,7 +7,9 @@
|
||||
# Exit on error, rather than continuing with the rest of the script.
|
||||
set -e
|
||||
|
||||
ccache -sv
|
||||
ccache -s
|
||||
|
||||
git submodule update --init --recursive
|
||||
|
||||
mkdir build || true && cd build
|
||||
cmake .. \
|
||||
|
@@ -6,7 +6,9 @@
|
||||
# Exit on error, rather than continuing with the rest of the script.
|
||||
set -e
|
||||
|
||||
ccache -sv
|
||||
ccache -s
|
||||
|
||||
git submodule update --init --recursive
|
||||
|
||||
mkdir build || true && cd build
|
||||
cmake .. \
|
||||
@@ -52,9 +54,9 @@ DESTDIR="$PWD/AppDir" ninja install
|
||||
rm -vf AppDir/usr/bin/suyu-cmd AppDir/usr/bin/suyu-tester
|
||||
|
||||
# Download tools needed to build an AppImage
|
||||
wget -nc https://gitlab.com/suyu-emu/ext-linux-bin/-/raw/main/appimage/deploy-linux.sh
|
||||
wget -nc https://gitlab.com/suyu-emu/ext-linux-bin/-/raw/main/appimage/exec-x86_64.so
|
||||
wget -nc https://gitlab.com/suyu-emu/AppImageKit-checkrt/-/raw/old/AppRun.sh
|
||||
wget -nc https://git.suyu.dev/suyu/ext-linux-bin/raw/branch/main/appimage/deploy-linux.sh
|
||||
wget -nc https://git.suyu.dev/suyu/ext-linux-bin/raw/branch/main/appimage/exec-x86_64.so
|
||||
wget -nc https://git.suyu.dev/suyu/AppImageKit-checkrt/raw/branch/gh-workflow/AppRun
|
||||
|
||||
# Set executable bit
|
||||
chmod 755 \
|
||||
|
@@ -8,7 +8,9 @@ set -e
|
||||
|
||||
#cd /suyu
|
||||
|
||||
ccache -sv
|
||||
ccache -s
|
||||
|
||||
git submodule update --init --recursive
|
||||
|
||||
rm -rf build
|
||||
mkdir -p build && cd build
|
||||
|
@@ -8,7 +8,7 @@ name: 'suyu verify'
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ "dev" ]
|
||||
# branches: [ "dev" ]
|
||||
paths:
|
||||
- 'src/**'
|
||||
- 'CMakeModules/**'
|
||||
@@ -19,7 +19,7 @@ on:
|
||||
# paths-ignore:
|
||||
# - 'src/android/**'
|
||||
push:
|
||||
branches: [ "dev" ]
|
||||
# branches: [ "dev" ]
|
||||
paths:
|
||||
- 'src/**'
|
||||
- 'CMakeModules/**'
|
||||
|
@@ -6,5 +6,5 @@ SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
Please check out the
|
||||
|
||||
* [Contributors's guide](https://gitlab.com/suyu-emu/suyu/-/wikis/Contributing).
|
||||
* [Merge request guidelines](https://gitlab.com/suyu-emu/suyu/-/wikis/Merge-requests)
|
||||
* [Contributors's guide](https://git.suyu.dev/suyu/suyu/wiki/Contributing).
|
||||
* [Merge request guidelines](https://git.suyu.dev/suyu/suyu/wiki/Typical-Git-Workflow#once-your-pull-request-is-ready-to-be-merged)
|
||||
|
25
MIGRATION.md
Normal file
25
MIGRATION.md
Normal file
@@ -0,0 +1,25 @@
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2024 suyu Emulator Project
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
-->
|
||||
# Migrating from yuzu
|
||||
|
||||
When coming from yuzu, the migration is as easy as renaming some directories.
|
||||
|
||||
## Windows
|
||||
|
||||
Use the run dialog to go to `%APPDATA%` or manually go to `C:\Users\{USERNAME}\AppData\Roaming` (you may have to enable hidden files) and simply rename the `yuzu` directories and simply rename those to `suyu`.
|
||||
|
||||
## Unix (macOS/Linux)
|
||||
Similarly, you can simply rename the folders `~/.local/share/yuzu` and `~/.config/yuzu` to `suyu`, either via a file manager or with the following commands:
|
||||
```sh
|
||||
$ mv ~/.local/share/yuzu ~/.local/share/suyu
|
||||
$ mv ~/.config/yuzu ~/.config/suyu
|
||||
```
|
||||
There is also `~/.cache/yuzu`, which you can safely delete. Suyu will build a fresh cache in its own directory.
|
||||
|
||||
### Linux
|
||||
Depending on your setup, you may want to substitute those base paths for `$XDG_DATA_HOME` and `$XDG_CONFIG_HOME` respectively.
|
||||
|
||||
## Android
|
||||
TBD
|
31
README.md
31
README.md
@@ -6,10 +6,11 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
**Note**: We do not support or condone piracy in any form. In order to use suyu, you'll need keys from your real Switch system, and games which you have legally obtained and paid for. We do not intend to make money or profit from this project.
|
||||
|
||||
We're in need of developers. Please join our chat below if you want to contribute!
|
||||
This repo was based on Yuzu EA 4176 but the code is being rewritten from the ground up for legal and performance reasons.
|
||||
We're in need of developers. Please join our chat below or DM a dev if you want to contribute!
|
||||
This repo is currently based on Yuzu EA 4176 but the code will be rewritten for legal and performance reasons.
|
||||
|
||||
Support the original suyu developer team [here](https://discord.gg/79B6wqFPnc).
|
||||
|
||||
Support the original suyu developer team [here](https://discord.gg/ajz5hdrZ)
|
||||
|
||||
<hr />
|
||||
|
||||
@@ -23,12 +24,13 @@ Support the original suyu developer team [here](https://discord.gg/ajz5hdrZ)
|
||||
|
||||
<h4 align="center"><b>suyu</b> was the continuation of the world's most popular, open-source Nintendo Switch emulator, yuzu, but is now something more.
|
||||
<br>
|
||||
It is written in C++ (C# possibly required soon) with portability in mind, we actively work on builds for Windows, Linux, Android and hopefully IOS, along with a WIP custom OS called suyuOS (https://git.suyu.dev/suyu/suyu-os) .
|
||||
It is written in C++ with portability in mind, and we actively provide builds for Windows, Linux and Android, iOS may come later.
|
||||
|
||||
</h4>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://chat.suyu.dev">Chat</a> |
|
||||
<a href="https://www.reddit.com/r/suyu/">Reddit</a> |
|
||||
<a href="#status">Status</a> |
|
||||
<a href="#development">Development</a> |
|
||||
<a href="#downloads">Downloads</a> |
|
||||
@@ -41,6 +43,10 @@ It is written in C++ (C# possibly required soon) with portability in mind, we ac
|
||||
## Hardware Requirements
|
||||
[Click here to see the Hardware Requirements](https://git.suyu.dev/suyu/suyu/wiki/Hardware-Requirements)
|
||||
|
||||
## Migrating from yuzu
|
||||
|
||||
See [MIGRATION.md](MIGRATION.md).
|
||||
|
||||
## Status
|
||||
|
||||
We currently have builds over at the [Releases](https://git.suyu.dev/suyu/suyu/releases) page.
|
||||
@@ -51,10 +57,10 @@ We currently have builds over at the [Releases](https://git.suyu.dev/suyu/suyu/r
|
||||
|
||||
This project is completely free and open source, and anyone can contribute to help improve suyu.
|
||||
|
||||
Most of the development happens on GitLab. For development discussion, please join us in our [Chat](https://chat.suyu.dev).
|
||||
Most of the development happens on Git. For development discussion, please join us in our [Chat](https://chat.suyu.dev) or [Subreddit](reddit.com/r/suyu/), you can also contact a developer.
|
||||
|
||||
If you want to contribute, please take a look at the [Contributor's Guide](https://git.suyu.dev/suyu/suyu/wiki/Contributing) and [Developer Information](https://git.suyu.dev/suyu/suyu/wiki/Developer-Information).
|
||||
You can also contact any of the developers on Discord to learn more about the current state of suyu.
|
||||
You can also contact any of the developers on the Chat to learn more about the current state of suyu.
|
||||
|
||||
## Downloads
|
||||
|
||||
@@ -62,26 +68,27 @@ You can also contact any of the developers on Discord to learn more about the cu
|
||||
* __Linux__: [Releases](https://git.suyu.dev/suyu/suyu/releases)
|
||||
* __macOS__: [Releases](https://git.suyu.dev/suyu/suyu/releases)
|
||||
* __Android__: [Releases](https://git.suyu.dev/suyu/suyu/releases)
|
||||
* __For IOS users, we recommend Sudachi__: [Releases](https://github.com/emuPlace/Sudachi/releases)
|
||||
###### We currently do not provide builds for iOS, however if you would like, you could try the experimental Sudachi Emulator and it's bigger project: [Folium](https://apps.apple.com/us/app/folium/id6498623389).
|
||||
|
||||
If you want daily builds then [Click here](https://git.suyu.dev/suyu/suyu/actions)
|
||||
If you want daily builds then [Click here](https://git.suyu.dev/suyu/suyu/actions).
|
||||
If you don't know how to download the daily builds then [Click here](https://git.suyu.dev/suyu/suyu/raw/branch/dev/img/daily-builds.png)
|
||||
Right now we only have daily builds for Linux and Android.
|
||||
|
||||
We have official builds [here.](https://git.suyu.dev/suyu/suyu/releases) If any website or person is claiming to have a build for suyu, take that with a grain of salt.
|
||||
We have official builds [here.](https://git.suyu.dev/suyu/suyu/releases)<br>If any website or person is claiming to have a build for suyu, take that with a grain of salt and let us know.
|
||||
|
||||
For Multiplayer, we recommend using the "Yuzu Online" patch, install instructions can be found on Reddit and their Discord.
|
||||
|
||||
## Building
|
||||
|
||||
* __Windows__: [Windows Build](https://git.suyu.dev/suyu/suyu/wiki/Building-For-Windows)
|
||||
* __Linux__: [Linux Build](https://git.suyu.dev/suyu/suyu/wiki/Building-For-Linux)
|
||||
* __Android__: [Android Build](https://git.suyu.dev/suyu/suyu/wiki/Building-For-Android)
|
||||
* __macOS__: [macOS Build](https://git.suyu.dev/suyu/suyu/wiki/Building-for-macOS)
|
||||
* __MacOS__: [MacOS Build](https://git.suyu.dev/suyu/suyu/wiki/Building-for-macOS)
|
||||
|
||||
|
||||
|
||||
## Support
|
||||
|
||||
If you have any questions, don't hesitate to ask us in our [chat](https://chat.suyu.dev). We don't bite!
|
||||
If you have any questions, don't hesitate to ask us in our [Chat](https://chat.suyu.dev) or Subreddit, make an issue or contact a developer. We don't bite!
|
||||
|
||||
|
||||
## License
|
||||
|
@@ -13,7 +13,7 @@
|
||||
#include "common/polyfill_ranges.h"
|
||||
|
||||
namespace AudioCore {
|
||||
constexpr u32 CurrentRevision = 11;
|
||||
constexpr u32 CurrentRevision = 12;
|
||||
|
||||
enum class SupportTags {
|
||||
CommandProcessingTimeEstimatorVersion4,
|
||||
|
@@ -54,7 +54,8 @@ public:
|
||||
const s32 to_register{std::min(std::min(appended_count, BufferAppendLimit),
|
||||
BufferAppendLimit - registered_count)};
|
||||
|
||||
for (s32 i = 0; i < to_register; i++) {
|
||||
out_buffers.reserve(to_register);
|
||||
for (s32 i = 0; i < to_register; ++i) {
|
||||
s32 index{appended_index - appended_count};
|
||||
if (index < 0) {
|
||||
index += N;
|
||||
@@ -180,6 +181,7 @@ public:
|
||||
return 0;
|
||||
}
|
||||
|
||||
buffers_flushed.reserve(registered_count + appended_count);
|
||||
while (registered_count > 0) {
|
||||
auto index{registered_index - registered_count};
|
||||
if (index < 0) {
|
||||
|
@@ -80,6 +80,7 @@ FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs,
|
||||
if (filename == "00") {
|
||||
const auto dir = vfs->OpenDirectory(dir_name, FileSys::OpenMode::Read);
|
||||
std::vector<FileSys::VirtualFile> concat;
|
||||
concat.reserve(0x10);
|
||||
|
||||
for (u32 i = 0; i < 0x10; ++i) {
|
||||
const auto file_name = fmt::format("{:02X}", i);
|
||||
|
@@ -481,6 +481,7 @@ void GDBStub::HandleQuery(std::string_view command) {
|
||||
// beginning of list
|
||||
const auto& threads = GetProcess()->GetThreadList();
|
||||
std::vector<std::string> thread_ids;
|
||||
thread_ids.reserve(threads.size());
|
||||
for (const auto& thread : threads) {
|
||||
thread_ids.push_back(fmt::format("{:x}", thread.GetThreadId()));
|
||||
}
|
||||
|
@@ -261,7 +261,7 @@ std::vector<NcaID> PlaceholderCache::List() const {
|
||||
std::vector<NcaID> out;
|
||||
for (const auto& sdir : dir->GetSubdirectories()) {
|
||||
for (const auto& file : sdir->GetFiles()) {
|
||||
const auto name = file->GetName();
|
||||
const auto& name = file->GetName();
|
||||
if (name.length() == 36 && name.ends_with(".nca")) {
|
||||
out.push_back(Common::HexStringToArray<0x10>(name.substr(0, 32)));
|
||||
}
|
||||
|
@@ -117,7 +117,9 @@ std::vector<std::shared_ptr<NCA>> NSP::GetNCAsCollapsed() const {
|
||||
if (extracted)
|
||||
LOG_WARNING(Service_FS, "called on an NSP that is of type extracted.");
|
||||
std::vector<std::shared_ptr<NCA>> out;
|
||||
out.reserve(ncas.size());
|
||||
for (const auto& map : ncas) {
|
||||
out.reserve(map.second.size());
|
||||
for (const auto& inner_map : map.second)
|
||||
out.push_back(inner_map.second);
|
||||
}
|
||||
|
@@ -24,7 +24,7 @@ constexpr std::array<u8, 30> WORD_TXT{
|
||||
|
||||
VirtualDir NgWord1() {
|
||||
std::vector<VirtualFile> files;
|
||||
files.reserve(NgWord1Data::NUMBER_WORD_TXT_FILES);
|
||||
files.reserve(files.size() + 2);
|
||||
|
||||
for (std::size_t i = 0; i < files.size(); ++i) {
|
||||
files.push_back(MakeArrayFile(NgWord1Data::WORD_TXT, fmt::format("{}.txt", i)));
|
||||
@@ -54,7 +54,7 @@ constexpr std::array<u8, 0x2C> AC_NX_DATA{
|
||||
|
||||
VirtualDir NgWord2() {
|
||||
std::vector<VirtualFile> files;
|
||||
files.reserve(NgWord2Data::NUMBER_AC_NX_FILES * 3);
|
||||
files.reserve(NgWord2Data::NUMBER_AC_NX_FILES + 4);
|
||||
|
||||
for (std::size_t i = 0; i < NgWord2Data::NUMBER_AC_NX_FILES; ++i) {
|
||||
files.push_back(MakeArrayFile(NgWord2Data::AC_NX_DATA, fmt::format("ac_{}_b1_nx", i)));
|
||||
|
@@ -37,6 +37,7 @@ const static std::map<std::string, const std::map<const char*, const std::vector
|
||||
|
||||
static void GenerateFiles(std::vector<VirtualFile>& directory,
|
||||
const std::map<const char*, const std::vector<u8>>& files) {
|
||||
directory.reserve(files.size());
|
||||
for (const auto& [filename, data] : files) {
|
||||
const auto data_copy{data};
|
||||
const std::string filename_copy{filename};
|
||||
@@ -54,6 +55,7 @@ static std::vector<VirtualFile> GenerateZoneinfoFiles() {
|
||||
|
||||
VirtualDir TimeZoneBinary() {
|
||||
std::vector<VirtualDir> america_sub_dirs;
|
||||
america_sub_dirs.reserve(tzdb_america_dirs.size());
|
||||
for (const auto& [dir_name, files] : tzdb_america_dirs) {
|
||||
std::vector<VirtualFile> vfs_files;
|
||||
GenerateFiles(vfs_files, files);
|
||||
@@ -62,6 +64,7 @@ VirtualDir TimeZoneBinary() {
|
||||
}
|
||||
|
||||
std::vector<VirtualDir> zoneinfo_sub_dirs;
|
||||
zoneinfo_sub_dirs.reserve(tzdb_zoneinfo_dirs.size());
|
||||
for (const auto& [dir_name, files] : tzdb_zoneinfo_dirs) {
|
||||
std::vector<VirtualFile> vfs_files;
|
||||
GenerateFiles(vfs_files, files);
|
||||
|
@@ -38,7 +38,8 @@ VirtualDir CachedVfsDirectory::GetSubdirectory(std::string_view dir_name) const
|
||||
|
||||
std::vector<VirtualFile> CachedVfsDirectory::GetFiles() const {
|
||||
std::vector<VirtualFile> out;
|
||||
for (auto& [file_name, file] : files) {
|
||||
out.reserve(files.size());
|
||||
for (const auto& [_, file] : files) {
|
||||
out.push_back(file);
|
||||
}
|
||||
return out;
|
||||
@@ -46,7 +47,8 @@ std::vector<VirtualFile> CachedVfsDirectory::GetFiles() const {
|
||||
|
||||
std::vector<VirtualDir> CachedVfsDirectory::GetSubdirectories() const {
|
||||
std::vector<VirtualDir> out;
|
||||
for (auto& [dir_name, dir] : dirs) {
|
||||
out.reserve(dirs.size());
|
||||
for (auto& [_, dir] : dirs) {
|
||||
out.push_back(dir);
|
||||
}
|
||||
return out;
|
||||
|
@@ -121,7 +121,7 @@ void WindowSystem::RequestAppletVisibilityState(Applet& applet, bool visible) {
|
||||
void WindowSystem::OnOperationModeChanged() {
|
||||
std::scoped_lock lk{m_lock};
|
||||
|
||||
for (const auto& [aruid, applet] : m_applets) {
|
||||
for (const auto& [_, applet] : m_applets) {
|
||||
std::scoped_lock lk2{applet->lock};
|
||||
applet->lifecycle_manager.OnOperationAndPerformanceModeChanged();
|
||||
}
|
||||
@@ -130,7 +130,7 @@ void WindowSystem::OnOperationModeChanged() {
|
||||
void WindowSystem::OnExitRequested() {
|
||||
std::scoped_lock lk{m_lock};
|
||||
|
||||
for (const auto& [aruid, applet] : m_applets) {
|
||||
for (const auto& [_, applet] : m_applets) {
|
||||
std::scoped_lock lk2{applet->lock};
|
||||
applet->lifecycle_manager.RequestExit();
|
||||
}
|
||||
@@ -156,7 +156,7 @@ void WindowSystem::OnHomeButtonPressed(ButtonPressDuration type) {
|
||||
|
||||
void WindowSystem::PruneTerminatedAppletsLocked() {
|
||||
for (auto it = m_applets.begin(); it != m_applets.end(); /* ... */) {
|
||||
const auto& [aruid, applet] = *it;
|
||||
const auto& [_, applet] = *it;
|
||||
|
||||
std::scoped_lock lk{applet->lock};
|
||||
|
||||
|
@@ -119,7 +119,7 @@ Result LANDiscovery::Scan(std::span<NetworkInfo> out_networks, s16& out_count,
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
|
||||
std::scoped_lock lock{packet_mutex};
|
||||
for (const auto& [key, info] : scan_results) {
|
||||
for (const auto& [_, info] : scan_results) {
|
||||
if (out_count >= static_cast<s16>(out_networks.size())) {
|
||||
break;
|
||||
}
|
||||
|
@@ -348,7 +348,7 @@ Result IApplicationManagerInterface::ListApplicationRecord(
|
||||
size_t i = 0;
|
||||
u8 ii = 24;
|
||||
|
||||
for (const auto& [slot, game] : installed_games) {
|
||||
for (const auto& [_, game] : installed_games) {
|
||||
if (i >= limit) {
|
||||
break;
|
||||
}
|
||||
|
@@ -28,7 +28,7 @@ ServiceManager::ServiceManager(Kernel::KernelCore& kernel_) : kernel{kernel_} {
|
||||
}
|
||||
|
||||
ServiceManager::~ServiceManager() {
|
||||
for (auto& [name, port] : service_ports) {
|
||||
for (auto& [_, port] : service_ports) {
|
||||
port->Close();
|
||||
}
|
||||
|
||||
|
@@ -571,7 +571,7 @@ SDLDriver::~SDLDriver() {
|
||||
std::vector<Common::ParamPackage> SDLDriver::GetInputDevices() const {
|
||||
std::vector<Common::ParamPackage> devices;
|
||||
std::unordered_map<int, std::shared_ptr<SDLJoystick>> joycon_pairs;
|
||||
for (const auto& [key, value] : joystick_map) {
|
||||
for (const auto& [_, value] : joystick_map) {
|
||||
for (const auto& joystick : value) {
|
||||
if (!joystick->GetSDLJoystick()) {
|
||||
continue;
|
||||
@@ -591,7 +591,7 @@ std::vector<Common::ParamPackage> SDLDriver::GetInputDevices() const {
|
||||
}
|
||||
|
||||
// Add dual controllers
|
||||
for (const auto& [key, value] : joystick_map) {
|
||||
for (const auto& [_, value] : joystick_map) {
|
||||
for (const auto& joystick : value) {
|
||||
if (joystick->IsJoyconRight()) {
|
||||
if (!joycon_pairs.contains(joystick->GetPort())) {
|
||||
|
@@ -196,8 +196,11 @@ Id Texture(EmitContext& ctx, IR::TextureInstInfo info, [[maybe_unused]] const IR
|
||||
}
|
||||
|
||||
Id TextureImage(EmitContext& ctx, IR::TextureInstInfo info, const IR::Value& index) {
|
||||
if (!index.IsImmediate() || index.U32() != 0) {
|
||||
throw NotImplementedException("Indirect image indexing");
|
||||
// if (!index.IsImmediate() || index.Type() != Shader::IR::Type::U32 || index.U32() != 0) {
|
||||
// throw NotImplementedException("Indirect image indexing");
|
||||
// }
|
||||
if (index.Type() != Shader::IR::Type::U32) {
|
||||
LOG_WARNING(Shader_SPIRV, "Non-U32 type provided as index: {}", index.Type());
|
||||
}
|
||||
if (info.type == TextureType::Buffer) {
|
||||
const TextureBufferDefinition& def{ctx.texture_buffers.at(info.descriptor_index)};
|
||||
@@ -215,8 +218,11 @@ Id TextureImage(EmitContext& ctx, IR::TextureInstInfo info, const IR::Value& ind
|
||||
}
|
||||
|
||||
std::pair<Id, bool> Image(EmitContext& ctx, const IR::Value& index, IR::TextureInstInfo info) {
|
||||
if (!index.IsImmediate() || index.U32() != 0) {
|
||||
throw NotImplementedException("Indirect image indexing");
|
||||
// if (!index.IsImmediate() || index.Type() != Shader::IR::Type::U32 || index.U32() != 0) {
|
||||
// throw NotImplementedException("Indirect image indexing");
|
||||
// }
|
||||
if (index.Type() != Shader::IR::Type::U32) {
|
||||
LOG_WARNING(Shader_SPIRV, "Non-U32 type provided as index: {}", index.Type());
|
||||
}
|
||||
if (info.type == TextureType::Buffer) {
|
||||
const ImageBufferDefinition def{ctx.image_buffers.at(info.descriptor_index)};
|
||||
|
@@ -69,7 +69,7 @@ void ConfigureApplets::Setup(const ConfigurationShared::Builder& builder) {
|
||||
|
||||
applets_hold.emplace(setting->Id(), widget);
|
||||
}
|
||||
for (const auto& [label, widget] : applets_hold) {
|
||||
for (const auto& [_, widget] : applets_hold) {
|
||||
library_applets_layout.addWidget(widget);
|
||||
}
|
||||
}
|
||||
|
@@ -164,7 +164,7 @@ void ConfigureAudio::Setup(const ConfigurationShared::Builder& builder) {
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto& [id, widget] : hold) {
|
||||
for (const auto& [_, widget] : hold) {
|
||||
layout.addWidget(widget);
|
||||
}
|
||||
}
|
||||
|
@@ -79,7 +79,7 @@ void ConfigureCpu::Setup(const ConfigurationShared::Builder& builder) {
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto& [label, widget] : unsafe_hold) {
|
||||
for (const auto& [_, widget] : unsafe_hold) {
|
||||
unsafe_layout->addWidget(widget);
|
||||
}
|
||||
|
||||
|
@@ -81,10 +81,10 @@ void ConfigureGeneral::Setup(const ConfigurationShared::Builder& builder) {
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto& [id, widget] : general_hold) {
|
||||
for (const auto& [_, widget] : general_hold) {
|
||||
general_layout.addWidget(widget);
|
||||
}
|
||||
for (const auto& [id, widget] : linux_hold) {
|
||||
for (const auto& [_, widget] : linux_hold) {
|
||||
linux_layout.addWidget(widget);
|
||||
}
|
||||
}
|
||||
|
@@ -358,7 +358,7 @@ void ConfigureGraphics::Setup(const ConfigurationShared::Builder& builder) {
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto& [id, widget] : hold_graphics) {
|
||||
for (const auto& [_, widget] : hold_graphics) {
|
||||
graphics_layout.addWidget(widget);
|
||||
}
|
||||
|
||||
|
@@ -53,7 +53,7 @@ void ConfigureGraphicsAdvanced::Setup(const ConfigurationShared::Builder& builde
|
||||
checkbox_enable_compute_pipelines = widget;
|
||||
}
|
||||
}
|
||||
for (const auto& [id, widget] : hold) {
|
||||
for (const auto& [_, widget] : hold) {
|
||||
layout.addWidget(widget);
|
||||
}
|
||||
}
|
||||
|
@@ -50,7 +50,7 @@ void ConfigureLinuxTab::Setup(const ConfigurationShared::Builder& builder) {
|
||||
linux_hold.insert({setting->Id(), widget});
|
||||
}
|
||||
|
||||
for (const auto& [id, widget] : linux_hold) {
|
||||
for (const auto& [_, widget] : linux_hold) {
|
||||
linux_layout.addWidget(widget);
|
||||
}
|
||||
}
|
||||
|
@@ -174,10 +174,10 @@ void ConfigureSystem::Setup(const ConfigurationShared::Builder& builder) {
|
||||
widget->deleteLater();
|
||||
}
|
||||
}
|
||||
for (const auto& [label, widget] : core_hold) {
|
||||
for (const auto& [_, widget] : core_hold) {
|
||||
core_layout.addWidget(widget);
|
||||
}
|
||||
for (const auto& [id, widget] : system_hold) {
|
||||
for (const auto& [_, widget] : system_hold) {
|
||||
system_layout.addWidget(widget);
|
||||
}
|
||||
}
|
||||
|
@@ -83,7 +83,7 @@ static void PopulateResolutionComboBox(QComboBox* screenshot_height, QWidget* pa
|
||||
const auto& enumeration =
|
||||
Settings::EnumMetadata<Settings::ResolutionSetup>::Canonicalizations();
|
||||
std::set<u32> resolutions{};
|
||||
for (const auto& [name, value] : enumeration) {
|
||||
for (const auto& [_, value] : enumeration) {
|
||||
const float up_factor = GetUpFactor(value);
|
||||
u32 height_undocked = Layout::ScreenUndocked::Height * up_factor;
|
||||
u32 height_docked = Layout::ScreenDocked::Height * up_factor;
|
||||
|
@@ -61,7 +61,7 @@ std::vector<std::string> InputProfiles::GetInputProfileNames() {
|
||||
|
||||
auto it = map_profiles.cbegin();
|
||||
while (it != map_profiles.cend()) {
|
||||
const auto& [profile_name, config] = *it;
|
||||
const auto& [profile_name, _] = *it;
|
||||
if (!ProfileExistsInFilesystem(profile_name)) {
|
||||
it = map_profiles.erase(it);
|
||||
continue;
|
||||
|
@@ -135,7 +135,7 @@ QWidget* Widget::CreateCombobox(std::function<std::string()>& serializer,
|
||||
const ComboboxTranslations* enumeration{nullptr};
|
||||
if (combobox_enumerations.contains(type)) {
|
||||
enumeration = &combobox_enumerations.at(type);
|
||||
for (const auto& [id, name] : *enumeration) {
|
||||
for (const auto& [_, name] : *enumeration) {
|
||||
combobox->addItem(name);
|
||||
}
|
||||
} else {
|
||||
@@ -223,7 +223,7 @@ QWidget* Widget::CreateRadioGroup(std::function<std::string()>& serializer,
|
||||
};
|
||||
|
||||
if (!Settings::IsConfiguringGlobal()) {
|
||||
for (const auto& [id, button] : radio_buttons) {
|
||||
for (const auto& [_, button] : radio_buttons) {
|
||||
QObject::connect(button, &QAbstractButton::clicked, [touch]() { touch(); });
|
||||
}
|
||||
}
|
||||
|
@@ -87,7 +87,7 @@ std::optional<std::filesystem::path> GetCurrentUserPlayTimePath(
|
||||
std::vector<PlayTimeElement> elements;
|
||||
elements.reserve(play_time_db.size());
|
||||
|
||||
for (auto& [program_id, play_time] : play_time_db) {
|
||||
for (const auto& [program_id, play_time] : play_time_db) {
|
||||
if (program_id != 0) {
|
||||
elements.push_back(PlayTimeElement{program_id, play_time});
|
||||
}
|
||||
|
@@ -45,7 +45,7 @@ public:
|
||||
|
||||
[[nodiscard]] unsigned Count() const noexcept {
|
||||
unsigned count = 0;
|
||||
for (const auto& [index, value] : page_table) {
|
||||
for (const auto& [_, value] : page_table) {
|
||||
count += value;
|
||||
}
|
||||
return count;
|
||||
|
@@ -45,7 +45,7 @@ public:
|
||||
// Vic does not know which nvdec is producing frames for it, so search all the fds here for
|
||||
// the given offset.
|
||||
for (auto& map : m_presentation_order) {
|
||||
for (auto& [offset, frame] : map.second) {
|
||||
for (auto& [offset, _] : map.second) {
|
||||
if (offset == search_offset) {
|
||||
return map.first;
|
||||
}
|
||||
@@ -53,7 +53,7 @@ public:
|
||||
}
|
||||
|
||||
for (auto& map : m_decode_order) {
|
||||
for (auto& [offset, frame] : map.second) {
|
||||
for (auto& [offset, _] : map.second) {
|
||||
if (offset == search_offset) {
|
||||
return map.first;
|
||||
}
|
||||
|
Reference in New Issue
Block a user