Name

    NV_multigpu_context

Name Strings

    GLX_NV_multigpu_context

Contact

    Ben Quest (bquest 'at' nvidia.com)

Contributors

    Ben Quest, NVIDIA
    Joshua Schnarr, NVIDIA
    Ralf Biermann, NVIDIA
    Ingo Esser, NVIDIA
    Robert Menzel, NVIDIA
    James Jones, NVIDIA

Notice

    Copyright (c) 2019 NVIDIA

Status

    Complete.

Version

    Last Modified Date:         2019-05-17
    Author Revision:            1

Number

    OpenGL Extension #545

Dependencies

    GLX_NV_multigpu_context is written against the GLX 1.4 and
    GLX_ARB_create_context specifications. Both are required.

    This extension interacts with NV_gpu_multicast.

Overview

    This extension allows the creation of an OpenGL context in a multi-GPU
    environment with a specified multi-GPU strategy (known as SLI mode) which
    takes precedence over process-wide multi-GPU mode settings.

    The multi-GPU mode denotes vendor specific techniques to allow distributed
    rendering on multiple GPUs, further called AFR (alternate frame rendering)
    and Multicast (as defined in NV_gpu_multicast).

    OpenGL supports multiple contexts. The semantics of switching contexts
    is generally left to window system binding APIs such as WGL, GLX and EGL.
    The extension GLX_NV_multigpu_context allows to specify a preferred
    multi-GPU rendering mode per context, thus context switching can also
    switch the current multi-GPU rendering mode.

    In addition to the modes described above, this extension allows creating
    contexts in single mode to force all rendering to be done on a single GPU,
    and multi-display multicast mode to allow multicast rendering on a
    multi-display configuration where displays attached to multiple GPUs are
    linked together in a desktop configuration spanning multiple GPUs.

    The implementation is platform dependent and the actual multi-GPU rendering
    mode of the created context may vary on different hardware and operation
    system platforms.

New Procedures and Functions

    None

New Tokens (GLX)

    Accepted as an attribute name in the <*attrib_list> argument to
    glXCreateContextAttribsARB:

        GLX_CONTEXT_MULTIGPU_ATTRIB_NV                         0x20AA

    Accepted as an attribute value for GLX_CONTEXT_MULTIGPU_ATTRIB_NV in
    the <*attrib_list> argument to glXCreateContextAttribsARB:

        GLX_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV                  0x20AB
        GLX_CONTEXT_MULTIGPU_ATTRIB_AFR_NV                     0x20AC
        GLX_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV               0x20AD
        GLX_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV 0x20AE

Additions to the GLX 1.4 Specification

    This extension modifies language specified in the GLX_ARB_create_context
    extension.

    Add a new paragraph to the description of glXCreateContextAttribsARB:

    "The attribute name GLX_CONTEXT_MULTIGPU_ATTRIB_NV indicates the
    preferred multi-GPU rendering mode for the OpenGL context.
    This specified mode precedes other selected configuration settings."

    Add a new context creation error to glXCreateContextAttribsARB:

    "If attribute GLX_CONTEXT_MULTIGPU_ATTRIB_NV does not describe a valid and
    supported SLI rendering mode, BadValue is generated."

    Append a new paragraph to the end of section 3.5 "Rendering Contexts":

    "When multiple contexts created with a multigpu context attribute are being
    used, glXMakeCurrent and glXMakeContextCurrent will return FALSE if the
    GLXDrawable is already current with a context using a different multigpu
    attribute."

GLX Errors

    BadValue is generated if GLX_CONTEXT_MULTIGPU_ATTRIB_NV does not describe a
    valid and supported SLI rendering mode.

    GLXBadContextState is generated if glXMakeCurrent is called with a context
    created with a different multigpu attribute than the context previously
    current to the drawable.

GLX Protocol

    None

New State

    None

Issues

    All non-window-system dependent issues described in the
    WGL_NV_multigpu_context extension specification apply equally to
    GLX_NV_multigpu_context.

Revision History

 Rev.   Date      Author    Changes
 ---- ----------  --------  ---------------------------------------------
   1  2019-05-17  bquest    Fork from WGL_NV_multigpu_context

