V2: Replace range-setting for undefined behavior with a TODO. Use the new IS_CONSTANT macro --- 3< --- Ian mentioned he was not sure what the correct behavior should be. Optimizing based on undefined behavior is not pretty, so remove that and instead leave a note. --- src/glsl/opt_minmax.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
diff --git a/src/glsl/opt_minmax.cpp b/src/glsl/opt_minmax.cpp index dd13800..cca18e8 100644 --- a/src/glsl/opt_minmax.cpp +++ b/src/glsl/opt_minmax.cpp @@ -434,6 +434,20 @@ get_range(ir_rvalue *rval) return minmax_range(low, high); + case ir_binop_pow: + r0 = get_range(expr->operands[0]); + + if (IS_CONSTANT(r0.low, >=, 0.0f)) + low = new(mem_ctx) ir_constant(0.0f); + + /* TODO: If operand(0) < 0 then the result is undefined according + * to the spec, so we can set the range to whatever we want. + * However, hardware probably follows SM2.0 or SM5.0 rules. + * Some apps may depend on this behavior. This needs investigation + */ + + return minmax_range(low, NULL); + default: break; } -- 2.2.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev