| Name |
| |
| NV_multigpu_context |
| |
| Name Strings |
| |
| WGL_NV_multigpu_context |
| |
| Contact |
| |
| Ralf Biermann (rbiermann 'at' nvidia.com) |
| |
| Contributors |
| |
| Joshua Schnarr, NVIDIA |
| Ingo Esser, NVIDIA |
| Robert Menzel, NVIDIA |
| |
| Notice |
| |
| Copyright (c) 2019 NVIDIA |
| |
| Status |
| |
| Complete. |
| |
| Version |
| |
| Last Modified Date: 2019-05-29 |
| Author Revision: 4 |
| |
| Number |
| |
| OpenGL Extension #542 |
| |
| Dependencies |
| |
| WGL_NV_multigpu_context is written against the |
| WGL_ARB_create_context specification, which is required. |
| |
| This extension interacts with NV_gpu_multicast. |
| This extension interacts with WGL_ARB_make_current_read. |
| |
| 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 WGL_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. |
| |
| 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 (WGL) |
| |
| Accepted as an attribute name in the <*attrib_list> argument to |
| wglCreateContextAttribsARB: |
| |
| WGL_CONTEXT_MULTIGPU_ATTRIB_NV 0x20AA |
| |
| Accepted as an attribute value for WGL_CONTEXT_MULTIGPU_ATTRIB_NV in |
| the <*attrib_list> argument to wglCreateContextAttribsARB: |
| |
| WGL_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV 0x20AB |
| WGL_CONTEXT_MULTIGPU_ATTRIB_AFR_NV 0x20AC |
| WGL_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV 0x20AD |
| WGL_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV 0x20AE |
| |
| Additions to WGL_ARB_create_context and WGL_ARB_make_current_read |
| |
| Add a new paragraph to the description of wglCreateContextAttribsARB, as |
| defined by WGL_ARB_create_context: |
| |
| "The attribute name WGL_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 paragraph to the description of wglMakeCurrent and |
| wglMakeContextCurrentARB: |
| |
| "With OpenGL on Windows, a thread can only have one current rendering context |
| and a device context can only be used by a single thread at a time. |
| Violating this by using the same device context with multiple rendering |
| contexts does not normally return an error, but can lead to undefined and |
| undesirable behavior. |
| When multigpu context attributes are used, however, wglMakeCurrent and |
| wglMakeContextCurrentARB will return FALSE and set ERROR_INVALID_OPERATION |
| if a HDC passed to the function is already current with a rendering context |
| using an alternate multigpu attribute." |
| |
| GLX Protocol |
| |
| None. |
| |
| Errors for WGL |
| |
| A GL error ERROR_INVALID_PARAMETER is generated when a value for |
| WGL_CONTEXT_MULTIGPU_ATTRIB_NV passed into a wglCreateContextAttribsARB |
| attribute list is not an accepted value. |
| |
| A GL error ERROR_NOT_SUPPORTED is generated when an unsupported SLI rendering |
| mode value is passed as value of attribute WGL_CONTEXT_MULTIGPU_ATTRIB_NV in a |
| wglCreateContextAttribsARB attribute list. |
| |
| A GL error ERROR_NOT_SUPPORTED is generated when passing a device context HDC |
| to wglMakeCurrent or wglMakeContextCurrentARB if the HDC is already current with |
| a rendering context using a multigpu attribute in a different thread. |
| |
| New State |
| |
| None. |
| |
| Issues |
| |
| 1. Is MULTICAST mode supported in a multi-display configuration where displays attached |
| to multiple GPUs are linked together in a desktop configuration spanning multiple GPUs? |
| |
| RESOLVED: Not by default. |
| |
| A dedicated attribute value WGL_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV has to be |
| specified when a linked multi-GPU display configuration is considered for multicast rendering |
| by the application creating the context. |
| |
| |
| Revision History |
| |
| Rev. Date Author Changes |
| ---- ---------- -------- --------------------------------------------- |
| 1 2017-02-21 rbiermann Initial draft |
| 2 2018-09-17 rbiermann Updated attribute list and spec proposal |
| 3 2019-05-08 rbiermann Added multi-display multicast mode |
| 4 2019-05-29 rbiermann Added behavior of multithreaded wglMakeCurrent |