diff options
| author | Scott Mansell <phiren@gmail.com> | 2015-10-18 00:43:22 +1300 |
|---|---|---|
| committer | Scott Mansell <phiren@gmail.com> | 2015-10-18 01:46:54 +1300 |
| commit | e7b2a22225b7d11f38dd045c990370df1daac61e (patch) | |
| tree | a6cacaaa04f238fb1b260b326e399418a68c058f /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | |
| parent | 4d3d947efc505fb91d9b4efe6ac137d4590cb655 (diff) | |
Support Conservative Depth as a fallback for EarlyZ
Allows Mesa based drivers to support ZCompLoc
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 18 |
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)" |
