19671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul/************************************************************************** 29671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * 39671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 49671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * All Rights Reserved. 59671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * 69671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 79671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * copy of this software and associated documentation files (the 89671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * "Software"), to deal in the Software without restriction, including 99671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * without limitation the rights to use, copy, modify, merge, publish, 109671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * distribute, sub license, and/or sell copies of the Software, and to 119671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * permit persons to whom the Software is furnished to do so, subject to 129671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * the following conditions: 139671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * 149671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * The above copyright notice and this permission notice (including the 159671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * next paragraph) shall be included in all copies or substantial portions 169671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * of the Software. 179671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * 189671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 199671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 209671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 219671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 229671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 239671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 249671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 259671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul * 269671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul **************************************************************************/ 279671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul 289671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paul#ifndef TGSI_PARSE_H 29ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_PARSE_H 30ffe58739da9eee2e99682747cc8f26e412c87430michal 31ec21ed1ce7963551d824b8b1f4c4ffa8d6cb3363Vinson Lee#include "pipe/p_compiler.h" 32e29583afcb238cf7a70089cfdf50a69ca277c53aJosé Fonseca#include "pipe/p_shader_tokens.h" 33e29583afcb238cf7a70089cfdf50a69ca277c53aJosé Fonseca 34ffe58739da9eee2e99682747cc8f26e412c87430michal#if defined __cplusplus 35ffe58739da9eee2e99682747cc8f26e412c87430michalextern "C" { 369a8a5d7c2fe7f32c8d15bc0a77f86e1f2f995ffeJosé Fonseca#endif 37ffe58739da9eee2e99682747cc8f26e412c87430michal 38ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_header 39ffe58739da9eee2e99682747cc8f26e412c87430michal{ 40ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header Header; 41ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_processor Processor; 42ffe58739da9eee2e99682747cc8f26e412c87430michal}; 43ffe58739da9eee2e99682747cc8f26e412c87430michal 44ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_dst_register 45ffe58739da9eee2e99682747cc8f26e412c87430michal{ 465b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell struct tgsi_dst_register Register; 475b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell struct tgsi_src_register Indirect; 48101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin struct tgsi_dimension Dimension; 49101f792a2af9c9a19a050afba8b60caa689466a5Zack Rusin struct tgsi_src_register DimIndirect; 50ffe58739da9eee2e99682747cc8f26e412c87430michal}; 51ffe58739da9eee2e99682747cc8f26e412c87430michal 52ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_src_register 53ffe58739da9eee2e99682747cc8f26e412c87430michal{ 5491a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell struct tgsi_src_register Register; 5591a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell struct tgsi_src_register Indirect; 5691a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell struct tgsi_dimension Dimension; 5791a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell struct tgsi_src_register DimIndirect; 58ffe58739da9eee2e99682747cc8f26e412c87430michal}; 59ffe58739da9eee2e99682747cc8f26e412c87430michal 602b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusinstruct tgsi_immediate_array_data 612b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin{ 622b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin union tgsi_immediate_data *u; 632b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin}; 642b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin 65ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_declaration 66ffe58739da9eee2e99682747cc8f26e412c87430michal{ 67ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_declaration Declaration; 68fe2b31e4a896167a33d267822b36eb2de0ceecbaKeith Whitwell struct tgsi_declaration_range Range; 694367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol struct tgsi_declaration_dimension Dim; 701279923d72942ee201fcc6ad40d552143f651f03Francisco Jerez struct tgsi_declaration_interp Interp; 71a49381587f73c67469ec7546419cfc41387f938cMichal Krol struct tgsi_declaration_semantic Semantic; 722b221e11da7a8bf759e3c359f22ba6f49d5f0997Zack Rusin struct tgsi_immediate_array_data ImmediateData; 73bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct tgsi_declaration_resource Resource; 74a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez struct tgsi_declaration_sampler_view SamplerView; 75ffe58739da9eee2e99682747cc8f26e412c87430michal}; 76ffe58739da9eee2e99682747cc8f26e412c87430michal 77ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_immediate 78ffe58739da9eee2e99682747cc8f26e412c87430michal{ 79ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_immediate Immediate; 80fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell union tgsi_immediate_data u[4]; 81ffe58739da9eee2e99682747cc8f26e412c87430michal}; 82ffe58739da9eee2e99682747cc8f26e412c87430michal 833ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstruct tgsi_full_property 843ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 853ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_property Property; 863ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_property_data u[8]; 873ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin}; 883ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 89ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_FULL_MAX_DST_REGISTERS 2 90bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define TGSI_FULL_MAX_SRC_REGISTERS 5 /* SAMPLE_D has 5 */ 912083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie#define TGSI_FULL_MAX_TEX_OFFSETS 4 92ffe58739da9eee2e99682747cc8f26e412c87430michal 93ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_instruction 94ffe58739da9eee2e99682747cc8f26e412c87430michal{ 95ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_instruction Instruction; 967d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell struct tgsi_instruction_predicate Predicate; 977d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell struct tgsi_instruction_label Label; 987d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell struct tgsi_instruction_texture Texture; 997d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell struct tgsi_full_dst_register Dst[TGSI_FULL_MAX_DST_REGISTERS]; 1007d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell struct tgsi_full_src_register Src[TGSI_FULL_MAX_SRC_REGISTERS]; 1012083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie struct tgsi_texture_offset TexOffsets[TGSI_FULL_MAX_TEX_OFFSETS]; 102ffe58739da9eee2e99682747cc8f26e412c87430michal}; 103ffe58739da9eee2e99682747cc8f26e412c87430michal 104ffe58739da9eee2e99682747cc8f26e412c87430michalunion tgsi_full_token 105ffe58739da9eee2e99682747cc8f26e412c87430michal{ 106ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_token Token; 107ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_full_declaration FullDeclaration; 108ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_full_immediate FullImmediate; 109ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_full_instruction FullInstruction; 1103ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_full_property FullProperty; 111ffe58739da9eee2e99682747cc8f26e412c87430michal}; 112ffe58739da9eee2e99682747cc8f26e412c87430michal 113ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_parse_context 114ffe58739da9eee2e99682747cc8f26e412c87430michal{ 115ffe58739da9eee2e99682747cc8f26e412c87430michal const struct tgsi_token *Tokens; 116b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned Position; 117ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_full_header FullHeader; 118ffe58739da9eee2e99682747cc8f26e412c87430michal union tgsi_full_token FullToken; 119ffe58739da9eee2e99682747cc8f26e412c87430michal}; 120ffe58739da9eee2e99682747cc8f26e412c87430michal 121ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_PARSE_OK 0 122ffe58739da9eee2e99682747cc8f26e412c87430michal#define TGSI_PARSE_ERROR 1 123ffe58739da9eee2e99682747cc8f26e412c87430michal 12470af238b494ed1b6da4841c2065c33ee0f0f37c9Keith Whitwellunsigned 125ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_parse_init( 126ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_parse_context *ctx, 127ffe58739da9eee2e99682747cc8f26e412c87430michal const struct tgsi_token *tokens ); 128ffe58739da9eee2e99682747cc8f26e412c87430michal 129ffe58739da9eee2e99682747cc8f26e412c87430michalvoid 130ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_parse_free( 131ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_parse_context *ctx ); 132ffe58739da9eee2e99682747cc8f26e412c87430michal 133a6e2b76fb570dea8f4a1384e4a9df36f6b81ca84michalboolean 134ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_parse_end_of_tokens( 135ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_parse_context *ctx ); 136ffe58739da9eee2e99682747cc8f26e412c87430michal 137ffe58739da9eee2e99682747cc8f26e412c87430michalvoid 138ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_parse_token( 139ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_parse_context *ctx ); 140ffe58739da9eee2e99682747cc8f26e412c87430michal 141285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwellstatic INLINE unsigned 142285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwelltgsi_num_tokens(const struct tgsi_token *tokens) 143285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwell{ 144c398f1544ea113279e5f038f4a643005743cab62Marek Olšák struct tgsi_header header; 145c398f1544ea113279e5f038f4a643005743cab62Marek Olšák memcpy(&header, tokens, sizeof(header)); 146285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwell return header.HeaderSize + header.BodySize; 147285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwell} 148285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwell 149285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwellvoid 150285ea417ef5ee1027d1e8dd03b069cb157105bf7Keith Whitwelltgsi_dump_tokens(const struct tgsi_token *tokens); 151648e26aa95b519f1f4abc429b5a23abaf4a5195bBrian 1529671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paulstruct tgsi_token * 1539671f7ae476cadb46f9f8f9d0363f24aabaf9f87Brian Paultgsi_dup_tokens(const struct tgsi_token *tokens); 154648e26aa95b519f1f4abc429b5a23abaf4a5195bBrian 155439036739db2855bba5f0ffc12b7b727897cb530Brian Paulstruct tgsi_token * 156439036739db2855bba5f0ffc12b7b727897cb530Brian Paultgsi_alloc_tokens(unsigned num_tokens); 157439036739db2855bba5f0ffc12b7b727897cb530Brian Paul 158439036739db2855bba5f0ffc12b7b727897cb530Brian Paul 159ffe58739da9eee2e99682747cc8f26e412c87430michal#if defined __cplusplus 1609a8a5d7c2fe7f32c8d15bc0a77f86e1f2f995ffeJosé Fonseca} 1619a8a5d7c2fe7f32c8d15bc0a77f86e1f2f995ffeJosé Fonseca#endif 162ffe58739da9eee2e99682747cc8f26e412c87430michal 1639a8a5d7c2fe7f32c8d15bc0a77f86e1f2f995ffeJosé Fonseca#endif /* TGSI_PARSE_H */ 164ffe58739da9eee2e99682747cc8f26e412c87430michal 165