gfx/angle/extensions/EXT_texture_storage.txt

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

michael@0 1 Name
michael@0 2
michael@0 3 EXT_texture_storage
michael@0 4
michael@0 5 Name Strings
michael@0 6
michael@0 7 GL_EXT_texture_storage
michael@0 8
michael@0 9 Contact
michael@0 10
michael@0 11 Bruce Merry (bmerry 'at' gmail.com)
michael@0 12 Ian Romanick, Intel (ian.d.romanick 'at' intel.com)
michael@0 13
michael@0 14 Contributors
michael@0 15
michael@0 16 Jeremy Sandmel, Apple
michael@0 17 Bruce Merry, ARM
michael@0 18 Tom Olson, ARM
michael@0 19 Benji Bowman, Imagination Technologies
michael@0 20 Ian Romanick, Intel
michael@0 21 Jeff Bolz, NVIDIA
michael@0 22 Pat Brown, NVIDIA
michael@0 23 Maurice Ribble, Qualcomm
michael@0 24 Lingjun Chen, Qualcomm
michael@0 25 Daniel Koch, Transgaming Inc
michael@0 26
michael@0 27 Status
michael@0 28
michael@0 29 Complete.
michael@0 30
michael@0 31 Version
michael@0 32
michael@0 33 Last Modified Date: November 11, 2011
michael@0 34 Author Revision: 24
michael@0 35
michael@0 36 Number
michael@0 37
michael@0 38 OpenGL ES Extension #108
michael@0 39
michael@0 40 Dependencies
michael@0 41
michael@0 42 OpenGL ES 1.0, OpenGL ES 2.0 or OpenGL 1.2 is required.
michael@0 43
michael@0 44 OES_texture_npot, OES_texture_cube_map, OES_texture_3D,
michael@0 45 OES_depth_texture, OES_packed_depth_stencil,
michael@0 46 OES_compressed_paletted_texture, OES_texture_float, OES_texture_half_float
michael@0 47 EXT_texture_type_2_10_10_10_REV, EXT_texture_format_BGRA8888,
michael@0 48 EXT_texture3D, OES_texture_npot, APPLE_texture_2D_limited_npot,
michael@0 49 ARB_texture_cube_map, ARB_texture_cube_map_array,
michael@0 50 ARB_texture_rectangle, SGIS_generate_mipmap,
michael@0 51 EXT_direct_state_access, OES_EGL_image, WGL_ARB_render_texture,
michael@0 52 GLX_EXT_texture_from_pixmap, and core specifications that
michael@0 53 incorporate these extensions affect the definition of this
michael@0 54 extension.
michael@0 55
michael@0 56 This extension is written against the OpenGL 3.2 Core Profile
michael@0 57 specification.
michael@0 58
michael@0 59 Overview
michael@0 60
michael@0 61 The texture image specification commands in OpenGL allow each level
michael@0 62 to be separately specified with different sizes, formats, types and
michael@0 63 so on, and only imposes consistency checks at draw time. This adds
michael@0 64 overhead for implementations.
michael@0 65
michael@0 66 This extension provides a mechanism for specifying the entire
michael@0 67 structure of a texture in a single call, allowing certain
michael@0 68 consistency checks and memory allocations to be done up front. Once
michael@0 69 specified, the format and dimensions of the image array become
michael@0 70 immutable, to simplify completeness checks in the implementation.
michael@0 71
michael@0 72 When using this extension, it is no longer possible to supply texture
michael@0 73 data using TexImage*. Instead, data can be uploaded using TexSubImage*,
michael@0 74 or produced by other means (such as render-to-texture, mipmap generation,
michael@0 75 or rendering to a sibling EGLImage).
michael@0 76
michael@0 77 This extension has complicated interactions with other extensions.
michael@0 78 The goal of most of these interactions is to ensure that a texture
michael@0 79 is always mipmap complete (and cube complete for cubemap textures).
michael@0 80
michael@0 81 IP Status
michael@0 82
michael@0 83 No known IP claims
michael@0 84
michael@0 85 New Procedures and Functions
michael@0 86
michael@0 87 void TexStorage1DEXT(enum target, sizei levels,
michael@0 88 enum internalformat,
michael@0 89 sizei width);
michael@0 90
michael@0 91 void TexStorage2DEXT(enum target, sizei levels,
michael@0 92 enum internalformat,
michael@0 93 sizei width, sizei height);
michael@0 94
michael@0 95 void TexStorage3DEXT(enum target, sizei levels,
michael@0 96 enum internalformat,
michael@0 97 sizei width, sizei height, sizei depth);
michael@0 98
michael@0 99 void TextureStorage1DEXT(uint texture, enum target, sizei levels,
michael@0 100 enum internalformat,
michael@0 101 sizei width);
michael@0 102
michael@0 103 void TextureStorage2DEXT(uint texture, enum target, sizei levels,
michael@0 104 enum internalformat,
michael@0 105 sizei width, sizei height);
michael@0 106
michael@0 107 void TextureStorage3DEXT(uint texture, enum target, sizei levels,
michael@0 108 enum internalformat,
michael@0 109 sizei width, sizei height, sizei depth);
michael@0 110
michael@0 111 New Types
michael@0 112
michael@0 113 None
michael@0 114
michael@0 115 New Tokens
michael@0 116
michael@0 117 Accepted by the <value> parameter of GetTexParameter{if}v:
michael@0 118
michael@0 119 TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F
michael@0 120
michael@0 121 Accepted by the <internalformat> parameter of TexStorage* when
michael@0 122 implemented on OpenGL ES:
michael@0 123
michael@0 124 ALPHA8_EXT 0x803C /* reuse tokens from EXT_texture */
michael@0 125 LUMINANCE8_EXT 0x8040
michael@0 126 LUMINANCE8_ALPHA8_EXT 0x8045
michael@0 127
michael@0 128 (if OES_texture_float is supported)
michael@0 129 RGBA32F_EXT 0x8814 /* reuse tokens from ARB_texture_float */
michael@0 130 RGB32F_EXT 0x8815
michael@0 131 ALPHA32F_EXT 0x8816
michael@0 132 LUMINANCE32F_EXT 0x8818
michael@0 133 LUMINANCE_ALPHA32F_EXT 0x8819
michael@0 134
michael@0 135 (if OES_texture_half_float is supported)
michael@0 136 RGBA16F_EXT 0x881A /* reuse tokens from ARB_texture_float */
michael@0 137 RGB16F_EXT 0x881B
michael@0 138 ALPHA16F_EXT 0x881C
michael@0 139 LUMINANCE16F_EXT 0x881E
michael@0 140 LUMINANCE_ALPHA16F_EXT 0x881F
michael@0 141
michael@0 142 (if EXT_texture_type_2_10_10_10_REV is supported)
michael@0 143 RGB10_A2_EXT 0x8059 /* reuse tokens from EXT_texture */
michael@0 144 RGB10_EXT 0x8052
michael@0 145
michael@0 146 (if EXT_texture_format_BGRA8888 is supported)
michael@0 147 BGRA8_EXT 0x93A1
michael@0 148
michael@0 149
michael@0 150 Additions to Chapter 2 of the OpenGL 3.2 Core Profile Specification
michael@0 151 (OpenGL Operation)
michael@0 152
michael@0 153 None
michael@0 154
michael@0 155 Additions to Chapter 3 of the OpenGL 3.2 Core Profile Specification
michael@0 156 (Rasterization)
michael@0 157
michael@0 158 After section 3.8.1 (Texture Image Specification) add a new
michael@0 159 subsection called "Immutable-format texture images":
michael@0 160
michael@0 161 "An alterative set of commands is provided for specifying the
michael@0 162 properties of all levels of a texture at once. Once a texture is
michael@0 163 specified with such a command, the format and dimensions of all
michael@0 164 levels becomes immutable, unless it is a proxy texture (since
michael@0 165 otherwise it would no longer be possible to use the proxy). The
michael@0 166 contents of the images and the parameters can still be modified.
michael@0 167 Such a texture is referred to as an "immutable-format" texture. The
michael@0 168 immutability status of a texture can be determined by calling
michael@0 169 GetTexParameter with <pname> TEXTURE_IMMUTABLE_FORMAT_EXT.
michael@0 170
michael@0 171 Each of the commands below is described by pseudo-code which
michael@0 172 indicates the effect on the dimensions and format of the texture.
michael@0 173 For all of the commands, the following apply in addition to the
michael@0 174 pseudo-code:
michael@0 175
michael@0 176 - If the default texture object is bound to <target>, an
michael@0 177 INVALID_OPERATION error is generated.
michael@0 178 - If executing the pseudo-code would lead to an error, the error is
michael@0 179 generated and the command will have no effect.
michael@0 180 - Any existing levels that are not replaced are reset to their
michael@0 181 initial state.
michael@0 182 - If <width>, <height>, <depth> or <levels> is less than 1, the
michael@0 183 error INVALID_VALUE is generated.
michael@0 184 - Since no pixel data are provided, the <format> and <type> values
michael@0 185 used in the pseudo-code are irrelevant; they can be considered to
michael@0 186 be any values that are legal to use with <internalformat>.
michael@0 187 - If the command is successful, TEXTURE_IMMUTABLE_FORMAT_EXT becomes
michael@0 188 TRUE.
michael@0 189 - If <internalformat> is a specific compressed texture format, then
michael@0 190 references to TexImage* should be replaced by CompressedTexImage*,
michael@0 191 with <format>, <type> and <data> replaced by any valid <imageSize> and
michael@0 192 <data>. If there is no <imageSize> for which this command would have
michael@0 193 been valid, an INVALID_OPERATION error is generated [fn: This
michael@0 194 condition is not required for OpenGL, but is necessary for OpenGL
michael@0 195 ES which does not support on-the-fly compression.]
michael@0 196 - If <internalformat> is one of the internal formats listed in table
michael@0 197 3.11, an INVALID_ENUM error is generated. [fn: The corresponding table
michael@0 198 in OpenGL ES 2.0 is table 3.8.]
michael@0 199
michael@0 200 The command
michael@0 201
michael@0 202 void TexStorage1DEXT(enum target, sizei levels,
michael@0 203 enum internalformat,
michael@0 204 sizei width);
michael@0 205
michael@0 206 specifies all the levels of a one-dimensional texture (or proxy) at
michael@0 207 the same time. It is described by the pseudo-code below:
michael@0 208
michael@0 209 for (i = 0; i < levels; i++)
michael@0 210 {
michael@0 211 TexImage1D(target, i, internalformat, width, 0,
michael@0 212 format, type, NULL);
michael@0 213 width = max(1, floor(width / 2));
michael@0 214 }
michael@0 215
michael@0 216 If <target> is not TEXTURE_1D or PROXY_TEXTURE_1D then INVALID_ENUM
michael@0 217 is generated. If <levels> is greater than floor(log_2(width)) + 1
michael@0 218 then INVALID_OPERATION is generated.
michael@0 219
michael@0 220 The command
michael@0 221
michael@0 222 void TexStorage2DEXT(enum target, sizei levels,
michael@0 223 enum internalformat,
michael@0 224 sizei width, sizei height);
michael@0 225
michael@0 226 specifies all the levels of a two-dimensional, cube-map,
michael@0 227 one-dimension array or rectangle texture (or proxy) at the same
michael@0 228 time. The pseudo-code depends on the <target>:
michael@0 229
michael@0 230 [PROXY_]TEXTURE_2D, [PROXY_]TEXTURE_RECTANGLE or
michael@0 231 PROXY_TEXTURE_CUBE_MAP:
michael@0 232
michael@0 233 for (i = 0; i < levels; i++)
michael@0 234 {
michael@0 235 TexImage2D(target, i, internalformat, width, height, 0,
michael@0 236 format, type, NULL);
michael@0 237 width = max(1, floor(width / 2));
michael@0 238 height = max(1, floor(height / 2));
michael@0 239 }
michael@0 240
michael@0 241 TEXTURE_CUBE_MAP:
michael@0 242
michael@0 243 for (i = 0; i < levels; i++)
michael@0 244 {
michael@0 245 for face in (+X, -X, +Y, -Y, +Z, -Z)
michael@0 246 {
michael@0 247 TexImage2D(face, i, internalformat, width, height, 0,
michael@0 248 format, type, NULL);
michael@0 249 }
michael@0 250 width = max(1, floor(width / 2));
michael@0 251 height = max(1, floor(height / 2));
michael@0 252 }
michael@0 253
michael@0 254 [PROXY_]TEXTURE_1D_ARRAY:
michael@0 255
michael@0 256 for (i = 0; i < levels; i++)
michael@0 257 {
michael@0 258 TexImage2D(target, i, internalformat, width, height, 0,
michael@0 259 format, type, NULL);
michael@0 260 width = max(1, floor(width / 2));
michael@0 261 }
michael@0 262
michael@0 263 If <target> is not one of those listed above, the error INVALID_ENUM
michael@0 264 is generated.
michael@0 265
michael@0 266 The error INVALID_OPERATION is generated if any of the following
michael@0 267 conditions hold:
michael@0 268 - <target> is [PROXY_]TEXTURE_1D_ARRAY and <levels> is greater than
michael@0 269 floor(log_2(width)) + 1
michael@0 270 - <target> is not [PROXY_]TEXTURE_1D_ARRAY and <levels> is greater
michael@0 271 than floor(log_2(max(width, height))) + 1
michael@0 272
michael@0 273 The command
michael@0 274
michael@0 275 void TexStorage3DEXT(enum target, sizei levels, enum internalformat,
michael@0 276 sizei width, sizei height, sizei depth);
michael@0 277
michael@0 278 specifies all the levels of a three-dimensional, two-dimensional
michael@0 279 array texture, or cube-map array texture (or proxy). The pseudo-code
michael@0 280 depends on <target>:
michael@0 281
michael@0 282 [PROXY_]TEXTURE_3D:
michael@0 283
michael@0 284 for (i = 0; i < levels; i++)
michael@0 285 {
michael@0 286 TexImage3D(target, i, internalformat, width, height, depth, 0,
michael@0 287 format, type, NULL);
michael@0 288 width = max(1, floor(width / 2));
michael@0 289 height = max(1, floor(height / 2));
michael@0 290 depth = max(1, floor(depth / 2));
michael@0 291 }
michael@0 292
michael@0 293 [PROXY_]TEXTURE_2D_ARRAY, [PROXY_]TEXTURE_CUBE_MAP_ARRAY_ARB:
michael@0 294
michael@0 295 for (i = 0; i < levels; i++)
michael@0 296 {
michael@0 297 TexImage3D(target, i, internalformat, width, height, depth, 0,
michael@0 298 format, type, NULL);
michael@0 299 width = max(1, floor(width / 2));
michael@0 300 height = max(1, floor(height / 2));
michael@0 301 }
michael@0 302
michael@0 303 If <target> is not one of those listed above, the error INVALID_ENUM
michael@0 304 is generated.
michael@0 305
michael@0 306 The error INVALID_OPERATION is generated if any of the following
michael@0 307 conditions hold:
michael@0 308 - <target> is [PROXY_]TEXTURE_3D and <levels> is greater than
michael@0 309 floor(log_2(max(width, height, depth))) + 1
michael@0 310 - <target> is [PROXY_]TEXTURE_2D_ARRAY or
michael@0 311 [PROXY_]TEXTURE_CUBE_MAP_ARRAY_EXT and <levels> is greater than
michael@0 312 floor(log_2(max(width, height))) + 1
michael@0 313
michael@0 314 After a successful call to any TexStorage* command with a non-proxy
michael@0 315 target, the value of TEXTURE_IMMUTABLE_FORMAT_EXT for this texture
michael@0 316 object is set to TRUE, and no further changes to the dimensions or
michael@0 317 format of the texture object may be made. Other commands may only
michael@0 318 alter the texel values and texture parameters. Using any of the
michael@0 319 following commands with the same texture will result in the error
michael@0 320 INVALID_OPERATION being generated, even if it does not affect the
michael@0 321 dimensions or format:
michael@0 322
michael@0 323 - TexImage*
michael@0 324 - CompressedTexImage*
michael@0 325 - CopyTexImage*
michael@0 326 - TexStorage*
michael@0 327
michael@0 328 The TextureStorage* commands operate identically to the
michael@0 329 corresponding command where "Texture" is substituted for "Tex"
michael@0 330 except, rather than updating the current bound texture for the
michael@0 331 texture unit indicated by the current active texture state and the
michael@0 332 target parameter, these "Texture" commands update the texture object
michael@0 333 named by the initial texture parameter. The error INVALID_VALUE
michael@0 334 is generated if <texture> is zero.
michael@0 335 "
michael@0 336
michael@0 337 In section 3.8.6 (Texture Parameters), after the sentence
michael@0 338
michael@0 339 "In the remainder of section 3.8, denote by lod_min, lod_max,
michael@0 340 level_base, and level_max the values of the texture parameters
michael@0 341 TEXTURE_MIN_LOD, TEXTURE_MAX_LOD, TEXTURE_BASE_LEVEL, and
michael@0 342 TEXTURE_MAX_LEVEL respectively."
michael@0 343
michael@0 344 add
michael@0 345
michael@0 346 "However, if TEXTURE_IMMUTABLE_FORMAT_EXT is
michael@0 347 TRUE, then level_base is clamped to the range [0, <levels> - 1] and
michael@0 348 level_max is then clamped to the range [level_base, <levels> - 1],
michael@0 349 where <levels> is the parameter passed the call to TexStorage* for
michael@0 350 the texture object.
michael@0 351
michael@0 352 In section 3.8.9 (Rendering feedback loops) replace all references
michael@0 353 to TEXTURE_BASE_LEVEL by level_base.
michael@0 354
michael@0 355 In section 3.8.9 (Mipmapping), replace the paragraph starting "Each
michael@0 356 array in a mipmap is defined..." by
michael@0 357
michael@0 358 "Each array in a mipmap is defined using TexImage3D, TexImage2D,
michael@0 359 CopyTexImage2D, TexImage1D, CopyTexImage1D, or by functions that are
michael@0 360 defined in terms of these functions. Level-of-detail numbers proceed
michael@0 361 from level_base for the original texel array through the maximum
michael@0 362 level p, with each unit increase indicating an array of half the
michael@0 363 dimensions of the previous one (rounded down to the next integer if
michael@0 364 fractional) as already described. For immutable-format textures,
michael@0 365 p is one less than the <levels> parameter passed to TexStorage*;
michael@0 366 otherwise p = floor(log_2(maxsize)) + level_base. All arrays from
michael@0 367 level_base through q = min(p, level_max) must be defined, as
michael@0 368 discussed in section 3.8.12."
michael@0 369
michael@0 370 In section 3.8.12 (Texture Completeness), modify the last sentence
michael@0 371 to avoid refering to level_base and level_max:
michael@0 372
michael@0 373 "An implementation may allow a texture image array of level 1 or
michael@0 374 greater to be created only if a mipmap complete set of image arrays
michael@0 375 consistent with the requested array can be supported where the
michael@0 376 values of TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL are 0 and 1000
michael@0 377 respectively."
michael@0 378
michael@0 379 Modify section 3.8.13 (Texture State and Proxy State) to add the new
michael@0 380 state:
michael@0 381
michael@0 382 "Each set consists of ..., and a boolean flag indicating whether the
michael@0 383 format and dimensions of the texture are immutable."
michael@0 384
michael@0 385 Add
michael@0 386 "The initial value of TEXTURE_IMMUTABLE_FORMAT_EXT is FALSE."
michael@0 387
michael@0 388 Additions to Chapter 4 of the OpenGL 3.2 Core Profile Specification
michael@0 389 (Per-Fragment Operations and the Frame Buffer)
michael@0 390
michael@0 391 None
michael@0 392
michael@0 393 Additions to Chapter 5 of the OpenGL 3.2 Compatibility Profile Specification
michael@0 394 (Special Functions)
michael@0 395
michael@0 396 In section 5.4.1 (Commands Not Usable in Display Lists), add
michael@0 397 TexStorage* to the list of commands that cannot be used.
michael@0 398
michael@0 399 Additions to Chapter 6 of the OpenGL 3.2 Core Profile Specification
michael@0 400 (State and State Requests)
michael@0 401
michael@0 402 Replace the following statement in 6.1.3 (Enumerated Queries):
michael@0 403
michael@0 404 "<value> must be one of the symbolic values in table 3.10."
michael@0 405
michael@0 406 with
michael@0 407
michael@0 408 "<value> must be TEXTURE_IMMUTABLE_FORMAT_EXT or one of the symbolic
michael@0 409 values in table 3.22."
michael@0 410
michael@0 411 Additions to the AGL/EGL/GLX/WGL Specifications
michael@0 412
michael@0 413 None
michael@0 414
michael@0 415 Additions to OES_compressed_ETC1_RGB8_texture
michael@0 416
michael@0 417 Add the following to the additions to Chapter 3:
michael@0 418
michael@0 419 "Since ETC1 images are easily edited along 4x4 texel boundaries, the
michael@0 420 limitations on CompressedTexSubImage2D are relaxed.
michael@0 421 CompressedTexSubImage2D will result in an INVALID_OPERATION error
michael@0 422 only if one of the following conditions occurs:
michael@0 423
michael@0 424 * <width> is not a multiple of four, and <width> plus <xoffset> is not
michael@0 425 equal to the texture width;
michael@0 426
michael@0 427 * <height> is not a multiple of four, and <height> plus <yoffset> is
michael@0 428 not equal to the texture height; or
michael@0 429
michael@0 430 * <xoffset> or <yoffset> is not a multiple of four.
michael@0 431
michael@0 432 Remove CompressedTexSubImage2D from this error:
michael@0 433
michael@0 434 "INVALID_OPERATION is generated by CompressedTexSubImage2D,
michael@0 435 TexSubImage2D, or CopyTexSubImage2D if the texture image <level>
michael@0 436 bound to <target> has internal format ETC1_RGB8_OES."
michael@0 437
michael@0 438 Add the following error:
michael@0 439
michael@0 440 "INVALID_OPERATION is generated by CompressedTexSubImage2D
michael@0 441 if the region to be modified is not aligned to block boundaries
michael@0 442 (refer to the extension text for details)."
michael@0 443
michael@0 444 Additions to AMD_compressed_ATC_texture and AMD_compressed_3DC_texture:
michael@0 445
michael@0 446 Apply the same changes as for OES_compressed_ETC1_RGB8_texture
michael@0 447 above, substituting the appropriate internal format tokens from
michael@0 448 these extensions.
michael@0 449
michael@0 450 Dependencies on EXT_direct_state_access
michael@0 451
michael@0 452 If EXT_direct_state_access is not present, references to
michael@0 453 TextureStorage* should be ignored.
michael@0 454
michael@0 455 Dependencies on OpenGL ES
michael@0 456
michael@0 457 On OpenGL ES without extensions introducing TEXTURE_MAX_LEVEL,
michael@0 458 mipmapped textures specified with TexStorage are required to have a
michael@0 459 full set of mipmaps. If TEXTURE_MAX_LEVEL is not supported, this
michael@0 460 extension is modified as follows:
michael@0 461
michael@0 462 - Where an upper bound is placed on <levels> in this extension (i.e.
michael@0 463 the maximum number of mipmap levels for a texture of the given
michael@0 464 target and dimensions), an INVALID_OPERATION error is generated if
michael@0 465 <levels> is neither 1 nor this upper bound.
michael@0 466 - q (the effective maximum number of levels) is redefined to clamp
michael@0 467 to the number of levels present in immutable-format textures.
michael@0 468
michael@0 469 OpenGL ES does not accept sized internal formats (e.g., RGBA8) and
michael@0 470 instead derives an internal format from the <format> and <type>
michael@0 471 parameters of TexImage2D. Since TexStorage* does not specify texel
michael@0 472 data, the API doesn't include <format> and <type> parameters.
michael@0 473 On an OpenGL ES implementation, the values in the <internalformat>
michael@0 474 column in the tables below are accepted as <internalformat>
michael@0 475 parameters, and base internal formats are not accepted. The
michael@0 476 TexImage* calls in the TexStorage* pseudocode are modified so that
michael@0 477 the <internalformat>, <format> and <type> parameters are
michael@0 478 taken from the <format>, <format> and <type> columns (respectively)
michael@0 479 in the tables below, according to the <internalformat>
michael@0 480 specified in the TexStorage* command.
michael@0 481
michael@0 482 <internalformat> <format> <type>
michael@0 483 ---------------- -------- ------
michael@0 484 RGB565 RGB UNSIGNED_SHORT_5_6_5
michael@0 485 RGBA4 RGBA UNSIGNED_SHORT_4_4_4_4
michael@0 486 RGB5_A1 RGBA UNSIGNED_SHORT_5_5_5_1
michael@0 487 RGB8_OES RGB UNSIGNED_BYTE
michael@0 488 RGBA8_OES RGBA UNSIGNED_BYTE
michael@0 489 LUMINANCE8_ALPHA8_EXT LUMINANCE_ALPHA UNSIGNED_BYTE
michael@0 490 LUMINANCE8_EXT LUMINANCE UNSIGNED_BYTE
michael@0 491 ALPHA8_EXT ALPHA UNSIGNED_BYTE
michael@0 492
michael@0 493 If OES_depth_texture is supported:
michael@0 494
michael@0 495 <internalformat> <format> <type>
michael@0 496 ---------------- -------- ------
michael@0 497 DEPTH_COMPONENT16_OES DEPTH_COMPONENT UNSIGNED_SHORT
michael@0 498 DEPTH_COMPONENT32_OES DEPTH_COMPONENT UNSIGNED_INT
michael@0 499
michael@0 500 If OES_packed_depth_stencil is supported:
michael@0 501
michael@0 502 <internalformat> <format> <type>
michael@0 503 ---------------- -------- ------
michael@0 504 DEPTH24_STENCIL8_OES DEPTH_STENCIL_OES UNSIGNED_INT
michael@0 505
michael@0 506 If OES_texture_float is supported:
michael@0 507
michael@0 508 <internalformat> <format> <type>
michael@0 509 ---------------- -------- ------
michael@0 510 RGBA32F_EXT RGBA FLOAT
michael@0 511 RGB32F_EXT RGB FLOAT
michael@0 512 LUMINANCE_ALPHA32F_EXT LUMINANCE_ALPHA FLOAT
michael@0 513 LUMINANCE32F_EXT LUMINANCE FLOAT
michael@0 514 ALPHA32F_EXT ALPHA FLOAT
michael@0 515
michael@0 516 If OES_texture_half_float is supported:
michael@0 517
michael@0 518 <internalformat> <format> <type>
michael@0 519 ---------------- -------- ------
michael@0 520 RGBA16F_EXT RGBA HALF_FLOAT_OES
michael@0 521 RGB16F_EXT RGB HALF_FLOAT_OES
michael@0 522 LUMINANCE_ALPHA16F_EXT LUMINANCE_ALPHA HALF_FLOAT_OES
michael@0 523 LUMINANCE16F_EXT LUMINANCE HALF_FLOAT_OES
michael@0 524 ALPHA16F_EXT ALPHA HALF_FLOAT_OES
michael@0 525
michael@0 526 If EXT_texture_type_2_10_10_10_REV is supported:
michael@0 527
michael@0 528 <internalformat> <format> <type>
michael@0 529 ---------------- -------- ------
michael@0 530 RGB10_A2_EXT RGBA UNSIGNED_INT_2_10_10_10_REV_EXT
michael@0 531 RGB10_EXT RGB UNSIGNED_INT_2_10_10_10_REV_EXT
michael@0 532
michael@0 533 If EXT_texture_format_BGRA8888 is supported:
michael@0 534
michael@0 535 <internalformat> <format> <type>
michael@0 536 ---------------- -------- ------
michael@0 537 BGRA8_EXT BGRA_EXT UNSIGNED_BYTE
michael@0 538
michael@0 539
michael@0 540 Dependencies on texture targets
michael@0 541
michael@0 542 If a particular texture target is not supported by the
michael@0 543 implementation, passing it as a <target> to TexStorage* will
michael@0 544 generate an INVALID_ENUM error. If as a result, any of the commands
michael@0 545 defined in this extension would no longer have any valid <target>,
michael@0 546 all references to the command should be ignored.
michael@0 547
michael@0 548 In particular, note that OpenGL ES 1.x/2.0 do not have proxy textures,
michael@0 549 1D textures, or 3D textures, and thus only the TexStorage2DEXT
michael@0 550 entry point is required. If OES_texture_3D is supported, the
michael@0 551 TexStorage3DEXT entry point is also required.
michael@0 552
michael@0 553 Dependencies on OES_texture_npot
michael@0 554
michael@0 555 If OpenGL ES 2.0 or APPLE_texture_2D_limited_npot is present but
michael@0 556 OES_texture_npot is not present, then INVALID_OPERATION is
michael@0 557 generated by TexStorage* and TexStorage3DEXT if <levels> is
michael@0 558 not one and <width>, <height> or <depth> is not a power of
michael@0 559 two.
michael@0 560
michael@0 561 Dependencies on WGL_ARB_render_texture, GLX_EXT_texture_from_pixmap, EGL
michael@0 562 1.4 and GL_OES_EGL_image
michael@0 563
michael@0 564 The commands eglBindTexImage, wglBindTexImageARB, glXBindTexImageEXT or
michael@0 565 EGLImageTargetTexture2DOES are not permitted on an immutable-format
michael@0 566 texture.
michael@0 567 They will generate the following errors:
michael@0 568 - EGLImageTargetTexture2DOES: INVALID_OPERATION
michael@0 569 - eglBindTexImage: EGL_BAD_MATCH
michael@0 570 - wglBindTexImage: ERROR_INVALID_OPERATION
michael@0 571 - glXBindTexImageEXT: BadMatch
michael@0 572
michael@0 573 Dependencies on OES_compressed_paletted_texture
michael@0 574
michael@0 575 The compressed texture formats exposed by
michael@0 576 OES_compressed_paletted_texture are not supported by TexStorage*.
michael@0 577 Passing one of these tokens to TexStorage* will generate an
michael@0 578 INVALID_ENUM error.
michael@0 579
michael@0 580 Errors
michael@0 581
michael@0 582 Note that dependencies above modify the errors.
michael@0 583
michael@0 584 If TexStorage* is called with a <width>, <height>, <depth> or
michael@0 585 <levels> parameter that is less than one, then the error
michael@0 586 INVALID_VALUE is generated.
michael@0 587
michael@0 588 If the <target> parameter to TexStorage1DEXT is not
michael@0 589 [PROXY_]TEXTURE_1D, then the error INVALID_ENUM is generated.
michael@0 590
michael@0 591 If the <target> parameter to TexStorage2DEXT is not
michael@0 592 [PROXY_]TEXTURE_2D, [PROXY_]TEXTURE_CUBE_MAP,
michael@0 593 [PROXY_]TEXTURE_RECTANGLE or [PROXY_]TEXTURE_1D_ARRAY, then the
michael@0 594 error INVALID_ENUM is generated.
michael@0 595
michael@0 596 If the <target> parameter to TexStorage3DEXT is not
michael@0 597 [PROXY_]TEXTURE_3D, [PROXY_]TEXTURE_2D_ARRAY or
michael@0 598 [PROXY_]TEXTURE_CUBE_MAP_ARRAY then the error INVALID_ENUM is
michael@0 599 generated.
michael@0 600
michael@0 601 If the <levels> parameter to TexStorage* is greater than the
michael@0 602 <target>-specific value listed below then the error
michael@0 603 INVALID_OPERATION is generated:
michael@0 604 [PROXY_]TEXTURE_{1D,1D_ARRAY}:
michael@0 605 floor(log_2(width)) + 1
michael@0 606 [PROXY_]TEXTURE_{2D,2D_ARRAY,CUBE_MAP,CUBE_MAP_ARRAY}:
michael@0 607 floor(log_2(max(width, height))) + 1
michael@0 608 [PROXY_]TEXTURE_3D:
michael@0 609 floor(log_2(max(width, height, depth))) + 1
michael@0 610 [PROXY_]TEXTURE_RECTANGLE:
michael@0 611 1
michael@0 612
michael@0 613 If the default texture object is bound to the <target> passed to
michael@0 614 TexStorage*, then the error INVALID_OPERATION is generated.
michael@0 615
michael@0 616 If the <target> parameter to TextureStorage* does not match the
michael@0 617 dimensionality of <texture>, then the error INVALID_OPERATION is
michael@0 618 generated.
michael@0 619
michael@0 620 If the <texture> parameter to TextureStorage* is zero, then the
michael@0 621 INVALID_VALUE is generated.
michael@0 622
michael@0 623 If any pseudo-code listed in this extension would generate an error,
michael@0 624 then that error is generated.
michael@0 625
michael@0 626 Calling any of the following functions on a texture for which
michael@0 627 TEXTURE_IMMUTABLE_FORMAT_EXT is TRUE will generate an
michael@0 628 INVALID_OPERATION error:
michael@0 629 - TexImage*
michael@0 630 - CompressedTexImage*
michael@0 631 - CopyTexImage*
michael@0 632
michael@0 633 New State
michael@0 634
michael@0 635 Additions to Table 6.8 Textures (state per texture object)
michael@0 636
michael@0 637 Initial
michael@0 638 Get Value Type Get Command Value Description Sec.
michael@0 639 --------- ---- ----------- ------- ----------- ----
michael@0 640 TEXTURE_IMMUTABLE_FORMAT_EXT B GetTexParameter FALSE Size and format immutable 2.6
michael@0 641
michael@0 642 New Implementation Dependent State
michael@0 643
michael@0 644 None
michael@0 645
michael@0 646 Issues
michael@0 647
michael@0 648 1. What should this extension be called?
michael@0 649
michael@0 650 RESOLVED: EXT_texture_storage is chosen for consistency with the
michael@0 651 glRenderbufferStorage entry point.
michael@0 652
michael@0 653 2. Should TexStorage* accept a border parameter?
michael@0 654
michael@0 655 RESOLVED: no.
michael@0 656
michael@0 657 DISCUSSION: Currently it does not, since borders are a deprecated
michael@0 658 feature which is not supported by all hardware. Users of the
michael@0 659 compatibility profile can continue to use the existing texture
michael@0 660 specification functions, but there is an argument that users of
michael@0 661 compatibility profile may also want to use this extension.
michael@0 662
michael@0 663 3. What is the correct error when <levels> specifies a partial
michael@0 664 mipmap pyramid for OpenGL ES?
michael@0 665
michael@0 666 RESOLVED: INVALID_OPERATION, since it is an interaction between
michael@0 667 parameters rather than a single value being invalid. It also makes
michael@0 668 sense to relax this condition for desktop GL where it makes sense to
michael@0 669 use a truncated pyramid with TEXTURE_MAX_LEVEL.
michael@0 670
michael@0 671 4. Should use of these entry-points make the metadata (format and
michael@0 672 dimensions) immutable?
michael@0 673
michael@0 674 RESOLVED: Yes.
michael@0 675
michael@0 676 DISCUSSION: The benefits of knowing metadata can't change will
michael@0 677 probably outweigh the extra cost of checking the
michael@0 678 TEXTURE_IMMUTABLE_FORMAT_EXT flag on each texture specification
michael@0 679 call.
michael@0 680
michael@0 681 5. Should it be legal to completely replace the texture using a new call
michael@0 682 to TexStorage*?
michael@0 683
michael@0 684 RESOLVED. It will not be allowed.
michael@0 685
michael@0 686 DISCUSSION: This is useful to invalidate all levels of a texture.
michael@0 687 Allowing the metadata to be changed here seems easier than trying to
michael@0 688 define a portable definition of what it means to change the metadata
michael@0 689 (e.g. what if you used an unsized internal format the first time and
michael@0 690 the corresponding sized internal format the second time, or vice
michael@0 691 versa)?
michael@0 692
michael@0 693 However, while this is largely similar to deleting the old texture
michael@0 694 object and replacing it with a new one, it does lose some of the
michael@0 695 advantages of immutability. Specifically, because doing so does not
michael@0 696 reset bindings, it doesn't allow a migration path to an API that
michael@0 697 validates the texture format at bind time.
michael@0 698
michael@0 699 6. Should it be legal to use TexImage* after TexStorage* if it doesn't
michael@0 700 affect the metadata?
michael@0 701
michael@0 702 RESOLVED: No.
michael@0 703
michael@0 704 DISCUSSION: A potential use case is to allow a single level of a
michael@0 705 texture to be invalidated using a NULL pointer. However, as noted
michael@0 706 above it is non-trivial to determine what constitutes a change.
michael@0 707
michael@0 708 7. How does this extension interact with APPLE_texture_2D_limited_npot?
michael@0 709
michael@0 710 RESOLVED. APPLE_texture_2D_limited_npot is equivalent to the NPOT
michael@0 711 support in OpenGL ES 2.0.
michael@0 712
michael@0 713 8. Should this extension be written to work with desktop OpenGL?
michael@0 714
michael@0 715 RESOLVED: Yes.
michael@0 716
michael@0 717 DISCUSSION: There has been been interest and it will future-proof it
michael@0 718 against further additions to OpenGL ES.
michael@0 719
michael@0 720 9. Which texture targets should be supported?
michael@0 721
michael@0 722 RESOLVED. All targets except multisample and buffer textures are
michael@0 723 supported.
michael@0 724
michael@0 725 Initially all targets except TEXTURE_BUFFER were supported. It was
michael@0 726 noted that the entrypoints for multisample targets added no useful
michael@0 727 functionality, since multisample textures have no completeness
michael@0 728 checks beyond being non-empty.
michael@0 729
michael@0 730 Rectangle textures have completeness checks to prevent filtering of
michael@0 731 integer textures. However, since we decided to only force mipmap
michael@0 732 completeness, this becomes less useful.
michael@0 733
michael@0 734 10. Should this extension support proxy textures?
michael@0 735
michael@0 736 RESOLVED: Yes.
michael@0 737
michael@0 738 DISCUSSION: It should be orthogonal.
michael@0 739
michael@0 740 11. Are the <format> and <type> parameters necessary?
michael@0 741
michael@0 742 RESOLVED. No, they will be removed.
michael@0 743
michael@0 744 DISCUSSION: For OpenGL ES the type parameter was necessary to
michael@0 745 determine the precision of the texture, but this can be solved by
michael@0 746 having these functions accept sized internal formats (which are
michael@0 747 already accepted by renderbuffers).
michael@0 748
michael@0 749 12. Should it be legal to make the default texture (id 0)
michael@0 750 immutable-format?
michael@0 751
michael@0 752 RESOLVED: No.
michael@0 753
michael@0 754 DISCUSSION: This would make it impossible to restore the context to
michael@0 755 it's default state, which is deemed undesirable. There is no good
michael@0 756 reason not to use named texture objects.
michael@0 757
michael@0 758 13. Should we try to guarantee that textures made through this path
michael@0 759 will always be complete?
michael@0 760
michael@0 761 RESOLVED: It should be guaranteed that the texture will be mipmap
michael@0 762 complete.
michael@0 763
michael@0 764 DISCUSSION: Future separation between images and samplers will still
michael@0 765 allow users to create combinations that are invalid, but
michael@0 766 constraining the simple cases will make these APIs easier to use for
michael@0 767 beginners.
michael@0 768
michael@0 769 14. Should these functions use a EXT_direct_state_access approach to
michael@0 770 specifying the texture objects?
michael@0 771
michael@0 772 UNRESOLVED.
michael@0 773
michael@0 774 DISCUSSION: as a standalone extension, no DSA-like functions will be
michael@0 775 added. However, interactions with EXT_direct_state_access and
michael@0 776 ARB_direct_state_access need to be resolved.
michael@0 777
michael@0 778 15. Should these functions accept generic compressed formats?
michael@0 779
michael@0 780 RESOLVED: Yes. Note that the spec language will need to be modified
michael@0 781 to allow this for ES, since the pseudocode is written in terms of
michael@0 782 TexImage2D, which does not allow compressed texture formats in ES.
michael@0 783 See also issues 23 and 27.
michael@0 784
michael@0 785 16. How should completeness be forced when TEXTURE_MAX_LEVEL is not
michael@0 786 present?
michael@0 787
michael@0 788 RESOLVED. The maximum level q will be redefined to clamp to the
michael@0 789 highest level available.
michael@0 790
michael@0 791 DISCUSSION: A single-level texture can be made complete either by
michael@0 792 making it mipmap complete (by setting TEXTURE_MAX_LEVEL to 0) or by
michael@0 793 turning off mipmapping (by choose an appropriate minification
michael@0 794 filter).
michael@0 795
michael@0 796 Some options:
michael@0 797
michael@0 798 A: Specify that TexStorage* changes the default minification filter
michael@0 799 for OpenGL ES. This makes it awkward to add TEXTURE_MAX_LEVEL
michael@0 800 support to OpenGL ES later, since switching to match GL would break
michael@0 801 compatibility. The two mechanisms also do not give identical
michael@0 802 results, since the magnification threshold depends on the
michael@0 803 minification filter.
michael@0 804
michael@0 805 B: Specify that the texture behaves as though TEXTURE_MAX_LEVEL were
michael@0 806 zero. To specify this properly probably requires fairly intrusive
michael@0 807 changes to the OpenGL ES full specification to add back all the
michael@0 808 language relating to the max level. It also does not solve the
michael@0 809 similar problem of what to do with NPOT textures; and it may have
michael@0 810 hardware impacts due to the change in the min/mag crossover.
michael@0 811
michael@0 812 C: Specify that TexStorage* changes the default minification filter
michael@0 813 for all implementations when a single-level texture is specified.
michael@0 814 This may be slightly counter-intuitive to desktop GL users, but will
michael@0 815 give consistent behaviour across variants of GL and avoids changing
michael@0 816 the functional behaviour of this extension based on the presence or
michael@0 817 absence of some other feature.
michael@0 818
michael@0 819 Currently B is specified. This has potential hardware implications
michael@0 820 for OpenGL ES because of the effect of the minification filter on
michael@0 821 the min/mag crossover. However, C has potential hardware implications
michael@0 822 for OpenGL due to the separation of texture and sampler state.
michael@0 823
michael@0 824 17. How should completeness be forced when only ES2-style NPOT is
michael@0 825 available?
michael@0 826
michael@0 827 RESOLVED. It is not worth trying to do this, in light of issue 13.
michael@0 828
michael@0 829 Previous revisions of this extension overrode the minification
michael@0 830 filter and wrap modes, but that is no longer the case. Since
michael@0 831 OES_texture_npot removes the caveats on NPOT textures anyway, it
michael@0 832 might not be worth trying to "fix" this.
michael@0 833
michael@0 834 18. For OpenGL ES, how do the new sized internal formats interact
michael@0 835 with OES_required_internal_format?
michael@0 836
michael@0 837 RESOLVED.
michael@0 838
michael@0 839 If OES_required_internal_format is not present, then the
michael@0 840 <internalformat> parameter is intended merely to indicate what the
michael@0 841 corresponding <format> and <type> would have been, had TexImage*
michael@0 842 been used instead. If OES_required_internal_format is present, then
michael@0 843 it is intended that the <internalformat> will be interpreted as if
michael@0 844 it had been passed directly to TexImage*.
michael@0 845
michael@0 846 19. Should there be some hinting mechanism to indicate whether data
michael@0 847 is coming immediately or later?
michael@0 848
michael@0 849 RESOLVED. No parameter is needed. An extension can be added to provide
michael@0 850 a TexParameter value which is latched at TexStorage time.
michael@0 851
michael@0 852 DISCUSSION: Some members felt that this would be useful so that they
michael@0 853 could defer allocation when suitable, particularly if higher-
michael@0 854 resolution images will be streamed in later; or to choose a memory
michael@0 855 type or layout appropriate to the usage. However, implementation
michael@0 856 experience with BufferData is that developers frequently provide
michael@0 857 wrong values and implementations have to guess anyway.
michael@0 858
michael@0 859 One option suggested was the <usage> parameter currently passed to
michael@0 860 BufferData. Another option was to set it with TexParameter.
michael@0 861
michael@0 862 20. How should this extension interact with
michael@0 863 EGLImageTargetTexture2DOES, eglBindTexImage, glXBindTexImage and
michael@0 864 wglBindTexImage?
michael@0 865
michael@0 866 RESOLVED. These functions will not be permitted after glTexStorage*.
michael@0 867
michael@0 868 Several options are possible:
michael@0 869
michael@0 870 A) Disallow these functions.
michael@0 871 B) Allow them, but have them reset the TEXTURE_IMMUTABLE_FORMAT_EXT
michael@0 872 flag.
michael@0 873 C) Allow them unconditionally.
michael@0 874
michael@0 875 C would violate the design principle that the dimensions and format
michael@0 876 of the mipmap array are immutable. B does not so much modify the
michael@0 877 dimension and formats as replace them with an entirely different
michael@0 878 set.
michael@0 879
michael@0 880 21. Should there be a single function for specifying 1D, 2D and 3D
michael@0 881 targets?
michael@0 882
michael@0 883 RESOLVED. No, we will stick with existing precedent.
michael@0 884
michael@0 885 22. Is it possible to use GenerateMipmap with an incomplete mipmap
michael@0 886 pyramid?
michael@0 887
michael@0 888 RESOLVED. Yes, because the effective max level is limited to the
michael@0 889 levels that were specified, and so GenerateMipmap does not generate
michael@0 890 any new levels.
michael@0 891
michael@0 892 However, to make automatic mipmap generation work, it is necessary
michael@0 893 to redefine p rather than q, since automatic mipmap generation
michael@0 894 ignores the max level.
michael@0 895
michael@0 896 23. How should this extension interact with
michael@0 897 OES_compressed_paletted_texture?
michael@0 898
michael@0 899 RESOLVED. Paletted textures will not be permitted, and will
michael@0 900 generate INVALID_ENUM.
michael@0 901
michael@0 902 DISCUSSION: OES_compressed_paletted_texture supplies all the mipmaps
michael@0 903 in a single function call, with the palette specified once. That's
michael@0 904 incompatible with the upload model in this extension.
michael@0 905
michael@0 906 24. How can ETC1 textures be used with this extension?
michael@0 907
michael@0 908 RESOLVED. Add language in this extension to allow subregion uploads
michael@0 909 for ETC1.
michael@0 910
michael@0 911 DISCUSSION: GL_OES_compressed_ETC1_RGB8_texture doesn't allow
michael@0 912 CompressedTexSubImage*, so it would be impossible to use this
michael@0 913 extension with ETC1. This is seen as an oversight in the ETC1
michael@0 914 extension. While it cannot be fixed in that extension (since it is
michael@0 915 already shipping), this extension can add that capability.
michael@0 916
michael@0 917 25. Should any other compressed formats be similarly modified?
michael@0 918
michael@0 919 RESOLVED. Yes, AMD_compressed_ATC_texture and
michael@0 920 AMD_compressed_3DC_texture can be modified similarly to ETC1
michael@0 921 (Maurice Ribble indicated that both formats use 4x4 blocks). Desktop
michael@0 922 OpenGL requires that whole-image replacement is supported for any
michael@0 923 compressed texture format, and the OpenGL ES extensions
michael@0 924 EXT_texture_compression_dxt1 and IMG_texture_compression_pvrtc
michael@0 925 already allow whole-image replacement, so it is not necessary to
michael@0 926 modify them to be used with this extension.
michael@0 927
michael@0 928 26. Should these commands be permitted in display lists?
michael@0 929
michael@0 930 RESOLVED. No.
michael@0 931
michael@0 932 DISCUSSION: Display lists are most useful for repeating commands,
michael@0 933 and TexStorage* commands cannot be repeated because the first call
michael@0 934 makes the format immutable.
michael@0 935
michael@0 936 27. Should these commands accept unsized internal formats?
michael@0 937
michael@0 938 RESOLVED: No, for both OpenGL and OpenGL ES.
michael@0 939
michael@0 940 DISCUSSION: normally the <type> parameter to TexImage* can serve as
michael@0 941 a hint to select a sized format (and in OpenGL ES, this is the only
michael@0 942 mechanism available); since TexStorage* does not have a <type>
michael@0 943 parameter, the implementation has no information on which to base a
michael@0 944 decision.
michael@0 945
michael@0 946 Revision History
michael@0 947
michael@0 948 Revision 24, 2011/11/11 (dgkoch)
michael@0 949 - Mark complete. Clarify ES clarifications.
michael@0 950
michael@0 951 Revision 23, 2011/11/10 (dgkoch)
michael@0 952 - Add GLES clarifcations and interactions with more GLES extensions
michael@0 953
michael@0 954 Revision 22, 2011/11/10 (bmerry)
michael@0 955 - Update my contact details
michael@0 956
michael@0 957 Revision 21, 2011/07/25 (bmerry)
michael@0 958 - Remove dangling references to MultiTexStorage in Errors section
michael@0 959
michael@0 960 Revision 20, 2011/07/21 (bmerry)
michael@0 961 - Remove dangling reference to <samples> in Errors section
michael@0 962
michael@0 963 Revision 19, 2011/05/02 (Jon Leech)
michael@0 964 - Assign enum value
michael@0 965
michael@0 966 Revision 18, 2011/01/24 (bmerry)
michael@0 967 - Disallow unsized internal formats (oversight in revision 17).
michael@0 968
michael@0 969 Revision 17, 2011/01/24 (bmerry)
michael@0 970 - Added and resolved issue 26.
michael@0 971 - Split issue 27 out from issue 15.
michael@0 972 - Disallow TexStorage* in display lists.
michael@0 973 - Use the term "immutable-format" consistently (bug 7281).
michael@0 974
michael@0 975 Revision 16, 2010/11/23 (bmerry)
michael@0 976 - Disallowed TexStorage on an immutable-format texture
michael@0 977 (resolves issue 5).
michael@0 978 - Deleted MultiTexStorage* commands (other DSA functions still
michael@0 979 unresolved).
michael@0 980 - Some minor wording changes suggested by Pat Brown (bug 7002).
michael@0 981
michael@0 982 Revision 15, 2010/11/09 (bmerry)
michael@0 983 - Reopened issue 5.
michael@0 984 - Reopened issue 14, pending stabilisation of
michael@0 985 ARB_direct_state_access.
michael@0 986 - Marked issue 9 resolved, pending any objections.
michael@0 987 - Fix references to no object being bound (was meant to refer to
michael@0 988 the default object).
michael@0 989 - Adding missing pseudocode for TEXTURE_1D_ARRAY.
michael@0 990 - Corrected TEXTURE_2D_ARRAY -> TEXTURE_1D_ARRAY in error checks.
michael@0 991 - Changed "levels... are removed" to "levels... are reset to their
michael@0 992 init state", since desktop GL has per-level state apart from the
michael@0 993 texels.
michael@0 994 - Miscellaneous wording fixes.
michael@0 995
michael@0 996 Revision 14, 2010/09/25 (bmerry)
michael@0 997 - Add issues 24-25 and alterations to
michael@0 998 OES_compressed_ETC1_RGB8_texture, AMD_compressed_ATC_texture and
michael@0 999 AMD_compressed_3DC_texture.
michael@0 1000
michael@0 1001 Revision 13, 2010/09/19 (bmerry)
michael@0 1002 - Two typo fixes from Daniel Koch
michael@0 1003
michael@0 1004 Revision 12, 2010/09/18 (bmerry)
michael@0 1005 - Changed resolution to issue 20
michael@0 1006 - Added and resolved issue 23
michael@0 1007 - Added explanation of how to upload data (in overview)
michael@0 1008 - Added spec language to implement resolution to issue 15
michael@0 1009
michael@0 1010 Revision 11, 2010/07/21 (bmerry)
michael@0 1011 - Resolved issue 16
michael@0 1012 - Reopen issue 20
michael@0 1013 - Fix some typos
michael@0 1014
michael@0 1015 Revision 10, 2010/07/15 (bmerry)
michael@0 1016 - Update some issues to match core text
michael@0 1017 - Resolved issue 17
michael@0 1018
michael@0 1019 Revision 9, 2010/05/24 (bmerry)
michael@0 1020 - Marked issue 2 as resolved
michael@0 1021 - Resolved issue 19 (as no change)
michael@0 1022 - Resolved issue 20
michael@0 1023 - Add issues 21-22
michael@0 1024 - Add in spec language to forbid use on default textures
michael@0 1025 - Redefine level_base, level_max to be clamped forms of
michael@0 1026 TEXTURE_BASE_LEVEL/TEXTURE_MAX_LEVEL when using immutable
michael@0 1027 textures
michael@0 1028 - Redefine p to also be clamped to the provided levels for
michael@0 1029 immutable textures, to support automatic mipmap generation
michael@0 1030 - Removed multisample functions
michael@0 1031 - Removed language stating that texture parameters were reset to
michael@0 1032 defaults
michael@0 1033
michael@0 1034 Revision 8, 2010/05/18 (bmerry)
michael@0 1035 - Added issue about EGLimage
michael@0 1036 - Marked issue 14 as resolved
michael@0 1037
michael@0 1038 Revision 7, 2010/05/04 (bmerry)
michael@0 1039 - Removed some lingering <format>, <type> parameters to the new
michael@0 1040 functions that should have been removed in revision 4
michael@0 1041 - Trivial typo fixes
michael@0 1042
michael@0 1043 Revision 6, 2010/02/18 (bmerry)
michael@0 1044 - Resolved issues 5, 6 and 18
michael@0 1045 - Added MultiTexStorage* functions for DSA interaction
michael@0 1046 - Added error for texture-target mismatch in DSA
michael@0 1047 - Allowed TexStorage* to be called again
michael@0 1048
michael@0 1049 Revision 5, 2010/01/25 (bmerry)
michael@0 1050 - Added to contributors list
michael@0 1051 - Require OpenGL 1.2, to simplify interactions with
michael@0 1052 TEXTURE_BASE_LEVEL/TEXTURE_MAX_LEVEL and CLAMP_TO_EDGE
michael@0 1053 - Change default wrap modes to always be CLAMP_TO_EDGE
michael@0 1054 - Change default filters to always be NEAREST
michael@0 1055 - Moved language about generating new levels into an interaction,
michael@0 1056 since it can only happen on OpenGL ES
michael@0 1057 - Added interaction with EXT_direct_state_access
michael@0 1058 - Added extra <internalformats> for GL ES when OES_depth_texture,
michael@0 1059 OES_packed_depth_stencil and EXT_texture_type_2_10_10_10_REV are
michael@0 1060 present.
michael@0 1061 - Minor non-functional wording fixes and typos
michael@0 1062 - Resolved issue 16
michael@0 1063 - Added issues 17-19
michael@0 1064
michael@0 1065 Revision 4, 2010/01/13 (bmerry)
michael@0 1066 - Changed suffix from ARM to EXT
michael@0 1067 - Added list of contributors
michael@0 1068 - Added language to force the texture to always be complete
michael@0 1069 - Removed <format> and <type> arguments
michael@0 1070 - Added issues 14-16
michael@0 1071 - Reopened issue 2
michael@0 1072 - Reformatted issues to separate resolution and discussion
michael@0 1073 - Resolved issues 1, 9 and 11-13
michael@0 1074 - Fixed the max number of levels in a cube map array
michael@0 1075
michael@0 1076 Revision 3, 2009/12/17 (bmerry)
michael@0 1077 - Added missing vendor suffix to TEXTURE_IMMUTABLE_FORMAT_ARM
michael@0 1078 - Rewritten to against desktop OpenGL
michael@0 1079 - Added prototypes for 1D and multisample storage functions
michael@0 1080 - Added issues 8-13
michael@0 1081
michael@0 1082 Revision 2, 2009/08/20 (bmerry)
michael@0 1083 - Resolved issue 2 (no border parameter)
michael@0 1084 - Resolved issue 4 (metadata becomes immutable)
michael@0 1085 - Added interaction with OES_texture_cube_map
michael@0 1086 - Added error if width != height in a cube map
michael@0 1087 - Added issues 5-7
michael@0 1088
michael@0 1089 Revision 1, 2009/05/06 (bmerry)
michael@0 1090 - First draft

mercurial