Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl')
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl34
1 files changed, 19 insertions, 15 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl
index 899ada852f9..102a8ddca7b 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_effect_dof_frag.glsl
@@ -108,18 +108,22 @@ layout(location = 1) out vec2 outCocs;
void main()
{
- ivec4 texel = ivec4(gl_FragCoord.xyxy) * 2 + ivec4(0, 0, 1, 1);
+ vec4 texel = vec4(gl_FragCoord.xyxy) * 2.0 + vec4(0.0, 0.0, 1.0, 1.0);
+ texel = (texel - 0.5) / vec4(textureSize(sceneColorTex, 0).xyxy);
- vec4 color1 = texelFetch(sceneColorTex, texel.xy, 0);
- vec4 color2 = texelFetch(sceneColorTex, texel.zw, 0);
- vec4 color3 = texelFetch(sceneColorTex, texel.zy, 0);
- vec4 color4 = texelFetch(sceneColorTex, texel.xw, 0);
+ /* Using texelFetch can bypass the mip range setting on some platform.
+ * Using texture Lod fix this issue. Note that we need to disable filtering to get the right
+ * texel values. */
+ vec4 color1 = textureLod(sceneColorTex, texel.xy, 0.0);
+ vec4 color2 = textureLod(sceneColorTex, texel.zw, 0.0);
+ vec4 color3 = textureLod(sceneColorTex, texel.zy, 0.0);
+ vec4 color4 = textureLod(sceneColorTex, texel.xw, 0.0);
vec4 depths;
- vec2 cocs1 = texelFetch(inputCocTex, texel.xy, 0).rg;
- vec2 cocs2 = texelFetch(inputCocTex, texel.zw, 0).rg;
- vec2 cocs3 = texelFetch(inputCocTex, texel.zy, 0).rg;
- vec2 cocs4 = texelFetch(inputCocTex, texel.xw, 0).rg;
+ vec2 cocs1 = textureLod(inputCocTex, texel.xy, 0.0).rg;
+ vec2 cocs2 = textureLod(inputCocTex, texel.zw, 0.0).rg;
+ vec2 cocs3 = textureLod(inputCocTex, texel.zy, 0.0).rg;
+ vec2 cocs4 = textureLod(inputCocTex, texel.xw, 0.0).rg;
vec4 cocs_near = vec4(cocs1.r, cocs2.r, cocs3.r, cocs4.r) * MAX_COC_SIZE;
vec4 cocs_far = vec4(cocs1.g, cocs2.g, cocs3.g, cocs4.g) * MAX_COC_SIZE;
@@ -338,23 +342,23 @@ void main()
# define mnmx3(a, b, c) \
mx3(a, b, c); \
- s2(a, b); // 3 exchanges
+ s2(a, b); /* 3 exchanges */
# define mnmx4(a, b, c, d) \
s2(a, b); \
s2(c, d); \
s2(a, c); \
- s2(b, d); // 4 exchanges
+ s2(b, d); /* 4 exchanges */
# define mnmx5(a, b, c, d, e) \
s2(a, b); \
s2(c, d); \
mn3(a, c, e); \
- mx3(b, d, e); // 6 exchanges
+ mx3(b, d, e); /* 6 exchanges */
# define mnmx6(a, b, c, d, e, f) \
s2(a, d); \
s2(b, e); \
s2(c, f); \
mn3(a, b, c); \
- mx3(d, e, f); // 7 exchanges
+ mx3(d, e, f); /* 7 exchanges */
vec v[9];
@@ -386,8 +390,8 @@ void main()
*/
#ifdef RESOLVE
-layout(location = 0) out vec4 finalColorAdd;
-layout(location = 1) out vec4 finalColorMul;
+layout(location = 0, index = 0) out vec4 finalColorAdd;
+layout(location = 0, index = 1) out vec4 finalColorMul;
void main()
{