forked from suyu/suyu
Compare commits
5 commits
dev
...
optimize-s
Author | SHA1 | Date | |
---|---|---|---|
8cd1a0a7c8 | |||
f05abd9b02 | |||
94b72df61e | |||
93e5d01452 | |||
4b54749954 |
14 changed files with 96 additions and 46 deletions
5
.gitmodules
vendored
5
.gitmodules
vendored
|
@ -1,4 +1,6 @@
|
||||||
# SPDX-FileCopyrightText: 2014 Citra Emulator Project
|
# SPDX-FileCopyrightText: 2014 Citra Emulator Project
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2024 suyu Emulator Project
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
[submodule "enet"]
|
[submodule "enet"]
|
||||||
|
@ -67,3 +69,6 @@
|
||||||
[submodule "Vulkan-Utility-Libraries"]
|
[submodule "Vulkan-Utility-Libraries"]
|
||||||
path = externals/Vulkan-Utility-Libraries
|
path = externals/Vulkan-Utility-Libraries
|
||||||
url = https://github.com/KhronosGroup/Vulkan-Utility-Libraries.git
|
url = https://github.com/KhronosGroup/Vulkan-Utility-Libraries.git
|
||||||
|
[submodule "externals/SPIRV-Tools"]
|
||||||
|
path = externals/SPIRV-Tools
|
||||||
|
url = https://github.com/KhronosGroup/SPIRV-Tools.git
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
||||||
# SPDX-FileCopyrightText: 2024 suyu Emulator Project
|
# SPDX-FileCopyrightText: 2024 suyu Emulator Project
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.22)
|
cmake_minimum_required(VERSION 3.22)
|
||||||
|
@ -40,6 +41,8 @@ option(SUYU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" "${WIN32}")
|
||||||
|
|
||||||
option(SUYU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON)
|
option(SUYU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON)
|
||||||
|
|
||||||
|
option(SUYU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" ON)
|
||||||
|
|
||||||
option(SUYU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ON)
|
option(SUYU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ON)
|
||||||
|
|
||||||
option(SUYU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF)
|
option(SUYU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF)
|
||||||
|
@ -320,6 +323,11 @@ if (NOT SUYU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES)
|
||||||
find_package(VulkanUtilityLibraries REQUIRED)
|
find_package(VulkanUtilityLibraries REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (NOT SUYU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS)
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
pkg_check_modules(SPIRV-Tools REQUIRED SPIRV-Tools)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (ENABLE_LIBUSB)
|
if (ENABLE_LIBUSB)
|
||||||
find_package(libusb 1.0.24 MODULE)
|
find_package(libusb 1.0.24 MODULE)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -6,5 +6,5 @@ SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
Please check out the
|
Please check out the
|
||||||
|
|
||||||
* [Contributors's guide](https://git.suyu.dev/suyu/suyu/wiki/Contributing).
|
* [Contributors's guide](https://gitlab.com/suyu-emu/suyu/-/wikis/Contributing).
|
||||||
* [Merge request guidelines](https://git.suyu.dev/suyu/suyu/wiki/Typical-Git-Workflow#once-your-pull-request-is-ready-to-be-merged)
|
* [Merge request guidelines](https://gitlab.com/suyu-emu/suyu/-/wikis/Merge-requests)
|
||||||
|
|
21
MIGRATION.md
21
MIGRATION.md
|
@ -1,21 +0,0 @@
|
||||||
# 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
|
|
21
README.md
21
README.md
|
@ -9,7 +9,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
We're in need of developers. Please join our chat below if you want to contribute!
|
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.
|
This repo was based on Yuzu EA 4176 but the code is being rewritten from the ground up 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 />
|
<hr />
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ Support the original suyu developer team [here](https://discord.gg/79B6wqFPnc).
|
||||||
|
|
||||||
<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.
|
<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>
|
<br>
|
||||||
It is written in C++ with portability in mind, and we actively provide builds for Windows, Linux, Android and iOS potentially coming soon.
|
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) .
|
||||||
|
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
|
@ -41,10 +41,6 @@ It is written in C++ with portability in mind, and we actively provide builds fo
|
||||||
## Hardware Requirements
|
## Hardware Requirements
|
||||||
[Click here to see the Hardware Requirements](https://git.suyu.dev/suyu/suyu/wiki/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
|
## Status
|
||||||
|
|
||||||
We currently have builds over at the [Releases](https://git.suyu.dev/suyu/suyu/releases) page.
|
We currently have builds over at the [Releases](https://git.suyu.dev/suyu/suyu/releases) page.
|
||||||
|
@ -55,10 +51,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.
|
This project is completely free and open source, and anyone can contribute to help improve suyu.
|
||||||
|
|
||||||
Most of the development happens on the Git. For development discussion, please join us in our [Chat](https://chat.suyu.dev) or contact a developer.
|
Most of the development happens on GitLab. For development discussion, please join us in our [Chat](https://chat.suyu.dev).
|
||||||
|
|
||||||
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).
|
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 the Chat to learn more about the current state of suyu.
|
You can also contact any of the developers on Discord to learn more about the current state of suyu.
|
||||||
|
|
||||||
## Downloads
|
## Downloads
|
||||||
|
|
||||||
|
@ -66,12 +62,13 @@ You can also contact any of the developers on the Chat to learn more about the c
|
||||||
* __Linux__: [Releases](https://git.suyu.dev/suyu/suyu/releases)
|
* __Linux__: [Releases](https://git.suyu.dev/suyu/suyu/releases)
|
||||||
* __macOS__: [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)
|
* __Android__: [Releases](https://git.suyu.dev/suyu/suyu/releases)
|
||||||
###### We currently do not provide builds for iOS, however if you would like, you could try the experimental [Sudachi](https://github.com/emuPlace/Sudachi/releases)/[Folium](https://github.com/jarrodnorwell/Folium/releases).
|
* __For IOS users, we recommend Sudachi__: [Releases](https://github.com/emuPlace/Sudachi/releases)
|
||||||
|
|
||||||
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)
|
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)<br>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) If any website or person is claiming to have a build for suyu, take that with a grain of salt.
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
|
@ -84,7 +81,7 @@ We have official builds [here.](https://git.suyu.dev/suyu/suyu/releases)<br>If a
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
|
|
||||||
If you have any questions, don't hesitate to ask us in our [chat](https://chat.suyu.dev), make an issue or contact a developer. We don't bite!
|
If you have any questions, don't hesitate to ask us in our [chat](https://chat.suyu.dev). We don't bite!
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
7
externals/CMakeLists.txt
vendored
7
externals/CMakeLists.txt
vendored
|
@ -1,4 +1,6 @@
|
||||||
# SPDX-FileCopyrightText: 2016 Citra Emulator Project
|
# SPDX-FileCopyrightText: 2016 Citra Emulator Project
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2024 suyu Emulator Project
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
# Dynarmic has cmake_minimum_required(3.12) and we may want to override
|
# Dynarmic has cmake_minimum_required(3.12) and we may want to override
|
||||||
|
@ -160,6 +162,11 @@ if (SUYU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES)
|
||||||
add_subdirectory(Vulkan-Utility-Libraries)
|
add_subdirectory(Vulkan-Utility-Libraries)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# SPIRV-Tools
|
||||||
|
if (YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS)
|
||||||
|
add_subdirectory(SPIRV-Tools)
|
||||||
|
endif()
|
||||||
|
|
||||||
# TZDB (Time Zone Database)
|
# TZDB (Time Zone Database)
|
||||||
add_subdirectory(nx_tzdb)
|
add_subdirectory(nx_tzdb)
|
||||||
|
|
||||||
|
|
1
externals/SPIRV-Tools
vendored
Submodule
1
externals/SPIRV-Tools
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit dd4b663e13c07fea4fbb3f70c1c91c86731099f7
|
|
@ -1,4 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 suyu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -277,6 +279,8 @@ struct Values {
|
||||||
|
|
||||||
SwitchableSetting<bool> use_disk_shader_cache{linkage, true, "use_disk_shader_cache",
|
SwitchableSetting<bool> use_disk_shader_cache{linkage, true, "use_disk_shader_cache",
|
||||||
Category::Renderer};
|
Category::Renderer};
|
||||||
|
SwitchableSetting<bool> optimize_spirv_output{linkage, false, "optimize_spirv_output",
|
||||||
|
Category::Renderer};
|
||||||
SwitchableSetting<bool> use_asynchronous_gpu_emulation{
|
SwitchableSetting<bool> use_asynchronous_gpu_emulation{
|
||||||
linkage, true, "use_asynchronous_gpu_emulation", Category::Renderer};
|
linkage, true, "use_asynchronous_gpu_emulation", Category::Renderer};
|
||||||
SwitchableSetting<AstcDecodeMode, true> accelerate_astc{linkage,
|
SwitchableSetting<AstcDecodeMode, true> accelerate_astc{linkage,
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2024 suyu Emulator Project
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
add_library(shader_recompiler STATIC
|
add_library(shader_recompiler STATIC
|
||||||
|
@ -242,7 +244,13 @@ add_library(shader_recompiler STATIC
|
||||||
varying_state.h
|
varying_state.h
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit)
|
if (SUYU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS)
|
||||||
|
set(SPIRV_TOOLS_LIBRARY SPIRV-Tools-opt)
|
||||||
|
else()
|
||||||
|
set(SPIRV_TOOLS_LIBRARY SPIRV-Tools-opt SPIRV-Tools SPIRV-Tools-link)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit ${SPIRV_TOOLS_LIBRARY})
|
||||||
|
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
target_compile_options(shader_recompiler PRIVATE
|
target_compile_options(shader_recompiler PRIVATE
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 suyu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <span>
|
#include <span>
|
||||||
|
@ -6,6 +8,7 @@
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <spirv-tools/optimizer.hpp>
|
||||||
|
|
||||||
#include "common/settings.h"
|
#include "common/settings.h"
|
||||||
#include "shader_recompiler/backend/spirv/emit_spirv.h"
|
#include "shader_recompiler/backend/spirv/emit_spirv.h"
|
||||||
|
@ -481,7 +484,7 @@ void PatchPhiNodes(IR::Program& program, EmitContext& ctx) {
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
std::vector<u32> EmitSPIRV(const Profile& profile, const RuntimeInfo& runtime_info,
|
std::vector<u32> EmitSPIRV(const Profile& profile, const RuntimeInfo& runtime_info,
|
||||||
IR::Program& program, Bindings& bindings) {
|
IR::Program& program, Bindings& bindings, bool optimize) {
|
||||||
EmitContext ctx{profile, runtime_info, program, bindings};
|
EmitContext ctx{profile, runtime_info, program, bindings};
|
||||||
const Id main{DefineMain(ctx, program)};
|
const Id main{DefineMain(ctx, program)};
|
||||||
DefineEntryPoint(program, ctx, main);
|
DefineEntryPoint(program, ctx, main);
|
||||||
|
@ -493,7 +496,28 @@ std::vector<u32> EmitSPIRV(const Profile& profile, const RuntimeInfo& runtime_in
|
||||||
SetupCapabilities(profile, program.info, ctx);
|
SetupCapabilities(profile, program.info, ctx);
|
||||||
SetupTransformFeedbackCapabilities(ctx, main);
|
SetupTransformFeedbackCapabilities(ctx, main);
|
||||||
PatchPhiNodes(program, ctx);
|
PatchPhiNodes(program, ctx);
|
||||||
return ctx.Assemble();
|
|
||||||
|
if (!optimize) {
|
||||||
|
return ctx.Assemble();
|
||||||
|
} else {
|
||||||
|
std::vector<u32> spirv = ctx.Assemble();
|
||||||
|
|
||||||
|
spvtools::Optimizer spv_opt(SPV_ENV_VULKAN_1_3);
|
||||||
|
spv_opt.SetMessageConsumer([](spv_message_level_t, const char*, const spv_position_t&,
|
||||||
|
const char* m) { LOG_ERROR(HW_GPU, "spirv-opt: {}", m); });
|
||||||
|
spv_opt.RegisterPerformancePasses();
|
||||||
|
|
||||||
|
spvtools::OptimizerOptions opt_options;
|
||||||
|
opt_options.set_run_validator(false);
|
||||||
|
|
||||||
|
std::vector<u32> result;
|
||||||
|
if (!spv_opt.Run(spirv.data(), spirv.size(), &result, opt_options)) {
|
||||||
|
LOG_ERROR(HW_GPU,
|
||||||
|
"Failed to optimize SPIRV shader output, continuing without optimization");
|
||||||
|
result = std::move(spirv);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Id EmitPhi(EmitContext& ctx, IR::Inst* inst) {
|
Id EmitPhi(EmitContext& ctx, IR::Inst* inst) {
|
||||||
|
@ -556,4 +580,4 @@ void EmitGetInBoundsFromOp(EmitContext&) {
|
||||||
throw LogicError("Unreachable instruction");
|
throw LogicError("Unreachable instruction");
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Shader::Backend::SPIRV
|
} // namespace Shader::Backend::SPIRV
|
|
@ -1,4 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 suyu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
@ -31,11 +33,12 @@ constexpr u32 RESCALING_LAYOUT_DOWN_FACTOR_OFFSET = offsetof(RescalingLayout, do
|
||||||
constexpr u32 RENDERAREA_LAYOUT_OFFSET = offsetof(RenderAreaLayout, render_area);
|
constexpr u32 RENDERAREA_LAYOUT_OFFSET = offsetof(RenderAreaLayout, render_area);
|
||||||
|
|
||||||
[[nodiscard]] std::vector<u32> EmitSPIRV(const Profile& profile, const RuntimeInfo& runtime_info,
|
[[nodiscard]] std::vector<u32> EmitSPIRV(const Profile& profile, const RuntimeInfo& runtime_info,
|
||||||
IR::Program& program, Bindings& bindings);
|
IR::Program& program, Bindings& bindingss, bool optimize);
|
||||||
|
|
||||||
[[nodiscard]] inline std::vector<u32> EmitSPIRV(const Profile& profile, IR::Program& program) {
|
[[nodiscard]] inline std::vector<u32> EmitSPIRV(const Profile& profile, IR::Program& program,
|
||||||
|
bool optimize) {
|
||||||
Bindings binding;
|
Bindings binding;
|
||||||
return EmitSPIRV(profile, {}, program, binding);
|
return EmitSPIRV(profile, {}, program, binding, optimize);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Shader::Backend::SPIRV
|
} // namespace Shader::Backend::SPIRV
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 suyu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include "suyu/configuration/shared_translation.h"
|
#include "suyu/configuration/shared_translation.h"
|
||||||
|
@ -143,6 +145,10 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent) {
|
||||||
tr("Allows saving shaders to storage for faster loading on following game "
|
tr("Allows saving shaders to storage for faster loading on following game "
|
||||||
"boots.\nDisabling "
|
"boots.\nDisabling "
|
||||||
"it is only intended for debugging."));
|
"it is only intended for debugging."));
|
||||||
|
INSERT(Settings, optimize_spirv_output, tr("Optimize SPIRV output shader"),
|
||||||
|
tr("Runs an additional optimization pass over generated SPIRV shaders.\n"
|
||||||
|
"Will increase time required for shader compilation.\nMay slightly improve "
|
||||||
|
"performance.\nThis feature is experimental."));
|
||||||
INSERT(
|
INSERT(
|
||||||
Settings, use_asynchronous_gpu_emulation, tr("Use asynchronous GPU emulation"),
|
Settings, use_asynchronous_gpu_emulation, tr("Use asynchronous GPU emulation"),
|
||||||
tr("Uses an extra CPU thread for rendering.\nThis option should always remain enabled."));
|
tr("Uses an extra CPU thread for rendering.\nThis option should always remain enabled."));
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 suyu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
@ -537,7 +539,9 @@ std::unique_ptr<GraphicsPipeline> ShaderCache::CreateGraphicsPipeline(
|
||||||
break;
|
break;
|
||||||
case Settings::ShaderBackend::SpirV:
|
case Settings::ShaderBackend::SpirV:
|
||||||
ConvertLegacyToGeneric(program, runtime_info);
|
ConvertLegacyToGeneric(program, runtime_info);
|
||||||
sources_spirv[stage_index] = EmitSPIRV(profile, runtime_info, program, binding);
|
sources_spirv[stage_index] =
|
||||||
|
EmitSPIRV(profile, runtime_info, program, binding,
|
||||||
|
Settings::values.optimize_spirv_output.GetValue());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
previous_program = &program;
|
previous_program = &program;
|
||||||
|
@ -596,7 +600,7 @@ std::unique_ptr<ComputePipeline> ShaderCache::CreateComputePipeline(
|
||||||
code = EmitGLASM(profile, info, program);
|
code = EmitGLASM(profile, info, program);
|
||||||
break;
|
break;
|
||||||
case Settings::ShaderBackend::SpirV:
|
case Settings::ShaderBackend::SpirV:
|
||||||
code_spirv = EmitSPIRV(profile, program);
|
code_spirv = EmitSPIRV(profile, program, Settings::values.optimize_spirv_output.GetValue());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 suyu Emulator Project
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 Torzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
@ -673,7 +675,8 @@ std::unique_ptr<GraphicsPipeline> PipelineCache::CreateGraphicsPipeline(
|
||||||
|
|
||||||
const auto runtime_info{MakeRuntimeInfo(programs, key, program, previous_stage)};
|
const auto runtime_info{MakeRuntimeInfo(programs, key, program, previous_stage)};
|
||||||
ConvertLegacyToGeneric(program, runtime_info);
|
ConvertLegacyToGeneric(program, runtime_info);
|
||||||
const std::vector<u32> code{EmitSPIRV(profile, runtime_info, program, binding)};
|
const std::vector<u32> code{EmitSPIRV(profile, runtime_info, program, binding,
|
||||||
|
Settings::values.optimize_spirv_output.GetValue())};
|
||||||
device.SaveShader(code);
|
device.SaveShader(code);
|
||||||
modules[stage_index] = BuildShader(device, code);
|
modules[stage_index] = BuildShader(device, code);
|
||||||
if (device.HasDebuggingToolAttached()) {
|
if (device.HasDebuggingToolAttached()) {
|
||||||
|
@ -767,7 +770,8 @@ std::unique_ptr<ComputePipeline> PipelineCache::CreateComputePipeline(
|
||||||
}
|
}
|
||||||
|
|
||||||
auto program{TranslateProgram(pools.inst, pools.block, env, cfg, host_info)};
|
auto program{TranslateProgram(pools.inst, pools.block, env, cfg, host_info)};
|
||||||
const std::vector<u32> code{EmitSPIRV(profile, program)};
|
const std::vector<u32> code{
|
||||||
|
EmitSPIRV(profile, program, Settings::values.optimize_spirv_output.GetValue())};
|
||||||
device.SaveShader(code);
|
device.SaveShader(code);
|
||||||
vk::ShaderModule spv_module{BuildShader(device, code)};
|
vk::ShaderModule spv_module{BuildShader(device, code)};
|
||||||
if (device.HasDebuggingToolAttached()) {
|
if (device.HasDebuggingToolAttached()) {
|
||||||
|
|
Loading…
Reference in a new issue