Home | History | Annotate | Download | only in CHROMIUM
      1 Name
      2 
      3     CHROMIUM_map_sub
      4 
      5 Name Strings
      6 
      7     GL_CHROMIUM_map_sub
      8 
      9 Version
     10 
     11     Last Modifed Date: July 22, 2011
     12 
     13 Dependencies
     14 
     15     OpenGL ES 2.0 is required.
     16 
     17 Overview
     18 
     19     This extension allows for more efficiently uploading of buffer or texture
     20     data through Chromium's OpenGL ES 2.0 implementation.
     21 
     22     For security reasons Chromium accesses the GPU from a separate process. User
     23     processes are not allowed to access the GPU directly. This multi-process
     24     architechure has the advantage that GPU operations can be secured and
     25     pipelined but it has the disadvantage that all data that is going to be
     26     passed to GPU must first be made available to the separate GPU process.
     27 
     28     Chromium's OpenGL ES 2.0 implementation hides this issue when using the
     29     standard OpenGL functions BufferData, BufferSubData, TexImage2D, and
     30     TexSubImage2D by first copying the user's data to shared memory and then
     31     telling the GPU process to use that shared memory to upload the data.
     32 
     33     This extension helps avoid that extra copy from user memory to shared memory
     34     in a safe and secure manner.
     35 
     36 Issues
     37 
     38     This extension was designed for only 2 common use cases.
     39 
     40     #1) Dynamic textures. A good example would be a video player that needs to
     41     upload video into a texture.
     42 
     43     #2) CPU based skinning.
     44 
     45     The common feature of these 2 use cases is the size of the texture in the
     46     first case and the size of the buffer in the second case do not change
     47     often. The implemenation of this extension is currently designed to never
     48     free shared memory and re-use previously allocated shared memory that is no
     49     longer in use.
     50 
     51     This design fits the 2 use cases above but it does not fit uploading lots of
     52     arbitrarily sized pieces of data and so, at least in it's current
     53     implemenation it should really be only used for cases similar to those
     54     described above.
     55 
     56 New Tokens
     57 
     58     None
     59 
     60 New Procedures and Functions
     61 
     62     void* MapBufferSubDataCHROMIUM (GLuint target, GLintptr offset,
     63                                     GLsizeiptr size, GLenum access)
     64 
     65     Returns a pointer to shared memory of the requested <size> or NULL if the
     66     request can not be honoured.
     67 
     68     <target>, <offset> and <size> use the exact same parameters as
     69     BufferSubData. <access> must be WRITE_ONLY.
     70 
     71     INVALID_ENUM is generated if <access> is not WRITE_ONLY
     72 
     73     INVALID_VALUE is generated if <offset> or <size> is negative
     74 
     75     void  UnmapBufferSubDataCHROMIUM (const void* mem)
     76 
     77     Calling this function effectively calls BufferSubData with the parameters
     78     that were specified when originally calling MapBufferSubData. Note that
     79     after calling UnmapBufferSubDataCHROMIUM the application should assume that
     80     the memory pointed do by <mem> is off limits and is no longer writable by
     81     the application. Writing to it after calling UnmapBufferSubDataCHROMIUM will
     82     produce undefined results. No security issues exist because of this but
     83     which data makes it to the GPU will be unknown from the point of view of
     84     the user program.
     85 
     86     <mem> is a pointer previously returned by calling MapBufferSubData and not
     87     yet unmapped.
     88 
     89     INVALID_VALUE is generated if <mem> is not a value previously returned by
     90     MapBufferSubData or if it has already been passed to
     91     UnmapBufferSubDataCHROMIUM.
     92 
     93     Other errors are the same errors that would be returned by BufferSubData.
     94 
     95     void* MapTexSubImage2DCHROMIUM (GLenum target, GLint level,
     96                                     GLint xoffset, GLint yoffset,
     97                                     GLsizei width, GLsizei height,
     98                                     GLenum format, GLenum type, GLenum access)
     99 
    100     Returns a pointer to shared memory that matches the image rectangle
    101     described by <width>, <height>, <format>, <type> and the current PixelStorei
    102     UNPACK_ALIGNMENT setting or NULL if the request can not be honoured.
    103 
    104     So for example, a width 3, height 4, format RGB, type UNSIGNED_BYTE,
    105     UNPACK_ALIGNMENT 4 would return a pointer to a piece of memory 45 bytes
    106     in size. Width 3 at RGB is 9 bytes. Padded to an UNPACK_ALIGNMENT of 4 means
    107     12 bytes per row. The last row is not padded.
    108 
    109     <target>, <level>, <xoffset>, <yoffset>, <width>, <height>, <format>, and
    110     <type> use the exact same parameters as TexSubImage2D. <access> must be
    111     WRITE_ONLY.
    112 
    113     INVALID_ENUM is generated if <access> is not WRITE_ONLY
    114 
    115     INVALID_VALUE is generated if <xoffset>, <yoffset>, <width>, <height> or
    116     <level> is negative
    117 
    118     void  UnmapTexSubImage2DCHROMIUM (const void* mem)
    119 
    120     Calling this function effectively calls TexSubImage2D with the parameters
    121     that were specified when originally calling MapTexSubImage2D. Note that
    122     after calling UnmapTexSubImage2DCHROMIUM the application should assume that
    123     the memory pointed do by <mem> is off limits and is no longer writable by
    124     the application. Writing to it after calling UnmapTexSubImage2DCHROMIUM will
    125     produce undefined results. No security issues exist because of this but
    126     which data makes it to the GPU will be unknown from the point of view of the
    127     user program.
    128 
    129     <mem> is a pointer previously returned by calling MapTexSubImage2D and not
    130     yet unmapped.
    131 
    132     INVALID_VALUE is generated if <mem> is not a value previously returned by
    133     MapTexSubImage2D or if it has already been passed to
    134     UnmapTexSubImage2DCHROMIUM.
    135 
    136     Other errors are the same errors that would be returned by TexSubImage2D.
    137 
    138 Errors
    139 
    140     None.
    141 
    142 New State
    143 
    144     None.
    145 
    146 Revision History
    147 
    148     7/22/2011    Documented the extension
    149