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_, deUint32 propFlags_); 40 41 ProgramInterface interface; 42 deUint32 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 64 PROGRAMRESOURCEPROP_UNIFORM_INTERFACE_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | 65 PROGRAMRESOURCEPROP_ARRAY_STRIDE | 66 PROGRAMRESOURCEPROP_ATOMIC_COUNTER_BUFFER_INDEX | 67 PROGRAMRESOURCEPROP_BLOCK_INDEX | 68 PROGRAMRESOURCEPROP_LOCATION | 69 PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR | 70 PROGRAMRESOURCEPROP_MATRIX_STRIDE | 71 PROGRAMRESOURCEPROP_NAME_LENGTH | 72 PROGRAMRESOURCEPROP_OFFSET | 73 PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | 74 PROGRAMRESOURCEPROP_TYPE, 75 76 PROGRAMRESOURCEPROP_UNIFORM_BLOCK_INTERFACE_MASK = PROGRAMRESOURCEPROP_NAME_LENGTH | 77 PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | 78 PROGRAMRESOURCEPROP_BUFFER_BINDING | 79 PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE | 80 PROGRAMRESOURCEPROP_ACTIVE_VARIABLES, 81 82 PROGRAMRESOURCEPROP_SHADER_STORAGE_BLOCK_MASK = PROGRAMRESOURCEPROP_NAME_LENGTH | 83 PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | 84 PROGRAMRESOURCEPROP_BUFFER_BINDING | 85 PROGRAMRESOURCEPROP_BUFFER_DATA_SIZE | 86 PROGRAMRESOURCEPROP_ACTIVE_VARIABLES, 87 88 PROGRAMRESOURCEPROP_PROGRAM_INPUT_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | 89 PROGRAMRESOURCEPROP_LOCATION | 90 PROGRAMRESOURCEPROP_NAME_LENGTH | 91 PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | 92 PROGRAMRESOURCEPROP_TYPE, 93 94 PROGRAMRESOURCEPROP_PROGRAM_OUTPUT_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | 95 PROGRAMRESOURCEPROP_LOCATION | 96 PROGRAMRESOURCEPROP_NAME_LENGTH | 97 PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | 98 PROGRAMRESOURCEPROP_TYPE, 99 100 PROGRAMRESOURCEPROP_BUFFER_VARIABLE_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | 101 PROGRAMRESOURCEPROP_ARRAY_STRIDE | 102 PROGRAMRESOURCEPROP_BLOCK_INDEX | 103 PROGRAMRESOURCEPROP_MATRIX_ROW_MAJOR | 104 PROGRAMRESOURCEPROP_MATRIX_STRIDE | 105 PROGRAMRESOURCEPROP_NAME_LENGTH | 106 PROGRAMRESOURCEPROP_OFFSET | 107 PROGRAMRESOURCEPROP_REFERENCED_BY_SHADER | 108 PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_SIZE | 109 PROGRAMRESOURCEPROP_TOP_LEVEL_ARRAY_STRIDE | 110 PROGRAMRESOURCEPROP_TYPE, 111 112 PROGRAMRESOURCEPROP_TRANSFORM_FEEDBACK_VARYING_MASK = PROGRAMRESOURCEPROP_ARRAY_SIZE | 113 PROGRAMRESOURCEPROP_NAME_LENGTH | 114 PROGRAMRESOURCEPROP_TYPE, 115 }; 116 117 class ProgramInterfaceQueryTestCase : public TestCase 118 { 119 public: 120 ProgramInterfaceQueryTestCase (Context& context, const char* name, const char* description, ProgramResourceQueryTestTarget queryTarget); 121 ~ProgramInterfaceQueryTestCase (void); 122 123 protected: 124 ProgramInterface getTargetInterface (void) const; 125 126 private: 127 IterateResult iterate (void); 128 virtual ProgramInterfaceDefinition::Program* getProgramDefinition (void) = 0; 129 virtual std::vector<std::string> getQueryTargetResources (void) = 0; 130 131 const ProgramResourceQueryTestTarget m_queryTarget; 132 }; 133 134 void checkProgramResourceUsage (const ProgramInterfaceDefinition::Program* program, const glw::Functions& gl, tcu::TestLog& log); 135 136 } // Functional 137 } // gles31 138 } // deqp 139 140 #endif // _ES31FPROGRAMINTERFACEQUERYTESTCASE_HPP 141