Hi Ian, and thank you for your comments, Ian Romanick <i...@freedesktop.org> writes:
> On 01/24/2017 03:26 PM, Francisco Jerez wrote: >> Will avoid a regression in a future commit that introduces some >> additional rcp operations. > > When I converted GLSL IR to ir_expression_operation.py, I was careful to > keep all the expressions the same. rcp and div had these weird guards. > GLSL doesn't require that NaN be generated, and quite a few old GPUs > don't. If the atan2 implementation depends on NaN being generated by > rcp, it may have problems on i915, r300, and similar GPUs. I don't know > what they generate, but it's not NaN and it's probably not 0.0. > The atan2 implementation from patch 5 doesn't rely on NaNs being generated, but it does rely on the reciprocal operation handling zero and infinity correctly as specified by GLSL for the division operation. > That said, this matches NIR, and it's probably fine. > >> --- >> src/compiler/glsl/ir_expression_operation.py | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/src/compiler/glsl/ir_expression_operation.py >> b/src/compiler/glsl/ir_expression_operation.py >> index f91ac9b..4ac1ffb 100644 >> --- a/src/compiler/glsl/ir_expression_operation.py >> +++ b/src/compiler/glsl/ir_expression_operation.py >> @@ -422,7 +422,7 @@ ir_expression_operation = [ >> operation("neg", 1, source_types=numeric_types, c_expression={'u': >> "-((int) {src0})", 'default': "-{src0}"}), >> operation("abs", 1, source_types=signed_numeric_types, >> c_expression={'i': "{src0} < 0 ? -{src0} : {src0}", 'f': "fabsf({src0})", >> 'd': "fabs({src0})", 'i64': "{src0} < 0 ? -{src0} : {src0}"}), >> operation("sign", 1, source_types=signed_numeric_types, >> c_expression={'i': "({src0} > 0) - ({src0} < 0)", 'f': "float(({src0} > >> 0.0F) - ({src0} < 0.0F))", 'd': "double(({src0} > 0.0) - ({src0} < 0.0))", >> 'i64': "({src0} > 0) - ({src0} < 0)"}), >> - operation("rcp", 1, source_types=real_types, c_expression={'f': "{src0} >> != 0.0F ? 1.0F / {src0} : 0.0F", 'd': "{src0} != 0.0 ? 1.0 / {src0} : 0.0"}), >> + operation("rcp", 1, source_types=real_types, c_expression={'f': "1.0F / >> {src0}", 'd': "1.0 / {src0}"}), >> operation("rsq", 1, source_types=real_types, c_expression={'f': "1.0F / >> sqrtf({src0})", 'd': "1.0 / sqrt({src0})"}), >> operation("sqrt", 1, source_types=real_types, c_expression={'f': >> "sqrtf({src0})", 'd': "sqrt({src0})"}), >> operation("exp", 1, source_types=(float_type,), >> c_expression="expf({src0})"), # Log base e on gentype >>
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev