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

    308

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
    aperature.  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
