-------------------------------------------------------------------------
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 stress tests

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

Includes:
 + Uses primitives drawn with GL_TRIANGLES
 + Uses query target ANY_SAMPLES_PASSED

Excludes:
 + Occlusion query result verification based on framebuffer

Description:

Occlusion query stress tests generate large amounts of occlusion queries
in order to test implementation's ability to handle them. First a
specified number of occluding triangles are drawn. Then the occlusion
query is started, specified number of target triangles are drawn and the
occlusion query is terminated. After all occlusion queries and triangle
draws are executed, glFinish() is called and all query results are read.

Actual query result values are not verified - only trouble-free result
retrieval is tested. Query result correctness can be implemented later
by inspecting framebuffer contents.
