On Friday, August 26, 2016 10:49:18 PM PDT Kenneth Graunke wrote:
> This fixes a numerical precision issue that was causing two CTS
> failures:
> 
> ES31-CTS.blend_equation_advanced.blend_specific.GL_COLORBURN_KHR
> ES31-CTS.blend_equation_advanced.blend_all.GL_COLORBURN_KHR_all_qualifier
> 
> When blending with GL_COLORDODGE_KHR and these colors:

This should be GL_COLORBURN_KHR and the subject should be
blend_colorburn.  Fixed locally.

> 
>    dst = <0.372549027, 0.372549027, 0.372549027, 0.372549027>
>    src = <0.09375, 0.046875, 0.0, 0.375>
> 
> the normalized dst value became 0.99999994 (due to imprecisions in the
> alpha scaling, presumably), which failed the dst >= 1.0 comparison.
> The blue channel would then fall through to the dst < 1.0 && src >= 0
> comparison, which was true, since src.b == 0.  This produced a factor
> of 0.0 instead of 1.0.
> 
> To work around this, compare with 1.0 - FLT_EPSILON.
> 
> Signed-off-by: Kenneth Graunke <kenn...@whitecape.org>
> ---
>  src/compiler/glsl/lower_blend_equation_advanced.cpp | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/src/compiler/glsl/lower_blend_equation_advanced.cpp 
> b/src/compiler/glsl/lower_blend_equation_advanced.cpp
> index a998df1..f8b0261 100644
> --- a/src/compiler/glsl/lower_blend_equation_advanced.cpp
> +++ b/src/compiler/glsl/lower_blend_equation_advanced.cpp
> @@ -28,6 +28,7 @@
>  #include "program/prog_instruction.h"
>  #include "program/prog_statevars.h"
>  #include "util/bitscan.h"
> +#include <float.h>
>  
>  using namespace ir_builder;
>  
> @@ -101,7 +102,7 @@ blend_colorburn(ir_variable *src, ir_variable *dst)
>      *   1 - min(1,(1-Cd)/Cs), if Cd < 1 and Cs > 0
>      *   0, if Cd < 1 and Cs <= 0
>      */
> -   return csel(gequal(dst, imm3(1)), imm3(1),
> +   return csel(gequal(dst, imm3(1 - FLT_EPSILON)), imm3(1),
>                 csel(lequal(src, imm3(0)), imm3(0),
>                      sub(imm3(1), min2(imm3(1), div(sub(imm3(1), dst), 
> src)))));
>  }
> 

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to