13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/************************************************************************** 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * All Rights Reserved. 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * "Software"), to deal in the Software without restriction, including 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * permit persons to whom the Software is furnished to do so, subject to 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the following conditions: 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice (including the 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * next paragraph) shall be included in all copies or substantial portions 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * of the Software. 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **************************************************************************/ 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * TGSI program transformation utility. 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Authors: Brian Paul 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "util/u_debug.h" 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "tgsi_transform.h" 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgemit_instruction(struct tgsi_transform_context *ctx, 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const struct tgsi_full_instruction *inst) 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org uint ti = ctx->ti; 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ti += tgsi_build_full_instruction(inst, 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->tokens_out + ti, 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->header, 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->max_tokens_out - ti); 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->ti = ti; 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgemit_declaration(struct tgsi_transform_context *ctx, 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const struct tgsi_full_declaration *decl) 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org uint ti = ctx->ti; 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ti += tgsi_build_full_declaration(decl, 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->tokens_out + ti, 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->header, 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->max_tokens_out - ti); 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->ti = ti; 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgemit_immediate(struct tgsi_transform_context *ctx, 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const struct tgsi_full_immediate *imm) 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org uint ti = ctx->ti; 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ti += tgsi_build_full_immediate(imm, 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->tokens_out + ti, 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->header, 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->max_tokens_out - ti); 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->ti = ti; 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 82760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic void 83760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgemit_property(struct tgsi_transform_context *ctx, 84760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org const struct tgsi_full_property *prop) 85760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 86760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org uint ti = ctx->ti; 87760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 88760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ti += tgsi_build_full_property(prop, 89760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ctx->tokens_out + ti, 90760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ctx->header, 91760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ctx->max_tokens_out - ti); 92760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ctx->ti = ti; 93760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 94760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Apply user-defined transformations to the input shader to produce 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the output shader. 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * For example, a register search-and-replace operation could be applied 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * by defining a transform_instruction() callback that examined and changed 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the instruction src/dest regs. 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * \return number of tokens emitted 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgint 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtgsi_transform_shader(const struct tgsi_token *tokens_in, 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct tgsi_token *tokens_out, 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org uint max_tokens_out, 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct tgsi_transform_context *ctx) 1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org uint procType; 1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* input shader */ 1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct tgsi_parse_context parse; 1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* output shader */ 1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct tgsi_processor *processor; 1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /** 1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** callback context init 1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **/ 1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->emit_instruction = emit_instruction; 1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->emit_declaration = emit_declaration; 1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->emit_immediate = emit_immediate; 126760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ctx->emit_property = emit_property; 1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->tokens_out = tokens_out; 1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->max_tokens_out = max_tokens_out; 1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /** 1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** Setup to begin parsing input shader 1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **/ 1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (tgsi_parse_init( &parse, tokens_in ) != TGSI_PARSE_OK) { 1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org debug_printf("tgsi_parse_init() failed in tgsi_transform_shader()!\n"); 1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return -1; 1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org procType = parse.FullHeader.Processor.Processor; 1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org assert(procType == TGSI_PROCESSOR_FRAGMENT || 1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org procType == TGSI_PROCESSOR_VERTEX || 1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org procType == TGSI_PROCESSOR_GEOMETRY); 1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /** 1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** Setup output shader 1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **/ 147760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ctx->header = (struct tgsi_header *)tokens_out; 1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *ctx->header = tgsi_build_header(); 1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 150760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org processor = (struct tgsi_processor *) (tokens_out + 1); 1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *processor = tgsi_build_processor( procType, ctx->header ); 1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 153760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ctx->ti = 2; 1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /** 1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** Loop over incoming program tokens/instructions 1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org while( !tgsi_parse_end_of_tokens( &parse ) ) { 1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org tgsi_parse_token( &parse ); 1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org switch( parse.FullToken.Token.Type ) { 1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case TGSI_TOKEN_TYPE_INSTRUCTION: 1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct tgsi_full_instruction *fullinst 1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org = &parse.FullToken.FullInstruction; 1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (ctx->transform_instruction) 1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->transform_instruction(ctx, fullinst); 1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else 1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->emit_instruction(ctx, fullinst); 1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case TGSI_TOKEN_TYPE_DECLARATION: 1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct tgsi_full_declaration *fulldecl 1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org = &parse.FullToken.FullDeclaration; 1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (ctx->transform_declaration) 1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->transform_declaration(ctx, fulldecl); 1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else 1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->emit_declaration(ctx, fulldecl); 1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case TGSI_TOKEN_TYPE_IMMEDIATE: 1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org { 1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org struct tgsi_full_immediate *fullimm 1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org = &parse.FullToken.FullImmediate; 1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (ctx->transform_immediate) 1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->transform_immediate(ctx, fullimm); 1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else 1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->emit_immediate(ctx, fullimm); 1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 199760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org case TGSI_TOKEN_TYPE_PROPERTY: 200760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org { 201760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct tgsi_full_property *fullprop 202760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org = &parse.FullToken.FullProperty; 203760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 204760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if (ctx->transform_property) 205760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ctx->transform_property(ctx, fullprop); 206760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org else 207760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org ctx->emit_property(ctx, fullprop); 208760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org } 209760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org break; 2103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org default: 2123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org assert( 0 ); 2133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (ctx->epilog) { 2173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ctx->epilog(ctx); 2183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org tgsi_parse_free (&parse); 2213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return ctx->ti; 2233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "tgsi_text.h" 2273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern int tgsi_transform_foo( struct tgsi_token *tokens_out, 2293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org uint max_tokens_out ); 2303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* This function exists only so that tgsi_text_translate() doesn't get 2323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * magic-ed out of the libtgsi.a archive by the build system. Don't 2333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * remove unless you know this has been fixed - check on mingw/scons 2343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * builds as well. 2353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 2363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgint 2373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgtgsi_transform_foo( struct tgsi_token *tokens_out, 2383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org uint max_tokens_out ) 2393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 2403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const char *text = 241760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org "FRAG\n" 2423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "DCL IN[0], COLOR, CONSTANT\n" 2433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org "DCL OUT[0], COLOR\n" 2443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org " 0: MOV OUT[0], IN[0]\n" 2453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org " 1: END"; 2463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return tgsi_text_translate( text, 2483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org tokens_out, 2493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org max_tokens_out ); 2503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 251