[tint][ir] Remove Function::ReturnBuiltin, use core::BuiltinValue

Validation can catch the invalid builtin values, just like it catches everything else.

Change-Id: I10ac58eddbecf52680d997c75566ac6e1b47d42d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/165043
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/lang/core/ir/function.h b/src/tint/lang/core/ir/function.h
index a03e510..5cf533f 100644
--- a/src/tint/lang/core/ir/function.h
+++ b/src/tint/lang/core/ir/function.h
@@ -62,16 +62,6 @@
         kVertex,
     };
 
-    /// Builtin attached to return types
-    enum class ReturnBuiltin {
-        /// Builtin Position attribute
-        kPosition,
-        /// Builtin FragDepth attribute
-        kFragDepth,
-        /// Builtin SampleMask
-        kSampleMask,
-    };
-
     /// Constructor
     Function();
 
@@ -114,12 +104,12 @@
 
     /// Sets the return attributes
     /// @param builtin the builtin to set
-    void SetReturnBuiltin(ReturnBuiltin builtin) {
+    void SetReturnBuiltin(BuiltinValue builtin) {
         TINT_ASSERT(!return_.builtin.has_value());
         return_.builtin = builtin;
     }
     /// @returns the return builtin attribute
-    std::optional<enum ReturnBuiltin> ReturnBuiltin() const { return return_.builtin; }
+    std::optional<BuiltinValue> ReturnBuiltin() const { return return_.builtin; }
 
     /// Clears the return builtin attribute.
     void ClearReturnBuiltin() { return_.builtin = {}; }
@@ -184,7 +174,7 @@
 
     struct {
         const core::type::Type* type = nullptr;
-        std::optional<enum ReturnBuiltin> builtin;
+        std::optional<BuiltinValue> builtin;
         std::optional<Location> location;
         bool invariant = false;
     } return_;
@@ -205,18 +195,6 @@
     return out << ToString(value);
 }
 
-/// @param value the enum value
-/// @returns the string for the given enum value
-std::string_view ToString(enum Function::ReturnBuiltin value);
-
-/// @param out the stream to write to
-/// @param value the Function::ReturnBuiltin
-/// @returns @p out so calls can be chained
-template <typename STREAM, typename = traits::EnableIfIsOStream<STREAM>>
-auto& operator<<(STREAM& out, enum Function::ReturnBuiltin value) {
-    return out << ToString(value);
-}
-
 }  // namespace tint::core::ir
 
 #endif  // SRC_TINT_LANG_CORE_IR_FUNCTION_H_