blob: b1260525b661e5248eb8157d2a19f47faaf267b6 [file] [log] [blame]
#ifndef _GLCBLENDEQUATIONADVANCEDTESTS_HPP
#define _GLCBLENDEQUATIONADVANCEDTESTS_HPP
/*-------------------------------------------------------------------------
* OpenGL Conformance Test Suite
* -----------------------------
*
* Copyright (c) 2014-2016 The Khronos Group Inc.
*
* 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.
*
*/ /*!
* \file
* \brief
*/ /*-------------------------------------------------------------------*/
#include "glcTestCase.hpp"
#include "gluShaderUtil.hpp"
#include "tcuDefs.hpp"
/*
New Tests
Blending mode tests
* For each new blending mode, render a simple test image where two constant
color primites overlap and are blended together. Use ReadPixels to obtain
a sample pixel from the overlap area and compare it to an expected result.
- Each blending mode is tested with multiple preselected color
combinations. The color combinations should be selected for each
blending equation so that they exercise all equivalance classes and
boundary values.
- Expected results are calculated at run-time using the blending equation
definitions.
- Comparison needs to use a tolerance that takes the possible precision
differences into account.
- Each blending mode needs to be tested with fragment shaders that use
1. blend_support_[mode] and 2. blend_support_all layout qualifiers.
Coherent blending tests
* These tests are otherwise similar to "Blending mode tests" but instead of rendering
2 overlapping primitives, render N primitives using different blending modes
- If XXX_blend_equation_advanced_coherent is supported, enable
BLEND_ADVANCED_COHERENT_XXX setting before running the tests. If it is
not supported, execute BlendBarrierXXX after rendering each primitive.
- Each blending mode needs to be tested with a fragment shaders that uses
blend_support_all layout qualifier and a fragment shader that
lists all the used blending modes explicitly.
Other tests
* If XXX_blend_equation_advanced_coherent is supported, test
BLEND_ADVANCED_COHERENT_XXX setting:
- The setting should work with Enable, Disable and IsEnable without producing errors
- Default value should be TRUE
* Test that rendering into more than one color buffers at once produces
INVALID_OPERATION error when calling drawArrays/drawElements
* Each blending mode needs to be tested without specifying the proper
blend_support_[mode] or blend_support_all layout qualifier in the
fragment shader. Expect INVALID_OPERATION GL error after calling
DrawElements/Arrays.
* Test that the new blending modes cannot be used with
BlendEquationSeparate(i). Expect INVALID_ENUM GL error.
* Test different behaviors for GLSL #extension
GL_XXX_blend_equation_advanced
* Check that GLSL GL_XXX_blend_equation_advanced #define exists and is 1
*/
namespace glcts
{
class BlendEquationAdvancedTests : public deqp::TestCaseGroup
{
public:
BlendEquationAdvancedTests(deqp::Context& context, glu::GLSLVersion glslVersion);
~BlendEquationAdvancedTests();
void init(void);
private:
glu::GLSLVersion m_glslVersion;
};
} // glcts
#endif // _GLCBLENDEQUATIONADVANCEDTESTS_HPP