tgsi_build.c revision dcf8543ab375dd9c128d1ca772b1e587cebbdc7c
17279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol/************************************************************************** 27279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * 37279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 47279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * All Rights Reserved. 57279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * 67279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * Permission is hereby granted, free of charge, to any person obtaining a 77279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * copy of this software and associated documentation files (the 87279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * "Software"), to deal in the Software without restriction, including 97279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * without limitation the rights to use, copy, modify, merge, publish, 107279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * distribute, sub license, and/or sell copies of the Software, and to 117279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * permit persons to whom the Software is furnished to do so, subject to 127279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * the following conditions: 137279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * 147279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * The above copyright notice and this permission notice (including the 157279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * next paragraph) shall be included in all copies or substantial portions 167279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * of the Software. 177279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * 187279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 197279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 207279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 217279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 227279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 237279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 247279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 257279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol * 267279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol **************************************************************************/ 277279d663e984ae8a243f56c010f175fee9ffccb3Michal Krol 28ea4bf267e4b023b08043f91ac44592fed1736e7fJosé Fonseca#include "util/u_debug.h" 29abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#include "pipe/p_shader_tokens.h" 30abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#include "tgsi_build.h" 31abd5e8e41d54f7f491f91af9354f19c8d24d3572Michal Krol#include "tgsi_parse.h" 32ffe58739da9eee2e99682747cc8f26e412c87430michal 33ffe58739da9eee2e99682747cc8f26e412c87430michal 34ffe58739da9eee2e99682747cc8f26e412c87430michal/* 35ffe58739da9eee2e99682747cc8f26e412c87430michal * header 36ffe58739da9eee2e99682747cc8f26e412c87430michal */ 37ffe58739da9eee2e99682747cc8f26e412c87430michal 38ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_header 39ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_header( void ) 40ffe58739da9eee2e99682747cc8f26e412c87430michal{ 41ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header header; 42ffe58739da9eee2e99682747cc8f26e412c87430michal 43ffe58739da9eee2e99682747cc8f26e412c87430michal header.HeaderSize = 1; 44ffe58739da9eee2e99682747cc8f26e412c87430michal header.BodySize = 0; 45ffe58739da9eee2e99682747cc8f26e412c87430michal 46ffe58739da9eee2e99682747cc8f26e412c87430michal return header; 47ffe58739da9eee2e99682747cc8f26e412c87430michal} 48ffe58739da9eee2e99682747cc8f26e412c87430michal 49ffe58739da9eee2e99682747cc8f26e412c87430michalstatic void 50ffe58739da9eee2e99682747cc8f26e412c87430michalheader_headersize_grow( struct tgsi_header *header ) 51ffe58739da9eee2e99682747cc8f26e412c87430michal{ 52b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal assert( header->HeaderSize < 0xFF ); 53b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal assert( header->BodySize == 0 ); 54ffe58739da9eee2e99682747cc8f26e412c87430michal 55ffe58739da9eee2e99682747cc8f26e412c87430michal header->HeaderSize++; 56ffe58739da9eee2e99682747cc8f26e412c87430michal} 57ffe58739da9eee2e99682747cc8f26e412c87430michal 58ffe58739da9eee2e99682747cc8f26e412c87430michalstatic void 59ffe58739da9eee2e99682747cc8f26e412c87430michalheader_bodysize_grow( struct tgsi_header *header ) 60ffe58739da9eee2e99682747cc8f26e412c87430michal{ 61b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal assert( header->BodySize < 0xFFFFFF ); 62ffe58739da9eee2e99682747cc8f26e412c87430michal 63ffe58739da9eee2e99682747cc8f26e412c87430michal header->BodySize++; 64ffe58739da9eee2e99682747cc8f26e412c87430michal} 65ffe58739da9eee2e99682747cc8f26e412c87430michal 66ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_processor 67ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_processor( void ) 68ffe58739da9eee2e99682747cc8f26e412c87430michal{ 69ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_processor processor; 70ffe58739da9eee2e99682747cc8f26e412c87430michal 71ffe58739da9eee2e99682747cc8f26e412c87430michal processor.Processor = TGSI_PROCESSOR_FRAGMENT; 72ffe58739da9eee2e99682747cc8f26e412c87430michal processor.Padding = 0; 73ffe58739da9eee2e99682747cc8f26e412c87430michal 74ffe58739da9eee2e99682747cc8f26e412c87430michal return processor; 75ffe58739da9eee2e99682747cc8f26e412c87430michal} 76ffe58739da9eee2e99682747cc8f26e412c87430michal 77ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_processor 78ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_processor( 79b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned type, 80ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 81ffe58739da9eee2e99682747cc8f26e412c87430michal{ 82ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_processor processor; 83ffe58739da9eee2e99682747cc8f26e412c87430michal 84ffe58739da9eee2e99682747cc8f26e412c87430michal processor = tgsi_default_processor(); 85ffe58739da9eee2e99682747cc8f26e412c87430michal processor.Processor = type; 86ffe58739da9eee2e99682747cc8f26e412c87430michal 87ffe58739da9eee2e99682747cc8f26e412c87430michal header_headersize_grow( header ); 88ffe58739da9eee2e99682747cc8f26e412c87430michal 89ffe58739da9eee2e99682747cc8f26e412c87430michal return processor; 90ffe58739da9eee2e99682747cc8f26e412c87430michal} 91ffe58739da9eee2e99682747cc8f26e412c87430michal 92ffe58739da9eee2e99682747cc8f26e412c87430michal/* 93ffe58739da9eee2e99682747cc8f26e412c87430michal * declaration 94ffe58739da9eee2e99682747cc8f26e412c87430michal */ 95ffe58739da9eee2e99682747cc8f26e412c87430michal 96ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_declaration 97ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_declaration( void ) 98ffe58739da9eee2e99682747cc8f26e412c87430michal{ 99ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_declaration declaration; 100ffe58739da9eee2e99682747cc8f26e412c87430michal 101ffe58739da9eee2e99682747cc8f26e412c87430michal declaration.Type = TGSI_TOKEN_TYPE_DECLARATION; 1025ecd0b0890fd48656e46c017830a9f5d6b906aaeMichal Krol declaration.NrTokens = 1; 103ffe58739da9eee2e99682747cc8f26e412c87430michal declaration.File = TGSI_FILE_NULL; 104058b978a5ae2a56e09fed6335b686c654444f4acmichal declaration.UsageMask = TGSI_WRITEMASK_XYZW; 105a49381587f73c67469ec7546419cfc41387f938cMichal Krol declaration.Interpolate = TGSI_INTERPOLATE_CONSTANT; 106dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol declaration.Dimension = 0; 107b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal declaration.Semantic = 0; 108434e255eae90b0f3d836d452b7d3b0c5aadf78b8Brian Paul declaration.Centroid = 0; 109434e255eae90b0f3d836d452b7d3b0c5aadf78b8Brian Paul declaration.Invariant = 0; 110ffe58739da9eee2e99682747cc8f26e412c87430michal declaration.Padding = 0; 111ffe58739da9eee2e99682747cc8f26e412c87430michal 112ffe58739da9eee2e99682747cc8f26e412c87430michal return declaration; 113ffe58739da9eee2e99682747cc8f26e412c87430michal} 114ffe58739da9eee2e99682747cc8f26e412c87430michal 115ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_declaration 116ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_declaration( 117b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned file, 118058b978a5ae2a56e09fed6335b686c654444f4acmichal unsigned usage_mask, 119b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned interpolate, 120dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol unsigned dimension, 121b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned semantic, 1224de360e67d83cd6503fb8ad053bb8afe507db5faBrian Paul unsigned centroid, 1234de360e67d83cd6503fb8ad053bb8afe507db5faBrian Paul unsigned invariant, 124ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 125ffe58739da9eee2e99682747cc8f26e412c87430michal{ 126ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_declaration declaration; 127ffe58739da9eee2e99682747cc8f26e412c87430michal 128cff2126f522bb511216f64427b3060467e266f8aBrian Paul assert( file < TGSI_FILE_COUNT ); 129cff2126f522bb511216f64427b3060467e266f8aBrian Paul assert( interpolate < TGSI_INTERPOLATE_COUNT ); 130ffe58739da9eee2e99682747cc8f26e412c87430michal 131ffe58739da9eee2e99682747cc8f26e412c87430michal declaration = tgsi_default_declaration(); 132ffe58739da9eee2e99682747cc8f26e412c87430michal declaration.File = file; 133058b978a5ae2a56e09fed6335b686c654444f4acmichal declaration.UsageMask = usage_mask; 134ffe58739da9eee2e99682747cc8f26e412c87430michal declaration.Interpolate = interpolate; 135dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol declaration.Dimension = dimension; 136b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal declaration.Semantic = semantic; 1374de360e67d83cd6503fb8ad053bb8afe507db5faBrian Paul declaration.Centroid = centroid; 1384de360e67d83cd6503fb8ad053bb8afe507db5faBrian Paul declaration.Invariant = invariant; 139ffe58739da9eee2e99682747cc8f26e412c87430michal 140ffe58739da9eee2e99682747cc8f26e412c87430michal header_bodysize_grow( header ); 141ffe58739da9eee2e99682747cc8f26e412c87430michal 142ffe58739da9eee2e99682747cc8f26e412c87430michal return declaration; 143ffe58739da9eee2e99682747cc8f26e412c87430michal} 144ffe58739da9eee2e99682747cc8f26e412c87430michal 145ffe58739da9eee2e99682747cc8f26e412c87430michalstatic void 146ffe58739da9eee2e99682747cc8f26e412c87430michaldeclaration_grow( 147ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_declaration *declaration, 148ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 149ffe58739da9eee2e99682747cc8f26e412c87430michal{ 1505ecd0b0890fd48656e46c017830a9f5d6b906aaeMichal Krol assert( declaration->NrTokens < 0xFF ); 151ffe58739da9eee2e99682747cc8f26e412c87430michal 1525ecd0b0890fd48656e46c017830a9f5d6b906aaeMichal Krol declaration->NrTokens++; 153ffe58739da9eee2e99682747cc8f26e412c87430michal 154ffe58739da9eee2e99682747cc8f26e412c87430michal header_bodysize_grow( header ); 155ffe58739da9eee2e99682747cc8f26e412c87430michal} 156ffe58739da9eee2e99682747cc8f26e412c87430michal 157ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_declaration 158ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_full_declaration( void ) 159ffe58739da9eee2e99682747cc8f26e412c87430michal{ 160ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_full_declaration full_declaration; 161ffe58739da9eee2e99682747cc8f26e412c87430michal 162ffe58739da9eee2e99682747cc8f26e412c87430michal full_declaration.Declaration = tgsi_default_declaration(); 163fe2b31e4a896167a33d267822b36eb2de0ceecbaKeith Whitwell full_declaration.Range = tgsi_default_declaration_range(); 164b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal full_declaration.Semantic = tgsi_default_declaration_semantic(); 165ffe58739da9eee2e99682747cc8f26e412c87430michal 166ffe58739da9eee2e99682747cc8f26e412c87430michal return full_declaration; 167ffe58739da9eee2e99682747cc8f26e412c87430michal} 168ffe58739da9eee2e99682747cc8f26e412c87430michal 169b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michalunsigned 170ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_full_declaration( 171b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal const struct tgsi_full_declaration *full_decl, 172ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_token *tokens, 173ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header, 174b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned maxsize ) 175ffe58739da9eee2e99682747cc8f26e412c87430michal{ 176b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned size = 0; 177ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_declaration *declaration; 178a49381587f73c67469ec7546419cfc41387f938cMichal Krol struct tgsi_declaration_range *dr; 179ffe58739da9eee2e99682747cc8f26e412c87430michal 180ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 181ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 182ffe58739da9eee2e99682747cc8f26e412c87430michal declaration = (struct tgsi_declaration *) &tokens[size]; 183ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 184ffe58739da9eee2e99682747cc8f26e412c87430michal 185ffe58739da9eee2e99682747cc8f26e412c87430michal *declaration = tgsi_build_declaration( 186ffe58739da9eee2e99682747cc8f26e412c87430michal full_decl->Declaration.File, 187058b978a5ae2a56e09fed6335b686c654444f4acmichal full_decl->Declaration.UsageMask, 188ffe58739da9eee2e99682747cc8f26e412c87430michal full_decl->Declaration.Interpolate, 189dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol full_decl->Declaration.Dimension, 190b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal full_decl->Declaration.Semantic, 1914de360e67d83cd6503fb8ad053bb8afe507db5faBrian Paul full_decl->Declaration.Centroid, 1924de360e67d83cd6503fb8ad053bb8afe507db5faBrian Paul full_decl->Declaration.Invariant, 193ffe58739da9eee2e99682747cc8f26e412c87430michal header ); 194ffe58739da9eee2e99682747cc8f26e412c87430michal 195a49381587f73c67469ec7546419cfc41387f938cMichal Krol if (maxsize <= size) 196a49381587f73c67469ec7546419cfc41387f938cMichal Krol return 0; 197a49381587f73c67469ec7546419cfc41387f938cMichal Krol dr = (struct tgsi_declaration_range *) &tokens[size]; 198a49381587f73c67469ec7546419cfc41387f938cMichal Krol size++; 199ffe58739da9eee2e99682747cc8f26e412c87430michal 200a49381587f73c67469ec7546419cfc41387f938cMichal Krol *dr = tgsi_build_declaration_range( 201fe2b31e4a896167a33d267822b36eb2de0ceecbaKeith Whitwell full_decl->Range.First, 202fe2b31e4a896167a33d267822b36eb2de0ceecbaKeith Whitwell full_decl->Range.Last, 203a49381587f73c67469ec7546419cfc41387f938cMichal Krol declaration, 204a49381587f73c67469ec7546419cfc41387f938cMichal Krol header ); 205ffe58739da9eee2e99682747cc8f26e412c87430michal 206dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol if (full_decl->Declaration.Dimension) { 207dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol struct tgsi_declaration_dimension *dd; 208dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 209dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol if (maxsize <= size) { 210dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol return 0; 211dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol } 212dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol dd = (struct tgsi_declaration_dimension *)&tokens[size]; 213dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol size++; 214dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 215dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol *dd = tgsi_build_declaration_dimension(full_decl->Dim.Index2D, 216dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol declaration, 217dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol header); 218dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol } 219dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 220b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal if( full_decl->Declaration.Semantic ) { 221b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal struct tgsi_declaration_semantic *ds; 222b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 223b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal if( maxsize <= size ) 224b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal return 0; 225b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal ds = (struct tgsi_declaration_semantic *) &tokens[size]; 226b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal size++; 227b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 228b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal *ds = tgsi_build_declaration_semantic( 229763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell full_decl->Semantic.Name, 230763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell full_decl->Semantic.Index, 231b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal declaration, 232b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal header ); 233b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal } 234b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 235ffe58739da9eee2e99682747cc8f26e412c87430michal return size; 236ffe58739da9eee2e99682747cc8f26e412c87430michal} 237ffe58739da9eee2e99682747cc8f26e412c87430michal 238ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_declaration_range 239a49381587f73c67469ec7546419cfc41387f938cMichal Kroltgsi_default_declaration_range( void ) 240a49381587f73c67469ec7546419cfc41387f938cMichal Krol{ 241a49381587f73c67469ec7546419cfc41387f938cMichal Krol struct tgsi_declaration_range dr; 242a49381587f73c67469ec7546419cfc41387f938cMichal Krol 243a49381587f73c67469ec7546419cfc41387f938cMichal Krol dr.First = 0; 244a49381587f73c67469ec7546419cfc41387f938cMichal Krol dr.Last = 0; 245a49381587f73c67469ec7546419cfc41387f938cMichal Krol 246a49381587f73c67469ec7546419cfc41387f938cMichal Krol return dr; 247a49381587f73c67469ec7546419cfc41387f938cMichal Krol} 248a49381587f73c67469ec7546419cfc41387f938cMichal Krol 249a49381587f73c67469ec7546419cfc41387f938cMichal Krolstruct tgsi_declaration_range 250ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_declaration_range( 251b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned first, 252b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned last, 253ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_declaration *declaration, 254ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 255ffe58739da9eee2e99682747cc8f26e412c87430michal{ 256ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_declaration_range declaration_range; 257ffe58739da9eee2e99682747cc8f26e412c87430michal 258b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal assert( last >= first ); 259b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal assert( last <= 0xFFFF ); 260ffe58739da9eee2e99682747cc8f26e412c87430michal 261a49381587f73c67469ec7546419cfc41387f938cMichal Krol declaration_range = tgsi_default_declaration_range(); 262ffe58739da9eee2e99682747cc8f26e412c87430michal declaration_range.First = first; 263ffe58739da9eee2e99682747cc8f26e412c87430michal declaration_range.Last = last; 264ffe58739da9eee2e99682747cc8f26e412c87430michal 265ffe58739da9eee2e99682747cc8f26e412c87430michal declaration_grow( declaration, header ); 266ffe58739da9eee2e99682747cc8f26e412c87430michal 267ffe58739da9eee2e99682747cc8f26e412c87430michal return declaration_range; 268ffe58739da9eee2e99682747cc8f26e412c87430michal} 269ffe58739da9eee2e99682747cc8f26e412c87430michal 270dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krolstruct tgsi_declaration_dimension 271dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Kroltgsi_default_declaration_dimension(void) 272dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol{ 273dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol struct tgsi_declaration_dimension dd; 274dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 275dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol dd.Index2D = 0; 276dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol dd.Padding = 0; 277dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 278dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol return dd; 279dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol} 280dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 281dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krolstruct tgsi_declaration_dimension 282dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Kroltgsi_build_declaration_dimension(unsigned index_2d, 283dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol struct tgsi_declaration *declaration, 284dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol struct tgsi_header *header) 285dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol{ 286dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol struct tgsi_declaration_dimension dd; 287dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 288dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol assert(index_2d <= 0xFFFF); 289dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 290dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol dd = tgsi_default_declaration_dimension(); 291dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol dd.Index2D = index_2d; 292dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 293dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol declaration_grow(declaration, header); 294dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 295dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol return dd; 296dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol} 297dcf8543ab375dd9c128d1ca772b1e587cebbdc7cMichal Krol 298b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michalstruct tgsi_declaration_semantic 299b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michaltgsi_default_declaration_semantic( void ) 300b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal{ 301b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal struct tgsi_declaration_semantic ds; 302b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 303763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell ds.Name = TGSI_SEMANTIC_POSITION; 304763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell ds.Index = 0; 305b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal ds.Padding = 0; 306b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 307b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal return ds; 308b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal} 309b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 310b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michalstruct tgsi_declaration_semantic 311b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michaltgsi_build_declaration_semantic( 312b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned semantic_name, 313b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal unsigned semantic_index, 314b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal struct tgsi_declaration *declaration, 315b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal struct tgsi_header *header ) 316b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal{ 317b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal struct tgsi_declaration_semantic ds; 318b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 31937cf13ed9a429c755f121daa1776b1b30a985ab3Brian assert( semantic_name <= TGSI_SEMANTIC_COUNT ); 320b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal assert( semantic_index <= 0xFFFF ); 321b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 322b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal ds = tgsi_default_declaration_semantic(); 323763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell ds.Name = semantic_name; 324763426a0256f0ab06f8af53947bd630f8600183aKeith Whitwell ds.Index = semantic_index; 325b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 326b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal declaration_grow( declaration, header ); 327b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 328b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal return ds; 329b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal} 330b9eeb8dccff3b440a299f19a0868a3ff1cda1e09michal 331ffe58739da9eee2e99682747cc8f26e412c87430michal/* 332ffe58739da9eee2e99682747cc8f26e412c87430michal * immediate 333ffe58739da9eee2e99682747cc8f26e412c87430michal */ 334ffe58739da9eee2e99682747cc8f26e412c87430michal 335ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_immediate 336ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_immediate( void ) 337ffe58739da9eee2e99682747cc8f26e412c87430michal{ 338ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_immediate immediate; 339ffe58739da9eee2e99682747cc8f26e412c87430michal 340ffe58739da9eee2e99682747cc8f26e412c87430michal immediate.Type = TGSI_TOKEN_TYPE_IMMEDIATE; 3415ecd0b0890fd48656e46c017830a9f5d6b906aaeMichal Krol immediate.NrTokens = 1; 342ffe58739da9eee2e99682747cc8f26e412c87430michal immediate.DataType = TGSI_IMM_FLOAT32; 343ffe58739da9eee2e99682747cc8f26e412c87430michal immediate.Padding = 0; 344ffe58739da9eee2e99682747cc8f26e412c87430michal 345ffe58739da9eee2e99682747cc8f26e412c87430michal return immediate; 346ffe58739da9eee2e99682747cc8f26e412c87430michal} 347ffe58739da9eee2e99682747cc8f26e412c87430michal 348ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_immediate 349ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_immediate( 350ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 351ffe58739da9eee2e99682747cc8f26e412c87430michal{ 352ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_immediate immediate; 353ffe58739da9eee2e99682747cc8f26e412c87430michal 354ffe58739da9eee2e99682747cc8f26e412c87430michal immediate = tgsi_default_immediate(); 355ffe58739da9eee2e99682747cc8f26e412c87430michal 356271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca header_bodysize_grow( header ); 357ffe58739da9eee2e99682747cc8f26e412c87430michal 358ffe58739da9eee2e99682747cc8f26e412c87430michal return immediate; 359ffe58739da9eee2e99682747cc8f26e412c87430michal} 360ffe58739da9eee2e99682747cc8f26e412c87430michal 361ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_immediate 362ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_full_immediate( void ) 363ffe58739da9eee2e99682747cc8f26e412c87430michal{ 364ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_full_immediate fullimm; 365ffe58739da9eee2e99682747cc8f26e412c87430michal 366ffe58739da9eee2e99682747cc8f26e412c87430michal fullimm.Immediate = tgsi_default_immediate(); 367fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell fullimm.u[0].Float = 0.0f; 368fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell fullimm.u[1].Float = 0.0f; 369fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell fullimm.u[2].Float = 0.0f; 370fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell fullimm.u[3].Float = 0.0f; 371ffe58739da9eee2e99682747cc8f26e412c87430michal 372ffe58739da9eee2e99682747cc8f26e412c87430michal return fullimm; 373ffe58739da9eee2e99682747cc8f26e412c87430michal} 374ffe58739da9eee2e99682747cc8f26e412c87430michal 375ffe58739da9eee2e99682747cc8f26e412c87430michalstatic void 376ffe58739da9eee2e99682747cc8f26e412c87430michalimmediate_grow( 377ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_immediate *immediate, 378ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 379ffe58739da9eee2e99682747cc8f26e412c87430michal{ 3805ecd0b0890fd48656e46c017830a9f5d6b906aaeMichal Krol assert( immediate->NrTokens < 0xFF ); 381ffe58739da9eee2e99682747cc8f26e412c87430michal 3825ecd0b0890fd48656e46c017830a9f5d6b906aaeMichal Krol immediate->NrTokens++; 383ffe58739da9eee2e99682747cc8f26e412c87430michal 384ffe58739da9eee2e99682747cc8f26e412c87430michal header_bodysize_grow( header ); 385ffe58739da9eee2e99682747cc8f26e412c87430michal} 386ffe58739da9eee2e99682747cc8f26e412c87430michal 387fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwellunion tgsi_immediate_data 388ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_immediate_float32( 389529c411e4095eeb9be501a6fe657a3a196c3e448michal float value, 390ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_immediate *immediate, 391ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 392ffe58739da9eee2e99682747cc8f26e412c87430michal{ 393fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell union tgsi_immediate_data immediate_data; 394ffe58739da9eee2e99682747cc8f26e412c87430michal 395fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell immediate_data.Float = value; 396ffe58739da9eee2e99682747cc8f26e412c87430michal 397ffe58739da9eee2e99682747cc8f26e412c87430michal immediate_grow( immediate, header ); 398ffe58739da9eee2e99682747cc8f26e412c87430michal 399fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell return immediate_data; 400ffe58739da9eee2e99682747cc8f26e412c87430michal} 401ffe58739da9eee2e99682747cc8f26e412c87430michal 402529c411e4095eeb9be501a6fe657a3a196c3e448michalunsigned 403ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_full_immediate( 404ffe58739da9eee2e99682747cc8f26e412c87430michal const struct tgsi_full_immediate *full_imm, 405ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_token *tokens, 406ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header, 407529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned maxsize ) 408ffe58739da9eee2e99682747cc8f26e412c87430michal{ 409271f9dac79a9247de9a57f4d248e404bf1652a13José Fonseca unsigned size = 0, i; 410ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_immediate *immediate; 411ffe58739da9eee2e99682747cc8f26e412c87430michal 412ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 413ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 414ffe58739da9eee2e99682747cc8f26e412c87430michal immediate = (struct tgsi_immediate *) &tokens[size]; 415ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 416ffe58739da9eee2e99682747cc8f26e412c87430michal 417ffe58739da9eee2e99682747cc8f26e412c87430michal *immediate = tgsi_build_immediate( header ); 418ffe58739da9eee2e99682747cc8f26e412c87430michal 419fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell assert( full_imm->Immediate.NrTokens <= 4 + 1 ); 420fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell 4215ecd0b0890fd48656e46c017830a9f5d6b906aaeMichal Krol for( i = 0; i < full_imm->Immediate.NrTokens - 1; i++ ) { 422fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell union tgsi_immediate_data *data; 423ffe58739da9eee2e99682747cc8f26e412c87430michal 424ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 425ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 426fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell data = (union tgsi_immediate_data *) &tokens[size]; 427ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 428ffe58739da9eee2e99682747cc8f26e412c87430michal 429fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell *data = tgsi_build_immediate_float32( 430fd31f92cea0ce8613a22d8f4b3c75b340bcc5689Keith Whitwell full_imm->u[i].Float, 431ffe58739da9eee2e99682747cc8f26e412c87430michal immediate, 432ffe58739da9eee2e99682747cc8f26e412c87430michal header ); 433ffe58739da9eee2e99682747cc8f26e412c87430michal } 434ffe58739da9eee2e99682747cc8f26e412c87430michal 435ffe58739da9eee2e99682747cc8f26e412c87430michal return size; 436ffe58739da9eee2e99682747cc8f26e412c87430michal} 437ffe58739da9eee2e99682747cc8f26e412c87430michal 438ffe58739da9eee2e99682747cc8f26e412c87430michal/* 439ffe58739da9eee2e99682747cc8f26e412c87430michal * instruction 440ffe58739da9eee2e99682747cc8f26e412c87430michal */ 441ffe58739da9eee2e99682747cc8f26e412c87430michal 442ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_instruction 443ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_instruction( void ) 444ffe58739da9eee2e99682747cc8f26e412c87430michal{ 445ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_instruction instruction; 446ffe58739da9eee2e99682747cc8f26e412c87430michal 447ffe58739da9eee2e99682747cc8f26e412c87430michal instruction.Type = TGSI_TOKEN_TYPE_INSTRUCTION; 448bc7567d9665924650c43c661d07ae9a922554beeBrian Paul instruction.NrTokens = 0; 449ffe58739da9eee2e99682747cc8f26e412c87430michal instruction.Opcode = TGSI_OPCODE_MOV; 450ffe58739da9eee2e99682747cc8f26e412c87430michal instruction.Saturate = TGSI_SAT_NONE; 4515ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction.Predicate = 0; 452ffe58739da9eee2e99682747cc8f26e412c87430michal instruction.NumDstRegs = 1; 453ffe58739da9eee2e99682747cc8f26e412c87430michal instruction.NumSrcRegs = 1; 454ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction.Label = 0; 455ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction.Texture = 0; 456ffe58739da9eee2e99682747cc8f26e412c87430michal instruction.Padding = 0; 457ffe58739da9eee2e99682747cc8f26e412c87430michal 458ffe58739da9eee2e99682747cc8f26e412c87430michal return instruction; 459ffe58739da9eee2e99682747cc8f26e412c87430michal} 460ffe58739da9eee2e99682747cc8f26e412c87430michal 461ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_instruction 4625ee0d9f632383339088cc33005b7794b0915d4e0Michal Kroltgsi_build_instruction(unsigned opcode, 4635ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol unsigned saturate, 4645ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol unsigned predicate, 4655ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol unsigned num_dst_regs, 4665ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol unsigned num_src_regs, 4675ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol struct tgsi_header *header) 468ffe58739da9eee2e99682747cc8f26e412c87430michal{ 469ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_instruction instruction; 470ffe58739da9eee2e99682747cc8f26e412c87430michal 471ffe58739da9eee2e99682747cc8f26e412c87430michal assert (opcode <= TGSI_OPCODE_LAST); 472ffe58739da9eee2e99682747cc8f26e412c87430michal assert (saturate <= TGSI_SAT_MINUS_PLUS_ONE); 473ffe58739da9eee2e99682747cc8f26e412c87430michal assert (num_dst_regs <= 3); 474ffe58739da9eee2e99682747cc8f26e412c87430michal assert (num_src_regs <= 15); 475ffe58739da9eee2e99682747cc8f26e412c87430michal 476ffe58739da9eee2e99682747cc8f26e412c87430michal instruction = tgsi_default_instruction(); 477ffe58739da9eee2e99682747cc8f26e412c87430michal instruction.Opcode = opcode; 478ffe58739da9eee2e99682747cc8f26e412c87430michal instruction.Saturate = saturate; 4795ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction.Predicate = predicate; 480ffe58739da9eee2e99682747cc8f26e412c87430michal instruction.NumDstRegs = num_dst_regs; 481ffe58739da9eee2e99682747cc8f26e412c87430michal instruction.NumSrcRegs = num_src_regs; 482ffe58739da9eee2e99682747cc8f26e412c87430michal 483ffe58739da9eee2e99682747cc8f26e412c87430michal header_bodysize_grow( header ); 484ffe58739da9eee2e99682747cc8f26e412c87430michal 485ffe58739da9eee2e99682747cc8f26e412c87430michal return instruction; 486ffe58739da9eee2e99682747cc8f26e412c87430michal} 487ffe58739da9eee2e99682747cc8f26e412c87430michal 488ffe58739da9eee2e99682747cc8f26e412c87430michalstatic void 489ffe58739da9eee2e99682747cc8f26e412c87430michalinstruction_grow( 490ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_instruction *instruction, 491ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 492ffe58739da9eee2e99682747cc8f26e412c87430michal{ 4935ecd0b0890fd48656e46c017830a9f5d6b906aaeMichal Krol assert (instruction->NrTokens < 0xFF); 494ffe58739da9eee2e99682747cc8f26e412c87430michal 4955ecd0b0890fd48656e46c017830a9f5d6b906aaeMichal Krol instruction->NrTokens++; 496ffe58739da9eee2e99682747cc8f26e412c87430michal 497ffe58739da9eee2e99682747cc8f26e412c87430michal header_bodysize_grow( header ); 498ffe58739da9eee2e99682747cc8f26e412c87430michal} 499ffe58739da9eee2e99682747cc8f26e412c87430michal 500ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_instruction 501ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_full_instruction( void ) 502ffe58739da9eee2e99682747cc8f26e412c87430michal{ 503ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_full_instruction full_instruction; 504529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned i; 505ffe58739da9eee2e99682747cc8f26e412c87430michal 506ffe58739da9eee2e99682747cc8f26e412c87430michal full_instruction.Instruction = tgsi_default_instruction(); 5077d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_instruction.Predicate = tgsi_default_instruction_predicate(); 5087d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_instruction.Label = tgsi_default_instruction_label(); 5097d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_instruction.Texture = tgsi_default_instruction_texture(); 510ffe58739da9eee2e99682747cc8f26e412c87430michal for( i = 0; i < TGSI_FULL_MAX_DST_REGISTERS; i++ ) { 5117d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_instruction.Dst[i] = tgsi_default_full_dst_register(); 512ffe58739da9eee2e99682747cc8f26e412c87430michal } 513ffe58739da9eee2e99682747cc8f26e412c87430michal for( i = 0; i < TGSI_FULL_MAX_SRC_REGISTERS; i++ ) { 5147d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_instruction.Src[i] = tgsi_default_full_src_register(); 515ffe58739da9eee2e99682747cc8f26e412c87430michal } 516ffe58739da9eee2e99682747cc8f26e412c87430michal 517ffe58739da9eee2e99682747cc8f26e412c87430michal return full_instruction; 518ffe58739da9eee2e99682747cc8f26e412c87430michal} 519ffe58739da9eee2e99682747cc8f26e412c87430michal 520529c411e4095eeb9be501a6fe657a3a196c3e448michalunsigned 521ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_full_instruction( 522ffe58739da9eee2e99682747cc8f26e412c87430michal const struct tgsi_full_instruction *full_inst, 523ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_token *tokens, 524ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header, 525529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned maxsize ) 526ffe58739da9eee2e99682747cc8f26e412c87430michal{ 527529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned size = 0; 528529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned i; 529ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_instruction *instruction; 530ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_token *prev_token; 531ffe58739da9eee2e99682747cc8f26e412c87430michal 532ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 533ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 534ffe58739da9eee2e99682747cc8f26e412c87430michal instruction = (struct tgsi_instruction *) &tokens[size]; 535ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 536ffe58739da9eee2e99682747cc8f26e412c87430michal 5375ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol *instruction = tgsi_build_instruction(full_inst->Instruction.Opcode, 5385ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol full_inst->Instruction.Saturate, 5395ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol full_inst->Instruction.Predicate, 5405ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol full_inst->Instruction.NumDstRegs, 5415ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol full_inst->Instruction.NumSrcRegs, 5425ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol header); 543ffe58739da9eee2e99682747cc8f26e412c87430michal prev_token = (struct tgsi_token *) instruction; 544ffe58739da9eee2e99682747cc8f26e412c87430michal 5455ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol if (full_inst->Instruction.Predicate) { 5465ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol struct tgsi_instruction_predicate *instruction_predicate; 5475ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol 5485ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol if (maxsize <= size) { 5495ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol return 0; 5505ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol } 5515ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate = (struct tgsi_instruction_predicate *)&tokens[size]; 5525ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol size++; 5535ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol 5545ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol *instruction_predicate = 5557d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell tgsi_build_instruction_predicate(full_inst->Predicate.Index, 5567d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_inst->Predicate.Negate, 5577d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_inst->Predicate.SwizzleX, 5587d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_inst->Predicate.SwizzleY, 5597d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_inst->Predicate.SwizzleZ, 5607d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_inst->Predicate.SwizzleW, 5615ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction, 5625ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol header); 5635ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol } 5645ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol 565e13add8cae4637d9cd2f6c40c68de30701736abfMichal Krol if (full_inst->Instruction.Label) { 566ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell struct tgsi_instruction_label *instruction_label; 567ffe58739da9eee2e99682747cc8f26e412c87430michal 568ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 569ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 570ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction_label = 571ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell (struct tgsi_instruction_label *) &tokens[size]; 572ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 573ffe58739da9eee2e99682747cc8f26e412c87430michal 574ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell *instruction_label = tgsi_build_instruction_label( 5757d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_inst->Label.Label, 576ffe58739da9eee2e99682747cc8f26e412c87430michal prev_token, 577ffe58739da9eee2e99682747cc8f26e412c87430michal instruction, 578ffe58739da9eee2e99682747cc8f26e412c87430michal header ); 579ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell prev_token = (struct tgsi_token *) instruction_label; 580ffe58739da9eee2e99682747cc8f26e412c87430michal } 581ffe58739da9eee2e99682747cc8f26e412c87430michal 582e13add8cae4637d9cd2f6c40c68de30701736abfMichal Krol if (full_inst->Instruction.Texture) { 583ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell struct tgsi_instruction_texture *instruction_texture; 584ffe58739da9eee2e99682747cc8f26e412c87430michal 585ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 586ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 587ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction_texture = 588ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell (struct tgsi_instruction_texture *) &tokens[size]; 589ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 590ffe58739da9eee2e99682747cc8f26e412c87430michal 591ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell *instruction_texture = tgsi_build_instruction_texture( 5927d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell full_inst->Texture.Texture, 593ffe58739da9eee2e99682747cc8f26e412c87430michal prev_token, 594ffe58739da9eee2e99682747cc8f26e412c87430michal instruction, 595ffe58739da9eee2e99682747cc8f26e412c87430michal header ); 596ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell prev_token = (struct tgsi_token *) instruction_texture; 597ffe58739da9eee2e99682747cc8f26e412c87430michal } 598ffe58739da9eee2e99682747cc8f26e412c87430michal 599ffe58739da9eee2e99682747cc8f26e412c87430michal for( i = 0; i < full_inst->Instruction.NumDstRegs; i++ ) { 6007d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell const struct tgsi_full_dst_register *reg = &full_inst->Dst[i]; 601ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_dst_register *dst_register; 602ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_token *prev_token; 603ffe58739da9eee2e99682747cc8f26e412c87430michal 604ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 605ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 606ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register = (struct tgsi_dst_register *) &tokens[size]; 607ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 608ffe58739da9eee2e99682747cc8f26e412c87430michal 609ffe58739da9eee2e99682747cc8f26e412c87430michal *dst_register = tgsi_build_dst_register( 6105b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Register.File, 6115b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Register.WriteMask, 6125b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Register.Indirect, 6135b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Register.Index, 614ffe58739da9eee2e99682747cc8f26e412c87430michal instruction, 615ffe58739da9eee2e99682747cc8f26e412c87430michal header ); 616ffe58739da9eee2e99682747cc8f26e412c87430michal prev_token = (struct tgsi_token *) dst_register; 617ffe58739da9eee2e99682747cc8f26e412c87430michal 6185b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell if( reg->Register.Indirect ) { 619baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul struct tgsi_src_register *ind; 620baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul 621baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul if( maxsize <= size ) 622baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul return 0; 623baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul ind = (struct tgsi_src_register *) &tokens[size]; 624baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul size++; 625baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul 626baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul *ind = tgsi_build_src_register( 6275b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Indirect.File, 6285b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Indirect.SwizzleX, 6295b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Indirect.SwizzleY, 6305b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Indirect.SwizzleZ, 6315b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Indirect.SwizzleW, 6325b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Indirect.Negate, 6335b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Indirect.Absolute, 6345b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Indirect.Indirect, 6355b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Indirect.Dimension, 6365b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell reg->Indirect.Index, 637baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul instruction, 638baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul header ); 639baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul } 640ffe58739da9eee2e99682747cc8f26e412c87430michal } 641ffe58739da9eee2e99682747cc8f26e412c87430michal 642ffe58739da9eee2e99682747cc8f26e412c87430michal for( i = 0; i < full_inst->Instruction.NumSrcRegs; i++ ) { 6437d6c8f980d1e23ad6f557d650e89c715861a3b0cKeith Whitwell const struct tgsi_full_src_register *reg = &full_inst->Src[i]; 644ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_src_register *src_register; 645ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_token *prev_token; 646ffe58739da9eee2e99682747cc8f26e412c87430michal 647ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 648ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 649ffe58739da9eee2e99682747cc8f26e412c87430michal src_register = (struct tgsi_src_register *) &tokens[size]; 650ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 651ffe58739da9eee2e99682747cc8f26e412c87430michal 652ffe58739da9eee2e99682747cc8f26e412c87430michal *src_register = tgsi_build_src_register( 65391a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Register.File, 65491a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Register.SwizzleX, 65591a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Register.SwizzleY, 65691a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Register.SwizzleZ, 65791a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Register.SwizzleW, 65891a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Register.Negate, 65991a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Register.Absolute, 66091a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Register.Indirect, 66191a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Register.Dimension, 66291a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Register.Index, 663ffe58739da9eee2e99682747cc8f26e412c87430michal instruction, 664ffe58739da9eee2e99682747cc8f26e412c87430michal header ); 665ffe58739da9eee2e99682747cc8f26e412c87430michal prev_token = (struct tgsi_token *) src_register; 666ffe58739da9eee2e99682747cc8f26e412c87430michal 66791a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if( reg->Register.Indirect ) { 668ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_src_register *ind; 669ffe58739da9eee2e99682747cc8f26e412c87430michal 670ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 671ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 672ffe58739da9eee2e99682747cc8f26e412c87430michal ind = (struct tgsi_src_register *) &tokens[size]; 673ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 674ffe58739da9eee2e99682747cc8f26e412c87430michal 675ffe58739da9eee2e99682747cc8f26e412c87430michal *ind = tgsi_build_src_register( 67691a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Indirect.File, 67791a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Indirect.SwizzleX, 67891a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Indirect.SwizzleY, 67991a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Indirect.SwizzleZ, 68091a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Indirect.SwizzleW, 68191a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Indirect.Negate, 68291a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Indirect.Absolute, 68391a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Indirect.Indirect, 68491a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Indirect.Dimension, 68591a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Indirect.Index, 686ffe58739da9eee2e99682747cc8f26e412c87430michal instruction, 687ffe58739da9eee2e99682747cc8f26e412c87430michal header ); 688ffe58739da9eee2e99682747cc8f26e412c87430michal } 689ffe58739da9eee2e99682747cc8f26e412c87430michal 69091a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if( reg->Register.Dimension ) { 691ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_dimension *dim; 692ffe58739da9eee2e99682747cc8f26e412c87430michal 69391a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell assert( !reg->Dimension.Dimension ); 694ffe58739da9eee2e99682747cc8f26e412c87430michal 695ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 696ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 697ffe58739da9eee2e99682747cc8f26e412c87430michal dim = (struct tgsi_dimension *) &tokens[size]; 698ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 699ffe58739da9eee2e99682747cc8f26e412c87430michal 700ffe58739da9eee2e99682747cc8f26e412c87430michal *dim = tgsi_build_dimension( 70191a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Dimension.Indirect, 70291a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->Dimension.Index, 703ffe58739da9eee2e99682747cc8f26e412c87430michal instruction, 704ffe58739da9eee2e99682747cc8f26e412c87430michal header ); 705ffe58739da9eee2e99682747cc8f26e412c87430michal 70691a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell if( reg->Dimension.Indirect ) { 707ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_src_register *ind; 708ffe58739da9eee2e99682747cc8f26e412c87430michal 709ffe58739da9eee2e99682747cc8f26e412c87430michal if( maxsize <= size ) 710ffe58739da9eee2e99682747cc8f26e412c87430michal return 0; 711ffe58739da9eee2e99682747cc8f26e412c87430michal ind = (struct tgsi_src_register *) &tokens[size]; 712ffe58739da9eee2e99682747cc8f26e412c87430michal size++; 713ffe58739da9eee2e99682747cc8f26e412c87430michal 714ffe58739da9eee2e99682747cc8f26e412c87430michal *ind = tgsi_build_src_register( 71591a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->DimIndirect.File, 71691a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->DimIndirect.SwizzleX, 71791a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->DimIndirect.SwizzleY, 71891a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->DimIndirect.SwizzleZ, 71991a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->DimIndirect.SwizzleW, 72091a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->DimIndirect.Negate, 72191a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->DimIndirect.Absolute, 72291a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->DimIndirect.Indirect, 72391a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->DimIndirect.Dimension, 72491a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell reg->DimIndirect.Index, 725ffe58739da9eee2e99682747cc8f26e412c87430michal instruction, 726ffe58739da9eee2e99682747cc8f26e412c87430michal header ); 727ffe58739da9eee2e99682747cc8f26e412c87430michal } 728ffe58739da9eee2e99682747cc8f26e412c87430michal } 729ffe58739da9eee2e99682747cc8f26e412c87430michal } 730ffe58739da9eee2e99682747cc8f26e412c87430michal 731ffe58739da9eee2e99682747cc8f26e412c87430michal return size; 732ffe58739da9eee2e99682747cc8f26e412c87430michal} 733ffe58739da9eee2e99682747cc8f26e412c87430michal 7345ee0d9f632383339088cc33005b7794b0915d4e0Michal Krolstruct tgsi_instruction_predicate 7355ee0d9f632383339088cc33005b7794b0915d4e0Michal Kroltgsi_default_instruction_predicate(void) 7365ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol{ 7375ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol struct tgsi_instruction_predicate instruction_predicate; 7385ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol 7395ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.SwizzleX = TGSI_SWIZZLE_X; 7405ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.SwizzleY = TGSI_SWIZZLE_Y; 7415ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.SwizzleZ = TGSI_SWIZZLE_Z; 7425ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.SwizzleW = TGSI_SWIZZLE_W; 7435ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.Negate = 0; 7445ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.Index = 0; 7455ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.Padding = 0; 7465ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol 7475ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol return instruction_predicate; 7485ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol} 7495ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol 7505ee0d9f632383339088cc33005b7794b0915d4e0Michal Krolstruct tgsi_instruction_predicate 7515ee0d9f632383339088cc33005b7794b0915d4e0Michal Kroltgsi_build_instruction_predicate(int index, 7525ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol unsigned negate, 7535ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol unsigned swizzleX, 7545ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol unsigned swizzleY, 7555ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol unsigned swizzleZ, 7565ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol unsigned swizzleW, 7575ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol struct tgsi_instruction *instruction, 7585ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol struct tgsi_header *header) 7595ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol{ 7605ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol struct tgsi_instruction_predicate instruction_predicate; 7615ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol 7625ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate = tgsi_default_instruction_predicate(); 7635ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.SwizzleX = swizzleX; 7645ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.SwizzleY = swizzleY; 7655ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.SwizzleZ = swizzleZ; 7665ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.SwizzleW = swizzleW; 7675ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.Negate = negate; 7685ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_predicate.Index = index; 7695ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol 7705ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol instruction_grow(instruction, header); 7715ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol 7725ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol return instruction_predicate; 7735ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol} 7745ee0d9f632383339088cc33005b7794b0915d4e0Michal Krol 775ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwellstruct tgsi_instruction_label 776ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwelltgsi_default_instruction_label( void ) 777ffe58739da9eee2e99682747cc8f26e412c87430michal{ 778ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell struct tgsi_instruction_label instruction_label; 779ffe58739da9eee2e99682747cc8f26e412c87430michal 780ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction_label.Label = 0; 781ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction_label.Padding = 0; 782ffe58739da9eee2e99682747cc8f26e412c87430michal 783ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell return instruction_label; 784ffe58739da9eee2e99682747cc8f26e412c87430michal} 785ffe58739da9eee2e99682747cc8f26e412c87430michal 786ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwellstruct tgsi_instruction_label 787ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwelltgsi_build_instruction_label( 788529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned label, 789ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_token *prev_token, 790ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_instruction *instruction, 791ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 792ffe58739da9eee2e99682747cc8f26e412c87430michal{ 793ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell struct tgsi_instruction_label instruction_label; 794ffe58739da9eee2e99682747cc8f26e412c87430michal 795ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction_label = tgsi_default_instruction_label(); 796ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction_label.Label = label; 797ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction->Label = 1; 798ffe58739da9eee2e99682747cc8f26e412c87430michal 799ffe58739da9eee2e99682747cc8f26e412c87430michal instruction_grow( instruction, header ); 800ffe58739da9eee2e99682747cc8f26e412c87430michal 801ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell return instruction_label; 802ffe58739da9eee2e99682747cc8f26e412c87430michal} 803ffe58739da9eee2e99682747cc8f26e412c87430michal 804ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwellstruct tgsi_instruction_texture 805ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwelltgsi_default_instruction_texture( void ) 806ffe58739da9eee2e99682747cc8f26e412c87430michal{ 807ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell struct tgsi_instruction_texture instruction_texture; 808ffe58739da9eee2e99682747cc8f26e412c87430michal 809ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction_texture.Texture = TGSI_TEXTURE_UNKNOWN; 810ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction_texture.Padding = 0; 811ffe58739da9eee2e99682747cc8f26e412c87430michal 812ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell return instruction_texture; 813ffe58739da9eee2e99682747cc8f26e412c87430michal} 814ffe58739da9eee2e99682747cc8f26e412c87430michal 815ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwellstruct tgsi_instruction_texture 816ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwelltgsi_build_instruction_texture( 817529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned texture, 818ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_token *prev_token, 819ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_instruction *instruction, 820ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 821ffe58739da9eee2e99682747cc8f26e412c87430michal{ 822ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell struct tgsi_instruction_texture instruction_texture; 823ffe58739da9eee2e99682747cc8f26e412c87430michal 824ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction_texture = tgsi_default_instruction_texture(); 825ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction_texture.Texture = texture; 826ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell instruction->Texture = 1; 827ffe58739da9eee2e99682747cc8f26e412c87430michal 828ffe58739da9eee2e99682747cc8f26e412c87430michal instruction_grow( instruction, header ); 829ffe58739da9eee2e99682747cc8f26e412c87430michal 830ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell return instruction_texture; 831ffe58739da9eee2e99682747cc8f26e412c87430michal} 832ffe58739da9eee2e99682747cc8f26e412c87430michal 833ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_src_register 834ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_src_register( void ) 835ffe58739da9eee2e99682747cc8f26e412c87430michal{ 836ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_src_register src_register; 837ffe58739da9eee2e99682747cc8f26e412c87430michal 838ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.File = TGSI_FILE_NULL; 839ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.SwizzleX = TGSI_SWIZZLE_X; 840ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.SwizzleY = TGSI_SWIZZLE_Y; 841ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.SwizzleZ = TGSI_SWIZZLE_Z; 842ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.SwizzleW = TGSI_SWIZZLE_W; 843ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.Negate = 0; 844ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell src_register.Absolute = 0; 845ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.Indirect = 0; 846ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.Dimension = 0; 847ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.Index = 0; 848ffe58739da9eee2e99682747cc8f26e412c87430michal 849ffe58739da9eee2e99682747cc8f26e412c87430michal return src_register; 850ffe58739da9eee2e99682747cc8f26e412c87430michal} 851ffe58739da9eee2e99682747cc8f26e412c87430michal 852ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_src_register 853ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_src_register( 854529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned file, 855529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned swizzle_x, 856529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned swizzle_y, 857529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned swizzle_z, 858529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned swizzle_w, 859529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned negate, 860ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell unsigned absolute, 861529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned indirect, 862529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned dimension, 863529c411e4095eeb9be501a6fe657a3a196c3e448michal int index, 864ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_instruction *instruction, 865ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 866ffe58739da9eee2e99682747cc8f26e412c87430michal{ 867ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_src_register src_register; 868ffe58739da9eee2e99682747cc8f26e412c87430michal 869cff2126f522bb511216f64427b3060467e266f8aBrian Paul assert( file < TGSI_FILE_COUNT ); 870ffe58739da9eee2e99682747cc8f26e412c87430michal assert( swizzle_x <= TGSI_SWIZZLE_W ); 871ffe58739da9eee2e99682747cc8f26e412c87430michal assert( swizzle_y <= TGSI_SWIZZLE_W ); 872ffe58739da9eee2e99682747cc8f26e412c87430michal assert( swizzle_z <= TGSI_SWIZZLE_W ); 873ffe58739da9eee2e99682747cc8f26e412c87430michal assert( swizzle_w <= TGSI_SWIZZLE_W ); 874ffe58739da9eee2e99682747cc8f26e412c87430michal assert( negate <= 1 ); 875ffe58739da9eee2e99682747cc8f26e412c87430michal assert( index >= -0x8000 && index <= 0x7FFF ); 876ffe58739da9eee2e99682747cc8f26e412c87430michal 877ffe58739da9eee2e99682747cc8f26e412c87430michal src_register = tgsi_default_src_register(); 878ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.File = file; 879ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.SwizzleX = swizzle_x; 880ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.SwizzleY = swizzle_y; 881ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.SwizzleZ = swizzle_z; 882ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.SwizzleW = swizzle_w; 883ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.Negate = negate; 884ba1ca28cc62fed71c77902b95ae4ed36c6bf25f8Keith Whitwell src_register.Absolute = absolute; 885ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.Indirect = indirect; 886ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.Dimension = dimension; 887ffe58739da9eee2e99682747cc8f26e412c87430michal src_register.Index = index; 888ffe58739da9eee2e99682747cc8f26e412c87430michal 889ffe58739da9eee2e99682747cc8f26e412c87430michal instruction_grow( instruction, header ); 890ffe58739da9eee2e99682747cc8f26e412c87430michal 891ffe58739da9eee2e99682747cc8f26e412c87430michal return src_register; 892ffe58739da9eee2e99682747cc8f26e412c87430michal} 893ffe58739da9eee2e99682747cc8f26e412c87430michal 894ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_src_register 895ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_full_src_register( void ) 896ffe58739da9eee2e99682747cc8f26e412c87430michal{ 897ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_full_src_register full_src_register; 898ffe58739da9eee2e99682747cc8f26e412c87430michal 89991a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell full_src_register.Register = tgsi_default_src_register(); 90091a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell full_src_register.Indirect = tgsi_default_src_register(); 90191a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell full_src_register.Dimension = tgsi_default_dimension(); 90291a4e6d53f83c45c1da9240b6325011d96b61386Keith Whitwell full_src_register.DimIndirect = tgsi_default_src_register(); 903ffe58739da9eee2e99682747cc8f26e412c87430michal 904ffe58739da9eee2e99682747cc8f26e412c87430michal return full_src_register; 905ffe58739da9eee2e99682747cc8f26e412c87430michal} 906ffe58739da9eee2e99682747cc8f26e412c87430michal 907ffe58739da9eee2e99682747cc8f26e412c87430michal 908ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_dimension 909ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_dimension( void ) 910ffe58739da9eee2e99682747cc8f26e412c87430michal{ 911ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_dimension dimension; 912ffe58739da9eee2e99682747cc8f26e412c87430michal 913ffe58739da9eee2e99682747cc8f26e412c87430michal dimension.Indirect = 0; 914ffe58739da9eee2e99682747cc8f26e412c87430michal dimension.Dimension = 0; 915ffe58739da9eee2e99682747cc8f26e412c87430michal dimension.Padding = 0; 916ffe58739da9eee2e99682747cc8f26e412c87430michal dimension.Index = 0; 917ffe58739da9eee2e99682747cc8f26e412c87430michal 918ffe58739da9eee2e99682747cc8f26e412c87430michal return dimension; 919ffe58739da9eee2e99682747cc8f26e412c87430michal} 920ffe58739da9eee2e99682747cc8f26e412c87430michal 921ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_dimension 922ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_dimension( 923529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned indirect, 924529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned index, 925ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_instruction *instruction, 926ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 927ffe58739da9eee2e99682747cc8f26e412c87430michal{ 928ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_dimension dimension; 929ffe58739da9eee2e99682747cc8f26e412c87430michal 930ffe58739da9eee2e99682747cc8f26e412c87430michal dimension = tgsi_default_dimension(); 931ffe58739da9eee2e99682747cc8f26e412c87430michal dimension.Indirect = indirect; 932ffe58739da9eee2e99682747cc8f26e412c87430michal dimension.Index = index; 933ffe58739da9eee2e99682747cc8f26e412c87430michal 934ffe58739da9eee2e99682747cc8f26e412c87430michal instruction_grow( instruction, header ); 935ffe58739da9eee2e99682747cc8f26e412c87430michal 936ffe58739da9eee2e99682747cc8f26e412c87430michal return dimension; 937ffe58739da9eee2e99682747cc8f26e412c87430michal} 938ffe58739da9eee2e99682747cc8f26e412c87430michal 939ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_dst_register 940ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_dst_register( void ) 941ffe58739da9eee2e99682747cc8f26e412c87430michal{ 942ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_dst_register dst_register; 943ffe58739da9eee2e99682747cc8f26e412c87430michal 944ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register.File = TGSI_FILE_NULL; 945ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register.WriteMask = TGSI_WRITEMASK_XYZW; 946ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register.Indirect = 0; 947ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register.Dimension = 0; 948ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register.Index = 0; 949ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register.Padding = 0; 950ffe58739da9eee2e99682747cc8f26e412c87430michal 951ffe58739da9eee2e99682747cc8f26e412c87430michal return dst_register; 952ffe58739da9eee2e99682747cc8f26e412c87430michal} 953ffe58739da9eee2e99682747cc8f26e412c87430michal 954ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_dst_register 955ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_build_dst_register( 956529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned file, 957529c411e4095eeb9be501a6fe657a3a196c3e448michal unsigned mask, 958baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul unsigned indirect, 959529c411e4095eeb9be501a6fe657a3a196c3e448michal int index, 960ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_instruction *instruction, 961ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_header *header ) 962ffe58739da9eee2e99682747cc8f26e412c87430michal{ 963ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_dst_register dst_register; 964ffe58739da9eee2e99682747cc8f26e412c87430michal 965cff2126f522bb511216f64427b3060467e266f8aBrian Paul assert( file < TGSI_FILE_COUNT ); 966529c411e4095eeb9be501a6fe657a3a196c3e448michal assert( mask <= TGSI_WRITEMASK_XYZW ); 967529c411e4095eeb9be501a6fe657a3a196c3e448michal assert( index >= -32768 && index <= 32767 ); 968ffe58739da9eee2e99682747cc8f26e412c87430michal 969ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register = tgsi_default_dst_register(); 970ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register.File = file; 971ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register.WriteMask = mask; 972ffe58739da9eee2e99682747cc8f26e412c87430michal dst_register.Index = index; 973baa7ff47d548cdcc1ea68657ee1b0500f78041beBrian Paul dst_register.Indirect = indirect; 974ffe58739da9eee2e99682747cc8f26e412c87430michal 975ffe58739da9eee2e99682747cc8f26e412c87430michal instruction_grow( instruction, header ); 976ffe58739da9eee2e99682747cc8f26e412c87430michal 977ffe58739da9eee2e99682747cc8f26e412c87430michal return dst_register; 978ffe58739da9eee2e99682747cc8f26e412c87430michal} 979ffe58739da9eee2e99682747cc8f26e412c87430michal 980ffe58739da9eee2e99682747cc8f26e412c87430michalstruct tgsi_full_dst_register 981ffe58739da9eee2e99682747cc8f26e412c87430michaltgsi_default_full_dst_register( void ) 982ffe58739da9eee2e99682747cc8f26e412c87430michal{ 983ffe58739da9eee2e99682747cc8f26e412c87430michal struct tgsi_full_dst_register full_dst_register; 984ffe58739da9eee2e99682747cc8f26e412c87430michal 9855b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell full_dst_register.Register = tgsi_default_dst_register(); 9865b0824dfe5eaf59fa87134e7482b3d147b262901Keith Whitwell full_dst_register.Indirect = tgsi_default_src_register(); 987ffe58739da9eee2e99682747cc8f26e412c87430michal 988ffe58739da9eee2e99682747cc8f26e412c87430michal return full_dst_register; 989ffe58739da9eee2e99682747cc8f26e412c87430michal} 990ffe58739da9eee2e99682747cc8f26e412c87430michal 9913ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstruct tgsi_property 9923ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusintgsi_default_property( void ) 9933ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 9943ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_property property; 9953ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 9963ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property.Type = TGSI_TOKEN_TYPE_PROPERTY; 9973ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property.NrTokens = 1; 9983ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property.PropertyName = TGSI_PROPERTY_GS_INPUT_PRIM; 9993ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property.Padding = 0; 10003ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10013ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin return property; 10023ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin} 10033ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10043ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstruct tgsi_property 10053ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusintgsi_build_property(unsigned property_name, 10063ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_header *header) 10073ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 10083ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_property property; 10093ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10103ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property = tgsi_default_property(); 10113ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property.PropertyName = property_name; 10123ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10133ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin header_bodysize_grow( header ); 10143ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10153ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin return property; 10163ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin} 10173ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10183ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10193ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstruct tgsi_full_property 10203ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusintgsi_default_full_property( void ) 10213ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 10223ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_full_property full_property; 10233ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10243ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin full_property.Property = tgsi_default_property(); 10253ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin memset(full_property.u, 0, 10263ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin sizeof(struct tgsi_property_data) * 8); 10273ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10283ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin return full_property; 10293ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin} 10303ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10313ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstatic void 10323ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinproperty_grow( 10333ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_property *property, 10343ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_header *header ) 10353ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 10363ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin assert( property->NrTokens < 0xFF ); 10373ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10383ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property->NrTokens++; 10393ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10403ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin header_bodysize_grow( header ); 10413ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin} 10423ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10433ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinstruct tgsi_property_data 10443ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusintgsi_build_property_data( 10453ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin unsigned value, 10463ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_property *property, 10473ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_header *header ) 10483ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 10493ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_property_data property_data; 10503ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10513ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property_data.Data = value; 10523ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10533ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property_grow( property, header ); 10543ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10553ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin return property_data; 10563ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin} 10573ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10583ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusinunsigned 10593ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusintgsi_build_full_property( 10603ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin const struct tgsi_full_property *full_prop, 10613ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_token *tokens, 10623ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_header *header, 10633ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin unsigned maxsize ) 10643ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin{ 10653ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin unsigned size = 0, i; 10663ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_property *property; 10673ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10683ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin if( maxsize <= size ) 10693ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin return 0; 10703ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property = (struct tgsi_property *) &tokens[size]; 10713ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin size++; 10723ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10733ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin *property = tgsi_build_property( 1074960be012a9d185c80bfcb9ff5c3781314dfb7b25Zack Rusin full_prop->Property.PropertyName, 10753ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin header ); 10763ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10773ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin assert( full_prop->Property.NrTokens <= 8 + 1 ); 10783ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10793ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin for( i = 0; i < full_prop->Property.NrTokens - 1; i++ ) { 10803ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin struct tgsi_property_data *data; 10813ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10823ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin if( maxsize <= size ) 10833ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin return 0; 10843ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin data = (struct tgsi_property_data *) &tokens[size]; 10853ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin size++; 10863ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10873ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin *data = tgsi_build_property_data( 10883ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin full_prop->u[i].Data, 10893ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin property, 10903ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin header ); 10913ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin } 10923ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin 10933ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin return size; 10943ff688ea299581e60caf5d6e1a464f68c717fe83Zack Rusin} 1095