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 63 tcu::RGBA colorBits (void) const { return tcu::RGBA(redSize(), greenSize(), blueSize(), alphaSize()); } 64 65private: 66 enum Type 67 { 68 TYPE_EGL_OBJECT = 0, 69 TYPE_CONFIG_INFO, 70 71 TYPE_LAST 72 }; 73 74 const Type m_type; 75 union 76 { 77 struct 78 { 79 const eglw::Library* egl; 80 eglw::EGLDisplay display; 81 eglw::EGLConfig config; 82 } object; 83 const ConfigInfo* configInfo; 84 } m_cfg; 85}; 86 87typedef bool (*ConfigFilter) (const CandidateConfig& candidate); 88 89class FilterList 90{ 91public: 92 FilterList (void) {} 93 ~FilterList (void) {} 94 95 FilterList& operator<< (ConfigFilter filter); 96 FilterList& operator<< (const FilterList& other); 97 98 bool match (const eglw::Library& egl, eglw::EGLDisplay display, eglw::EGLConfig config) const; 99 bool match (const ConfigInfo& configInfo) const; 100 bool match (const CandidateConfig& candidate) const; 101 102private: 103 std::vector<ConfigFilter> m_rules; 104}; 105 106} // eglu 107 108#endif // _EGLUCONFIGFILTER_HPP 109