14c1403f667c6047a44ff494364725b3b7da82c68Brian/************************************************************************** 24c1403f667c6047a44ff494364725b3b7da82c68Brian * 34c1403f667c6047a44ff494364725b3b7da82c68Brian * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 44c1403f667c6047a44ff494364725b3b7da82c68Brian * All Rights Reserved. 54c1403f667c6047a44ff494364725b3b7da82c68Brian * 64c1403f667c6047a44ff494364725b3b7da82c68Brian * Permission is hereby granted, free of charge, to any person obtaining a 74c1403f667c6047a44ff494364725b3b7da82c68Brian * copy of this software and associated documentation files (the 84c1403f667c6047a44ff494364725b3b7da82c68Brian * "Software"), to deal in the Software without restriction, including 94c1403f667c6047a44ff494364725b3b7da82c68Brian * without limitation the rights to use, copy, modify, merge, publish, 104c1403f667c6047a44ff494364725b3b7da82c68Brian * distribute, sub license, and/or sell copies of the Software, and to 114c1403f667c6047a44ff494364725b3b7da82c68Brian * permit persons to whom the Software is furnished to do so, subject to 124c1403f667c6047a44ff494364725b3b7da82c68Brian * the following conditions: 134c1403f667c6047a44ff494364725b3b7da82c68Brian * 144c1403f667c6047a44ff494364725b3b7da82c68Brian * The above copyright notice and this permission notice (including the 154c1403f667c6047a44ff494364725b3b7da82c68Brian * next paragraph) shall be included in all copies or substantial portions 164c1403f667c6047a44ff494364725b3b7da82c68Brian * of the Software. 174c1403f667c6047a44ff494364725b3b7da82c68Brian * 184c1403f667c6047a44ff494364725b3b7da82c68Brian * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 194c1403f667c6047a44ff494364725b3b7da82c68Brian * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 204c1403f667c6047a44ff494364725b3b7da82c68Brian * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 214c1403f667c6047a44ff494364725b3b7da82c68Brian * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 224c1403f667c6047a44ff494364725b3b7da82c68Brian * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 234c1403f667c6047a44ff494364725b3b7da82c68Brian * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 244c1403f667c6047a44ff494364725b3b7da82c68Brian * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 254c1403f667c6047a44ff494364725b3b7da82c68Brian * 264c1403f667c6047a44ff494364725b3b7da82c68Brian **************************************************************************/ 274c1403f667c6047a44ff494364725b3b7da82c68Brian 284c1403f667c6047a44ff494364725b3b7da82c68Brian#ifndef TGSI_TRANSFORM_H 294c1403f667c6047a44ff494364725b3b7da82c68Brian#define TGSI_TRANSFORM_H 304c1403f667c6047a44ff494364725b3b7da82c68Brian 314c1403f667c6047a44ff494364725b3b7da82c68Brian 324c1403f667c6047a44ff494364725b3b7da82c68Brian#include "pipe/p_shader_tokens.h" 33c208a2c791fa24c7c5887fc496738cbddbfafc72José Fonseca#include "tgsi/tgsi_parse.h" 34c208a2c791fa24c7c5887fc496738cbddbfafc72José Fonseca#include "tgsi/tgsi_build.h" 354c1403f667c6047a44ff494364725b3b7da82c68Brian 364c1403f667c6047a44ff494364725b3b7da82c68Brian 374c1403f667c6047a44ff494364725b3b7da82c68Brian 384c1403f667c6047a44ff494364725b3b7da82c68Brian/** 394c1403f667c6047a44ff494364725b3b7da82c68Brian * Subclass this to add caller-specific data 404c1403f667c6047a44ff494364725b3b7da82c68Brian */ 414c1403f667c6047a44ff494364725b3b7da82c68Brianstruct tgsi_transform_context 424c1403f667c6047a44ff494364725b3b7da82c68Brian{ 434c1403f667c6047a44ff494364725b3b7da82c68Brian/**** PUBLIC ***/ 444c1403f667c6047a44ff494364725b3b7da82c68Brian 454c1403f667c6047a44ff494364725b3b7da82c68Brian /** 464c1403f667c6047a44ff494364725b3b7da82c68Brian * User-defined callbacks invoked per instruction. 474c1403f667c6047a44ff494364725b3b7da82c68Brian */ 484c1403f667c6047a44ff494364725b3b7da82c68Brian void (*transform_instruction)(struct tgsi_transform_context *ctx, 494c1403f667c6047a44ff494364725b3b7da82c68Brian struct tgsi_full_instruction *inst); 504c1403f667c6047a44ff494364725b3b7da82c68Brian 514c1403f667c6047a44ff494364725b3b7da82c68Brian void (*transform_declaration)(struct tgsi_transform_context *ctx, 524c1403f667c6047a44ff494364725b3b7da82c68Brian struct tgsi_full_declaration *decl); 534c1403f667c6047a44ff494364725b3b7da82c68Brian 544c1403f667c6047a44ff494364725b3b7da82c68Brian void (*transform_immediate)(struct tgsi_transform_context *ctx, 554c1403f667c6047a44ff494364725b3b7da82c68Brian struct tgsi_full_immediate *imm); 563ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin void (*transform_property)(struct tgsi_transform_context *ctx, 573ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_full_property *prop); 584c1403f667c6047a44ff494364725b3b7da82c68Brian 594c1403f667c6047a44ff494364725b3b7da82c68Brian /** 604c1403f667c6047a44ff494364725b3b7da82c68Brian * Called at end of input program to allow caller to append extra 614c1403f667c6047a44ff494364725b3b7da82c68Brian * instructions. Return number of tokens emitted. 624c1403f667c6047a44ff494364725b3b7da82c68Brian */ 634c1403f667c6047a44ff494364725b3b7da82c68Brian void (*epilog)(struct tgsi_transform_context *ctx); 644c1403f667c6047a44ff494364725b3b7da82c68Brian 654c1403f667c6047a44ff494364725b3b7da82c68Brian 664c1403f667c6047a44ff494364725b3b7da82c68Brian/*** PRIVATE ***/ 674c1403f667c6047a44ff494364725b3b7da82c68Brian 684c1403f667c6047a44ff494364725b3b7da82c68Brian /** 694c1403f667c6047a44ff494364725b3b7da82c68Brian * These are setup by tgsi_transform_shader() and cannot be overridden. 704c1403f667c6047a44ff494364725b3b7da82c68Brian * Meant to be called from in the above user callback functions. 714c1403f667c6047a44ff494364725b3b7da82c68Brian */ 724c1403f667c6047a44ff494364725b3b7da82c68Brian void (*emit_instruction)(struct tgsi_transform_context *ctx, 734c1403f667c6047a44ff494364725b3b7da82c68Brian const struct tgsi_full_instruction *inst); 744c1403f667c6047a44ff494364725b3b7da82c68Brian void (*emit_declaration)(struct tgsi_transform_context *ctx, 754c1403f667c6047a44ff494364725b3b7da82c68Brian const struct tgsi_full_declaration *decl); 764c1403f667c6047a44ff494364725b3b7da82c68Brian void (*emit_immediate)(struct tgsi_transform_context *ctx, 774c1403f667c6047a44ff494364725b3b7da82c68Brian const struct tgsi_full_immediate *imm); 783ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin void (*emit_property)(struct tgsi_transform_context *ctx, 793ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin const struct tgsi_full_property *prop); 804c1403f667c6047a44ff494364725b3b7da82c68Brian 814c1403f667c6047a44ff494364725b3b7da82c68Brian struct tgsi_header *header; 824c1403f667c6047a44ff494364725b3b7da82c68Brian uint max_tokens_out; 834c1403f667c6047a44ff494364725b3b7da82c68Brian struct tgsi_token *tokens_out; 844c1403f667c6047a44ff494364725b3b7da82c68Brian uint ti; 854c1403f667c6047a44ff494364725b3b7da82c68Brian}; 864c1403f667c6047a44ff494364725b3b7da82c68Brian 874c1403f667c6047a44ff494364725b3b7da82c68Brian 884c1403f667c6047a44ff494364725b3b7da82c68Brian 894c1403f667c6047a44ff494364725b3b7da82c68Brianextern int 904c1403f667c6047a44ff494364725b3b7da82c68Briantgsi_transform_shader(const struct tgsi_token *tokens_in, 914c1403f667c6047a44ff494364725b3b7da82c68Brian struct tgsi_token *tokens_out, 924c1403f667c6047a44ff494364725b3b7da82c68Brian uint max_tokens_out, 934c1403f667c6047a44ff494364725b3b7da82c68Brian struct tgsi_transform_context *ctx); 944c1403f667c6047a44ff494364725b3b7da82c68Brian 954c1403f667c6047a44ff494364725b3b7da82c68Brian 964c1403f667c6047a44ff494364725b3b7da82c68Brian#endif /* TGSI_TRANSFORM_H */ 97