1/*
2 * Mesa 3-D graphics library
3 * Version:  6.5.3
4 *
5 * Copyright (C) 2004-2007  Brian Paul   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 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25
26#ifndef SHADEROBJ_H
27#define SHADEROBJ_H
28
29
30#include "main/compiler.h"
31#include "main/glheader.h"
32#include "main/mtypes.h"
33#include "program/ir_to_mesa.h"
34
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
40
41/**
42 * Internal functions
43 */
44
45extern void
46_mesa_init_shader_state(struct gl_context * ctx);
47
48extern void
49_mesa_free_shader_state(struct gl_context *ctx);
50
51
52extern void
53_mesa_reference_shader(struct gl_context *ctx, struct gl_shader **ptr,
54                       struct gl_shader *sh);
55
56extern struct gl_shader *
57_mesa_lookup_shader(struct gl_context *ctx, GLuint name);
58
59extern struct gl_shader *
60_mesa_lookup_shader_err(struct gl_context *ctx, GLuint name, const char *caller);
61
62
63
64extern void
65_mesa_reference_shader_program(struct gl_context *ctx,
66                               struct gl_shader_program **ptr,
67                               struct gl_shader_program *shProg);
68extern void
69_mesa_init_shader(struct gl_context *ctx, struct gl_shader *shader);
70
71extern struct gl_shader *
72_mesa_new_shader(struct gl_context *ctx, GLuint name, GLenum type);
73
74extern void
75_mesa_init_shader_program(struct gl_context *ctx, struct gl_shader_program *prog);
76
77extern struct gl_shader_program *
78_mesa_lookup_shader_program(struct gl_context *ctx, GLuint name);
79
80extern struct gl_shader_program *
81_mesa_lookup_shader_program_err(struct gl_context *ctx, GLuint name,
82                                const char *caller);
83
84extern void
85_mesa_clear_shader_program_data(struct gl_context *ctx,
86                                struct gl_shader_program *shProg);
87
88extern void
89_mesa_free_shader_program_data(struct gl_context *ctx,
90                               struct gl_shader_program *shProg);
91
92
93
94extern void
95_mesa_init_shader_object_functions(struct dd_function_table *driver);
96
97extern void
98_mesa_init_shader_state(struct gl_context *ctx);
99
100extern void
101_mesa_free_shader_state(struct gl_context *ctx);
102
103
104static inline gl_shader_type
105_mesa_shader_type_to_index(GLenum v)
106{
107   switch (v) {
108   case GL_VERTEX_SHADER:
109      return MESA_SHADER_VERTEX;
110   case GL_FRAGMENT_SHADER:
111      return MESA_SHADER_FRAGMENT;
112   case GL_GEOMETRY_SHADER:
113      return MESA_SHADER_GEOMETRY;
114   default:
115      ASSERT(0 && "bad value in _mesa_shader_type_to_index()");
116      return MESA_SHADER_TYPES;
117   }
118}
119
120
121static inline GLenum
122_mesa_shader_index_to_type(GLuint i)
123{
124   static const GLenum enums[MESA_SHADER_TYPES] = {
125      GL_VERTEX_SHADER,
126      GL_FRAGMENT_SHADER,
127      GL_GEOMETRY_SHADER ,
128   };
129   if (i >= MESA_SHADER_TYPES)
130      return 0;
131   else
132      return enums[i];
133}
134
135
136#ifdef __cplusplus
137}
138#endif
139
140#endif /* SHADEROBJ_H */
141