Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/angle
Path: blob/main_old/extensions/ANGLE_texture_multisample.txt
1693 views
1
Name
2
3
ANGLE_texture_multisample
4
5
Name Strings
6
7
GL_ANGLE_texture_multisample
8
9
Contributors
10
11
Yunchao He, Intel Corporation
12
Yizhou Jiang, Intel Corporation
13
Contributors to the OpenGL ES 3.1, GLSL ES 3.1, and ARB_texture_multisample
14
15
Contact
16
17
Yunchao He (yunchao.he 'at' intel.com)
18
19
Status
20
21
Incomplete
22
23
Version
24
25
Last Modified Date: August 27, 2018
26
Author Revision: 1
27
28
Number
29
30
OpenGL ES Extension XX
31
32
Dependencies
33
34
OpenGL ES 3.0 is required.
35
36
This extension is written against the OpenGL ES 3.0.5 and OpenGL ES
37
Shading Language 3.0 (Document Revision 6) specifications.
38
39
KHR_robustness affects the behavior of this specification.
40
41
Overview
42
43
This extension provides support for a new type of texture -
44
two-dimensional multisample textures - as well as mechanisms to
45
allocate storage and attach such textures to FBOs for rendering.
46
It also add supports using such textures in a shader, fetching specific
47
samples from such textures in a shader, and querying the dimensions of
48
such textures in a shader.
49
50
This extension also includes the following functionality, some of which
51
was first described in NV_explicit_multisample:
52
53
* An API to query the location of samples within the pixel
54
55
* An explicit control for the multisample sample mask to augment the
56
control provided by SampleCoverage
57
58
* An API to query the texture's level-of-detail information for various
59
parameters
60
61
* A mechanism to support the SAMPLE_MASK capability
62
63
* A mechanism to return corresponding types for multisample textures when
64
the uniform type is queried by getActiveUniform
65
66
This extension does not expose multisampled 2D array textures, because they
67
are not supported in OpenGL ES 3.1.
68
69
IP Status
70
71
No known IP claims.
72
73
New Procedures and Functions
74
75
void TexStorage2DMultisampleANGLE(enum target,
76
sizei samples,
77
enum sizedinternalformat,
78
sizei width,
79
sizei height,
80
boolean fixedsamplelocations);
81
82
void GetMultisamplefvANGLE(enum pname, uint index, float *val);
83
84
void SampleMaskiANGLE(uint maskNumber, bitfield mask);
85
86
void GetTexLevelParameter{if}vANGLE(enum target, int level,
87
enum pname, T *params );
88
89
New Tokens
90
91
Accepted by the <target> parameter of BindTexture,
92
TexStorage2DMultisampleANGLE, GetInternalformativ, TexParameter{if}*,
93
GetTexParameter{if}v, GetTexLevelParameter{if}vANGLE and
94
by the <textarget> parameter of FramebufferTexture2D:
95
96
TEXTURE_2D_MULTISAMPLE_ANGLE 0x9100
97
98
Accepted by the <pname> parameter of GetMultisamplefvANGLE:
99
100
SAMPLE_POSITION_ANGLE 0x8E50
101
102
Accepted by the <cap> parameter of Enable, Disable, and IsEnabled:
103
104
SAMPLE_MASK_ANGLE 0x8E51
105
106
Accepted by the <target> parameter of GetIntegeri_v:
107
108
SAMPLE_MASK_VALUE_ANGLE 0x8E52
109
110
Accepted by the <pname> parameter of GetIntegerv:
111
112
MAX_SAMPLE_MASK_WORDS_ANGLE 0x8E59
113
MAX_COLOR_TEXTURE_SAMPLES_ANGLE 0x910E
114
MAX_DEPTH_TEXTURE_SAMPLES_ANGLE 0x910F
115
MAX_INTEGER_SAMPLES_ANGLE 0x9110
116
TEXTURE_BINDING_2D_MULTISAMPLE_ANGLE 0x9104
117
118
Accepted by the <pname> parameter of GetTexLevelParameter{if}vANGLE:
119
120
TEXTURE_SAMPLES_ANGLE 0x9106
121
TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE 0x9107
122
TEXTURE_WIDTH 0x1000
123
TEXTURE_HEIGHT 0x1001
124
TEXTURE_DEPTH 0x8071
125
TEXTURE_INTERNAL_FORMAT 0x1003
126
TEXTURE_RED_SIZE 0x805C
127
TEXTURE_GREEN_SIZE 0x805D
128
TEXTURE_BLUE_SIZE 0x805E
129
TEXTURE_ALPHA_SIZE 0x805F
130
TEXTURE_DEPTH_SIZE 0x884A
131
TEXTURE_STENCIL_SIZE 0x88F1
132
TEXTURE_SHARED_SIZE 0x8C3F
133
TEXTURE_RED_TYPE 0x8C10
134
TEXTURE_GREEN_TYPE 0x8C11
135
TEXTURE_BLUE_TYPE 0x8C12
136
TEXTURE_ALPHA_TYPE 0x8C13
137
TEXTURE_DEPTH_TYPE 0x8C16
138
TEXTURE_COMPRESSED 0x86A1
139
140
Returned by the <type> parameter of GetActiveUniform:
141
142
SAMPLER_2D_MULTISAMPLE_ANGLE 0x9108
143
INT_SAMPLER_2D_MULTISAMPLE_ANGLE 0x9109
144
UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ANGLE 0x910A
145
146
Additions to Chapter 2 of the OpenGL ES 3.0.5 Specification (OpenGL ES
147
Operation)
148
149
Add to table 2.10 "OpenGL ES Shading Language type tokens" page 64:
150
151
Type Name Token Keyword
152
----------------------------------------- ------------
153
SAMPLER_2D_MULTISAMPLE_ANGLE sampler2DMS
154
INT_SAMPLER_2D_MULTISAMPLE_ANGLE isampler2DMS
155
UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ANGLE usampler2DMS
156
157
Add to section 2.12.9, after subsection "Texel Fetches":
158
159
Multisample Texel Fetches
160
161
Multisample buffers do not have mipmaps, and there is no level of
162
detail parameter for multisample texel fetches. Instead, an integer
163
parameter selects the sample number to be fetched from the buffer.
164
The number identifying the sample is the same as the value used to
165
query the sample location using GetMultisamplefvANGLE. Multisample
166
textures are not filtered when samples are fetched, and filter state
167
is ignored.
168
169
If the context was created with robust buffer access enabled, the result
170
of the texel fetch in the following cases is zero. If robust buffer
171
access is not enabled, the result of the texel fetch is undefined if
172
any of the following conditions hold:
173
174
* the texel coordinate (i, j) refer to a texel outside the extents
175
of the multisample texture image, where any of
176
i < 0 i >= W
177
j < 0 j >= H
178
and the size parameter W and H refer to the width and height of
179
the image.
180
181
* the specified sample number does not exist (is negative, or greater
182
than or equal to the number of samples in the texture).
183
184
Additionally, these fetches may only be performed on a multisample
185
texture sampler. No other sample or fetch commands may be performed
186
on a multisample texture sampler.
187
188
Additions to Chapter 3 of the OpenGL ES 3.0.5 Specification (Rasterization)
189
190
Insert into section 3.3, "Multisampling" after the discussion of
191
the query for SAMPLES:
192
193
(..., and is queried by calling GetIntegerv with pname set to SAMPLES.)
194
195
The location at which shading is performed for a given sample (the
196
shading sample location) is queried with the command
197
198
void GetMultisamplefvANGLE(enum pname, uint index, float *val);
199
200
<pname> must be SAMPLE_POSITION_ANGLE, and <index> corresponds to the
201
sample for which the location should be returned. The shading sample
202
location (x, y) is returned as two floating-point values in (val[0],
203
val[1]) respectively. x and y each lie in the range [0, 1] and
204
represent a location in pixel space at which depth and associated
205
data for that sample are evaluated for a fragment (e.g. where sample
206
shading is performed). (0.5, 0.5) thus corresponds to the pixel center.
207
If the multisample mode does not have fixed sample locations, the returned
208
values may only reflect the locations of samples within some pixels.
209
210
An INVALID_ENUM error is generated if <pname> is not SAMPLE_LOCATION.
211
An INVALID_VALUE error is generated if <index> is greater than or equal to
212
the value of SAMPLES.
213
214
Modify Section 3.8.1, "Texture Objects":
215
216
(modify first paragraph of section, p. 122, simply adding
217
references to multisample textures)
218
219
Textures in GL are represented by named objects. The name space for texture
220
objects is the unsigned integers, with zero reserved by the GL to represent
221
the default texture object. The default texture object is bound to each of
222
the TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP, and
223
TEXTURE_2D_MULTISAMPLE_ANGLE targets during context initialization.
224
225
(modify the last paragraph, p. 123)
226
227
The texture object name space, including the initial two- and
228
three-dimensional, two-dimensional array, cube map, and two-dimensional
229
multisample texture objects, is shared among all texture units. A texture
230
object may be bound to more than one texture unit simultaneously. After a
231
texture object is bound, any GL operations on that target object affect
232
any other texture units to which the same texture object is bound.
233
234
Modify Section 3.8.3, "Texture Image Specification" (p. 134):
235
236
(add the new target to MAX_TEXTURE_SIZE description)
237
238
In a similar fashion, the maximum allowable width of a texel array
239
for a two-dimensional texture, two-dimensional array texture,
240
or two-dimensional multisample texture, and the maximum allowable
241
height of a two-dimensional texture, two-dimensional array texture,
242
or two-dimensional multisample texture, must be at least 2^(k-lod)
243
for image arrays of level 0 through k, where k is the log base 2 of
244
MAX_TEXTURE_SIZE.
245
246
Insert new Section 3.8.5, "Multisample Textures". Renumber subsequent
247
sections:
248
249
In addition to the texture types described in previous sections, an
250
additional type of texture is supported. A multisample texture is
251
similar to a two-dimensional texture, except it contains multiple
252
samples per texel. Multisample textures do not have multiple image
253
levels, and are immutable.
254
255
The command
256
257
void TexStorage2DMultisampleANGLE(enum target, sizei samples,
258
int sizedinternalformat,
259
sizei width, sizei height,
260
boolean fixedsamplelocations);
261
262
establishes the data storage, format, dimensions, and number of samples
263
of a multisample texture's image. <target> must be
264
TEXTURE_2D_MULTISAMPLE_ANGLE. <width> and <height> are the dimensions
265
in texels of the texture.
266
267
<samples> represents a request for a desired minimum number of samples.
268
Since different implementations may support different sample counts for
269
multisampled textures, the actual number of samples allocated for the
270
texture image is implementation-dependent. However, the resulting value
271
for TEXTURE_SAMPLES_ANGLE is guaranteed to be greater than or equal to
272
<samples> and no more than the next larger sample count supported by the
273
implementation.
274
275
If <fixedsamplelocations> is TRUE, the image will use identical sample
276
locations and the same number of samples for all texels in the image,
277
and the sample locations will not depend on the sizedinternalformat or
278
size of the image.
279
280
Upon success, TexStorage2DMultisampleANGLE deletes any existing image
281
for <target> and the contents of texels are undefined. The values of
282
TEXTURE_WIDTH, TEXTURE_HEIGHT, TEXTURE_SAMPLES_ANGLE,
283
TEXTURE_INTERNAL_FORMAT and TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE are
284
set to <width>, <height>, the actual number of samples allocated,
285
<sizedinternalformat>, and <fixedsamplelocations> respectively.
286
287
When a multisample texture is accessed in a shader, the access takes one
288
vector of integers describing which texel to fetch and an integer
289
corresponding to the sample numbers described in section 3.3 describing
290
which sample within the texel to fetch. No standard sampling instructions
291
are allowed on the multisample texture targets, and no filtering is
292
performed by the fetch. Fetching a sample number less than zero, or
293
greater than or equal to the number of samples in the texture, produces
294
undefined results.
295
296
An INVALID_ENUM error is generated if target is not
297
TEXTURE_2D_MULTISAMPLE_ANGLE.
298
An INVALID_OPERATION error is generated if zero is bound to <target>.
299
An INVALID_VALUE is generated if <width> or <height> is less than 1.
300
An INVALID_VALUE is generated if <width> or <height> is greater than
301
the value of MAX_TEXTURE_SIZE.
302
An INVALID_VALUE is generated if samples is zero.
303
An INVALID_ENUM error is generated if <sizedinternalformat> is not
304
color-renderable, depth-renderable, or stencil-renderable (as defined
305
in section 4.4.4).
306
An INVALID_ENUM error is generated if <sizedinternalformat> is one of the
307
unsized base internal formats listed in table 3.11.
308
An INVALID_OPERATION is generated if <samples> is greater than the maximum
309
number of samples supported for this <target> and <sizedinternalformat>,
310
The maximum number of samples supported can be determined by calling
311
GetInternalformativ with a <pname> of SAMPLES (see section 6.1.15).
312
An INVALID_OPERATION is generated if the value of TEXTURE_IMMUTABLE_FORMAT
313
for the texture currently bound to <target> on the active texture unit is
314
TRUE.
315
An OUT_OF_MEMORY error is generated if the GL is unable to create a texture
316
image of the requested size.
317
318
Modify Section 3.8.7, "Texture Parameters":
319
320
(add TEXTURE_2D_MULTISAMPLE_ANGLE to the texture targets accepted by
321
TexParameter*)
322
323
<target> is the target, either TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY,
324
TEXTURE_CUBE_MAP, or TEXTURE_2D_MULTISAMPLE_ANGLE.
325
326
Add the following paragraph to the end of Section 3.8.7:
327
328
An INVALID_ENUM is generated if <target> is TEXTURE_2D_MULTISAMPLE_ANGLE
329
and <pname> is any sampler state from table 6.10. An INVALID_OPERATION
330
error is generated if <target> is TEXTURE_2D_MULTISAMPLE_ANGLE, and
331
<pname> TEXTURE_BASE_LEVEL is set to any value other than zero.
332
333
Modify Section 3.8.14, "Texture State" (p. 162):
334
335
(... the compressed flag set to FALSE, and a zero compressed size).
336
337
Multisample textures also contain an integer identifying the number of
338
samples in each texel, and a boolean indicating whether identical sample
339
locations and number of samples will be used for all texels in the image.
340
341
Additions to Chapter 4 of the OpenGL ES 3.0.5 Specification (Per-Fragment
342
Operations and the Framebuffer)
343
344
Modify Section 4.1.3, "Multisample Fragment Operations" (p. 174):
345
346
(modify the first paragraph to include SAMPLE_MASK_ANGLE and
347
SAMPLE_MASK_VALUE_ANGLE on the list of values the coverage value is
348
modified based on.)
349
350
This step modifies fragment alpha and coverage values based on the values
351
of SAMPLE_ALPHA_TO_COVERAGE, SAMPLE_COVERAGE, SAMPLE_COVERAGE_VALUE,
352
SAMPLE_COVERAGE_INVERT, SAMPLE_MASK_ANGLE, and SAMPLE_MASK_VALUE_ANGLE.
353
354
Add to the end of Section 4.1.3, after the discussion of SAMPLE_COVERAGE:
355
356
If SAMPLE_MASK_ANGLE is enabled, the fragment coverage is ANDed
357
with the coverage value SAMPLE_MASK_VALUE_ANGLE.
358
359
The value of SAMPLE_MASK_VALUE_ANGLE is specified using
360
361
void SampleMaskiANGLE(GLuint maskNumber, GLbitfield mask);
362
363
with <mask> set to the desired mask for mask word <maskNumber>. Bit B of
364
mask word M corresponds to sample 32*M+B as described in Section 3.3. The
365
sample mask value is queried by calling GetIntegeri_v with <target> set to
366
SAMPLE_MASK_VALUE_ANGLE and the index set to <maskNumber>.
367
368
An INVALID_VALUE error is generated if <maskNumber> is greater than or
369
equal to the value of MAX_SAMPLE_MASK_WORDS_ANGLE.
370
371
Modify Section 4.4.2, "Attaching Images to Framebuffer Objects":
372
373
(the first paragraph of RenderbufferStorageMultisample p. 204)
374
375
... If either <width> or <height> is greater than the value of
376
MAX_RENDERBUFFER_SIZE, then the error INVALID_VALUE is generated. If
377
<samples> is greater than the maximum number of samples supported for
378
<sizedinternalformat>, then the error INVALID_OPERATION is generated (see
379
GetInternalformativ in section 6.1.15). If the GL is unable to create
380
a data store of the requested size, the error OUT_OF_MEMORY is generated.
381
382
(the third paragraph of "Required Renderbuffer Formats" p. 205):
383
384
Implementations must support creation of renderbuffers in these
385
required formats with up to the value of MAX_SAMPLES multisamples,
386
with the exception that the signed and unsigned integer formats are
387
required only to support creation of renderbuffers with up to the
388
value of MAX_INTEGER_SAMPLES_ANGLE multisamples, which must be at
389
least one.
390
391
(modify section 4.4.2.4 "Attaching Texture Images to a Framebuffer",
392
describing FrameBufferTexture2D p. 207)
393
394
If texture is not zero, then texture must either name an existing
395
two-dimensional texture object and textarget must be TEXTURE_2D, texture
396
must name an existing cube map texture and textarget must be one of the
397
cube map face targets from table 3.21, or texture must name an existing
398
multisample texture and textarget must be TEXTURE_2D_MULTISAMPLE_ANGLE.
399
Otherwise, an INVALID_OPERATION error is generated.
400
401
<level> specifies ...
402
403
If <textarget> is TEXTURE_2D_MULTISAMPLE_ANGLE, then <level> must be zero.
404
Otherwise, an INVALID_VALUE error is generated. If textarget is one of ...
405
406
407
Modify Section 4.4.4.2, "Whole Framebuffer Completeness":
408
409
(modify the last bullet at the top of p. 215)
410
411
- The value of RENDERBUFFER_SAMPLES is the same for all attached
412
renderbuffers; the value of TEXTURE_SAMPLES_ANGLE is the same for all
413
attached textures; and, if the attached images are a mix of
414
renderbuffers and textures, the value of RENDERBUFFER_SAMPLES
415
matches the value of TEXTURE_SAMPLES_ANGLE.
416
417
{ FRAMEBUFFER_INCOMPLETE_MULTISAMPLE }
418
419
(add one more bullet after the last bullet, p. 215)
420
421
- The value of TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE is the same for all
422
attached textures; and, if the attached images are a mix of renderbuffers
423
and textures, the value of TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE must be
424
TRUE for all attached textures.
425
426
{ FRAMEBUFFER_INCOMPLETE_MULTISAMPLE }
427
428
Additions to Chapter 6 of the OpenGL ES 3.0.5 Specification (State and State
429
Requests)
430
431
Modify Section 6.1.3, "Enumerated Queries":
432
433
(modify the paragraph describing the <target> parameter of
434
GetTexParameter*)
435
436
<target> may be one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY,
437
TEXTURE_CUBE_MAP, or TEXTURE_2D_MULTISAMPLE_ANGLE, indicating the
438
currently bound two-dimensional, three-dimensional, two-dimensional
439
array, cube map, or two-dimensional multisample texture object,
440
respectively.
441
442
An INVALID_ENUM is generated if <target> is not one of the texture
443
targets described above.
444
An INVALID_ENUM is generated if <pname> is not one of the texture
445
parameters described above.
446
447
Modify Section 6.1.4 "Texture Queries":
448
449
(Add the following text to the end of the section)
450
451
The commands
452
453
void GetTexLevelParameter{if}vANGLE(enum target, int level,
454
enum pname, T *params );
455
456
place information about texture image parameter <pname> for level-of-detail
457
<level> of the specified target into <params>. <pname> must be one of the
458
symbolic values in table 6.11.
459
460
<target> may be one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, one of
461
the cube map face targets from table 3.18, or TEXTURE_2D_MULTISAMPLE_ANGLE,
462
indicating the two- or three-dimensional texture, two-dimensional array
463
texture, one of the six distinct 2D images making up the cube map texture
464
object, or two-dimensional multisample texture. Otherwise an INVALID_ENUM is
465
generated.
466
467
<level> determines which level-of-detail's state is returned. If <level>
468
is negative or larger than the maximum allowable level-of-detail, then an
469
INVALID_VALUE error is generated.
470
471
Note that TEXTURE_CUBE_MAP is not a valid <target> parameter for
472
GetTexLevelParameter{if}vANGLE, because it does not specify a particular
473
cube map face.
474
475
For texture images with uncompressed internal formats, queries of
476
<pname> TEXTURE_RED_TYPE, TEXTURE_GREEN_TYPE, TEXTURE_BLUE_TYPE,
477
TEXTURE_ALPHA_TYPE, and TEXTURE_DEPTH_TYPE return the data type used
478
to store the component. Types NONE, SIGNED_NORMALIZED, UNSIGNED_-
479
NORMALIZED, FLOAT, INT, and UNSIGNED_INT respectively indicate missing,
480
signed normalized fixed-point, unsigned normalized fixed-point,
481
floating-point, signed unnormalized integer, and unsigned unnormalized
482
integer components. Queries of <pname> TEXTURE_RED_SIZE, TEXTURE_GREEN_SIZE,
483
TEXTURE_BLUE_SIZE, TEXTURE_ALPHA_SIZE, TEXTURE_DEPTH_SIZE,
484
TEXTURE_STENCIL_SIZE, and TEXTURE_SHARED_SIZE return the actual resolutions
485
of the stored image components, not the resolutions specified when the image
486
was defined. Invalid <pname> generate an INVALID_ENUM error.
487
488
For texture images with compressed internal formats, the types returned
489
specify how components are interpreted after decompression, while the
490
resolutions returned specify the component resolution of an uncompressed
491
internal format that produces an image of roughly the same quality as the
492
compressed image in question. Since the quality of the implementation's
493
compression algorithm is likely data-dependent, the returned component sizes
494
should be treated only as rough approximations.
495
496
Queries of <pname> TEXTURE_INTERNAL_FORMAT, TEXTURE_WIDTH, TEXTURE_HEIGHT,
497
and TEXTURE_DEPTH return the internal format, width, height, and depth,
498
respectively, as specified when the image array was created.
499
500
Queries of <pname> TEXTURE_SAMPLES_ANGLE, and
501
TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE on multisample textures return the
502
number of samples and whether texture sample fixed locations are enabled,
503
respectively. For non-multisample texture, the default values 0 and TRUE
504
as in new added table 6.11 are returned respectively.
505
506
Modify Section 6.1.15, "Internal Format Queries":
507
508
(modify the paragraph describing target as follows, p. 244)
509
510
<target> indicates the usage of the internalformat, and must be either
511
RENDERBUFFER or TEXTURE_2D_MULTISAMPLE_ANGLE, indicating the renderbuffer,
512
or two-dimensional multisample texture. Otherwise an INVALID_ENUM error
513
is generated.
514
515
(add the following paragraph after "Querying SAMPLES with a <bufSize>
516
...")
517
518
The maximum value of SAMPLES is guaranteed to be at least the lowest of
519
the value of MAX_INTEGER_SAMPLES_ANGLE if internal format is a signed or
520
unsigned integer format, the value of MAX_DEPTH_TEXTURE_SAMPLES_ANGLE if
521
internalformat is a depth or stencil-renderable format and target is
522
TEXTURE_2D_MULTISAMPLE_ANGLE, the value of MAX_COLOR_TEXTURE_SAMPLES_ANGLE
523
if internal format is a color-renderable format and target is
524
TEXTURE_2D_MULTISAMPLE_ANGLE, or the value of MAX_SAMPLES.
525
526
(remove the last paragraph on p. 244)
527
"Since multisampling is not supported for signed and unsigned integer
528
internal formats, the value of NUM_SAMPLE_COUNTS will be zero for such
529
formats."
530
531
(modify to the first paragraph on p. 245)
532
When query every accepted <internalformat> on multisample renderbuffer or
533
texture, the value of NUM_SAMPLE_COUNTS is guaranteed to be at least
534
one, and the maximum value in SAMPLES is guaranteed to be at least the
535
value of MAX_SAMPLES. If <target> does not support multisample (is not
536
multisample renderbuffer or texture), the value of NUM_SAMPLE_COUNTS will
537
be zero for any accepted <internalformat>.
538
539
Errors
540
541
The error INVALID_VALUE is generated by GetIntegeri_v if <target> is
542
SAMPLE_MASK_VALUE_ANGLE and <index> is greater than or equal to
543
MAX_SAMPLE_MASK_WORDS_ANGLE.
544
545
The error INVALID_VALUE is generated by SampleMaskiANGLE if <index> is
546
greater than or equal to MAX_SAMPLE_MASK_WORDS_ANGLE.
547
548
The error INVALID_ENUM is generated by TexStorage2DMultisampleANGLE if
549
<target> is not TEXTURE_2D_MULTISAMPLE_ANGLE.
550
551
The error INVALID_OPERATION is generated by TexStorage2DMultisampleANGLE
552
if zero is bound to <target>.
553
554
The error INVALID_VALUE is generated by TexStorage2DMultisampleANGLE if
555
<width> or <height> is less than 1 or greater than the value of
556
MAX_TEXTURE_SIZE.
557
558
The error INVALID_VALUE is generated by TexStorage2DMultisampleANGLE if
559
<samples> is zero.
560
561
The error INVALID_ENUM is generated by TexStorage2DMultisampleANGLE if
562
<sizedinternalformat> is not color-renderable, depth-renderable, or
563
stencil-renderable (as defined
564
in section 4.4.4).
565
566
The error INVALID_ENUM is generated by TexStorage2DMultisampleANGLE if
567
<sizedinternalformat> is one of the unsized base internal formats listed
568
in table 3.11.
569
570
The error INVALID_OPERATION is generated by TexStorage2DMultisampleANGLE
571
if <samples> is greater than the maximum number of samples supported for
572
this <target> and <sizedinternalformat>, The maximum number of samples
573
supported can be determined by calling GetInternalformativ with a <pname>
574
of SAMPLES (see section 6.1.15).
575
576
The error INVALID_OPERATION is generated by TexStorage2DMultisampleANGLE
577
if the value of TEXTURE_IMMUTABLE_FORMAT for the texture currently bound
578
to <target> on the active texture unit is TRUE.
579
580
The error OUT_OF_MEMORY is generated by TexStorage2DMultisampleANGLE
581
if the GL is unable to create a texture image of the requested size.
582
583
The error INVALID_ENUM is generated by GetMultisamplefvANGLE if <pname>
584
is not SAMPLE_POSITION_ANGLE.
585
586
The error INVALID_VALUE is generated by GetMultisamplefvANGLE if <index>
587
is greater than or equal to the value of SAMPLES.
588
589
The error INVALID_OPERATION is generated by RenderbufferStorageMultisample
590
if <sizedinternalformat> is a signed or unsigned integer format and
591
<samples> is greater than the value of MAX_INTEGER_SAMPLES_ANGLE.
592
593
The error INVALID_OPERATION is generated by TexParameter* if <target> is
594
TEXTURE_2D_MULTISAMPLE_ANGLE, <pname> is TEXTURE_BASE_LEVEL, and <value>
595
is not zero.
596
597
The error INVALID_OPERATION is generated by TexParameter* if <target> is
598
TEXTURE_2D_MULTISAMPLE_ANGLE and <pname> is sampler state value from table
599
6.10.
600
601
The error INVALID_ENUM is generated by GetTexLevelParameter{if}vANGLE
602
if <target> is not one of TEXTURE_2D, TEXTURE_3D, TEXTURE_2D_ARRAY, one of
603
the cube map face targets from table 3.18, or TEXTURE_2D_MULTISAMPLE_ANGLE.
604
605
The error INVALID_VALUE is generated by GetTexLevelParameter{if}vANGLE
606
if <level> is negative or larger than the maximum allowable level-of-detail.
607
608
The error INVALID_ENUM is generated by GetTexLevelParameter{if}vANGLE
609
if <value> is not one of TEXTURE_RED_TYPE, TEXTURE_GREEN_TYPE,
610
TEXTURE_BLUE_TYPE, TEXTURE_ALPHA_TYPE, TEXTURE_DEPTH_TYPE,
611
TEXTURE_DEPTH_SIZE, TEXTURE_STENCIL_SIZE, TEXTURE_SHARED_SIZE,
612
TEXTURE_SAMPLES_ANGLE, TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE, TEXTURE_WIDTH,
613
TEXTURE_HEIGHT, TEXTURE_DEPTH, TEXTURE_INTERNAL_FORMAT, TEXTURE_RED_SIZE,
614
TEXTURE_GREEN_SIZE, TEXTURE_BLUE_SIZE, TEXTURE_ALPHA_SIZE,
615
or TEXTURE_COMPRESSED.
616
617
New State
618
619
(add to table 6.7, Multisampling p. 252)
620
621
Initial
622
Get Value Type Get Command Value Description Sec.
623
--------- ---- ----------- ------- ---------------------- -----
624
SAMPLE_MASK_ANGLE B IsEnabled FALSE Additional sample mask 4.1.3
625
SAMPLE_MASK_VALUE_ANGLE nxZ+ GetIntegeri_v ~0 Additional sample mask value 4.1.3
626
627
Where n is the number of sample mask words (the value of
628
MAX_SAMPLE_MASK_WORDS_ANGLE) the implementation supports.
629
630
(add to table 6.8, Textures (selector, state per texture unit) p. 253)
631
632
Initial
633
Get Value Type Get Command Value Description Sec.
634
------------------------------------ ---- ----------- ------ --------------------------- -----
635
TEXTURE_BINDING_2D_MULTISAMPLE_ANGLE 32*xZ+ GetIntegerv 0 Texture object bound to 3.8.1
636
TEXTURE_2D_MULTISAMPLE_ANGLE
637
638
(add new table 6.10, Textures (state per texture image), renumber subsequent tables)
639
640
Initial
641
Get Value Type Get Command Value Description Sec.
642
---------------------- ---- ------------------- ------ --------------------------- ------
643
TEXTURE_SAMPLES_ANGLE Z+ GetTexLevelParameterANGLE 0 Number of samples per texel 3.8.5
644
TEXTURE_FIXED_SAMPLE_LOCATIONS_ANGLE B GetTexLevelParameterANGLE TRUE Whether the image uses a 3.8.5
645
fixed sample pattern
646
647
TEXTURE_WIDTH Z+ GetTexLevelParameterANGLE 0 Specified width 3.8
648
TEXTURE_HEIGHT Z+ GetTexLevelParameterANGLE 0 Specified height (2D/3D) 3.8
649
TEXTURE_DEPTH Z+ GetTexLevelParameterANGLE 0 Specified depth (3D) 3.8
650
TEXTURE_INTERNAL_FORMAT E GetTexLevelParameterANGLE RGBA Internal format 3.8
651
or R8 (see section 3.8.14)
652
TEXTURE_x_SIZE 6xZ+ GetTexLevelParameterANGLE 0 Component resolution (x is 3.8
653
RED, GREEN, BLUE, ALPHA,
654
DEPTH, or STENCIL)
655
TEXTURE_SHARED_SIZE Z+ GetTexLevelParameterANGLE 0 Shared exponent field 3.8
656
resolution
657
TEXTURE_x_TYPE E GetTexLevelParameterANGLE NONE Component type (x is RED, 6.1.4
658
GREEN, BLUE, ALPHA, or
659
DEPTH)
660
TEXTURE_COMPRESSED B GetTexLevelParameterANGLE FALSE True if image has a 3.8.6
661
compressed internal format
662
663
(add to table 6.35, Framebuffer dependent Values, p. 280)
664
665
Initial
666
Get Value Type Get Command Value Description Sec.
667
------------------ ---------- ------------------ -------------- --------------- ------
668
SAMPLE_POSITION_ANGLE N*2*R[0,1] GetMultisamplefvANGLE implementation Explicit sample 3.3.1
669
dependent positions
670
671
Where N is the number of samples (the value of SAMPLES) the framebuffer supports.
672
673
New Implementation Dependent State
674
675
Minimum
676
Get Value Type Get Command Value Description Sec.
677
--------- ------- ----------- ------- ------------------------ ------
678
MAX_SAMPLE_MASK_WORDS_ANGLE Z+ GetIntegerv 1 maximum number of sample 4.1.3
679
mask words
680
MAX_COLOR_TEXTURE_SAMPLES_ANGLE Z+ GetIntegerv 1 maximum number of samples 4.1.3
681
in a color multisample
682
texture
683
MAX_DEPTH_TEXTURE_SAMPLES_ANGLE Z+ GetIntegerv 1 maximum number of samples 4.1.3
684
in a depth/stencil
685
multisample texture
686
MAX_INTEGER_SAMPLES_ANGLE Z+ GetIntegerv 1 Maximum number of samples 4.4.2
687
in integer format
688
multisample buffers
689
690
Modifications to the OpenGL ES Shading Language Specification, Version 3.00,
691
Document Revision 6
692
693
Including the following line in a shader can be used to control the
694
language featured described in this extension:
695
696
#extension GL_ANGLE_texture_multisample : <behavior>
697
698
where <behavior> is as specified in section 3.5.
699
700
A new preprocessor #define is added to the OpenGL ES Shading Language:
701
702
#define GL_ANGLE_texture_multisample 1
703
704
Add to section 3.8 "Keywords":
705
706
The following new sampler types are added:
707
708
sampler2DMS, isampler2DMS, usampler2DMS,
709
710
Add to section 4.1 "Basic Types":
711
712
Add the following sampler type to the "Floating Point Sampler
713
Types (opaque)" table:
714
715
sampler2DMS handle for accessing a 2D multisample texture
716
717
Add the following sampler type to the "Unsigned Integer Sampler
718
Types (opaque)" table:
719
720
usampler2DMS handle for accessing an unsigned integer 2D
721
multisample texture
722
723
Add the following sampler type to the "Integer Sampler Types" table:
724
725
isampler2DMS handle for accessing an integer 2D
726
multisample texture
727
728
Add to section 8.8 "Texture Lookup Functions":
729
730
Add new functions to the set of allowed texture lookup functions:
731
732
Syntax:
733
734
gvec4 texelFetch(gsampler2DMS sampler, ivec2 P, int sample)
735
736
Description:
737
738
Use integer texture coordinate <P> to lookup a single sample
739
<sample> on the texture bound to <sampler> as described in section
740
2.12.9.3 of the OpenGL ES specification "Multisample Texel Fetches".
741
742
Syntax:
743
744
ivec2 textureSize(gsampler2DMS sampler)
745
746
Description:
747
748
Returns the dimensions, width and height of level 0 for the
749
texture bound to <sampler>, as described in section 2.12.9.4 of
750
the OpenGL ES specification section "Texture Size Query".
751
752
Examples
753
754
Issues
755
None
756
757
Revision History
758
759
Rev. Date Author Changes
760
---- -------- ---------- --------------------------------------------
761
1 08/27/18 Yunchao He First revision. Adapted from OpenGL ES
762
specification 3.1, OpenGLSL ES specification
763
3.10 at document revision 4, and
764
ARB_texture_multisample at revision 12.
765
766