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