15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci ATI_map_object_buffer 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_ATI_map_object_buffer 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContact 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Rick Hammerstone, AMD (rick.hammerstone 'at' amd.com) 125bd8deadSopenharmony_ci 135bd8deadSopenharmony_ciStatus 145bd8deadSopenharmony_ci 155bd8deadSopenharmony_ci Complete. 165bd8deadSopenharmony_ci 175bd8deadSopenharmony_ciVersion 185bd8deadSopenharmony_ci 195bd8deadSopenharmony_ci 0.3 - 11/04/06 205bd8deadSopenharmony_ci Updated contact info after ATI/AMD merger. 215bd8deadSopenharmony_ci 225bd8deadSopenharmony_ci 0.2 - 01/15/01 235bd8deadSopenharmony_ci Modified map call to return a pointer and take a single <buffer> 245bd8deadSopenharmony_ci argument. Cleaned up spec. 255bd8deadSopenharmony_ci 265bd8deadSopenharmony_ci 0.1 - 11/26/01 275bd8deadSopenharmony_ci Initial revision 285bd8deadSopenharmony_ci 295bd8deadSopenharmony_ciNumber 305bd8deadSopenharmony_ci 315bd8deadSopenharmony_ci 288 325bd8deadSopenharmony_ci 335bd8deadSopenharmony_ciDependencies 345bd8deadSopenharmony_ci 355bd8deadSopenharmony_ci This extension is written against the OpenGL 1.2.1 Specification. 365bd8deadSopenharmony_ci OpenGL 1.1 is required. ATI_vertex_array_object is required by 375bd8deadSopenharmony_ci this extension. 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ci 405bd8deadSopenharmony_ciOverview 415bd8deadSopenharmony_ci 425bd8deadSopenharmony_ci This extension provides a mechanism for an application to obtain 435bd8deadSopenharmony_ci the virtual address of an object buffer. This allows the 445bd8deadSopenharmony_ci application to directly update the contents of an object buffer 455bd8deadSopenharmony_ci and avoid any intermediate copies. 465bd8deadSopenharmony_ci 475bd8deadSopenharmony_ci 485bd8deadSopenharmony_ciIssues 495bd8deadSopenharmony_ci 505bd8deadSopenharmony_ci Should we use Lock and Unlock terminology? 515bd8deadSopenharmony_ci 525bd8deadSopenharmony_ci UNRESOLVED: This could be confusing. D3D uses "Lock" to mean 535bd8deadSopenharmony_ci that something is available for the application to update and 545bd8deadSopenharmony_ci won't be changed by the driver. However, in the compiled 555bd8deadSopenharmony_ci vertex array extension, "Lock" is used to mean that the 565bd8deadSopenharmony_ci application will not be changing the contents of a vertex 575bd8deadSopenharmony_ci buffer. 585bd8deadSopenharmony_ci 595bd8deadSopenharmony_ci 605bd8deadSopenharmony_ciNew Procedures and Functions 615bd8deadSopenharmony_ci 625bd8deadSopenharmony_ci void *MapObjectBufferATI(uint buffer) 635bd8deadSopenharmony_ci 645bd8deadSopenharmony_ci void UnmapObjectBufferATI(uint buffer) 655bd8deadSopenharmony_ci 665bd8deadSopenharmony_ci 675bd8deadSopenharmony_ciNew Tokens 685bd8deadSopenharmony_ci 695bd8deadSopenharmony_ci None 705bd8deadSopenharmony_ci 715bd8deadSopenharmony_ci 725bd8deadSopenharmony_ciAdditions to Chapter 2 of the GL Specification (OpenGL Operation) 735bd8deadSopenharmony_ci 745bd8deadSopenharmony_ci Added to the description of Vertex Array Objects: 755bd8deadSopenharmony_ci 765bd8deadSopenharmony_ci The object buffer interface provides a mechanism for an 775bd8deadSopenharmony_ci application to store data in persistent memory that can be 785bd8deadSopenharmony_ci accessed directly by the graphics hardware. The memory is accessed 795bd8deadSopenharmony_ci through handles, and data must be copied into the memory by the 805bd8deadSopenharmony_ci driver. This provides a platform-independent mechanism for 815bd8deadSopenharmony_ci updating the object buffers, and allows the driver to optimally 825bd8deadSopenharmony_ci manage the object buffers. 835bd8deadSopenharmony_ci 845bd8deadSopenharmony_ci However, in cases where object buffers are being frequently 855bd8deadSopenharmony_ci updated, the overhead of memory copies can degrade overall 865bd8deadSopenharmony_ci application performance. The command 875bd8deadSopenharmony_ci 885bd8deadSopenharmony_ci void *MapObjectBufferATI(uint buffer) 895bd8deadSopenharmony_ci 905bd8deadSopenharmony_ci allows the application to obtain a pointer to the object buffer 915bd8deadSopenharmony_ci named <buffer>. If <buffer> is not the name of an existing object 925bd8deadSopenharmony_ci buffer, MapObjectBufferATI returns a null pointer. 935bd8deadSopenharmony_ci 945bd8deadSopenharmony_ci The size of the region mapped by MapObjectBufferATI is equal to 955bd8deadSopenharmony_ci the size of the object buffer. This size can be queried by calling 965bd8deadSopenharmony_ci GetObjectBufferivATI or GetObjectBufferfvATI with the token 975bd8deadSopenharmony_ci OBJECT_BUFFER_SIZE_ATI. 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ci When an application issues a MapObjectBufferATI command, all 1005bd8deadSopenharmony_ci rendering commands that reference data stored in <buffer> must 1015bd8deadSopenharmony_ci complete before the call to MapObjectBufferATI returns. When the 1025bd8deadSopenharmony_ci call returns, the data in <buffer> can be updated immediately. 1035bd8deadSopenharmony_ci 1045bd8deadSopenharmony_ci If an application desires to update an object buffer using this 1055bd8deadSopenharmony_ci interface, it should create the object buffer using DYNAMIC_ATI as 1065bd8deadSopenharmony_ci the usage parameter. Direct updates to object buffers that were 1075bd8deadSopenharmony_ci created with STATIC_ATI as the usage parameter may operate at 1085bd8deadSopenharmony_ci reduced performance. 1095bd8deadSopenharmony_ci 1105bd8deadSopenharmony_ci When an application is finished updating an object buffer, it uses 1115bd8deadSopenharmony_ci the command 1125bd8deadSopenharmony_ci 1135bd8deadSopenharmony_ci void UnmapObjectBufferATI(uint buffer) 1145bd8deadSopenharmony_ci 1155bd8deadSopenharmony_ci to indicate to the driver that it has completed updating the 1165bd8deadSopenharmony_ci object buffer specified by <buffer>. An application must call 1175bd8deadSopenharmony_ci UnmapObjectBufferATI before issuing any rendering commands that 1185bd8deadSopenharmony_ci use the data stored in <buffer>. 1195bd8deadSopenharmony_ci 1205bd8deadSopenharmony_ci Attempts to update an object buffer by direct memory writes after 1215bd8deadSopenharmony_ci UnmapObjectBufferATI has been called result in undefined behavior 1225bd8deadSopenharmony_ci and may generate an error. UpdateObjectBufferATI can be used to 1235bd8deadSopenharmony_ci update an object buffer at any time, regardless of whether it is 1245bd8deadSopenharmony_ci mapped or not. 1255bd8deadSopenharmony_ci 1265bd8deadSopenharmony_ciAdditions to Chapter 3 of the 1.2.1 Specification (Rasterization) 1275bd8deadSopenharmony_ci 1285bd8deadSopenharmony_ci None 1295bd8deadSopenharmony_ci 1305bd8deadSopenharmony_ci 1315bd8deadSopenharmony_ciAdditions to Chapter 4 of the 1.2.1 Specification (Per-Fragment 1325bd8deadSopenharmony_ciOperations and the Frame Buffer) 1335bd8deadSopenharmony_ci 1345bd8deadSopenharmony_ci None 1355bd8deadSopenharmony_ci 1365bd8deadSopenharmony_ci 1375bd8deadSopenharmony_ciAdditions to Chapter 5 of the 1.2.1 Specification (Special Functions) 1385bd8deadSopenharmony_ci 1395bd8deadSopenharmony_ci Added to section 5.4, as part of the discussion of what commands 1405bd8deadSopenharmony_ci are compiled into display lists: 1415bd8deadSopenharmony_ci 1425bd8deadSopenharmony_ci MapObjectBufferATI and UnmapObjectBufferATI are not included in 1435bd8deadSopenharmony_ci display lists, but are executed immediately. 1445bd8deadSopenharmony_ci 1455bd8deadSopenharmony_ci 1465bd8deadSopenharmony_ciAdditions to Chapter 6 of the 1.2.1 Specification (State and State 1475bd8deadSopenharmony_ciRequests) 1485bd8deadSopenharmony_ci 1495bd8deadSopenharmony_ci None 1505bd8deadSopenharmony_ci 1515bd8deadSopenharmony_ciErrors 1525bd8deadSopenharmony_ci 1535bd8deadSopenharmony_ci INVALID_VALUE is generated if the <buffer> argument of 1545bd8deadSopenharmony_ci MapObjectBuffer or UnmapObjectBuffer does not specify a valid 1555bd8deadSopenharmony_ci object buffer. 1565bd8deadSopenharmony_ci 1575bd8deadSopenharmony_ci INVALID_OPERATION may be generated if a rendering command is 1585bd8deadSopenharmony_ci issued that uses an object buffer that is currently mapped. 1595bd8deadSopenharmony_ci 1605bd8deadSopenharmony_ciNew State 1615bd8deadSopenharmony_ci 1625bd8deadSopenharmony_ci None 1635bd8deadSopenharmony_ci 1645bd8deadSopenharmony_ci 1655bd8deadSopenharmony_ciImplementation Notes 1665bd8deadSopenharmony_ci 167