public class NVGPUMulticast
extends java.lang.Object
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:
PER_GPU_STORAGE_BIT_NV and a new API, MulticastBufferSubDataNV.Requires ARB_copy_image and EXT_direct_state_access.
| Modifier and Type | Field and Description |
|---|---|
static int |
GL_MULTICAST_GPUS_NV
Accepted by the
pname parameter of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, and GetDoublev. |
static int |
GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV
Accepted by the
pname parameter of GetMultisamplefv. |
static int |
GL_PER_GPU_STORAGE_BIT_NV
Accepted in the
flags parameter of BufferStorage and NamedBufferStorageEXT. |
static int |
GL_PER_GPU_STORAGE_NV
Accepted as a value for
pname for the TexParameter{if}, TexParameter{if}v, TextureParameter{if}, TextureParameter{if}v, MultiTexParameter{if}EXT
and MultiTexParameter{if}vEXT commands and for the value parameter of GetTexParameter{if}v, GetTextureParameter{if}vEXT and
GetMultiTexParameter{if}vEXT. |
static int |
GL_RENDER_GPU_MASK_NV
Accepted by the
pname parameter of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, and GetDoublev. |
| Modifier and Type | Method and Description |
|---|---|
static void |
glMulticastBarrierNV() |
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,
java.nio.ByteBuffer data) |
static void |
glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
double[] data)
Array version of:
MulticastBufferSubDataNV |
static void |
glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
java.nio.DoubleBuffer data) |
static void |
glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
float[] data)
Array version of:
MulticastBufferSubDataNV |
static void |
glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
java.nio.FloatBuffer data) |
static void |
glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
int[] data)
Array version of:
MulticastBufferSubDataNV |
static void |
glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
java.nio.IntBuffer data) |
static void |
glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
short[] data)
Array version of:
MulticastBufferSubDataNV |
static void |
glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
java.nio.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,
java.nio.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,
java.nio.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,
java.nio.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,
java.nio.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,
java.nio.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) |
public static final int GL_PER_GPU_STORAGE_BIT_NV
flags parameter of BufferStorage and NamedBufferStorageEXT.public static final int GL_MULTICAST_GPUS_NV
pname parameter of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, and GetDoublev.public static final int GL_RENDER_GPU_MASK_NV
pname parameter of GetBooleanv, GetIntegerv, GetInteger64v, GetFloatv, and GetDoublev.public static final int GL_PER_GPU_STORAGE_NV
pname for the TexParameter{if}, TexParameter{if}v, TextureParameter{if}, TextureParameter{if}v, MultiTexParameter{if}EXT
and MultiTexParameter{if}vEXT commands and for the value parameter of GetTexParameter{if}v, GetTextureParameter{if}vEXT and
GetMultiTexParameter{if}vEXT.public static final int GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV
pname parameter of GetMultisamplefv.public static void glRenderGpuMaskNV(int mask)
public static void nglMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
long size,
long data)
public static void glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
java.nio.ByteBuffer data)
public static void glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
java.nio.ShortBuffer data)
public static void glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
java.nio.IntBuffer data)
public static void glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
java.nio.FloatBuffer data)
public static void glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
java.nio.DoubleBuffer data)
public static void glMulticastCopyBufferSubDataNV(int readGpu,
int writeGpuMask,
int readBuffer,
int writeBuffer,
long readOffset,
long writeOffset,
long size)
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)
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)
public static void nglMulticastFramebufferSampleLocationsfvNV(int gpu,
int framebuffer,
int start,
int count,
long v)
public static void glMulticastFramebufferSampleLocationsfvNV(int gpu,
int framebuffer,
int start,
java.nio.FloatBuffer v)
public static void glMulticastBarrierNV()
public static void glMulticastWaitSyncNV(int signalGpu,
int waitGpuMask)
public static void nglMulticastGetQueryObjectivNV(int gpu,
int id,
int pname,
long params)
public static void glMulticastGetQueryObjectivNV(int gpu,
int id,
int pname,
java.nio.IntBuffer params)
public static int glMulticastGetQueryObjectiNV(int gpu,
int id,
int pname)
public static void nglMulticastGetQueryObjectuivNV(int gpu,
int id,
int pname,
long params)
public static void glMulticastGetQueryObjectuivNV(int gpu,
int id,
int pname,
java.nio.IntBuffer params)
public static int glMulticastGetQueryObjectuiNV(int gpu,
int id,
int pname)
public static void nglMulticastGetQueryObjecti64vNV(int gpu,
int id,
int pname,
long params)
public static void glMulticastGetQueryObjecti64vNV(int gpu,
int id,
int pname,
java.nio.LongBuffer params)
public static long glMulticastGetQueryObjecti64NV(int gpu,
int id,
int pname)
public static void nglMulticastGetQueryObjectui64vNV(int gpu,
int id,
int pname,
long params)
public static void glMulticastGetQueryObjectui64vNV(int gpu,
int id,
int pname,
java.nio.LongBuffer params)
public static long glMulticastGetQueryObjectui64NV(int gpu,
int id,
int pname)
public static void glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
short[] data)
MulticastBufferSubDataNVpublic static void glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
int[] data)
MulticastBufferSubDataNVpublic static void glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
float[] data)
MulticastBufferSubDataNVpublic static void glMulticastBufferSubDataNV(int gpuMask,
int buffer,
long offset,
double[] data)
MulticastBufferSubDataNVpublic static void glMulticastFramebufferSampleLocationsfvNV(int gpu,
int framebuffer,
int start,
float[] v)
MulticastFramebufferSampleLocationsfvNVpublic static void glMulticastGetQueryObjectivNV(int gpu,
int id,
int pname,
int[] params)
MulticastGetQueryObjectivNVpublic static void glMulticastGetQueryObjectuivNV(int gpu,
int id,
int pname,
int[] params)
MulticastGetQueryObjectuivNVpublic static void glMulticastGetQueryObjecti64vNV(int gpu,
int id,
int pname,
long[] params)
MulticastGetQueryObjecti64vNVpublic static void glMulticastGetQueryObjectui64vNV(int gpu,
int id,
int pname,
long[] params)
MulticastGetQueryObjectui64vNVCopyright LWJGL. All Rights Reserved. License terms.