# Experimental extensions

Sometimes a language feature proposed for WGSL requires experiementation
to prove its worth.  Tint needs to support these, in general to enable
that experimentation.

The steps for doing so are:

1. Choose a name for the feature, to be used in an `enable` directive.
   An experimental extension should use prefix of `google_experimental_`
   Example:

      enable google_experimental_f16;

2. Write down what the feature is supposed to mean.
   This informs the Tint implementation, and tells shader authors what
   has changed.
   Ideally, this will take the form of one of the following:

   - A PR against the WGSL spec.

   - A description of what the contents of that PR would be, committed
     as a document in this Tint repository.

3. File a tracking bug for adding the feature.
   Note: Should the Tint repo have a label for experimental features?

4. File a tracking bug for removing the feature or converting it to
   non-experimental.

5. Write a plan for removal of the experiment.
   - Ideally, this plan is committed to this repository, especially the
     description of public activities and commitments. However, we recognize
     that some internal goals or metrics may be sensitive, and can be hidden.
   - The plan is about process, not technical details.  It should include:
       - Who is the point of contact for this feature? The point of contact
         is responsible when the feature causes an issue or gets in the way.
       - What is your target date for declaring the experiment a success or
         failure. In Chrome an experiment must be shipped or removed, in
         finite time.
       - What experience are you hoping to gain?  Do you have target metrics?
       - What approvals, if any, do you need from W3C? What is your plan to
         present your case to W3C?
       - The bug tracking removal of the experiment.