glsl/nir: ftrunc for native_integers=false float to int cast
authorJonathan Marek <jonathan@marek.ca>
Mon, 12 Nov 2018 22:00:08 +0000 (17:00 -0500)
committerJason Ekstrand <jason@jlekstrand.net>
Fri, 11 Jan 2019 19:16:11 +0000 (19:16 +0000)
out_type in the default cast case is always GLSL_TYPE_FLOAT, so we get a
mov otherwise.

Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/glsl/glsl_to_nir.cpp

index 8a19399d8907f8036365f19486381782a87e90db..00380f482d0dd9bea673dcbbfb4922ccf0bb9974 100644 (file)
@@ -1643,7 +1643,11 @@ nir_visitor::visit(ir_expression *ir)
       result = supports_ints ? nir_b2f32(&b, srcs[0]) : nir_fmov(&b, srcs[0]);
       break;
    case ir_unop_f2i:
+      result = supports_ints ? nir_f2i32(&b, srcs[0]) : nir_ftrunc(&b, srcs[0]);
+      break;
    case ir_unop_f2u:
+      result = supports_ints ? nir_f2u32(&b, srcs[0]) : nir_ftrunc(&b, srcs[0]);
+      break;
    case ir_unop_f2b:
    case ir_unop_i2b:
    case ir_unop_b2i: