Re: [Mesa-dev] [PATCH] glsl: add lowering for double divide to rcp/mul

2015-02-20 Thread Roland Scheidegger
Am 19.02.2015 um 23:47 schrieb Dave Airlie:
 From: Dave Airlie airl...@redhat.com
 
 It looks like no hw does div anyways, so we should just
 lower at the GLSL level.
 
 Signed-off-by: Dave Airlie airl...@redhat.com
 ---
  src/glsl/lower_instructions.cpp | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/src/glsl/lower_instructions.cpp b/src/glsl/lower_instructions.cpp
 index e8a69e7..ac6715b 100644
 --- a/src/glsl/lower_instructions.cpp
 +++ b/src/glsl/lower_instructions.cpp
 @@ -199,7 +199,7 @@ lower_instructions_visitor::sub_to_add_neg(ir_expression 
 *ir)
  void
  lower_instructions_visitor::div_to_mul_rcp(ir_expression *ir)
  {
 -   assert(ir-operands[1]-type-is_float());
 +   assert(ir-operands[1]-type-is_float() || 
 ir-operands[1]-type-is_double());
  
 /* New expression for the 1.0 / op1 */
 ir_rvalue *expr;
 @@ -327,7 +327,7 @@ lower_instructions_visitor::mod_to_floor(ir_expression 
 *ir)
 /* Don't generate new IR that would need to be lowered in an additional
  * pass.
  */
 -   if (lowering(DIV_TO_MUL_RCP)  ir-type-is_float())
 +   if (lowering(DIV_TO_MUL_RCP)  (ir-type-is_float() || 
 ir-type-is_double()))
div_to_mul_rcp(div_expr);
  
 ir_expression *const floor_expr =
 @@ -1014,7 +1014,7 @@ lower_instructions_visitor::visit_leave(ir_expression 
 *ir)
 case ir_binop_div:
if (ir-operands[1]-type-is_integer()  
 lowering(INT_DIV_TO_MUL_RCP))
int_div_to_mul_rcp(ir);
 -  else if (ir-operands[1]-type-is_float()  lowering(DIV_TO_MUL_RCP))
 +  else if ((ir-operands[1]-type-is_float() || 
 ir-operands[1]-type-is_double()) lowering(DIV_TO_MUL_RCP))
div_to_mul_rcp(ir);
break;
  
 

FWIW I suspect lowering ddiv doesn't really cut it always. Can be done
later though. (d3d11 in fact has ddiv as an extended double feature
not just the ordinary double feature, though along with dfma and drcp,
which makes me wonder how you'd do a division with the unextended
version if you don't even have rcp... In any case ddiv is required to be
precise to 0.5 ULP if supported, drcp only 1.0 ULP.)

Roland

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] glsl: add lowering for double divide to rcp/mul

2015-02-19 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

It looks like no hw does div anyways, so we should just
lower at the GLSL level.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/glsl/lower_instructions.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/glsl/lower_instructions.cpp b/src/glsl/lower_instructions.cpp
index e8a69e7..ac6715b 100644
--- a/src/glsl/lower_instructions.cpp
+++ b/src/glsl/lower_instructions.cpp
@@ -199,7 +199,7 @@ lower_instructions_visitor::sub_to_add_neg(ir_expression 
*ir)
 void
 lower_instructions_visitor::div_to_mul_rcp(ir_expression *ir)
 {
-   assert(ir-operands[1]-type-is_float());
+   assert(ir-operands[1]-type-is_float() || 
ir-operands[1]-type-is_double());
 
/* New expression for the 1.0 / op1 */
ir_rvalue *expr;
@@ -327,7 +327,7 @@ lower_instructions_visitor::mod_to_floor(ir_expression *ir)
/* Don't generate new IR that would need to be lowered in an additional
 * pass.
 */
-   if (lowering(DIV_TO_MUL_RCP)  ir-type-is_float())
+   if (lowering(DIV_TO_MUL_RCP)  (ir-type-is_float() || 
ir-type-is_double()))
   div_to_mul_rcp(div_expr);
 
ir_expression *const floor_expr =
@@ -1014,7 +1014,7 @@ lower_instructions_visitor::visit_leave(ir_expression *ir)
case ir_binop_div:
   if (ir-operands[1]-type-is_integer()  lowering(INT_DIV_TO_MUL_RCP))
 int_div_to_mul_rcp(ir);
-  else if (ir-operands[1]-type-is_float()  lowering(DIV_TO_MUL_RCP))
+  else if ((ir-operands[1]-type-is_float() || 
ir-operands[1]-type-is_double()) lowering(DIV_TO_MUL_RCP))
 div_to_mul_rcp(ir);
   break;
 
-- 
1.9.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] glsl: add lowering for double divide to rcp/mul

2015-02-19 Thread Ilia Mirkin
On Thu, Feb 19, 2015 at 5:47 PM, Dave Airlie airl...@gmail.com wrote:
 From: Dave Airlie airl...@redhat.com

 It looks like no hw does div anyways, so we should just
 lower at the GLSL level.

Sounds like radeonsi has helpers for DDIV, but they can work this out
when they add support in mesa. Like not using DIV_TO_MUL_RCP lowering.


 Signed-off-by: Dave Airlie airl...@redhat.com
 ---
  src/glsl/lower_instructions.cpp | 6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)

 diff --git a/src/glsl/lower_instructions.cpp b/src/glsl/lower_instructions.cpp
 index e8a69e7..ac6715b 100644
 --- a/src/glsl/lower_instructions.cpp
 +++ b/src/glsl/lower_instructions.cpp
 @@ -199,7 +199,7 @@ lower_instructions_visitor::sub_to_add_neg(ir_expression 
 *ir)
  void
  lower_instructions_visitor::div_to_mul_rcp(ir_expression *ir)
  {
 -   assert(ir-operands[1]-type-is_float());
 +   assert(ir-operands[1]-type-is_float() || 
 ir-operands[1]-type-is_double());

 /* New expression for the 1.0 / op1 */
 ir_rvalue *expr;
 @@ -327,7 +327,7 @@ lower_instructions_visitor::mod_to_floor(ir_expression 
 *ir)
 /* Don't generate new IR that would need to be lowered in an additional
  * pass.
  */
 -   if (lowering(DIV_TO_MUL_RCP)  ir-type-is_float())
 +   if (lowering(DIV_TO_MUL_RCP)  (ir-type-is_float() || 
 ir-type-is_double()))
div_to_mul_rcp(div_expr);

 ir_expression *const floor_expr =
 @@ -1014,7 +1014,7 @@ lower_instructions_visitor::visit_leave(ir_expression 
 *ir)
 case ir_binop_div:
if (ir-operands[1]-type-is_integer()  
 lowering(INT_DIV_TO_MUL_RCP))
  int_div_to_mul_rcp(ir);
 -  else if (ir-operands[1]-type-is_float()  lowering(DIV_TO_MUL_RCP))
 +  else if ((ir-operands[1]-type-is_float() || 
 ir-operands[1]-type-is_double()) lowering(DIV_TO_MUL_RCP))

80 chars. And space around .

With that fixed, Reviewed-by: Ilia Mirkin imir...@alum.mit.edu

  div_to_mul_rcp(ir);
break;

 --
 1.9.3

 ___
 mesa-dev mailing list
 mesa-dev@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/mesa-dev
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev