Rules for Claiming a Conformant WebGL Implementation
====================================================

The WebGL API is a web standard, and many web browser implementers
deliver their browser on multiple operating systems (OSs). WebGL
implementations also typically rely on the presence of an OpenGL or
OpenGL ES implementation on the OS. It can be appreciated that a WebGL
implementation therefore has many dependencies. This document attempts
to clarify to potential implementers the rules the Khronos Group uses
to judge whether a particular WebGL implementation is conformant.

There are two primary reasons to submit conformance results:

  A) A web browser implementer desires to certify their WebGL
     implementation as conformant.

  B) A GPU manufacturer delivering an embedded system including web
     browser with WebGL support desires to certify their WebGL
     implementation as conformant.

Each of these situations carries different constraints, so the
conformance rules are phrased differently for each. Typically, a web
browser implementer aims to certify that the WebGL "layer" is correct.
A GPU vendor typically aims to certify that a given device is
physically capable of passing the tests.

A newly-developed WebGL implementation should not support the "webgl"
HTML Canvas context type by default in a shipping version of the
product until reaching conformance. It is acceptable to give end users
an option to turn on WebGL support in a non-conformant implementation
as long as the documentation for that option clearly indicates that
the implementation is not yet conformant and may have compatibility
issues. It is suggested that the Canvas context type
"experimental-webgl" may be supported by default in such
implementations.

A WebGL implementation might reach conformance, but a subsequent
graphics driver release on a particular OS might introduce a
regression causing failures of one or more of the WebGL conformance
tests. In this situation it is not required to revoke support for the
"webgl" HTML Canvas context type. The WebGL implementer should work
with the GPU vendor to ensure the driver regression is fixed. A
situation like this would, however, prevent the WebGL implementer from
conforming to a subsequent version of the test suite.

(A) Conformance Rules for a Web Browser Implementer
===================================================

1. Conformance on a particular operating system

On a given OS, a WebGL implementation will be considered to conform to
a particular version of the conformance suite if the suite passes with
no test failures on at least two GPUs, each from a different
vendor. If the OS only supports a GPU from one vendor, the two-GPU
requirement is dropped.

2. Conformance across multiple operating systems

A WebGL implementation will be considered to conform to a particular
version of the conformance suite if it passes rule (1) on all of the
OSs on which the WebGL implementation is intended to be supported.

3. Conformance as the web browser is upgraded

WebGL conformance results submitted for an earlier version of the
browser carry forward to later versions of the browser that do not
cause any previously passing test to fail.

4. Conformance as the operating system is upgraded

If a new version is released of one of the OSs on which a WebGL
implementation is intended to run, then WebGL conformance results
submitted for earlier versions of that OS carry forward. Future
conformance results must be submitted against the new version of the
OS. If it is anticipated that the older OS version will be supported
for some time, then future conformance results must be submitted
separately for both the old and new versions of the OS.

(B) Conformance Rules for a GPU Vendor
======================================

A GPU vendor submitting conformance results for a WebGL implementation
typically does so because the device containing the GPU includes a
built-in web browser. In this case the following rules apply:

1. Conformance results must be submitted for each GPU and operating
system combination to be certified. It is not required to submit
results for different devices containing the same GPU and running the
same operating system that do not cause any previously passing test to
fail.

2. Conformance results carry forward for a given GPU as the operating
system and graphics driver are upgraded but do not cause any previously
passing test to fail.

Discussion
==========

A WebGL implementation intended to ship on three OSs may reach
conformance on two of them, but due to graphics driver bugs, may be
unable to reach conformance on the third. In this situation the
implementation is not yet considered to be conformant.

An existing WebGL implementation which conformed to an earlier version
of the test suite is not required to remove support for the "webgl"
HTML Canvas context type while in the process of conforming to a later
version of the test suite. However, the implementer must not advertise
conformance to the later version until it has been reached. It is
acceptable for the implementer to advertise details of their
conformance, for example number or percentage of passing or failing
tests, or names of passing or failing tests.

A GPU vendor might submit conformance results in order to use the
WebGL logo in a marketing campaign. In this situation, results may be
submitted in advance of the product becoming available through sales
channels, per the rules above.

The WebGL API has strict security requirements. Even one failing test
may indicate a serious security issue in the WebGL implementation. For
this reason, no exceptions for failing conformance tests will be
granted.

The Khronos Group determines whether a particular WebGL implementation
is conformant based on the implementer's conformance suite
submissions, on multiple OSs and on multiple GPUs as necessary, using
the rules above. An implementer shall not judge their own
implementation conformant simply by applying the above rules.
