summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/TextureConversionShader.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2018-05-03 14:09:32 +1000
committerStenzek <stenzek@gmail.com>2018-05-03 14:09:32 +1000
commit4faac3a6270c288dad57a59ee0f821512846ebfb (patch)
treee2ba0b26d90ce97abaf13d7e83192be4c25e4f67 /Source/Core/VideoCommon/TextureConversionShader.cpp
parentef98a2173516c6e3b67362877b7890ae19c978a6 (diff)
TextureConversionShader: Don't sample from adjacent rows when not needed
Diffstat (limited to 'Source/Core/VideoCommon/TextureConversionShader.cpp')
-rw-r--r--Source/Core/VideoCommon/TextureConversionShader.cpp34
1 files changed, 23 insertions, 11 deletions
diff --git a/Source/Core/VideoCommon/TextureConversionShader.cpp b/Source/Core/VideoCommon/TextureConversionShader.cpp
index 2339558df1..a36f643693 100644
--- a/Source/Core/VideoCommon/TextureConversionShader.cpp
+++ b/Source/Core/VideoCommon/TextureConversionShader.cpp
@@ -180,21 +180,33 @@ static void WriteSampleFunction(char*& p, const EFBCopyParams& params, APIType A
// The filter is only applied to the RGB channels, the alpha channel is left intact.
WRITE(p, "float4 SampleEFB(float2 uv, float2 pixel_size, int xoffset)\n");
WRITE(p, "{\n");
- WRITE(p, " float4 prev_row = ");
- WriteSampleOp(-1);
- WRITE(p, ";\n");
- WRITE(p, " float4 current_row = ");
- WriteSampleOp(0);
- WRITE(p, ";\n");
- WRITE(p, " float4 next_row = ");
- WriteSampleOp(1);
- WRITE(p, ";\n");
- WRITE(p,
+ if (params.copy_filter)
+ {
+ WRITE(p, " float4 prev_row = ");
+ WriteSampleOp(-1);
+ WRITE(p, ";\n");
+ WRITE(p, " float4 current_row = ");
+ WriteSampleOp(0);
+ WRITE(p, ";\n");
+ WRITE(p, " float4 next_row = ");
+ WriteSampleOp(1);
+ WRITE(p, ";\n");
+ WRITE(
+ p,
" float3 col = float3(clamp((int3(prev_row.rgb * 255.0) * filter_coefficients[0] +\n"
" int3(current_row.rgb * 255.0) * filter_coefficients[1] +\n"
" int3(next_row.rgb * 255.0) * filter_coefficients[2]) >> 6,\n"
" int3(0, 0, 0), int3(255, 255, 255))) / 255.0;\n");
- WRITE(p, " return float4(col, current_row.a);\n");
+ WRITE(p, " return float4(col, current_row.a);\n");
+ }
+ else
+ {
+ WRITE(p, " float4 current_row = ");
+ WriteSampleOp(0);
+ WRITE(p, ";\n");
+ WRITE(p, " return float4(clamp(int3(current_row.rgb * 255.0) * filter_coefficients[1], "
+ "int3(0, 0, 0), int3(255, 255, 255)), current_row.a);\n");
+ }
WRITE(p, "}\n");
}