| Name |
| |
| ARB_shader_clock |
| |
| Name Strings |
| |
| GL_ARB_shader_clock |
| |
| Contact |
| |
| Timothy Lottes (timothy.lottes 'at' amd.com) |
| |
| Contributors |
| |
| Timothy Lottes, AMD |
| Graham Sellers, AMD |
| Daniel Rakos, AMD |
| |
| Notice |
| |
| Copyright (c) 2015 The Khronos Group Inc. Copyright terms at |
| http://www.khronos.org/registry/speccopyright.html |
| |
| Status |
| |
| Complete. Approved by the ARB on June 26, 2015. |
| Ratified by the Khronos Board of Promoters on August 7, 2015. |
| |
| Version |
| |
| Last Modified Date: 06/17/2015 |
| Revision: 4 |
| |
| Number |
| |
| ARB Extension #184 |
| |
| Dependencies |
| |
| This extension is written against version 4.50 of the OpenGL Shading |
| Language Specification. |
| |
| This interacts with GL_ARB_gpu_shader_int64. |
| |
| Overview |
| |
| This extension exposes a 64-bit monotonically incrementing shader |
| counter which may be used to derive local timing information within |
| a single shader invocation. |
| |
| New Procedures and Functions |
| |
| None. |
| |
| New Tokens |
| |
| None. |
| |
| IP Status |
| |
| None. |
| |
| Modifications to the OpenGL Shading Language Specification, Version 4.50 |
| |
| Including the following line in a shader can be used to control the |
| language features described in this extension: |
| |
| #extension GL_ARB_shader_clock : <behavior> |
| |
| where <behavior> is as specified in section 3.3. |
| |
| New preprocessor #defines are added to the OpenGL Shading Language: |
| |
| #define GL_ARB_shader_clock 1 |
| |
| Additions to Chapter 8 of the OpenGL Shading Language Specification |
| (Built-in Functions) |
| |
| Add New Section 8.19, "Timing Functions" |
| |
| Syntax: |
| |
| uvec2 clock2x32ARB(void); |
| uint64_t clockARB(void); |
| |
| The clockARB() function returns a 64-bit value representing the current |
| execution clock as seen by the shader processor. clock2x32ARB() returns |
| the same value encoded as a two-component vector of 32-bit unsigned integers |
| with the first component containing the 32 least significant bits and the |
| second component containing the 32 most significant bits. Time monotonically |
| increments as the processor executes instructions. The returned time will |
| wrap after it exceeds the maximum value representable in 64 bits. The |
| units of time are not defined and need not be constant. Time is not |
| guaranteed to be dynamically uniform across either a work group or a |
| invocations of a single draw or dispatch. However time is guaranteed to |
| be dynamically uniform across a single sub-group but only in a given |
| shader stage (where sub-group is implementation dependent and may be just |
| one invocation). The clockARB() and clock2x32ARB() functions serve as a code |
| motion barriers. |
| |
| Dependencies on GL_ARB_gpu_shader_int64 |
| |
| If GL_ARB_gpu_shader_int64 is not supported, remove clockARB() and any |
| reference to the uint64 type. |
| |
| Issues |
| |
| 1) Why do we have two functions? What's clock2x32ARB for? |
| |
| It's to allow implementations that don't have full 64-bit integer support |
| to expose support for this extension. |
| |
| 2) Do we need to expose a "clock width" query, or is everyone okay with |
| wrapping at 64-bits? Spec language currently mandates 64-bit, which |
| would preclude implementations from exposing a 32-bit timer. |
| |
| UNRESOLVED. |
| |
| Revision History |
| |
| Rev Date Author Changes |
| --- ---------- -------- --------------------------------------------- |
| 1 03/09/2015 tlottes Initial revision based on AMD_gcn_shader |
| 2 04/20/2015 tlottes Now uint64, noted code motion barrier. |
| 3 04/22/2015 gsellers Add clock2x32ARB. Add interaction with gpu_shader_64. |
| 4 06/17/2015 gsellers General tidyment. Add issue 2. |