summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
diff options
context:
space:
mode:
authorScott Mansell <phiren@gmail.com>2015-10-18 02:14:52 +1300
committerScott Mansell <phiren@gmail.com>2015-10-18 02:14:52 +1300
commit8b1138943d014bee7e11f0658010ac7e96c4b59d (patch)
tree10518776e68995f05dce4e12609fc05d8a61db5b /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
parent34d46d69109b6fc83986d0f1e1337da7887455df (diff)
parente7b2a22225b7d11f38dd045c990370df1daac61e (diff)
Merge pull request #3179 from phire/mesa-early-z
Support Conservative Depth as a fallback for Early Z (Mesa support for ZCompLoc)
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
index 60a5b4bc99..67f96e2380 100644
--- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
+++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
@@ -554,6 +554,22 @@ void ProgramShaderCache::CreateHeader()
break;
}
+ const char* earlyz_string = "";
+ if (!is_glsles && g_ActiveConfig.backend_info.bSupportsEarlyZ)
+ {
+ if (g_ogl_config.bSupportsEarlyFragmentTests)
+ {
+ earlyz_string = "#extension GL_ARB_shader_image_load_store : enable\n"
+ "#define FORCE_EARLY_Z layout(early_fragment_tests) in\n";
+ }
+ else if(g_ogl_config.bSupportsConservativeDepth)
+ {
+ // See PixelShaderGen for details about this fallback.
+ earlyz_string = "#extension GL_ARB_conservative_depth : enable\n"
+ "#define FORCE_EARLY_Z layout(depth_unchanged) out float gl_FragDepth\n";
+ }
+ }
+
snprintf(s_glsl_header, sizeof(s_glsl_header),
"%s\n"
"%s\n" // ubo
@@ -594,7 +610,7 @@ void ProgramShaderCache::CreateHeader()
, GetGLSLVersionString().c_str()
, v < GLSL_140 ? "#extension GL_ARB_uniform_buffer_object : enable" : ""
- , !is_glsles && g_ActiveConfig.backend_info.bSupportsEarlyZ ? "#extension GL_ARB_shader_image_load_store : enable" : ""
+ , earlyz_string
, (g_ActiveConfig.backend_info.bSupportsBindingLayout && v < GLSLES_310) ? "#extension GL_ARB_shading_language_420pack : enable" : ""
, (g_ogl_config.bSupportsMSAA && v < GLSL_150) ? "#extension GL_ARB_texture_multisample : enable" : ""
, g_ActiveConfig.backend_info.bSupportsBindingLayout ? "#define SAMPLER_BINDING(x) layout(binding = x)" : "#define SAMPLER_BINDING(x)"