瀏覽代碼

host_shaders: Add shader to render a full screen triangle

ReinUsesLisp 5 年之前
父節點
當前提交
5169ce9fcd
共有 2 個文件被更改,包括 30 次插入0 次删除
  1. 1 0
      src/video_core/host_shaders/CMakeLists.txt
  2. 29 0
      src/video_core/host_shaders/full_screen_triangle.vert

+ 1 - 0
src/video_core/host_shaders/CMakeLists.txt

@@ -1,6 +1,7 @@
 set(SHADER_FILES
     block_linear_unswizzle_2d.comp
     block_linear_unswizzle_3d.comp
+    full_screen_triangle.vert
     opengl_present.frag
     opengl_present.vert
     pitch_unswizzle.comp

+ 29 - 0
src/video_core/host_shaders/full_screen_triangle.vert

@@ -0,0 +1,29 @@
+// Copyright 2020 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#version 450
+
+#ifdef VULKAN
+#define BEGIN_PUSH_CONSTANTS layout(push_constant) uniform PushConstants {
+#define END_PUSH_CONSTANTS };
+#define UNIFORM(n)
+#else // ^^^ Vulkan ^^^ // vvv OpenGL vvv
+#define BEGIN_PUSH_CONSTANTS
+#define END_PUSH_CONSTANTS
+#define UNIFORM(n) layout (location = n) uniform
+#endif
+
+BEGIN_PUSH_CONSTANTS
+UNIFORM(0) vec2 tex_scale;
+UNIFORM(1) vec2 tex_offset;
+END_PUSH_CONSTANTS
+
+layout(location = 0) out vec2 texcoord;
+
+void main() {
+    float x = float((gl_VertexIndex & 1) << 2);
+    float y = float((gl_VertexIndex & 2) << 1);
+    gl_Position = vec4(x - 1.0, y - 1.0, 0.0, 1.0);
+    texcoord = fma(vec2(x, y) / 2.0, tex_scale, tex_offset);
+}