From e7b2a22225b7d11f38dd045c990370df1daac61e Mon Sep 17 00:00:00 2001 From: Scott Mansell Date: Sun, 18 Oct 2015 00:43:22 +1300 Subject: Support Conservative Depth as a fallback for EarlyZ Allows Mesa based drivers to support ZCompLoc --- Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp') 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)" -- cgit v1.2.3