-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------
    Occlusion query tests

Tests:
 + dEQP-GLES3.functional.occlusion_query.*

Includes:
 + Following occluder types are tested:
	- Scissor boxes
	- Depth writes and clears
	- Stencil writes and clears
 + Exact occlusion query result verification
	- For query target ANY_SAMPLES_PASSED
 + Conservative occlusion query result verification
	- For query target ANY_SAMPLES_PASSED_CONSERVATIVE

Excludes:

Description:

Occlusion query tests operate using the following steps. First, a number
of occluders are drawn on screen. Occluders can be areas around scissor
boxes, depth writes/clears or stencil writes/clears. Second, a number of
target primitives are drawn in red. If any target is visible, i.e. red
color appears in the framebuffer, the occlusion query should return true.
If targets are invisible, i.e. red color does not appear in the
framebuffer, the  occlusion query should return false. If these conditions
are not met, the test fails.

If the occlusion query target is ANY_SAMPLES_PASSED_CONSERVATIVE, the test
allows false positives, i.e. the occlusion query can return true even if
red color is not present in the framebuffer. The converse is not allowed:
if red color is present in the framebuffer, the query must return true.
