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 33 namespace eglw 34 { 35 class Library; 36 } 37 38 namespace eglu 39 { 40 41 class ConfigInfo; 42 43 class CandidateConfig 44 { 45 public: 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 colorBits(void) const63 tcu::RGBA colorBits (void) const { return tcu::RGBA(redSize(), greenSize(), blueSize(), alphaSize()); } 64 65 private: 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 87 typedef bool (*ConfigFilter) (const CandidateConfig& candidate); 88 89 class FilterList 90 { 91 public: FilterList(void)92 FilterList (void) {} ~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 102 private: 103 std::vector<ConfigFilter> m_rules; 104 }; 105 106 } // eglu 107 108 #endif // _EGLUCONFIGFILTER_HPP 109