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 32 namespace deqp 33 { 34 namespace gles31 35 { 36 namespace Functional 37 { 38 namespace 39 { 40 41 using namespace gls::StateQueryUtil; 42 43 static 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 54 class FramebufferTest : public TestCase 55 { 56 public: 57 FramebufferTest (Context& context, QueryType verifier, const char* name, const char* desc); 58 IterateResult iterate (void); 59 60 protected: 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 67 FramebufferTest::FramebufferTest (Context& context, QueryType verifier, const char* name, const char* desc) 68 : TestCase (context, name, desc) 69 , m_verifier (verifier) 70 { 71 } 72 73 FramebufferTest::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 98 class FramebufferDimensionTest : public FramebufferTest 99 { 100 public: 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 113 private: 114 const DimensionType m_dimension; 115 }; 116 117 FramebufferDimensionTest::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 124 void 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 130 void 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 140 class FramebufferSamplesTest : public FramebufferTest 141 { 142 public: 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 148 FramebufferSamplesTest::FramebufferSamplesTest (Context& context, QueryType verifier, const char* name, const char* desc) 149 : FramebufferTest(context, verifier, name, desc) 150 { 151 } 152 153 void 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 158 void 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 169 class FramebufferFixedSampleLocationsTest : public FramebufferTest 170 { 171 public: 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 177 FramebufferFixedSampleLocationsTest::FramebufferFixedSampleLocationsTest (Context& context, QueryType verifier, const char* name, const char* desc) 178 : FramebufferTest(context, verifier, name, desc) 179 { 180 } 181 182 void 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 187 void 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 196 FramebufferDefaultStateQueryTests::FramebufferDefaultStateQueryTests (Context& context) 197 : TestCaseGroup(context, "framebuffer_default", "Framebuffer Default State Query tests") 198 { 199 } 200 201 FramebufferDefaultStateQueryTests::~FramebufferDefaultStateQueryTests (void) 202 { 203 } 204 205 void 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