15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    NV_multigpu_context
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    WGL_NV_multigpu_context
85bd8deadSopenharmony_ci
95bd8deadSopenharmony_ciContact
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ci    Ralf Biermann (rbiermann 'at' nvidia.com)
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ciContributors
145bd8deadSopenharmony_ci
155bd8deadSopenharmony_ci    Joshua Schnarr, NVIDIA
165bd8deadSopenharmony_ci    Ingo Esser, NVIDIA
175bd8deadSopenharmony_ci    Robert Menzel, NVIDIA
185bd8deadSopenharmony_ci
195bd8deadSopenharmony_ciNotice
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ci    Copyright (c) 2019 NVIDIA
225bd8deadSopenharmony_ci
235bd8deadSopenharmony_ciStatus
245bd8deadSopenharmony_ci
255bd8deadSopenharmony_ci    Complete.
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ciVersion
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ci    Last Modified Date:         2019-05-29
305bd8deadSopenharmony_ci    Author Revision:            4
315bd8deadSopenharmony_ci
325bd8deadSopenharmony_ciNumber
335bd8deadSopenharmony_ci
345bd8deadSopenharmony_ci    OpenGL Extension #542
355bd8deadSopenharmony_ci
365bd8deadSopenharmony_ciDependencies
375bd8deadSopenharmony_ci
385bd8deadSopenharmony_ci    WGL_NV_multigpu_context is written against the
395bd8deadSopenharmony_ci    WGL_ARB_create_context specification, which is required.
405bd8deadSopenharmony_ci
415bd8deadSopenharmony_ci    This extension interacts with NV_gpu_multicast.
425bd8deadSopenharmony_ci    This extension interacts with WGL_ARB_make_current_read.
435bd8deadSopenharmony_ci
445bd8deadSopenharmony_ciOverview
455bd8deadSopenharmony_ci
465bd8deadSopenharmony_ci    This extension allows the creation of an OpenGL context in a multi-GPU
475bd8deadSopenharmony_ci    environment with a specified multi-GPU strategy (known as SLI mode) which
485bd8deadSopenharmony_ci    takes precedence over process-wide multi-GPU mode settings.
495bd8deadSopenharmony_ci    
505bd8deadSopenharmony_ci    The multi-GPU mode denotes vendor specific techniques to allow distributed
515bd8deadSopenharmony_ci    rendering on multiple GPUs, further called AFR (alternate frame rendering)
525bd8deadSopenharmony_ci    and Multicast (as defined in NV_gpu_multicast).
535bd8deadSopenharmony_ci    
545bd8deadSopenharmony_ci    OpenGL supports multiple contexts. The semantics of switching contexts 
555bd8deadSopenharmony_ci    is generally left to window system binding APIs such as WGL, GLX and EGL.
565bd8deadSopenharmony_ci    The extension WGL_NV_multigpu_context allows to specify a preferred 
575bd8deadSopenharmony_ci    multi-GPU rendering mode per context, thus context switching can also
585bd8deadSopenharmony_ci    switch the current multi-GPU rendering mode.
595bd8deadSopenharmony_ci    
605bd8deadSopenharmony_ci    The implementation is platform dependent and the actual multi-GPU rendering
615bd8deadSopenharmony_ci    mode of the created context may vary on different hardware and operation 
625bd8deadSopenharmony_ci    system platforms.
635bd8deadSopenharmony_ci    
645bd8deadSopenharmony_ciNew Procedures and Functions
655bd8deadSopenharmony_ci
665bd8deadSopenharmony_ci    None
675bd8deadSopenharmony_ci
685bd8deadSopenharmony_ciNew Tokens (WGL)
695bd8deadSopenharmony_ci
705bd8deadSopenharmony_ci    Accepted as an attribute name in the <*attrib_list> argument to
715bd8deadSopenharmony_ci    wglCreateContextAttribsARB:
725bd8deadSopenharmony_ci
735bd8deadSopenharmony_ci        WGL_CONTEXT_MULTIGPU_ATTRIB_NV                         0x20AA
745bd8deadSopenharmony_ci
755bd8deadSopenharmony_ci    Accepted as an attribute value for WGL_CONTEXT_MULTIGPU_ATTRIB_NV in
765bd8deadSopenharmony_ci    the <*attrib_list> argument to wglCreateContextAttribsARB:
775bd8deadSopenharmony_ci
785bd8deadSopenharmony_ci        WGL_CONTEXT_MULTIGPU_ATTRIB_SINGLE_NV                  0x20AB
795bd8deadSopenharmony_ci        WGL_CONTEXT_MULTIGPU_ATTRIB_AFR_NV                     0x20AC
805bd8deadSopenharmony_ci        WGL_CONTEXT_MULTIGPU_ATTRIB_MULTICAST_NV               0x20AD
815bd8deadSopenharmony_ci        WGL_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV 0x20AE
825bd8deadSopenharmony_ci
835bd8deadSopenharmony_ciAdditions to WGL_ARB_create_context and WGL_ARB_make_current_read 
845bd8deadSopenharmony_ci
855bd8deadSopenharmony_ci    Add a new paragraph to the description of wglCreateContextAttribsARB, as
865bd8deadSopenharmony_ci    defined by WGL_ARB_create_context:
875bd8deadSopenharmony_ci
885bd8deadSopenharmony_ci    "The attribute name WGL_CONTEXT_MULTIGPU_ATTRIB_NV indicates the 
895bd8deadSopenharmony_ci    preferred multi-GPU rendering mode for the OpenGL context. 
905bd8deadSopenharmony_ci    This specified mode precedes other selected configuration settings."
915bd8deadSopenharmony_ci
925bd8deadSopenharmony_ci    Add a new paragraph to the description of wglMakeCurrent and 
935bd8deadSopenharmony_ci    wglMakeContextCurrentARB:
945bd8deadSopenharmony_ci
955bd8deadSopenharmony_ci    "With OpenGL on Windows, a thread can only have one current rendering context
965bd8deadSopenharmony_ci    and a device context can only be used by a single thread at a time. 
975bd8deadSopenharmony_ci    Violating this by using the same device context with multiple rendering 
985bd8deadSopenharmony_ci    contexts does not normally return an error, but can lead to undefined and 
995bd8deadSopenharmony_ci    undesirable behavior.
1005bd8deadSopenharmony_ci    When multigpu context attributes are used, however, wglMakeCurrent and 
1015bd8deadSopenharmony_ci    wglMakeContextCurrentARB will return FALSE and set ERROR_INVALID_OPERATION 
1025bd8deadSopenharmony_ci    if a HDC passed to the function is already current with a rendering context 
1035bd8deadSopenharmony_ci    using an alternate multigpu attribute."
1045bd8deadSopenharmony_ci
1055bd8deadSopenharmony_ciGLX Protocol
1065bd8deadSopenharmony_ci
1075bd8deadSopenharmony_ci    None.
1085bd8deadSopenharmony_ci
1095bd8deadSopenharmony_ciErrors for WGL
1105bd8deadSopenharmony_ci
1115bd8deadSopenharmony_ci    A GL error ERROR_INVALID_PARAMETER is generated when a value for
1125bd8deadSopenharmony_ci    WGL_CONTEXT_MULTIGPU_ATTRIB_NV passed into a wglCreateContextAttribsARB 
1135bd8deadSopenharmony_ci    attribute list is not an accepted value.
1145bd8deadSopenharmony_ci    
1155bd8deadSopenharmony_ci    A GL error ERROR_NOT_SUPPORTED is generated when an unsupported SLI rendering 
1165bd8deadSopenharmony_ci    mode value is passed as value of attribute WGL_CONTEXT_MULTIGPU_ATTRIB_NV in a 
1175bd8deadSopenharmony_ci    wglCreateContextAttribsARB attribute list.
1185bd8deadSopenharmony_ci
1195bd8deadSopenharmony_ci    A GL error ERROR_NOT_SUPPORTED is generated when passing a device context HDC
1205bd8deadSopenharmony_ci    to wglMakeCurrent or wglMakeContextCurrentARB if the HDC is already current with 
1215bd8deadSopenharmony_ci    a rendering context using a multigpu attribute in a different thread.
1225bd8deadSopenharmony_ci
1235bd8deadSopenharmony_ciNew State
1245bd8deadSopenharmony_ci
1255bd8deadSopenharmony_ci    None.
1265bd8deadSopenharmony_ci
1275bd8deadSopenharmony_ciIssues
1285bd8deadSopenharmony_ci
1295bd8deadSopenharmony_ci    1. Is MULTICAST mode supported in a multi-display configuration where displays attached
1305bd8deadSopenharmony_ci       to multiple GPUs are linked together in a desktop configuration spanning multiple GPUs?
1315bd8deadSopenharmony_ci
1325bd8deadSopenharmony_ci       RESOLVED: Not by default. 
1335bd8deadSopenharmony_ci
1345bd8deadSopenharmony_ci       A dedicated attribute value WGL_CONTEXT_MULTIGPU_ATTRIB_MULTI_DISPLAY_MULTICAST_NV has to be 
1355bd8deadSopenharmony_ci       specified when a linked multi-GPU display configuration is considered for multicast rendering
1365bd8deadSopenharmony_ci       by the application creating the context.
1375bd8deadSopenharmony_ci
1385bd8deadSopenharmony_ci
1395bd8deadSopenharmony_ciRevision History
1405bd8deadSopenharmony_ci
1415bd8deadSopenharmony_ci Rev.   Date      Author    Changes
1425bd8deadSopenharmony_ci ---- ----------  --------  ---------------------------------------------
1435bd8deadSopenharmony_ci   1  2017-02-21  rbiermann  Initial draft
1445bd8deadSopenharmony_ci   2  2018-09-17  rbiermann  Updated attribute list and spec proposal
1455bd8deadSopenharmony_ci   3  2019-05-08  rbiermann  Added multi-display multicast mode
1465bd8deadSopenharmony_ci   4  2019-05-29  rbiermann  Added behavior of multithreaded wglMakeCurrent