13b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich/************************************************************************** 23b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * 33b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 43b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * All Rights Reserved. 53b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * 63b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * Permission is hereby granted, free of charge, to any person obtaining a 73b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * copy of this software and associated documentation files (the 83b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * "Software"), to deal in the Software without restriction, including 98a43715afb478fa8be16187374618be33ff49442MK Ryu * without limitation the rights to use, copy, modify, merge, publish, 103b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * distribute, sub license, and/or sell copies of the Software, and to 113b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * permit persons to whom the Software is furnished to do so, subject to 123b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * the following conditions: 13f960d89a7b197fe3b3bd28546c6c89c2331b9f14Jakob Juelich * 143b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * The above copyright notice and this permission notice (including the 158a43715afb478fa8be16187374618be33ff49442MK Ryu * next paragraph) shall be included in all copies or substantial portions 163b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * of the Software. 173b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * 183b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 193b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 203b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 211e1c41b1b4a1b97c0b7086b8430856ed45e064d3Gabe Black * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2222dd226625255110c079e979113dcda1f4fa5ea8Prashanth Balasubramanian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 233b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 245949b4af7a872aeb58e7ad29090812d648725ed5Prashanth Balasubramanian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 258421d5905ab0aed8689c2eea6be8d9c4042ce618Jakob Juelich * 260cb2a3b1d2d86d70da06a3f45be9297139e48207Fang Deng **************************************************************************/ 2789cca5d6ef8df35f1b294b16bf536a8f3ffb5efbMK Ryu 2875be1d3f881ef4f4f9cffe0c38fc3139338d8f84Prashanth Balasubramanian#include "util/u_debug.h" 293b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich#include "tgsi_iterate.h" 303b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 313b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelichboolean 323b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelichtgsi_iterate_shader( 333b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich const struct tgsi_token *tokens, 343b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich struct tgsi_iterate_context *ctx ) 353b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich{ 363b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich struct tgsi_parse_context parse; 373b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 383b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich if (tgsi_parse_init( &parse, tokens ) != TGSI_PARSE_OK) 393b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich return FALSE; 403b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 413b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich ctx->processor = parse.FullHeader.Processor; 423b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 433b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich if (ctx->prolog) 443b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich if (!ctx->prolog( ctx )) 453b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich goto fail; 463b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 473b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich while (!tgsi_parse_end_of_tokens( &parse )) { 483b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich tgsi_parse_token( &parse ); 493b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 501b52574752be108a743d3b33561c34324f8538e7Jakob Juelich switch (parse.FullToken.Token.Type) { 511b52574752be108a743d3b33561c34324f8538e7Jakob Juelich case TGSI_TOKEN_TYPE_INSTRUCTION: 521b52574752be108a743d3b33561c34324f8538e7Jakob Juelich if (ctx->iterate_instruction) 531b52574752be108a743d3b33561c34324f8538e7Jakob Juelich if (!ctx->iterate_instruction( ctx, &parse.FullToken.FullInstruction )) 541b52574752be108a743d3b33561c34324f8538e7Jakob Juelich goto fail; 551b52574752be108a743d3b33561c34324f8538e7Jakob Juelich break; 563b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 573b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich case TGSI_TOKEN_TYPE_DECLARATION: 583b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich if (ctx->iterate_declaration) 593b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich if (!ctx->iterate_declaration( ctx, &parse.FullToken.FullDeclaration )) 601b52574752be108a743d3b33561c34324f8538e7Jakob Juelich goto fail; 611b52574752be108a743d3b33561c34324f8538e7Jakob Juelich break; 621b52574752be108a743d3b33561c34324f8538e7Jakob Juelich 633b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich case TGSI_TOKEN_TYPE_IMMEDIATE: 643b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich if (ctx->iterate_immediate) 653b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich if (!ctx->iterate_immediate( ctx, &parse.FullToken.FullImmediate )) 663b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich goto fail; 673b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich break; 683b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 693b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich case TGSI_TOKEN_TYPE_PROPERTY: 703b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich if (ctx->iterate_property) 713b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich if (!ctx->iterate_property( ctx, &parse.FullToken.FullProperty )) 723b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich goto fail; 733b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich break; 743b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 753b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich default: 763b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich assert( 0 ); 773b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich } 783b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich } 793b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 801b52574752be108a743d3b33561c34324f8538e7Jakob Juelich if (ctx->epilog) 811b52574752be108a743d3b33561c34324f8538e7Jakob Juelich if (!ctx->epilog( ctx )) 821b52574752be108a743d3b33561c34324f8538e7Jakob Juelich goto fail; 831b52574752be108a743d3b33561c34324f8538e7Jakob Juelich 843b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich tgsi_parse_free( &parse ); 853b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich return TRUE; 863b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelich 873b27dbc2358aef655e050a92510ff8e9e080bf81Jakob Juelichfail: 88f960d89a7b197fe3b3bd28546c6c89c2331b9f14Jakob Juelich tgsi_parse_free( &parse ); 898421d5905ab0aed8689c2eea6be8d9c4042ce618Jakob Juelich return FALSE; 908421d5905ab0aed8689c2eea6be8d9c4042ce618Jakob Juelich} 918421d5905ab0aed8689c2eea6be8d9c4042ce618Jakob Juelich