blob: 46719e18253d675dd8963a34733e138e3c635072 [file] [log] [blame]
Nicolas Capens0bac2852016-05-07 06:09:58 -04001// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Config.h: Defines the egl::Config class, describing the format, type
16// and size for an egl::Surface. Implements EGLConfig and related functionality.
17// [EGL 1.4] section 3.4 page 15.
18
19#ifndef INCLUDE_CONFIG_H_
20#define INCLUDE_CONFIG_H_
21
22#include "Renderer/Surface.hpp"
23
24#include <EGL/egl.h>
25
26#include <set>
27
28namespace egl
29{
30class Display;
31
32class Config
33{
34public:
Nicolas Capensc8fcfd82018-01-11 12:53:57 -050035 Config(sw::Format displayFormat, EGLint minSwapInterval, EGLint maxSwapInterval, sw::Format renderTargetFormat, sw::Format depthStencilFormat, EGLint multiSample);
Nicolas Capens0bac2852016-05-07 06:09:58 -040036
37 EGLConfig getHandle() const;
38
Nicolas Capens0bac2852016-05-07 06:09:58 -040039 const sw::Format mRenderTargetFormat;
40 const sw::Format mDepthStencilFormat;
41 const EGLint mMultiSample;
42
43 EGLint mBufferSize; // Depth of the color buffer
44 EGLint mRedSize; // Bits of Red in the color buffer
45 EGLint mGreenSize; // Bits of Green in the color buffer
46 EGLint mBlueSize; // Bits of Blue in the color buffer
47 EGLint mLuminanceSize; // Bits of Luminance in the color buffer
48 EGLint mAlphaSize; // Bits of Alpha in the color buffer
49 EGLint mAlphaMaskSize; // Bits of Alpha Mask in the mask buffer
50 EGLBoolean mBindToTextureRGB; // True if bindable to RGB textures.
51 EGLBoolean mBindToTextureRGBA; // True if bindable to RGBA textures.
52 EGLenum mColorBufferType; // Color buffer type
53 EGLenum mConfigCaveat; // Any caveats for the configuration
54 EGLint mConfigID; // Unique EGLConfig identifier
55 EGLint mConformant; // Whether contexts created with this config are conformant
56 EGLint mDepthSize; // Bits of Z in the depth buffer
57 EGLint mLevel; // Frame buffer level
58 EGLBoolean mMatchNativePixmap; // Match the native pixmap format
59 EGLint mMaxPBufferWidth; // Maximum width of pbuffer
60 EGLint mMaxPBufferHeight; // Maximum height of pbuffer
61 EGLint mMaxPBufferPixels; // Maximum size of pbuffer
62 EGLint mMaxSwapInterval; // Maximum swap interval
63 EGLint mMinSwapInterval; // Minimum swap interval
64 EGLBoolean mNativeRenderable; // EGL_TRUE if native rendering APIs can render to surface
65 EGLint mNativeVisualID; // Handle of corresponding native visual
66 EGLint mNativeVisualType; // Native visual type of the associated visual
67 EGLint mRenderableType; // Which client rendering APIs are supported.
68 EGLint mSampleBuffers; // Number of multisample buffers
69 EGLint mSamples; // Number of samples per pixel
70 EGLint mStencilSize; // Bits of Stencil in the stencil buffer
71 EGLint mSurfaceType; // Which types of EGL surfaces are supported.
72 EGLenum mTransparentType; // Type of transparency supported
73 EGLint mTransparentRedValue; // Transparent red value
74 EGLint mTransparentGreenValue; // Transparent green value
75 EGLint mTransparentBlueValue; // Transparent blue value
76
77 EGLBoolean mRecordableAndroid; // EGL_ANDROID_recordable
78 EGLBoolean mFramebufferTargetAndroid; // EGL_ANDROID_framebuffer_target
79};
80
81struct CompareConfig
82{
83 bool operator()(const Config &x, const Config &y) const;
84};
85
86class ConfigSet
87{
88 friend class Display;
89
90public:
91 ConfigSet();
92
93 void add(sw::Format displayFormat, EGLint minSwapInterval, EGLint maxSwapInterval, sw::Format renderTargetFormat, sw::Format depthStencilFormat, EGLint multiSample);
94 size_t size() const;
95 bool getConfigs(EGLConfig *configs, const EGLint *attribList, EGLint configSize, EGLint *numConfig);
96 const egl::Config *get(EGLConfig configHandle);
97
98private:
99 typedef std::set<Config, CompareConfig> Set;
100 typedef Set::iterator Iterator;
101 Set mSet;
102};
103}
104
105#endif // INCLUDE_CONFIG_H_