1/*
2 * Mesa 3-D graphics library
3 *
4 * Copyright (C) 2004-2007  Brian Paul   All Rights Reserved.
5 * Copyright (C) 2010  VMware, Inc.  All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */
25
26
27#ifndef SHADERAPI_H
28#define SHADERAPI_H
29
30
31#include "glheader.h"
32#include "main/mtypes.h"
33#include "compiler/shader_enums.h"
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39
40struct _glapi_table;
41struct gl_context;
42struct gl_linked_shader;
43struct gl_pipeline_object;
44struct gl_program;
45struct gl_program_resource;
46struct gl_shader;
47struct gl_shader_program;
48
49extern GLbitfield
50_mesa_get_shader_flags(void);
51
52extern const char *
53_mesa_get_shader_capture_path(void);
54
55extern void
56_mesa_copy_string(GLchar *dst, GLsizei maxLength,
57                  GLsizei *length, const GLchar *src);
58
59extern void
60_mesa_use_shader_program(struct gl_context *ctx,
61                         struct gl_shader_program *shProg);
62
63extern void
64_mesa_active_program(struct gl_context *ctx, struct gl_shader_program *shProg,
65		     const char *caller);
66
67extern void
68_mesa_compile_shader(struct gl_context *ctx, struct gl_shader *sh);
69
70extern void
71_mesa_link_program(struct gl_context *ctx, struct gl_shader_program *sh_prog);
72
73extern unsigned
74_mesa_count_active_attribs(struct gl_shader_program *shProg);
75
76extern size_t
77_mesa_longest_attribute_name_length(struct gl_shader_program *shProg);
78
79extern void
80_mesa_shader_write_subroutine_indices(struct gl_context *ctx,
81                                      gl_shader_stage stage);
82
83void GLAPIENTRY
84_mesa_AttachObjectARB_no_error(GLhandleARB, GLhandleARB);
85
86extern void GLAPIENTRY
87_mesa_AttachObjectARB(GLhandleARB, GLhandleARB);
88
89extern void  GLAPIENTRY
90_mesa_CompileShader(GLuint);
91
92extern GLhandleARB GLAPIENTRY
93_mesa_CreateProgramObjectARB(void);
94
95GLhandleARB GLAPIENTRY
96_mesa_CreateShaderObjectARB_no_error(GLenum type);
97
98extern GLhandleARB GLAPIENTRY
99_mesa_CreateShaderObjectARB(GLenum type);
100
101extern void GLAPIENTRY
102_mesa_DeleteObjectARB(GLhandleARB obj);
103
104void GLAPIENTRY
105_mesa_DetachObjectARB_no_error(GLhandleARB, GLhandleARB);
106
107extern void GLAPIENTRY
108_mesa_DetachObjectARB(GLhandleARB, GLhandleARB);
109
110extern void GLAPIENTRY
111_mesa_GetAttachedObjectsARB(GLhandleARB, GLsizei, GLsizei *, GLhandleARB *);
112
113extern GLint GLAPIENTRY
114_mesa_GetFragDataLocation(GLuint program, const GLchar *name);
115
116extern GLint GLAPIENTRY
117_mesa_GetFragDataIndex(GLuint program, const GLchar *name);
118
119extern GLhandleARB GLAPIENTRY
120_mesa_GetHandleARB(GLenum pname);
121
122extern void GLAPIENTRY
123_mesa_GetInfoLogARB(GLhandleARB, GLsizei, GLsizei *, GLcharARB *);
124
125extern void GLAPIENTRY
126_mesa_GetObjectParameterfvARB(GLhandleARB, GLenum, GLfloat *);
127
128extern void GLAPIENTRY
129_mesa_GetObjectParameterivARB(GLhandleARB, GLenum, GLint *);
130
131extern void GLAPIENTRY
132_mesa_GetShaderSource(GLuint, GLsizei, GLsizei *, GLchar *);
133
134extern GLboolean GLAPIENTRY
135_mesa_IsProgram(GLuint name);
136
137extern GLboolean GLAPIENTRY
138_mesa_IsShader(GLuint name);
139
140void GLAPIENTRY
141_mesa_LinkProgram_no_error(GLuint programObj);
142
143extern void GLAPIENTRY
144_mesa_LinkProgram(GLuint programObj);
145
146void GLAPIENTRY
147_mesa_ShaderSource_no_error(GLuint, GLsizei, const GLchar* const *,
148                            const GLint *);
149
150extern void GLAPIENTRY
151_mesa_ShaderSource(GLuint, GLsizei, const GLchar* const *, const GLint *);
152
153void GLAPIENTRY
154_mesa_UseProgram_no_error(GLuint);
155extern void GLAPIENTRY
156_mesa_UseProgram(GLuint);
157
158extern void GLAPIENTRY
159_mesa_ValidateProgram(GLuint);
160
161
162void GLAPIENTRY
163_mesa_BindAttribLocation_no_error(GLuint program, GLuint, const GLchar *);
164
165extern void GLAPIENTRY
166_mesa_BindAttribLocation(GLuint program, GLuint, const GLchar *);
167
168extern void GLAPIENTRY
169_mesa_BindFragDataLocation(GLuint program, GLuint colorNumber,
170                           const GLchar *name);
171
172extern void GLAPIENTRY
173_mesa_BindFragDataLocationIndexed(GLuint program, GLuint colorNumber,
174                                  GLuint index, const GLchar *name);
175
176extern void GLAPIENTRY
177_mesa_BindFragDataLocation_no_error(GLuint program, GLuint colorNumber,
178                                    const GLchar *name);
179
180extern void GLAPIENTRY
181_mesa_BindFragDataLocationIndexed_no_error(GLuint program, GLuint colorNumber,
182                                           GLuint index, const GLchar *name);
183
184extern void GLAPIENTRY
185_mesa_GetActiveAttrib(GLuint, GLuint, GLsizei, GLsizei *, GLint *,
186                         GLenum *, GLchar *);
187
188extern GLint GLAPIENTRY
189_mesa_GetAttribLocation(GLuint, const GLchar *);
190
191void GLAPIENTRY
192_mesa_AttachShader_no_error(GLuint program, GLuint shader);
193
194extern void GLAPIENTRY
195_mesa_AttachShader(GLuint program, GLuint shader);
196
197GLuint GLAPIENTRY
198_mesa_CreateShader_no_error(GLenum);
199
200extern GLuint GLAPIENTRY
201_mesa_CreateShader(GLenum);
202
203extern GLuint GLAPIENTRY
204_mesa_CreateProgram(void);
205
206extern void GLAPIENTRY
207_mesa_DeleteProgram(GLuint program);
208
209extern void GLAPIENTRY
210_mesa_DeleteShader(GLuint shader);
211
212void GLAPIENTRY
213_mesa_DetachShader_no_error(GLuint program, GLuint shader);
214
215extern void GLAPIENTRY
216_mesa_DetachShader(GLuint program, GLuint shader);
217
218extern void GLAPIENTRY
219_mesa_GetAttachedShaders(GLuint program, GLsizei maxCount,
220                         GLsizei *count, GLuint *obj);
221
222extern void GLAPIENTRY
223_mesa_GetProgramiv(GLuint program, GLenum pname, GLint *params);
224
225extern void GLAPIENTRY
226_mesa_GetProgramInfoLog(GLuint program, GLsizei bufSize,
227                        GLsizei *length, GLchar *infoLog);
228
229extern void GLAPIENTRY
230_mesa_GetShaderiv(GLuint shader, GLenum pname, GLint *params);
231
232extern void GLAPIENTRY
233_mesa_GetShaderInfoLog(GLuint shader, GLsizei bufSize,
234                       GLsizei *length, GLchar *infoLog);
235
236
237extern void GLAPIENTRY
238_mesa_GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype,
239                               GLint *range, GLint *precision);
240
241extern void GLAPIENTRY
242_mesa_ReleaseShaderCompiler(void);
243
244extern void GLAPIENTRY
245_mesa_ShaderBinary(GLint n, const GLuint *shaders, GLenum binaryformat,
246                   const void* binary, GLint length);
247
248extern void GLAPIENTRY
249_mesa_GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length,
250                       GLenum *binaryFormat, GLvoid *binary);
251
252extern void GLAPIENTRY
253_mesa_ProgramBinary(GLuint program, GLenum binaryFormat,
254                    const GLvoid *binary, GLsizei length);
255
256void GLAPIENTRY
257_mesa_ProgramParameteri_no_error(GLuint program, GLenum pname, GLint value);
258
259extern void GLAPIENTRY
260_mesa_ProgramParameteri(GLuint program, GLenum pname, GLint value);
261
262void
263_mesa_use_program(struct gl_context *ctx, gl_shader_stage stage,
264                  struct gl_shader_program *shProg, struct gl_program *prog,
265                  struct gl_pipeline_object *shTarget);
266
267extern void
268_mesa_copy_linked_program_data(const struct gl_shader_program *src,
269                               struct gl_linked_shader *dst_sh);
270
271extern bool
272_mesa_validate_shader_target(const struct gl_context *ctx, GLenum type);
273
274
275/* GL_ARB_separate_shader_objects */
276extern GLuint GLAPIENTRY
277_mesa_CreateShaderProgramv(GLenum type, GLsizei count,
278                           const GLchar* const *strings);
279
280/* GL_ARB_program_resource_query */
281extern const char*
282_mesa_program_resource_name(struct gl_program_resource *res);
283
284extern unsigned
285_mesa_program_resource_array_size(struct gl_program_resource *res);
286
287extern GLuint
288_mesa_program_resource_index(struct gl_shader_program *shProg,
289                             struct gl_program_resource *res);
290
291extern struct gl_program_resource *
292_mesa_program_resource_find_name(struct gl_shader_program *shProg,
293                                 GLenum programInterface, const char *name,
294                                 unsigned *array_index);
295
296extern struct gl_program_resource *
297_mesa_program_resource_find_index(struct gl_shader_program *shProg,
298                                  GLenum programInterface, GLuint index);
299
300extern struct gl_program_resource *
301_mesa_program_resource_find_active_variable(struct gl_shader_program *shProg,
302                                            GLenum programInterface,
303                                            const struct gl_uniform_block *block,
304                                            unsigned index);
305
306extern bool
307_mesa_get_program_resource_name(struct gl_shader_program *shProg,
308                                GLenum programInterface, GLuint index,
309                                GLsizei bufSize, GLsizei *length,
310                                GLchar *name, bool glthread,
311                                const char *caller);
312
313extern unsigned
314_mesa_program_resource_name_len(struct gl_program_resource *res);
315
316extern GLint
317_mesa_program_resource_location(struct gl_shader_program *shProg,
318                                GLenum programInterface, const char *name);
319
320extern GLint
321_mesa_program_resource_location_index(struct gl_shader_program *shProg,
322                                      GLenum programInterface, const char *name);
323
324extern unsigned
325_mesa_program_resource_prop(struct gl_shader_program *shProg,
326                            struct gl_program_resource *res, GLuint index,
327                            const GLenum prop, GLint *val, bool glthread,
328                            const char *caller);
329
330extern void
331_mesa_get_program_resourceiv(struct gl_shader_program *shProg,
332                             GLenum programInterface, GLuint index,
333                             GLsizei propCount, const GLenum *props,
334                             GLsizei bufSize, GLsizei *length,
335                             GLint *params);
336
337extern void
338_mesa_get_program_interfaceiv(struct gl_shader_program *shProg,
339                              GLenum programInterface, GLenum pname,
340                              GLint *params);
341
342extern void
343_mesa_create_program_resource_hash(struct gl_shader_program *shProg);
344
345/* GL_ARB_tessellation_shader */
346void GLAPIENTRY
347_mesa_PatchParameteri_no_error(GLenum pname, GLint value);
348
349extern void GLAPIENTRY
350_mesa_PatchParameteri(GLenum pname, GLint value);
351
352extern void GLAPIENTRY
353_mesa_PatchParameterfv(GLenum pname, const GLfloat *values);
354
355/* GL_ARB_shader_subroutine */
356void
357_mesa_program_init_subroutine_defaults(struct gl_context *ctx,
358                                       struct gl_program *prog);
359
360extern GLint GLAPIENTRY
361_mesa_GetSubroutineUniformLocation(GLuint program, GLenum shadertype,
362                                   const GLchar *name);
363
364extern GLuint GLAPIENTRY
365_mesa_GetSubroutineIndex(GLuint program, GLenum shadertype,
366                         const GLchar *name);
367
368extern GLvoid GLAPIENTRY
369_mesa_GetActiveSubroutineUniformiv(GLuint program, GLenum shadertype,
370                                   GLuint index, GLenum pname, GLint *values);
371
372extern GLvoid GLAPIENTRY
373_mesa_GetActiveSubroutineUniformName(GLuint program, GLenum shadertype,
374                                     GLuint index, GLsizei bufsize,
375                                     GLsizei *length, GLchar *name);
376
377extern GLvoid GLAPIENTRY
378_mesa_GetActiveSubroutineName(GLuint program, GLenum shadertype,
379                              GLuint index, GLsizei bufsize,
380                              GLsizei *length, GLchar *name);
381
382extern GLvoid GLAPIENTRY
383_mesa_UniformSubroutinesuiv(GLenum shadertype, GLsizei count,
384                            const GLuint *indices);
385
386extern GLvoid GLAPIENTRY
387_mesa_GetUniformSubroutineuiv(GLenum shadertype, GLint location,
388                              GLuint *params);
389
390extern GLvoid GLAPIENTRY
391_mesa_GetProgramStageiv(GLuint program, GLenum shadertype,
392                        GLenum pname, GLint *values);
393
394extern GLvoid GLAPIENTRY
395_mesa_NamedStringARB(GLenum type, GLint namelen, const GLchar *name,
396                     GLint stringlen, const GLchar *string);
397
398extern GLvoid GLAPIENTRY
399_mesa_DeleteNamedStringARB(GLint namelen, const GLchar *name);
400
401extern GLvoid GLAPIENTRY
402_mesa_CompileShaderIncludeARB(GLuint shader, GLsizei count,
403                              const GLchar* const *path, const GLint *length);
404
405extern GLboolean GLAPIENTRY
406_mesa_IsNamedStringARB(GLint namelen, const GLchar *name);
407
408extern GLvoid GLAPIENTRY
409_mesa_GetNamedStringARB(GLint namelen, const GLchar *name, GLsizei bufSize,
410                        GLint *stringlen, GLchar *string);
411
412extern GLvoid GLAPIENTRY
413_mesa_GetNamedStringivARB(GLint namelen, const GLchar *name,
414                          GLenum pname, GLint *params);
415
416GLcharARB *
417_mesa_read_shader_source(const gl_shader_stage stage, const char *source);
418
419void
420_mesa_dump_shader_source(const gl_shader_stage stage, const char *source);
421
422void
423_mesa_init_shader_includes(struct gl_shared_state *shared);
424
425size_t
426_mesa_get_shader_include_cursor(struct gl_shared_state *shared);
427
428void
429_mesa_set_shader_include_cursor(struct gl_shared_state *shared, size_t cusor);
430
431void
432_mesa_destroy_shader_includes(struct gl_shared_state *shared);
433
434const char *
435_mesa_lookup_shader_include(struct gl_context *ctx, char *path,
436                            bool error_check);
437
438#ifdef __cplusplus
439}
440#endif
441
442#endif /* SHADERAPI_H */
443