1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_debug.h" 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_format.h" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_shader_tokens.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tgsi_build.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tgsi_parse.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * header 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_header 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_header( void ) 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header header; 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header.HeaderSize = 1; 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header.BodySize = 0; 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return header; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgheader_headersize_grow( struct tgsi_header *header ) 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( header->HeaderSize < 0xFF ); 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( header->BodySize == 0 ); 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header->HeaderSize++; 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgheader_bodysize_grow( struct tgsi_header *header ) 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( header->BodySize < 0xFFFFFF ); 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header->BodySize++; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_processor 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_processor( 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned type, 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_processor processor; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org processor.Processor = type; 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org processor.Padding = 0; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header_headersize_grow( header ); 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return processor; 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * declaration 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdeclaration_grow( 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration *declaration, 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( declaration->NrTokens < 0xFF ); 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration->NrTokens++; 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header_bodysize_grow( header ); 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration( void ) 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration declaration; 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Type = TGSI_TOKEN_TYPE_DECLARATION; 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.NrTokens = 1; 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.File = TGSI_FILE_NULL; 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.UsageMask = TGSI_WRITEMASK_XYZW; 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Interpolate = 0; 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Dimension = 0; 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Semantic = 0; 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Invariant = 0; 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Local = 0; 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Padding = 0; 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return declaration; 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration( 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned file, 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned usage_mask, 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned interpolate, 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dimension, 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic, 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned invariant, 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned local, 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration declaration; 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( file < TGSI_FILE_COUNT ); 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( interpolate < TGSI_INTERPOLATE_COUNT ); 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration = tgsi_default_declaration(); 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.File = file; 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.UsageMask = usage_mask; 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Interpolate = interpolate; 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Dimension = dimension; 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Semantic = semantic; 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Invariant = invariant; 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration.Local = local; 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header_bodysize_grow( header ); 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return declaration; 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_range 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration_range( void ) 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_range dr; 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr.First = 0; 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr.Last = 0; 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dr; 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_range 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_range( 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned first, 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned last, 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration *declaration, 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_range declaration_range; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( last >= first ); 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( last <= 0xFFFF ); 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration_range.First = first; 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration_range.Last = last; 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration_grow( declaration, header ); 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return declaration_range; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_dimension 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_dimension(unsigned index_2d, 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration *declaration, 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header) 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_dimension dd; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(index_2d <= 0xFFFF); 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dd.Index2D = index_2d; 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dd.Padding = 0; 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration_grow(declaration, header); 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dd; 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_interp 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration_interp( void ) 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_interp di; 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org di.Interpolate = TGSI_INTERPOLATE_CONSTANT; 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org di.Centroid = 0; 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org di.CylindricalWrap = 0; 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org di.Padding = 0; 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return di; 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_interp 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_interp(unsigned interpolate, 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned centroid, 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned cylindrical_wrap, 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration *declaration, 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header) 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_interp di; 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org di.Interpolate = interpolate; 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org di.Centroid = centroid; 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org di.CylindricalWrap = cylindrical_wrap; 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org di.Padding = 0; 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration_grow(declaration, header); 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return di; 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_semantic 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration_semantic( void ) 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_semantic ds; 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ds.Name = TGSI_SEMANTIC_POSITION; 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ds.Index = 0; 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ds.Padding = 0; 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ds; 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_semantic 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_semantic( 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_name, 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_index, 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration *declaration, 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_semantic ds; 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( semantic_name <= TGSI_SEMANTIC_COUNT ); 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( semantic_index <= 0xFFFF ); 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ds.Name = semantic_name; 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ds.Index = semantic_index; 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ds.Padding = 0; 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration_grow( declaration, header ); 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ds; 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_resource 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration_resource(void) 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_resource dr; 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr.Resource = TGSI_TEXTURE_BUFFER; 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr.Raw = 0; 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr.Writable = 0; 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr.Padding = 0; 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dr; 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_resource 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_resource(unsigned texture, 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned raw, 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned writable, 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration *declaration, 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header) 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_resource dr; 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr = tgsi_default_declaration_resource(); 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr.Resource = texture; 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr.Raw = raw; 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr.Writable = writable; 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration_grow(declaration, header); 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dr; 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_sampler_view 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_declaration_sampler_view(void) 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_sampler_view dsv; 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv.Resource = TGSI_TEXTURE_BUFFER; 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv.ReturnTypeX = PIPE_TYPE_UNORM; 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv.ReturnTypeY = PIPE_TYPE_UNORM; 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv.ReturnTypeZ = PIPE_TYPE_UNORM; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv.ReturnTypeW = PIPE_TYPE_UNORM; 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dsv; 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_declaration_sampler_view 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_declaration_sampler_view(unsigned texture, 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned return_type_x, 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned return_type_y, 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned return_type_z, 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned return_type_w, 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration *declaration, 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header) 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_sampler_view dsv; 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv = tgsi_default_declaration_sampler_view(); 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv.Resource = texture; 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv.ReturnTypeX = return_type_x; 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv.ReturnTypeY = return_type_y; 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv.ReturnTypeZ = return_type_z; 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv.ReturnTypeW = return_type_w; 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration_grow(declaration, header); 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dsv; 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_declaration 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_declaration( void ) 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_full_declaration full_declaration; 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_declaration.Declaration = tgsi_default_declaration(); 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_declaration.Range = tgsi_default_declaration_range(); 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_declaration.Semantic = tgsi_default_declaration_semantic(); 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_declaration.Interp = tgsi_default_declaration_interp(); 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_declaration.ImmediateData.u = NULL; 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_declaration.Resource = tgsi_default_declaration_resource(); 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_declaration.SamplerView = tgsi_default_declaration_sampler_view(); 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return full_declaration; 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_full_declaration( 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_declaration *full_decl, 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_token *tokens, 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header, 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned maxsize ) 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned size = 0; 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration *declaration; 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_range *dr; 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration = (struct tgsi_declaration *) &tokens[size]; 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *declaration = tgsi_build_declaration( 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Declaration.File, 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Declaration.UsageMask, 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Declaration.Interpolate, 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Declaration.Dimension, 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Declaration.Semantic, 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Declaration.Invariant, 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Declaration.Local, 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (maxsize <= size) 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr = (struct tgsi_declaration_range *) &tokens[size]; 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *dr = tgsi_build_declaration_range( 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Range.First, 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Range.Last, 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration, 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (full_decl->Declaration.Dimension) { 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_dimension *dd; 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (maxsize <= size) { 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dd = (struct tgsi_declaration_dimension *)&tokens[size]; 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *dd = tgsi_build_declaration_dimension(full_decl->Dim.Index2D, 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration, 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header); 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (full_decl->Declaration.Interpolate) { 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_interp *di; 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (maxsize <= size) { 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org di = (struct tgsi_declaration_interp *)&tokens[size]; 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *di = tgsi_build_declaration_interp(full_decl->Interp.Interpolate, 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Interp.Centroid, 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Interp.CylindricalWrap, 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration, 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header); 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( full_decl->Declaration.Semantic ) { 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_semantic *ds; 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ds = (struct tgsi_declaration_semantic *) &tokens[size]; 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *ds = tgsi_build_declaration_semantic( 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Semantic.Name, 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Semantic.Index, 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration, 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (full_decl->Declaration.File == TGSI_FILE_IMMEDIATE_ARRAY) { 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i, j; 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union tgsi_immediate_data *data; 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i <= dr->Last; ++i) { 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (j = 0; j < 4; ++j) { 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned idx = i*4 + j; 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (maxsize <= size) 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data = (union tgsi_immediate_data *) &tokens[size]; 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ++size; 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *data = full_decl->ImmediateData.u[idx]; 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration_grow( declaration, header ); 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (full_decl->Declaration.File == TGSI_FILE_RESOURCE) { 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_resource *dr; 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (maxsize <= size) { 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dr = (struct tgsi_declaration_resource *)&tokens[size]; 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *dr = tgsi_build_declaration_resource(full_decl->Resource.Resource, 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Resource.Raw, 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->Resource.Writable, 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration, 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header); 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (full_decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) { 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_declaration_sampler_view *dsv; 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (maxsize <= size) { 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dsv = (struct tgsi_declaration_sampler_view *)&tokens[size]; 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *dsv = tgsi_build_declaration_sampler_view( 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->SamplerView.Resource, 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->SamplerView.ReturnTypeX, 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->SamplerView.ReturnTypeY, 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->SamplerView.ReturnTypeZ, 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_decl->SamplerView.ReturnTypeW, 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org declaration, 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header); 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return size; 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * immediate 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_immediate 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_immediate( void ) 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_immediate immediate; 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org immediate.Type = TGSI_TOKEN_TYPE_IMMEDIATE; 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org immediate.NrTokens = 1; 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org immediate.DataType = TGSI_IMM_FLOAT32; 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org immediate.Padding = 0; 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return immediate; 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_immediate 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_immediate( 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header, 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned type ) 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_immediate immediate; 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org immediate = tgsi_default_immediate(); 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org immediate.DataType = type; 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header_bodysize_grow( header ); 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return immediate; 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_immediate 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_immediate( void ) 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_full_immediate fullimm; 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fullimm.Immediate = tgsi_default_immediate(); 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fullimm.u[0].Float = 0.0f; 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fullimm.u[1].Float = 0.0f; 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fullimm.u[2].Float = 0.0f; 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fullimm.u[3].Float = 0.0f; 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return fullimm; 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgimmediate_grow( 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_immediate *immediate, 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( immediate->NrTokens < 0xFF ); 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org immediate->NrTokens++; 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header_bodysize_grow( header ); 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_full_immediate( 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_immediate *full_imm, 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_token *tokens, 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header, 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned maxsize ) 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned size = 0, i; 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_immediate *immediate; 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org immediate = (struct tgsi_immediate *) &tokens[size]; 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *immediate = tgsi_build_immediate( header, full_imm->Immediate.DataType ); 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( full_imm->Immediate.NrTokens <= 4 + 1 ); 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for( i = 0; i < full_imm->Immediate.NrTokens - 1; i++ ) { 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org union tgsi_immediate_data *data; 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data = (union tgsi_immediate_data *) &tokens[size]; 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *data = full_imm->u[i]; 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org immediate_grow( immediate, header ); 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return size; 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * instruction 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_instruction 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_instruction( void ) 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction instruction; 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.Type = TGSI_TOKEN_TYPE_INSTRUCTION; 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.NrTokens = 0; 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.Opcode = TGSI_OPCODE_MOV; 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.Saturate = TGSI_SAT_NONE; 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.Predicate = 0; 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.NumDstRegs = 1; 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.NumSrcRegs = 1; 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.Label = 0; 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.Texture = 0; 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.Padding = 0; 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return instruction; 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_instruction(unsigned opcode, 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned saturate, 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned predicate, 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_dst_regs, 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_src_regs, 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header) 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction instruction; 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert (opcode <= TGSI_OPCODE_LAST); 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert (saturate <= TGSI_SAT_MINUS_PLUS_ONE); 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert (num_dst_regs <= 3); 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert (num_src_regs <= 15); 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction = tgsi_default_instruction(); 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.Opcode = opcode; 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.Saturate = saturate; 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.Predicate = predicate; 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.NumDstRegs = num_dst_regs; 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction.NumSrcRegs = num_src_regs; 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header_bodysize_grow( header ); 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return instruction; 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orginstruction_grow( 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction *instruction, 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert (instruction->NrTokens < 0xFF); 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction->NrTokens++; 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header_bodysize_grow( header ); 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_instruction_predicate 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_instruction_predicate(void) 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction_predicate instruction_predicate; 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.SwizzleX = TGSI_SWIZZLE_X; 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.SwizzleY = TGSI_SWIZZLE_Y; 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.SwizzleZ = TGSI_SWIZZLE_Z; 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.SwizzleW = TGSI_SWIZZLE_W; 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.Negate = 0; 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.Index = 0; 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.Padding = 0; 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return instruction_predicate; 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction_predicate 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_instruction_predicate(int index, 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned negate, 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzleX, 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzleY, 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzleZ, 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzleW, 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction *instruction, 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header) 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction_predicate instruction_predicate; 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate = tgsi_default_instruction_predicate(); 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.SwizzleX = swizzleX; 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.SwizzleY = swizzleY; 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.SwizzleZ = swizzleZ; 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.SwizzleW = swizzleW; 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.Negate = negate; 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate.Index = index; 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_grow(instruction, header); 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return instruction_predicate; 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction_label 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_instruction_label( void ) 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction_label instruction_label; 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_label.Label = 0; 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_label.Padding = 0; 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return instruction_label; 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction_label 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_instruction_label( 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned label, 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_token *prev_token, 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction *instruction, 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction_label instruction_label; 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_label.Label = label; 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_label.Padding = 0; 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction->Label = 1; 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_grow( instruction, header ); 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return instruction_label; 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction_texture 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_instruction_texture( void ) 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction_texture instruction_texture; 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_texture.Texture = TGSI_TEXTURE_UNKNOWN; 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_texture.NumOffsets = 0; 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_texture.Padding = 0; 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return instruction_texture; 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_instruction_texture 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_instruction_texture( 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned texture, 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_offsets, 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_token *prev_token, 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction *instruction, 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction_texture instruction_texture; 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_texture.Texture = texture; 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_texture.NumOffsets = num_offsets; 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_texture.Padding = 0; 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction->Texture = 1; 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_grow( instruction, header ); 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return instruction_texture; 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_texture_offset 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_texture_offset( void ) 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_texture_offset texture_offset; 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.Index = 0; 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.File = 0; 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.SwizzleX = 0; 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.SwizzleY = 0; 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.SwizzleZ = 0; 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.Padding = 0; 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return texture_offset; 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_texture_offset 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_texture_offset( 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int index, int file, int swizzle_x, int swizzle_y, int swizzle_z, 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_token *prev_token, 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction *instruction, 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_texture_offset texture_offset; 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.Index = index; 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.File = file; 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.SwizzleX = swizzle_x; 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.SwizzleY = swizzle_y; 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.SwizzleZ = swizzle_z; 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset.Padding = 0; 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_grow( instruction, header ); 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return texture_offset; 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_src_register 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_src_register( void ) 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_src_register src_register; 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.File = TGSI_FILE_NULL; 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.SwizzleX = TGSI_SWIZZLE_X; 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.SwizzleY = TGSI_SWIZZLE_Y; 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.SwizzleZ = TGSI_SWIZZLE_Z; 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.SwizzleW = TGSI_SWIZZLE_W; 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.Negate = 0; 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.Absolute = 0; 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.Indirect = 0; 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.Dimension = 0; 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.Index = 0; 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return src_register; 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_src_register 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_src_register( 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned file, 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_x, 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_y, 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_z, 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_w, 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned negate, 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned absolute, 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned indirect, 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dimension, 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int index, 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction *instruction, 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_src_register src_register; 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( file < TGSI_FILE_COUNT ); 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( swizzle_x <= TGSI_SWIZZLE_W ); 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( swizzle_y <= TGSI_SWIZZLE_W ); 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( swizzle_z <= TGSI_SWIZZLE_W ); 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( swizzle_w <= TGSI_SWIZZLE_W ); 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( negate <= 1 ); 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( index >= -0x8000 && index <= 0x7FFF ); 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.File = file; 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.SwizzleX = swizzle_x; 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.SwizzleY = swizzle_y; 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.SwizzleZ = swizzle_z; 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.SwizzleW = swizzle_w; 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.Negate = negate; 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.Absolute = absolute; 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.Indirect = indirect; 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.Dimension = dimension; 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register.Index = index; 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_grow( instruction, header ); 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return src_register; 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_dimension 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_dimension( void ) 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_dimension dimension; 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dimension.Indirect = 0; 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dimension.Dimension = 0; 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dimension.Padding = 0; 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dimension.Index = 0; 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dimension; 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_full_src_register 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_src_register( void ) 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_full_src_register full_src_register; 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_src_register.Register = tgsi_default_src_register(); 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_src_register.Indirect = tgsi_default_src_register(); 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_src_register.Dimension = tgsi_default_dimension(); 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_src_register.DimIndirect = tgsi_default_src_register(); 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return full_src_register; 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_dimension 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_dimension( 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned indirect, 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned index, 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction *instruction, 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_dimension dimension; 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dimension.Indirect = indirect; 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dimension.Dimension = 0; 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dimension.Padding = 0; 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dimension.Index = index; 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_grow( instruction, header ); 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dimension; 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_dst_register 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_dst_register( void ) 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_dst_register dst_register; 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.File = TGSI_FILE_NULL; 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.WriteMask = TGSI_WRITEMASK_XYZW; 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.Indirect = 0; 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.Dimension = 0; 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.Index = 0; 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.Padding = 0; 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dst_register; 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_dst_register 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_dst_register( 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned file, 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned mask, 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned indirect, 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned dimension, 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int index, 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction *instruction, 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_dst_register dst_register; 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( file < TGSI_FILE_COUNT ); 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( mask <= TGSI_WRITEMASK_XYZW ); 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( index >= -32768 && index <= 32767 ); 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.File = file; 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.WriteMask = mask; 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.Indirect = indirect; 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.Dimension = dimension; 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.Index = index; 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register.Padding = 0; 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_grow( instruction, header ); 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dst_register; 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_full_dst_register 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_dst_register( void ) 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_full_dst_register full_dst_register; 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_dst_register.Register = tgsi_default_dst_register(); 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_dst_register.Indirect = tgsi_default_src_register(); 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_dst_register.Dimension = tgsi_default_dimension(); 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_dst_register.DimIndirect = tgsi_default_src_register(); 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return full_dst_register; 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_instruction 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_instruction( void ) 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_full_instruction full_instruction; 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_instruction.Instruction = tgsi_default_instruction(); 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_instruction.Predicate = tgsi_default_instruction_predicate(); 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_instruction.Label = tgsi_default_instruction_label(); 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_instruction.Texture = tgsi_default_instruction_texture(); 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for( i = 0; i < TGSI_FULL_MAX_TEX_OFFSETS; i++ ) { 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_instruction.TexOffsets[i] = tgsi_default_texture_offset(); 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for( i = 0; i < TGSI_FULL_MAX_DST_REGISTERS; i++ ) { 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_instruction.Dst[i] = tgsi_default_full_dst_register(); 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for( i = 0; i < TGSI_FULL_MAX_SRC_REGISTERS; i++ ) { 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_instruction.Src[i] = tgsi_default_full_src_register(); 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return full_instruction; 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_full_instruction( 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_instruction *full_inst, 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_token *tokens, 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header, 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned maxsize ) 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned size = 0; 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction *instruction; 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_token *prev_token; 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction = (struct tgsi_instruction *) &tokens[size]; 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *instruction = tgsi_build_instruction(full_inst->Instruction.Opcode, 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Instruction.Saturate, 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Instruction.Predicate, 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Instruction.NumDstRegs, 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Instruction.NumSrcRegs, 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header); 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org prev_token = (struct tgsi_token *) instruction; 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (full_inst->Instruction.Predicate) { 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction_predicate *instruction_predicate; 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (maxsize <= size) { 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_predicate = (struct tgsi_instruction_predicate *)&tokens[size]; 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *instruction_predicate = 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org tgsi_build_instruction_predicate(full_inst->Predicate.Index, 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Predicate.Negate, 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Predicate.SwizzleX, 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Predicate.SwizzleY, 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Predicate.SwizzleZ, 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Predicate.SwizzleW, 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header); 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (full_inst->Instruction.Label) { 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction_label *instruction_label; 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_label = 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (struct tgsi_instruction_label *) &tokens[size]; 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *instruction_label = tgsi_build_instruction_label( 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Label.Label, 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org prev_token, 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org prev_token = (struct tgsi_token *) instruction_label; 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (full_inst->Instruction.Texture) { 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_instruction_texture *instruction_texture; 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction_texture = 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (struct tgsi_instruction_texture *) &tokens[size]; 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *instruction_texture = tgsi_build_instruction_texture( 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Texture.Texture, 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->Texture.NumOffsets, 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org prev_token, 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org prev_token = (struct tgsi_token *) instruction_texture; 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < full_inst->Texture.NumOffsets; i++) { 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_texture_offset *texture_offset; 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if ( maxsize <= size ) 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org texture_offset = (struct tgsi_texture_offset *)&tokens[size]; 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *texture_offset = tgsi_build_texture_offset( 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->TexOffsets[i].Index, 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->TexOffsets[i].File, 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->TexOffsets[i].SwizzleX, 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->TexOffsets[i].SwizzleY, 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_inst->TexOffsets[i].SwizzleZ, 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org prev_token, 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header); 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org prev_token = (struct tgsi_token *) texture_offset; 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for( i = 0; i < full_inst->Instruction.NumDstRegs; i++ ) { 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_dst_register *reg = &full_inst->Dst[i]; 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_dst_register *dst_register; 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst_register = (struct tgsi_dst_register *) &tokens[size]; 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *dst_register = tgsi_build_dst_register( 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.File, 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.WriteMask, 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.Indirect, 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.Dimension, 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.Index, 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( reg->Register.Indirect ) { 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_src_register *ind; 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ind = (struct tgsi_src_register *) &tokens[size]; 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *ind = tgsi_build_src_register( 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.File, 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.SwizzleX, 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.SwizzleY, 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.SwizzleZ, 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.SwizzleW, 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.Negate, 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.Absolute, 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.Indirect, 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.Dimension, 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.Index, 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( reg->Register.Dimension ) { 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_dimension *dim; 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( !reg->Dimension.Dimension ); 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dim = (struct tgsi_dimension *) &tokens[size]; 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *dim = tgsi_build_dimension( 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Dimension.Indirect, 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Dimension.Index, 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( reg->Dimension.Indirect ) { 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_src_register *ind; 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ind = (struct tgsi_src_register *) &tokens[size]; 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *ind = tgsi_build_src_register( 1126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.File, 1127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.SwizzleX, 1128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.SwizzleY, 1129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.SwizzleZ, 1130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.SwizzleW, 1131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.Negate, 1132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.Absolute, 1133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.Indirect, 1134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.Dimension, 1135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.Index, 1136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for( i = 0; i < full_inst->Instruction.NumSrcRegs; i++ ) { 1143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_src_register *reg = &full_inst->Src[i]; 1144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_src_register *src_register; 1145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src_register = (struct tgsi_src_register *) &tokens[size]; 1149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *src_register = tgsi_build_src_register( 1152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.File, 1153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.SwizzleX, 1154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.SwizzleY, 1155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.SwizzleZ, 1156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.SwizzleW, 1157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.Negate, 1158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.Absolute, 1159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.Indirect, 1160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.Dimension, 1161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Register.Index, 1162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( reg->Register.Indirect ) { 1166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_src_register *ind; 1167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ind = (struct tgsi_src_register *) &tokens[size]; 1171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *ind = tgsi_build_src_register( 1174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.File, 1175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.SwizzleX, 1176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.SwizzleY, 1177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.SwizzleZ, 1178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.SwizzleW, 1179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.Negate, 1180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.Absolute, 1181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.Indirect, 1182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.Dimension, 1183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Indirect.Index, 1184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( reg->Register.Dimension ) { 1189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_dimension *dim; 1190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( !reg->Dimension.Dimension ); 1192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dim = (struct tgsi_dimension *) &tokens[size]; 1196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *dim = tgsi_build_dimension( 1199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Dimension.Indirect, 1200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->Dimension.Index, 1201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( reg->Dimension.Indirect ) { 1205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_src_register *ind; 1206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ind = (struct tgsi_src_register *) &tokens[size]; 1210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *ind = tgsi_build_src_register( 1213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.File, 1214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.SwizzleX, 1215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.SwizzleY, 1216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.SwizzleZ, 1217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.SwizzleW, 1218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.Negate, 1219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.Absolute, 1220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.Indirect, 1221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.Dimension, 1222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg->DimIndirect.Index, 1223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org instruction, 1224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return size; 1230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_property 1233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_property( void ) 1234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_property property; 1236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property.Type = TGSI_TOKEN_TYPE_PROPERTY; 1238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property.NrTokens = 1; 1239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property.PropertyName = TGSI_PROPERTY_GS_INPUT_PRIM; 1240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property.Padding = 0; 1241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return property; 1243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_property 1246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_property(unsigned property_name, 1247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header) 1248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_property property; 1250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property = tgsi_default_property(); 1252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property.PropertyName = property_name; 1253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header_bodysize_grow( header ); 1255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return property; 1257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct tgsi_full_property 1261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_default_full_property( void ) 1262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_full_property full_property; 1264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_property.Property = tgsi_default_property(); 1266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(full_property.u, 0, 1267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sizeof(struct tgsi_property_data) * 8); 1268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return full_property; 1270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 1273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgproperty_grow( 1274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_property *property, 1275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 1276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( property->NrTokens < 0xFF ); 1278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property->NrTokens++; 1280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header_bodysize_grow( header ); 1282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct tgsi_property_data 1285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_property_data( 1286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned value, 1287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_property *property, 1288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header ) 1289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_property_data property_data; 1291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property_data.Data = value; 1293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property_grow( property, header ); 1295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return property_data; 1297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned 1300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtgsi_build_full_property( 1301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_full_property *full_prop, 1302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_token *tokens, 1303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_header *header, 1304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned maxsize ) 1305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned size = 0, i; 1307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_property *property; 1308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property = (struct tgsi_property *) &tokens[size]; 1312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *property = tgsi_build_property( 1315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_prop->Property.PropertyName, 1316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( full_prop->Property.NrTokens <= 8 + 1 ); 1319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for( i = 0; i < full_prop->Property.NrTokens - 1; i++ ) { 1321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct tgsi_property_data *data; 1322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if( maxsize <= size ) 1324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 1325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org data = (struct tgsi_property_data *) &tokens[size]; 1326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size++; 1327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *data = tgsi_build_property_data( 1329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org full_prop->u[i].Data, 1330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org property, 1331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org header ); 1332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 1333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return size; 1335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1336