148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#ifndef _ESEXTCTESTCASEBASE_HPP 248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define _ESEXTCTESTCASEBASE_HPP 348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/*------------------------------------------------------------------------- 448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * OpenGL Conformance Test Suite 548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * ----------------------------- 648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Copyright (c) 2014-2016 The Khronos Group Inc. 848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 1048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * you may not use this file except in compliance with the License. 1148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * You may obtain a copy of the License at 1248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 1348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 1448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 1548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Unless required by applicable law or agreed to in writing, software 1648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 1748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * See the License for the specific language governing permissions and 1948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * limitations under the License. 2048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * 2184322c9402f810da3cd80b52e9f9ef72150a9004Alexander Galazin */ /*! 2248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \file 2348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * \brief 2484322c9402f810da3cd80b52e9f9ef72150a9004Alexander Galazin */ /*-------------------------------------------------------------------*/ 2548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 2648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "glcContext.hpp" 2748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "gluShaderUtil.hpp" 2848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "tcuDefs.hpp" 2948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "tcuTestCase.hpp" 3048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 3148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "glcExtTokens.hpp" 3248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "glwDefs.hpp" 3348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include "glwFunctions.hpp" 3448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include <map> 3548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include <math.h> 3648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#include <string.h> 3748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 3848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/* String definitions */ 3948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define GEOMETRY_SHADER_EXTENSION_NOT_SUPPORTED "Geometry shader functionality not supported, skipping" 4048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define GEOMETRY_SHADER_POINT_SIZE_NOT_SUPPORTED "Geometry shader point size functionality not supported, skipping" 4148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define GPU_SHADER5_EXTENSION_NOT_SUPPORTED "GPU shader5 functionality not supported, skipping" 4248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define TESSELLATION_SHADER_EXTENSION_NOT_SUPPORTED "Tessellation shader functionality not supported, skipping" 4348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define TEXTURE_BORDER_CLAMP_NOT_SUPPORTED "Texture border clamp functionality not supported, skipping" 4448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define TEXTURE_CUBE_MAP_ARRAY_EXTENSION_NOT_SUPPORTED "Texture cube map array functionality not supported, skipping" 4548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define SHADER_IMAGE_ATOMIC_EXTENSION_NOT_SUPPORTED "Shader image atomic functionality not supported, skipping" 4648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define TEXTURE_BUFFER_EXTENSION_NOT_SUPPORTED "Texture buffer functionality not supported, skipping" 4748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#define DRAW_BUFFERS_INDEXED_NOT_SUPPORTED "Draw buffers indexed functionality not supported, skipping" 4887b4a35eb5440743883229ce2f40fa845417995cDaniel Koch#define VIEWPORT_ARRAY_NOT_SUPPORTED "Viewport array functionality not supported, skipping" 4948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 5048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosnamespace glcts 5148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 5248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/* Define allowed storage types */ 5348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosenum STORAGE_TYPE 5448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 5548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos ST_MUTABLE, /* Mutable Storage */ 5648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos ST_IMMUTABLE /* Immutable Storage */ 5748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; 5848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 5948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/* Extension names */ 6048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosenum ExtensionName 6148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 6248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONNAME_SHADER_IMAGE_ATOMIC, 6348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONNAME_SHADER_IO_BLOCKS, 6448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONNAME_GEOMETRY_SHADER, 6548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONNAME_GEOMETRY_POINT_SIZE, 6648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONNAME_TESSELLATION_SHADER, 6748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONNAME_TESSELLATION_POINT_SIZE, 6848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONNAME_TEXTURE_BUFFER, 6948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONNAME_TEXTURE_CUBE_MAP_ARRAY, 7048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONNAME_GPU_SHADER5, 7187b4a35eb5440743883229ce2f40fa845417995cDaniel Koch EXTENSIONNAME_VIEWPORT_ARRAY, 7248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; 7348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 7448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/* Extension type */ 7548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosenum ExtensionType 7648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 7748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONTYPE_NONE, /* Not an extension (part of this version of OpenGL or OpenGL ES) */ 7848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONTYPE_EXT, /* EXT multivendor extension */ 7948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONTYPE_OES /* OES Khronos extension */ 8048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; 8148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 8248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosenum ExtensionBehavior 8348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 8448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONBEHAVIOR_DISABLE, /* disable */ 8548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONBEHAVIOR_WARN, /* warn */ 8648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONBEHAVIOR_ENABLE, /* enable */ 8748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos EXTENSIONBEHAVIOR_REQUIRE /* require */ 8848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; 8948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 9048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosusing deqp::Context; 9148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 9248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosstruct ExtParameters 9348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 9448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glu::GLSLVersion glslVersion; 9548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos ExtensionType extType; 9648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 9748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos ExtParameters(glu::GLSLVersion _glslVersion, ExtensionType _extType) : glslVersion(_glslVersion), extType(_extType) 9848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 9948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 10048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; 10148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 10248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/** 10348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * Base class for tests implementations. 10448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos */ 10548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass TestCaseBase : public tcu::TestCase 10648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 10748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic: 10848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Public methods */ 10948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 11048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Destructor */ 11148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos virtual ~TestCaseBase(void) 11248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 11348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 11448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 11548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos static const float m_epsilon_float; 11648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 11748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosprotected: 11848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos enum LOG_TYPE 11948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 12048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos LT_SHADER_OBJECT, /* Shader object */ 12148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos LT_PROGRAM_OBJECT, /* Program object */ 12248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos LT_PIPELINE_OBJECT /* Program pipeline object */ 12348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos }; 12448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Protected type definitions */ 12548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 12648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Protected methods */ 12748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 12848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Constructor */ 12948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos TestCaseBase(Context& context, const ExtParameters& extParam, const char* name, const char* description); 13048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 13148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Methods that a derived test case should reimplement */ 13248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos virtual void deinit(void); 13348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos virtual void init(void); 13448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos virtual IterateResult iterate(void); 13548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 13648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Initializes extension function pointers */ 13748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos void initExtensions(); 13848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 13948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Initializes GLSL specialization map */ 14048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos void initGLSLSpecializationMap(); 14148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 14248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Function that generates an extension directive */ 14348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos std::string getGLSLExtDirective(ExtensionType type, ExtensionName name, ExtensionBehavior behavior); 14448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 14548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Sets the seed for the random generator */ 14648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos void randomSeed(const glw::GLuint seed); 14748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 14848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Returns random unsigned integer from the range [0,max) */ 14948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLuint randomFormula(const glw::GLuint max); 15048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 15148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Helper method for verification of pixel color */ 15248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool comparePixel(const unsigned char* buffer, unsigned int x, unsigned int y, unsigned int width, 15348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos unsigned int height, unsigned int pixel_size, unsigned char expected_red = 0, 15448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos unsigned char expected_green = 0, unsigned char expected_blue = 0, 15548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos unsigned char expected_alpha = 0) const; 15648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 15748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Helper method for checking if an extension is supported*/ 15848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool isExtensionSupported(const std::string& extName) const; 15948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 16048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Program creation and validation helper methods */ 16148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos std::string specializeShader(const unsigned int parts, const char* const* code) const; 16248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos void shaderSourceSpecialized(glw::GLuint shader_id, glw::GLsizei shader_count, 16348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const glw::GLchar* const* shader_string); 16448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 16548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool buildProgram(glw::GLuint po_id, glw::GLuint sh1_shader_id, unsigned int n_sh1_body_parts, 16648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh1_body_parts, bool* out_has_compilation_failed = NULL); 16748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 16848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool buildProgram(glw::GLuint po_id, glw::GLuint sh1_shader_id, unsigned int n_sh1_body_parts, 16948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh1_body_parts, glw::GLuint sh2_shader_id, unsigned int n_sh2_body_parts, 17048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh2_body_parts, bool* out_has_compilation_failed = NULL); 17148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 17248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool buildProgram(glw::GLuint po_id, glw::GLuint sh1_shader_id, unsigned int n_sh1_body_parts, 17348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh1_body_parts, glw::GLuint sh2_shader_id, unsigned int n_sh2_body_parts, 17448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh2_body_parts, glw::GLuint sh3_shader_id, unsigned int n_sh3_body_parts, 17548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh3_body_parts, bool* out_has_compilation_failed = NULL); 17648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 17748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool buildProgram(glw::GLuint po_id, glw::GLuint sh1_shader_id, unsigned int n_sh1_body_parts, 17848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh1_body_parts, glw::GLuint sh2_shader_id, unsigned int n_sh2_body_parts, 17948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh2_body_parts, glw::GLuint sh3_shader_id, unsigned int n_sh3_body_parts, 18048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh3_body_parts, glw::GLuint sh4_shader_id, unsigned int n_sh4_body_parts, 18148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh4_body_parts, bool* out_has_compilation_failed = NULL); 18248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 18348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool buildProgram(glw::GLuint po_id, glw::GLuint sh1_shader_id, unsigned int n_sh1_body_parts, 18448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh1_body_parts, glw::GLuint sh2_shader_id, unsigned int n_sh2_body_parts, 18548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh2_body_parts, glw::GLuint sh3_shader_id, unsigned int n_sh3_body_parts, 18648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh3_body_parts, glw::GLuint sh4_shader_id, unsigned int n_sh4_body_parts, 18748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh4_body_parts, glw::GLuint sh5_shader_id, unsigned int n_sh5_body_parts, 18848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* sh5_body_parts, bool* out_has_compilation_failed = NULL); 18948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 19048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool doesProgramBuild(unsigned int n_fs_body_parts, const char* const* fs_body_parts, unsigned int n_gs_body_parts, 19148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* gs_body_parts, unsigned int n_vs_body_parts, 19248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* const* vs_body_parts); 19348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 19448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos std::string getShaderSource(glw::GLuint shader_id); 19548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos std::string getCompilationInfoLog(glw::GLuint shader_id); 19648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos std::string getLinkingInfoLog(glw::GLuint po_id); 19748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos std::string getPipelineInfoLog(glw::GLuint ppo_id); 19848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 19948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Helper method for setting up a fraembuffer with texture as color attachment */ 20048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool setupFramebufferWithTextureAsAttachment(glw::GLuint framebuffer_object_id, glw::GLuint color_texture_id, 20148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLenum texture_format, glw::GLuint width, 20248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLuint height) const; 20348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 20448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos void checkFramebufferStatus(glw::GLenum framebuffer) const; 20548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 20648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Protected variables */ 20748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos Context& m_context; 20848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glu::GLSLVersion m_glslVersion; 20948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos ExtensionType m_extType; 21048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos std::map<std::string, std::string> m_specializationMap; 21148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 21248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_framebuffer_no_attachments_supported; 21348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_geometry_shader_extension_supported; 21448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_geometry_shader_point_size_supported; 21548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_gpu_shader5_supported; 21648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_program_interface_query_supported; 21748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_shader_image_load_store_supported; 21848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_shader_image_atomic_supported; 21948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_texture_storage_multisample_supported; 22048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_texture_storage_multisample_2d_array_supported; 22148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_tessellation_shader_supported; 22248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_tessellation_shader_point_size_supported; 22348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_texture_cube_map_array_supported; 22448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_texture_border_clamp_supported; 22548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool m_is_texture_buffer_supported; 22687b4a35eb5440743883229ce2f40fa845417995cDaniel Koch bool m_is_viewport_array_supported; 22748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 22848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Predefined shader strings */ 22948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos static const char* m_boilerplate_vs_code; 23048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 23148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* GL tokens that are diferent for functionalities 23248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * enabled by extensions and for functionalities that 23348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos * are present in the core. */ 23448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos deqp::GLExtTokens m_glExtTokens; 23548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 23648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosprivate: 23748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Private functions */ 23848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos bool buildProgramVA(glw::GLuint po_id, bool* out_has_compilation_failed, unsigned int sh_stages, ...); 23948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos std::string getInfoLog(LOG_TYPE log_type, glw::GLuint id); 24048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 24148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos /* Private variables */ 24248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos glw::GLuint seed_value; 24348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 24448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos friend class TessellationShaderUtils; 24548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; 24648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 24748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos/* Test Case Group that tracks GLSL version and extension type */ 24848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosclass TestCaseGroupBase : public tcu::TestCaseGroup 24948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 25048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulospublic: 25148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos TestCaseGroupBase(Context& context, const ExtParameters& extParam, const char* name, const char* description); 25248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 25348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos virtual ~TestCaseGroupBase(void) 25448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 25548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 25648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 25748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos Context& getContext(void) 25848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos { 25948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos return m_context; 26048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos } 26148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 26248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosprotected: 26348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos Context& m_context; 26448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos ExtParameters m_extParams; 26548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos}; 26648087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 26748087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulosinline TestCaseGroupBase::TestCaseGroupBase(Context& context, const ExtParameters& extParams, const char* name, 26848087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos const char* description) 26948087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos : tcu::TestCaseGroup(context.getTestContext(), name, description), m_context(context), m_extParams(extParams) 27048087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos{ 27148087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} 27248087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 27348087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos} // namespace glcts 27448087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos 27548087f5f0eb08759ee763f98daf3b34becb74559Pyry Haulos#endif // _ESEXTCTESTCASEBASE_HPP 276