summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
diff options
context:
space:
mode:
authorPokechu22 <Pokechu022@gmail.com>2023-03-05 22:03:26 -0800
committerPokechu22 <Pokechu022@gmail.com>2023-04-08 15:32:27 -0700
commit8b0bd31e72beaacff3be2dbd9cb44208fc4b0442 (patch)
tree12a22dc312667a92c39890f23e37a1a38afdde35 /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
parent3f143d1bc979421afadcee9debe7988c887a1970 (diff)
OGL: Use GL_OES_texture_storage_multisample_2d_array when supported
See https://bugs.dolphin-emu.org/issues/13198
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
index f13ca7eb8e..a149c9fad0 100644
--- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
+++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
@@ -722,8 +722,12 @@ void ProgramShaderCache::CreateHeader()
break;
}
- // The sampler2DMSArray keyword is reserved in GLSL ES 3.0 and 3.1, but is available in 3.2.
- const bool use_multisample_2d_array_precision = v >= GlslEs320;
+ // The sampler2DMSArray keyword is reserved in GLSL ES 3.0 and 3.1, but is available in 3.2 and
+ // with GL_OES_texture_storage_multisample_2d_array for 3.1.
+ // See https://bugs.dolphin-emu.org/issues/13198.
+ const bool use_multisample_2d_array_precision =
+ v >= GlslEs320 ||
+ g_ogl_config.SupportedMultisampleTexStorage != MultisampleTexStorageType::TexStorageNone;
std::string shader_shuffle_string;
if (g_ogl_config.bSupportsKHRShaderSubgroup)
@@ -762,6 +766,7 @@ void ProgramShaderCache::CreateHeader()
"{}\n" // shader thread shuffle
"{}\n" // derivative control
"{}\n" // query levels
+ "{}\n" // OES multisample texture storage
// Precision defines for GLSL ES
"{}\n"
@@ -847,6 +852,12 @@ void ProgramShaderCache::CreateHeader()
g_ActiveConfig.backend_info.bSupportsTextureQueryLevels ?
"#extension GL_ARB_texture_query_levels : enable" :
"",
+ // Note: GL_ARB_texture_storage_multisample doesn't have an #extension, as it doesn't
+ // need to change GLSL, but on GLES 3.1 sampler2DMSArray is a reserved keyword unless
+ // the extension is enabled. Thus, we don't need to check TexStorageCore/have an ARB version.
+ g_ogl_config.SupportedMultisampleTexStorage == MultisampleTexStorageType::TexStorageOes ?
+ "#extension GL_OES_texture_storage_multisample_2d_array : enable" :
+ "",
is_glsles ? "precision highp float;" : "", is_glsles ? "precision highp int;" : "",
is_glsles ? "precision highp sampler2DArray;" : "",
(is_glsles && g_ActiveConfig.backend_info.bSupportsPaletteConversion) ?