From d99cba73085e5caf90c5e55892e95630ce2983b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 10 Nov 2020 22:01:28 +0100 Subject: [PATCH] Outrun on OpenGL: Fix weird purple highlight seen on some devices mediump int is just not enough. --- Common/GPU/ShaderWriter.cpp | 7 +++++++ Common/GPU/ShaderWriter.h | 3 +++ GPU/Common/ReinterpretFramebuffer.cpp | 2 ++ 3 files changed, 12 insertions(+) diff --git a/Common/GPU/ShaderWriter.cpp b/Common/GPU/ShaderWriter.cpp index 8494a905b5..2a90995b66 100644 --- a/Common/GPU/ShaderWriter.cpp +++ b/Common/GPU/ShaderWriter.cpp @@ -264,6 +264,13 @@ void ShaderWriter::EndFSMain(const char *vec4_color_variable) { C("}\n"); } +void ShaderWriter::HighPrecisionInt() { + if (ShaderLanguageIsOpenGL(lang_.shaderLanguage) && lang_.gles) { + C("precision highp int;\n"); + C("precision highp uint;\n"); + } +} + void ShaderWriter::DeclareTexture2D(const char *name, int binding) { switch (lang_.shaderLanguage) { case HLSL_D3D11: diff --git a/Common/GPU/ShaderWriter.h b/Common/GPU/ShaderWriter.h index cbb2b34aea..15436cc737 100644 --- a/Common/GPU/ShaderWriter.h +++ b/Common/GPU/ShaderWriter.h @@ -63,6 +63,9 @@ public: // F: Formats into the buffer. ShaderWriter &F(const char *format, ...); + // Useful for fragment shaders in GLES. + void HighPrecisionInt(); + // Several of the shader languages ignore samplers, beware of that. void DeclareSampler2D(const char *name, int binding); void DeclareTexture2D(const char *name, int binding); diff --git a/GPU/Common/ReinterpretFramebuffer.cpp b/GPU/Common/ReinterpretFramebuffer.cpp index 8c824a9b44..1352ac3b73 100644 --- a/GPU/Common/ReinterpretFramebuffer.cpp +++ b/GPU/Common/ReinterpretFramebuffer.cpp @@ -18,6 +18,8 @@ bool GenerateReinterpretFragmentShader(char *buffer, GEBufferFormat from, GEBuff ShaderWriter writer(buffer, lang, ShaderStage::Fragment, nullptr, 0); + writer.HighPrecisionInt(); + writer.DeclareSampler2D("samp", 0); writer.DeclareTexture2D("tex", 0);