Name

    MESA_agp_offset

Name Strings

    GLX_MESA_agp_offset

Contact

    Brian Paul, Tungsten Graphics, Inc. (brian.paul 'at' tungstengraphics.com)
    Keith Whitwell, Tungsten Graphics, Inc.  (keith 'at' tungstengraphics.com)

Status

    Shipping (Mesa 4.0.4 and later.  Only implemented in particular
    XFree86/DRI drivers.)

Version

    1.0

Number

    TBD

Dependencies

    OpenGL 1.0 or later is required
    GLX_NV_vertex_array_range is required.
    This extensions is written against the OpenGL 1.4 Specification.

Overview

    This extensions provides a way to convert pointers in an AGP memory
    region into byte offsets into the AGP aperture.
    Note, this extension depends on GLX_NV_vertex_array_range, for which
    no real specification exists.  See GL_NV_vertex_array_range for more
    information.

IP Status

    None

Issues

    None

New Procedures and Functions

    unsigned int glXGetAGPOffsetMESA( const void *pointer )

New Tokens

    None

Additions to the OpenGL 1.4 Specification

    None

Additions to Chapter 3 the GLX 1.4 Specification (Functions and Errors)

    Add a new section, 3.6 as follows:

    3.6 AGP Memory Access

    On "PC" computers, AGP memory can be allocated with glXAllocateMemoryNV
    and freed with glXFreeMemoryNV.  Sometimes it's useful to know where a
    block of AGP memory is located with respect to the start of the AGP
    aperture.  The function

        GLuint glXGetAGPOffsetMESA( const GLvoid *pointer )

    Returns the offset of the given memory block from the start of AGP
    memory in basic machine units (i.e. bytes).  If pointer is invalid
    the value ~0 will be returned.

GLX Protocol

    None.  This is a client side-only extension.

Errors

    glXGetAGPOffsetMESA will return ~0 if the pointer does not point to
    an AGP memory region.

New State

    None

Revision History

    20 September 2002 - Initial draft
    2 October 2002 - finished GLX chapter 3 additions
    27 July 2004 - use unsigned int instead of GLuint, void instead of GLvoid
