13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 3.1 Module 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ------------------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Shader state query tests 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es31fShaderStateQueryTests.hpp" 25c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry#include "es31fInfoLogQueryShared.hpp" 26c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry#include "glsStateQueryUtil.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuStringTemplate.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluShaderProgram.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluRenderContext.hpp" 31c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry#include "gluCallLogWrapper.hpp" 328852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry#include "gluContextInfo.hpp" 33c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry#include "gluStrUtil.hpp" 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwFunctions.hpp" 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp" 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles31 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Functional 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 46dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppestatic inline std::string brokenShaderSource (const glu::ContextType &contextType) 47dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe{ 48dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe const std::string glslVersionDecl = glu::getGLSLVersionDeclaration(glu::getContextTypeGLSLVersion(contextType)); 49dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe 50dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe return glslVersionDecl + "\n" 51dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe "broken, this should not compile,\n" 52dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe "{"; 53dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe} 54c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 55c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass BaseTypeCase : public TestCase 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 58c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry struct TestTypeInfo 59c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 60c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry glw::GLenum glType; 61c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const char* declarationStr; 62c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const char* accessStr; 63c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry }; 64c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 65c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry BaseTypeCase (Context& ctx, const char* name, const char* desc, const char* extension); 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 68c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry IterateResult iterate (void); 69c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry virtual std::vector<TestTypeInfo> getInfos (void) const = 0; 70c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry virtual void checkRequirements (void) const; 71c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 72c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const char* const m_extension; 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 75c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryBaseTypeCase::BaseTypeCase (Context& ctx, const char* name, const char* desc, const char* extension) 76c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TestCase (ctx, name, desc) 77c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , m_extension (extension) 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 81c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryBaseTypeCase::IterateResult BaseTypeCase::iterate (void) 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 83dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe static const char* const vertexSourceTemplate = "${VERSIONDECL}\n" 848852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry "in highp vec4 a_position;\n" 858852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry "void main(void)\n" 868852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry "{\n" 878852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry " gl_Position = a_position;\n" 888852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry "}\n"; 89dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe static const char* const fragmentSourceTemplate = "${VERSIONDECL}\n" 908852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry "${EXTENSIONSTATEMENT}" 91c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry "${DECLARATIONSTR};\n" 928852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry "layout(location = 0) out highp vec4 dEQP_FragColor;\n" 938852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry "void main(void)\n" 948852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry "{\n" 95c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry " dEQP_FragColor = vec4(${ACCESSSTR});\n" 968852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry "}\n"; 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 98c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry tcu::ResultCollector result (m_testCtx.getLog()); 99c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> samplerTypes = getInfos(); 100dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)); 101c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 102dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe if (m_extension && !m_context.getContextInfo().isExtensionSupported(m_extension) && !supportsES32) 103c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry throw tcu::NotSupportedError("Test requires " + std::string(m_extension)); 104c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry checkRequirements(); 105c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 106c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int typeNdx = 0; typeNdx < (int)samplerTypes.size(); ++typeNdx) 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 108c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const tcu::ScopedLogSection section (m_testCtx.getLog(), 109c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::string(glu::getShaderVarTypeStr(samplerTypes[typeNdx].glType).toString()), 110c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry "Uniform type " + glu::getShaderVarTypeStr(samplerTypes[typeNdx].glType).toString()); 111c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 112c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::map<std::string, std::string> shaderArgs; 113c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry shaderArgs["DECLARATIONSTR"] = samplerTypes[typeNdx].declarationStr; 114c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry shaderArgs["ACCESSSTR"] = samplerTypes[typeNdx].accessStr; 115dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe shaderArgs["EXTENSIONSTATEMENT"] = (m_extension && !supportsES32) ? (std::string() + "#extension " + m_extension + " : require\n") : (""); 116dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe shaderArgs["VERSIONDECL"] = glu::getGLSLVersionDeclaration(glu::getContextTypeGLSLVersion(m_context.getRenderContext().getType())); 117c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 118c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const std::string fragmentSource = tcu::StringTemplate(fragmentSourceTemplate).specialize(shaderArgs); 119dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe const std::string vertexSource = tcu::StringTemplate(vertexSourceTemplate).specialize(shaderArgs); 120c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 121c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry glu::ShaderProgram program (m_context.getRenderContext(), glu::ProgramSources() << glu::VertexSource(vertexSource) << glu::FragmentSource(fragmentSource)); 122c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 123c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "Building program with uniform sampler of type " << glu::getShaderVarTypeStr(samplerTypes[typeNdx].glType) << tcu::TestLog::EndMessage; 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 125c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (!program.isOk()) 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 127c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry m_testCtx.getLog() << program; 128c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry result.fail("could not build shader"); 1298852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry } 1308852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry else 1318852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry { 132c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // only one uniform -- uniform at index 0 133c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry int uniforms = 0; 134c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.getProgramiv(program.getProgram(), GL_ACTIVE_UNIFORMS, &uniforms); 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 136c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (uniforms != 1) 137c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry result.fail("Unexpected GL_ACTIVE_UNIFORMS, expected 1"); 138c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry else 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 140c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // check type 141c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const glw::GLuint uniformIndex = 0; 142c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry glw::GLint type = 0; 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 144c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "Verifying uniform type." << tcu::TestLog::EndMessage; 145c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.getActiveUniformsiv(program.getProgram(), 1, &uniformIndex, GL_UNIFORM_TYPE, &type); 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 147c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (type != (glw::GLint)samplerTypes[typeNdx].glType) 1488852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry { 149c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::ostringstream buf; 150c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry buf << "Invalid type, expected " << samplerTypes[typeNdx].glType << ", got " << type; 151c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry result.fail(buf.str()); 1528852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry } 153c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 154c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 156c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry GLU_EXPECT_NO_ERROR(gl.getError(), ""); 157c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 159c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry result.setTestContextResult(m_testCtx); 160c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return STOP; 161c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 163c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryvoid BaseTypeCase::checkRequirements (void) const 164c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 165c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 167c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass CoreSamplerTypeCase : public BaseTypeCase 168c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 169c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrypublic: 170c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry CoreSamplerTypeCase (Context& ctx, const char* name, const char* desc); 1718852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry 172c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryprivate: 173c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> getInfos (void) const; 174c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 1758852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry 176c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryCoreSamplerTypeCase::CoreSamplerTypeCase (Context& ctx, const char* name, const char* desc) 177c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : BaseTypeCase(ctx, name, desc, DE_NULL) 178c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 179c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 181c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystd::vector<BaseTypeCase::TestTypeInfo> CoreSamplerTypeCase::getInfos (void) const 182c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 183c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry static const TestTypeInfo samplerTypes[] = 184c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 185c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_SAMPLER_2D_MULTISAMPLE, "uniform highp sampler2DMS u_sampler", "texelFetch(u_sampler, ivec2(gl_FragCoord.xy), 0)" }, 186c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_INT_SAMPLER_2D_MULTISAMPLE, "uniform highp isampler2DMS u_sampler", "texelFetch(u_sampler, ivec2(gl_FragCoord.xy), 0)" }, 187c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE, "uniform highp usampler2DMS u_sampler", "texelFetch(u_sampler, ivec2(gl_FragCoord.xy), 0)" }, 188c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry }; 189c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 190c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> infos; 191c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(samplerTypes); ++ndx) 192c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry infos.push_back(samplerTypes[ndx]); 193c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 194c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return infos; 195c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 196c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 197c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass MSArraySamplerTypeCase : public BaseTypeCase 198c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 199c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrypublic: 200c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry MSArraySamplerTypeCase (Context& ctx, const char* name, const char* desc); 201c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 202c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryprivate: 203c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> getInfos (void) const; 204c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 205c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 206c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryMSArraySamplerTypeCase::MSArraySamplerTypeCase (Context& ctx, const char* name, const char* desc) 207c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : BaseTypeCase(ctx, name, desc, "GL_OES_texture_storage_multisample_2d_array") 208c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 209c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 210c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 211c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystd::vector<BaseTypeCase::TestTypeInfo> MSArraySamplerTypeCase::getInfos (void) const 212c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 213c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry static const TestTypeInfo samplerTypes[] = 214c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 215c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_SAMPLER_2D_MULTISAMPLE_ARRAY, "uniform highp sampler2DMSArray u_sampler", "texelFetch(u_sampler, ivec3(gl_FragCoord.xyz), 0)" }, 216c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, "uniform highp isampler2DMSArray u_sampler", "texelFetch(u_sampler, ivec3(gl_FragCoord.xyz), 0)" }, 217c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, "uniform highp usampler2DMSArray u_sampler", "texelFetch(u_sampler, ivec3(gl_FragCoord.xyz), 0)" }, 218c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry }; 219c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 220c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> infos; 221c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(samplerTypes); ++ndx) 222c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry infos.push_back(samplerTypes[ndx]); 223c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 224c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return infos; 225c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 226c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 227c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass TextureBufferSamplerTypeCase : public BaseTypeCase 228c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 229c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrypublic: 230c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureBufferSamplerTypeCase (Context& ctx, const char* name, const char* desc); 231c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 232c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryprivate: 233c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> getInfos (void) const; 234c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 235c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 236c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryTextureBufferSamplerTypeCase::TextureBufferSamplerTypeCase (Context& ctx, const char* name, const char* desc) 237c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : BaseTypeCase(ctx, name, desc, "GL_EXT_texture_buffer") 238c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 239c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 240c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 241c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystd::vector<BaseTypeCase::TestTypeInfo> TextureBufferSamplerTypeCase::getInfos (void) const 242c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 243c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry static const TestTypeInfo samplerTypes[] = 244c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 245c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_SAMPLER_BUFFER, "uniform highp samplerBuffer u_sampler", "texelFetch(u_sampler, int(gl_FragCoord.x))" }, 246c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_INT_SAMPLER_BUFFER, "uniform highp isamplerBuffer u_sampler", "texelFetch(u_sampler, int(gl_FragCoord.x))" }, 247c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_UNSIGNED_INT_SAMPLER_BUFFER, "uniform highp usamplerBuffer u_sampler", "texelFetch(u_sampler, int(gl_FragCoord.x))" }, 248c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry }; 249c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 250c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> infos; 251c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(samplerTypes); ++ndx) 252c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry infos.push_back(samplerTypes[ndx]); 253c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 254c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return infos; 255c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 256c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 257c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass TextureBufferImageTypeCase : public BaseTypeCase 258c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 259c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrypublic: 260c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry TextureBufferImageTypeCase (Context& ctx, const char* name, const char* desc); 261c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 262c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryprivate: 263c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> getInfos (void) const; 264c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry void checkRequirements (void) const; 265c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 266c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 267c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryTextureBufferImageTypeCase::TextureBufferImageTypeCase (Context& ctx, const char* name, const char* desc) 268c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : BaseTypeCase(ctx, name, desc, "GL_EXT_texture_buffer") 269c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 270c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 271c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 272c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystd::vector<BaseTypeCase::TestTypeInfo> TextureBufferImageTypeCase::getInfos (void) const 273c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 274c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry static const TestTypeInfo samplerTypes[] = 275c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 276c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_IMAGE_BUFFER, "layout(binding=0, rgba8) readonly uniform highp imageBuffer u_image", "imageLoad(u_image, int(gl_FragCoord.x))" }, 277c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_INT_IMAGE_BUFFER, "layout(binding=0, r32i) readonly uniform highp iimageBuffer u_image", "imageLoad(u_image, int(gl_FragCoord.x))" }, 278c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_UNSIGNED_INT_IMAGE_BUFFER, "layout(binding=0, r32ui) readonly uniform highp uimageBuffer u_image", "imageLoad(u_image, int(gl_FragCoord.x))" }, 279c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry }; 280c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 281c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> infos; 282c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(samplerTypes); ++ndx) 283c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry infos.push_back(samplerTypes[ndx]); 284c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 285c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return infos; 286c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 287c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 288c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryvoid TextureBufferImageTypeCase::checkRequirements (void) const 289c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 290c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (m_context.getContextInfo().getInt(GL_MAX_FRAGMENT_IMAGE_UNIFORMS) < 1) 291c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry throw tcu::NotSupportedError("Test requires fragment images"); 292c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 293c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 294c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass CubeArraySamplerTypeCase : public BaseTypeCase 295c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 296c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrypublic: 297c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry CubeArraySamplerTypeCase (Context& ctx, const char* name, const char* desc); 298c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 299c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryprivate: 300c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> getInfos (void) const; 301c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 302c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 303c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryCubeArraySamplerTypeCase::CubeArraySamplerTypeCase (Context& ctx, const char* name, const char* desc) 304c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : BaseTypeCase(ctx, name, desc, "GL_EXT_texture_cube_map_array") 305c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 306c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 307c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 308c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystd::vector<BaseTypeCase::TestTypeInfo> CubeArraySamplerTypeCase::getInfos (void) const 309c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 310c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry static const TestTypeInfo samplerTypes[] = 311c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 312c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_SAMPLER_CUBE_MAP_ARRAY, "uniform highp samplerCubeArray u_sampler", "texture(u_sampler, gl_FragCoord.xxyz)" }, 313c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW, "uniform highp samplerCubeArrayShadow u_sampler", "texture(u_sampler, gl_FragCoord.xxyz, 0.5)" }, 314c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_INT_SAMPLER_CUBE_MAP_ARRAY, "uniform highp isamplerCubeArray u_sampler", "texture(u_sampler, gl_FragCoord.xxyz)" }, 315c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY, "uniform highp usamplerCubeArray u_sampler", "texture(u_sampler, gl_FragCoord.xxyz)" }, 316c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry }; 317c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 318c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> infos; 319c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(samplerTypes); ++ndx) 320c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry infos.push_back(samplerTypes[ndx]); 321c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 322c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return infos; 323c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 324c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 325c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass CubeArrayImageTypeCase : public BaseTypeCase 326c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 327c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrypublic: 328c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry CubeArrayImageTypeCase (Context& ctx, const char* name, const char* desc); 329c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 330c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryprivate: 331c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> getInfos (void) const; 332c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry void checkRequirements (void) const; 333c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 334c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 335c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryCubeArrayImageTypeCase::CubeArrayImageTypeCase (Context& ctx, const char* name, const char* desc) 336c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : BaseTypeCase(ctx, name, desc, "GL_EXT_texture_cube_map_array") 337c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 338c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 339c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 340c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrystd::vector<BaseTypeCase::TestTypeInfo> CubeArrayImageTypeCase::getInfos (void) const 341c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 342c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry static const TestTypeInfo samplerTypes[] = 343c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 344c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_IMAGE_CUBE_MAP_ARRAY, "layout(binding=0, rgba8) readonly uniform highp imageCubeArray u_image", "imageLoad(u_image, ivec3(gl_FragCoord.xyx))" }, 345c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_INT_IMAGE_CUBE_MAP_ARRAY, "layout(binding=0, r32i) readonly uniform highp iimageCubeArray u_image", "imageLoad(u_image, ivec3(gl_FragCoord.xyx))" }, 346c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY, "layout(binding=0, r32ui) readonly uniform highp uimageCubeArray u_image", "imageLoad(u_image, ivec3(gl_FragCoord.xyx))" }, 347c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry }; 348c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 349c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry std::vector<TestTypeInfo> infos; 350c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(samplerTypes); ++ndx) 351c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry infos.push_back(samplerTypes[ndx]); 352c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 353c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry return infos; 354c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 355c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 356c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryvoid CubeArrayImageTypeCase::checkRequirements (void) const 357c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 358c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (m_context.getContextInfo().getInt(GL_MAX_FRAGMENT_IMAGE_UNIFORMS) < 1) 359c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry throw tcu::NotSupportedError("Test requires fragment images"); 360c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 361c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 362c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryclass ShaderLogCase : public TestCase 363c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 364c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyrypublic: 365c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry ShaderLogCase (Context& ctx, const char* name, const char* desc, glu::ShaderType shaderType); 366c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 367c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryprivate: 368c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry void init (void); 369c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry IterateResult iterate (void); 370c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 371c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const glu::ShaderType m_shaderType; 372c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry}; 373c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 374c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryShaderLogCase::ShaderLogCase (Context& ctx, const char* name, const char* desc, glu::ShaderType shaderType) 375c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry : TestCase (ctx, name, desc) 376c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry , m_shaderType (shaderType) 377c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 378c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 379c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 380c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyryvoid ShaderLogCase::init (void) 381c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 382dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe const bool supportsES32 = glu::contextSupports(m_context.getRenderContext().getType(), glu::ApiType::es(3, 2)); 383dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe 384c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry switch (m_shaderType) 385c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 386c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case glu::SHADERTYPE_VERTEX: 387c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case glu::SHADERTYPE_FRAGMENT: 388c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case glu::SHADERTYPE_COMPUTE: 389c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry break; 390c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 391c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case glu::SHADERTYPE_GEOMETRY: 392dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_geometry_shader") && !supportsES32) 393dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe throw tcu::NotSupportedError("Test requires GL_EXT_geometry_shader extension or an OpenGL ES 3.2 or higher context."); 394c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry break; 395c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 396c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case glu::SHADERTYPE_TESSELLATION_CONTROL: 397c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry case glu::SHADERTYPE_TESSELLATION_EVALUATION: 398dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe if (!m_context.getContextInfo().isExtensionSupported("GL_EXT_tessellation_shader") && !supportsES32) 399dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe throw tcu::NotSupportedError("Test requires GL_EXT_tessellation_shader extension or an OpenGL ES 3.2 or higher context."); 400c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry break; 401c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 402c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry default: 403c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry DE_ASSERT(false); 404c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry break; 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 406c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry} 407c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 408c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko PöyryShaderLogCase::IterateResult ShaderLogCase::iterate (void) 409c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry{ 410c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry using gls::StateQueryUtil::StateQueryMemoryWriteGuard; 411c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 412dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe tcu::ResultCollector result (m_testCtx.getLog()); 413dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe glu::CallLogWrapper gl (m_context.getRenderContext().getFunctions(), m_testCtx.getLog()); 414dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe deUint32 shader = 0; 415dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe const std::string source = brokenShaderSource(m_context.getRenderContext().getType()); 416dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe const char* const brokenSource = source.c_str(); 417c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry StateQueryMemoryWriteGuard<glw::GLint> logLen; 418c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 419c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.enableLogging(true); 420c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 421c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry m_testCtx.getLog() << tcu::TestLog::Message << "Trying to compile broken shader source." << tcu::TestLog::EndMessage; 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 423c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry shader = gl.glCreateShader(glu::getGLShaderType(m_shaderType)); 424c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "create shader"); 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 426dec5bc5116040efecd92babd70f2d4699ac66b66Daniel Andrade Groppe gl.glShaderSource(shader, 1, &brokenSource, DE_NULL); 427c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glCompileShader(shader); 428c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "compile"); 429c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 430c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLen); 431c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry logLen.verifyValidity(result); 432c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 433c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry if (!logLen.isUndefined()) 434c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry verifyInfoLogQuery(result, gl, logLen, shader, &glu::CallLogWrapper::glGetShaderInfoLog, "glGetShaderInfoLog"); 435c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 436c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry gl.glDeleteShader(shader); 437c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry GLS_COLLECT_GL_ERROR(result, gl.glGetError(), "delete"); 438c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 439c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry result.setTestContextResult(m_testCtx); 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return STOP; 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4453c827367444ee418f129b2c238299f49d3264554Jarkko PoyryShaderStateQueryTests::ShaderStateQueryTests (Context& context) 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup(context, "shader", "Shader state query tests") 4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4503c827367444ee418f129b2c238299f49d3264554Jarkko PoyryShaderStateQueryTests::~ShaderStateQueryTests (void) 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid ShaderStateQueryTests::init (void) 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 456c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry addChild(new CoreSamplerTypeCase (m_context, "sampler_type", "Sampler type cases")); 457c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry addChild(new MSArraySamplerTypeCase (m_context, "sampler_type_multisample_array", "MSAA array sampler type cases")); 458c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry addChild(new TextureBufferSamplerTypeCase (m_context, "sampler_type_texture_buffer", "Texture buffer sampler type cases")); 459c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry addChild(new TextureBufferImageTypeCase (m_context, "image_type_texture_buffer", "Texture buffer image type cases")); 460c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry addChild(new CubeArraySamplerTypeCase (m_context, "sampler_type_cube_array", "Cube array sampler type cases")); 461c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry addChild(new CubeArrayImageTypeCase (m_context, "image_type_cube_array", "Cube array image type cases")); 462c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 463c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // shader info log tests 464c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // \note, there exists similar tests in gles3 module. However, the gles31 could use a different 465c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry // shader compiler with different INFO_LOG bugs. 466c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 467c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry static const struct 468c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 469c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry const char* caseName; 470c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry glu::ShaderType caseType; 471c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } shaderTypes[] = 472c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { 473c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "info_log_vertex", glu::SHADERTYPE_VERTEX }, 474c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "info_log_fragment", glu::SHADERTYPE_FRAGMENT }, 475c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "info_log_geometry", glu::SHADERTYPE_GEOMETRY }, 476c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "info_log_tess_ctrl", glu::SHADERTYPE_TESSELLATION_CONTROL }, 477c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "info_log_tess_eval", glu::SHADERTYPE_TESSELLATION_EVALUATION }, 478c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry { "info_log_compute", glu::SHADERTYPE_COMPUTE }, 479c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry }; 480c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry 481c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(shaderTypes); ++ndx) 482c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry addChild(new ShaderLogCase(m_context, shaderTypes[ndx].caseName, "", shaderTypes[ndx].caseType)); 483c423ce6164cdd88c8c3e47bec4ec34476743042aJarkko Pöyry } 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Functional 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles31 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 489