1cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry/*------------------------------------------------------------------------- 2cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * drawElements Quality Program OpenGL ES 3.1 Module 3cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * ------------------------------------------------- 4cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * 5cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * Copyright 2015 The Android Open Source Project 6cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * 7cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * Licensed under the Apache License, Version 2.0 (the "License"); 8cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * you may not use this file except in compliance with the License. 9cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * You may obtain a copy of the License at 10cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * 11cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * http://www.apache.org/licenses/LICENSE-2.0 12cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * 13cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * Unless required by applicable law or agreed to in writing, software 14cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * distributed under the License is distributed on an "AS IS" BASIS, 15cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * See the License for the specific language governing permissions and 17cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * limitations under the License. 18cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * 19cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry *//*! 20cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * \file 21cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry * \brief Indexed state query tests 22cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry *//*--------------------------------------------------------------------*/ 23cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 24cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "es31fIndexedStateQueryTests.hpp" 25cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "tcuTestLog.hpp" 26cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "tcuFormatUtil.hpp" 27cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "gluRenderContext.hpp" 28cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "gluCallLogWrapper.hpp" 29cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "gluStrUtil.hpp" 30591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi#include "gluContextInfo.hpp" 31cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "gluObjectWrapper.hpp" 32cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "glwFunctions.hpp" 33cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "glwEnums.hpp" 34cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "glsStateQueryUtil.hpp" 35cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "deRandom.hpp" 36cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#include "deStringUtil.hpp" 37cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 38cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrynamespace deqp 39cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 40cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrynamespace gles31 41cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 42cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrynamespace Functional 43cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 44cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrynamespace 45cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 46cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 47cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryusing namespace gls::StateQueryUtil; 48cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 49cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrystatic const char* getVerifierSuffix (QueryType type) 50cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 51cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry switch (type) 52cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 53591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi case QUERY_INDEXED_BOOLEAN: return "getbooleani_v"; 54591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi case QUERY_INDEXED_INTEGER: return "getintegeri_v"; 55591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi case QUERY_INDEXED_INTEGER64: return "getinteger64i_v"; 56591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi case QUERY_INDEXED_BOOLEAN_VEC4: return "getbooleani_v"; 57591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi case QUERY_INDEXED_INTEGER_VEC4: return "getintegeri_v"; 58591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi case QUERY_INDEXED_INTEGER64_VEC4: return "getinteger64i_v"; 59591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi case QUERY_INDEXED_ISENABLED: return "isenabledi"; 60cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry default: 61cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry DE_ASSERT(DE_FALSE); 62cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return DE_NULL; 63cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 64cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 65cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 66cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass SampleMaskCase : public TestCase 67cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 68cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 69cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry SampleMaskCase (Context& context, const char* name, const char* desc, QueryType verifierType); 70cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 71cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 72cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry void init (void); 73cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 74cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 75cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 76cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int m_maxSampleMaskWords; 77cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 78cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 79cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyrySampleMaskCase::SampleMaskCase (Context& context, const char* name, const char* desc, QueryType verifierType) 80cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 81cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 82cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_maxSampleMaskWords (-1) 83cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 84cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 85cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 86cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryvoid SampleMaskCase::init (void) 87cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 88cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 89cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 90cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.getIntegerv(GL_MAX_SAMPLE_MASK_WORDS, &m_maxSampleMaskWords); 91cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.getError(), "query sample mask words"); 92cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 93cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry // mask word count ok? 94cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry if (m_maxSampleMaskWords <= 0) 95cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry throw tcu::TestError("Minimum value of GL_MAX_SAMPLE_MASK_WORDS is 1. Got " + de::toString(m_maxSampleMaskWords)); 96cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 97cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "GL_MAX_SAMPLE_MASK_WORDS = " << m_maxSampleMaskWords << tcu::TestLog::EndMessage; 98cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 99cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 100cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyrySampleMaskCase::IterateResult SampleMaskCase::iterate (void) 101cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 102cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 103cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 104cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 105cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 106cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 107cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry // initial values 108cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 109cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "initial", "Initial values"); 110cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 111cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < m_maxSampleMaskWords; ++ndx) 112cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_SAMPLE_MASK_VALUE, ndx, -1, m_verifierType); 113cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 114cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 115cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry // fixed values 116cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 117cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "fixed", "Fixed values"); 118cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 119cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < m_maxSampleMaskWords; ++ndx) 120cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 121cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glSampleMaski(ndx, 0); 122cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glSampleMaski"); 123cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 124cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_SAMPLE_MASK_VALUE, ndx, 0, m_verifierType); 125cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 126cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 127cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 128cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry // random masks 129cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 130cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int numRandomTest = 20; 131cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section (m_testCtx.getLog(), "random", "Random values"); 132cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry de::Random rnd (0x4312); 133cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 134cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int testNdx = 0; testNdx < numRandomTest; ++testNdx) 135cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 136cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLint maskIndex = (glw::GLint)(rnd.getUint32() % m_maxSampleMaskWords); 137cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glw::GLint mask = (glw::GLint)(rnd.getUint32()); 138cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 139cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glSampleMaski(maskIndex, mask); 140cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glSampleMaski"); 141cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 142cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_SAMPLE_MASK_VALUE, maskIndex, mask, m_verifierType); 143cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 144cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 145cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 146cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 147cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 148cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 149cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 150cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass MinValueIndexed3Case : public TestCase 151cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 152cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 153cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry MinValueIndexed3Case (Context& context, const char* name, const char* desc, glw::GLenum target, const tcu::IVec3& ref, QueryType verifierType); 154cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 155cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 156cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 157cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 158cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLenum m_target; 159cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::IVec3 m_ref; 160cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 161cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 162cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 163cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryMinValueIndexed3Case::MinValueIndexed3Case (Context& context, const char* name, const char* desc, glw::GLenum target, const tcu::IVec3& ref, QueryType verifierType) 164cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 165cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_target (target) 166cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_ref (ref) 167cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 168cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 169cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 170cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 171cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryMinValueIndexed3Case::IterateResult MinValueIndexed3Case::iterate (void) 172cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 173cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 174cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 175cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 176cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 177cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 178cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < 3; ++ndx) 179cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 180cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Element", "Element " + de::toString(ndx)); 181cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 182cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedIntegerMin(result, gl, m_target, ndx, m_ref[ndx], m_verifierType); 183cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 184cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 185cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 186cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 187cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 188cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 189cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass BufferBindingCase : public TestCase 190cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 191cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 192cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry BufferBindingCase (Context& context, const char* name, const char* desc, glw::GLenum queryTarget, glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType); 193cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 194cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 195cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 196cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 197cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLenum m_queryTarget; 198cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLenum m_bufferTarget; 199cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLenum m_numBindingsTarget; 200cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 201cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 202cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 203cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryBufferBindingCase::BufferBindingCase (Context& context, const char* name, const char* desc, glw::GLenum queryTarget, glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType) 204cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 205cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_queryTarget (queryTarget) 206cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_bufferTarget (bufferTarget) 207cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_numBindingsTarget (numBindingsTarget) 208cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 209cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 210cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 211cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 212cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryBufferBindingCase::IterateResult BufferBindingCase::iterate (void) 213cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 214cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 215cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 216cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int maxBindings = -1; 217cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 218cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 219cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 220cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glGetIntegerv(m_numBindingsTarget, &maxBindings); 221cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 222cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 223cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 224cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 225cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 226cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < maxBindings; ++ndx) 227cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndx, 0, m_verifierType); 228cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 229cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 230cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 231cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSetting", "After setting"); 232cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Buffer bufferA (m_context.getRenderContext()); 233cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Buffer bufferB (m_context.getRenderContext()); 234cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxA = 0; 235cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxB = maxBindings / 2; 236cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 237cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 238cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Generic", "After setting generic binding point"); 239cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 240cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBuffer(m_bufferTarget, *bufferA); 241cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glBindBuffer"); 242cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 243cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, 0, 0, m_verifierType); 244cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 245cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 246cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferBase"); 247cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 248cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBufferBase(m_bufferTarget, ndxA, *bufferA); 249cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glBindBufferBase"); 250cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 251cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, *bufferA, m_verifierType); 252cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 253cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 254cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferRange"); 255cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 256cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBufferRange(m_bufferTarget, ndxB, *bufferB, 0, 8); 257cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glBindBufferRange"); 258cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 259cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndxB, *bufferB, m_verifierType); 260cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 261cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry if (ndxA != ndxB) 262cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 263cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "DifferentStates", "Original state did not change"); 264cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 265cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, *bufferA, m_verifierType); 266cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 267cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 268cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 269cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 270cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 271cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 272cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 273cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass BufferStartCase : public TestCase 274cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 275cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 276cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry BufferStartCase (Context& context, const char* name, const char* desc, glw::GLenum queryTarget, glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType); 277cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 278cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 279cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 280cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 281cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLenum m_queryTarget; 282cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLenum m_bufferTarget; 283cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLenum m_numBindingsTarget; 284cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 285cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 286cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 287cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryBufferStartCase::BufferStartCase (Context& context, const char* name, const char* desc, glw::GLenum queryTarget, glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType) 288cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 289cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_queryTarget (queryTarget) 290cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_bufferTarget (bufferTarget) 291cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_numBindingsTarget (numBindingsTarget) 292cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 293cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 294cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 295cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 296cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryBufferStartCase::IterateResult BufferStartCase::iterate (void) 297cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 298cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 299cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 300cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int maxBindings = -1; 301cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 302cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 303cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 304cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glGetIntegerv(m_numBindingsTarget, &maxBindings); 305cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 306cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 307cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 308cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 309cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 310cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < maxBindings; ++ndx) 311cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndx, 0, m_verifierType); 312cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 313cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 314cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 315cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 316cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSetting", "After setting"); 317cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Buffer bufferA (m_context.getRenderContext()); 318cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Buffer bufferB (m_context.getRenderContext()); 319cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxA = 0; 320cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxB = maxBindings / 2; 321cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int offset = -1; 322cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 323cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry if (m_bufferTarget == GL_ATOMIC_COUNTER_BUFFER) 324cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry offset = 4; 325cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry else if (m_bufferTarget == GL_SHADER_STORAGE_BUFFER) 326cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 327cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glGetIntegerv(GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, &offset); 328cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "get align"); 329cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 330012f21ddfb2c86a2960edd65a3f0ea8f1fcd7832Jarkko Pöyry else 331012f21ddfb2c86a2960edd65a3f0ea8f1fcd7832Jarkko Pöyry DE_ASSERT(false); 332cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 333012f21ddfb2c86a2960edd65a3f0ea8f1fcd7832Jarkko Pöyry TCU_CHECK(offset >= 0); 334cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 335cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 336cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Generic", "After setting generic binding point"); 337cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 338cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBuffer(m_bufferTarget, *bufferA); 339cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBufferData(m_bufferTarget, 16, DE_NULL, GL_DYNAMIC_READ); 340cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBuffer(m_bufferTarget, *bufferB); 341cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBufferData(m_bufferTarget, 32, DE_NULL, GL_DYNAMIC_READ); 342cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen bufs"); 343cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 344cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, 0, 0, m_verifierType); 345cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 346cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 347cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferBase"); 348cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 349cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBufferBase(m_bufferTarget, ndxA, *bufferA); 350cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind buf"); 351cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 352cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, 0, m_verifierType); 353cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 354cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 355cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferRange"); 356cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 357cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBufferRange(m_bufferTarget, ndxB, *bufferB, offset, 8); 358cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind buf"); 359cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 360cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndxB, offset, m_verifierType); 361cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 362cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry if (ndxA != ndxB) 363cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 364cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "DifferentStates", "Original state did not change"); 365cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 366cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, 0, m_verifierType); 367cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 368cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 369cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 370cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 371cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 372cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 373cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 374cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass BufferSizeCase : public TestCase 375cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 376cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 377cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry BufferSizeCase (Context& context, const char* name, const char* desc, glw::GLenum queryTarget, glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType); 378cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 379cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 380cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 381cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 382cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLenum m_queryTarget; 383cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLenum m_bufferTarget; 384cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const glw::GLenum m_numBindingsTarget; 385cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 386cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 387cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 388cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryBufferSizeCase::BufferSizeCase (Context& context, const char* name, const char* desc, glw::GLenum queryTarget, glw::GLenum bufferTarget, glw::GLenum numBindingsTarget, QueryType verifierType) 389cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 390cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_queryTarget (queryTarget) 391cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_bufferTarget (bufferTarget) 392cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_numBindingsTarget (numBindingsTarget) 393cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 394cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 395cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 396cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 397cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryBufferSizeCase::IterateResult BufferSizeCase::iterate (void) 398cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 399cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 400cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 401cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int maxBindings = -1; 402cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 403cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 404cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 405cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glGetIntegerv(m_numBindingsTarget, &maxBindings); 406cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 407cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 408cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 409cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 410cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 411cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < maxBindings; ++ndx) 412cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndx, 0, m_verifierType); 413cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 414cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 415cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 416cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSetting", "After setting"); 417cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Buffer bufferA (m_context.getRenderContext()); 418cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Buffer bufferB (m_context.getRenderContext()); 419cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxA = 0; 420cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxB = maxBindings / 2; 421cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 422cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 423cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Generic", "After setting generic binding point"); 424cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 425cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBuffer(m_bufferTarget, *bufferA); 426cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBufferData(m_bufferTarget, 16, DE_NULL, GL_DYNAMIC_READ); 427cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBuffer(m_bufferTarget, *bufferB); 428cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBufferData(m_bufferTarget, 32, DE_NULL, GL_DYNAMIC_READ); 429cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen bufs"); 430cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 431cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, 0, 0, m_verifierType); 432cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 433cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 434cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferBase"); 435cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 436cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBufferBase(m_bufferTarget, ndxA, *bufferA); 437cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind buf"); 438cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 439cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, 0, m_verifierType); 440cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 441cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 442cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Indexed", "After setting with glBindBufferRange"); 443cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 444cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindBufferRange(m_bufferTarget, ndxB, *bufferB, 0, 8); 445cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind buf"); 446cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 447cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndxB, 8, m_verifierType); 448cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 449cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry if (ndxA != ndxB) 450cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 451cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "DifferentStates", "Original state did not change"); 452cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 453cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, m_queryTarget, ndxA, 0, m_verifierType); 454cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 455cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 456cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 457cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 458cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 459cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 460cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 461cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass ImageBindingNameCase : public TestCase 462cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 463cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 464cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry ImageBindingNameCase (Context& context, const char* name, const char* desc, QueryType verifierType); 465cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 466cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 467cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 468cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 469cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 470cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 471cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 472cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingNameCase::ImageBindingNameCase (Context& context, const char* name, const char* desc, QueryType verifierType) 473cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 474cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 475cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 476cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 477cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 478cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingNameCase::IterateResult ImageBindingNameCase::iterate (void) 479cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 480cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 481cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 482cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int maxImages = -1; 483cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 484cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 485cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 486cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages); 487cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 488cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 489cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 490cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 491cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 492cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < maxImages; ++ndx) 493cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_NAME, ndx, 0, m_verifierType); 494cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 495cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 496cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 497cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSetting", "After setting"); 498cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureA (m_context.getRenderContext()); 499cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureB (m_context.getRenderContext()); 500cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxA = 0; 501cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxB = maxImages / 2; 502cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 503cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D, *textureA); 504cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32); 505cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 506cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 507cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI); 508cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 509cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 510cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D_ARRAY, *textureB); 511cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 32, 32, 4); 512cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 513cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 514cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxB, *textureB, 0, GL_FALSE, 2, GL_READ_ONLY, GL_RGBA8UI); 515cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 516cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 517cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_NAME, ndxA, *textureA, m_verifierType); 518cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_NAME, ndxB, *textureB, m_verifierType); 519cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 520cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 521cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 522cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 523cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 524cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 525cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass ImageBindingLevelCase : public TestCase 526cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 527cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 528cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry ImageBindingLevelCase (Context& context, const char* name, const char* desc, QueryType verifierType); 529cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 530cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 531cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 532cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 533cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 534cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 535cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 536cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingLevelCase::ImageBindingLevelCase (Context& context, const char* name, const char* desc, QueryType verifierType) 537cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 538cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 539cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 540cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 541cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 542cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingLevelCase::IterateResult ImageBindingLevelCase::iterate (void) 543cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 544cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 545cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 546cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int maxImages = -1; 547cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 548cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 549cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 550cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages); 551cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 552cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 553cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 554cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 555cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 556cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < maxImages; ++ndx) 557cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LEVEL, ndx, 0, m_verifierType); 558cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 559cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 560cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 561cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSetting", "After setting"); 562cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureA (m_context.getRenderContext()); 563cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureB (m_context.getRenderContext()); 564cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxA = 0; 565cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxB = maxImages / 2; 566cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 567cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D, *textureA); 568cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32); 569cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 570cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 571cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI); 572cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 573cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 574cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D, *textureB); 575cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage2D(GL_TEXTURE_2D, 3, GL_RGBA8, 32, 32); 576cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 577cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 578cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxB, *textureB, 2, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI); 579cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 580cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 581cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LEVEL, ndxA, 0, m_verifierType); 582cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LEVEL, ndxB, 2, m_verifierType); 583cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 584cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 585cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 586cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 587cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 588cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 589cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass ImageBindingLayeredCase : public TestCase 590cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 591cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 592cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry ImageBindingLayeredCase (Context& context, const char* name, const char* desc, QueryType verifierType); 593cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 594cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 595cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 596cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 597cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 598cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 599cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 600cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingLayeredCase::ImageBindingLayeredCase (Context& context, const char* name, const char* desc, QueryType verifierType) 601cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 602cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 603cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 604cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 605cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 606cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingLayeredCase::IterateResult ImageBindingLayeredCase::iterate (void) 607cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 608cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 609cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 610cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int maxImages = -1; 611cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 612cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 613cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 614cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages); 615cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 616cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 617cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 618cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 619cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 620cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < maxImages; ++ndx) 621cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedBoolean(result, gl, GL_IMAGE_BINDING_LAYERED, ndx, false, m_verifierType); 622cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 623cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 624cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 625cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSetting", "After setting"); 626cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureA (m_context.getRenderContext()); 627cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureB (m_context.getRenderContext()); 628cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxA = 0; 629cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxB = maxImages / 2; 630cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 631cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D, *textureA); 632cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32); 633cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 634cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 635cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI); 636cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 637cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 638cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D_ARRAY, *textureB); 639cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 32, 32, 4); 640cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 641cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 642cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxB, *textureB, 0, GL_TRUE, 2, GL_READ_ONLY, GL_RGBA8UI); 643cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 644cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 645cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedBoolean(result, gl, GL_IMAGE_BINDING_LAYERED, ndxA, false, m_verifierType); 646cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedBoolean(result, gl, GL_IMAGE_BINDING_LAYERED, ndxB, true, m_verifierType); 647cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 648cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 649cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 650cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 651cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 652cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 653cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass ImageBindingLayerCase : public TestCase 654cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 655cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 656cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry ImageBindingLayerCase (Context& context, const char* name, const char* desc, QueryType verifierType); 657cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 658cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 659cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 660cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 661cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 662cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 663cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 664cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingLayerCase::ImageBindingLayerCase (Context& context, const char* name, const char* desc, QueryType verifierType) 665cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 666cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 667cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 668cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 669cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 670cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingLayerCase::IterateResult ImageBindingLayerCase::iterate (void) 671cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 672cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 673cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 674cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int maxImages = -1; 675cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 676cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 677cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 678cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages); 679cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 680cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 681cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 682cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 683cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 684cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < maxImages; ++ndx) 685cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LAYER, ndx, 0, m_verifierType); 686cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 687cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 688cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 689cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSetting", "After setting"); 690cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureA (m_context.getRenderContext()); 691cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureB (m_context.getRenderContext()); 692cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxA = 0; 693cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxB = maxImages / 2; 694cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 695cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D, *textureA); 696cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32); 697cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 698cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 699cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI); 700cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 701cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 702cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D_ARRAY, *textureB); 703cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 32, 32, 4); 704cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 705cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 706cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxB, *textureB, 0, GL_TRUE, 2, GL_READ_ONLY, GL_RGBA8UI); 707cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 708cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 709cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LAYER, ndxA, 0, m_verifierType); 710cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_LAYER, ndxB, 2, m_verifierType); 711cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 712cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 713cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 714cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 715cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 716cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 717cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass ImageBindingAccessCase : public TestCase 718cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 719cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 720cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry ImageBindingAccessCase (Context& context, const char* name, const char* desc, QueryType verifierType); 721cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 722cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 723cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 724cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 725cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 726cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 727cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 728cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingAccessCase::ImageBindingAccessCase (Context& context, const char* name, const char* desc, QueryType verifierType) 729cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 730cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 731cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 732cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 733cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 734cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingAccessCase::IterateResult ImageBindingAccessCase::iterate (void) 735cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 736cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 737cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 738cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int maxImages = -1; 739cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 740cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 741cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 742cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages); 743cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 744cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 745cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 746cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 747cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 748cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < maxImages; ++ndx) 749cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_ACCESS, ndx, GL_READ_ONLY, m_verifierType); 750cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 751cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 752cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 753cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSetting", "After setting"); 754cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureA (m_context.getRenderContext()); 755cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureB (m_context.getRenderContext()); 756cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxA = 0; 757cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxB = maxImages / 2; 758cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 759cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D, *textureA); 760cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32); 761cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 762cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 763cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI); 764cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 765cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 766cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D_ARRAY, *textureB); 767cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, 32, 32, 4); 768cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 769cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 770cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxB, *textureB, 0, GL_TRUE, 2, GL_READ_WRITE, GL_RGBA8UI); 771cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 772cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 773cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_ACCESS, ndxA, GL_READ_ONLY, m_verifierType); 774cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_ACCESS, ndxB, GL_READ_WRITE, m_verifierType); 775cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 776cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 777cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 778cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 779cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 780cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 781cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryclass ImageBindingFormatCase : public TestCase 782cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 783cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyrypublic: 784cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry ImageBindingFormatCase (Context& context, const char* name, const char* desc, QueryType verifierType); 785cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 786cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryprivate: 787cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry IterateResult iterate (void); 788cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 789cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType m_verifierType; 790cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry}; 791cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 792cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingFormatCase::ImageBindingFormatCase (Context& context, const char* name, const char* desc, QueryType verifierType) 793cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCase (context, name, desc) 794cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry , m_verifierType (verifierType) 795cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 796cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 797cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 798cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryImageBindingFormatCase::IterateResult ImageBindingFormatCase::iterate (void) 799cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 800cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 801cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 802cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry int maxImages = -1; 803cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 804cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.enableLogging(true); 805cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 806cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glGetIntegerv(GL_MAX_IMAGE_UNITS, &maxImages); 807cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 808cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 809cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 810cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 811cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 812cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int ndx = 0; ndx < maxImages; ++ndx) 813cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_FORMAT, ndx, GL_R32UI, m_verifierType); 814cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 815cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 816cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { 817cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSetting", "After setting"); 818cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureA (m_context.getRenderContext()); 819cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry glu::Texture textureB (m_context.getRenderContext()); 820cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxA = 0; 821cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const int ndxB = maxImages / 2; 822cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 823cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D, *textureA); 824cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, 32, 32); 825cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 826cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 827cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxA, *textureA, 0, GL_FALSE, 0, GL_READ_ONLY, GL_RGBA8UI); 828cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 829cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 830cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindTexture(GL_TEXTURE_2D_ARRAY, *textureB); 831cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_R32F, 32, 32, 4); 832cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "gen tex"); 833cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 834cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry gl.glBindImageTexture(ndxB, *textureB, 0, GL_TRUE, 2, GL_READ_WRITE, GL_R32F); 835cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.glGetError(), "bind unit"); 836cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 837cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_FORMAT, ndxA, GL_RGBA8UI, m_verifierType); 838cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry verifyStateIndexedInteger(result, gl, GL_IMAGE_BINDING_FORMAT, ndxB, GL_R32F, m_verifierType); 839cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 840cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 841cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry result.setTestContextResult(m_testCtx); 842cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry return STOP; 843cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 844cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 845591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärviclass EnableBlendCase : public TestCase 846591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 847591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvipublic: 848591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi EnableBlendCase (Context& context, const char* name, const char* desc, QueryType verifierType); 849591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 850591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi void init (void); 851591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärviprivate: 852591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi IterateResult iterate (void); 853591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 854591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const QueryType m_verifierType; 855591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi}; 856591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 857591173f18359cabb0d9d88adf3eeb381a21ffc04Mika IsojärviEnableBlendCase::EnableBlendCase (Context& context, const char* name, const char* desc, QueryType verifierType) 858591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi : TestCase (context, name, desc) 859591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi , m_verifierType (verifierType) 860591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 861591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 862591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 863591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvivoid EnableBlendCase::init (void) 864591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 865591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed")) 866591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi throw tcu::NotSupportedError("Extension GL_EXT_draw_buffers_indexed not supported", "", __FILE__, __LINE__); 867591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 868591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 869591173f18359cabb0d9d88adf3eeb381a21ffc04Mika IsojärviEnableBlendCase::IterateResult EnableBlendCase::iterate (void) 870591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 871591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 872591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 873591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi deInt32 maxDrawBuffers = 0; 874591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 875591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.enableLogging(true); 876591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 877591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers); 878591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 879591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 880591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 881591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 882591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 883591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 884591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedBoolean(result, gl, GL_BLEND, ndx, false, m_verifierType); 885591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 886591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 887591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSettingCommon", "After setting common"); 888591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 889591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glEnable(GL_BLEND); 890591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 891591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 892591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedBoolean(result, gl, GL_BLEND, ndx, true, m_verifierType); 893591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 894591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 895591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 896591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterSettingIndexed", "After setting indexed"); 897591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 898591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 899591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 900591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi if (ndx % 2 == 0) 901591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glEnablei(GL_BLEND, ndx); 902591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi else 903591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glDisablei(GL_BLEND, ndx); 904591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 905591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 906591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 907591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedBoolean(result, gl, GL_BLEND, ndx, (ndx % 2 == 0), m_verifierType); 908591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 909591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 910591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection superSection (m_testCtx.getLog(), "AfterResettingIndexedWithCommon", "After resetting indexed with common"); 911591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 912591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 913591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 914591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi if (ndx % 2 == 0) 915591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glEnablei(GL_BLEND, ndx); 916591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi else 917591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glDisablei(GL_BLEND, ndx); 918591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 919591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 920591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glEnable(GL_BLEND); 921591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 922591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 923591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedBoolean(result, gl, GL_BLEND, ndx, true, m_verifierType); 924591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 925591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 926591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi result.setTestContextResult(m_testCtx); 927591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi return STOP; 928591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 929591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 930591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärviclass ColorMaskCase : public TestCase 931591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 932591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvipublic: 933591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi ColorMaskCase (Context& context, const char* name, const char* desc, QueryType verifierType); 934591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 935591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi void init (void); 936591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärviprivate: 937591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi IterateResult iterate (void); 938591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 939591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const QueryType m_verifierType; 940591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi}; 941591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 942591173f18359cabb0d9d88adf3eeb381a21ffc04Mika IsojärviColorMaskCase::ColorMaskCase (Context& context, const char* name, const char* desc, QueryType verifierType) 943591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi : TestCase (context, name, desc) 944591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi , m_verifierType (verifierType) 945591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 946591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 947591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 948591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvivoid ColorMaskCase::init (void) 949591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 950591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed")) 951591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi throw tcu::NotSupportedError("Extension GL_EXT_draw_buffers_indexed not supported", "", __FILE__, __LINE__); 952591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 953591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 954591173f18359cabb0d9d88adf3eeb381a21ffc04Mika IsojärviColorMaskCase::IterateResult ColorMaskCase::iterate (void) 955591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 956591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 957591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 958591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi deInt32 maxDrawBuffers = 0; 959591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 960591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.enableLogging(true); 961591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 962591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers); 963591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 964591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 965591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 966591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 967591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 968591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 969591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedBooleanVec4(result, gl, GL_COLOR_WRITEMASK, ndx, tcu::BVec4(true), m_verifierType); 970591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 971591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 972591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingCommon", "After setting common"); 973591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 974591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE); 975591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 976591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 977591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedBooleanVec4(result, gl, GL_COLOR_WRITEMASK, ndx, tcu::BVec4(false, true, true, false), m_verifierType); 978591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 979591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 980591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingIndexed", "After setting indexed"); 981591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 982591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 983591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glColorMaski(ndx, (ndx % 2 == 0 ? GL_TRUE : GL_FALSE), (ndx % 2 == 1 ? GL_TRUE : GL_FALSE), (ndx % 2 == 0 ? GL_TRUE : GL_FALSE), (ndx % 2 == 1 ? GL_TRUE : GL_FALSE)); 984591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 985591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 986591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedBooleanVec4(result, gl, GL_COLOR_WRITEMASK, ndx, (ndx % 2 == 0 ? tcu::BVec4(true, false, true, false) : tcu::BVec4(false, true, false, true)), m_verifierType); 987591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 988591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 989591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterResettingIndexedWithCommon", "After resetting indexed with common"); 990591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 991591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 992591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glColorMaski(ndx, (ndx % 2 == 0 ? GL_TRUE : GL_FALSE), (ndx % 2 == 1 ? GL_TRUE : GL_FALSE), (ndx % 2 == 0 ? GL_TRUE : GL_FALSE), (ndx % 2 == 1 ? GL_TRUE : GL_FALSE)); 993591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 994591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE); 995591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 996591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 997591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedBooleanVec4(result, gl, GL_COLOR_WRITEMASK, ndx, tcu::BVec4(false, true, true, false), m_verifierType); 998591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 999591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1000591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi result.setTestContextResult(m_testCtx); 1001591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi return STOP; 1002591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 1003591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1004591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärviclass BlendFuncCase : public TestCase 1005591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1006591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvipublic: 1007591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi BlendFuncCase (Context& context, const char* name, const char* desc, QueryType verifierType); 1008591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1009591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi void init (void); 1010591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärviprivate: 1011591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi IterateResult iterate (void); 1012591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1013591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const QueryType m_verifierType; 1014591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi}; 1015591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1016591173f18359cabb0d9d88adf3eeb381a21ffc04Mika IsojärviBlendFuncCase::BlendFuncCase (Context& context, const char* name, const char* desc, QueryType verifierType) 1017591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi : TestCase (context, name, desc) 1018591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi , m_verifierType (verifierType) 1019591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1020591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 1021591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1022591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvivoid BlendFuncCase::init (void) 1023591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1024591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed")) 1025591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi throw tcu::NotSupportedError("Extension GL_EXT_draw_buffers_indexed not supported", "", __FILE__, __LINE__); 1026591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 1027591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1028591173f18359cabb0d9d88adf3eeb381a21ffc04Mika IsojärviBlendFuncCase::IterateResult BlendFuncCase::iterate (void) 1029591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1030591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const deUint32 blendFuncs[] = 1031591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1032591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_ZERO, 1033591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_ONE, 1034591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_SRC_COLOR, 1035591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_ONE_MINUS_SRC_COLOR, 1036591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_DST_COLOR, 1037591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_ONE_MINUS_DST_COLOR, 1038591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_SRC_ALPHA, 1039591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_ONE_MINUS_SRC_ALPHA, 1040591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_DST_ALPHA, 1041591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_ONE_MINUS_DST_ALPHA, 1042591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_CONSTANT_COLOR, 1043591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_ONE_MINUS_CONSTANT_COLOR, 1044591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_CONSTANT_ALPHA, 1045591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_ONE_MINUS_CONSTANT_ALPHA, 1046591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_SRC_ALPHA_SATURATE 1047591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi }; 1048591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1049591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 1050591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 1051591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi deInt32 maxDrawBuffers = 0; 1052591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1053591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.enableLogging(true); 1054591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1055591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers); 1056591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 1057591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1058591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1059591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 1060591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1061591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1062591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, GL_ONE, m_verifierType); 1063591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1064591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1065591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, GL_ZERO, m_verifierType); 1066591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1067591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1068591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, GL_ONE, m_verifierType); 1069591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1070591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1071591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, GL_ZERO, m_verifierType); 1072591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1073591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1074591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingCommon", "After setting common"); 1075591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1076591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA); 1077591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1078591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1079591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, GL_SRC_ALPHA, m_verifierType); 1080591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1081591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1082591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, GL_DST_ALPHA, m_verifierType); 1083591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1084591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1085591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, GL_SRC_ALPHA, m_verifierType); 1086591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1087591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1088591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, GL_DST_ALPHA, m_verifierType); 1089591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1090591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1091591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingCommonSeparate", "After setting common separate"); 1092591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1093591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendFuncSeparate(GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA); 1094591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1095591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1096591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, GL_SRC_COLOR, m_verifierType); 1097591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1098591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1099591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, GL_ONE_MINUS_SRC_ALPHA, m_verifierType); 1100591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1101591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1102591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, GL_DST_COLOR, m_verifierType); 1103591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1104591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1105591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, GL_ONE_MINUS_DST_ALPHA, m_verifierType); 1106591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1107591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1108591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingIndexed", "After setting indexed"); 1109591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1110591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1111591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendFunci(ndx, blendFuncs[ndx % DE_LENGTH_OF_ARRAY(blendFuncs)], blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)]); 1112591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1113591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1114591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, blendFuncs[ndx % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType); 1115591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1116591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1117591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType); 1118591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1119591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1120591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, blendFuncs[ndx % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType); 1121591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1122591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1123591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType); 1124591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1125591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1126591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingIndexedSeparate", "After setting indexed separate"); 1127591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1128591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1129591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendFuncSeparatei(ndx, blendFuncs[(ndx + 3) % DE_LENGTH_OF_ARRAY(blendFuncs)], 1130591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi blendFuncs[(ndx + 2) % DE_LENGTH_OF_ARRAY(blendFuncs)], 1131591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)], 1132591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi blendFuncs[(ndx + 0) % DE_LENGTH_OF_ARRAY(blendFuncs)]); 1133591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1134591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1135591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, blendFuncs[(ndx + 3) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType); 1136591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1137591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1138591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, blendFuncs[(ndx + 2) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType); 1139591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1140591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1141591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType); 1142591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1143591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1144591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, blendFuncs[(ndx + 0) % DE_LENGTH_OF_ARRAY(blendFuncs)], m_verifierType); 1145591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1146591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1147591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1148591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterResettingIndexedWithCommon", "After resetting indexed with common"); 1149591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1150591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1151591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendFunci(ndx, blendFuncs[ndx % DE_LENGTH_OF_ARRAY(blendFuncs)], blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)]); 1152591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1153591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA); 1154591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1155591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1156591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, GL_SRC_ALPHA, m_verifierType); 1157591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1158591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1159591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, GL_DST_ALPHA, m_verifierType); 1160591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1161591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1162591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, GL_SRC_ALPHA, m_verifierType); 1163591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1164591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1165591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, GL_DST_ALPHA, m_verifierType); 1166591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1167591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1168591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterResettingIndexedWithCommonSeparate", "After resetting indexed with common separate"); 1169591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1170591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendFuncSeparate(GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA); 1171591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1172591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1173591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendFuncSeparatei(ndx, blendFuncs[(ndx + 3) % DE_LENGTH_OF_ARRAY(blendFuncs)], 1174591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi blendFuncs[(ndx + 2) % DE_LENGTH_OF_ARRAY(blendFuncs)], 1175591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi blendFuncs[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendFuncs)], 1176591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi blendFuncs[(ndx + 0) % DE_LENGTH_OF_ARRAY(blendFuncs)]); 1177591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1178591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendFuncSeparate(GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA); 1179591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1180591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1181591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_RGB, ndx, GL_SRC_COLOR, m_verifierType); 1182591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1183591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1184591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_RGB, ndx, GL_ONE_MINUS_SRC_ALPHA, m_verifierType); 1185591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1186591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1187591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_SRC_ALPHA, ndx, GL_DST_COLOR, m_verifierType); 1188591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1189591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1190591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_DST_ALPHA, ndx, GL_ONE_MINUS_DST_ALPHA, m_verifierType); 1191591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1192591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1193591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi result.setTestContextResult(m_testCtx); 1194591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi return STOP; 1195591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 1196591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1197591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärviclass BlendEquationCase : public TestCase 1198591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1199591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvipublic: 1200591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi BlendEquationCase (Context& context, const char* name, const char* desc, QueryType verifierType); 1201591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1202591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi void init (void); 1203591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärviprivate: 1204591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi IterateResult iterate (void); 1205591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1206591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const QueryType m_verifierType; 1207591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi}; 1208591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1209591173f18359cabb0d9d88adf3eeb381a21ffc04Mika IsojärviBlendEquationCase::BlendEquationCase (Context& context, const char* name, const char* desc, QueryType verifierType) 1210591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi : TestCase (context, name, desc) 1211591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi , m_verifierType (verifierType) 1212591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1213591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 1214591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1215591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvivoid BlendEquationCase::init (void) 1216591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1217591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed")) 1218591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi throw tcu::NotSupportedError("Extension GL_EXT_draw_buffers_indexed not supported", "", __FILE__, __LINE__); 1219591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 1220591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1221591173f18359cabb0d9d88adf3eeb381a21ffc04Mika IsojärviBlendEquationCase::IterateResult BlendEquationCase::iterate (void) 1222591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1223591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const deUint32 blendEquations[] = 1224591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1225591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_FUNC_ADD, 1226591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_FUNC_SUBTRACT, 1227591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_FUNC_REVERSE_SUBTRACT, 1228591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_MIN, 1229591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_MAX 1230591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi }; 1231591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1232591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 1233591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 1234591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi deInt32 maxDrawBuffers = 0; 1235591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1236591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.enableLogging(true); 1237591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1238591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers); 1239591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 1240591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1241591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1242591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section(m_testCtx.getLog(), "Initial", "Initial value"); 1243591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1244591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1245591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_FUNC_ADD, m_verifierType); 1246591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1247591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1248591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_FUNC_ADD, m_verifierType); 1249591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1250591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1251591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingCommon", "After setting common"); 1252591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1253591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquation(GL_FUNC_SUBTRACT); 1254591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1255591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1256591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_FUNC_SUBTRACT, m_verifierType); 1257591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1258591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1259591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_FUNC_SUBTRACT, m_verifierType); 1260591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1261591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1262591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingCommonSeparate", "After setting common separate"); 1263591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1264591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquationSeparate(GL_FUNC_REVERSE_SUBTRACT, GL_FUNC_SUBTRACT); 1265591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1266591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1267591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_FUNC_REVERSE_SUBTRACT, m_verifierType); 1268591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1269591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1270591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_FUNC_SUBTRACT, m_verifierType); 1271591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1272591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1273591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingIndexed", "After setting indexed"); 1274591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1275591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1276591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquationi(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)]); 1277591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1278591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1279591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)], m_verifierType); 1280591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1281591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1282591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)], m_verifierType); 1283591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1284591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1285591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingIndexedSeparate", "After setting indexed separate"); 1286591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1287591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1288591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquationSeparatei(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)], blendEquations[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendEquations)]); 1289591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1290591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1291591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)], m_verifierType); 1292591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1293591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1294591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, blendEquations[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendEquations)], m_verifierType); 1295591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1296591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1297591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterResettingIndexedWithCommon", "After resetting indexed with common"); 1298591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1299591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1300591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquationi(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)]); 1301591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1302591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquation(GL_FUNC_SUBTRACT); 1303591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1304591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1305591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_FUNC_SUBTRACT, m_verifierType); 1306591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1307591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1308591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_FUNC_SUBTRACT, m_verifierType); 1309591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1310591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1311591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterResettingIndexedWithCommonSeparate", "After resetting indexed with common separate"); 1312591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1313591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1314591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquationSeparatei(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)], blendEquations[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendEquations)]); 1315591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1316591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquationSeparate(GL_FUNC_REVERSE_SUBTRACT, GL_FUNC_SUBTRACT); 1317591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1318591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1319591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_FUNC_REVERSE_SUBTRACT, m_verifierType); 1320591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1321591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1322591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_FUNC_SUBTRACT, m_verifierType); 1323591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1324591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1325591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi result.setTestContextResult(m_testCtx); 1326591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi return STOP; 1327591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 1328591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1329591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärviclass BlendEquationAdvancedCase : public TestCase 1330591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1331591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvipublic: 1332591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi BlendEquationAdvancedCase (Context& context, const char* name, const char* desc, QueryType verifierType); 1333591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1334591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi void init (void); 1335591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärviprivate: 1336591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi IterateResult iterate (void); 1337591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1338591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const QueryType m_verifierType; 1339591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi}; 1340591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1341591173f18359cabb0d9d88adf3eeb381a21ffc04Mika IsojärviBlendEquationAdvancedCase::BlendEquationAdvancedCase (Context& context, const char* name, const char* desc, QueryType verifierType) 1342591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi : TestCase (context, name, desc) 1343591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi , m_verifierType (verifierType) 1344591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1345591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 1346591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1347591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvivoid BlendEquationAdvancedCase::init (void) 1348591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1349591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_draw_buffers_indexed")) 1350591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi throw tcu::NotSupportedError("Extension GL_EXT_draw_buffers_indexed not supported", "", __FILE__, __LINE__); 1351591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1352591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi if (!m_context.getContextInfo().isExtensionSupported("GL_KHR_blend_equation_advanced")) 1353591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi throw tcu::NotSupportedError("Extension GL_KHR_blend_equation_advanced not supported", "", __FILE__, __LINE__); 1354591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 1355591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1356591173f18359cabb0d9d88adf3eeb381a21ffc04Mika IsojärviBlendEquationAdvancedCase::IterateResult BlendEquationAdvancedCase::iterate (void) 1357591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi{ 1358591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const deUint32 blendEquations[] = 1359591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1360591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_FUNC_ADD, 1361591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_FUNC_SUBTRACT, 1362591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_FUNC_REVERSE_SUBTRACT, 1363591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_MIN, 1364591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_MAX 1365591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi }; 1366591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1367591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const deUint32 blendEquationAdvanced[] = 1368591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1369591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_MULTIPLY_KHR, 1370591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_SCREEN_KHR, 1371591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_OVERLAY_KHR, 1372591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_DARKEN_KHR, 1373591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_LIGHTEN_KHR, 1374591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_COLORDODGE_KHR, 1375591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_COLORBURN_KHR, 1376591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_HARDLIGHT_KHR, 1377591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_SOFTLIGHT_KHR, 1378591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_DIFFERENCE_KHR, 1379591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_EXCLUSION_KHR, 1380591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_HSL_HUE_KHR, 1381591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_HSL_SATURATION_KHR, 1382591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_HSL_COLOR_KHR, 1383591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GL_HSL_LUMINOSITY_KHR 1384591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi }; 1385591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1386591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 1387591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi tcu::ResultCollector result (m_testCtx.getLog(), " // ERROR: "); 1388591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi deInt32 maxDrawBuffers = 0; 1389591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1390591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.enableLogging(true); 1391591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1392591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBuffers); 1393591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi GLU_EXPECT_NO_ERROR(gl.glGetError(), "glGetIntegerv"); 1394591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1395591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1396591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingCommon", "After setting common"); 1397591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1398591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquation(GL_SCREEN_KHR); 1399591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1400591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1401591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_SCREEN_KHR, m_verifierType); 1402591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1403591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1404591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_SCREEN_KHR, m_verifierType); 1405591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1406591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1407591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterSettingIndexed", "After setting indexed"); 1408591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1409591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1410591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquationi(ndx, blendEquationAdvanced[ndx % DE_LENGTH_OF_ARRAY(blendEquationAdvanced)]); 1411591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1412591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1413591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, blendEquationAdvanced[ndx % DE_LENGTH_OF_ARRAY(blendEquationAdvanced)], m_verifierType); 1414591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1415591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1416591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, blendEquationAdvanced[ndx % DE_LENGTH_OF_ARRAY(blendEquationAdvanced)], m_verifierType); 1417591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1418591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1419591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterResettingIndexedWithCommon", "After resetting indexed with common"); 1420591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1421591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1422591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquationi(ndx, blendEquationAdvanced[ndx % DE_LENGTH_OF_ARRAY(blendEquationAdvanced)]); 1423591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1424591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquation(GL_MULTIPLY_KHR); 1425591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1426591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1427591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_MULTIPLY_KHR, m_verifierType); 1428591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1429591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1430591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_MULTIPLY_KHR, m_verifierType); 1431591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1432591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1433591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const tcu::ScopedLogSection section (m_testCtx.getLog(), "AfterResettingIndexedSeparateWithCommon", "After resetting indexed separate with common"); 1434591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1435591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1436591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquationSeparatei(ndx, blendEquations[ndx % DE_LENGTH_OF_ARRAY(blendEquations)], blendEquations[(ndx + 1) % DE_LENGTH_OF_ARRAY(blendEquations)]); 1437591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1438591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi gl.glBlendEquation(GL_LIGHTEN_KHR); 1439591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1440591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1441591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_RGB, ndx, GL_LIGHTEN_KHR, m_verifierType); 1442591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1443591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int ndx = 0; ndx < maxDrawBuffers; ++ndx) 1444591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi verifyStateIndexedInteger(result, gl, GL_BLEND_EQUATION_ALPHA, ndx, GL_LIGHTEN_KHR, m_verifierType); 1445591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1446591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1447591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi result.setTestContextResult(m_testCtx); 1448591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi return STOP; 1449591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi} 1450591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1451cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} // anonymous 1452cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1453cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryIndexedStateQueryTests::IndexedStateQueryTests (Context& context) 1454cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry : TestCaseGroup(context, "indexed", "Indexed state queries") 1455cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 1456cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 1457cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1458cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko PöyryIndexedStateQueryTests::~IndexedStateQueryTests (void) 1459cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 1460cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 1461cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1462cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyryvoid IndexedStateQueryTests::init (void) 1463cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry{ 1464cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry static const QueryType verifiers[] = { QUERY_INDEXED_BOOLEAN, QUERY_INDEXED_INTEGER, QUERY_INDEXED_INTEGER64 }; 1465591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi static const QueryType vec4Verifiers[] = { QUERY_INDEXED_BOOLEAN_VEC4, QUERY_INDEXED_INTEGER_VEC4, QUERY_INDEXED_INTEGER64_VEC4 }; 1466cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1467cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#define FOR_EACH_VERIFIER(X) \ 1468cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(verifiers); ++verifierNdx) \ 1469cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry { \ 1470cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry const QueryType verifier = verifiers[verifierNdx]; \ 1471591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const char* verifierSuffix = getVerifierSuffix(verifier); \ 1472cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry this->addChild(X); \ 1473cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry } 1474cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1475591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi#define FOR_EACH_VEC4_VERIFIER(X) \ 1476591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi for (int verifierNdx = 0; verifierNdx < DE_LENGTH_OF_ARRAY(vec4Verifiers); ++verifierNdx) \ 1477591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { \ 1478591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const QueryType verifier = vec4Verifiers[verifierNdx]; \ 1479591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const char* verifierSuffix = getVerifierSuffix(verifier); \ 1480591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi this->addChild(X); \ 1481591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1482591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1483cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new SampleMaskCase (m_context, (std::string() + "sample_mask_value_" + verifierSuffix).c_str(), "Test SAMPLE_MASK_VALUE", verifier)) 1484cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1485cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new MinValueIndexed3Case (m_context, (std::string() + "max_compute_work_group_count_" + verifierSuffix).c_str(), "Test MAX_COMPUTE_WORK_GROUP_COUNT", GL_MAX_COMPUTE_WORK_GROUP_COUNT, tcu::IVec3(65535,65535,65535), verifier)) 1486cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new MinValueIndexed3Case (m_context, (std::string() + "max_compute_work_group_size_" + verifierSuffix).c_str(), "Test MAX_COMPUTE_WORK_GROUP_SIZE", GL_MAX_COMPUTE_WORK_GROUP_SIZE, tcu::IVec3(128, 128, 64), verifier)) 1487cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1488cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new BufferBindingCase (m_context, (std::string() + "atomic_counter_buffer_binding_" + verifierSuffix).c_str(), "Test ATOMIC_COUNTER_BUFFER_BINDING", GL_ATOMIC_COUNTER_BUFFER_BINDING, GL_ATOMIC_COUNTER_BUFFER, GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, verifier)) 1489cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new BufferStartCase (m_context, (std::string() + "atomic_counter_buffer_start_" + verifierSuffix).c_str(), "Test ATOMIC_COUNTER_BUFFER_START", GL_ATOMIC_COUNTER_BUFFER_START, GL_ATOMIC_COUNTER_BUFFER, GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, verifier)) 1490cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new BufferSizeCase (m_context, (std::string() + "atomic_counter_buffer_size_" + verifierSuffix).c_str(), "Test ATOMIC_COUNTER_BUFFER_SIZE", GL_ATOMIC_COUNTER_BUFFER_SIZE, GL_ATOMIC_COUNTER_BUFFER, GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, verifier)) 1491cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1492cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new BufferBindingCase (m_context, (std::string() + "shader_storager_buffer_binding_" + verifierSuffix).c_str(), "Test SHADER_STORAGE_BUFFER_BINDING", GL_SHADER_STORAGE_BUFFER_BINDING, GL_SHADER_STORAGE_BUFFER, GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, verifier)) 1493cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new BufferStartCase (m_context, (std::string() + "shader_storager_buffer_start_" + verifierSuffix).c_str(), "Test SHADER_STORAGE_BUFFER_START", GL_SHADER_STORAGE_BUFFER_START, GL_SHADER_STORAGE_BUFFER, GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, verifier)) 1494cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new BufferSizeCase (m_context, (std::string() + "shader_storager_buffer_size_" + verifierSuffix).c_str(), "Test SHADER_STORAGE_BUFFER_SIZE", GL_SHADER_STORAGE_BUFFER_SIZE, GL_SHADER_STORAGE_BUFFER, GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, verifier)) 1495cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1496cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new ImageBindingNameCase (m_context, (std::string() + "image_binding_name_" + verifierSuffix).c_str(), "Test IMAGE_BINDING_NAME", verifier)) 1497cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new ImageBindingLevelCase (m_context, (std::string() + "image_binding_level_" + verifierSuffix).c_str(), "Test IMAGE_BINDING_LEVEL", verifier)) 1498cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new ImageBindingLayeredCase (m_context, (std::string() + "image_binding_layered_" + verifierSuffix).c_str(), "Test IMAGE_BINDING_LAYERED", verifier)) 1499cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new ImageBindingLayerCase (m_context, (std::string() + "image_binding_layer_" + verifierSuffix).c_str(), "Test IMAGE_BINDING_LAYER", verifier)) 1500cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new ImageBindingAccessCase (m_context, (std::string() + "image_binding_access_" + verifierSuffix).c_str(), "Test IMAGE_BINDING_ACCESS", verifier)) 1501cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry FOR_EACH_VERIFIER(new ImageBindingFormatCase (m_context, (std::string() + "image_binding_format_" + verifierSuffix).c_str(), "Test IMAGE_BINDING_FORMAT", verifier)) 1502cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1503591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi { 1504591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const QueryType verifier = QUERY_INDEXED_ISENABLED; 1505591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi const char* verifierSuffix = getVerifierSuffix(verifier); 1506591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi this->addChild(new EnableBlendCase (m_context, (std::string() + "blend_" + verifierSuffix).c_str(), "BLEND", verifier)); 1507591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi } 1508591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi FOR_EACH_VEC4_VERIFIER(new ColorMaskCase (m_context, (std::string() + "color_mask_" + verifierSuffix).c_str(), "COLOR_WRITEMASK", verifier)) 1509591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi FOR_EACH_VERIFIER(new BlendFuncCase (m_context, (std::string() + "blend_func_" + verifierSuffix).c_str(), "BLEND_SRC and BLEND_DST", verifier)) 1510591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi FOR_EACH_VERIFIER(new BlendEquationCase (m_context, (std::string() + "blend_equation_" + verifierSuffix).c_str(), "BLEND_EQUATION_RGB and BLEND_DST", verifier)) 1511591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi FOR_EACH_VERIFIER(new BlendEquationAdvancedCase (m_context, (std::string() + "blend_equation_advanced_" + verifierSuffix).c_str(), "BLEND_EQUATION_RGB and BLEND_DST", verifier)) 1512591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi 1513591173f18359cabb0d9d88adf3eeb381a21ffc04Mika Isojärvi#undef FOR_EACH_VEC4_VERIFIER 1514cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry#undef FOR_EACH_VERIFIER 1515cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} 1516cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry 1517cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} // Functional 1518cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} // gles31 1519cb82ed72dcbbfd8a6d07736c3259605227bc984fJarkko Pöyry} // deqp 1520