diff options
| author | Stenzek <stenzek@gmail.com> | 2017-12-06 03:08:35 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2017-12-06 03:33:50 +1000 |
| commit | d0601c0a8372780ae3412d25bf81561d23e89ac1 (patch) | |
| tree | 49a457a6d93769a0efe384bcd17befec29966376 /Source/Core/VideoCommon/TextureConversionShader.cpp | |
| parent | e0ffce27854e179025f98542ba2d4843f1e2161c (diff) | |
TextureConversionShader: Use round() instead of roundEven() in HLSL
HLSL does not define roundEven(), only round(). This means that the
output may differ slightly for OpenGL vs Direct3D. However, it ensures
consistency across OpenGL drivers, as round() in GLSL can go either way.
Diffstat (limited to 'Source/Core/VideoCommon/TextureConversionShader.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/TextureConversionShader.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/TextureConversionShader.cpp b/Source/Core/VideoCommon/TextureConversionShader.cpp index 044e3a4868..9535ccc88b 100644 --- a/Source/Core/VideoCommon/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/TextureConversionShader.cpp @@ -72,6 +72,12 @@ static void WriteSwizzler(char*& p, EFBCopyFormat format, APIType ApiType) WRITE(p, "uniform float y_scale;\n"); } + // D3D does not have roundEven(), only round(), which is specified "to the nearest integer". + // This differs from the roundEven() behavior, but to get consistency across drivers in OpenGL + // we need to use roundEven(). + if (ApiType == APIType::D3D) + WRITE(p, "#define roundEven(x) round(x)\n"); + // Alpha channel in the copy is set to 1 the EFB format does not have an alpha channel. WRITE(p, "float4 RGBA8ToRGB8(float4 src)\n"); WRITE(p, "{\n"); |
