shaderapi.h revision b8e80941
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 "compiler/shader_enums.h" 33 34#ifdef __cplusplus 35extern "C" { 36#endif 37 38 39struct _glapi_table; 40struct gl_context; 41struct gl_linked_shader; 42struct gl_pipeline_object; 43struct gl_program; 44struct gl_program_resource; 45struct gl_shader; 46struct gl_shader_program; 47 48extern GLbitfield 49_mesa_get_shader_flags(void); 50 51extern const char * 52_mesa_get_shader_capture_path(void); 53 54extern void 55_mesa_copy_string(GLchar *dst, GLsizei maxLength, 56 GLsizei *length, const GLchar *src); 57 58extern void 59_mesa_use_shader_program(struct gl_context *ctx, 60 struct gl_shader_program *shProg); 61 62extern void 63_mesa_active_program(struct gl_context *ctx, struct gl_shader_program *shProg, 64 const char *caller); 65 66extern void 67_mesa_compile_shader(struct gl_context *ctx, struct gl_shader *sh); 68 69extern void 70_mesa_link_program(struct gl_context *ctx, struct gl_shader_program *sh_prog); 71 72extern unsigned 73_mesa_count_active_attribs(struct gl_shader_program *shProg); 74 75extern size_t 76_mesa_longest_attribute_name_length(struct gl_shader_program *shProg); 77 78extern void 79_mesa_shader_write_subroutine_indices(struct gl_context *ctx, 80 gl_shader_stage stage); 81 82void GLAPIENTRY 83_mesa_AttachObjectARB_no_error(GLhandleARB, GLhandleARB); 84 85extern void GLAPIENTRY 86_mesa_AttachObjectARB(GLhandleARB, GLhandleARB); 87 88extern void GLAPIENTRY 89_mesa_CompileShader(GLuint); 90 91extern GLhandleARB GLAPIENTRY 92_mesa_CreateProgramObjectARB(void); 93 94GLhandleARB GLAPIENTRY 95_mesa_CreateShaderObjectARB_no_error(GLenum type); 96 97extern GLhandleARB GLAPIENTRY 98_mesa_CreateShaderObjectARB(GLenum type); 99 100extern void GLAPIENTRY 101_mesa_DeleteObjectARB(GLhandleARB obj); 102 103void GLAPIENTRY 104_mesa_DetachObjectARB_no_error(GLhandleARB, GLhandleARB); 105 106extern void GLAPIENTRY 107_mesa_DetachObjectARB(GLhandleARB, GLhandleARB); 108 109extern void GLAPIENTRY 110_mesa_GetAttachedObjectsARB(GLhandleARB, GLsizei, GLsizei *, GLhandleARB *); 111 112extern GLint GLAPIENTRY 113_mesa_GetFragDataLocation(GLuint program, const GLchar *name); 114 115extern GLint GLAPIENTRY 116_mesa_GetFragDataIndex(GLuint program, const GLchar *name); 117 118extern GLhandleARB GLAPIENTRY 119_mesa_GetHandleARB(GLenum pname); 120 121extern void GLAPIENTRY 122_mesa_GetInfoLogARB(GLhandleARB, GLsizei, GLsizei *, GLcharARB *); 123 124extern void GLAPIENTRY 125_mesa_GetObjectParameterfvARB(GLhandleARB, GLenum, GLfloat *); 126 127extern void GLAPIENTRY 128_mesa_GetObjectParameterivARB(GLhandleARB, GLenum, GLint *); 129 130extern void GLAPIENTRY 131_mesa_GetShaderSource(GLuint, GLsizei, GLsizei *, GLchar *); 132 133extern GLboolean GLAPIENTRY 134_mesa_IsProgram(GLuint name); 135 136extern GLboolean GLAPIENTRY 137_mesa_IsShader(GLuint name); 138 139void GLAPIENTRY 140_mesa_LinkProgram_no_error(GLuint programObj); 141 142extern void GLAPIENTRY 143_mesa_LinkProgram(GLuint programObj); 144 145void GLAPIENTRY 146_mesa_ShaderSource_no_error(GLuint, GLsizei, const GLchar* const *, 147 const GLint *); 148 149extern void GLAPIENTRY 150_mesa_ShaderSource(GLuint, GLsizei, const GLchar* const *, const GLint *); 151 152void GLAPIENTRY 153_mesa_UseProgram_no_error(GLuint); 154extern void GLAPIENTRY 155_mesa_UseProgram(GLuint); 156 157extern void GLAPIENTRY 158_mesa_ValidateProgram(GLuint); 159 160 161void GLAPIENTRY 162_mesa_BindAttribLocation_no_error(GLuint program, GLuint, const GLchar *); 163 164extern void GLAPIENTRY 165_mesa_BindAttribLocation(GLuint program, GLuint, const GLchar *); 166 167extern void GLAPIENTRY 168_mesa_BindFragDataLocation(GLuint program, GLuint colorNumber, 169 const GLchar *name); 170 171extern void GLAPIENTRY 172_mesa_BindFragDataLocationIndexed(GLuint program, GLuint colorNumber, 173 GLuint index, const GLchar *name); 174 175extern void GLAPIENTRY 176_mesa_BindFragDataLocation_no_error(GLuint program, GLuint colorNumber, 177 const GLchar *name); 178 179extern void GLAPIENTRY 180_mesa_BindFragDataLocationIndexed_no_error(GLuint program, GLuint colorNumber, 181 GLuint index, const GLchar *name); 182 183extern void GLAPIENTRY 184_mesa_GetActiveAttrib(GLuint, GLuint, GLsizei, GLsizei *, GLint *, 185 GLenum *, GLchar *); 186 187extern GLint GLAPIENTRY 188_mesa_GetAttribLocation(GLuint, const GLchar *); 189 190void GLAPIENTRY 191_mesa_AttachShader_no_error(GLuint program, GLuint shader); 192 193extern void GLAPIENTRY 194_mesa_AttachShader(GLuint program, GLuint shader); 195 196GLuint GLAPIENTRY 197_mesa_CreateShader_no_error(GLenum); 198 199extern GLuint GLAPIENTRY 200_mesa_CreateShader(GLenum); 201 202extern GLuint GLAPIENTRY 203_mesa_CreateProgram(void); 204 205extern void GLAPIENTRY 206_mesa_DeleteProgram(GLuint program); 207 208extern void GLAPIENTRY 209_mesa_DeleteShader(GLuint shader); 210 211void GLAPIENTRY 212_mesa_DetachShader_no_error(GLuint program, GLuint shader); 213 214extern void GLAPIENTRY 215_mesa_DetachShader(GLuint program, GLuint shader); 216 217extern void GLAPIENTRY 218_mesa_GetAttachedShaders(GLuint program, GLsizei maxCount, 219 GLsizei *count, GLuint *obj); 220 221extern void GLAPIENTRY 222_mesa_GetProgramiv(GLuint program, GLenum pname, GLint *params); 223 224extern void GLAPIENTRY 225_mesa_GetProgramInfoLog(GLuint program, GLsizei bufSize, 226 GLsizei *length, GLchar *infoLog); 227 228extern void GLAPIENTRY 229_mesa_GetShaderiv(GLuint shader, GLenum pname, GLint *params); 230 231extern void GLAPIENTRY 232_mesa_GetShaderInfoLog(GLuint shader, GLsizei bufSize, 233 GLsizei *length, GLchar *infoLog); 234 235 236extern void GLAPIENTRY 237_mesa_GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, 238 GLint *range, GLint *precision); 239 240extern void GLAPIENTRY 241_mesa_ReleaseShaderCompiler(void); 242 243extern void GLAPIENTRY 244_mesa_ShaderBinary(GLint n, const GLuint *shaders, GLenum binaryformat, 245 const void* binary, GLint length); 246 247extern void GLAPIENTRY 248_mesa_GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei *length, 249 GLenum *binaryFormat, GLvoid *binary); 250 251extern void GLAPIENTRY 252_mesa_ProgramBinary(GLuint program, GLenum binaryFormat, 253 const GLvoid *binary, GLsizei length); 254 255void GLAPIENTRY 256_mesa_ProgramParameteri_no_error(GLuint program, GLenum pname, GLint value); 257 258extern void GLAPIENTRY 259_mesa_ProgramParameteri(GLuint program, GLenum pname, GLint value); 260 261void 262_mesa_use_program(struct gl_context *ctx, gl_shader_stage stage, 263 struct gl_shader_program *shProg, struct gl_program *prog, 264 struct gl_pipeline_object *shTarget); 265 266extern void 267_mesa_copy_linked_program_data(const struct gl_shader_program *src, 268 struct gl_linked_shader *dst_sh); 269 270extern bool 271_mesa_validate_shader_target(const struct gl_context *ctx, GLenum type); 272 273 274/* GL_ARB_separate_shader_objects */ 275extern GLuint GLAPIENTRY 276_mesa_CreateShaderProgramv(GLenum type, GLsizei count, 277 const GLchar* const *strings); 278 279/* GL_ARB_program_resource_query */ 280extern const char* 281_mesa_program_resource_name(struct gl_program_resource *res); 282 283extern unsigned 284_mesa_program_resource_array_size(struct gl_program_resource *res); 285 286extern GLuint 287_mesa_program_resource_index(struct gl_shader_program *shProg, 288 struct gl_program_resource *res); 289 290extern struct gl_program_resource * 291_mesa_program_resource_find_name(struct gl_shader_program *shProg, 292 GLenum programInterface, const char *name, 293 unsigned *array_index); 294 295extern struct gl_program_resource * 296_mesa_program_resource_find_index(struct gl_shader_program *shProg, 297 GLenum programInterface, GLuint index); 298 299extern bool 300_mesa_get_program_resource_name(struct gl_shader_program *shProg, 301 GLenum programInterface, GLuint index, 302 GLsizei bufSize, GLsizei *length, 303 GLchar *name, const char *caller); 304 305extern unsigned 306_mesa_program_resource_name_len(struct gl_program_resource *res); 307 308extern GLint 309_mesa_program_resource_location(struct gl_shader_program *shProg, 310 GLenum programInterface, const char *name); 311 312extern GLint 313_mesa_program_resource_location_index(struct gl_shader_program *shProg, 314 GLenum programInterface, const char *name); 315 316extern unsigned 317_mesa_program_resource_prop(struct gl_shader_program *shProg, 318 struct gl_program_resource *res, GLuint index, 319 const GLenum prop, GLint *val, const char *caller); 320 321extern void 322_mesa_get_program_resourceiv(struct gl_shader_program *shProg, 323 GLenum programInterface, GLuint index, 324 GLsizei propCount, const GLenum *props, 325 GLsizei bufSize, GLsizei *length, 326 GLint *params); 327 328/* GL_ARB_tessellation_shader */ 329void GLAPIENTRY 330_mesa_PatchParameteri_no_error(GLenum pname, GLint value); 331 332extern void GLAPIENTRY 333_mesa_PatchParameteri(GLenum pname, GLint value); 334 335extern void GLAPIENTRY 336_mesa_PatchParameterfv(GLenum pname, const GLfloat *values); 337 338/* GL_ARB_shader_subroutine */ 339void 340_mesa_program_init_subroutine_defaults(struct gl_context *ctx, 341 struct gl_program *prog); 342 343extern GLint GLAPIENTRY 344_mesa_GetSubroutineUniformLocation(GLuint program, GLenum shadertype, 345 const GLchar *name); 346 347extern GLuint GLAPIENTRY 348_mesa_GetSubroutineIndex(GLuint program, GLenum shadertype, 349 const GLchar *name); 350 351extern GLvoid GLAPIENTRY 352_mesa_GetActiveSubroutineUniformiv(GLuint program, GLenum shadertype, 353 GLuint index, GLenum pname, GLint *values); 354 355extern GLvoid GLAPIENTRY 356_mesa_GetActiveSubroutineUniformName(GLuint program, GLenum shadertype, 357 GLuint index, GLsizei bufsize, 358 GLsizei *length, GLchar *name); 359 360extern GLvoid GLAPIENTRY 361_mesa_GetActiveSubroutineName(GLuint program, GLenum shadertype, 362 GLuint index, GLsizei bufsize, 363 GLsizei *length, GLchar *name); 364 365extern GLvoid GLAPIENTRY 366_mesa_UniformSubroutinesuiv(GLenum shadertype, GLsizei count, 367 const GLuint *indices); 368 369extern GLvoid GLAPIENTRY 370_mesa_GetUniformSubroutineuiv(GLenum shadertype, GLint location, 371 GLuint *params); 372 373extern GLvoid GLAPIENTRY 374_mesa_GetProgramStageiv(GLuint program, GLenum shadertype, 375 GLenum pname, GLint *values); 376 377GLcharARB * 378_mesa_read_shader_source(const gl_shader_stage stage, const char *source); 379 380void 381_mesa_dump_shader_source(const gl_shader_stage stage, const char *source); 382 383#ifdef __cplusplus 384} 385#endif 386 387#endif /* SHADERAPI_H */ 388