Class NVGPUMulticast
This extension enables novel multi-GPU rendering techniques by providing application control over a group of linked GPUs with identical hardware configuration.
Multi-GPU rendering techniques fall into two categories: implicit and explicit. Existing explicit approaches like WGL_NV_gpu_affinity
have two
main drawbacks: CPU overhead and application complexity. An application must manage one context per GPU and multi-pump the API stream. Implicit
multi-GPU rendering techniques avoid these issues by broadcasting rendering from one context to multiple GPUs. Common implicit approaches include
alternate-frame rendering (AFR), split-frame rendering (SFR) and multi-GPU anti-aliasing. They each have drawbacks. AFR scales nicely but interacts
poorly with inter-frame dependencies. SFR can improve latency but has challenges with offscreen rendering and scaling of vertex processing. With
multi-GPU anti-aliasing, each GPU renders the same content with alternate sample positions and the driver blends the result to improve quality. This
also has issues with offscreen rendering and can conflict with other anti-aliasing techniques.
These issues with implicit multi-GPU rendering all have the same root cause: the driver lacks adequate knowledge to accelerate every application. To resolve this, NV_gpu_multicast provides fine-grained, explicit application control over multiple GPUs with a single context.
Key points:
- One context controls multiple GPUs. Every GPU in the linked group can access every object.
- Rendering is broadcast. Each draw is repeated across all GPUs in the linked group.
- Each GPU gets its own instance of all framebuffers, allowing individualized output for each GPU. Input data can be customized for each GPU using
buffers created with the storage flag,
PER_GPU_STORAGE_BIT_NV
and a new API,MulticastBufferSubDataNV
. - New interfaces provide mechanisms to transfer textures and buffers from one GPU to another.
Requires ARB_copy_image
and EXT_direct_state_access
.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
Accepted by thepname
parameter of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, and GetDoublev.static final int
Accepted by thepname
parameter of GetMultisamplefv.static final int
Accepted in theflags
parameter of BufferStorage and NamedBufferStorageEXT.static final int
Accepted as a value forpname
for the TexParameter{if}, TexParameter{if}v, TextureParameter{if}, TextureParameter{if}v, MultiTexParameter{if}EXT and MultiTexParameter{if}vEXT commands and for thevalue
parameter of GetTexParameter{if}v, GetTextureParameter{if}vEXT and GetMultiTexParameter{if}vEXT.static final int
Accepted by thepname
parameter of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, and GetDoublev. -
Method Summary
Modifier and TypeMethodDescriptionstatic void
static void
glMulticastBlitFramebufferNV
(int srcGpu, int dstGpu, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) static void
glMulticastBufferSubDataNV
(int gpuMask, int buffer, long offset, double[] data) Array version of:MulticastBufferSubDataNV
static void
glMulticastBufferSubDataNV
(int gpuMask, int buffer, long offset, float[] data) Array version of:MulticastBufferSubDataNV
static void
glMulticastBufferSubDataNV
(int gpuMask, int buffer, long offset, int[] data) Array version of:MulticastBufferSubDataNV
static void
glMulticastBufferSubDataNV
(int gpuMask, int buffer, long offset, short[] data) Array version of:MulticastBufferSubDataNV
static void
glMulticastBufferSubDataNV
(int gpuMask, int buffer, long offset, ByteBuffer data) static void
glMulticastBufferSubDataNV
(int gpuMask, int buffer, long offset, DoubleBuffer data) static void
glMulticastBufferSubDataNV
(int gpuMask, int buffer, long offset, FloatBuffer data) static void
glMulticastBufferSubDataNV
(int gpuMask, int buffer, long offset, IntBuffer data) static void
glMulticastBufferSubDataNV
(int gpuMask, int buffer, long offset, ShortBuffer data) static void
glMulticastCopyBufferSubDataNV
(int readGpu, int writeGpuMask, int readBuffer, int writeBuffer, long readOffset, long writeOffset, long size) static void
glMulticastCopyImageSubDataNV
(int srcGpu, int dstGpuMask, int srcName, int srcTarget, int srcLevel, int srcX, int srxY, int srcZ, int dstName, int dstTarget, int dstLevel, int dstX, int dstY, int dstZ, int srcWidth, int srcHeight, int srcDepth) static void
glMulticastFramebufferSampleLocationsfvNV
(int gpu, int framebuffer, int start, float[] v) Array version of:MulticastFramebufferSampleLocationsfvNV
static void
glMulticastFramebufferSampleLocationsfvNV
(int gpu, int framebuffer, int start, FloatBuffer v) static long
glMulticastGetQueryObjecti64NV
(int gpu, int id, int pname) static void
glMulticastGetQueryObjecti64vNV
(int gpu, int id, int pname, long[] params) Array version of:MulticastGetQueryObjecti64vNV
static void
glMulticastGetQueryObjecti64vNV
(int gpu, int id, int pname, LongBuffer params) static int
glMulticastGetQueryObjectiNV
(int gpu, int id, int pname) static void
glMulticastGetQueryObjectivNV
(int gpu, int id, int pname, int[] params) Array version of:MulticastGetQueryObjectivNV
static void
glMulticastGetQueryObjectivNV
(int gpu, int id, int pname, IntBuffer params) static long
glMulticastGetQueryObjectui64NV
(int gpu, int id, int pname) static void
glMulticastGetQueryObjectui64vNV
(int gpu, int id, int pname, long[] params) Array version of:MulticastGetQueryObjectui64vNV
static void
glMulticastGetQueryObjectui64vNV
(int gpu, int id, int pname, LongBuffer params) static int
glMulticastGetQueryObjectuiNV
(int gpu, int id, int pname) static void
glMulticastGetQueryObjectuivNV
(int gpu, int id, int pname, int[] params) Array version of:MulticastGetQueryObjectuivNV
static void
glMulticastGetQueryObjectuivNV
(int gpu, int id, int pname, IntBuffer params) static void
glMulticastWaitSyncNV
(int signalGpu, int waitGpuMask) static void
glRenderGpuMaskNV
(int mask) Restricts render commands to a specific set of GPUs.static void
nglMulticastBufferSubDataNV
(int gpuMask, int buffer, long offset, long size, long data) static void
nglMulticastFramebufferSampleLocationsfvNV
(int gpu, int framebuffer, int start, int count, long v) static void
nglMulticastGetQueryObjecti64vNV
(int gpu, int id, int pname, long params) static void
nglMulticastGetQueryObjectivNV
(int gpu, int id, int pname, long params) static void
nglMulticastGetQueryObjectui64vNV
(int gpu, int id, int pname, long params) static void
nglMulticastGetQueryObjectuivNV
(int gpu, int id, int pname, long params)
-
Field Details
-
GL_PER_GPU_STORAGE_BIT_NV
public static final int GL_PER_GPU_STORAGE_BIT_NVAccepted in theflags
parameter of BufferStorage and NamedBufferStorageEXT.- See Also:
-
GL_MULTICAST_GPUS_NV
public static final int GL_MULTICAST_GPUS_NVAccepted by thepname
parameter of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, and GetDoublev.- See Also:
-
GL_RENDER_GPU_MASK_NV
public static final int GL_RENDER_GPU_MASK_NVAccepted by thepname
parameter of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, and GetDoublev.- See Also:
-
GL_PER_GPU_STORAGE_NV
public static final int GL_PER_GPU_STORAGE_NVAccepted as a value forpname
for the TexParameter{if}, TexParameter{if}v, TextureParameter{if}, TextureParameter{if}v, MultiTexParameter{if}EXT and MultiTexParameter{if}vEXT commands and for thevalue
parameter of GetTexParameter{if}v, GetTextureParameter{if}vEXT and GetMultiTexParameter{if}vEXT.- See Also:
-
GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV
public static final int GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NVAccepted by thepname
parameter of GetMultisamplefv.- See Also:
-
-
Method Details
-
glRenderGpuMaskNV
public static void glRenderGpuMaskNV(int mask) Restricts render commands to a specific set of GPUs. -
nglMulticastBufferSubDataNV
public static void nglMulticastBufferSubDataNV(int gpuMask, int buffer, long offset, long size, long data) -
glMulticastBufferSubDataNV
public static void glMulticastBufferSubDataNV(int gpuMask, int buffer, long offset, ByteBuffer data) -
glMulticastBufferSubDataNV
public static void glMulticastBufferSubDataNV(int gpuMask, int buffer, long offset, ShortBuffer data) -
glMulticastBufferSubDataNV
-
glMulticastBufferSubDataNV
public static void glMulticastBufferSubDataNV(int gpuMask, int buffer, long offset, FloatBuffer data) -
glMulticastBufferSubDataNV
public static void glMulticastBufferSubDataNV(int gpuMask, int buffer, long offset, DoubleBuffer data) -
glMulticastCopyBufferSubDataNV
public static void glMulticastCopyBufferSubDataNV(int readGpu, int writeGpuMask, int readBuffer, int writeBuffer, long readOffset, long writeOffset, long size) -
glMulticastCopyImageSubDataNV
public static void glMulticastCopyImageSubDataNV(int srcGpu, int dstGpuMask, int srcName, int srcTarget, int srcLevel, int srcX, int srxY, int srcZ, int dstName, int dstTarget, int dstLevel, int dstX, int dstY, int dstZ, int srcWidth, int srcHeight, int srcDepth) -
glMulticastBlitFramebufferNV
public static void glMulticastBlitFramebufferNV(int srcGpu, int dstGpu, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter) -
nglMulticastFramebufferSampleLocationsfvNV
public static void nglMulticastFramebufferSampleLocationsfvNV(int gpu, int framebuffer, int start, int count, long v) -
glMulticastFramebufferSampleLocationsfvNV
public static void glMulticastFramebufferSampleLocationsfvNV(int gpu, int framebuffer, int start, FloatBuffer v) -
glMulticastBarrierNV
public static void glMulticastBarrierNV() -
glMulticastWaitSyncNV
public static void glMulticastWaitSyncNV(int signalGpu, int waitGpuMask) -
nglMulticastGetQueryObjectivNV
public static void nglMulticastGetQueryObjectivNV(int gpu, int id, int pname, long params) -
glMulticastGetQueryObjectivNV
-
glMulticastGetQueryObjectiNV
public static int glMulticastGetQueryObjectiNV(int gpu, int id, int pname) -
nglMulticastGetQueryObjectuivNV
public static void nglMulticastGetQueryObjectuivNV(int gpu, int id, int pname, long params) -
glMulticastGetQueryObjectuivNV
-
glMulticastGetQueryObjectuiNV
public static int glMulticastGetQueryObjectuiNV(int gpu, int id, int pname) -
nglMulticastGetQueryObjecti64vNV
public static void nglMulticastGetQueryObjecti64vNV(int gpu, int id, int pname, long params) -
glMulticastGetQueryObjecti64vNV
-
glMulticastGetQueryObjecti64NV
public static long glMulticastGetQueryObjecti64NV(int gpu, int id, int pname) -
nglMulticastGetQueryObjectui64vNV
public static void nglMulticastGetQueryObjectui64vNV(int gpu, int id, int pname, long params) -
glMulticastGetQueryObjectui64vNV
-
glMulticastGetQueryObjectui64NV
public static long glMulticastGetQueryObjectui64NV(int gpu, int id, int pname) -
glMulticastBufferSubDataNV
public static void glMulticastBufferSubDataNV(int gpuMask, int buffer, long offset, short[] data) Array version of:MulticastBufferSubDataNV
-
glMulticastBufferSubDataNV
public static void glMulticastBufferSubDataNV(int gpuMask, int buffer, long offset, int[] data) Array version of:MulticastBufferSubDataNV
-
glMulticastBufferSubDataNV
public static void glMulticastBufferSubDataNV(int gpuMask, int buffer, long offset, float[] data) Array version of:MulticastBufferSubDataNV
-
glMulticastBufferSubDataNV
public static void glMulticastBufferSubDataNV(int gpuMask, int buffer, long offset, double[] data) Array version of:MulticastBufferSubDataNV
-
glMulticastFramebufferSampleLocationsfvNV
public static void glMulticastFramebufferSampleLocationsfvNV(int gpu, int framebuffer, int start, float[] v) Array version of:MulticastFramebufferSampleLocationsfvNV
-
glMulticastGetQueryObjectivNV
public static void glMulticastGetQueryObjectivNV(int gpu, int id, int pname, int[] params) Array version of:MulticastGetQueryObjectivNV
-
glMulticastGetQueryObjectuivNV
public static void glMulticastGetQueryObjectuivNV(int gpu, int id, int pname, int[] params) Array version of:MulticastGetQueryObjectuivNV
-
glMulticastGetQueryObjecti64vNV
public static void glMulticastGetQueryObjecti64vNV(int gpu, int id, int pname, long[] params) Array version of:MulticastGetQueryObjecti64vNV
-
glMulticastGetQueryObjectui64vNV
public static void glMulticastGetQueryObjectui64vNV(int gpu, int id, int pname, long[] params) Array version of:MulticastGetQueryObjectui64vNV
-