Merge pull request #449 from tate-hornbeck/QCOM_frame_extrapolation

Add QCOM_frame_extrapolation
diff --git a/extensions/ARB/ARB_indirect_parameters.txt b/extensions/ARB/ARB_indirect_parameters.txt
index 0dc05dc..f7024c6 100644
--- a/extensions/ARB/ARB_indirect_parameters.txt
+++ b/extensions/ARB/ARB_indirect_parameters.txt
@@ -36,8 +36,8 @@
 
 Version
 
-    Last Modified Date: 23 October 2017
-    Revision: 4
+    Last Modified Date: 11 November 2020
+    Revision: 5
 
 Number
 
@@ -139,7 +139,7 @@
         void MultiDrawArraysIndirectCountARB(enum mode,
                                              const void *indirect,
                                              intptr drawcount,
-                                             intptr maxdrawcount,
+                                             sizei maxdrawcount,
                                              sizei stride);
 
     behaves similarly to MultiDrawArraysIndirect, except that <drawcount>
@@ -218,3 +218,6 @@
      3    06/20/2013  pdaniell  Modify the <indirect> parameter type to
                                 const void *.
      4    10/23/2017  nhaehnle  Add COMMAND_BARRIER_BIT language.
+     5    11/11/2020  pdaniell  Fix the type of the maxdrawcount parameter
+                                of MultiDrawArraysIndirectCountARB to be
+                                sizei making it consistent in the extension.
diff --git a/extensions/EXT/EXT_disjoint_timer_query.txt b/extensions/EXT/EXT_disjoint_timer_query.txt
index 9c30452..d31619a 100644
--- a/extensions/EXT/EXT_disjoint_timer_query.txt
+++ b/extensions/EXT/EXT_disjoint_timer_query.txt
@@ -33,7 +33,7 @@
 
 Version
 
-    Version 8, December 11, 2019
+    Version 9, November 20, 2020
 
 Number
 
@@ -477,7 +477,7 @@
         
     (2) This example uses QueryCounter.
     
-        GLint queries[1];
+        GLint queries[2];
         GLint available = 0;
         GLint disjointOccurred = 0;
         /* Timer queries can contain more than 32 bits of data, so always
@@ -485,20 +485,24 @@
         GLuint64 timeStart, timeEnd, timeElapsed = 0;
 
         /* Create a query object. */
-        glGenQueries(1, queries);
+        glGenQueries(2, queries);
 
         /* Clear disjoint error */
         glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjointOccurred);
 
+        /* Query current timestamp before drawing */
+        glQueryCounterEXT(queries[0], GL_TIMESTAMP_EXT);
+
         /* Draw full rendertarget of objects */
 
-        glQueryCounterEXT(queries[0], GL_TIMESTAMP_EXT);
+        /* Query current timestamp after drawing */
+        glQueryCounterEXT(queries[1], GL_TIMESTAMP_EXT);
         
         /* Do some other work so you don't stall waiting for available */
         
         /* Wait for the query result to become available */
         while (!available) {
-            glGetQueryObjectiv(queries[0], GL_QUERY_RESULT_AVAILABLE, &available);
+            glGetQueryObjectiv(queries[1], GL_QUERY_RESULT_AVAILABLE, &available);
         }
         
         /* Check for disjoint operation. */
@@ -507,15 +511,18 @@
         /* If a disjoint operation occurred, continue without reading the the
            values */
         if (!disjointOccurred) {
+            /* Get timestamp for when rendertarget started. */
+            glGetQueryObjectui64vEXT(queries[0], GL_QUERY_RESULT, &timeStart);
             /* Get timestamp for when rendertarget finished. */
-            glGetQueryObjectui64vEXT(queries[0], GL_QUERY_RESULT, &timeElapsed);
+            glGetQueryObjectui64vEXT(queries[1], GL_QUERY_RESULT, &timeEnd);
+            /* See how much time the rendering took in nanoseconds. */
+            timeElapsed = timeEnd - timeStart;
             
             /* Do something useful with the time if a disjoint operation did
                not occur.  Note that care should be taken to use all
                significant bits of the result, not just the least significant
                32 bits. */
-                
-            AdjustObjectLODBasedOnDrawTime(i, timeElapsed);
+            AdjustObjectLODBasedOnDrawTime(timeElapsed);
         }
         
     (3) This example demonstrates how to measure the latency between GL
@@ -538,7 +545,7 @@
         glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjointOccurred);
         
         /* Queue a query to find out when the frame finishes on the GL */
-        glQueryCounterEXT(GL_TIMESTAMP_EXT, endFrameQuery);
+        glQueryCounterEXT(endFrameQuery, GL_TIMESTAMP_EXT);
 
         /* Get the current GL time without stalling the GL */
         glGetIntegerv(GL_TIMESTAMP_EXT, &flushTime);
@@ -754,6 +761,8 @@
     will not be set.
 
 Revision History
+    Revision 9, 2020/11/20 (xndcn)
+      - Minor fix of code sample
     Revision 8, 2019/12/11 (Jon Leech)
       - Add actual spec language defining GetInteger64vEXT (github
         OpenGL-Registry issue 326)
diff --git a/xml/gl.xml b/xml/gl.xml
index 1748812..9f00b5b 100644
--- a/xml/gl.xml
+++ b/xml/gl.xml
@@ -9324,7 +9324,7 @@
         <enum value="0x8C07" name="GL_FACTOR_ALPHA_MODULATE_IMG"/>
         <enum value="0x8C08" name="GL_FRAGMENT_ALPHA_MODULATE_IMG"/>
         <enum value="0x8C09" name="GL_ADD_BLEND_IMG"/>
-        <enum value="0x8C0A" name="GL_SGX_BINARY_IMG"/>
+        <enum value="0x8C0A" name="GL_SGX_BINARY_IMG" group="ShaderBinaryFormat"/>
             <unused start="0x8C0B" end="0x8C0F" vendor="IMG"/>
     </enums>
 
@@ -9982,7 +9982,7 @@
         <enum value="0x8DF5" name="GL_HIGH_INT" group="PrecisionType"/>
         <enum value="0x8DF6" name="GL_UNSIGNED_INT_10_10_10_2_OES"/>
         <enum value="0x8DF7" name="GL_INT_10_10_10_2_OES"/>
-        <enum value="0x8DF8" name="GL_SHADER_BINARY_FORMATS"/>
+        <enum value="0x8DF8" name="GL_SHADER_BINARY_FORMATS" group="GetPName"/>
         <enum value="0x8DF9" name="GL_NUM_SHADER_BINARY_FORMATS" group="GetPName"/>
         <enum value="0x8DFA" name="GL_SHADER_COMPILER" group="GetPName"/>
         <enum value="0x8DFB" name="GL_MAX_VERTEX_UNIFORM_VECTORS" group="GetPName"/>
@@ -10319,7 +10319,7 @@
     </enums>
 
     <enums namespace="GL" start="0x8F60" end="0x8F6F" vendor="ARM" comment="For Remi Pedersen, Khronos bug 3745">
-        <enum value="0x8F60" name="GL_MALI_SHADER_BINARY_ARM"/>
+        <enum value="0x8F60" name="GL_MALI_SHADER_BINARY_ARM" group="ShaderBinaryFormat"/>
         <enum value="0x8F61" name="GL_MALI_PROGRAM_BINARY_ARM"/>
             <unused start="0x8F62" vendor="ARM"/>
         <enum value="0x8F63" name="GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT"/>
@@ -10381,7 +10381,7 @@
     </enums>
 
     <enums namespace="GL" start="0x8FC0" end="0x8FDF" vendor="VIV" comment="For Frido Garritsen, bug 4526">
-        <enum value="0x8FC4" name="GL_SHADER_BINARY_VIV"/>
+        <enum value="0x8FC4" name="GL_SHADER_BINARY_VIV" group="ShaderBinaryFormat"/>
     </enums>
 
     <enums namespace="GL" start="0x8FE0" end="0x8FFF" vendor="NV" comment="For Pat Brown, bug 4935">
@@ -10964,7 +10964,7 @@
     </enums>
 
     <enums namespace="GL" start="0x9250" end="0x925F" vendor="DMP" comment="For Eisaku Ohbuchi via email">
-        <enum value="0x9250" name="GL_SHADER_BINARY_DMP"/>
+        <enum value="0x9250" name="GL_SHADER_BINARY_DMP" group="ShaderBinaryFormat"/>
         <enum value="0x9251" name="GL_SMAPHS30_PROGRAM_BINARY_DMP"/>
         <enum value="0x9252" name="GL_SMAPHS_PROGRAM_BINARY_DMP"/>
         <enum value="0x9253" name="GL_DMP_PROGRAM_BINARY_DMP"/>
@@ -10972,7 +10972,7 @@
     </enums>
 
     <enums namespace="GL" start="0x9260" end="0x926F" vendor="FJ" comment="Khronos bug 7486">
-        <enum value="0x9260" name="GL_GCCSO_SHADER_BINARY_FJ"/>
+        <enum value="0x9260" name="GL_GCCSO_SHADER_BINARY_FJ" group="ShaderBinaryFormat"/>
             <unused start="0x9261" end="0x926F" vendor="FJ"/>
     </enums>
 
@@ -19133,7 +19133,7 @@
             <param><ptype>GLuint</ptype> <name>monitor</name></param>
             <param><ptype>GLenum</ptype> <name>pname</name></param>
             <param><ptype>GLsizei</ptype> <name>dataSize</name></param>
-            <param len="dataSize"><ptype>GLuint</ptype> *<name>data</name></param>
+            <param len="dataSize / 4"><ptype>GLuint</ptype> *<name>data</name></param>
             <param len="1"><ptype>GLint</ptype> *<name>bytesWritten</name></param>
         </command>
         <command>
@@ -20746,7 +20746,7 @@
             <param group="MapTarget"><ptype>GLenum</ptype> <name>target</name></param>
             <param group="MapQuery"><ptype>GLenum</ptype> <name>query</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="COMPSIZE(bufSize)"><ptype>GLdouble</ptype> *<name>v</name></param>
+            <param len="bufSize / 8"><ptype>GLdouble</ptype> *<name>v</name></param>
         </command>
         <command>
             <proto>void <name>glGetnMapfv</name></proto>
@@ -20804,7 +20804,7 @@
             <proto>void <name>glGetnPixelMapfvARB</name></proto>
             <param group="PixelMap"><ptype>GLenum</ptype> <name>map</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="COMPSIZE(bufSize)"><ptype>GLfloat</ptype> *<name>values</name></param>
+            <param len="bufSize / 4"><ptype>GLfloat</ptype> *<name>values</name></param>
         </command>
         <command>
             <proto>void <name>glGetnPixelMapuiv</name></proto>
@@ -20885,35 +20885,35 @@
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLdouble</ptype> *<name>params</name></param>
+            <param len="bufSize / 8"><ptype>GLdouble</ptype> *<name>params</name></param>
         </command>
         <command>
             <proto>void <name>glGetnUniformdvARB</name></proto>
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLdouble</ptype> *<name>params</name></param>
+            <param len="bufSize / 8"><ptype>GLdouble</ptype> *<name>params</name></param>
         </command>
         <command>
             <proto>void <name>glGetnUniformfv</name></proto>
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLfloat</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLfloat</ptype> *<name>params</name></param>
         </command>
         <command>
             <proto>void <name>glGetnUniformfvARB</name></proto>
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLfloat</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLfloat</ptype> *<name>params</name></param>
         </command>
         <command>
             <proto>void <name>glGetnUniformfvEXT</name></proto>
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLfloat</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLfloat</ptype> *<name>params</name></param>
             <alias name="glGetnUniformfv"/>
         </command>
         <command>
@@ -20921,7 +20921,7 @@
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLfloat</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLfloat</ptype> *<name>params</name></param>
             <alias name="glGetnUniformfv"/>
         </command>
         <command>
@@ -20929,28 +20929,28 @@
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLint64</ptype> *<name>params</name></param>
+            <param len="bufSize / 8"><ptype>GLint64</ptype> *<name>params</name></param>
         </command>
         <command>
             <proto>void <name>glGetnUniformiv</name></proto>
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLint</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLint</ptype> *<name>params</name></param>
         </command>
         <command>
             <proto>void <name>glGetnUniformivARB</name></proto>
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLint</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLint</ptype> *<name>params</name></param>
         </command>
         <command>
             <proto>void <name>glGetnUniformivEXT</name></proto>
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLint</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLint</ptype> *<name>params</name></param>
             <alias name="glGetnUniformiv"/>
         </command>
         <command>
@@ -20958,7 +20958,7 @@
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLint</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLint</ptype> *<name>params</name></param>
             <alias name="glGetnUniformiv"/>
         </command>
         <command>
@@ -20966,28 +20966,28 @@
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLuint64</ptype> *<name>params</name></param>
+            <param len="bufSize / 8"><ptype>GLuint64</ptype> *<name>params</name></param>
         </command>
         <command>
             <proto>void <name>glGetnUniformuiv</name></proto>
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLuint</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLuint</ptype> *<name>params</name></param>
         </command>
         <command>
             <proto>void <name>glGetnUniformuivARB</name></proto>
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLuint</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLuint</ptype> *<name>params</name></param>
         </command>
         <command>
             <proto>void <name>glGetnUniformuivKHR</name></proto>
             <param class="program"><ptype>GLuint</ptype> <name>program</name></param>
             <param><ptype>GLint</ptype> <name>location</name></param>
             <param><ptype>GLsizei</ptype> <name>bufSize</name></param>
-            <param len="bufSize"><ptype>GLuint</ptype> *<name>params</name></param>
+            <param len="bufSize / 4"><ptype>GLuint</ptype> *<name>params</name></param>
             <alias name="glGetnUniformuiv"/>
         </command>
         <command>