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