webkit  2cdf99a9e3038c7e01b3c37e8ad903ecbe5eecf1
https://github.com/WebKit/webkit
formatutils.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // formatutils.h: Queries for GL image formats.
8 
9 #ifndef LIBANGLE_FORMATUTILS_H_
10 #define LIBANGLE_FORMATUTILS_H_
11 
12 #include <cstddef>
13 #include <stdint.h>
14 
15 #include "angle_gl.h"
16 #include "libANGLE/Caps.h"
17 #include "libANGLE/Error.h"
18 #include "libANGLE/angletypes.h"
19 
20 namespace gl
21 {
22 
24 {
25  FormatType();
26  FormatType(GLenum format_, GLenum type_);
27  FormatType(const FormatType &other) = default;
28  FormatType &operator=(const FormatType &other) = default;
29 
30  bool operator<(const FormatType &other) const;
31 
34 };
35 
36 struct Type
37 {
38  Type();
39 
41  GLuint bytesShift; // Bit shift by this value to effectively divide/multiply by "bytes" in a more optimal way
43 };
44 const Type &GetTypeInfo(GLenum type);
45 
47 {
49 
50  GLuint computePixelBytes(GLenum formatType) const;
51 
52  ErrorOrResult<GLuint> computeRowPitch(GLenum formatType,
53  GLsizei width,
54  GLint alignment,
55  GLint rowLength) const;
56  ErrorOrResult<GLuint> computeDepthPitch(GLsizei height,
57  GLint imageHeight,
58  GLuint rowPitch) const;
59  ErrorOrResult<GLuint> computeDepthPitch(GLenum formatType,
60  GLsizei width,
61  GLsizei height,
62  GLint alignment,
63  GLint rowLength,
64  GLint imageHeight) const;
65 
66  ErrorOrResult<GLuint> computeCompressedImageSize(GLenum formatType,
67  const Extents &size) const;
68 
69  ErrorOrResult<GLuint> computeSkipBytes(GLuint rowPitch,
70  GLuint depthPitch,
72  bool is3D) const;
73 
74  ErrorOrResult<GLuint> computePackUnpackEndByte(GLenum formatType,
75  const Extents &size,
76  const PixelStoreStateBase &state,
77  bool is3D) const;
78 
79  bool isLUMA() const;
80  GLenum getReadPixelsFormat() const;
81  GLenum getReadPixelsType() const;
82 
83  bool operator==(const InternalFormat &other) const;
84  bool operator!=(const InternalFormat &other) const;
85 
87 
91 
93 
96 
99 
101 
103 
107 
110 
113 
114  typedef bool (*SupportCheckFunction)(GLuint, const Extensions &);
115  SupportCheckFunction textureSupport;
116  SupportCheckFunction renderSupport;
117  SupportCheckFunction filterSupport;
118 };
119 
120 // A "Format" is either a sized format, or an {unsized format, type} combination.
121 struct Format
122 {
123  // Sized types only.
124  explicit Format(GLenum internalFormat);
125  explicit Format(const InternalFormat &internalFormat);
126 
127  // Sized or unsized types.
128  Format(GLenum internalFormat, GLenum format, GLenum type);
129 
130  Format(const Format &other);
131  Format &operator=(const Format &other);
132 
133  GLenum asSized() const;
134  bool valid() const;
135 
136  static Format Invalid();
137  static bool SameSized(const Format &a, const Format &b);
138 
139  // This is the sized info.
143  bool sized;
144 };
145 
147 
149 
150 typedef std::set<GLenum> FormatSet;
151 const FormatSet &GetAllSizedInternalFormats();
152 
153 // From the ESSL 3.00.4 spec:
154 // Vertex shader inputs can only be float, floating-point vectors, matrices, signed and unsigned
155 // integers and integer vectors. Vertex shader inputs cannot be arrays or structures.
156 
158 {
180 };
181 
183 
185 {
277 };
278 
279 typedef std::vector<VertexFormatType> InputLayout;
280 
282 {
283  VertexFormat(GLenum typeIn, GLboolean normalizedIn, GLuint componentsIn, bool pureIntegerIn);
284 
289 };
290 
293 VertexFormatType GetVertexFormatType(const VertexAttribute &attrib, GLenum currentValueType);
294 const VertexFormat &GetVertexFormatFromType(VertexFormatType vertexFormatType);
295 
296 // Implemented in format_map_autogen.cpp
298 bool ValidES3Type(GLenum type);
300 
301 } // namespace gl
302 
303 #endif // LIBANGLE_FORMATUTILS_H_
Definition: formatutils.h:241
Definition: formatutils.h:234
Definition: formatutils.h:258
int GLint
Definition: gl2.h:76
Definition: formatutils.h:179
Definition: formatutils.h:242
GLenum internalFormat
Definition: formatutils.h:86
Definition: formatutils.h:177
GLuint pixelBytes
Definition: formatutils.h:100
Definition: formatutils.h:227
GLenum componentType
Definition: formatutils.h:111
bool ValidES3Type(GLenum type)
Definition: format_map_autogen.cpp:402
EGLStreamKHR EGLint EGLint EGLint size
Definition: eglext.h:984
Definition: formatutils.h:237
Definition: formatutils.h:223
Definition: formatutils.h:276
Definition: formatutils.h:171
Definition: formatutils.h:169
EGLSurface EGLint EGLint EGLint EGLint height
Definition: eglext.h:950
Definition: formatutils.h:191
GLenum type
Definition: formatutils.h:109
AttributeType
Definition: formatutils.h:157
bool operator==(const Extents &lhs, const Extents &rhs)
Definition: angletypes.cpp:134
GLboolean normalized
Definition: formatutils.h:286
Definition: formatutils.h:211
GLint GLint GLint GLsizei GLsizei GLenum format
Definition: gl2.h:403
Definition: formatutils.h:206
Definition: formatutils.h:231
Definition: formatutils.h:235
GLuint GLint internalFormat
Definition: gl2ext.h:1280
Definition: formatutils.h:251
Definition: formatutils.h:228
AttributeType GetAttributeType(GLenum enumValue)
Definition: formatutils.cpp:872
Definition: formatutils.h:174
Definition: formatutils.h:187
Definition: formatutils.h:266
Definition: formatutils.h:208
Definition: formatutils.h:46
Definition: formatutils.h:215
GLenum GetSizedInternalFormat(GLenum internalFormat, GLenum type)
Definition: formatutils.cpp:853
GLuint components
Definition: formatutils.h:287
Definition: formatutils.h:263
Definition: formatutils.h:232
EGLSurface EGLint EGLint EGLint width
Definition: eglext.h:950
GLenum colorEncoding
Definition: formatutils.h:112
Definition: formatutils.h:189
const FormatSet & GetAllSizedInternalFormats()
Definition: formatutils.cpp:863
GLenum type
Definition: formatutils.h:285
Definition: formatutils.h:260
GLuint greenBits
Definition: formatutils.h:89
Definition: formatutils.h:257
const Type & GetTypeInfo(GLenum type)
Definition: formatutils.cpp:644
Definition: formatutils.h:246
Definition: formatutils.h:216
Definition: formatutils.h:173
Definition: formatutils.h:233
Definition: formatutils.h:226
unsigned int GLenum
Definition: gl2.h:69
Definition: formatutils.h:198
GLenum type
Definition: formatutils.h:142
Definition: VertexAttribute.h:17
Definition: formatutils.h:160
Definition: formatutils.h:252
Definition: formatutils.h:194
VertexFormatType
Definition: formatutils.h:184
Definition: formatutils.h:221
Definition: formatutils.h:170
Definition: formatutils.h:253
Definition: formatutils.h:188
Definition: formatutils.h:230
GLuint alphaBits
Definition: formatutils.h:94
const InternalFormat & GetInternalFormatInfo(GLenum internalFormat)
Definition: formatutils.cpp:700
Definition: formatutils.h:238
Definition: angletypes.h:82
Definition: formatutils.h:269
Definition: formatutils.h:267
GLuint bytes
Definition: formatutils.h:40
Definition: formatutils.h:272
Definition: formatutils.h:167
Definition: formatutils.h:219
uint32_t Format
Definition: wav_header.cc:51
Definition: formatutils.h:159
bool specialInterpretation
Definition: formatutils.h:42
GLuint componentCount
Definition: formatutils.h:102
FormatType & operator=(const FormatType &other)=default
VertexFormatType GetVertexFormatType(GLenum type, GLboolean normalized, GLuint components, bool pureInteger)
Definition: formatutils.cpp:924
Definition: formatutils.h:195
bool pureInteger
Definition: formatutils.h:288
Definition: formatutils.h:176
GLuint redBits
Definition: formatutils.h:88
Definition: formatutils.h:217
Definition: formatutils.h:36
bool compressed
Definition: formatutils.h:104
GLenum type
Definition: formatutils.h:33
Definition: formatutils.h:264
Definition: formatutils.h:121
bool operator<(const FormatType &other) const
Definition: formatutils.cpp:39
GLint GLenum GLint components
Definition: gl2ext.h:992
Definition: formatutils.h:207
std::set< GLenum > FormatSet
Definition: formatutils.h:150
Definition: formatutils.h:161
SupportCheckFunction renderSupport
Definition: formatutils.h:116
GLuint compressedBlockWidth
Definition: formatutils.h:105
SupportCheckFunction textureSupport
Definition: formatutils.h:115
Definition: formatutils.h:201
Definition: formatutils.h:274
FormatType()
Definition: formatutils.cpp:31
Definition: angletypes.h:200
unsigned int GLuint
Definition: gl2.h:70
Definition: formatutils.h:197
Definition: formatutils.h:239
std::vector< VertexFormatType > InputLayout
Definition: formatutils.h:279
SupportCheckFunction filterSupport
Definition: formatutils.h:117
Definition: formatutils.h:162
Definition: formatutils.h:262
Definition: formatutils.h:186
Definition: formatutils.h:248
Definition: ApplePayLineItem.idl:30
Definition: formatutils.h:259
Definition: formatutils.h:200
Definition: formatutils.h:225
GLuint sharedBits
Definition: formatutils.h:95
Definition: formatutils.h:196
Definition: base64_test.cc:34
GLboolean GLboolean GLboolean GLboolean a
Definition: gl2ext.h:306
GLenum format
Definition: formatutils.h:141
Definition: formatutils.h:250
Definition: formatutils.h:214
Definition: formatutils.h:210
Definition: formatutils.h:243
Definition: formatutils.h:23
Definition: formatutils.h:165
Definition: formatutils.h:270
Definition: formatutils.h:193
Definition: formatutils.h:166
Definition: formatutils.h:255
EGLenum type
Definition: eglext.h:63
GLuint luminanceBits
Definition: formatutils.h:92
Definition: formatutils.h:199
Definition: formatutils.h:240
Definition: formatutils.h:202
Definition: formatutils.h:164
Definition: formatutils.h:192
bool ValidES3FormatCombination(GLenum format, GLenum type, GLenum internalFormat)
Definition: format_map_autogen.cpp:432
GLenum format
Definition: formatutils.h:108
Definition: formatutils.h:281
Definition: formatutils.h:168
const InternalFormat * info
Definition: formatutils.h:140
GLuint depthBits
Definition: formatutils.h:97
GLuint stencilBits
Definition: formatutils.h:98
Definition: formatutils.h:203
Definition: formatutils.h:261
GLint GLenum GLboolean normalized
Definition: gl2.h:521
const VertexFormat & GetVertexFormatFromType(VertexFormatType vertexFormatType)
Definition: formatutils.cpp:1192
Definition: formatutils.h:175
Definition: formatutils.h:163
Definition: formatutils.h:256
Definition: formatutils.h:178
Definition: formatutils.h:212
Definition: formatutils.h:271
unsigned char GLboolean
Definition: gl2.h:77
Definition: formatutils.h:213
Definition: formatutils.h:229
Definition: angleutils.h:26
Definition: formatutils.h:209
GLboolean GLboolean GLboolean b
Definition: gl2ext.h:306
int GLsizei
Definition: gl2.h:78
Definition: Error.h:52
Definition: formatutils.h:245
GLuint compressedBlockHeight
Definition: formatutils.h:106
bool operator!=(const Extents &lhs, const Extents &rhs)
Definition: angletypes.cpp:139
Definition: formatutils.h:205
Definition: formatutils.h:268
Definition: formatutils.h:224
bool sized
Definition: formatutils.h:143
bool ValidES3Format(GLenum format)
Definition: format_map_autogen.cpp:375
Definition: formatutils.h:218
Definition: formatutils.h:249
Definition: formatutils.h:254
Definition: formatutils.h:265
Definition: formatutils.h:275
Definition: formatutils.h:204
Type
Type of JSON value.
Definition: rapidjson.h:616
Definition: formatutils.h:220
Definition: formatutils.h:222
string state
Definition: buildtests.py:34
Definition: formatutils.h:273
GLenum format
Definition: formatutils.h:32
Definition: formatutils.h:190
Definition: Caps.h:69
Definition: entry_points_gles_2_0.h:15
Definition: formatutils.h:244
GLuint bytesShift
Definition: formatutils.h:41
GLuint blueBits
Definition: formatutils.h:90
Definition: formatutils.h:247
Definition: formatutils.h:172
Definition: formatutils.h:236