'''OpenGL extension NVX.linked_gpu_multicast This module customises the behaviour of the OpenGL.raw.GL.NVX.linked_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, NVX_linked_gpu_multicast provides 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 and attached textures, allowing individualized output for each GPU. Input data can be customized for each GPU using buffers created with the storage flag, LGPU_SEPARATE_STORAGE_BIT_NVX and a new API, LGPUNamedBufferSubDataNVX. - Textures can be transferred from one GPU to another using LGPUCopyImageSubDataNVX. The official definition of this extension is available here: http://www.opengl.org/registry/specs/NVX/linked_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.NVX.linked_gpu_multicast import * from OpenGL.raw.GL.NVX.linked_gpu_multicast import _EXTENSION_NAME def glInitLinkedGpuMulticastNVX(): '''Return boolean indicating whether this extension is available''' from OpenGL import extensions return extensions.hasGLExtension( _EXTENSION_NAME ) ### END AUTOGENERATED SECTION