glsl: cleanups in lower_precision
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5746>
This commit is contained in:
@@ -590,12 +590,12 @@ lower_glsl_type(const glsl_type *type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ir_rvalue *
|
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;
|
unsigned new_type, op;
|
||||||
|
|
||||||
if (up) {
|
if (up) {
|
||||||
switch (type) {
|
switch (ir->type->base_type) {
|
||||||
case GLSL_TYPE_FLOAT16:
|
case GLSL_TYPE_FLOAT16:
|
||||||
new_type = GLSL_TYPE_FLOAT;
|
new_type = GLSL_TYPE_FLOAT;
|
||||||
op = ir_unop_f162f;
|
op = ir_unop_f162f;
|
||||||
@@ -613,7 +613,7 @@ convert_precision(glsl_base_type type, bool up, ir_rvalue *ir)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (type) {
|
switch (ir->type->base_type) {
|
||||||
case GLSL_TYPE_FLOAT:
|
case GLSL_TYPE_FLOAT:
|
||||||
new_type = GLSL_TYPE_FLOAT16;
|
new_type = GLSL_TYPE_FLOAT16;
|
||||||
op = ir_unop_f2fmp;
|
op = ir_unop_f2fmp;
|
||||||
@@ -651,10 +651,8 @@ lower_precision_visitor::handle_rvalue(ir_rvalue **rvalue)
|
|||||||
|
|
||||||
if (ir->as_dereference()) {
|
if (ir->as_dereference()) {
|
||||||
if (!ir->type->is_boolean())
|
if (!ir->type->is_boolean())
|
||||||
*rvalue = convert_precision(ir->type->base_type, false, ir);
|
*rvalue = convert_precision(false, ir);
|
||||||
} else if (ir->type->base_type == GLSL_TYPE_FLOAT ||
|
} else if (ir->type->is_32bit()) {
|
||||||
ir->type->base_type == GLSL_TYPE_INT ||
|
|
||||||
ir->type->base_type == GLSL_TYPE_UINT) {
|
|
||||||
ir->type = lower_glsl_type(ir->type);
|
ir->type = lower_glsl_type(ir->type);
|
||||||
|
|
||||||
ir_constant *const_ir = ir->as_constant();
|
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
|
/* We don’t need to add the final conversion if the final type has been
|
||||||
* converted to bool
|
* converted to bool
|
||||||
*/
|
*/
|
||||||
if ((*rvalue)->type->base_type != GLSL_TYPE_BOOL)
|
if ((*rvalue)->type->base_type != GLSL_TYPE_BOOL) {
|
||||||
*rvalue = convert_precision((*rvalue)->type->base_type, true, *rvalue);
|
*rvalue = convert_precision(true, *rvalue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ir_visitor_status
|
ir_visitor_status
|
||||||
|
Reference in New Issue
Block a user