video_core: Integrate SMAA
Co-authored-by: goldenx86 <goldenx86@users.noreply.github.com> Co-authored-by: BreadFish64 <breadfish64@users.noreply.github.com>
This commit is contained in:
parent
41461514d6
commit
5b837157bd
24 changed files with 13894 additions and 28 deletions
|
@ -26,9 +26,16 @@ set(SHADER_FILES
|
|||
opengl_present.frag
|
||||
opengl_present.vert
|
||||
opengl_present_scaleforce.frag
|
||||
opengl_smaa.glsl
|
||||
pitch_unswizzle.comp
|
||||
present_bicubic.frag
|
||||
present_gaussian.frag
|
||||
smaa_edge_detection.vert
|
||||
smaa_edge_detection.frag
|
||||
smaa_blending_weight_calculation.vert
|
||||
smaa_blending_weight_calculation.frag
|
||||
smaa_neighborhood_blending.vert
|
||||
smaa_neighborhood_blending.frag
|
||||
vulkan_blit_color_float.frag
|
||||
vulkan_blit_depth_stencil.frag
|
||||
vulkan_fidelityfx_fsr_easu_fp16.comp
|
||||
|
|
|
@ -11,10 +11,6 @@ string(TOUPPER ${CONTENTS_NAME} CONTENTS_NAME)
|
|||
|
||||
FILE(READ ${SOURCE_FILE} line_contents)
|
||||
|
||||
# Replace double quotes with single quotes,
|
||||
# as double quotes will be used to wrap the lines
|
||||
STRING(REGEX REPLACE "\"" "'" line_contents "${line_contents}")
|
||||
|
||||
# CMake separates list elements with semicolons, but semicolons
|
||||
# are used extensively in the shader code.
|
||||
# Replace with a temporary marker, to be reverted later.
|
||||
|
@ -25,7 +21,7 @@ STRING(REGEX REPLACE "\n" ";" line_contents "${line_contents}")
|
|||
|
||||
# Build the shader string, wrapping each line in double quotes.
|
||||
foreach(line IN LISTS line_contents)
|
||||
string(CONCAT CONTENTS "${CONTENTS}" \"${line}\\n\"\n)
|
||||
string(CONCAT CONTENTS "${CONTENTS}" "R\"(${line}\n)\" ")
|
||||
endforeach()
|
||||
|
||||
# Revert the original semicolons in the source.
|
||||
|
|
1339
src/video_core/host_shaders/opengl_smaa.glsl
Normal file
1339
src/video_core/host_shaders/opengl_smaa.glsl
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,36 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#version 460
|
||||
|
||||
#extension GL_GOOGLE_include_directive : enable
|
||||
|
||||
layout (binding = 0) uniform sampler2D edges_tex;
|
||||
layout (binding = 1) uniform sampler2D area_tex;
|
||||
layout (binding = 2) uniform sampler2D search_tex;
|
||||
|
||||
layout (location = 0) in vec2 tex_coord;
|
||||
layout (location = 1) in vec2 pix_coord;
|
||||
layout (location = 2) in vec4 offset[3];
|
||||
|
||||
layout (location = 0) out vec4 frag_color;
|
||||
|
||||
vec4 metrics = vec4(1.0 / textureSize(edges_tex, 0), textureSize(edges_tex, 0));
|
||||
#define SMAA_RT_METRICS metrics
|
||||
#define SMAA_GLSL_4
|
||||
#define SMAA_PRESET_ULTRA
|
||||
#define SMAA_INCLUDE_VS 0
|
||||
#define SMAA_INCLUDE_PS 1
|
||||
|
||||
#include "opengl_smaa.glsl"
|
||||
|
||||
void main() {
|
||||
frag_color = SMAABlendingWeightCalculationPS(tex_coord,
|
||||
pix_coord,
|
||||
offset,
|
||||
edges_tex,
|
||||
area_tex,
|
||||
search_tex,
|
||||
vec4(0)
|
||||
);
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#version 460
|
||||
|
||||
#extension GL_GOOGLE_include_directive : enable
|
||||
|
||||
#ifdef VULKAN
|
||||
#define VERTEX_ID gl_VertexIndex
|
||||
#else // ^^^ Vulkan ^^^ // vvv OpenGL vvv
|
||||
#define VERTEX_ID gl_VertexID
|
||||
#endif
|
||||
|
||||
out gl_PerVertex {
|
||||
vec4 gl_Position;
|
||||
};
|
||||
|
||||
const vec2 vertices[3] =
|
||||
vec2[3](vec2(-1,-1), vec2(3,-1), vec2(-1, 3));
|
||||
|
||||
layout (binding = 0) uniform sampler2D edges_tex;
|
||||
layout (binding = 1) uniform sampler2D area_tex;
|
||||
layout (binding = 2) uniform sampler2D search_tex;
|
||||
|
||||
layout (location = 0) out vec2 tex_coord;
|
||||
layout (location = 1) out vec2 pix_coord;
|
||||
layout (location = 2) out vec4 offset[3];
|
||||
|
||||
vec4 metrics = vec4(1.0 / textureSize(edges_tex, 0), textureSize(edges_tex, 0));
|
||||
#define SMAA_RT_METRICS metrics
|
||||
#define SMAA_GLSL_4
|
||||
#define SMAA_PRESET_ULTRA
|
||||
#define SMAA_INCLUDE_VS 1
|
||||
#define SMAA_INCLUDE_PS 0
|
||||
|
||||
#include "opengl_smaa.glsl"
|
||||
|
||||
void main() {
|
||||
vec2 vertex = vertices[VERTEX_ID];
|
||||
gl_Position = vec4(vertex, 0.0, 1.0);
|
||||
tex_coord = (vertex + 1.0) / 2.0;
|
||||
SMAABlendingWeightCalculationVS(tex_coord, pix_coord, offset);
|
||||
}
|
26
src/video_core/host_shaders/smaa_edge_detection.frag
Normal file
26
src/video_core/host_shaders/smaa_edge_detection.frag
Normal file
|
@ -0,0 +1,26 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#version 460
|
||||
|
||||
#extension GL_GOOGLE_include_directive : enable
|
||||
|
||||
layout (binding = 0) uniform sampler2D input_tex;
|
||||
|
||||
layout (location = 0) in vec2 tex_coord;
|
||||
layout (location = 1) in vec4 offset[3];
|
||||
|
||||
layout (location = 0) out vec2 frag_color;
|
||||
|
||||
vec4 metrics = vec4(1.0 / textureSize(input_tex, 0), textureSize(input_tex, 0));
|
||||
#define SMAA_RT_METRICS metrics
|
||||
#define SMAA_GLSL_4
|
||||
#define SMAA_PRESET_ULTRA
|
||||
#define SMAA_INCLUDE_VS 0
|
||||
#define SMAA_INCLUDE_PS 1
|
||||
|
||||
#include "opengl_smaa.glsl"
|
||||
|
||||
void main() {
|
||||
frag_color = SMAAColorEdgeDetectionPS(tex_coord, offset, input_tex);
|
||||
}
|
40
src/video_core/host_shaders/smaa_edge_detection.vert
Normal file
40
src/video_core/host_shaders/smaa_edge_detection.vert
Normal file
|
@ -0,0 +1,40 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#version 460
|
||||
|
||||
#extension GL_GOOGLE_include_directive : enable
|
||||
|
||||
#ifdef VULKAN
|
||||
#define VERTEX_ID gl_VertexIndex
|
||||
#else // ^^^ Vulkan ^^^ // vvv OpenGL vvv
|
||||
#define VERTEX_ID gl_VertexID
|
||||
#endif
|
||||
|
||||
out gl_PerVertex {
|
||||
vec4 gl_Position;
|
||||
};
|
||||
|
||||
const vec2 vertices[3] =
|
||||
vec2[3](vec2(-1,-1), vec2(3,-1), vec2(-1, 3));
|
||||
|
||||
layout (binding = 0) uniform sampler2D input_tex;
|
||||
|
||||
layout (location = 0) out vec2 tex_coord;
|
||||
layout (location = 1) out vec4 offset[3];
|
||||
|
||||
vec4 metrics = vec4(1.0 / textureSize(input_tex, 0), textureSize(input_tex, 0));
|
||||
#define SMAA_RT_METRICS metrics
|
||||
#define SMAA_GLSL_4
|
||||
#define SMAA_PRESET_ULTRA
|
||||
#define SMAA_INCLUDE_VS 1
|
||||
#define SMAA_INCLUDE_PS 0
|
||||
|
||||
#include "opengl_smaa.glsl"
|
||||
|
||||
void main() {
|
||||
vec2 vertex = vertices[VERTEX_ID];
|
||||
gl_Position = vec4(vertex, 0.0, 1.0);
|
||||
tex_coord = (vertex + 1.0) / 2.0;
|
||||
SMAAEdgeDetectionVS(tex_coord, offset);
|
||||
}
|
31
src/video_core/host_shaders/smaa_neighborhood_blending.frag
Normal file
31
src/video_core/host_shaders/smaa_neighborhood_blending.frag
Normal file
|
@ -0,0 +1,31 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#version 460
|
||||
|
||||
#extension GL_GOOGLE_include_directive : enable
|
||||
|
||||
layout (binding = 0) uniform sampler2D input_tex;
|
||||
layout (binding = 1) uniform sampler2D blend_tex;
|
||||
|
||||
layout (location = 0) in vec2 tex_coord;
|
||||
layout (location = 1) in vec4 offset;
|
||||
|
||||
layout (location = 0) out vec4 frag_color;
|
||||
|
||||
vec4 metrics = vec4(1.0 / textureSize(input_tex, 0), textureSize(input_tex, 0));
|
||||
#define SMAA_RT_METRICS metrics
|
||||
#define SMAA_GLSL_4
|
||||
#define SMAA_PRESET_ULTRA
|
||||
#define SMAA_INCLUDE_VS 0
|
||||
#define SMAA_INCLUDE_PS 1
|
||||
|
||||
#include "opengl_smaa.glsl"
|
||||
|
||||
void main() {
|
||||
frag_color = SMAANeighborhoodBlendingPS(tex_coord,
|
||||
offset,
|
||||
input_tex,
|
||||
blend_tex
|
||||
);
|
||||
}
|
41
src/video_core/host_shaders/smaa_neighborhood_blending.vert
Normal file
41
src/video_core/host_shaders/smaa_neighborhood_blending.vert
Normal file
|
@ -0,0 +1,41 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#version 460
|
||||
|
||||
#extension GL_GOOGLE_include_directive : enable
|
||||
|
||||
#ifdef VULKAN
|
||||
#define VERTEX_ID gl_VertexIndex
|
||||
#else // ^^^ Vulkan ^^^ // vvv OpenGL vvv
|
||||
#define VERTEX_ID gl_VertexID
|
||||
#endif
|
||||
|
||||
out gl_PerVertex {
|
||||
vec4 gl_Position;
|
||||
};
|
||||
|
||||
const vec2 vertices[3] =
|
||||
vec2[3](vec2(-1,-1), vec2(3,-1), vec2(-1, 3));
|
||||
|
||||
layout (binding = 0) uniform sampler2D input_tex;
|
||||
layout (binding = 1) uniform sampler2D blend_tex;
|
||||
|
||||
layout (location = 0) out vec2 tex_coord;
|
||||
layout (location = 1) out vec4 offset;
|
||||
|
||||
vec4 metrics = vec4(1.0 / textureSize(input_tex, 0), textureSize(input_tex, 0));
|
||||
#define SMAA_RT_METRICS metrics
|
||||
#define SMAA_GLSL_4
|
||||
#define SMAA_PRESET_ULTRA
|
||||
#define SMAA_INCLUDE_VS 1
|
||||
#define SMAA_INCLUDE_PS 0
|
||||
|
||||
#include "opengl_smaa.glsl"
|
||||
|
||||
void main() {
|
||||
vec2 vertex = vertices[VERTEX_ID];
|
||||
gl_Position = vec4(vertex, 0.0, 1.0);
|
||||
tex_coord = (vertex + 1.0) / 2.0;
|
||||
SMAANeighborhoodBlendingVS(tex_coord, offset);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue