gfx/angle/extensions/ANGLE_depth_texture.txt

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:258d3972cce4
1 Name
2
3 ANGLE_depth_texture
4
5 Name Strings
6
7 GL_ANGLE_depth_texture
8
9 Contributors
10
11 Nicolas Capens, TransGaming
12 Daniel Koch, TransGaming
13 Shannon Woods, TransGaming
14 Kenneth Russell, Google
15 Vangelis Kokkevis, Google
16 Gregg Tavares, Google
17 Contributors to OES_depth_texture
18 Contributors to OES_packed_depth_stencil
19
20 Contact
21
22 Shannon Woods, TransGaming (shannon 'dot' woods 'at' transgaming.com)
23
24 Status
25
26 Implemented in ANGLE.
27
28 Version
29
30 Last Modified Date: February 25, 2013
31 Revision: #4
32
33 Number
34
35 TBD
36
37 Dependencies
38
39 OpenGL ES 2.0 is required.
40 This extension is written against the OpenGL ES 2.0.25 specification
41
42 OES_packed_depth_stencil affects the definition of this extension.
43
44 EXT_texture_storage affects the definition of this extension.
45
46 Overview
47
48 This extension defines support for 2D depth and depth-stencil
49 textures in an OpenGL ES implementation.
50
51 This extension incorporates the depth texturing functionality of
52 OES_depth_texture and OES_packed_depth_stencil, but does not
53 provide the ability to load existing data via TexImage2D or
54 TexSubImage2D. This extension also allows implementation
55 variability in which components from a sampled depth texture
56 contain the depth data. Depth textures created with this
57 extension only support 1 level.
58
59 New Procedures and Functions
60
61 None
62
63 New Tokens
64
65 Accepted by the <format> parameter of TexImage2D and TexSubImage2D and
66 <internalformat> parameter of TexImage2D:
67
68 DEPTH_COMPONENT 0x1902
69 DEPTH_STENCIL_OES 0x84F9
70
71 Accepted by the <type> parameter of TexImage2D, TexSubImage2D:
72
73 UNSIGNED_SHORT 0x1403
74 UNSIGNED_INT 0x1405
75 UNSIGNED_INT_24_8_OES 0x84FA
76
77 Accepted by the <internalformat> parameter of TexStorage2DEXT:
78
79 DEPTH_COMPONENT16 0x81A5
80 DEPTH_COMPONENT32_OES 0x81A7
81 DEPTH24_STENCIL8_OES 0x88F0
82
83 Additions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL Operation)
84
85 Update Section 2.10.5 "Shader Execution" in the subsection titled
86 "Texture Access" add a new paragraph before the last paragraph add
87 this line:
88
89 "The stencil index texture internal component is ignored if the base
90 internal format is DEPTH_STENCIL_OES.
91
92 If a vertex shader uses..."
93
94 Additions to Chapter 3 of the OpenGL ES 2.0 specification (Rasterization)
95
96 Add the following rows to Table 3.2 (page 62):
97
98 type Parameter GL Data Type Special
99 ------------------------------------------------
100 ... ... ...
101 UNSIGNED_SHORT ushort No
102 UNSIGNED_INT uint No
103 UNSIGNED_INT_24_8_OES uint Yes
104
105 Add the following rows to Table 3.3 (page 62):
106
107 Format Name Element Meaning and Order Target Buffer
108 ------------------------------------------------------------------
109 ... ... ...
110 DEPTH_COMPONENT Depth Depth
111 DEPTH_STENCIL_OES Depth and Stencil Index Depth and Stencil
112 ... ... ...
113
114 Add a row to Table 3.5 "Packed pixel formats" (page 64):
115
116 type Parameter GL Type Components Pixel Formats
117 ------------------------------------------------------------------
118 ... ... ... ...
119 UNSIGNED_INT_24_8_OES uint 2 DEPTH_STENCIL_OES
120
121 Add a new table after Table 3.6 (page 64):
122
123 UNSIGNED_INT_24_8_OES
124
125 31 30 29 28 27 26 ... 12 11 10 9 8 7 6 5 4 3 2 1 0
126 +----------------------------------+---------------+
127 | 1st Component | 2nd Component |
128 +----------------------------------+---------------+
129
130 Table 3.6.B: UNSIGNED_INT formats
131
132 Add a row to Table 3.7 "Packed pixel field assignments" (page 65):
133
134 Format | 1st 2nd 3rd 4th
135 ------------------+-------------------------------
136 ... | ... ... ... ...
137 DEPTH_STENCIL_OES | depth stencil N/A N/A
138
139 Add the following paragraph to the end of the section "Conversion to
140 floating-point" (page 65):
141
142 "For groups of components that contain both standard components and index
143 elements, such as DEPTH_STENCIL_OES, the index elements are not converted."
144
145 In section 3.7.1 "Texture Image Specification", update page 67 to
146 say:
147
148 "The selected groups are processed as described in section 3.6.2, stopping
149 just before final conversion. Each R, G, B, A, or depth value so generated
150 is clamped to [0, 1], while the stencil index values are masked by 2^n-1,
151 where n is the number of stencil bits in the internal format resolution
152 (see below).
153
154 Components are then selected from the resulting R, G, B, A, depth, or
155 stencil index values to obtain a texture with the base internal format
156 specified by <internalformat>. Table 3.8 summarizes the mapping of R, G,
157 B, A, depth, or stencil values to texture components, as a function of the
158 base internal format of the texture image. <internalformat> may be
159 specified as one of the internal format symbolic constants listed in
160 table 3.8. Specifying a value for <internalformat> that is not one of the
161 above values generates the error INVALID_VALUE. If <internalformat> does
162 not match <format>, the error INVALID_OPERATION is generated.
163
164 Textures with a base internal format of DEPTH_COMPONENT or
165 DEPTH_STENCIL_OES are supported by texture image specification commands
166 only if <target> is TEXTURE_2D. Using these formats in conjunction with
167 any other <target> will result in an INVALID_OPERATION error.
168
169 Textures with a base internal format of DEPTH_COMPONENT or
170 DEPTH_STENCIL_OES only support one level of image data. Specifying a
171 non-zero value for <level> will result in an INVALID_OPERATION error.
172
173 Textures with a base internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES
174 require either depth component data or depth/stencil component data.
175 Textures with other base internal formats require RGBA component data. The
176 error INVALID_OPERATION is generated if the base internal format is
177 DEPTH_COMPONENT or DEPTH_STENCIL_OES and <format> is not DEPTH_COMPONENT or
178 DEPTH_STENCIL_OES, or if the base internal format is not DEPTH_COMPONENT or
179 DEPTH_STENCIL_OES and <format> is DEPTH_COMPONENT or DEPTH_STENCIL_OES.
180
181 Textures with a base internal format of DEPTH_COMPONENT or
182 DEPTH_STENCIL_OES do not support loading image data via the TexImage
183 commands. They can only have their contents specified by rendering
184 to them. The INVALID_OPERATION error is generated by the TexImage2D
185 command if <data> is not NULL for such textures."
186
187 Add a row to table 3.8 (page 68), and update the title of the
188 second column:
189
190 Base Internal Format RGBA, Depth and Stencil Values Internal Components
191 -------------------------------------------------------------------------
192 ... ... ...
193 DEPTH_COMPONENT Depth D
194 DEPTH_STENCIL_OES Depth,Stencil D,S
195 ... ... ...
196
197 Update the caption for table 3.8 (page 68)
198
199 "Table 3.8: Conversion from RGBA, depth, and stencil pixel components to
200 internal texture components. Texture components R, G, B, A, and L are
201 converted back to RGBA colors during filtering as shown in table 3.12.
202 Texture components D are converted to RGBA colors as described in
203 section 3.7.8-1/2."
204
205 Add the following to section 3.7.2 "Alternate Texture Image Specification
206 Commands":
207
208 "CopyTexImage2D and CopyTexSubImage2D generate the INVALID_OPERATION
209 error if the base internal format of the destination texture is
210 DEPTH_COMPONENT or DEPTH_STENCIL_OES.
211
212 TexSubImage2D generates the INVALID_OPERATION error if the base internal
213 format of the texture is DEPTH_COMPONENT or DEPTH_STENCIL_OES."
214
215 Add a new section between sections 3.7.8 and 3.7.9:
216
217 "3.7.8-1/2 Depth/Stencil Textures
218
219 If the currently bound texture's base internal format is DEPTH_COMPONENT or
220 DEPTH_STENCIL_OES, then the output of the texture unit is as described
221 below. Otherwise, the texture unit operates in the normal manner.
222
223 Let <D_t> be the depth texture value, provided by the shader's texture lookup
224 function. Then the effective texture value is computed as follows:
225 <Tau> = <D_t>
226
227 If the texture image has a base internal format of DEPTH_STENCIL_OES, then
228 the stencil index texture component is ignored. The texture value <Tau> does
229 not include a stencil index component, but includes only the depth
230 component.
231
232 The resulting <Tau> is assigned to <R_t>. In some implementations, <Tau> is
233 also assigned to <G_t>, <B_t>, or <A_t>. Thus in table 3.12, textures with
234 depth component data behave as if their base internal format is RGBA, with
235 values in <G_t>, <B_t>, and <A_t> being implementation dependent."
236
237 Add the following to section 3.7.11 "Mipmap Generation":
238
239 "If the level zero array contains depth or depth-stencil data, the
240 error INVALID_OPERATION is generated."
241
242 Insert a new paragraph after the first paragraph of the "Texture Access"
243 subsection of section 3.8.2 on page 87, which says:
244
245 "Texture lookups involving textures with depth component data generate
246 a texture source color by using depth data directly, as described in
247 section 3.7.8-1/2. The stencil texture internal component is ignored
248 if the base internal format is DEPTH_STENCIL_OES."
249
250 Additions to Chapter 4 of the OpenGL ES 2.0 specification (Per-Fragment
251 Operations and the Framebuffer)
252
253 In section 4.4.5 "Framebuffer Completeness", replace the the 3rd
254 paragraph with the following text:
255
256 "* An internal format is color-renderable if it is one of the formats
257 from table 4.5 noted as color-renderable or if it is unsized format
258 RGBA or RGB. No other formats, including compressed internal formats,
259 are color-renderable.
260
261 * An internal format is depth-renderable if it is one of the sized
262 internal formats from table 4.5 noted as depth-renderable, if it
263 is the unsized format DEPTH_COMPONENT or if it is the internal
264 format value of DEPTH24_STENCIL8_OES. No other formats are
265 depth-renderable.
266
267 * An internal format is stencil-renderable if it is one of the sized
268 internal formats from table 4.5 noted as stencil-renderable or if it
269 is DEPTH24_STENCIL8_OES. No other formats are stencil-renderable."
270
271 Additions to Chapter 5 of the OpenGL ES 2.0 Specification (Special
272 Functions)
273
274 None.
275
276 Additions to Chapter 6 of the OpenGL ES 2.0 Specification (State and State
277 Requests)
278
279 None.
280
281 Interactions with OES_packed_depth_stencil
282
283 If OES_packed_depth_stencil is not supported, mentions of
284 DEPTH_STENCIL_OES and UNSIGNED_INT_24_8_OES as a format/type combinations
285 for TexImage2D and TexSubImage2D are omitted. Mentions of
286 the internal format DEPTH24_STENCIL8_OES are also omitted.
287
288 Interactions with EXT_texture_storage
289
290 If EXT_texture_storage is supported the following internalformat
291 to format/type mappings are used:
292
293 <internalformat> <format> <type>
294 ---------------- -------- ------
295 DEPTH_COMPONENT16 DEPTH_COMPONENT UNSIGNED_SHORT
296 DEPTH_COMPONENT32_OES DEPTH_COMPONENT UNSIGNED_INT
297 DEPTH24_STENCIL8_OES DEPTH_STENCIL_OES UNSIGNED_INT
298
299 Textures with the above <internalformats> only support one level of
300 image data. Specifying a value other than one for the <levels> parameter
301 to TexStorage2DEXT will result in an INVALID_OPERATION error.
302
303 If EXT_texture_storage is not supported, ignore any references
304 to TexStorage2DEXT.
305
306 Errors
307
308 The error INVALID_OPERATION is generated by TexImage2D if <format> and
309 <internalformat> are DEPTH_COMPONENT and <type> is not UNSIGNED_SHORT,
310 or UNSIGNED_INT.
311
312 The error INVALID_OPERATION is generated by TexSubImage2D if <format> is
313 DEPTH_COMPONENT and <type> is not UNSIGNED_SHORT, or UNSIGNED_INT.
314
315 The error INVALID_OPERATION is generated by TexImage2D if <format> and
316 <internalformat> are not DEPTH_COMPONENT and <type> is UNSIGNED_SHORT,
317 or UNSIGNED_INT.
318
319 The error INVALID_OPERATION is generated by TexSubImage2D if <format> is
320 not DEPTH_COMPONENT and <type> is UNSIGNED_SHORT, or UNSIGNED_INT.
321
322 The error INVALID_OPERATION is generated by TexImage2D if <format> and
323 <internalformat> are DEPTH_STENCIL_OES and <type> is not
324 UNSIGNED_INT_24_8_OES.
325
326 The error INVALID_OPERATION is generated by TexSubImage2D if <format>
327 is DEPTH_STENCIL_OES and <type> is not UNSIGNED_INT_24_8_OES.
328
329 The error INVALID_OPERATION is generated by TexImage2D if <format> and
330 <internalformat> is not DEPTH_STENCIL_OES and <type> is
331 UNSIGNED_INT_24_8_OES.
332
333 The error INVALID_OPERATION is generated by TexSubImage2D if <format>
334 is not DEPTH_STENCIL_OES and <type> is UNSIGNED_INT_24_8_OES.
335
336 The error INVALID_OPERATION is generated in the following situations:
337 - TexImage2D is called with <format> and <internalformat> of
338 DEPTH_COMPONENT or DEPTH_STENCIL_OES and
339 - <target> is not TEXTURE_2D,
340 - <data> is not NULL, or
341 - <level> is not zero.
342 - TexSubImage2D is called with <format> of DEPTH_COMPONENT or
343 DEPTH_STENCIL_OES.
344 - TexStorage2DEXT is called with <internalformat> of DEPTH_COMPONENT16,
345 DEPTH_COMPONENT32_OES, or DEPTH24_STENCIL8_OES, and
346 - <target> is not TEXTURE_2D, or
347 - <levels> is not one.
348 - CopyTexImage2D is called with an <internalformat> that has a base
349 internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES.
350 - CopyTexSubImage2D is called with a target texture that has a base
351 internal format of DEPTH_COMPONENT or DEPTH_STENCIL_OES.
352 - GenerateMipmap is called on a texture that has a base internal format
353 of DEPTH_COMPONENT or DEPTH_STENCIL_OES.
354
355 New State
356
357 None.
358
359 Issues
360
361 1) What are the differences between this extension and OES_depth_texture
362 and OES_packed_depth_stencil?
363
364 RESOLVED: This extension:
365 - does not support loading pre-baked depth stencil data via
366 TexImage2D or TexSubImage2D.
367 - allows variability in the y-, z-, and w-components of the sample
368 results from depth textures.
369 - only supports one level textures.
370 - explicitly lists the errors for unsupported functionality.
371 Since these were not clearly specified in the OES_depth_texture
372 extension there may be differences in error values between
373 implementations of OES_depth_texture and ANGLE_depth_texture.
374 This specification was also rebased to apply against the OpenGL ES 2.0
375 specification instead of the OpenGL specification, making it more
376 obvious what all the functionality changes are.
377
378 2) Why does TexSubImage2D accept the new format/type combinations even
379 though it does not actually support loading data?
380
381 RESOLVED: This was done to be more consistent with the OES_depth_texture
382 extension and to make it easier to add support for loading texture
383 data if it is possible to support in the future.
384
385 3) Why are only 1-level depth textures supported?
386
387 RESOLVED: The only use for multiple levels of depth textures would
388 be for fitlered texturing. However since it is not possible to
389 render to non-zero-level texture levels in OpenGL ES 2.0, and since
390 this extension forbids loading existing data and GenerateMipmap on
391 depth textures, it is impossible to initialize or specify contents
392 for non-zero levels of depth textures.
393
394 Revision History
395
396 02/25/2013 swoods revise to allow texture lookup to guarantee depth values
397 only in red channel of sample result.
398 06/04/2012 dgkoch fix errors, disallow multi-level depth textures.
399 05/30/2012 dgkoch minor updates and add issues.
400 05/23/2012 dgkoch intial revision based on OES_depth_texture and
401 OES_packed_depth_stencil and rebased against the ES 2.0 spec
402

mercurial