Name CHROMIUM_map_sub Name Strings GL_CHROMIUM_map_sub Version Last Modifed Date: July 22, 2011 Dependencies OpenGL ES 2.0 is required. Overview This extension allows for more efficiently uploading of buffer or texture data through Chromium's OpenGL ES 2.0 implementation. For security reasons Chromium accesses the GPU from a separate process. User processes are not allowed to access the GPU directly. This multi-process architechure has the advantage that GPU operations can be secured and pipelined but it has the disadvantage that all data that is going to be passed to GPU must first be made available to the separate GPU process. Chromium's OpenGL ES 2.0 implementation hides this issue when using the standard OpenGL functions BufferData, BufferSubData, TexImage2D, and TexSubImage2D by first copying the user's data to shared memory and then telling the GPU process to use that shared memory to upload the data. This extension helps avoid that extra copy from user memory to shared memory in a safe and secure manner. Issues This extension was designed for only 2 common use cases. #1) Dynamic textures. A good example would be a video player that needs to upload video into a texture. #2) CPU based skinning. The common feature of these 2 use cases is the size of the texture in the first case and the size of the buffer in the second case do not change often. The implemenation of this extension is currently designed to never free shared memory and re-use previously allocated shared memory that is no longer in use. This design fits the 2 use cases above but it does not fit uploading lots of arbitrarily sized pieces of data and so, at least in it's current implemenation it should really be only used for cases similar to those described above. New Tokens None New Procedures and Functions void* MapBufferSubDataCHROMIUM (GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) Returns a pointer to shared memory of the requested or NULL if the request can not be honoured. , and use the exact same parameters as BufferSubData. must be WRITE_ONLY. INVALID_ENUM is generated if is not WRITE_ONLY INVALID_VALUE is generated if or is negative void UnmapBufferSubDataCHROMIUM (const void* mem) Calling this function effectively calls BufferSubData with the parameters that were specified when originally calling MapBufferSubData. Note that after calling UnmapBufferSubDataCHROMIUM the application should assume that the memory pointed do by is off limits and is no longer writable by the application. Writing to it after calling UnmapBufferSubDataCHROMIUM will produce undefined results. No security issues exist because of this but which data makes it to the GPU will be unknown from the point of view of the user program. is a pointer previously returned by calling MapBufferSubData and not yet unmapped. INVALID_VALUE is generated if is not a value previously returned by MapBufferSubData or if it has already been passed to UnmapBufferSubDataCHROMIUM. Other errors are the same errors that would be returned by BufferSubData. void* MapTexSubImage2DCHROMIUM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLenum access) Returns a pointer to shared memory that matches the image rectangle described by , , , and the current PixelStorei UNPACK_ALIGNMENT setting or NULL if the request can not be honoured. So for example, a width 3, height 4, format RGB, type UNSIGNED_BYTE, UNPACK_ALIGNMENT 4 would return a pointer to a piece of memory 45 bytes in size. Width 3 at RGB is 9 bytes. Padded to an UNPACK_ALIGNMENT of 4 means 12 bytes per row. The last row is not padded. , , , , , , , and use the exact same parameters as TexSubImage2D. must be WRITE_ONLY. INVALID_ENUM is generated if is not WRITE_ONLY INVALID_VALUE is generated if , , , or is negative void UnmapTexSubImage2DCHROMIUM (const void* mem) Calling this function effectively calls TexSubImage2D with the parameters that were specified when originally calling MapTexSubImage2D. Note that after calling UnmapTexSubImage2DCHROMIUM the application should assume that the memory pointed do by is off limits and is no longer writable by the application. Writing to it after calling UnmapTexSubImage2DCHROMIUM will produce undefined results. No security issues exist because of this but which data makes it to the GPU will be unknown from the point of view of the user program. is a pointer previously returned by calling MapTexSubImage2D and not yet unmapped. INVALID_VALUE is generated if is not a value previously returned by MapTexSubImage2D or if it has already been passed to UnmapTexSubImage2DCHROMIUM. Other errors are the same errors that would be returned by TexSubImage2D. Errors None. New State None. Revision History 7/22/2011 Documented the extension