-------------------------------------------------------------------------
drawElements Quality Program Test Specification
-----------------------------------------------

Copyright 2014 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-------------------------------------------------------------------------
    Sample shading tests

Tests:
 + dEQP-GLES31.functional.sample_shading

Includes:
 + Visual verification of OES_sample_shading
    - per sample color
	- per sample discard
 + State queries

Excludes:
 + Rendering to every supported render buffer sample count / format
 + Rendering to every supported multisample texture sample count / format

Description:

state_query.* tests verify that the state returned by different query functions
is valid. state_query.min_sample_shading_value_clamping test verifies
MIN_SAMPLE_SHADING state is clamped when it is specified with glMinSampleShading
function.

min_sample_shading.* tests render a high frequency pattern with different
MIN_SAMPLE_SHADING values. *_color cases render pattern by rendering black or
white in the fragment shader depending on the pattern function sign. *_discard
cases render pattern by the clearing image to black, outputting white in the
fragment shader, and discarding the fragment if function sign is negative. Each
test iteration sets MIN_SAMPLE_SHADING_VALUE to guarantee a certain number of
individual samples and draws the pattern.

Averaging N uniformly random binary values (pattern output function) and
averaging them will result in a discrete normal-like distribution. The number of
samples N can now be calculated from the distribution with: the number of
distinct points with non-zero probability - 1. A sufficiently high frequency
function is assumed to have similar effect to the uniform random. Hence, if the
number of different shades in the result image is less or equal to the
guaranteed sample count, the pixels did not contain the guaranteed amount of
independent samples, i.e. result image is invalid.

Since the tests analyze the resolved multisample image when rendering to the
default framebuffer or to a renderbuffer, implementations that do not resolve
multisample buffers with a box filter (simple average) may result in false
positives. False positive may occur if distinct pixels with identical filter
sample coverage ratios can be mapped to distinct values. Tests rendering to a
multisample texture do not use an implementation defined multisample resolution
and thus do not produce false positives.
