Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
8.1 KiB

  1. -------------------------------------------------------------------------------
  2. Proposed changes and additions to OpenGL ARB policies for allocating
  3. new enumerant values for OpenGL extensions
  4. Craig Dunwoody
  5. Silicon Graphics
  6. 8-10-94
  7. -------------------------------------------------------------------------------
  8. -------------------------------------------------------------------------------
  9. Current policies
  10. -------------------------------------------------------------------------------
  11. If an OpenGL vendor defines a single-vendor OpenGL extension that
  12. requires one or more new enumerant values, then each of those values
  13. must be contained in a block of enumerant values that has been
  14. allocated by SGI for the exclusive use of that vendor. SGI
  15. maintains a registry of such allocations.
  16. OpenGL 1.0 uses enumerant values in the range [0,32767]. OpenGL 1.0
  17. enumerant values are grouped into blocks of 16 values. Each block
  18. begins with a value that is a multiple of 16. Only 75 of the 2048
  19. blocks in the range [0,32767] are used by OpenGL 1.0; the remaining
  20. blocks in this range are reserved for use by future versions of
  21. OpenGL. The largest enumerant value used by OpenGL 1.0 is 16391.
  22. Enumerant values for single-vendor extensions may be allocated in
  23. blocks of 1000, beginning with the block [102000,102999] and
  24. progressing upward.
  25. -------------------------------------------------------------------------------
  26. Problems with current policies
  27. -------------------------------------------------------------------------------
  28. 1. Unlike the OpenGL 1.0 enumerant values, values in the blocks of extension
  29. enumerant values that begin with the block [102000,102999] cannot be
  30. represented as 16-bit unsigned integers. This imposes a significant
  31. and unnecessary performance penalty on some implementations.
  32. 2. Current policies are insufficiently explicit about the process by which
  33. a vendor may voluntarily return to the registry a block of enumerant
  34. values that has been allocated for that vendor's use but has
  35. subsequently been determined by the vendor to be unneeded.
  36. 3. Current policies are insufficiently explicit about the management of
  37. enumerant values for an extension that is introduced by a single vendor,
  38. supported at a later date by additional vendors, and eventually
  39. incorporated as a required part of a new version of OpenGL.
  40. 4. Current policies are insufficiently explicit about the allocation
  41. of enumerant values for an extension that is introduced by a group of
  42. vendors.
  43. -------------------------------------------------------------------------------
  44. Proposed changes to current policies
  45. -------------------------------------------------------------------------------
  46. C1. Enumerant values for single-vendor extensions will be allocated upon
  47. request in blocks of 16 values, beginning with the block [32768,32783] and
  48. progressing upward. SGI will maintain a registry of such allocations.
  49. Because of the limited number (2048) of available blocks in the
  50. more desirable 16-bit range [32768,65535], vendors are expected to
  51. adhere to the following guidelines:
  52. 1. Allocate official enumerant values for an extension only after making a
  53. commitment to release that extension. Prior to this point, development
  54. work on the extension should be done using temporarily assigned
  55. enumerant values. One approach would be to choose these temporary
  56. values from the set of values in the range [0,32767] that are not
  57. used by the current version of OpenGL.
  58. 2. Minimize the number of unused enumerant values in an allocated block.
  59. Any block of 1000 enumerant values (beginning with the block
  60. [102000,102999] and progressing upward) that has already been allocated
  61. to a vendor will remain so allocated unless the vendor voluntarily
  62. returns the entire block. New allocations will be done only
  63. in blocks of 16 values, beginning with the block [32768,32783] and
  64. progressing upward.
  65. After the block [99984,99999] has been allocated, allocations of blocks
  66. of 16 values will continue in an upward direction, skipping over any
  67. block of 16 values that contains one or more values from a currently
  68. allocated 1000-value block.
  69. -------------------------------------------------------------------------------
  70. Proposed additions to current policies
  71. -------------------------------------------------------------------------------
  72. A1. If a vendor determines that it does not need a block of enumerant values
  73. that has been previously allocated to that vendor, the vendor
  74. may voluntarily return the entire block for future reallocation.
  75. A2. If an extension progresses from single-vendor status to multi-vendor
  76. status, the following rule applies: For each enumerant that is present
  77. in both the single-vendor version and the multi-vendor version, a new
  78. multi-vendor extension enumerant will be defined with the same value as
  79. the single-vendor extension enumerant. The name of the new enumerant will
  80. be the name of the extension enumerant with the suffix EXT replacing the
  81. vendor-specific suffix.
  82. A3. If an extension becomes a required part of a new version of OpenGL,
  83. the following rule applies: For each enumerant that is present
  84. in both the extension and the new version of OpenGL, the ARB will choose
  85. one of the following two options:
  86. 1. Define a new OpenGL enumerant with the same value as the extension
  87. enumerant. The name of the new enumerant will be the name of the
  88. extension enumerant with the extension suffix deleted.
  89. 2. Define a new OpenGL enumerant with a previously unused value
  90. in the range [0,32767]. The name of the new enumerant will be the
  91. name of the extension enumerant with the extension suffix deleted.
  92. A4. If a group of vendors introduces an extension, one of the vendors in
  93. the group must be designated as the "lead vendor" for that extension.
  94. The lead vendor will then allocate enumerant values for the extension in
  95. the same way that it would allocate enumerant values for a single-vendor
  96. extension.
  97. -------------------------------------------------------------------------------
  98. Discussion
  99. -------------------------------------------------------------------------------
  100. SGI's position is that these proposed changes and additions to ARB
  101. policies would solve the problems listed at the beginning of this
  102. document without introducing significant new problems. The
  103. centerpiece of the proposal is the idea of dividing the range of most
  104. desirable enumerant values (the 16-bit range [0,65535]) into two
  105. equal-sized blocks: the block [0,32767] for OpenGL enumerants, and the
  106. block [32768,65535] for OpenGL extension enumerants.
  107. We claim that this division would provide both OpenGL and OpenGL
  108. extensions with a more than adequate supply of enumerant values in the
  109. desirable 16-bit range [0,65535]. The basis for our claim is as
  110. follows:
  111. 1. OpenGL 1.0 uses only 75 of the 2048 blocks of 16 enumerant values in the
  112. OpenGL reserved range [0,32767], and nearly all of those 75 blocks are only
  113. partially filled. The largest enumerant value used by OpenGL 1.0 is
  114. 16391.
  115. 2. It is reasonable to expect that most or all of the enumerants that will
  116. be added as a mandatory part of future versions of OpenGL will appear
  117. first in OpenGL extensions. Since the proposed new policy A4 (see above)
  118. would make it possible for an extension to be adopted as a mandatory part
  119. of a new version of OpenGL without the need for the allocation of new
  120. enumerant values, we expect that it would rarely be necessary to
  121. allocate a new enumerant value in the range [0,32767].
  122. 3. SGI's initial release of 9 multi-vendor (EXT) extensions and 3
  123. single-vendor (SGI and SGIS) extensions would require a total of only 9
  124. of the 2048 blocks of 16 enumerant values in the range [32768,65535].
  125. That is less than 0.5% of the available blocks in this range.
  126. -------------------------------------------------------------------------------
  127. End of document
  128. -------------------------------------------------------------------------------
  129. ------- End of Forwarded Message