es31fFramebufferDefaultStateQueryTests.cpp revision cb82ed72dcbbfd8a6d07736c3259605227bc984f
1/*------------------------------------------------------------------------- 2 * drawElements Quality Program OpenGL ES 3.1 Module 3 * ------------------------------------------------- 4 * 5 * Copyright 2015 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 *//*! 20 * \file 21 * \brief Framebuffer Default State Query tests. 22 *//*--------------------------------------------------------------------*/ 23 24#include "es31fFramebufferDefaultStateQueryTests.hpp" 25#include "glsStateQueryUtil.hpp" 26#include "gluRenderContext.hpp" 27#include "gluCallLogWrapper.hpp" 28#include "gluObjectWrapper.hpp" 29#include "glwFunctions.hpp" 30#include "glwEnums.hpp" 31 32namespace deqp 33{ 34namespace gles31 35{ 36namespace Functional 37{ 38namespace 39{ 40 41using namespace gls::StateQueryUtil; 42 43static const char* getVerifierSuffix (QueryType type) 44{ 45 switch (type) 46 { 47 case QUERY_FRAMEBUFFER_INTEGER: return "get_framebuffer_parameteriv"; 48 default: 49 DE_ASSERT(DE_FALSE); 50 return DE_NULL; 51 } 52} 53 54class FramebufferTest : public TestCase 55{ 56public: 57 FramebufferTest (Context& context, QueryType verifier, const char* name, const char* desc); 58 IterateResult iterate (void); 59 60protected: 61 virtual void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl) = 0; 62 virtual void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl) = 0; 63 64 const QueryType m_verifier; 65}; 66 67FramebufferTest::FramebufferTest (Context& context, QueryType verifier, const char* name, const char* desc) 68 : TestCase (context, name, desc) 69 , m_verifier (verifier) 70{ 71} 72 73FramebufferTest::IterateResult FramebufferTest::iterate (void) 74{ 75 glu::Framebuffer fbo (m_context.getRenderContext()); 76 glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 77 tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 78 79 gl.enableLogging(true); 80 81 gl.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, *fbo); 82 GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind"); 83 84 { 85 const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial"); 86 checkInitial(result, gl); 87 } 88 89 { 90 const tcu::ScopedLogSection section(m_testCtx.getLog(), "Set", "Set"); 91 checkSet(result, gl); 92 } 93 94 result.setTestContextResult(m_testCtx); 95 return STOP; 96} 97 98class FramebufferDimensionTest : public FramebufferTest 99{ 100public: 101 enum DimensionType 102 { 103 DIMENSION_WIDTH = 0, 104 DIMENSION_HEIGHT, 105 106 DIMENSION_LAST 107 }; 108 109 FramebufferDimensionTest (Context& context, QueryType verifier, DimensionType dimension, const char* name, const char* desc); 110 void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl); 111 void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl); 112 113private: 114 const DimensionType m_dimension; 115}; 116 117FramebufferDimensionTest::FramebufferDimensionTest (Context& context, QueryType verifier, DimensionType dimension, const char* name, const char* desc) 118 : FramebufferTest (context, verifier, name, desc) 119 , m_dimension (dimension) 120{ 121 DE_ASSERT(dimension < DIMENSION_LAST); 122} 123 124void FramebufferDimensionTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl) 125{ 126 const glw::GLenum pname = (m_dimension == DIMENSION_WIDTH) ? (GL_FRAMEBUFFER_DEFAULT_WIDTH) : (GL_FRAMEBUFFER_DEFAULT_HEIGHT); 127 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, pname, 0, m_verifier); 128} 129 130void FramebufferDimensionTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl) 131{ 132 const glw::GLenum pname = (m_dimension == DIMENSION_WIDTH) ? (GL_FRAMEBUFFER_DEFAULT_WIDTH) : (GL_FRAMEBUFFER_DEFAULT_HEIGHT); 133 134 gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, pname, 32); 135 GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state"); 136 137 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, pname, 32, m_verifier); 138} 139 140class FramebufferSamplesTest : public FramebufferTest 141{ 142public: 143 FramebufferSamplesTest (Context& context, QueryType verifier, const char* name, const char* desc); 144 void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl); 145 void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl); 146}; 147 148FramebufferSamplesTest::FramebufferSamplesTest (Context& context, QueryType verifier, const char* name, const char* desc) 149 : FramebufferTest(context, verifier, name, desc) 150{ 151} 152 153void FramebufferSamplesTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl) 154{ 155 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0, m_verifier); 156} 157 158void FramebufferSamplesTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl) 159{ 160 gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1); 161 GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state"); 162 verifyStateFramebufferIntegerMin(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 1, m_verifier); 163 164 gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0); 165 GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state"); 166 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, 0, m_verifier); 167} 168 169class FramebufferFixedSampleLocationsTest : public FramebufferTest 170{ 171public: 172 FramebufferFixedSampleLocationsTest (Context& context, QueryType verifier, const char* name, const char* desc); 173 void checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl); 174 void checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl); 175}; 176 177FramebufferFixedSampleLocationsTest::FramebufferFixedSampleLocationsTest (Context& context, QueryType verifier, const char* name, const char* desc) 178 : FramebufferTest(context, verifier, name, desc) 179{ 180} 181 182void FramebufferFixedSampleLocationsTest::checkInitial (tcu::ResultCollector& result, glu::CallLogWrapper& gl) 183{ 184 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, 0, m_verifier); 185} 186 187void FramebufferFixedSampleLocationsTest::checkSet (tcu::ResultCollector& result, glu::CallLogWrapper& gl) 188{ 189 gl.glFramebufferParameteri(GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_TRUE); 190 GLU_EXPECT_NO_ERROR(gl.glGetError(), "set state"); 191 verifyStateFramebufferInteger(result, gl, GL_DRAW_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS, GL_TRUE, m_verifier); 192} 193 194} // anonymous 195 196FramebufferDefaultStateQueryTests::FramebufferDefaultStateQueryTests (Context& context) 197 : TestCaseGroup(context, "framebuffer_default", "Framebuffer Default State Query tests") 198{ 199} 200 201FramebufferDefaultStateQueryTests::~FramebufferDefaultStateQueryTests (void) 202{ 203} 204 205void FramebufferDefaultStateQueryTests::init (void) 206{ 207 static const QueryType verifiers[] = 208 { 209 QUERY_FRAMEBUFFER_INTEGER, 210 }; 211 212#define FOR_EACH_VERIFIER(X) \ 213 for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) \ 214 { \ 215 const char* verifierSuffix = getVerifierSuffix(verifiers[verifierNdx]); \ 216 const QueryType verifier = verifiers[verifierNdx]; \ 217 this->addChild(X); \ 218 } 219 220 FOR_EACH_VERIFIER(new FramebufferDimensionTest (m_context, verifier, FramebufferDimensionTest::DIMENSION_WIDTH, (std::string("framebuffer_default_width_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_WIDTH")); 221 FOR_EACH_VERIFIER(new FramebufferDimensionTest (m_context, verifier, FramebufferDimensionTest::DIMENSION_HEIGHT, (std::string("framebuffer_default_height_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_HEIGHT")); 222 FOR_EACH_VERIFIER(new FramebufferSamplesTest (m_context, verifier, (std::string("framebuffer_default_samples_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_SAMPLES")); 223 FOR_EACH_VERIFIER(new FramebufferFixedSampleLocationsTest (m_context, verifier, (std::string("framebuffer_default_fixed_sample_locations_") + verifierSuffix).c_str(), "Test FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS")); 224 225#undef FOR_EACH_VERIFIER 226} 227 228} // Functional 229} // gles31 230} // deqp 231