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