18e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell/************************************************************************** 28e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 38e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 48e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * All Rights Reserved. 58e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 68e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 78e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * copy of this software and associated documentation files (the 88e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * "Software"), to deal in the Software without restriction, including 98e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 108e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 118e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to 128e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * the following conditions: 138e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 148e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * The above copyright notice and this permission notice (including the 158e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * next paragraph) shall be included in all copies or substantial portions 168e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * of the Software. 178e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 188e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 198e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 208e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 218e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 228e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 238e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 248e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 258e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * 268e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell **************************************************************************/ 278e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 288e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell /* 298e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * Authors: 308e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell * Keith Whitwell <keith@tungstengraphics.com> 318e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell */ 328e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 338e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 348e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell#ifndef ST_PROGRAM_H 358e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell#define ST_PROGRAM_H 368e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 37a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul#include "main/mtypes.h" 38ec2b92f98c2e7f161521b447cc1d9a36bce3707cBrian Paul#include "program/program.h" 39f717fd25cc44d7dda5a49dc05337c7ee7c8d2d2fVinson Lee#include "pipe/p_state.h" 40f717fd25cc44d7dda5a49dc05337c7ee7c8d2d2fVinson Lee#include "st_context.h" 41f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cain#include "st_glsl_to_tgsi.h" 424824c342c864e870251a7d343c95e51274e50d23Keith Whitwell 43636480cc9c7836daf879cb45644900922cf31f47Brian 443d203b610045980853d26370ee21fb2ef4aed17eBrian Paul/** Fragment program variant key */ 45aa5ba96d294698809186cc4b59034abbd3076812Brian Paulstruct st_fp_variant_key 463d203b610045980853d26370ee21fb2ef4aed17eBrian Paul{ 473d203b610045980853d26370ee21fb2ef4aed17eBrian Paul struct st_context *st; /**< variants are per-context */ 483d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 493d203b610045980853d26370ee21fb2ef4aed17eBrian Paul /** for glBitmap */ 50aa5ba96d294698809186cc4b59034abbd3076812Brian Paul GLuint bitmap:1; /**< glBitmap variant? */ 513d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 523d203b610045980853d26370ee21fb2ef4aed17eBrian Paul /** for glDrawPixels */ 53aa5ba96d294698809186cc4b59034abbd3076812Brian Paul GLuint drawpixels:1; /**< glDrawPixels variant */ 543d203b610045980853d26370ee21fb2ef4aed17eBrian Paul GLuint scaleAndBias:1; /**< glDrawPixels w/ scale and/or bias? */ 553d203b610045980853d26370ee21fb2ef4aed17eBrian Paul GLuint pixelMaps:1; /**< glDrawPixels w/ pixel lookup map? */ 563d203b610045980853d26370ee21fb2ef4aed17eBrian Paul GLuint drawpixels_z:1; /**< glDrawPixels(GL_DEPTH) */ 573d203b610045980853d26370ee21fb2ef4aed17eBrian Paul GLuint drawpixels_stencil:1; /**< glDrawPixels(GL_STENCIL) */ 58bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák 59bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák /** for ARB_color_buffer_float */ 60bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák GLuint clamp_color:1; 613d203b610045980853d26370ee21fb2ef4aed17eBrian Paul}; 623d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 633d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 643d203b610045980853d26370ee21fb2ef4aed17eBrian Paul/** 653d203b610045980853d26370ee21fb2ef4aed17eBrian Paul * Variant of a fragment program. 663d203b610045980853d26370ee21fb2ef4aed17eBrian Paul */ 67aa5ba96d294698809186cc4b59034abbd3076812Brian Paulstruct st_fp_variant 683d203b610045980853d26370ee21fb2ef4aed17eBrian Paul{ 693d203b610045980853d26370ee21fb2ef4aed17eBrian Paul /** Parameters which generated this version of fragment program */ 70aa5ba96d294698809186cc4b59034abbd3076812Brian Paul struct st_fp_variant_key key; 713d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 72732f69c94e17aae8dae98cdc84fdb232fdda2484Marek Olšák struct pipe_shader_state tgsi; 73732f69c94e17aae8dae98cdc84fdb232fdda2484Marek Olšák 743d203b610045980853d26370ee21fb2ef4aed17eBrian Paul /** Driver's compiled shader */ 753d203b610045980853d26370ee21fb2ef4aed17eBrian Paul void *driver_shader; 763d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 773d203b610045980853d26370ee21fb2ef4aed17eBrian Paul /** For glBitmap variants */ 783d203b610045980853d26370ee21fb2ef4aed17eBrian Paul struct gl_program_parameter_list *parameters; 793d203b610045980853d26370ee21fb2ef4aed17eBrian Paul uint bitmap_sampler; 803d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 813d203b610045980853d26370ee21fb2ef4aed17eBrian Paul /** next in linked list */ 82aa5ba96d294698809186cc4b59034abbd3076812Brian Paul struct st_fp_variant *next; 833d203b610045980853d26370ee21fb2ef4aed17eBrian Paul}; 843d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 853d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 86636480cc9c7836daf879cb45644900922cf31f47Brian/** 87636480cc9c7836daf879cb45644900922cf31f47Brian * Derived from Mesa gl_fragment_program: 88636480cc9c7836daf879cb45644900922cf31f47Brian */ 898e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwellstruct st_fragment_program 908e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell{ 918e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell struct gl_fragment_program Base; 92f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cain struct glsl_to_tgsi_visitor* glsl_to_tgsi; 938e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 94aa5ba96d294698809186cc4b59034abbd3076812Brian Paul struct st_fp_variant *variants; 958e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell}; 968e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 978e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell 9807fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell 99b830b62a47dec70640062c488cbebd2c8ac487f9Brian Paul/** Vertex program variant key */ 100aa5ba96d294698809186cc4b59034abbd3076812Brian Paulstruct st_vp_variant_key 10107fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell{ 1023d203b610045980853d26370ee21fb2ef4aed17eBrian Paul struct st_context *st; /**< variants are per-context */ 103a08e348a84f57ed5e8bf5888f1ce13934d2ce8faKeith Whitwell boolean passthrough_edgeflags; 104bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák 105bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák /** for ARB_color_buffer_float */ 106bc1c8369384b5e16547c5bf9728aa78f8dfd66ccMarek Olšák boolean clamp_color; 10707fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell}; 10807fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell 10907fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell 11007fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell/** 11107fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell * This represents a vertex program, especially translated to match 11207fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell * the inputs of a particular fragment shader. 11307fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell */ 114aa5ba96d294698809186cc4b59034abbd3076812Brian Paulstruct st_vp_variant 11507fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell{ 11607fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell /* Parameters which generated this translated version of a vertex 11707fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell * shader: 11807fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell */ 119aa5ba96d294698809186cc4b59034abbd3076812Brian Paul struct st_vp_variant_key key; 12007fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell 121b9b4e7724e5ae80121a053ca66cee73942cc16b7Brian Paul /** 122b9b4e7724e5ae80121a053ca66cee73942cc16b7Brian Paul * TGSI tokens (to later generate a 'draw' module shader for 123b9b4e7724e5ae80121a053ca66cee73942cc16b7Brian Paul * selection/feedback/rasterpos) 12407fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell */ 125b9b4e7724e5ae80121a053ca66cee73942cc16b7Brian Paul struct pipe_shader_state tgsi; 12607fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell 12707fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell /** Driver's compiled shader */ 12807fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell void *driver_shader; 12907fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell 13007fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell /** For using our private draw module (glRasterPos) */ 13107fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell struct draw_vertex_shader *draw_shader; 13207fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell 13307fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell /** Next in linked list */ 134aa5ba96d294698809186cc4b59034abbd3076812Brian Paul struct st_vp_variant *next; 13550caff5675888c0063c73fa64b88129db7aa11ddRoland Scheidegger 136b830b62a47dec70640062c488cbebd2c8ac487f9Brian Paul /** similar to that in st_vertex_program, but with edgeflags info too */ 13750caff5675888c0063c73fa64b88129db7aa11ddRoland Scheidegger GLuint num_inputs; 13807fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell}; 13907fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell 14007fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell 141636480cc9c7836daf879cb45644900922cf31f47Brian/** 142636480cc9c7836daf879cb45644900922cf31f47Brian * Derived from Mesa gl_fragment_program: 143636480cc9c7836daf879cb45644900922cf31f47Brian */ 1444824c342c864e870251a7d343c95e51274e50d23Keith Whitwellstruct st_vertex_program 1454824c342c864e870251a7d343c95e51274e50d23Keith Whitwell{ 146bb611c5f1f6aec7ac51d4fa3301422b47f6de795Brian struct gl_vertex_program Base; /**< The Mesa vertex program */ 147f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cain struct glsl_to_tgsi_visitor* glsl_to_tgsi; 148bb611c5f1f6aec7ac51d4fa3301422b47f6de795Brian 149bb611c5f1f6aec7ac51d4fa3301422b47f6de795Brian /** maps a Mesa VERT_ATTRIB_x to a packed TGSI input index */ 150fa7a5898761fc106c9dbef6f640ce4654eae5136Brian GLuint input_to_index[VERT_ATTRIB_MAX]; 151bb611c5f1f6aec7ac51d4fa3301422b47f6de795Brian /** maps a TGSI input index back to a Mesa VERT_ATTRIB_x */ 152636480cc9c7836daf879cb45644900922cf31f47Brian GLuint index_to_input[PIPE_MAX_SHADER_INPUTS]; 153fa9e7e9a8debb68611909ac2ffab527c6c39a3e5Brian Paul GLuint num_inputs; 154fa9e7e9a8debb68611909ac2ffab527c6c39a3e5Brian Paul 15507fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell /** Maps VERT_RESULT_x to slot */ 15607fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell GLuint result_to_output[VERT_RESULT_MAX]; 15707fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell ubyte output_semantic_name[VERT_RESULT_MAX]; 15807fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell ubyte output_semantic_index[VERT_RESULT_MAX]; 15907fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell GLuint num_outputs; 160ac95fee4fffee77bb7bd798d094ed2e3a7c4019bBrian 161aa5ba96d294698809186cc4b59034abbd3076812Brian Paul /** List of translated variants of this vertex program. 16207fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell */ 163aa5ba96d294698809186cc4b59034abbd3076812Brian Paul struct st_vp_variant *variants; 1644824c342c864e870251a7d343c95e51274e50d23Keith Whitwell}; 1654824c342c864e870251a7d343c95e51274e50d23Keith Whitwell 1663d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 1673d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 168aa5ba96d294698809186cc4b59034abbd3076812Brian Paul/** Geometry program variant key */ 169aa5ba96d294698809186cc4b59034abbd3076812Brian Paulstruct st_gp_variant_key 1703d203b610045980853d26370ee21fb2ef4aed17eBrian Paul{ 1713d203b610045980853d26370ee21fb2ef4aed17eBrian Paul struct st_context *st; /**< variants are per-context */ 1723d203b610045980853d26370ee21fb2ef4aed17eBrian Paul /* no other fields yet */ 1733d203b610045980853d26370ee21fb2ef4aed17eBrian Paul}; 1743d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 1753d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 1763d203b610045980853d26370ee21fb2ef4aed17eBrian Paul/** 1773d203b610045980853d26370ee21fb2ef4aed17eBrian Paul * Geometry program variant. 1783d203b610045980853d26370ee21fb2ef4aed17eBrian Paul */ 179aa5ba96d294698809186cc4b59034abbd3076812Brian Paulstruct st_gp_variant 1803d203b610045980853d26370ee21fb2ef4aed17eBrian Paul{ 1813d203b610045980853d26370ee21fb2ef4aed17eBrian Paul /* Parameters which generated this translated version of a vertex */ 182aa5ba96d294698809186cc4b59034abbd3076812Brian Paul struct st_gp_variant_key key; 1833d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 1843d203b610045980853d26370ee21fb2ef4aed17eBrian Paul void *driver_shader; 1853d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 186aa5ba96d294698809186cc4b59034abbd3076812Brian Paul struct st_gp_variant *next; 1873d203b610045980853d26370ee21fb2ef4aed17eBrian Paul}; 1883d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 1893d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 190da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin/** 191da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin * Derived from Mesa gl_geometry_program: 192da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin */ 193da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusinstruct st_geometry_program 194da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin{ 195da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct gl_geometry_program Base; /**< The Mesa geometry program */ 196f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cain struct glsl_to_tgsi_visitor* glsl_to_tgsi; 197da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 198da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin /** map GP input back to VP output */ 199da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLuint input_map[PIPE_MAX_SHADER_INPUTS]; 200da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 201da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin /** maps a Mesa GEOM_ATTRIB_x to a packed TGSI input index */ 202da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLuint input_to_index[GEOM_ATTRIB_MAX]; 203da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin /** maps a TGSI input index back to a Mesa GEOM_ATTRIB_x */ 204da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLuint index_to_input[PIPE_MAX_SHADER_INPUTS]; 205da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 206da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLuint num_inputs; 207da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 208da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLuint input_to_slot[GEOM_ATTRIB_MAX]; /**< Maps GEOM_ATTRIB_x to slot */ 209da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GLuint num_input_slots; 210da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 211da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin ubyte input_semantic_name[PIPE_MAX_SHADER_INPUTS]; 212da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin ubyte input_semantic_index[PIPE_MAX_SHADER_INPUTS]; 213da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 214da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct pipe_shader_state tgsi; 2153d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 216aa5ba96d294698809186cc4b59034abbd3076812Brian Paul struct st_gp_variant *variants; 217da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin}; 2186da9234fd437f97267e7831f034c78b31156d939Brian 2193d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 2203d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 2217e4bc84dfc6c05cea3d6fc52173708ddeb33cf45Alan Hourihanestatic INLINE struct st_fragment_program * 2224824c342c864e870251a7d343c95e51274e50d23Keith Whitwellst_fragment_program( struct gl_fragment_program *fp ) 2234824c342c864e870251a7d343c95e51274e50d23Keith Whitwell{ 2244824c342c864e870251a7d343c95e51274e50d23Keith Whitwell return (struct st_fragment_program *)fp; 2254824c342c864e870251a7d343c95e51274e50d23Keith Whitwell} 2264824c342c864e870251a7d343c95e51274e50d23Keith Whitwell 22740c543eb71368c646259afb87d5c76551f6b45b7Brian 2287e4bc84dfc6c05cea3d6fc52173708ddeb33cf45Alan Hourihanestatic INLINE struct st_vertex_program * 2294824c342c864e870251a7d343c95e51274e50d23Keith Whitwellst_vertex_program( struct gl_vertex_program *vp ) 2304824c342c864e870251a7d343c95e51274e50d23Keith Whitwell{ 2314824c342c864e870251a7d343c95e51274e50d23Keith Whitwell return (struct st_vertex_program *)vp; 2324824c342c864e870251a7d343c95e51274e50d23Keith Whitwell} 2334824c342c864e870251a7d343c95e51274e50d23Keith Whitwell 234da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusinstatic INLINE struct st_geometry_program * 2356c669d0c0766c27c58dd3ea7c3bd18b47a922aeaBrian Paulst_geometry_program( struct gl_geometry_program *gp ) 236da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin{ 2376c669d0c0766c27c58dd3ea7c3bd18b47a922aeaBrian Paul return (struct st_geometry_program *)gp; 238da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin} 23937cf13ed9a429c755f121daa1776b1b30a985ab3Brian 240a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paulstatic INLINE void 241a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paulst_reference_vertprog(struct st_context *st, 242a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul struct st_vertex_program **ptr, 243a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul struct st_vertex_program *prog) 244a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul{ 245a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul _mesa_reference_program(st->ctx, 246a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul (struct gl_program **) ptr, 247a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul (struct gl_program *) prog); 248a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul} 249a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul 250a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paulstatic INLINE void 251da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusinst_reference_geomprog(struct st_context *st, 252da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct st_geometry_program **ptr, 253da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin struct st_geometry_program *prog) 254da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin{ 255da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin _mesa_reference_program(st->ctx, 256da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin (struct gl_program **) ptr, 257da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin (struct gl_program *) prog); 258da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin} 259da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 260da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusinstatic INLINE void 261a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paulst_reference_fragprog(struct st_context *st, 262a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul struct st_fragment_program **ptr, 263a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul struct st_fragment_program *prog) 264a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul{ 265a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul _mesa_reference_program(st->ctx, 266a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul (struct gl_program **) ptr, 267a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul (struct gl_program *) prog); 268a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul} 269a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul 270a56a59ce74b7f18f25a13992d2a2c1ae7cf973ceBrian Paul 271aa5ba96d294698809186cc4b59034abbd3076812Brian Paulextern struct st_vp_variant * 272aa5ba96d294698809186cc4b59034abbd3076812Brian Paulst_get_vp_variant(struct st_context *st, 2733d203b610045980853d26370ee21fb2ef4aed17eBrian Paul struct st_vertex_program *stvp, 274aa5ba96d294698809186cc4b59034abbd3076812Brian Paul const struct st_vp_variant_key *key); 27537cf13ed9a429c755f121daa1776b1b30a985ab3Brian 27637cf13ed9a429c755f121daa1776b1b30a985ab3Brian 277aa5ba96d294698809186cc4b59034abbd3076812Brian Paulextern struct st_fp_variant * 278aa5ba96d294698809186cc4b59034abbd3076812Brian Paulst_get_fp_variant(struct st_context *st, 2793d203b610045980853d26370ee21fb2ef4aed17eBrian Paul struct st_fragment_program *stfp, 280aa5ba96d294698809186cc4b59034abbd3076812Brian Paul const struct st_fp_variant_key *key); 28107fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell 282e3f3e22cf7e9af4c5416d37329b7b8ee50f0cfcbBrian Paul 283aa5ba96d294698809186cc4b59034abbd3076812Brian Paulextern struct st_gp_variant * 284aa5ba96d294698809186cc4b59034abbd3076812Brian Paulst_get_gp_variant(struct st_context *st, 2853d203b610045980853d26370ee21fb2ef4aed17eBrian Paul struct st_geometry_program *stgp, 286aa5ba96d294698809186cc4b59034abbd3076812Brian Paul const struct st_gp_variant_key *key); 2873d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 2883d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 289f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cainextern void 290f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cainst_prepare_vertex_program(struct gl_context *ctx, 291f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cain struct st_vertex_program *stvp); 292f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cain 293f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cainextern GLboolean 294f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cainst_prepare_fragment_program(struct gl_context *ctx, 295f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cain struct st_fragment_program *stfp); 296f379d8f73063a4c4d6cf379318c6b37118d46bfaBryan Cain 2973d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 2983d203b610045980853d26370ee21fb2ef4aed17eBrian Paulextern void 299aa5ba96d294698809186cc4b59034abbd3076812Brian Paulst_release_vp_variants( struct st_context *st, 30007fafc7c9346aa260829603bf3188596481e9e62Keith Whitwell struct st_vertex_program *stvp ); 30137cf13ed9a429c755f121daa1776b1b30a985ab3Brian 302678f80b347801d925c07a774faee1ed3f716de15Brian Paulextern void 303aa5ba96d294698809186cc4b59034abbd3076812Brian Paulst_release_fp_variants( struct st_context *st, 3043d203b610045980853d26370ee21fb2ef4aed17eBrian Paul struct st_fragment_program *stfp ); 3053d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 3063d203b610045980853d26370ee21fb2ef4aed17eBrian Paulextern void 307aa5ba96d294698809186cc4b59034abbd3076812Brian Paulst_release_gp_variants(struct st_context *st, 3083d203b610045980853d26370ee21fb2ef4aed17eBrian Paul struct st_geometry_program *stgp); 3093d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 3103d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 3113d203b610045980853d26370ee21fb2ef4aed17eBrian Paulextern void 312f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergst_print_shaders(struct gl_context *ctx); 313678f80b347801d925c07a774faee1ed3f716de15Brian Paul 3143d203b610045980853d26370ee21fb2ef4aed17eBrian Paulextern void 3153d203b610045980853d26370ee21fb2ef4aed17eBrian Paulst_destroy_program_variants(struct st_context *st); 3163d203b610045980853d26370ee21fb2ef4aed17eBrian Paul 317678f80b347801d925c07a774faee1ed3f716de15Brian Paul 3186792969cbc0d233942b15285e0fa84e6602733c2Brian Paulextern void 3196792969cbc0d233942b15285e0fa84e6602733c2Brian Paulst_print_current_vertex_program(void); 3206792969cbc0d233942b15285e0fa84e6602733c2Brian Paul 3216792969cbc0d233942b15285e0fa84e6602733c2Brian Paul 3228e4a95a93d15a6707a29454cd47e10b08314cda2Keith Whitwell#endif 323