| | '''OpenGL extension ARB.compute_shader |
| | |
| | This module customises the behaviour of the |
| | OpenGL.raw.GL.ARB.compute_shader to provide a more |
| | Python-friendly API |
| | |
| | Overview (from the spec) |
| | |
| | Recent graphics hardware has become extremely powerful and a strong desire |
| | to harness this power for work (both graphics and non-graphics) that does |
| | not fit the traditional graphics pipeline well has emerged. To address |
| | this, this extension adds a new single-stage program type known as a |
| | compute program. This program may contain one or more compute shaders |
| | which may be launched in a manner that is essentially stateless. This allows |
| | arbitrary workloads to be sent to the graphics hardware with minimal |
| | disturbance to the GL state machine. |
| | |
| | In most respects, a compute program is identical to a traditional OpenGL |
| | program object, with similar status, uniforms, and other such properties. |
| | It has access to many of the same resources as fragment and other shader |
| | types, such as textures, image variables, atomic counters, and so on. |
| | However, it has no predefined inputs nor any fixed-function outputs. It |
| | cannot be part of a pipeline and its visible side effects are through its |
| | actions on images and atomic counters. |
| | |
| | OpenCL is another solution for using graphics processors as generalized |
| | compute devices. This extension addresses a different need. For example, |
| | OpenCL is designed to be usable on a wide range of devices ranging from |
| | CPUs, GPUs, and DSPs through to FPGAs. While one could implement GL on these |
| | types of devices, the target here is clearly GPUs. Another difference is |
| | that OpenCL is more full featured and includes features such as multiple |
| | devices, asynchronous queues and strict IEEE semantics for floating point |
| | operations. This extension follows the semantics of OpenGL - implicitly |
| | synchronous, in-order operation with single-device, single queue |
| | logical architecture and somewhat more relaxed numerical precision |
| | requirements. Although not as feature rich, this extension offers several |
| | advantages for applications that can tolerate the omission of these |
| | features. Compute shaders are written in GLSL, for example and so code may |
| | be shared between compute and other shader types. Objects are created and |
| | owned by the same context as the rest of the GL, and therefore no |
| | interoperability API is required and objects may be freely used by both |
| | compute and graphics simultaneously without acquire-release semantics or |
| | object type translation. |
| | |
| | The official definition of this extension is available here: |
| | http://www.opengl.org/registry/specs/ARB/compute_shader.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.ARB.compute_shader import * |
| | from OpenGL.raw.GL.ARB.compute_shader import _EXTENSION_NAME |
| |
|
| | def glInitComputeShaderARB(): |
| | '''Return boolean indicating whether this extension is available''' |
| | from OpenGL import extensions |
| | return extensions.hasGLExtension( _EXTENSION_NAME ) |
| |
|
| |
|
| | |