program.h revision 59c67f81165fadd46c99cda5623397c798f015eb
1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Mesa 3-D graphics library
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Version:  6.5.3
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Permission is hereby granted, free of charge, to any person obtaining a
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * copy of this software and associated documentation files (the "Software"),
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * to deal in the Software without restriction, including without limitation
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * and/or sell copies of the Software, and to permit persons to whom the
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Software is furnished to do so, subject to the following conditions:
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * The above copyright notice and this permission notice shall be included
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * in all copies or substantial portions of the Software.
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * \file program.c
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Vertex and fragment program support functions.
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * \author Brian Paul
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * \mainpage Mesa vertex and fragment program module
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
359dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan * This module or directory contains most of the code for vertex and
369dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan * fragment programs and shaders, including state management, parsers,
379dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan * and (some) software routines for executing programs
389dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan */
399dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
409dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan#ifndef PROGRAM_H
419dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan#define PROGRAM_H
422b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang
439dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan#include "main/compiler.h"
449dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan#include "main/mtypes.h"
459dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
462b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang
479dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyanextern struct gl_program _mesa_DummyProgram;
489dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
499dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
502b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wangextern void
519dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_init_program(struct gl_context *ctx);
522b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang
539dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyanextern void
549dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_free_program_data(struct gl_context *ctx);
552b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang
569dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyanextern void
579dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_update_default_objects_program(struct gl_context *ctx);
582b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang
599dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyanextern void
609dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_set_program_error(struct gl_context *ctx, GLint pos, const char *string);
612b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang
629dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyanextern const GLubyte *
639dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_find_line_column(const GLubyte *string, const GLubyte *pos,
642b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang                       GLint *line, GLint *col);
659dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
669dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
679dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyanextern struct gl_program *
689dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_init_vertex_program(struct gl_context *ctx,
699dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan                          struct gl_vertex_program *prog,
709dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan                          GLenum target, GLuint id);
719dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
729dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyanextern struct gl_program *
739dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_init_fragment_program(struct gl_context *ctx,
742b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang                            struct gl_fragment_program *prog,
759dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan                            GLenum target, GLuint id);
769dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
772b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wangextern struct gl_program *
789dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_init_geometry_program(struct gl_context *ctx,
799dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan                            struct gl_geometry_program *prog,
802b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang                            GLenum target, GLuint id);
819dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
822b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wangextern struct gl_program *
839dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_new_program(struct gl_context *ctx, GLenum target, GLuint id);
849dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
859dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyanextern void
869dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_delete_program(struct gl_context *ctx, struct gl_program *prog);
879dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
889dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyanextern struct gl_program *
899dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_lookup_program(struct gl_context *ctx, GLuint id);
902b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang
919dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyanextern void
929dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_reference_program_(struct gl_context *ctx,
932b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wang                         struct gl_program **ptr,
949dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan                         struct gl_program *prog);
959dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan
962b48b9a946dff3f11963e3f486f5eb71934c55d4Chung-yih Wangstatic inline void
979dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan_mesa_reference_program(struct gl_context *ctx,
989dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan                        struct gl_program **ptr,
999dfe3bfcff830a47aa2451d05f04a937a279532aHung-ying Tyan                        struct gl_program *prog)
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   if (*ptr != prog)
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      _mesa_reference_program_(ctx, ptr, prog);
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline void
106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_reference_vertprog(struct gl_context *ctx,
107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                         struct gl_vertex_program **ptr,
108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                         struct gl_vertex_program *prog)
109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   _mesa_reference_program(ctx, (struct gl_program **) ptr,
111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                           (struct gl_program *) prog);
112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline void
115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_reference_fragprog(struct gl_context *ctx,
116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                         struct gl_fragment_program **ptr,
117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                         struct gl_fragment_program *prog)
118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   _mesa_reference_program(ctx, (struct gl_program **) ptr,
120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                           (struct gl_program *) prog);
121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline void
124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_reference_geomprog(struct gl_context *ctx,
125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                         struct gl_geometry_program **ptr,
126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                         struct gl_geometry_program *prog)
127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   _mesa_reference_program(ctx, (struct gl_program **) ptr,
129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                           (struct gl_program *) prog);
130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangextern struct gl_program *
133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_clone_program(struct gl_context *ctx, const struct gl_program *prog);
134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline struct gl_vertex_program *
136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_clone_vertex_program(struct gl_context *ctx,
137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                           const struct gl_vertex_program *prog)
138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   return (struct gl_vertex_program *) _mesa_clone_program(ctx, &prog->Base);
140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline struct gl_geometry_program *
143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_clone_geometry_program(struct gl_context *ctx,
144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                             const struct gl_geometry_program *prog)
145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   return (struct gl_geometry_program *) _mesa_clone_program(ctx, &prog->Base);
147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline struct gl_fragment_program *
150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_clone_fragment_program(struct gl_context *ctx,
151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                             const struct gl_fragment_program *prog)
152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   return (struct gl_fragment_program *) _mesa_clone_program(ctx, &prog->Base);
154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangextern  GLboolean
158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_insert_instructions(struct gl_program *prog, GLuint start, GLuint count);
159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangextern  GLboolean
161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_delete_instructions(struct gl_program *prog, GLuint start, GLuint count);
162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangextern struct gl_program *
164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_combine_programs(struct gl_context *ctx,
165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                       const struct gl_program *progA,
166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                       const struct gl_program *progB);
167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangextern void
169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_find_used_registers(const struct gl_program *prog,
170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                          gl_register_file file,
171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                          GLboolean used[], GLuint usedSize);
172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangextern GLint
174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_find_free_register(const GLboolean used[],
175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                         GLuint maxRegs, GLuint firstReg);
176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangextern GLboolean
179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_valid_register_index(const struct gl_context *ctx,
180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                           gl_shader_type shaderType,
181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                           gl_register_file file, GLint index);
182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangextern void
184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_postprocess_program(struct gl_context *ctx, struct gl_program *prog);
185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline GLuint
188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_program_target_to_index(GLenum v)
189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   switch (v) {
191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   case GL_VERTEX_PROGRAM_ARB:
192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      return MESA_SHADER_VERTEX;
193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   case GL_FRAGMENT_PROGRAM_ARB:
194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      return MESA_SHADER_FRAGMENT;
195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   case GL_GEOMETRY_PROGRAM_NV:
196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      return MESA_SHADER_GEOMETRY;
197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   default:
198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      ASSERT(0);
199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      return ~0;
200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   }
201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline GLenum
204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang_mesa_program_index_to_target(GLuint i)
205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   static const GLenum enums[MESA_SHADER_TYPES] = {
207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      GL_VERTEX_PROGRAM_ARB,
208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      GL_FRAGMENT_PROGRAM_ARB,
209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      GL_GEOMETRY_PROGRAM_NV,
210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   };
211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   if(i >= MESA_SHADER_TYPES)
212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      return 0;
213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   else
214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang      return enums[i];
215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/* Cast wrappers from gl_program to gl_vertex/geometry/fragment_program */
219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline struct gl_fragment_program *
221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wanggl_fragment_program(struct gl_program *prog)
222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   return (struct gl_fragment_program *) prog;
224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline const struct gl_fragment_program *
227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wanggl_fragment_program_const(const struct gl_program *prog)
228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   return (const struct gl_fragment_program *) prog;
230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline struct gl_vertex_program *
234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wanggl_vertex_program(struct gl_program *prog)
235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   return (struct gl_vertex_program *) prog;
237600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
238600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
239600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline const struct gl_vertex_program *
240600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wanggl_vertex_program_const(const struct gl_program *prog)
241600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
242600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   return (const struct gl_vertex_program *) prog;
243600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
244600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
245600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
246600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline struct gl_geometry_program *
247600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wanggl_geometry_program(struct gl_program *prog)
248600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
249600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   return (struct gl_geometry_program *) prog;
250600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
251600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
252600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangstatic inline const struct gl_geometry_program *
253600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wanggl_geometry_program_const(const struct gl_program *prog)
254600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang{
255600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang   return (const struct gl_geometry_program *) prog;
256600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
257600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
258600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
259600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang#endif /* PROGRAM_H */
260600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang