Import Tint changes from Dawn

Changes:
  - 51249b83e664c3983e2ae5112d2570867ea5bb96 tint/hlsl: don't use min16float to implement quantizeToF16 by Antonio Maiorano <amaiorano@google.com>
GitOrigin-RevId: 51249b83e664c3983e2ae5112d2570867ea5bb96
Change-Id: Ic639809f49d5538d394a76c404064bb13676dbd1
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/125961
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index 2c4279c..9ea120c 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -2106,12 +2106,13 @@
 bool GeneratorImpl::EmitQuantizeToF16Call(utils::StringStream& out,
                                           const ast::CallExpression* expr,
                                           const sem::Builtin* builtin) {
-    // Emulate by casting to min16float and back again.
+    // Cast to f16 and back
     std::string width;
     if (auto* vec = builtin->ReturnType()->As<type::Vector>()) {
         width = std::to_string(vec->Width());
     }
-    out << "float" << width << "(min16float" << width << "(";
+    out << "f16tof32(f32tof16"
+        << "(";
     if (!EmitExpression(out, expr->args[0])) {
         return false;
     }
diff --git a/src/tint/writer/hlsl/generator_impl_import_test.cc b/src/tint/writer/hlsl/generator_impl_import_test.cc
index 3fbad50..ed41b32 100644
--- a/src/tint/writer/hlsl/generator_impl_import_test.cc
+++ b/src/tint/writer/hlsl/generator_impl_import_test.cc
@@ -275,7 +275,7 @@
 
     utils::StringStream out;
     ASSERT_TRUE(gen.EmitCall(out, expr)) << gen.error();
-    EXPECT_EQ(out.str(), std::string("float(min16float(v))"));
+    EXPECT_EQ(out.str(), std::string("f16tof32(f32tof16(v))"));
 }
 
 TEST_F(HlslGeneratorImplTest_Import, HlslImportData_QuantizeToF16_Vector) {
@@ -288,7 +288,7 @@
 
     utils::StringStream out;
     ASSERT_TRUE(gen.EmitCall(out, expr)) << gen.error();
-    EXPECT_EQ(out.str(), std::string("float3(min16float3(v))"));
+    EXPECT_EQ(out.str(), std::string("f16tof32(f32tof16(v))"));
 }
 
 }  // namespace