1Name 
2
3    EXT_gpu_program_parameters 
4
5Name Strings 
6
7    GL_EXT_gpu_program_parameters 
8
9Contributors
10
11    Pat Brown
12    Haroon Sheikh
13   
14Contact 
15
16    Pat Brown, NVIDIA Corporation (pbrown 'at' nvidia.com) 
17    Geoff Stahl, Apple Computer, Inc. (gstahl 'at' apple.com)
18
19Status 
20
21    Shipping for GeForce 8 Series (November 2006) 
22
23Version 
24
25    Last Modified Date:         4/17/08
26    Revision:                   7
27
28Number 
29
30    320 
31
32Dependencies 
33
34    ARB_vertex_program or ARB_fragment_program is required. 
35
36    This specification is written against the spec language from the 
37    ARB_vertex_program extension. 
38
39Overview 
40
41    This extension provides a new set of procedures to load multiple 
42    consecutive program environment parameters more efficiently, via a single 
43    GL call instead of multiple calls.  This will reduce the amount of CPU 
44    overhead involved in loading parameters. 
45
46    With the existing ARB_vertex_program and ARB_fragment_program APIs, 
47    program parameters must be loaded one at a time, via separate calls. 
48    While the NV_vertex_program extension provides a set of similar functions 
49    that can be used to load program environment parameters (which are 
50    equivalent to "program parameters" in NV_vertex_program), no such function 
51    exists for program local parameters. 
52
53New Procedures and Functions 
54
55    void ProgramEnvParameters4fvEXT(enum target, uint index, sizei count, 
56                                   const float *params); 
57
58    void ProgramLocalParameters4fvEXT(enum target, uint index, sizei count, 
59                                     const float *params); 
60
61New Tokens 
62    
63    None. 
64
65Additions to Chapter 2 of the OpenGL 2.0 Specification (OpenGL Operation) 
66
67    (modify ARB_vertex_program and ARB_fragment_program, add paragraph after
68    introduction of ProgramEnvParameter* calls) 
69
70    The command 
71
72      void ProgramEnvParameters4fvEXT(enum target, uint index, sizei count, 
73                                      const float *params); 
74
75    updates the values of the program environment parameters numbered <index>
76    through <index> + <count> - 1 for the given program target <target>.
77    <params> points to an array of 4*<count> values, where the first four are
78    used to update the program environment parameter numbered <index> and the
79    last four update the program environment parameter numbered <index> +
80    <count> - 1.  The error INVALID_VALUE is generated if <count> is less than
81    zero or if the sum of <index> and <count> is greater than the number of
82    program environment parameters supported by <target>.
83
84    (modify ARB_vertex_program and ARB_fragment_program, add paragraph after
85    introduction of ProgramLocalParameter* calls) 
86
87    The command 
88
89      void ProgramLocalParameters4fvEXT(enum target, uint index, sizei count, 
90                                        const float *params); 
91
92    updates the values of the program local parameters numbered <index>
93    through <index> + <count> - 1 belonging to the program object currently
94    bound to <target>.  <params> points to an array of 4*<count> values, where
95    the first four are used to update the program local parameter numbered
96    <index> and the last four update the program local parameter numbered
97    <index> + <count> - 1.  The error INVALID_VALUE is generated if <count> is
98    less than zero or if the sum of <index> and <count> is greater than the
99    number of program local parameters supported by <target>.
100
101Additions to Chapter 3 of the OpenGL 2.0 Specification (Rasterization) 
102
103    None. 
104
105Additions to Chapter 4 of the OpenGL 2.0 Specification (Per-Fragment 
106Operations and the Frame Buffer) 
107
108    None. 
109
110Additions to Chapter 5 of the OpenGL 2.0 Specification (Special Functions) 
111
112    None. 
113
114Additions to Chapter 6 of the OpenGL 2.0 Specification (State and 
115State Requests) 
116
117    None. 
118
119Additions to Appendix A of the OpenGL 2.0 Specification (Invariance) 
120
121    None. 
122
123Additions to the AGL/GLX/WGL Specifications 
124
125    None. 
126
127GLX Protocol 
128
129    Two new GL commands are added.  The following commands are sent to the
130    server as part of a glXRender request:
131
132        ProgramEnvParameters4fvEXT 
133            2           16+16*n         rendering command length 
134            2           4281            rendering command opcode 
135            4           ENUM            target 
136            4           CARD32          index 
137            4           CARD32          n 
138            16*n        FLOAT32         params 
139
140        ProgramLocalParameters4fvEXT 
141            2           16+16*n         rendering command length 
142            2           4282            rendering command opcode 
143            4           ENUM            target 
144            4           CARD32          index 
145            4           CARD32          n 
146            16*n        FLOAT32         params 
147
148Errors 
149
150    INVALID_VALUE is generated by ProgramEnvParameters4fvEXT or
151    ProgramLocalParameters4fvEXT if <count> is less than zero.
152
153    INVALID_VALUE is generated by ProgramEnvParameters4fvEXT if <index> plus
154    <count> is greater than the number of program environment parameters
155    supported by <target>.
156
157    INVALID_VALUE is generated by ProgramLocalParameters4fvEXT if <index> plus
158    <count> is greater than the number of program local parameters supported
159    by <target>.
160
161New State 
162
163    None. 
164
165Issues 
166
167    (1) Should a set of ProgramEnvParameters*EXT() calls be added, or is using 
168        NV_vertex_program's ProgramParameters*NV() sufficient? 
169
170      RESOLVED:  We should add an ARB-style ProgramEnvParameters*() call for 
171      naming consistency. Also ProgramParameters*NV() are not available on 
172      all platforms.
173
174    (2) Should an equivalent set of calls be added to query multiple program 
175        parameters at once? 
176
177      RESOLVED:  No. 
178
179    (3) Should double-precision versions be supported? 
180
181      RESOLVED:  No.  Double-precision parameter values will be converted to 
182      single-precision in current driver implementations, anyway. 
183
184    (4) Why is this spec called "EXT_gpu_program_parameters"?
185
186      RESOLVED:  The functionality provided by this spec applies to more than
187      one program type.  The term "GPU" was used in the extension name to
188      indicate functionality common to all supported program types, which are
189      commonly executed on a GPU.
190
191    (5) Is it an error to load multiple parameters with a <count> of zero?
192
193      RESOLVED:  No.  However, it was illegal in versions of the spec prior to
194      9/27/07.  The spec was changed to resolve differences between the
195      shipping implementations from NVIDIA (which did enforce the error) and
196      Apple (which did not).  The new behavior is more consistent with the
197      standard OpenGL practice of allowing zero to be passed to GLsizei
198      parameters, and avoids the need for special-case behavior to
199      handle/avoid zero counts in both drivers and applications.  Since
200      loading zero program parameters has no actual effect, the only
201      difference between the two behaviors is the update of the GL error
202      state.
203
204
205Revision History 
206
207    Rev.    Date    Author    Changes 
208    ----  --------  --------  -------------------------------------------- 
209    7     04/17/08  pbrown    Fix GLX protocol section to indicate two
210                              functions instead of four.
211
212    6     09/27/07  pbrown    Change the spec to indicate that it's not
213                              illegal to load zero parameters, just
214                              pointless.
215
216    5     11/06/06  mjk       Indicate shipping
217
218    4     06/28/06  barthold  Make clear that this spec modifies both
219                              ARB_vertex_program and ARB_fragment_program.
220
221    3     06/27/06  pbrown    Fix incorrect error language in checking the
222                              sum of <index> and <count>, added an issue
223                              about the spec name.
224
225    2     06/02/06  haroon    Changed to EXT. Added contributors.
226
227    1     04/24/06  pbrown    Initial revision. 
228
229