'''OpenGL extension NV.gpu_multicast This module customises the behaviour of the OpenGL.raw.GL.NV.gpu_multicast to provide a more Python-friendly API Overview (from the spec) 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. The official definition of this extension is available here: http://www.opengl.org/registry/specs/NV/gpu_multicast.txt ''' from OpenGL import platform, constant, arrays from OpenGL import extensions, wrapper import ctypes from OpenGL.raw.GL import _types, _glgets from OpenGL.raw.GL.NV.gpu_multicast import * from OpenGL.raw.GL.NV.gpu_multicast import _EXTENSION_NAME def glInitGpuMulticastNV(): '''Return boolean indicating whether this extension is available''' from OpenGL import extensions return extensions.hasGLExtension( _EXTENSION_NAME ) ### END AUTOGENERATED SECTION