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 deUint32 colorComponentType (void) const; 63 64 tcu::RGBA colorBits (void) const { return tcu::RGBA(redSize(), greenSize(), blueSize(), alphaSize()); } 65 66 private: 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 88 typedef bool (*ConfigFilter) (const CandidateConfig& candidate); 89 90 class FilterList 91 { 92 public: 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 103 private: 104 std::vector<ConfigFilter> m_rules; 105 }; 106 107 } // eglu 108 109 #endif // _EGLUCONFIGFILTER_HPP 110