1#ifndef _GLCBLENDEQUATIONADVANCEDTESTS_HPP
2#define _GLCBLENDEQUATIONADVANCEDTESTS_HPP
3/*-------------------------------------------------------------------------
4 * OpenGL Conformance Test Suite
5 * -----------------------------
6 *
7 * Copyright (c) 2014-2016 The Khronos Group Inc.
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 *      http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 *
21 */ /*!
22 * \file
23 * \brief
24 */ /*-------------------------------------------------------------------*/
25
26#include "glcTestCase.hpp"
27#include "gluShaderUtil.hpp"
28#include "tcuDefs.hpp"
29
30/*
31 New Tests
32
33 Blending mode tests
34
35 * For each new blending mode, render a simple test image where two constant
36 color primites overlap and are blended together. Use ReadPixels to obtain
37 a sample pixel from the overlap area and compare it to an expected result.
38 - Each blending mode is tested with multiple preselected color
39 combinations. The color combinations should be selected for each
40 blending equation so that they exercise all equivalance classes and
41 boundary values.
42 - Expected results are calculated at run-time using the blending equation
43 definitions.
44 - Comparison needs to use a tolerance that takes the possible precision
45 differences into account.
46 - Each blending mode needs to be tested with fragment shaders that use
47 1. blend_support_[mode] and 2. blend_support_all layout qualifiers.
48
49
50 Coherent blending tests
51
52 * These tests are otherwise similar to "Blending mode tests" but instead of rendering
53 2 overlapping primitives, render N primitives using different blending modes
54 - If XXX_blend_equation_advanced_coherent is supported, enable
55 BLEND_ADVANCED_COHERENT_XXX setting before running the tests. If it is
56 not supported, execute BlendBarrierXXX after rendering each primitive.
57 - Each blending mode needs to be tested with a fragment shaders that uses
58 blend_support_all layout qualifier and a fragment shader that
59 lists all the used blending modes explicitly.
60
61
62 Other tests
63
64 * If XXX_blend_equation_advanced_coherent is supported, test
65 BLEND_ADVANCED_COHERENT_XXX setting:
66 - The setting should work with Enable, Disable and IsEnable without producing errors
67 - Default value should be TRUE
68
69 * Test that rendering into more than one color buffers at once produces
70 INVALID_OPERATION error when calling drawArrays/drawElements
71
72 * Each blending mode needs to be tested without specifying the proper
73 blend_support_[mode] or blend_support_all layout qualifier in the
74 fragment shader. Expect INVALID_OPERATION GL error after calling
75 DrawElements/Arrays.
76
77 * Test that the new blending modes cannot be used with
78 BlendEquationSeparate(i). Expect INVALID_ENUM GL error.
79
80 * Test different behaviors for GLSL #extension
81 GL_XXX_blend_equation_advanced
82
83 * Check that GLSL GL_XXX_blend_equation_advanced #define exists and is 1
84 */
85
86namespace glcts
87{
88
89class BlendEquationAdvancedTests : public deqp::TestCaseGroup
90{
91public:
92	BlendEquationAdvancedTests(deqp::Context& context, glu::GLSLVersion glslVersion);
93	~BlendEquationAdvancedTests();
94
95	void init(void);
96
97private:
98	glu::GLSLVersion m_glslVersion;
99};
100
101} // glcts
102
103#endif // _GLCBLENDEQUATIONADVANCEDTESTS_HPP
104