The Khronos Group has released today, at the SIGGRAPH 2012, the OpenGL 4.3 specification. Among the new features, OpenGL 4.3 brings the support of a new kind of shader, the compute shader via the GL_ARB_compute_shader extension. And full backwards compatibility is maintained with old fixed functions. The new features of OpenGL 4.3 are summarized here:
New functionality in the OpenGL 4.3 specification includes: – compute shaders that harness GPU parallelism for advanced computation such as image, volume, and geometry processing within the context of the graphics pipeline; – shader storage buffer objects that enable vertex, tessellation, geometry, fragment and compute shaders to read and write large amounts of data and pass significant data between shader stages; – texture parameter queries to discover actual supported texture parameter limits on the current platform; – high quality ETC2 / EAC texture compression as a standard feature, eliminating the need for a different set of textures for each platform; – debug capability to receive debugging messages during application development; – texture views for interpreting textures in many different ways without duplicating the texture data itself; – indirect multi-draw that enables the GPU to compute and store parameters for multiple draw commands in a buffer object and re-use those parameters with one draw command, particularly efficient for rendering many objects with low triangle counts; – increased memory security that guarantees that an application cannot read or write outside its own buffers into another application’s data; – a multi-application robustness extension that ensures that an application that causes a GPU reset will not affect any other running applications.
You can find the complete specification HERE @ OpenGL.org or you can use these
direct links:
- OpenGL 4.3 Core Profile Specification (updated August 6, 2012)
- OpenGL Shading Language 4.30.6 Specification (updated August 3, 2012)
Here are the new that should be exposed by an OpenGL 4.3 driver:
- GL_ARB_arrays_of_arrays: allows multi-dimensional arrays in GLSL. float f[4][3];
- GL_ARB_ES3_compatibility: brings EAC and ETC2 texture compression formats.
- GL_ARB_clear_buffer_object: clear a buffer object with a constant value.
- GL_ARB_compute_shader: introduces new shader stage and enables advanced processing algorithms that harness the parallelism of GPUs.
- GL_ARB_copy_image: direct copy of pixels between textures and render buffers.
- GL_ARB_debug_group
- GL_ARB_debug_label
- GL_ARB_debug_output2
- GL_ARB_debug_output
- GL_ARB_explicit_uniform_location: set location of a default-block uniform in the shader.
- GL_ARB_fragment_layer_viewport: gl_Layer and gl_ViewportIndex now available to fragment shader.
- GL_ARB_framebuffer_no_attachments
- GL_ARB_internalformat_query2: find out actual supported limits for most texture parameters.
- GL_ARB_invalidate_subdata: invalidate all or some of the contents of textures and buffers.
- GL_ARB_multi_draw_indirect: draw many GPU generated objects with one call.
- GL_ARB_program_interface_query: generic API to enumerate active variables and interface blocks for each stage, enumerate active variables in interfaces between separable program objects.
- GL_ARB_robust_buffer_access_behavior: shader read/write to an object only allowed to data owned by the application, applies to out of bounds accesses.
- GL_ARB_shader_image_size: query size of an image in a shader.
- GL_ARB_shader_storage_buffer_object: enables all shader stages to read and write arbitrarily to very large buffers, great way for compute shaders to communicate to graphics pipeline.
- GL_ARB_stencil_texturing: read stencil bits of a packed depth-stencil texture.
- GL_ARB_texture_buffer_range: create texture buffer object corresponding to a subrange of a buffer’s data store.
- GL_ARB_texture_query_levels: query number of mipmap levels accessible through a sampler uniform.
- GL_ARB_texture_storage_multisample: immutable storage objects for multisampled textures.
- GL_ARB_texture_view: provide different ways to interpret texture data without duplicating the texture.
- GL_ARB_vertex_attrib_binding: separate vertex attribute state from the data stores of each array.
- GL_KHR_debug: enhanced debug context support.
Wonder how compute shaders will interact with OpenCL.
Compute shaders are a bit of OpenCL in OpenGL context.
Like the texture format stuff. Makes things clear and reliable to make drivers for.
Too bad there is still no Direct State Access and bind less textures.
sfsf, I think we should give up on DSA… no progress made on it for ages now, and now sign of them working on it still.
NVIDIA have yet to update the DSA spec to include newer functions from recent GL versions.
Hmmm. I think there is no need in compute shaders to choose magic numbers for number of groups, humber threads in group and etc. I can make image processing via shaders and don’t think about magic numbers, shared memory and other OpenCL/CUDA problems.
Can’t really see why they added compute shaders besides catching up with Direct3D. This sort of completely undermindes OpenCL what the hell was Khronos thinking. Or was there simply too much pressure from the graphics vendors?
Khronos is a consortium that also includes graphics vendors. Thus in some sense khronos is graphics vendors.