#ifndef _ES31FPROGRAMINTERFACEQUERYTESTCASE_HPP #define _ES31FPROGRAMINTERFACEQUERYTESTCASE_HPP /*------------------------------------------------------------------------- * drawElements Quality Program OpenGL ES 3.1 Module * ------------------------------------------------- * * Copyright 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *//*! * \file * \brief Program interface query test case *//*--------------------------------------------------------------------*/ #include "tcuDefs.hpp" #include "tes31TestCase.hpp" #include "es31fProgramInterfaceDefinition.hpp" namespace deqp { namespace gles31 { namespace Functional { struct ProgramResourceQueryTestTarget { ProgramResourceQueryTestTarget (ProgramInterface interface_, deUint32 propFlags_); ProgramInterface interface; deUint32 propFlags; }; enum ProgramResourcePropFlags { PROGRAMRESOURCEPROP_ARRAY_SIZE = (1 << 1), PROGRAMRESOURCEPROP_ARRAY_STRIDE = (1 << 2), PROGRAMRESOURCEPROP_ATOMIC_COUNTER_BUFFER_INDEX = (1 << 3), PROGRAMRESOURCEPROP_BLOCK_INDEX = (1 << 4), PROGRAMRESOURCEPROP_LOCATION = (1 << 5), PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR = (1 << 6), PROGRAMRESOURCEPROP_MATRIX_STRIDE = (1 << 7), PROGRAMRESOURCEPROP_NAME_LENGTH = (1 << 8), PROGRAMRESOURCEPROP_OFFSET = (1 << 9), PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER = (1 << 10), PROGRAMRESOURCEPROP_TYPE = (1 << 11), PROGRAMRESOURCEPROP_BUFFER_BINDING = (1 << 12), PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE = (1 << 13), PROGRAMRESOURCEPROP_ACTIVE_VARIABLES = (1 << 14), PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_SIZE = (1 << 15), PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_STRIDE = (1 << 16), PROGRAMRESOURCEPROP_IS_PER_PATCH = (1 << 17), PROGRAMRESOURCEPROP_UNIFORM_INTERFACE_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | PROGRAMRESOURCEPROP_ARRAY_STRIDE | PROGRAMRESOURCEPROP_ATOMIC_COUNTER_BUFFER_INDEX | PROGRAMRESOURCEPROP_BLOCK_INDEX | PROGRAMRESOURCEPROP_LOCATION | PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR | PROGRAMRESOURCEPROP_MATRIX_STRIDE | PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_OFFSET | PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | PROGRAMRESOURCEPROP_TYPE, PROGRAMRESOURCEPROP_UNIFORM_BLOCK_INTERFACE_MASK = PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | PROGRAMRESOURCEPROP_BUFFER_BINDING | PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE | PROGRAMRESOURCEPROP_ACTIVE_VARIABLES, PROGRAMRESOURCEPROP_SHADER_STORAGE_BLOCK_MASK = PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | PROGRAMRESOURCEPROP_BUFFER_BINDING | PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE | PROGRAMRESOURCEPROP_ACTIVE_VARIABLES, PROGRAMRESOURCEPROP_PROGRAM_INPUT_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | PROGRAMRESOURCEPROP_LOCATION | PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | PROGRAMRESOURCEPROP_TYPE | PROGRAMRESOURCEPROP_IS_PER_PATCH, PROGRAMRESOURCEPROP_PROGRAM_OUTPUT_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | PROGRAMRESOURCEPROP_LOCATION | PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | PROGRAMRESOURCEPROP_TYPE | PROGRAMRESOURCEPROP_IS_PER_PATCH, PROGRAMRESOURCEPROP_BUFFER_VARIABLE_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | PROGRAMRESOURCEPROP_ARRAY_STRIDE | PROGRAMRESOURCEPROP_BLOCK_INDEX | PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR | PROGRAMRESOURCEPROP_MATRIX_STRIDE | PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_OFFSET | PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_SIZE | PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_STRIDE | PROGRAMRESOURCEPROP_TYPE, PROGRAMRESOURCEPROP_TRANSFORM_FEEDBACK_VARYING_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_TYPE, }; class ProgramInterfaceQueryTestCase : public TestCase { public: ProgramInterfaceQueryTestCase (Context& context, const char* name, const char* description, ProgramResourceQueryTestTarget queryTarget); ~ProgramInterfaceQueryTestCase (void); protected: ProgramInterface getTargetInterface (void) const; private: const ProgramInterfaceDefinition::Program* getAndCheckProgramDefinition (void); int getMaxPatchVertices (void); IterateResult iterate (void); virtual const ProgramInterfaceDefinition::Program* getProgramDefinition (void) const = 0; virtual std::vector getQueryTargetResources (void) const = 0; const ProgramResourceQueryTestTarget m_queryTarget; }; void checkProgramResourceUsage (const ProgramInterfaceDefinition::Program* program, const glw::Functions& gl, tcu::TestLog& log); } // Functional } // gles31 } // deqp #endif // _ES31FPROGRAMINTERFACEQUERYTESTCASE_HPP