[Bf-blender-cvs] [aa5c543a7fe] blender2.8: Eevee: Fix downsampling shader with textureGather

Clément Foucault noreply at git.blender.org
Tue Sep 11 16:15:47 CEST 2018


Commit: aa5c543a7fe1fa1be95b6a09421a20617928d3b1
Author: Clément Foucault
Date:   Tue Sep 11 16:14:29 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBaa5c543a7fe1fa1be95b6a09421a20617928d3b1

Eevee: Fix downsampling shader with textureGather

This was leading to issues with all raytracing and AO algorithm.

Fix T55619

===================================================================

M	source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl

===================================================================

diff --git a/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl
index f834b698ef9..e9f05cfe0ff 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_minmaxz_frag.glsl
@@ -49,7 +49,8 @@ void main()
 #else
 	vec4 samp;
 #  ifdef GPU_ARB_texture_gather
-	samp = gatherLowerMip(vec2(texelPos) / vec2(mipsize));
+	/* + 1.0 to gather at the center of target 4 texels. */
+	samp = gatherLowerMip((vec2(texelPos) + 1.0) / vec2(mipsize));
 #  else
 	samp.x = sampleLowerMip(texelPos);
 	samp.y = sampleLowerMip(texelPos + ivec2(1, 0));
@@ -67,7 +68,7 @@ void main()
 			val = minmax2(val, samp.x);
 		}
 #  ifdef GPU_ARB_texture_gather
-		samp = gatherLowerMip((vec2(texelPos) + vec2(1.0, 0.0)) / vec2(mipsize));
+		samp = gatherLowerMip((vec2(texelPos) + vec2(2.0, 1.0)) / vec2(mipsize));
 #  else
 		samp.y = sampleLowerMip(texelPos + ivec2(2, 0));
 		samp.z = sampleLowerMip(texelPos + ivec2(2, 1));
@@ -77,7 +78,7 @@ void main()
 	/* if we are reducing an odd-height texture then fetch the edge texels */
 	if (((mipsize.y & 1) != 0) && (texelPos.y == mipsize.y - 3)) {
 #  ifdef GPU_ARB_texture_gather
-		samp = gatherLowerMip((vec2(texelPos) + vec2(0.0, 1.0)) / vec2(mipsize));
+		samp = gatherLowerMip((vec2(texelPos) + vec2(1.0, 2.0)) / vec2(mipsize));
 #  else
 		samp.x = sampleLowerMip(texelPos + ivec2(0, 2));
 		samp.y = sampleLowerMip(texelPos + ivec2(1, 2));



More information about the Bf-blender-cvs mailing list