1 #ifndef _ES31FPROGRAMINTERFACEQUERYTESTCASE_HPP 2 #define _ES31FPROGRAMINTERFACEQUERYTESTCASE_HPP 3 /*------------------------------------------------------------------------- 4 * drawElements Quality Program OpenGL ES 3.1 Module 5 * ------------------------------------------------- 6 * 7 * Copyright 2014 The Android Open Source Project 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * 21 *//*! 22 * \file 23 * \brief Program interface query test case 24 *//*--------------------------------------------------------------------*/ 25 26 #include "tcuDefs.hpp" 27 #include "tes31TestCase.hpp" 28 #include "es31fProgramInterfaceDefinition.hpp" 29 30 namespace deqp 31 { 32 namespace gles31 33 { 34 namespace Functional 35 { 36 37 struct ProgramResourceQueryTestTarget 38 { 39 ProgramResourceQueryTestTarget(ProgramInterface interface_, uint32_t propFlags_); 40 41 ProgramInterface interface; 42 uint32_t propFlags; 43 }; 44 45 enum ProgramResourcePropFlags 46 { 47 PROGRAMRESOURCEPROP_ARRAY_SIZE = (1 << 1), 48 PROGRAMRESOURCEPROP_ARRAY_STRIDE = (1 << 2), 49 PROGRAMRESOURCEPROP_ATOMIC_COUNTER_BUFFER_INDEX = (1 << 3), 50 PROGRAMRESOURCEPROP_BLOCK_INDEX = (1 << 4), 51 PROGRAMRESOURCEPROP_LOCATION = (1 << 5), 52 PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR = (1 << 6), 53 PROGRAMRESOURCEPROP_MATRIX_STRIDE = (1 << 7), 54 PROGRAMRESOURCEPROP_NAME_LENGTH = (1 << 8), 55 PROGRAMRESOURCEPROP_OFFSET = (1 << 9), 56 PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER = (1 << 10), 57 PROGRAMRESOURCEPROP_TYPE = (1 << 11), 58 PROGRAMRESOURCEPROP_BUFFER_BINDING = (1 << 12), 59 PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE = (1 << 13), 60 PROGRAMRESOURCEPROP_ACTIVE_VARIABLES = (1 << 14), 61 PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_SIZE = (1 << 15), 62 PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_STRIDE = (1 << 16), 63 PROGRAMRESOURCEPROP_IS_PER_PATCH = (1 << 17), 64 65 PROGRAMRESOURCEPROP_UNIFORM_INTERFACE_MASK = 66 PROGRAMRESOURCEPROP_ARRAY_SIZE | PROGRAMRESOURCEPROP_ARRAY_STRIDE | 67 PROGRAMRESOURCEPROP_ATOMIC_COUNTER_BUFFER_INDEX | PROGRAMRESOURCEPROP_BLOCK_INDEX | 68 PROGRAMRESOURCEPROP_LOCATION | PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR | PROGRAMRESOURCEPROP_MATRIX_STRIDE | 69 PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_OFFSET | PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | 70 PROGRAMRESOURCEPROP_TYPE, 71 72 PROGRAMRESOURCEPROP_UNIFORM_BLOCK_INTERFACE_MASK = 73 PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | 74 PROGRAMRESOURCEPROP_BUFFER_BINDING | PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE | 75 PROGRAMRESOURCEPROP_ACTIVE_VARIABLES, 76 77 PROGRAMRESOURCEPROP_SHADER_STORAGE_BLOCK_MASK = 78 PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | 79 PROGRAMRESOURCEPROP_BUFFER_BINDING | PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE | 80 PROGRAMRESOURCEPROP_ACTIVE_VARIABLES, 81 82 PROGRAMRESOURCEPROP_PROGRAM_INPUT_MASK = 83 PROGRAMRESOURCEPROP_ARRAY_SIZE | PROGRAMRESOURCEPROP_LOCATION | PROGRAMRESOURCEPROP_NAME_LENGTH | 84 PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | PROGRAMRESOURCEPROP_TYPE | PROGRAMRESOURCEPROP_IS_PER_PATCH, 85 86 PROGRAMRESOURCEPROP_PROGRAM_OUTPUT_MASK = 87 PROGRAMRESOURCEPROP_ARRAY_SIZE | PROGRAMRESOURCEPROP_LOCATION | PROGRAMRESOURCEPROP_NAME_LENGTH | 88 PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | PROGRAMRESOURCEPROP_TYPE | PROGRAMRESOURCEPROP_IS_PER_PATCH, 89 90 PROGRAMRESOURCEPROP_BUFFER_VARIABLE_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | PROGRAMRESOURCEPROP_ARRAY_STRIDE | 91 PROGRAMRESOURCEPROP_BLOCK_INDEX | PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR | 92 PROGRAMRESOURCEPROP_MATRIX_STRIDE | PROGRAMRESOURCEPROP_NAME_LENGTH | 93 PROGRAMRESOURCEPROP_OFFSET | PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | 94 PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_SIZE | 95 PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_STRIDE | PROGRAMRESOURCEPROP_TYPE, 96 97 PROGRAMRESOURCEPROP_TRANSFORM_FEEDBACK_VARYING_MASK = 98 PROGRAMRESOURCEPROP_ARRAY_SIZE | PROGRAMRESOURCEPROP_NAME_LENGTH | PROGRAMRESOURCEPROP_TYPE, 99 }; 100 101 class ProgramInterfaceQueryTestCase : public TestCase 102 { 103 public: 104 ProgramInterfaceQueryTestCase(Context &context, const char *name, const char *description, 105 ProgramResourceQueryTestTarget queryTarget); 106 ~ProgramInterfaceQueryTestCase(void); 107 108 protected: 109 ProgramInterface getTargetInterface(void) const; 110 111 private: 112 const ProgramInterfaceDefinition::Program *getAndCheckProgramDefinition(void); 113 int getMaxPatchVertices(void); 114 IterateResult iterate(void); 115 116 virtual const ProgramInterfaceDefinition::Program *getProgramDefinition(void) const = 0; 117 virtual std::vector<std::string> getQueryTargetResources(void) const = 0; 118 119 const ProgramResourceQueryTestTarget m_queryTarget; 120 }; 121 122 void checkProgramResourceUsage(const ProgramInterfaceDefinition::Program *program, const glw::Functions &gl, 123 tcu::TestLog &log); 124 125 } // namespace Functional 126 } // namespace gles31 127 } // namespace deqp 128 129 #endif // _ES31FPROGRAMINTERFACEQUERYTESTCASE_HPP 130