1#ifndef _EGLUCONFIGFILTER_HPP 2#define _EGLUCONFIGFILTER_HPP 3/*------------------------------------------------------------------------- 4 * drawElements Quality Program Tester Core 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 EGL Config selection helper. 24 *//*--------------------------------------------------------------------*/ 25 26#include "tcuDefs.hpp" 27#include "tcuRGBA.hpp" 28 29#include "eglwDefs.hpp" 30 31#include <vector> 32 33namespace eglw 34{ 35class Library; 36} 37 38namespace eglu 39{ 40 41class ConfigInfo; 42 43class CandidateConfig 44{ 45public: 46 CandidateConfig (const eglw::Library& egl, eglw::EGLDisplay display, eglw::EGLConfig config); 47 CandidateConfig (const ConfigInfo& configInfo); 48 49 int get (deUint32 attrib) const; 50 51 int id (void) const; 52 int redSize (void) const; 53 int greenSize (void) const; 54 int blueSize (void) const; 55 int alphaSize (void) const; 56 int depthSize (void) const; 57 int stencilSize (void) const; 58 int samples (void) const; 59 60 deUint32 renderableType (void) const; 61 deUint32 surfaceType (void) const; 62 deUint32 colorComponentType (void) const; 63 64 tcu::RGBA colorBits (void) const { return tcu::RGBA(redSize(), greenSize(), blueSize(), alphaSize()); } 65 66private: 67 enum Type 68 { 69 TYPE_EGL_OBJECT = 0, 70 TYPE_CONFIG_INFO, 71 72 TYPE_LAST 73 }; 74 75 const Type m_type; 76 union 77 { 78 struct 79 { 80 const eglw::Library* egl; 81 eglw::EGLDisplay display; 82 eglw::EGLConfig config; 83 } object; 84 const ConfigInfo* configInfo; 85 } m_cfg; 86}; 87 88typedef bool (*ConfigFilter) (const CandidateConfig& candidate); 89 90class FilterList 91{ 92public: 93 FilterList (void) {} 94 ~FilterList (void) {} 95 96 FilterList& operator<< (ConfigFilter filter); 97 FilterList& operator<< (const FilterList& other); 98 99 bool match (const eglw::Library& egl, eglw::EGLDisplay display, eglw::EGLConfig config) const; 100 bool match (const ConfigInfo& configInfo) const; 101 bool match (const CandidateConfig& candidate) const; 102 103private: 104 std::vector<ConfigFilter> m_rules; 105}; 106 107} // eglu 108 109#endif // _EGLUCONFIGFILTER_HPP 110