summaryrefslogtreecommitdiffstats
path: root/src/video_core/host_shaders
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2022-12-20 01:29:58 +0100
committerLiam <byteslice@airmail.cc>2023-01-05 04:22:01 +0100
commit301e9bbc03821ef7943d84b24b32c8b732a39f6a (patch)
tree3afaf56153ba07f4a8ec083bac4b59d119ed2723 /src/video_core/host_shaders
parentMerge pull request #9501 from FernandoS27/yfc-rel-2 (diff)
downloadyuzu-301e9bbc03821ef7943d84b24b32c8b732a39f6a.tar
yuzu-301e9bbc03821ef7943d84b24b32c8b732a39f6a.tar.gz
yuzu-301e9bbc03821ef7943d84b24b32c8b732a39f6a.tar.bz2
yuzu-301e9bbc03821ef7943d84b24b32c8b732a39f6a.tar.lz
yuzu-301e9bbc03821ef7943d84b24b32c8b732a39f6a.tar.xz
yuzu-301e9bbc03821ef7943d84b24b32c8b732a39f6a.tar.zst
yuzu-301e9bbc03821ef7943d84b24b32c8b732a39f6a.zip
Diffstat (limited to 'src/video_core/host_shaders')
-rw-r--r--src/video_core/host_shaders/CMakeLists.txt1
-rw-r--r--src/video_core/host_shaders/vulkan_turbo_mode.comp29
2 files changed, 30 insertions, 0 deletions
diff --git a/src/video_core/host_shaders/CMakeLists.txt b/src/video_core/host_shaders/CMakeLists.txt
index e6dc24f22..f275b2aa9 100644
--- a/src/video_core/host_shaders/CMakeLists.txt
+++ b/src/video_core/host_shaders/CMakeLists.txt
@@ -47,6 +47,7 @@ set(SHADER_FILES
vulkan_present_scaleforce_fp16.frag
vulkan_present_scaleforce_fp32.frag
vulkan_quad_indexed.comp
+ vulkan_turbo_mode.comp
vulkan_uint8.comp
)
diff --git a/src/video_core/host_shaders/vulkan_turbo_mode.comp b/src/video_core/host_shaders/vulkan_turbo_mode.comp
new file mode 100644
index 000000000..d651001d9
--- /dev/null
+++ b/src/video_core/host_shaders/vulkan_turbo_mode.comp
@@ -0,0 +1,29 @@
+// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#version 460 core
+
+layout (local_size_x = 16, local_size_y = 8, local_size_z = 1) in;
+
+layout (binding = 0) buffer ThreadData {
+ uint data[];
+};
+
+uint xorshift32(uint x) {
+ x ^= x << 13;
+ x ^= x >> 17;
+ x ^= x << 5;
+ return x;
+}
+
+uint getGlobalIndex() {
+ return gl_GlobalInvocationID.x + gl_GlobalInvocationID.y * gl_WorkGroupSize.y * gl_NumWorkGroups.y;
+}
+
+void main() {
+ uint myIndex = xorshift32(getGlobalIndex());
+ uint otherIndex = xorshift32(myIndex);
+
+ uint otherValue = atomicAdd(data[otherIndex % data.length()], 0) + 1;
+ atomicAdd(data[myIndex % data.length()], otherValue);
+}