13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgName 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MESA_swap_frame_usage 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgName Strings 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLX_MESA_swap_frame_usage 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgContact 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Ian Romanick, IBM, idr at us.ibm.com 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgStatus 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Deployed in DRI drivers post-XFree86 4.3. 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgVersion 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Date: 5/1/2003 Revision: 1.1 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgNumber 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ??? 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgDependencies 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLX_SGI_swap_control affects the definition of this extension. 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLX_MESA_swap_control affects the definition of this extension. 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLX_OML_sync_control affects the definition of this extension. 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Based on WGL_I3D_swap_frame_usage version 1.3. 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgOverview 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org This extension allows an application to determine what portion of the 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org swap period has elapsed since the last swap operation completed. The 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "usage" value is a floating point value on the range [0,max] which is 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org calculated as follows: 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org td 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org percent = ---- 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org tf 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org where td is the time measured from the last completed buffer swap (or 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org call to enable the statistic) to when the next buffer swap completes, tf 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org is the entire time for a frame which may be multiple screen refreshes 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org depending on the swap interval as set by the GLX_SGI_swap_control or 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLX_OML_sync_control extensions. 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org The value, percent, indicates the amount of time spent between the 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org completion of the two swaps. If the value is in the range [0,1], the 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org buffer swap occurred within the time period required to maintain a 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org constant frame rate. If the value is in the range (1,max], a constant 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org frame rate was not achieved. The value indicates the number of frames 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org required to draw. 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org This definition of "percent" differs slightly from 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org WGL_I3D_swap_frame_usage. In WGL_I3D_swap_frame_usage, the measurement 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org is taken from the completion of one swap to the issuance of the next. 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org This representation may not be as useful as measuring between 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org completions, as a significant amount of time may pass between the 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org issuance of a swap and the swap actually occurring. 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org There is also a mechanism to determine whether a frame swap was 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org missed. 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgNew Procedures and Functions 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int glXGetFrameUsageMESA(Display *dpy, 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLXDrawable drawable, 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org float *usage) 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int glXBeginFrameTrackingMESA(Display *dpy, 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLXDrawable drawable) 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int glXEndFrameTrackingMESA(Display *dpy, 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLXDrawable drawable) 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int glXQueryFrameTrackingMESA(Display *dpy, 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLXDrawable drawable, 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int64_t *swapCount, 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int64_t *missedFrames, 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org float *lastMissedUsage) 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgNew Tokens 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org None 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgAdditions to Chapter 2 of the 1.4 GL Specification (OpenGL Operation) 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org None 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgAdditions to Chapter 3 of the 1.4 GL Specification (Rasterization) 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org None 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgAdditions to Chapter 4 of the 1.4 GL Specification (Per-Fragment Operations 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.organd the Framebuffer) 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org None 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgAdditions to Chapter 5 of the 1.4 GL Specification (Special Functions) 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org None 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgAdditions to Chapter 6 of the 1.4 GL Specification (State and State Requests) 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org None 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgAdditions to the GLX 1.3 Specification 1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org The frame usage is measured as the percentage of the swap period elapsed 1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org between two buffer-swap operations being committed. In unextended GLX the 1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org swap period is the vertical refresh time. If SGI_swap_control or 1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org MESA_swap_control are supported, the swap period is the vertical refresh 1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org time multiplied by the swap interval (or one if the swap interval is set 1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org to zero). 1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org If OML_sync_control is supported, the swap period is the vertical 1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org refresh time multiplied by the divisor parameter to 1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org glXSwapBuffersMscOML. The frame usage in this case is less than 1.0 if 1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org the swap is committed before target_msc, and is greater than or equal to 1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1.0 otherwise. The actual usage value is based on the divisor and is 1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org never less than 0.0. 1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int glXBeginFrameTrackingMESA(Display *dpy, 1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLXDrawable drawable, 1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org float *usage) 1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org glXGetFrameUsageMESA returns a floating-point value in <usage> 1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org that represents the current swap usage, as defined above. 1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Missed frame swaps can be tracked by calling the following function: 1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int glXBeginFrameTrackingMESA(Display *dpy, 1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLXDrawable drawable) 1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org glXBeginFrameTrackingMESA resets a "missed frame" count and 1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org synchronizes with the next frame vertical sync before it returns. 1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org If a swap is missed based in the rate control specified by the 1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org <interval> set by glXSwapIntervalSGI or the default swap of once 1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org per frame, the missed frame count is incremented. 1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org The current missed frame count and total number of swaps since 1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org the last call to glXBeginFrameTrackingMESA can be obtained by 1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org calling the following function: 1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int glXQueryFrameTrackingMESA(Display *dpy, 1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLXDrawable drawable, 1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int64_t *swapCount, 1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int64_t *missedFrames, 1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org float *lastMissedUsage) 1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org The location pointed to by <swapCount> will be updated with the 1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org number of swaps that have been committed. This value may not match the 1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org number of swaps that have been requested since swaps may be 1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org queued by the implementation. This function can be called at any 1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org time and does not synchronize to vertical blank. 1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org The location pointed to by <missedFrames> will contain the number 1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org swaps that missed the specified frame. The frame usage for the 1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org last missed frame is returned in the location pointed to by 1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org <lastMissedUsage>. 1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Frame tracking is disabled by calling the function 1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int glXEndFrameTrackingMESA(Display *dpy, 1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLXDrawable drawable) 1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org This function will not return until all swaps have occurred. The 1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org application can call glXQueryFrameTrackingMESA for a final swap and 1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org missed frame count. 1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org If these functions are successful, zero is returned. If the context 1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org associated with dpy and drawable is not a direct context, 1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLX_BAD_CONTEXT is returned. 1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgErrors 1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org If the function succeeds, zero is returned. If the function 1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org fails, one of the following error codes is returned: 1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLX_BAD_CONTEXT The current rendering context is not a direct 1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org context. 1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgGLX Protocol 1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org None. This extension only extends to direct rendering contexts. 1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgNew State 1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org None 1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgNew Implementation Dependent State 1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org None 1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgRevision History 1993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1.1, 5/1/03 Added contact information. 2013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1.0, 3/17/03 Initial version based on WGL_I3D_swap_frame_usage. 202