glsl: cleanups in lower_precision
authorMarek Olšák <marek.olsak@amd.com>
Fri, 26 Jun 2020 07:43:25 +0000 (03:43 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 8 Jul 2020 02:02:06 +0000 (22:02 -0400)
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5746>

src/compiler/glsl/lower_precision.cpp

index 13ba6e0d47f51b62224040cbbe85ff9cd17c5641..ff5e5104c3f80739c40782674426e49ddf391273 100644 (file)
@@ -590,12 +590,12 @@ lower_glsl_type(const glsl_type *type)
 }
 
 static ir_rvalue *
-convert_precision(glsl_base_type type, bool up, ir_rvalue *ir)
+convert_precision(bool up, ir_rvalue *ir)
 {
    unsigned new_type, op;
 
    if (up) {
-      switch (type) {
+      switch (ir->type->base_type) {
       case GLSL_TYPE_FLOAT16:
          new_type = GLSL_TYPE_FLOAT;
          op = ir_unop_f162f;
@@ -613,7 +613,7 @@ convert_precision(glsl_base_type type, bool up, ir_rvalue *ir)
          return NULL;
       }
    } else {
-      switch (type) {
+      switch (ir->type->base_type) {
       case GLSL_TYPE_FLOAT:
          new_type = GLSL_TYPE_FLOAT16;
          op = ir_unop_f2fmp;
@@ -651,10 +651,8 @@ lower_precision_visitor::handle_rvalue(ir_rvalue **rvalue)
 
    if (ir->as_dereference()) {
       if (!ir->type->is_boolean())
-         *rvalue = convert_precision(ir->type->base_type, false, ir);
-   } else if (ir->type->base_type == GLSL_TYPE_FLOAT ||
-              ir->type->base_type == GLSL_TYPE_INT ||
-              ir->type->base_type == GLSL_TYPE_UINT) {
+         *rvalue = convert_precision(false, ir);
+   } else if (ir->type->is_32bit()) {
       ir->type = lower_glsl_type(ir->type);
 
       ir_constant *const_ir = ir->as_constant();
@@ -773,8 +771,9 @@ find_precision_visitor::handle_rvalue(ir_rvalue **rvalue)
    /* We don’t need to add the final conversion if the final type has been
     * converted to bool
     */
-   if ((*rvalue)->type->base_type != GLSL_TYPE_BOOL)
-      *rvalue = convert_precision((*rvalue)->type->base_type, true, *rvalue);
+   if ((*rvalue)->type->base_type != GLSL_TYPE_BOOL) {
+      *rvalue = convert_precision(true, *rvalue);
+   }
 }
 
 ir_visitor_status