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