Home | History | Annotate | Download | only in functional
      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