15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci ARB_robustness 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_ARB_robustness 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContributors 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Acorn Pooley, NVIDIA 125bd8deadSopenharmony_ci Anton Staaf, Google 135bd8deadSopenharmony_ci Barthold Lichtenbelt, NVIDIA 145bd8deadSopenharmony_ci Bruce Merry, ARM 155bd8deadSopenharmony_ci Chris Marrin, Apple 165bd8deadSopenharmony_ci Greg Roth, NVIDIA 175bd8deadSopenharmony_ci Jeff Bolz, NVIDIA 185bd8deadSopenharmony_ci Jon Leech 195bd8deadSopenharmony_ci Kenneth Russell, Google 205bd8deadSopenharmony_ci Kent Miller, Apple 215bd8deadSopenharmony_ci Piers Daniell, NVIDIA 225bd8deadSopenharmony_ci Vladimir Vukicevic, Mozilla 235bd8deadSopenharmony_ci 245bd8deadSopenharmony_ciContact 255bd8deadSopenharmony_ci 265bd8deadSopenharmony_ci Mark Kilgard, NVIDIA (mjk 'at' nvidia.com) 275bd8deadSopenharmony_ci 285bd8deadSopenharmony_ciNotice 295bd8deadSopenharmony_ci 305bd8deadSopenharmony_ci Copyright (c) 2010-2013 The Khronos Group Inc. Copyright terms at 315bd8deadSopenharmony_ci http://www.khronos.org/registry/speccopyright.html 325bd8deadSopenharmony_ci 335bd8deadSopenharmony_ciSpecification Update Policy 345bd8deadSopenharmony_ci 355bd8deadSopenharmony_ci Khronos-approved extension specifications are updated in response to 365bd8deadSopenharmony_ci issues and bugs prioritized by the Khronos OpenGL Working Group. For 375bd8deadSopenharmony_ci extensions which have been promoted to a core Specification, fixes will 385bd8deadSopenharmony_ci first appear in the latest version of that core Specification, and will 395bd8deadSopenharmony_ci eventually be backported to the extension document. This policy is 405bd8deadSopenharmony_ci described in more detail at 415bd8deadSopenharmony_ci https://www.khronos.org/registry/OpenGL/docs/update_policy.php 425bd8deadSopenharmony_ci 435bd8deadSopenharmony_ciStatus 445bd8deadSopenharmony_ci 455bd8deadSopenharmony_ci Complete. Approved by the ARB on June 9, 2010. 465bd8deadSopenharmony_ci Approved by the Khronos Board of Promoters on July 23, 2010. 475bd8deadSopenharmony_ci 485bd8deadSopenharmony_ciVersion 495bd8deadSopenharmony_ci 505bd8deadSopenharmony_ci Last Modified Date: June 25, 2014 515bd8deadSopenharmony_ci Version: 18 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ciNumber 545bd8deadSopenharmony_ci 555bd8deadSopenharmony_ci ARB Extension #105 565bd8deadSopenharmony_ci 575bd8deadSopenharmony_ciDependencies 585bd8deadSopenharmony_ci 595bd8deadSopenharmony_ci This extension is written against the OpenGL 3.2 Compatibility 605bd8deadSopenharmony_ci Profile Specification but can apply to OpenGL 1.1 and up. 615bd8deadSopenharmony_ci 625bd8deadSopenharmony_ci This specification interacts with the ARB_imaging subset of the OpenGL 635bd8deadSopenharmony_ci 3.2 Compatibility Profile. 645bd8deadSopenharmony_ci 655bd8deadSopenharmony_ci This specification interacts with the OpenGL 3.2 Core Profile. 665bd8deadSopenharmony_ci 675bd8deadSopenharmony_ci This specification interacts with EXT_direct_state_access. 685bd8deadSopenharmony_ci 695bd8deadSopenharmony_ci GLX_ARB_create_context_robustness and 705bd8deadSopenharmony_ci WGL_ARB_create_context_robustness are used to determine if a context 715bd8deadSopenharmony_ci implementing this extension supports robust buffer access, and if it 725bd8deadSopenharmony_ci supports reset notification. Equivalent platform-dependent 735bd8deadSopenharmony_ci mechanisms in other window-system integration layers such as EGL and 745bd8deadSopenharmony_ci AGL may exist for those platforms. 755bd8deadSopenharmony_ci 765bd8deadSopenharmony_ciOverview 775bd8deadSopenharmony_ci 785bd8deadSopenharmony_ci Several recent trends in how OpenGL integrates into modern computer 795bd8deadSopenharmony_ci systems have created new requirements for robustness and security 805bd8deadSopenharmony_ci for OpenGL rendering contexts. 815bd8deadSopenharmony_ci 825bd8deadSopenharmony_ci Additionally GPU architectures now support hardware fault detection; 835bd8deadSopenharmony_ci for example, video memory supporting ECC (error correcting codes) 845bd8deadSopenharmony_ci and error detection. OpenGL contexts should be capable of recovering 855bd8deadSopenharmony_ci from hardware faults such as uncorrectable memory errors. Along with 865bd8deadSopenharmony_ci recovery from such hardware faults, the recovery mechanism can 875bd8deadSopenharmony_ci also allow recovery from video memory access exceptions and system 885bd8deadSopenharmony_ci software failures. System software failures can be due to device 895bd8deadSopenharmony_ci changes or driver failures. 905bd8deadSopenharmony_ci 915bd8deadSopenharmony_ci Demands for increased software robustness and concerns about malware 925bd8deadSopenharmony_ci exploiting buffer overflows have lead API designers to provide 935bd8deadSopenharmony_ci additional "safe" APIs that bound the amount of data returned by 945bd8deadSopenharmony_ci an API query. For example, the safer "snprintf" or "_snprintf" 955bd8deadSopenharmony_ci routines are prefered over "sprintf". 965bd8deadSopenharmony_ci 975bd8deadSopenharmony_ci The OpenGL API has many such robustness perils. OpenGL queries 985bd8deadSopenharmony_ci return (write) some number of bytes to a buffer indicated by a 995bd8deadSopenharmony_ci pointer parameter. The exact number of bytes written by existing 1005bd8deadSopenharmony_ci OpenGL queries is not expressed directly by any specific parameter; 1015bd8deadSopenharmony_ci instead the number of bytes returned is a complex function of one 1025bd8deadSopenharmony_ci or more query arguments, sometimes context state such as pixel 1035bd8deadSopenharmony_ci store modes or the active texture selector, and the current state 1045bd8deadSopenharmony_ci of an object (such as a texture level's number of total texels). 1055bd8deadSopenharmony_ci By the standards of modern API design, such queries are not "safe". 1065bd8deadSopenharmony_ci Making these queries safer involves introducing a new query API with 1075bd8deadSopenharmony_ci an additional parameter that specifies the number of bytes in the 1085bd8deadSopenharmony_ci buffer and never writing bytes beyond that limit. 1095bd8deadSopenharmony_ci 1105bd8deadSopenharmony_ci Multi-threaded use of OpenGL contexts in a "share group" allow 1115bd8deadSopenharmony_ci sharing of objects such as textures and programs. Such sharing in 1125bd8deadSopenharmony_ci conjunction with concurrent OpenGL commands stream execution by two 1135bd8deadSopenharmony_ci or more contexts introduces hazards whereby one context can change 1145bd8deadSopenharmony_ci objects in ways that can cause buffer overflows for another context's 1155bd8deadSopenharmony_ci OpenGL queries. 1165bd8deadSopenharmony_ci 1175bd8deadSopenharmony_ci The original ARB_vertex_buffer_object extension includes an issue 1185bd8deadSopenharmony_ci that explicitly states program termination is allowed when 1195bd8deadSopenharmony_ci out-of-bounds vertex buffer object fetches occur. Modern GPUs 1205bd8deadSopenharmony_ci capable of DirectX 10 enforce the well-defined behavior of always 1215bd8deadSopenharmony_ci returning zero values for indices or non-fixed components in this 1225bd8deadSopenharmony_ci case. Older GPUs may require extra checks to enforce well-defined 1235bd8deadSopenharmony_ci (and termination free) behavior, but this expense is warranted when 1245bd8deadSopenharmony_ci processing potentially untrusted content. 1255bd8deadSopenharmony_ci 1265bd8deadSopenharmony_ci The intent of this extension is to address some specific robustness 1275bd8deadSopenharmony_ci goals: 1285bd8deadSopenharmony_ci 1295bd8deadSopenharmony_ci * For all existing OpenGL queries, provide additional "safe" APIs 1305bd8deadSopenharmony_ci that limit data written to user pointers to a buffer size in 1315bd8deadSopenharmony_ci bytes that is an explicit additional parameter of the query. 1325bd8deadSopenharmony_ci 1335bd8deadSopenharmony_ci * Provide a mechanism for an OpenGL application to learn about 1345bd8deadSopenharmony_ci graphics resets that affect the context. When a graphics reset 1355bd8deadSopenharmony_ci occurs, the OpenGL context becomes unusable and the application 1365bd8deadSopenharmony_ci must create a new context to continue operation. Detecting a 1375bd8deadSopenharmony_ci graphics reset happens through an inexpensive query. 1385bd8deadSopenharmony_ci 1395bd8deadSopenharmony_ci * Provide an enable to guarantee that out-of-bounds buffer object 1405bd8deadSopenharmony_ci accesses by the GPU will have deterministic behavior and preclude 1415bd8deadSopenharmony_ci application instability or termination due to an incorrect buffer 1425bd8deadSopenharmony_ci access. Such accesses include vertex buffer fetches of 1435bd8deadSopenharmony_ci attributes and indices, and indexed reads of uniforms or 1445bd8deadSopenharmony_ci parameters from buffers. 1455bd8deadSopenharmony_ci 1465bd8deadSopenharmony_ci In one anticipated usage model, WebGL contexts may make use of these 1475bd8deadSopenharmony_ci robust features to grant greater stability when using untrusted code. 1485bd8deadSopenharmony_ci WebGL contexts cannot call OpenGL commands directly but rather must 1495bd8deadSopenharmony_ci route all OpenGL API calls through the web browser. It is then the 1505bd8deadSopenharmony_ci web browser that configures the context, using the commands in this 1515bd8deadSopenharmony_ci extension, to enforce safe behavior. In this scenario, the WebGL 1525bd8deadSopenharmony_ci content cannot specify or change the use of this extension's features 1535bd8deadSopenharmony_ci itself; the web browser enforces this policy. 1545bd8deadSopenharmony_ci 1555bd8deadSopenharmony_ci There are other well-known robustness issues with the OpenGL API 1565bd8deadSopenharmony_ci which this extension does not address. For example, selector-based 1575bd8deadSopenharmony_ci OpenGL commands are a well-known source of programming errors. 1585bd8deadSopenharmony_ci Code to manipulate texture state may assume the active texture 1595bd8deadSopenharmony_ci selector is set appropriately when an intervening function call 1605bd8deadSopenharmony_ci obscures a change to the active texture state resulting in 1615bd8deadSopenharmony_ci incorrectly updated or queried state. The EXT_direct_state_access 1625bd8deadSopenharmony_ci extension introduces selector-free OpenGL commands and queries to 1635bd8deadSopenharmony_ci address that particular issue so this extension does not. 1645bd8deadSopenharmony_ci 1655bd8deadSopenharmony_ci The intent of this extension is NOT to deprecate any existing API 1665bd8deadSopenharmony_ci and thereby introduce compatibility issues and coding burdens on 1675bd8deadSopenharmony_ci existing code, but rather to provide new APIs to ensure a level of 1685bd8deadSopenharmony_ci robustness commensurate with the expectations of modern applications 1695bd8deadSopenharmony_ci of OpenGL. 1705bd8deadSopenharmony_ci 1715bd8deadSopenharmony_ciIP Status 1725bd8deadSopenharmony_ci 1735bd8deadSopenharmony_ci No known IP claims. 1745bd8deadSopenharmony_ci 1755bd8deadSopenharmony_ciNew Procedures and Functions 1765bd8deadSopenharmony_ci 1775bd8deadSopenharmony_ci GRAPHICS RESET DETECTION AND RECOVERY 1785bd8deadSopenharmony_ci 1795bd8deadSopenharmony_ci enum GetGraphicsResetStatusARB(); 1805bd8deadSopenharmony_ci 1815bd8deadSopenharmony_ci SIZED BUFFER QUERIES 1825bd8deadSopenharmony_ci 1835bd8deadSopenharmony_ci OpenGL 1.0 sized buffer queries 1845bd8deadSopenharmony_ci 1855bd8deadSopenharmony_ci void GetnMapdvARB(enum target, enum query, sizei bufSize, double *v); 1865bd8deadSopenharmony_ci void GetnMapfvARB(enum target, enum query, sizei bufSize, float *v); 1875bd8deadSopenharmony_ci void GetnMapivARB(enum target, enum query, sizei bufSize, int *v); 1885bd8deadSopenharmony_ci 1895bd8deadSopenharmony_ci void GetnPixelMapfvARB(enum map, sizei bufSize, float *values); 1905bd8deadSopenharmony_ci void GetnPixelMapuivARB(enum map, sizei bufSize, uint *values); 1915bd8deadSopenharmony_ci void GetnPixelMapusvARB(enum map, sizei bufSize, ushort *values); 1925bd8deadSopenharmony_ci 1935bd8deadSopenharmony_ci void GetnPolygonStippleARB(sizei bufSize, ubyte *pattern); 1945bd8deadSopenharmony_ci 1955bd8deadSopenharmony_ci void GetnTexImageARB(enum target, int level, enum format, 1965bd8deadSopenharmony_ci enum type, sizei bufSize, void *img); 1975bd8deadSopenharmony_ci 1985bd8deadSopenharmony_ci void ReadnPixelsARB(int x, int y, sizei width, sizei height, 1995bd8deadSopenharmony_ci enum format, enum type, sizei bufSize, 2005bd8deadSopenharmony_ci void *data); 2015bd8deadSopenharmony_ci 2025bd8deadSopenharmony_ci ARB_imaging sized buffer queries 2035bd8deadSopenharmony_ci 2045bd8deadSopenharmony_ci void GetnColorTableARB(enum target, enum format, enum type, 2055bd8deadSopenharmony_ci sizei bufSize, void *table); 2065bd8deadSopenharmony_ci void GetnConvolutionFilterARB(enum target, enum format, 2075bd8deadSopenharmony_ci enum type, sizei bufSize, void *image); 2085bd8deadSopenharmony_ci void GetnSeparableFilterARB(enum target, enum format, enum type, 2095bd8deadSopenharmony_ci sizei rowBufSize, void *row, 2105bd8deadSopenharmony_ci sizei columnBufSize, void *column, 2115bd8deadSopenharmony_ci void *span); 2125bd8deadSopenharmony_ci void GetnHistogramARB(enum target, boolean reset, enum format, 2135bd8deadSopenharmony_ci enum type, sizei bufSize, void *values); 2145bd8deadSopenharmony_ci void GetnMinmaxARB(enum target, boolean reset, enum format, 2155bd8deadSopenharmony_ci enum type, sizei bufSize, void *values); 2165bd8deadSopenharmony_ci 2175bd8deadSopenharmony_ci OpenGL 1.3 sized buffer queries 2185bd8deadSopenharmony_ci 2195bd8deadSopenharmony_ci void GetnCompressedTexImageARB(enum target, int lod, 2205bd8deadSopenharmony_ci sizei bufSize, void *img); 2215bd8deadSopenharmony_ci 2225bd8deadSopenharmony_ci OpenGL 2.0 sized buffer queries 2235bd8deadSopenharmony_ci 2245bd8deadSopenharmony_ci void GetnUniformfvARB(uint program, int location, sizei bufSize, 2255bd8deadSopenharmony_ci float *params); 2265bd8deadSopenharmony_ci void GetnUniformivARB(uint program, int location, sizei bufSize, 2275bd8deadSopenharmony_ci int *params); 2285bd8deadSopenharmony_ci void GetnUniformuivARB(uint program, int location, sizei bufSize, 2295bd8deadSopenharmony_ci uint *params); 2305bd8deadSopenharmony_ci void GetnUniformdvARB(uint program, int location, sizei bufSize, 2315bd8deadSopenharmony_ci double *params); 2325bd8deadSopenharmony_ci 2335bd8deadSopenharmony_ciNew Tokens 2345bd8deadSopenharmony_ci 2355bd8deadSopenharmony_ci Returned by GetGraphicsResetStatusARB: 2365bd8deadSopenharmony_ci 2375bd8deadSopenharmony_ci NO_ERROR 0x0000 2385bd8deadSopenharmony_ci GUILTY_CONTEXT_RESET_ARB 0x8253 2395bd8deadSopenharmony_ci INNOCENT_CONTEXT_RESET_ARB 0x8254 2405bd8deadSopenharmony_ci UNKNOWN_CONTEXT_RESET_ARB 0x8255 2415bd8deadSopenharmony_ci 2425bd8deadSopenharmony_ci Accepted by the <value> parameter of GetBooleanv, GetIntegerv, 2435bd8deadSopenharmony_ci GetInteger64v, GetFloatv, and GetDoublev: 2445bd8deadSopenharmony_ci 2455bd8deadSopenharmony_ci RESET_NOTIFICATION_STRATEGY_ARB 0x8256 2465bd8deadSopenharmony_ci 2475bd8deadSopenharmony_ci Returned by GetIntegerv and related simple queries when 2485bd8deadSopenharmony_ci <value> is RESET_NOTIFICATION_STRATEGY_ARB: 2495bd8deadSopenharmony_ci 2505bd8deadSopenharmony_ci LOSE_CONTEXT_ON_RESET_ARB 0x8252 2515bd8deadSopenharmony_ci NO_RESET_NOTIFICATION_ARB 0x8261 2525bd8deadSopenharmony_ci 2535bd8deadSopenharmony_ci Returned by GetIntegerv when <pname> is CONTEXT_FLAGS: 2545bd8deadSopenharmony_ci 2555bd8deadSopenharmony_ci CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 2565bd8deadSopenharmony_ci 2575bd8deadSopenharmony_ci 2585bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 3.2 (Compatibility Profile) 2595bd8deadSopenharmony_ciSpecification (OpenGL Operation) 2605bd8deadSopenharmony_ci 2615bd8deadSopenharmony_ciAdd a new subsection after 2.5 "GL Errors" and renumber subsequent 2625bd8deadSopenharmony_cisections accordingly 2635bd8deadSopenharmony_ci 2645bd8deadSopenharmony_ci 2.6 "Graphics Reset Recovery" 2655bd8deadSopenharmony_ci 2665bd8deadSopenharmony_ci Certain events can result in a reset of the GL context. Such a reset 2675bd8deadSopenharmony_ci causes all context state to be lost. Recovery from such events 2685bd8deadSopenharmony_ci requires recreation of all objects in the affected context. The 2695bd8deadSopenharmony_ci current status of the graphics reset state is returned by 2705bd8deadSopenharmony_ci 2715bd8deadSopenharmony_ci enum GetGraphicsResetStatusARB(); 2725bd8deadSopenharmony_ci 2735bd8deadSopenharmony_ci The symbolic constant returned indicates if the GL context has been 2745bd8deadSopenharmony_ci in a reset state at any point since the last call to 2755bd8deadSopenharmony_ci GetGraphicsResetStatusARB. NO_ERROR indicates that the GL context 2765bd8deadSopenharmony_ci has not been in a reset state since the last call. 2775bd8deadSopenharmony_ci GUILTY_CONTEXT_RESET_ARB indicates that a reset has been detected 2785bd8deadSopenharmony_ci that is attributable to the current GL context. 2795bd8deadSopenharmony_ci INNOCENT_CONTEXT_RESET_ARB indicates a reset has been detected that 2805bd8deadSopenharmony_ci is not attributable to the current GL context. 2815bd8deadSopenharmony_ci UNKNOWN_CONTEXT_RESET_ARB indicates a detected graphics reset whose 2825bd8deadSopenharmony_ci cause is unknown. 2835bd8deadSopenharmony_ci 2845bd8deadSopenharmony_ci If a reset status other than NO_ERROR is returned and subsequent 2855bd8deadSopenharmony_ci calls return NO_ERROR, the context reset was encountered and 2865bd8deadSopenharmony_ci completed. If a reset status is repeatedly returned, the context may 2875bd8deadSopenharmony_ci be in the process of resetting. 2885bd8deadSopenharmony_ci 2895bd8deadSopenharmony_ci Reset notification behavior is determined at context creation time, 2905bd8deadSopenharmony_ci and may be queried by calling GetIntegerv with the symbolic constant 2915bd8deadSopenharmony_ci RESET_NOTIFICATION_STRATEGY_ARB. 2925bd8deadSopenharmony_ci 2935bd8deadSopenharmony_ci If the reset notification behavior is NO_RESET_NOTIFICATION_ARB, 2945bd8deadSopenharmony_ci then the implementation will never deliver notification of reset 2955bd8deadSopenharmony_ci events, and GetGraphicsResetStatusARB will always return 2965bd8deadSopenharmony_ci NO_ERROR[fn1]. 2975bd8deadSopenharmony_ci [fn1: In this case it is recommended that implementations should 2985bd8deadSopenharmony_ci not allow loss of context state no matter what events occur. 2995bd8deadSopenharmony_ci However, this is only a recommendation, and cannot be relied 3005bd8deadSopenharmony_ci upon by applications.] 3015bd8deadSopenharmony_ci 3025bd8deadSopenharmony_ci If the behavior is LOSE_CONTEXT_ON_RESET_ARB, a graphics reset will 3035bd8deadSopenharmony_ci result in the loss of all context state, requiring the recreation of 3045bd8deadSopenharmony_ci all associated objects. In this case GetGraphicsResetStatusARB. may 3055bd8deadSopenharmony_ci return any of the values described above. 3065bd8deadSopenharmony_ci 3075bd8deadSopenharmony_ci If a graphics reset notification occurs in a context, a notification 3085bd8deadSopenharmony_ci must also occur in all other contexts which share objects with that 3095bd8deadSopenharmony_ci context[fn2]. 3105bd8deadSopenharmony_ci [fn2: The values returned by GetGraphicsResetStatusARB in the 3115bd8deadSopenharmony_ci different contexts may differ.] 3125bd8deadSopenharmony_ci 3135bd8deadSopenharmony_ci Add to Section 2.8 "Vertex Arrays" before 2.8.1 "Drawing Commands" 3145bd8deadSopenharmony_ci 3155bd8deadSopenharmony_ci Robust buffer access is enabled by creating a context with robust 3165bd8deadSopenharmony_ci access enabled through the window system binding APIs. When enabled, 3175bd8deadSopenharmony_ci indices within the vertex array that lie outside the arrays defined 3185bd8deadSopenharmony_ci for enabled attributes result in undefined values for the 3195bd8deadSopenharmony_ci corresponding attributes, but cannot result in application failure. 3205bd8deadSopenharmony_ci 3215bd8deadSopenharmony_ci 3225bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 3.2 (Compatibility Profile) 3235bd8deadSopenharmony_ciSpecification (Rasterization) 3245bd8deadSopenharmony_ci 3255bd8deadSopenharmony_ci None 3265bd8deadSopenharmony_ci 3275bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 3.2 (Compatibility Profile) 3285bd8deadSopenharmony_ciSpecification (Per-Fragment Operations and the Frame Buffer) 3295bd8deadSopenharmony_ci 3305bd8deadSopenharmony_ci Modify section 4.3.2 "Reading Pixels" 3315bd8deadSopenharmony_ci 3325bd8deadSopenharmony_ci Pixels are read using 3335bd8deadSopenharmony_ci 3345bd8deadSopenharmony_ci void ReadPixels(int x, int y, sizei width, sizei height, 3355bd8deadSopenharmony_ci enum format, enum type, void *data); 3365bd8deadSopenharmony_ci void ReadnPixelsARB(int x, int y, sizei width, sizei height, 3375bd8deadSopenharmony_ci enum format, enum type, sizei bufSize, 3385bd8deadSopenharmony_ci void *data); 3395bd8deadSopenharmony_ci 3405bd8deadSopenharmony_ci The arguments after <x> and <y> to ReadPixels are described in 3415bd8deadSopenharmony_ci section 3.7.4. The pixel storage modes that apply to ReadPixels and 3425bd8deadSopenharmony_ci other commands that query images (see section 6.1) are summarized in 3435bd8deadSopenharmony_ci table 4.7. ReadnPixelsARB behaves identically to ReadPixels except 3445bd8deadSopenharmony_ci that it does not write more than <bufSize> bytes into <data>. 3455bd8deadSopenharmony_ci 3465bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 3.2 (Compatibility Profile) 3475bd8deadSopenharmony_ciSpecification (Special Functions) 3485bd8deadSopenharmony_ci 3495bd8deadSopenharmony_ci None 3505bd8deadSopenharmony_ci 3515bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 3.2 (Compatibility Profile) 3525bd8deadSopenharmony_ciSpecification (State and State Requests) 3535bd8deadSopenharmony_ci 3545bd8deadSopenharmony_ci Modify Section 6.1.3 "Enumerated Queries" 3555bd8deadSopenharmony_ci 3565bd8deadSopenharmony_ci void GetPixelMap{ui us f}v(enum map, T data); 3575bd8deadSopenharmony_ci void GetnPixelMap{ui us f}vARB(enum map, sizei bufSize, T data); 3585bd8deadSopenharmony_ci 3595bd8deadSopenharmony_ci return all values in the pixel map <map> in <data>. <map> must be 3605bd8deadSopenharmony_ci a map name from table 3.3. GetPixelMapuiv, GetnPixelMapuivARB, 3615bd8deadSopenharmony_ci GetPixelMapusv, and GetnPixelMapusvARB convert floating point pixel 3625bd8deadSopenharmony_ci map values to integers according to the UNSIGNED_INT and 3635bd8deadSopenharmony_ci UNSIGNED_SHORT entries, respectively, of table 4.9. 3645bd8deadSopenharmony_ci GetnPixelMap{ui us f}vARB does not write more than <bufSize> 3655bd8deadSopenharmony_ci bytes into <data>. 3665bd8deadSopenharmony_ci If a pixel pack buffer ... 3675bd8deadSopenharmony_ci ... an INVALID_OPERATIONS_ERROR results. When calling 3685bd8deadSopenharmony_ci GetnPixelMap{ui us f}vARB, if a pixel pack buffer object is bound 3695bd8deadSopenharmony_ci and <n> is greater than <bufSize>, but <data>+<n> does not exceed 3705bd8deadSopenharmony_ci the size of the buffer, no error results. 3715bd8deadSopenharmony_ci 3725bd8deadSopenharmony_ci ... 3735bd8deadSopenharmony_ci 3745bd8deadSopenharmony_ci void GetMap{ifd}v(enum map, enum value, T data); 3755bd8deadSopenharmony_ci void GetnMap{ifd}vARB(enum map, enum value, sizei bufSize, T data); 3765bd8deadSopenharmony_ci 3775bd8deadSopenharmony_ci places information about <value> for <map> in <data>. <map> must 3785bd8deadSopenharmony_ci be one of the map types described in section 5.1, and <value> must 3795bd8deadSopenharmony_ci be one of ORDER, COEFF, or DOMAIN. GetnMap{ifd}vARB does not write 3805bd8deadSopenharmony_ci more than <bufSize> bytes into <data>. 3815bd8deadSopenharmony_ci 3825bd8deadSopenharmony_ci Section 6.1.4 "Texture Queries" 3835bd8deadSopenharmony_ci 3845bd8deadSopenharmony_ci 3855bd8deadSopenharmony_ci Modify the description of GetTexImage: 3865bd8deadSopenharmony_ci 3875bd8deadSopenharmony_ci "The commands 3885bd8deadSopenharmony_ci 3895bd8deadSopenharmony_ci void GetTexImage(enum tex, int lod, enum format, enum type, 3905bd8deadSopenharmony_ci void *img ); 3915bd8deadSopenharmony_ci void GetnTexImageARB(enum tex, int lod, enum format, enum type, 3925bd8deadSopenharmony_ci sizei bufSize, void *img ); 3935bd8deadSopenharmony_ci 3945bd8deadSopenharmony_ci are used to obtain texture images. ... 3955bd8deadSopenharmony_ci ... <type> is a pixel type from table 3.5. GetnTexImageARB does 3965bd8deadSopenharmony_ci not write more than <bufSize> bytes into <img>." 3975bd8deadSopenharmony_ci 3985bd8deadSopenharmony_ci Add to the end of the sixth paragraph: 3995bd8deadSopenharmony_ci 4005bd8deadSopenharmony_ci "When calling GetnTextureImageARB, if a pixel pack buffer object 4015bd8deadSopenharmony_ci is bound and packing a texture image into buffer memory would 4025bd8deadSopenharmony_ci exceed <bufSize> but not the size of the buffer, no error results." 4035bd8deadSopenharmony_ci 4045bd8deadSopenharmony_ci Modify the description of GetCompressedTexImage: 4055bd8deadSopenharmony_ci 4065bd8deadSopenharmony_ci "The commands 4075bd8deadSopenharmony_ci 4085bd8deadSopenharmony_ci void GetCompressedTexImage(enum target, int lod, void *img); 4095bd8deadSopenharmony_ci void GetnCompressedTexImageARB(enum target, int lod, sizei bufSize, 4105bd8deadSopenharmony_ci void *img ); 4115bd8deadSopenharmony_ci 4125bd8deadSopenharmony_ci are used to obtain texture images stored in compressed form. The 4135bd8deadSopenharmony_ci parameters <target>, <lod>, and <img> are interpreted in the same 4145bd8deadSopenharmony_ci manner as in GetTexImage and GetnTexImageARB respectively. When 4155bd8deadSopenharmony_ci called, GetCompressedTexImage and GetnCompressedTexImageARB write 4165bd8deadSopenharmony_ci MIN(n,bufSize) ubytes of compressed image data ... 4175bd8deadSopenharmony_ci 4185bd8deadSopenharmony_ci ... If a pixel pack buffer object is bound and img + n is greater 4195bd8deadSopenharmony_ci than the size of the buffer, an INVALID_OPERATION error results. 4205bd8deadSopenharmony_ci When calling GetnCompressedTextureImageARB, if a pixel pack buffer 4215bd8deadSopenharmony_ci object is bound and <n> is greater than <bufSize> but <img>+<n> 4225bd8deadSopenharmony_ci does not exceed the size of the buffer, no error results." 4235bd8deadSopenharmony_ci 4245bd8deadSopenharmony_ci Modify Section 6.1.5 "Stipple Query" 4255bd8deadSopenharmony_ci 4265bd8deadSopenharmony_ci The commands 4275bd8deadSopenharmony_ci 4285bd8deadSopenharmony_ci void GetPolygonStipple(void *pattern); 4295bd8deadSopenharmony_ci void GetnPolygonStippleARB(sizei bufSize, void *pattern); 4305bd8deadSopenharmony_ci 4315bd8deadSopenharmony_ci obtain the polygon stipple. The pattern is packed into pixel pack 4325bd8deadSopenharmony_ci buffer or client memory according to the procedure given in section 4335bd8deadSopenharmony_ci 4.3.2 for ReadPixels; it is as if the <height> and <width> passed 4345bd8deadSopenharmony_ci to that command were both equal to 32, the type were BITMAP, and 4355bd8deadSopenharmony_ci the format were COLOR_INDEX. GetnPolygonStippleARB does not write 4365bd8deadSopenharmony_ci more than <bufSize> bytes into <pattern>. 4375bd8deadSopenharmony_ci 4385bd8deadSopenharmony_ci Modify Section 6.1.7 "Color Table Query" 4395bd8deadSopenharmony_ci 4405bd8deadSopenharmony_ci The current contents of a color table are queried using 4415bd8deadSopenharmony_ci 4425bd8deadSopenharmony_ci void GetColorTable(enum target, enum format, enum type, 4435bd8deadSopenharmony_ci void *table ); 4445bd8deadSopenharmony_ci void GetnColorTableARB(enum target, enum format, enum type, 4455bd8deadSopenharmony_ci sizei bufSize, void *table); 4465bd8deadSopenharmony_ci 4475bd8deadSopenharmony_ci <target> must be one of the regular color table names listed in 4485bd8deadSopenharmony_ci table 3.4. ... 4495bd8deadSopenharmony_ci ... to the components requested by format are described in table 4505bd8deadSopenharmony_ci 6.1. GetnColorTableARB does not write more than <bufSize> bytes 4515bd8deadSopenharmony_ci into <table>. 4525bd8deadSopenharmony_ci 4535bd8deadSopenharmony_ci Modify Section 6.1.8 "Convolution Query" 4545bd8deadSopenharmony_ci 4555bd8deadSopenharmony_ci The current contents of a convolution filter image are queried 4565bd8deadSopenharmony_ci with the command 4575bd8deadSopenharmony_ci 4585bd8deadSopenharmony_ci void GetConvolutionFilter(enum target, enum format, enum type, 4595bd8deadSopenharmony_ci void *image ); 4605bd8deadSopenharmony_ci void GetnConvolutionFilterARB(enum target, enum format, 4615bd8deadSopenharmony_ci enum type, sizei bufSize, void *image); 4625bd8deadSopenharmony_ci 4635bd8deadSopenharmony_ci <target> must be CONVOLUTION_1D or CONVOLUTION_2D. ... 4645bd8deadSopenharmony_ci ... Pixel processing and component mapping are identical to those 4655bd8deadSopenharmony_ci of GetTexImage. GetnConvolutionFilterARB does not write more than 4665bd8deadSopenharmony_ci <bufSize> bytes into <image>. 4675bd8deadSopenharmony_ci 4685bd8deadSopenharmony_ci ... 4695bd8deadSopenharmony_ci 4705bd8deadSopenharmony_ci The current contents of a separable filter image are queried using 4715bd8deadSopenharmony_ci 4725bd8deadSopenharmony_ci void GetSeparableFilter(enum target, enum format, enum type, 4735bd8deadSopenharmony_ci void *row, void *column, void *span ); 4745bd8deadSopenharmony_ci void GetnSeparableFilterARB(enum target, enum format, enum type, 4755bd8deadSopenharmony_ci sizei rowBufSize, void *row, 4765bd8deadSopenharmony_ci sizei columnBufSize, void *column, 4775bd8deadSopenharmony_ci void *span); 4785bd8deadSopenharmony_ci 4795bd8deadSopenharmony_ci ... The row and column images are returned to pixel pack buffer or 4805bd8deadSopenharmony_ci client memory starting at row and column respectively. 4815bd8deadSopenharmony_ci GetnSeparableFilterARB does not write more than <rowBufSize> bytes 4825bd8deadSopenharmony_ci into <row> and no more than <columnBufSize> bytes into <column>. 4835bd8deadSopenharmony_ci <span> is currently unused. ... 4845bd8deadSopenharmony_ci 4855bd8deadSopenharmony_ci 4865bd8deadSopenharmony_ci Modify Section 6.1.9 "Histogram Query" 4875bd8deadSopenharmony_ci 4885bd8deadSopenharmony_ci The current contents of the histogram table are queried using 4895bd8deadSopenharmony_ci 4905bd8deadSopenharmony_ci void GetHistogram(enum target, boolean reset, enum format, 4915bd8deadSopenharmony_ci enum type, void* values ); 4925bd8deadSopenharmony_ci void GetnHistogramARB(enum target, boolean reset, enum format, 4935bd8deadSopenharmony_ci enum type, sizei bufSize, void* values); 4945bd8deadSopenharmony_ci 4955bd8deadSopenharmony_ci ... component values are simply clamped to the range of the target 4965bd8deadSopenharmony_ci data type. GetnHistogramARB does not write more than <bufSize> 4975bd8deadSopenharmony_ci bytes into <values>. 4985bd8deadSopenharmony_ci 4995bd8deadSopenharmony_ci Modify Section 6.1.10 "Minmax Query" 5005bd8deadSopenharmony_ci 5015bd8deadSopenharmony_ci The current contents of the minmax table are queried using 5025bd8deadSopenharmony_ci 5035bd8deadSopenharmony_ci void GetMinmax(enum target, boolean reset, enum format, 5045bd8deadSopenharmony_ci enum type, void* values ); 5055bd8deadSopenharmony_ci void GetnMinmaxARB(enum target, boolean reset, enum format, 5065bd8deadSopenharmony_ci enum type, sizei bufSize, void* values); 5075bd8deadSopenharmony_ci 5085bd8deadSopenharmony_ci ... A one-dimensional image of width 2 is returned to pixel pack 5095bd8deadSopenharmony_ci buffer or client memory starting at <values>. GetnMinmaxARB does 5105bd8deadSopenharmony_ci not write more than <bufSize> bytes into <values>. 5115bd8deadSopenharmony_ci 5125bd8deadSopenharmony_ci Modify Section 6.1.11 "Pointer and String Queries" 5135bd8deadSopenharmony_ci 5145bd8deadSopenharmony_ci Add to the paragraph describing the context profile mask and flags 5155bd8deadSopenharmony_ci (preceding the description of GetStringi) on page 379: 5165bd8deadSopenharmony_ci 5175bd8deadSopenharmony_ci "If CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB is set in CONTEXT_FLAGS, 5185bd8deadSopenharmony_ci then robust buffer access will be enabled for drawing commands 5195bd8deadSopenharmony_ci using vertex arrays, as described in section 2.8." 5205bd8deadSopenharmony_ci 5215bd8deadSopenharmony_ci Modify Section 6.1.16 "Shader and Program Queries" 5225bd8deadSopenharmony_ci 5235bd8deadSopenharmony_ci The commands 5245bd8deadSopenharmony_ci 5255bd8deadSopenharmony_ci void GetUniformfv(uint program, int location, float *params); 5265bd8deadSopenharmony_ci void GetnUniformfvARB(uint program, int location, sizei bufSize, 5275bd8deadSopenharmony_ci float *params); 5285bd8deadSopenharmony_ci void GetUniformiv(uint program, int location, int *params); 5295bd8deadSopenharmony_ci void GetnUniformivARB(uint program, int location, sizei bufSize, 5305bd8deadSopenharmony_ci int *params); 5315bd8deadSopenharmony_ci void GetUniformuiv(uint program, int location, uint *params); 5325bd8deadSopenharmony_ci void GetnUniformuivARB(uint program, int location, sizei bufSize, 5335bd8deadSopenharmony_ci uint *params); 5345bd8deadSopenharmony_ci void GetUniformdv(uint program, int location, double *params); 5355bd8deadSopenharmony_ci void GetnUniformdvARB(uint program, int location, sizei bufSize, 5365bd8deadSopenharmony_ci double *params); 5375bd8deadSopenharmony_ci 5385bd8deadSopenharmony_ci return the value or values of the uniform at location location of 5395bd8deadSopenharmony_ci the default uniform block for program object program in the array 5405bd8deadSopenharmony_ci params. GetnUniformfvARB, GetnUniformivARB, GetnUniformuivARB and 5415bd8deadSopenharmony_ci GetnUniformdvARB do not write any data to <params> if <bufSize> is 5425bd8deadSopenharmony_ci less than the size of the requested data. 5435bd8deadSopenharmony_ci ... 5445bd8deadSopenharmony_ci 5455bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications 5465bd8deadSopenharmony_ci 5475bd8deadSopenharmony_ci None 5485bd8deadSopenharmony_ci 5495bd8deadSopenharmony_ciAdditions to The OpenGL Shading Language Specification, Version 1.50.11 5505bd8deadSopenharmony_ci 5515bd8deadSopenharmony_ci Change the first paragraph of section 4.1.9 "Arrays" 5525bd8deadSopenharmony_ci 5535bd8deadSopenharmony_ci ... Undefined behavior results from indexing an array with a 5545bd8deadSopenharmony_ci non-constant expression that's greater than or equal to the array's 5555bd8deadSopenharmony_ci size or less than 0. If robust buffer access is enabled via the 5565bd8deadSopenharmony_ci OpenGL API, such indexing must not result in abnormal program 5575bd8deadSopenharmony_ci termination. The results are still undefined, but implementations 5585bd8deadSopenharmony_ci are encouraged to produce zero values for such accesses. Only 5595bd8deadSopenharmony_ci one-dimensional arrays may be declared. ... 5605bd8deadSopenharmony_ci 5615bd8deadSopenharmony_ciGLX Protocol 5625bd8deadSopenharmony_ci 5635bd8deadSopenharmony_ci XXX 5645bd8deadSopenharmony_ci 5655bd8deadSopenharmony_ciInteractions with GLX_ARB_create_context_robustness 5665bd8deadSopenharmony_ci 5675bd8deadSopenharmony_ci If the GLX window-system binding API is used to create a context, 5685bd8deadSopenharmony_ci the GLX_ARB_create_context_robustness extension is supported, and 5695bd8deadSopenharmony_ci the bit GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB is set in 5705bd8deadSopenharmony_ci GLX_CONTEXT_FLAGS when glXCreateContextAttribsARB is called, the 5715bd8deadSopenharmony_ci resulting context will perform robust buffer access as described 5725bd8deadSopenharmony_ci above in section 2.8, and the CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB bit 5735bd8deadSopenharmony_ci will be set in CONTEXT_FLAGS as described above in section 6.1.11. 5745bd8deadSopenharmony_ci 5755bd8deadSopenharmony_ci If the GLX window-system binding API is used to create a context and 5765bd8deadSopenharmony_ci the GLX_ARB_create_context_robustness extension is supported, then 5775bd8deadSopenharmony_ci the value of attribute GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 5785bd8deadSopenharmony_ci determines the reset notification behavior and the value of 5795bd8deadSopenharmony_ci RESET_NOTIFICATION_STRATEGY_ARB, as described in section 2.6. 5805bd8deadSopenharmony_ci 5815bd8deadSopenharmony_ciInteractions with WGL_ARB_create_context_robustness 5825bd8deadSopenharmony_ci 5835bd8deadSopenharmony_ci If the WGL window-system binding API is used to create a context, 5845bd8deadSopenharmony_ci the WGL_ARB_create_context_robustness extension is supported, and 5855bd8deadSopenharmony_ci the bit WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB is set in 5865bd8deadSopenharmony_ci WGL_CONTEXT_FLAGS when wglCreateContextAttribsARB is called, the 5875bd8deadSopenharmony_ci resulting context will perform robust buffer access as described 5885bd8deadSopenharmony_ci above in section 2.8, and the CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB bit 5895bd8deadSopenharmony_ci will be set in CONTEXT_FLAGS as described above in section 6.1.11. 5905bd8deadSopenharmony_ci 5915bd8deadSopenharmony_ci If the WGL window-system binding API is used to create a context and 5925bd8deadSopenharmony_ci the WGL_ARB_create_context_robustness extension is supported, then 5935bd8deadSopenharmony_ci the value of attribute WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 5945bd8deadSopenharmony_ci determines the reset notification behavior and the value of 5955bd8deadSopenharmony_ci RESET_NOTIFICATION_STRATEGY_ARB, as described in section 2.6. 5965bd8deadSopenharmony_ci 5975bd8deadSopenharmony_ciErrors 5985bd8deadSopenharmony_ci 5995bd8deadSopenharmony_ci GetnMapdvARB, GetnMapfvARB, GetnMapivARB, GetnPixelMapfvARB, 6005bd8deadSopenharmony_ci GetnPixelMapuivARB, GetnPixelMapusvARB, GetnPolygonStippleARB, 6015bd8deadSopenharmony_ci GetnTexImageARB, ReadnPixelsARB, GetnColorTableARB, 6025bd8deadSopenharmony_ci GetnConvolutionFilterARB, GetnSeparableFilterARB, GetnHistogramARB, 6035bd8deadSopenharmony_ci GetnMinmaxARB, GetnCompressedTexImageARB, GetnUniformfvARB, 6045bd8deadSopenharmony_ci GetnUniformivARB, GetnUniformuivARB and GetnUniformdvARB share all the 6055bd8deadSopenharmony_ci errors of their unsized buffer query counterparts with the addition 6065bd8deadSopenharmony_ci that INVALID_OPERATION is generated if the buffer size required to 6075bd8deadSopenharmony_ci fill all the requested data is greater than <bufSize>. 6085bd8deadSopenharmony_ci 6095bd8deadSopenharmony_ciNew State 6105bd8deadSopenharmony_ci 6115bd8deadSopenharmony_ci Get Value Type Get Command Value Description Sec Attribute 6125bd8deadSopenharmony_ci -------------------------- ---- ----------- ------------ --------------------------- ------ --------- 6135bd8deadSopenharmony_ci RESET_NOTIFICATION_STRATEGY_ARB Z_2 GetIntegerv See sec. 2.6 Reset notification behavior 2.6 - 6145bd8deadSopenharmony_ci 6155bd8deadSopenharmony_ci 6165bd8deadSopenharmony_ciNew Implementation Dependent State 6175bd8deadSopenharmony_ci 6185bd8deadSopenharmony_ci None 6195bd8deadSopenharmony_ci 6205bd8deadSopenharmony_ciDependencies on the ARB_imaging subset 6215bd8deadSopenharmony_ci 6225bd8deadSopenharmony_ci If the ARB_imaging subset of the OpenGL 3.2 Compatibility Profile is not 6235bd8deadSopenharmony_ci supported, the commands GetnColorTableARB, GetnConvolutionFilterARB, 6245bd8deadSopenharmony_ci GetnHistogramARB, GetnMap*ARB, GetnMinmaxARB, GetnPixelMap*ARB, and 6255bd8deadSopenharmony_ci GetnSeparableFilterARB defined by this extension are not supported, and 6265bd8deadSopenharmony_ci all references to them should be ignored. 6275bd8deadSopenharmony_ci 6285bd8deadSopenharmony_ciDependencies on OpenGL 3.2 (Core Profile) 6295bd8deadSopenharmony_ci 6305bd8deadSopenharmony_ci If only the core profile of OpenGL 3.2 is supported, the commands 6315bd8deadSopenharmony_ci GetnColorTableARB, GetnConvolutionFilterARB, GetnHistogramARB, 6325bd8deadSopenharmony_ci GetnMap*ARB, GetnMinmaxARB, GetnPixelMap*ARB, GetnPolygonStippleARB, and 6335bd8deadSopenharmony_ci GetnSeparableFilterARB defined by this extension are not supported, and 6345bd8deadSopenharmony_ci all references to them should be ignored. 6355bd8deadSopenharmony_ci 6365bd8deadSopenharmony_ciIssues 6375bd8deadSopenharmony_ci 6385bd8deadSopenharmony_ci 1. Does robust buffer access affect vertex pulling from vertex 6395bd8deadSopenharmony_ci buffer objects, client vertex arrays, or both? 6405bd8deadSopenharmony_ci 6415bd8deadSopenharmony_ci RESOLVED: Only vertex buffer objects. 6425bd8deadSopenharmony_ci 6435bd8deadSopenharmony_ci DirectX 10-era GPUs are guaranteed to provide guarantees 6445bd8deadSopenharmony_ci consistent with those required by robust buffer access. 6455bd8deadSopenharmony_ci 6465bd8deadSopenharmony_ci Client memory vertex arrays should not be expected to be used 6475bd8deadSopenharmony_ci directly in situations requiring robust operation. 6485bd8deadSopenharmony_ci 6495bd8deadSopenharmony_ci Historically the original EXT_vertex_array extension provided a 6505bd8deadSopenharmony_ci "GLsizei count" parameter to indicate how long vertex arrays 6515bd8deadSopenharmony_ci should be. This proved to be unworkable in practice because 6525bd8deadSopenharmony_ci applications typically found it too difficult to properly compute 6535bd8deadSopenharmony_ci the count; instead a very large integer was passed, obviating any 6545bd8deadSopenharmony_ci practical use for the parameter. When vertex arrays were added 6555bd8deadSopenharmony_ci to core OpenGL in version 1.1, the "GLsizei count" parameter 6565bd8deadSopenharmony_ci was eliminated for this reason. 6575bd8deadSopenharmony_ci 6585bd8deadSopenharmony_ci There are other problems too. Clever applications using client 6595bd8deadSopenharmony_ci memory vertex arrays can specify the base pointer to be NULL 6605bd8deadSopenharmony_ci (address 0) and then use indices that essentially correspond 6615bd8deadSopenharmony_ci to pointers divided by the stride. There's also no guarantee a 6625bd8deadSopenharmony_ci pointer itself has a contiguous range of memory allocate within 6635bd8deadSopenharmony_ci a given range. 6645bd8deadSopenharmony_ci 6655bd8deadSopenharmony_ci Moreover client memory vertex arrays are no longer a performance 6665bd8deadSopenharmony_ci path so they simply are not particularly interesting to address. 6675bd8deadSopenharmony_ci 6685bd8deadSopenharmony_ci The result is there's really no practical way to bound client 6695bd8deadSopenharmony_ci vertex array access in a way that's likely to be practically 6705bd8deadSopenharmony_ci useful. 6715bd8deadSopenharmony_ci 6725bd8deadSopenharmony_ci Vertex buffer objects do not have this same problem because 6735bd8deadSopenharmony_ci buffer objects have a bounded index-able range. 6745bd8deadSopenharmony_ci 6755bd8deadSopenharmony_ci Robust applications should simply use vertex buffer objects for 6765bd8deadSopenharmony_ci robust vertex pulling (ignoring client memory vertex arrays for 6775bd8deadSopenharmony_ci an rendering that must be done robustly). 6785bd8deadSopenharmony_ci 6795bd8deadSopenharmony_ci 2. If robust buffer access is supported and a vertex index is large 6805bd8deadSopenharmony_ci enough to fetch beyond the size of an enabled vertex buffer 6815bd8deadSopenharmony_ci object, what happens? 6825bd8deadSopenharmony_ci 6835bd8deadSopenharmony_ci RESOLVED: Undefined values are read for the varying (non-fixed) 6845bd8deadSopenharmony_ci components. 6855bd8deadSopenharmony_ci 6865bd8deadSopenharmony_ci A fixed-component would be a component such as the W component 6875bd8deadSopenharmony_ci when only a 2- or 3-component position is fetched. In this case, 6885bd8deadSopenharmony_ci the W component is fixed as 1.0 and that will be the case still 6895bd8deadSopenharmony_ci if the index would have resulted in an out-of-bounds fetch. 6905bd8deadSopenharmony_ci 6915bd8deadSopenharmony_ci Undefined results are required for implementations that can't 6925bd8deadSopenharmony_ci guarantee any particular value. It make testing this behavior 6935bd8deadSopenharmony_ci difficult, but it's required for certain implementations. 6945bd8deadSopenharmony_ci 6955bd8deadSopenharmony_ci 3. If robust buffer access is supported and an element array buffer 6965bd8deadSopenharmony_ci is accessed beyond the size of the element array buffer so 6975bd8deadSopenharmony_ci there's not a valide index, what happens? 6985bd8deadSopenharmony_ci 6995bd8deadSopenharmony_ci RESOLVED: The value of the index is undefined. 7005bd8deadSopenharmony_ci 7015bd8deadSopenharmony_ci Undefined results are required for implementations that can't 7025bd8deadSopenharmony_ci guarantee any particular value. It make testing this behavior 7035bd8deadSopenharmony_ci difficult, but it's required for certain implementations. 7045bd8deadSopenharmony_ci 7055bd8deadSopenharmony_ci 4. What query commands actually need a new "GLsizei bufSize" 7065bd8deadSopenharmony_ci parameter? 7075bd8deadSopenharmony_ci 7085bd8deadSopenharmony_ci RESOLVED: If the number of bytes returned by the query is not 7095bd8deadSopenharmony_ci *completely* determined by the parameters to the function (in 7105bd8deadSopenharmony_ci the absence of errors) and not already bounded by an existing 7115bd8deadSopenharmony_ci GLsizei buffer size parameter, a new query is needed. 7125bd8deadSopenharmony_ci 7135bd8deadSopenharmony_ci This means commands such as glGetClipPlane, glGetIntegerv, 7145bd8deadSopenharmony_ci etc. do NOT need new versions. 7155bd8deadSopenharmony_ci 7165bd8deadSopenharmony_ci This means queries that depend on pixel store pack state need 7175bd8deadSopenharmony_ci new queries. Examples: glReadPixels, glGetPolygonStipple, 7185bd8deadSopenharmony_ci glGetTexImage, glGetConvolutionFilter, etc. 7195bd8deadSopenharmony_ci 7205bd8deadSopenharmony_ci This means queries that query an object's state which can 7215bd8deadSopenharmony_ci vary in size need new queries. Examples: glGetTexImage, 7225bd8deadSopenharmony_ci glGetCompressedTexImage, glGetUniformfv, glGetUniformuiv, etc. 7235bd8deadSopenharmony_ci 7245bd8deadSopenharmony_ci This means queries that query context state which can vary 7255bd8deadSopenharmony_ci depending on other context state variables need new queries. 7265bd8deadSopenharmony_ci Examples: glGetHistogram, glGetPixelMapfv, glGetColorTable, etc. 7275bd8deadSopenharmony_ci 7285bd8deadSopenharmony_ci If the command already has a parameter that limits the amount 7295bd8deadSopenharmony_ci of data returned through a pointer, no new command is needed. 7305bd8deadSopenharmony_ci Examples: glGetActiveAttrib, glGetActiveUniform, glGetInfoLog, 7315bd8deadSopenharmony_ci glGetAttachedShaders, glGetAttachedObjects, glGetShaderSource, 7325bd8deadSopenharmony_ci glGetActiveAttrib, glGetBufferSubData, glGen*, etc. 7335bd8deadSopenharmony_ci 7345bd8deadSopenharmony_ci 5. If a new query with an explicit buffer size is called and the buffer 7355bd8deadSopenharmony_ci size is not sufficient to return the data, what happens? 7365bd8deadSopenharmony_ci 7375bd8deadSopenharmony_ci RESOLVED: Return an INVALID_OPERATION error and ignore the query. 7385bd8deadSopenharmony_ci 7395bd8deadSopenharmony_ci Some consideration was given to clearing the entire buffer range. 7405bd8deadSopenharmony_ci This might arguably avoid applications subsequently reading from 7415bd8deadSopenharmony_ci uninitialized buffers. 7425bd8deadSopenharmony_ci 7435bd8deadSopenharmony_ci This was rejected for several reasons: 7445bd8deadSopenharmony_ci 7455bd8deadSopenharmony_ci 1) Doing something when there's an error is inconsistent with 7465bd8deadSopenharmony_ci the rest of OpenGL's operation. 7475bd8deadSopenharmony_ci 7485bd8deadSopenharmony_ci 2) If the buffer is left untouched, the application can initialize 7495bd8deadSopenharmony_ci the buffer to some bogus value (NaN or an invalid negative 7505bd8deadSopenharmony_ci value) and notice that the buffer was left unmodified after 7515bd8deadSopenharmony_ci the query without the expense of checking for OpenGL errors. 7525bd8deadSopenharmony_ci 7535bd8deadSopenharmony_ci 3) Many commands return information through packing pixels based 7545bd8deadSopenharmony_ci on the pixel store state. The pixel store state allows skipping 7555bd8deadSopenharmony_ci over some data (GL_SKIP_PIXELS, GL_SKIP_ROWS, etc.) so zero'ing 7565bd8deadSopenharmony_ci memory for the entire buffer isn't a good idea. 7575bd8deadSopenharmony_ci 7585bd8deadSopenharmony_ci 7595bd8deadSopenharmony_ci 6. Can you explain why various glGet queries do NOT have new 7605bd8deadSopenharmony_ci "sized" versions? 7615bd8deadSopenharmony_ci 7625bd8deadSopenharmony_ci RESOLVED: 7635bd8deadSopenharmony_ci 7645bd8deadSopenharmony_ci Queries always returning a constant number of bytes: 7655bd8deadSopenharmony_ci 7665bd8deadSopenharmony_ci OpenGL 1.0 7675bd8deadSopenharmony_ci glGetClipPlane 7685bd8deadSopenharmony_ci - always 4*sizeof(GLdouble) 7695bd8deadSopenharmony_ci OpenGL 2.0 7705bd8deadSopenharmony_ci glGetVertexAttribdv 7715bd8deadSopenharmony_ci - always 4*sizeof(GLdouble) 7725bd8deadSopenharmony_ci glGetVertexAttribfv 7735bd8deadSopenharmony_ci - always 4*sizeof(GLfloat) 7745bd8deadSopenharmony_ci glGetVertexAttribiv 7755bd8deadSopenharmony_ci - always 4*sizeof(GLint) 7765bd8deadSopenharmony_ci 7775bd8deadSopenharmony_ci Queries with an effective buffer size parameter already: 7785bd8deadSopenharmony_ci 7795bd8deadSopenharmony_ci OpenGL 1.5 7805bd8deadSopenharmony_ci glGetBufferSubData 7815bd8deadSopenharmony_ci - returns size (parameter) bytes 7825bd8deadSopenharmony_ci 7835bd8deadSopenharmony_ci Queries with an effective buffer bound (no more bytes than) 7845bd8deadSopenharmony_ci parameter already: 7855bd8deadSopenharmony_ci 7865bd8deadSopenharmony_ci OpenGL 2.0 7875bd8deadSopenharmony_ci glGetAttachedShaders 7885bd8deadSopenharmony_ci - returns no more than sizeof(GLuint)*maxCount 7895bd8deadSopenharmony_ci to count and no more than sizeof(GLuint)*maxCount 7905bd8deadSopenharmony_ci to shaders 7915bd8deadSopenharmony_ci glGetShaderInfoLog 7925bd8deadSopenharmony_ci glGetProgramInfoLog 7935bd8deadSopenharmony_ci glGetShaderSource 7945bd8deadSopenharmony_ci glGetActiveAttrib 7955bd8deadSopenharmony_ci glGetActiveUniform 7965bd8deadSopenharmony_ci - returns no more than bufSize bytes 7975bd8deadSopenharmony_ci OpenGL 3.0 7985bd8deadSopenharmony_ci glGetTransformFeedbackVarying 7995bd8deadSopenharmony_ci - returns no more than bufSize bytes 8005bd8deadSopenharmony_ci OpenGL 3.2 8015bd8deadSopenharmony_ci glGetUniformIndices 8025bd8deadSopenharmony_ci - returns sizeof(GLuint)*uniformCount bytes 8035bd8deadSopenharmony_ci glGetActiveUniformName 8045bd8deadSopenharmony_ci glGetActiveUniformBlockName 8055bd8deadSopenharmony_ci - returns no more than bufSize bytes 8065bd8deadSopenharmony_ci 8075bd8deadSopenharmony_ci Query's some function of enumeration parameters fully determine 8085bd8deadSopenharmony_ci the number bytes returned: 8095bd8deadSopenharmony_ci 8105bd8deadSopenharmony_ci OpenGL 1.0 8115bd8deadSopenharmony_ci glGetIntegerv 8125bd8deadSopenharmony_ci glGetFloatv 8135bd8deadSopenharmony_ci glGetDoublev 8145bd8deadSopenharmony_ci glGetBooleanv 8155bd8deadSopenharmony_ci glGetLightiv 8165bd8deadSopenharmony_ci glGetLightfv 8175bd8deadSopenharmony_ci glGetMaterialfv 8185bd8deadSopenharmony_ci glGetMaterialiv 8195bd8deadSopenharmony_ci glGetTexEnvfv 8205bd8deadSopenharmony_ci glGetTexEnviv 8215bd8deadSopenharmony_ci glGetTexGendv 8225bd8deadSopenharmony_ci glGetTexGenfv 8235bd8deadSopenharmony_ci glGetTexGeniv 8245bd8deadSopenharmony_ci glGetTexParameterfv 8255bd8deadSopenharmony_ci glGetTexParameteriv 8265bd8deadSopenharmony_ci glGetTexLevelParameterfv 8275bd8deadSopenharmony_ci glGetTexLevelParameteriv 8285bd8deadSopenharmony_ci - fully determined by pname parameter 8295bd8deadSopenharmony_ci OpenGL 1.1 8305bd8deadSopenharmony_ci glGetPointerv 8315bd8deadSopenharmony_ci - fully determined by pname parameter 8325bd8deadSopenharmony_ci glGenTextures 8335bd8deadSopenharmony_ci - sizeof(GLuint)*n 8345bd8deadSopenharmony_ci ARB_imaging 8355bd8deadSopenharmony_ci glGetColorTableParameterfv 8365bd8deadSopenharmony_ci glGetColorTableParameteriv 8375bd8deadSopenharmony_ci glGetConvolutionParameterfv 8385bd8deadSopenharmony_ci glGetConvolutionParameteriv 8395bd8deadSopenharmony_ci glGetHistogramParameterfv 8405bd8deadSopenharmony_ci glGetHistogramParameteriv 8415bd8deadSopenharmony_ci glGetMinmaxParameterfv 8425bd8deadSopenharmony_ci glGetMinmaxParameteriv 8435bd8deadSopenharmony_ci - fully determined by pname parameter 8445bd8deadSopenharmony_ci OpenGL 1.5 8455bd8deadSopenharmony_ci glGenBuffers 8465bd8deadSopenharmony_ci glGenQueries 8475bd8deadSopenharmony_ci - sizeof(GLuint)*n 8485bd8deadSopenharmony_ci glGetBufferParameteriv 8495bd8deadSopenharmony_ci glGetQueryObjectiv 8505bd8deadSopenharmony_ci glGetQueryObjectfv 8515bd8deadSopenharmony_ci glGetQueryiv 8525bd8deadSopenharmony_ci - fully determined by pname parameter 8535bd8deadSopenharmony_ci OpenGL 2.0 8545bd8deadSopenharmony_ci glGetVertexAttribPointerv 8555bd8deadSopenharmony_ci glGetShaderiv 8565bd8deadSopenharmony_ci glGetProgramiv 8575bd8deadSopenharmony_ci - fully determined by pname parameter 8585bd8deadSopenharmony_ci OpenGL 3.0 8595bd8deadSopenharmony_ci glGenRenderbuffers 8605bd8deadSopenharmony_ci glGenFramebuffers 8615bd8deadSopenharmony_ci glGenVertexArrays 8625bd8deadSopenharmony_ci - sizeof(GLuint)*n 8635bd8deadSopenharmony_ci OpenGL 3.2 8645bd8deadSopenharmony_ci glGetActiveUniformBlockiv 8655bd8deadSopenharmony_ci - function of pname and uniformCount 8665bd8deadSopenharmony_ci glGetActiveUniformsiv 8675bd8deadSopenharmony_ci - function of pname 8685bd8deadSopenharmony_ci 8695bd8deadSopenharmony_ci NV_vertex_program 8705bd8deadSopenharmony_ci glGenProgramsNV 8715bd8deadSopenharmony_ci - sizeof(GLuint)*n 8725bd8deadSopenharmony_ci ARB_vertex_program 8735bd8deadSopenharmony_ci glGenProgramsARB 8745bd8deadSopenharmony_ci - sizeof(GLuint)*n 8755bd8deadSopenharmony_ci 8765bd8deadSopenharmony_ci 7. What can cause a graphics reset? 8775bd8deadSopenharmony_ci 8785bd8deadSopenharmony_ci Either user or implementor errors may result in a graphics reset. 8795bd8deadSopenharmony_ci If the application attempts to perform a rendering that takes too long 8805bd8deadSopenharmony_ci whether due to an infinite loop in a shader or even just a rendering 8815bd8deadSopenharmony_ci operation that takes too long on the given hardware. Implementation 8825bd8deadSopenharmony_ci errors may produce badly formed hardware commands. Memory access errors 8835bd8deadSopenharmony_ci may result from user or implementor mistakes. Any of these events may 8845bd8deadSopenharmony_ci result in a graphics reset event that will be detectable by the mechanism 8855bd8deadSopenharmony_ci described in this extension. 8865bd8deadSopenharmony_ci 8875bd8deadSopenharmony_ci 8. How should the application react to a reset context event? 8885bd8deadSopenharmony_ci 8895bd8deadSopenharmony_ci RESOLVED: For this extension, the application is expected to query 8905bd8deadSopenharmony_ci the reset status until NO_ERROR is returned. If a reset is encountered, 8915bd8deadSopenharmony_ci at least one *RESET* status will be returned. Once NO_ERROR is 8925bd8deadSopenharmony_ci encountered, the application can safely destroy the old context and 8935bd8deadSopenharmony_ci create a new one. 8945bd8deadSopenharmony_ci 8955bd8deadSopenharmony_ci After a reset event, apps should not use a context for any purpose 8965bd8deadSopenharmony_ci other than determining its reset status, and then destroying it. If a 8975bd8deadSopenharmony_ci context receives a reset event, all other contexts in its share group 8985bd8deadSopenharmony_ci will also receive reset events, and should be destroyed and 8995bd8deadSopenharmony_ci recreated. 9005bd8deadSopenharmony_ci 9015bd8deadSopenharmony_ci Apps should be cautious in interpreting the GUILTY and INNOCENT reset 9025bd8deadSopenharmony_ci statuses. These are guidelines to the immediate cause of a reset, but 9035bd8deadSopenharmony_ci not guarantees of the ultimate cause. 9045bd8deadSopenharmony_ci 9055bd8deadSopenharmony_ci 9. If a graphics reset occurs in a shared context, what happens in 9065bd8deadSopenharmony_ci shared contexts? 9075bd8deadSopenharmony_ci 9085bd8deadSopenharmony_ci RESOLVED: A reset in one context will result in a reset in all other 9095bd8deadSopenharmony_ci contexts in its share group. This is mandated, not recommended 9105bd8deadSopenharmony_ci behavior as of revision 14. 9115bd8deadSopenharmony_ci 9125bd8deadSopenharmony_ci 10. How can an application query for robust buffer access support, 9135bd8deadSopenharmony_ci since this is now determined at context creation time? 9145bd8deadSopenharmony_ci 9155bd8deadSopenharmony_ci RESOLVED. The application can query the CONTEXT_FLAGS bitfield 9165bd8deadSopenharmony_ci using GetIntegerv and check for the presence of CONTEXT_FLAG_- 9175bd8deadSopenharmony_ci ROBUST_ACCESS_BIT_ARB. 9185bd8deadSopenharmony_ci 9195bd8deadSopenharmony_ci 11. How is the reset notification behavior controlled? 9205bd8deadSopenharmony_ci 9215bd8deadSopenharmony_ci RESOLVED: Reset notification behavior is determined at context 9225bd8deadSopenharmony_ci creation time using GLX/WGL/etc. mechanisms. In order that shared 9235bd8deadSopenharmony_ci objects be handled predictably, a context cannot share with 9245bd8deadSopenharmony_ci another context unless both have the same reset notification 9255bd8deadSopenharmony_ci behavior. 9265bd8deadSopenharmony_ci 9275bd8deadSopenharmony_ciRevision History 9285bd8deadSopenharmony_ci 9295bd8deadSopenharmony_ci Rev. Date Author Changes 9305bd8deadSopenharmony_ci ---- ------------ --------- -------------------------------------------- 9315bd8deadSopenharmony_ci 18 25 Jun 2014 Jon Leech Fix type of <params> in Get*Uniformdv. 9325bd8deadSopenharmony_ci 17 17 Sep 2012 Jon Leech Clarify that GetnUniform* does not write 9335bd8deadSopenharmony_ci any data if bufSize is less than required 9345bd8deadSopenharmony_ci (Bug 8739). 9355bd8deadSopenharmony_ci 16 25 Jun 2012 Jon Leech Add interactions with ARB_imaging and 9365bd8deadSopenharmony_ci core profile. 9375bd8deadSopenharmony_ci 15 10 Apr 2012 Jon Leech Fix description of INVALID_OPERATION 9385bd8deadSopenharmony_ci error to be when required data size is 9395bd8deadSopenharmony_ci *greater* than bufSize, not *less*. 9405bd8deadSopenharmony_ci 14 22 Jul 2010 Jon Leech Require resets to be delivered to all 9415bd8deadSopenharmony_ci contexts which share objects. Expand on 9425bd8deadSopenharmony_ci recommended recovery behavior in Issues 8 9435bd8deadSopenharmony_ci and 9. Assign enum for new token. 9445bd8deadSopenharmony_ci 13 21 Jul 2010 Jon Leech Remove RequestGraphicsResetNotificationARB 9455bd8deadSopenharmony_ci and determine graphics reset notification 9465bd8deadSopenharmony_ci behavior at context creation time in 9475bd8deadSopenharmony_ci separate GLX/WGL extensions. 9485bd8deadSopenharmony_ci 12 19 Jul 2010 pdaniell Added missing GetnUniformdARB. Add additional 9495bd8deadSopenharmony_ci language to the "Graphics Reset Recovery" 9505bd8deadSopenharmony_ci section to clarify objects of shared contexts. 9515bd8deadSopenharmony_ci Revert revision #7 changes to restore the 9525bd8deadSopenharmony_ci old "bufSize" behavior and remove the new 9535bd8deadSopenharmony_ci "length" parameter, both of which proved 9545bd8deadSopenharmony_ci problematic with implementation. Truncating 9555bd8deadSopenharmony_ci the output buffer data written to "bufSize" 9565bd8deadSopenharmony_ci length is hard to implement efficiently in 9575bd8deadSopenharmony_ci software and impossible with some hardware 9585bd8deadSopenharmony_ci paths. Also the additional "length" parameter 9595bd8deadSopenharmony_ci caused PBO based async calls to become sync, 9605bd8deadSopenharmony_ci which is undesirable. 9615bd8deadSopenharmony_ci 11 07 Jun 2010 groth Clarify PBO errors/sized queries interaction 9625bd8deadSopenharmony_ci Make consistent the app response to a reset 9635bd8deadSopenharmony_ci Resolve issue 10 per revision 10 changes. 9645bd8deadSopenharmony_ci 10 07 Jun 2010 Jon Leech Add a bit to the context flags query 9655bd8deadSopenharmony_ci indicating whether or not robust buffer 9665bd8deadSopenharmony_ci access was enabled at context creation. 9675bd8deadSopenharmony_ci 9 06 Jun 2010 Jon Leech Note interactions with context creation 9685bd8deadSopenharmony_ci extensions enabling robust buffer 9695bd8deadSopenharmony_ci access, and add issue 10 regarding 9705bd8deadSopenharmony_ci queries for robust buffer access. 9715bd8deadSopenharmony_ci Remove dangling references to old 9725bd8deadSopenharmony_ci ROBUST_BUFFER_ACCESS token. 9735bd8deadSopenharmony_ci 8 21 May 2010 groth bmerry comment response 9745bd8deadSopenharmony_ci Restore ARB suffixes in light of rejection from core 9755bd8deadSopenharmony_ci 7 20 May 2010 groth Allow bounds checking using context creation flag 9765bd8deadSopenharmony_ci Fix issues. 9775bd8deadSopenharmony_ci Revise bounded queries to take and return lengths. 9785bd8deadSopenharmony_ci Add query for current reset strategy. 9795bd8deadSopenharmony_ci 72 column resizing. 9805bd8deadSopenharmony_ci 6 06 May 2010 groth ARBify, catch a few sized gets that hadn't 9815bd8deadSopenharmony_ci been named correctly. 9825bd8deadSopenharmony_ci 5 05 May 2010 groth Add clarification regarding recovered reset 9835bd8deadSopenharmony_ci detection. 9845bd8deadSopenharmony_ci 4 02 May 2010 groth Remove references to deleted functionality. 9855bd8deadSopenharmony_ci Add issue addressing differences with 9865bd8deadSopenharmony_ci 3 15 Apr 2010 groth Describe GLSL array behavior when using 9875bd8deadSopenharmony_ci robust arrays. 9885bd8deadSopenharmony_ci Add issue explaining graphics reset causes. 9895bd8deadSopenharmony_ci 2 22 Mar 2010 groth Flesh out missing secions. Remove vestiges of 9905bd8deadSopenharmony_ci specified limits API. Rename sized queries. 9915bd8deadSopenharmony_ci Various grammar corrections and clarifications. 9925bd8deadSopenharmony_ci 1 19 Jan 2010 mjk Initial version 993