1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2009 VMware, Inc. 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 VMWARE, INC 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#ifndef TGSI_UREG_H 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TGSI_UREG_H 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_compiler.h" 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_shader_tokens.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_debug.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" { 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_program; 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_stream_output_info; 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Almost a tgsi_src_register, but we need to pull in the Absolute 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * flag from the _ext token. Indirect flag always implies ADDR[0]. 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned File : 4; /* TGSI_FILE_ */ 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned SwizzleX : 2; /* TGSI_SWIZZLE_ */ 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned SwizzleY : 2; /* TGSI_SWIZZLE_ */ 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned SwizzleZ : 2; /* TGSI_SWIZZLE_ */ 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned SwizzleW : 2; /* TGSI_SWIZZLE_ */ 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Indirect : 1; /* BOOL */ 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned DimIndirect : 1; /* BOOL */ 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Dimension : 1; /* BOOL */ 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Absolute : 1; /* BOOL */ 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Negate : 1; /* BOOL */ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned IndirectFile : 4; /* TGSI_FILE_ */ 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned IndirectSwizzle : 2; /* TGSI_SWIZZLE_ */ 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned DimIndFile : 4; /* TGSI_FILE_ */ 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned DimIndSwizzle : 2; /* TGSI_SWIZZLE_ */ 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int Index : 16; /* SINT */ 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int IndirectIndex : 16; /* SINT */ 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int DimensionIndex : 16; /* SINT */ 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int DimIndIndex : 16; /* SINT */ 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Very similar to a tgsi_dst_register, removing unsupported fields 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and adding a Saturate flag. It's easier to push saturate into the 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * destination register than to try and create a _SAT variant of each 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * instruction function. 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned File : 4; /* TGSI_FILE_ */ 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned WriteMask : 4; /* TGSI_WRITEMASK_ */ 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Indirect : 1; /* BOOL */ 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Saturate : 1; /* BOOL */ 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned Predicate : 1; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned PredNegate : 1; /* BOOL */ 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned PredSwizzleX: 2; /* TGSI_SWIZZLE_ */ 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned PredSwizzleY: 2; /* TGSI_SWIZZLE_ */ 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned PredSwizzleZ: 2; /* TGSI_SWIZZLE_ */ 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned PredSwizzleW: 2; /* TGSI_SWIZZLE_ */ 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int Index : 16; /* SINT */ 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int IndirectIndex : 16; /* SINT */ 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int IndirectSwizzle : 2; /* TGSI_SWIZZLE_ */ 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_context; 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_program * 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_create( unsigned processor ); 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct tgsi_token * 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_finalize( struct ureg_program * ); 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Create and return a shader: 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid * 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_create_shader( struct ureg_program *, 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe, 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_stream_output_info *so ); 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Alternately, return the built token stream and hand ownership of 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * that memory to the caller: 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct tgsi_token * 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_get_tokens( struct ureg_program *ureg, 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *nr_tokens ); 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Free the tokens created by ureg_get_tokens() */ 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid ureg_free_tokens( const struct tgsi_token *tokens ); 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_destroy( struct ureg_program * ); 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************************************** 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Convenience routine: 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void * 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_create_shader_with_so_and_destroy( struct ureg_program *p, 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe, 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct pipe_stream_output_info *so ) 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *result = ureg_create_shader( p, pipe, so ); 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_destroy( p ); 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return result; 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void * 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_create_shader_and_destroy( struct ureg_program *p, 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_context *pipe ) 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_create_shader_with_so_and_destroy(p, pipe, NULL); 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************************************** 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Build shader properties: 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_gs_input_prim(struct ureg_program *ureg, 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned input_prim); 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_gs_output_prim(struct ureg_program *ureg, 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned output_prim); 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_gs_max_vertices(struct ureg_program *ureg, 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned max_vertices); 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_fs_coord_origin(struct ureg_program *ureg, 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned fs_coord_origin); 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_fs_coord_pixel_center(struct ureg_program *ureg, 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned fs_coord_pixel_center); 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_fs_color0_writes_all_cbufs(struct ureg_program *ureg, 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned fs_color0_writes_all_cbufs); 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_fs_depth_layout(struct ureg_program *ureg, 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned fs_depth_layout); 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************************************** 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Build shader declarations: 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_fs_input_cyl_centroid(struct ureg_program *, 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_name, 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_index, 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned interp_mode, 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned cylindrical_wrap, 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned centroid); 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_fs_input_cyl(struct ureg_program *ureg, 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_name, 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_index, 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned interp_mode, 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned cylindrical_wrap) 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_fs_input_cyl_centroid(ureg, 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org semantic_name, 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org semantic_index, 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org interp_mode, 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cylindrical_wrap, 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0); 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_fs_input(struct ureg_program *ureg, 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_name, 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_index, 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned interp_mode) 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_fs_input_cyl_centroid(ureg, 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org semantic_name, 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org semantic_index, 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org interp_mode, 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, 0); 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_vs_input( struct ureg_program *, 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned index ); 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_gs_input(struct ureg_program *, 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned index, 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_name, 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_index); 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_system_value(struct ureg_program *, 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned index, 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_name, 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_index); 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_output_masked( struct ureg_program *, 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_name, 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_index, 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned usage_mask ); 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_output( struct ureg_program *, 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_name, 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned semantic_index ); 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_immediate( struct ureg_program *, 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const float *v, 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr ); 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_immediate_uint( struct ureg_program *, 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const unsigned *v, 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr ); 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_immediate_block_uint( struct ureg_program *, 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const unsigned *v, 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr ); 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_immediate_int( struct ureg_program *, 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const int *v, 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr ); 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_constant2D(struct ureg_program *ureg, 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned first, 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned last, 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned index2D); 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_constant( struct ureg_program *, 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned index ); 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_temporary( struct ureg_program * ); 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Emit a temporary with the LOCAL declaration flag set. For use when 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the register value is not required to be preserved across 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * subroutine boundaries. 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_local_temporary( struct ureg_program * ); 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_release_temporary( struct ureg_program *ureg, 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst tmp ); 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_address( struct ureg_program * ); 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_predicate(struct ureg_program *); 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Supply an index to the sampler declaration as this is the hook to 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the external pipe_sampler state. Users of this function probably 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * don't want just any sampler, but a specific one which they've set 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * up state for in the context. 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_sampler( struct ureg_program *, 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned index ); 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_sampler_view(struct ureg_program *, 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned index, 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned target, 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned return_type_x, 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned return_type_y, 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned return_type_z, 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned return_type_w ); 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm4f( struct ureg_program *ureg, 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float a, float b, 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float c, float d) 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float v[4]; 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[0] = a; 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[1] = b; 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[2] = c; 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[3] = d; 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate( ureg, v, 4 ); 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm3f( struct ureg_program *ureg, 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float a, float b, 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float c) 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float v[3]; 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[0] = a; 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[1] = b; 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[2] = c; 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate( ureg, v, 3 ); 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm2f( struct ureg_program *ureg, 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float a, float b) 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float v[2]; 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[0] = a; 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[1] = b; 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate( ureg, v, 2 ); 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm1f( struct ureg_program *ureg, 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float a) 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org float v[1]; 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[0] = a; 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate( ureg, v, 1 ); 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm4u( struct ureg_program *ureg, 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned a, unsigned b, 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned c, unsigned d) 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned v[4]; 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[0] = a; 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[1] = b; 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[2] = c; 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[3] = d; 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate_uint( ureg, v, 4 ); 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm3u( struct ureg_program *ureg, 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned a, unsigned b, 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned c) 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned v[3]; 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[0] = a; 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[1] = b; 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[2] = c; 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate_uint( ureg, v, 3 ); 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm2u( struct ureg_program *ureg, 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned a, unsigned b) 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned v[2]; 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[0] = a; 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[1] = b; 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate_uint( ureg, v, 2 ); 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm1u( struct ureg_program *ureg, 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned a) 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate_uint( ureg, &a, 1 ); 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm4i( struct ureg_program *ureg, 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int a, int b, 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int c, int d) 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int v[4]; 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[0] = a; 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[1] = b; 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[2] = c; 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[3] = d; 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate_int( ureg, v, 4 ); 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm3i( struct ureg_program *ureg, 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int a, int b, 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int c) 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int v[3]; 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[0] = a; 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[1] = b; 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[2] = c; 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate_int( ureg, v, 3 ); 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm2i( struct ureg_program *ureg, 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int a, int b) 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int v[2]; 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[0] = a; 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org v[1] = b; 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate_int( ureg, v, 2 ); 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm1i( struct ureg_program *ureg, 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int a) 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_DECL_immediate_int( ureg, &a, 1 ); 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************************************** 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Functions for patching up labels 442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Will return a number which can be used in a label to point to the 446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next instruction to be emitted. 447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned 449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_get_instruction_number( struct ureg_program *ureg ); 450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Patch a given label (expressed as a token number) to point to a 453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * given instruction (expressed as an instruction number). 454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Labels are obtained from instruction emitters, eg ureg_CAL(). 456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Instruction numbers are obtained from ureg_get_instruction_number(), 457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * above. 458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_fixup_label(struct ureg_program *ureg, 461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned label_token, 462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned instruction_number ); 463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Generic instruction emitter. Use if you need to pass the opcode as 466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a parameter, rather than using the emit_OP() variants below. 467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_insn(struct ureg_program *ureg, 470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode, 471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct ureg_dst *dst, 472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr_dst, 473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct ureg_src *src, 474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr_src ); 475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_tex_insn(struct ureg_program *ureg, 479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode, 480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct ureg_dst *dst, 481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr_dst, 482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned target, 483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_texture_offset *texoffsets, 484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr_offset, 485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct ureg_src *src, 486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr_src ); 487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_label_insn(struct ureg_program *ureg, 491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode, 492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct ureg_src *src, 493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned nr_src, 494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *label); 495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************************************** 498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Internal instruction helpers, don't call these directly: 499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_emit_insn_result { 502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn_token; /*< Used to fixup insn size. */ 503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned extended_token; /*< Used to set the Extended bit, usually the same as insn_token. */ 504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_emit_insn_result 507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_insn(struct ureg_program *ureg, 508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode, 509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean saturate, 510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean predicate, 511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean pred_negate, 512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pred_swizzle_x, 513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pred_swizzle_y, 514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pred_swizzle_z, 515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pred_swizzle_w, 516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_dst, 517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned num_src ); 518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_label(struct ureg_program *ureg, 521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn_token, 522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *label_token ); 523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_texture(struct ureg_program *ureg, 526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn_token, 527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned target, unsigned num_offsets); 528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_texture_offset(struct ureg_program *ureg, 531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct tgsi_texture_offset *offset); 532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_dst( struct ureg_program *ureg, 535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst ); 536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_src( struct ureg_program *ureg, 539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src ); 540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_fixup_insn_size(struct ureg_program *ureg, 543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn ); 544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP00( op ) \ 547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg ) \ 548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn = ureg_emit_insn(ureg, \ 551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_X, \ 556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_Y, \ 557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_Z, \ 558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_W, \ 559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, \ 560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0).insn_token; \ 561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn ); \ 562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP01( op ) \ 565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src ) \ 567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn = ureg_emit_insn(ureg, \ 570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_X, \ 575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_Y, \ 576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_Z, \ 577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_W, \ 578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, \ 579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1).insn_token; \ 580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src ); \ 581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn ); \ 582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP00_LBL( op ) \ 585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *label_token ) \ 587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_emit_insn_result insn; \ 590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org insn = ureg_emit_insn(ureg, \ 591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_X, \ 596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_Y, \ 597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_Z, \ 598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_W, \ 599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, \ 600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0); \ 601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_label( ureg, insn.extended_token, label_token ); \ 602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn.insn_token ); \ 603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP01_LBL( op ) \ 606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src, \ 608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *label_token ) \ 609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_emit_insn_result insn; \ 612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org insn = ureg_emit_insn(ureg, \ 613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, \ 617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_X, \ 618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_Y, \ 619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_Z, \ 620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TGSI_SWIZZLE_W, \ 621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, \ 622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1); \ 623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_label( ureg, insn.extended_token, label_token ); \ 624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src ); \ 625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn.insn_token ); \ 626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP10( op ) \ 629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst ) \ 631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn = ureg_emit_insn(ureg, \ 634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Saturate, \ 636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Predicate, \ 637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredNegate, \ 638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleX, \ 639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleY, \ 640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleZ, \ 641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleW, \ 642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, \ 643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0).insn_token; \ 644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_dst( ureg, dst ); \ 645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn ); \ 646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP11( op ) \ 650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst, \ 652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src ) \ 653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn = ureg_emit_insn(ureg, \ 656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Saturate, \ 658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Predicate, \ 659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredNegate, \ 660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleX, \ 661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleY, \ 662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleZ, \ 663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleW, \ 664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, \ 665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1).insn_token; \ 666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_dst( ureg, dst ); \ 667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src ); \ 668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn ); \ 669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP12( op ) \ 672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst, \ 674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src0, \ 675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src1 ) \ 676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn = ureg_emit_insn(ureg, \ 679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Saturate, \ 681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Predicate, \ 682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredNegate, \ 683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleX, \ 684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleY, \ 685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleZ, \ 686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleW, \ 687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, \ 688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2).insn_token; \ 689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_dst( ureg, dst ); \ 690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src0 ); \ 691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src1 ); \ 692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn ); \ 693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP12_TEX( op ) \ 696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst, \ 698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned target, \ 699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src0, \ 700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src1 ) \ 701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_emit_insn_result insn; \ 704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org insn = ureg_emit_insn(ureg, \ 705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Saturate, \ 707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Predicate, \ 708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredNegate, \ 709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleX, \ 710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleY, \ 711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleZ, \ 712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleW, \ 713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, \ 714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2); \ 715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_texture( ureg, insn.extended_token, target, 0 ); \ 716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_dst( ureg, dst ); \ 717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src0 ); \ 718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src1 ); \ 719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn.insn_token ); \ 720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP13( op ) \ 723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst, \ 725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src0, \ 726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src1, \ 727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src2 ) \ 728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn = ureg_emit_insn(ureg, \ 731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Saturate, \ 733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Predicate, \ 734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredNegate, \ 735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleX, \ 736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleY, \ 737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleZ, \ 738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleW, \ 739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, \ 740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3).insn_token; \ 741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_dst( ureg, dst ); \ 742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src0 ); \ 743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src1 ); \ 744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src2 ); \ 745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn ); \ 746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP14_TEX( op ) \ 749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst, \ 751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned target, \ 752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src0, \ 753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src1, \ 754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src2, \ 755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src3 ) \ 756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_emit_insn_result insn; \ 759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org insn = ureg_emit_insn(ureg, \ 760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Saturate, \ 762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Predicate, \ 763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredNegate, \ 764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleX, \ 765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleY, \ 766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleZ, \ 767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleW, \ 768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, \ 769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 4); \ 770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_texture( ureg, insn.extended_token, target, 0 ); \ 771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_dst( ureg, dst ); \ 772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src0 ); \ 773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src1 ); \ 774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src2 ); \ 775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src3 ); \ 776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn.insn_token ); \ 777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP14( op ) \ 781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst, \ 783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src0, \ 784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src1, \ 785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src2, \ 786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src3 ) \ 787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn = ureg_emit_insn(ureg, \ 790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Saturate, \ 792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Predicate, \ 793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredNegate, \ 794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleX, \ 795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleY, \ 796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleZ, \ 797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleW, \ 798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, \ 799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 4).insn_token; \ 800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_dst( ureg, dst ); \ 801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src0 ); \ 802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src1 ); \ 803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src2 ); \ 804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src3 ); \ 805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn ); \ 806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP15( op ) \ 810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg, \ 811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst, \ 812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src0, \ 813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src1, \ 814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src2, \ 815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src3, \ 816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src4 ) \ 817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned opcode = TGSI_OPCODE_##op; \ 819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned insn = ureg_emit_insn(ureg, \ 820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org opcode, \ 821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Saturate, \ 822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Predicate, \ 823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredNegate, \ 824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleX, \ 825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleY, \ 826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleZ, \ 827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleW, \ 828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, \ 829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 5).insn_token; \ 830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_dst( ureg, dst ); \ 831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src0 ); \ 832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src1 ); \ 833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src2 ); \ 834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src3 ); \ 835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_emit_src( ureg, src4 ); \ 836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ureg_fixup_insn_size( ureg, insn ); \ 837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Use a template include to generate a correctly-typed ureg_OP() 841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * function for each TGSI opcode: 842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tgsi_opcode_tmp.h" 844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*********************************************************************** 847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Inline helpers for manipulating register structs: 848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_negate( struct ureg_src reg ) 851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(reg.File != TGSI_FILE_NULL); 853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.Negate ^= 1; 854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return reg; 855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_abs( struct ureg_src reg ) 859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(reg.File != TGSI_FILE_NULL); 861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.Absolute = 1; 862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.Negate = 0; 863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return reg; 864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_swizzle( struct ureg_src reg, 868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int x, int y, int z, int w ) 869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swz = ( (reg.SwizzleX << 0) | 871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (reg.SwizzleY << 2) | 872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (reg.SwizzleZ << 4) | 873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (reg.SwizzleW << 6)); 874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(reg.File != TGSI_FILE_NULL); 876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(x < 4); 877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(y < 4); 878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(z < 4); 879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(w < 4); 880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.SwizzleX = (swz >> (x*2)) & 0x3; 882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.SwizzleY = (swz >> (y*2)) & 0x3; 883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.SwizzleZ = (swz >> (z*2)) & 0x3; 884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.SwizzleW = (swz >> (w*2)) & 0x3; 885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return reg; 886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_scalar( struct ureg_src reg, int x ) 890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return ureg_swizzle(reg, x, x, x, x); 892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst 895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_writemask( struct ureg_dst reg, 896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned writemask ) 897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(reg.File != TGSI_FILE_NULL); 899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.WriteMask &= writemask; 900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return reg; 901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst 904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_saturate( struct ureg_dst reg ) 905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(reg.File != TGSI_FILE_NULL); 907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.Saturate = 1; 908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return reg; 909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst 912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_predicate(struct ureg_dst reg, 913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean negate, 914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_x, 915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_y, 916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_z, 917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned swizzle_w) 918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(reg.File != TGSI_FILE_NULL); 920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.Predicate = 1; 921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.PredNegate = negate; 922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.PredSwizzleX = swizzle_x; 923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.PredSwizzleY = swizzle_y; 924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.PredSwizzleZ = swizzle_z; 925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.PredSwizzleW = swizzle_w; 926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return reg; 927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst 930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_dst_indirect( struct ureg_dst reg, struct ureg_src addr ) 931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(reg.File != TGSI_FILE_NULL); 933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(addr.File == TGSI_FILE_ADDRESS); 934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.Indirect = 1; 935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.IndirectIndex = addr.Index; 936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.IndirectSwizzle = addr.SwizzleX; 937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return reg; 938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_indirect( struct ureg_src reg, struct ureg_src addr ) 942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(reg.File != TGSI_FILE_NULL); 944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(addr.File == TGSI_FILE_ADDRESS || addr.File == TGSI_FILE_TEMPORARY); 945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.Indirect = 1; 946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.IndirectFile = addr.File; 947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.IndirectIndex = addr.Index; 948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.IndirectSwizzle = addr.SwizzleX; 949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return reg; 950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_dimension( struct ureg_src reg, int index ) 954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(reg.File != TGSI_FILE_NULL); 956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.Dimension = 1; 957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.DimIndirect = 0; 958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.DimensionIndex = index; 959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return reg; 960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_dimension_indirect( struct ureg_src reg, struct ureg_src addr, 965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int index ) 966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(reg.File != TGSI_FILE_NULL); 968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.Dimension = 1; 969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.DimIndirect = 1; 970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.DimensionIndex = index; 971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.DimIndFile = addr.File; 972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.DimIndIndex = addr.Index; 973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org reg.DimIndSwizzle = addr.SwizzleX; 974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return reg; 975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst 978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_dst( struct ureg_src src ) 979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst; 981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(!src.Indirect || src.IndirectFile == TGSI_FILE_ADDRESS); 983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.File = src.File; 985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.WriteMask = TGSI_WRITEMASK_XYZW; 986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Indirect = src.Indirect; 987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.IndirectIndex = src.IndirectIndex; 988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.IndirectSwizzle = src.IndirectSwizzle; 989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Saturate = 0; 990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Predicate = 0; 991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredNegate = 0; 992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleX = TGSI_SWIZZLE_X; 993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleY = TGSI_SWIZZLE_Y; 994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleZ = TGSI_SWIZZLE_Z; 995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleW = TGSI_SWIZZLE_W; 996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Index = src.Index; 997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dst; 999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_register(unsigned file, 1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned index) 1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src; 1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.File = file; 1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleX = TGSI_SWIZZLE_X; 1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleY = TGSI_SWIZZLE_Y; 1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleZ = TGSI_SWIZZLE_Z; 1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleW = TGSI_SWIZZLE_W; 1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Indirect = 0; 1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.IndirectFile = TGSI_FILE_NULL; 1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.IndirectIndex = 0; 1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.IndirectSwizzle = 0; 1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Absolute = 0; 1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Index = index; 1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Negate = 0; 1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Dimension = 0; 1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimensionIndex = 0; 1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndirect = 0; 1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndFile = TGSI_FILE_NULL; 1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndIndex = 0; 1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndSwizzle = 0; 1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return src; 1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src( struct ureg_dst dst ) 1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src; 1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.File = dst.File; 1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleX = TGSI_SWIZZLE_X; 1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleY = TGSI_SWIZZLE_Y; 1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleZ = TGSI_SWIZZLE_Z; 1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleW = TGSI_SWIZZLE_W; 1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Indirect = dst.Indirect; 1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.IndirectFile = TGSI_FILE_ADDRESS; 1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.IndirectIndex = dst.IndirectIndex; 1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.IndirectSwizzle = dst.IndirectSwizzle; 1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Absolute = 0; 1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Index = dst.Index; 1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Negate = 0; 1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Dimension = 0; 1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimensionIndex = 0; 1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndirect = 0; 1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndFile = TGSI_FILE_NULL; 1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndIndex = 0; 1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndSwizzle = 0; 1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return src; 1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst 1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_dst_undef( void ) 1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_dst dst; 1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.File = TGSI_FILE_NULL; 1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.WriteMask = 0; 1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Indirect = 0; 1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.IndirectIndex = 0; 1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.IndirectSwizzle = 0; 1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Saturate = 0; 1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Predicate = 0; 1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredNegate = 0; 1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleX = TGSI_SWIZZLE_X; 1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleY = TGSI_SWIZZLE_Y; 1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleZ = TGSI_SWIZZLE_Z; 1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.PredSwizzleW = TGSI_SWIZZLE_W; 1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org dst.Index = 0; 1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dst; 1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src 1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_undef( void ) 1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct ureg_src src; 1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.File = TGSI_FILE_NULL; 1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleX = 0; 1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleY = 0; 1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleZ = 0; 1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.SwizzleW = 0; 1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Indirect = 0; 1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.IndirectFile = TGSI_FILE_NULL; 1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.IndirectIndex = 0; 1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.IndirectSwizzle = 0; 1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Absolute = 0; 1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Index = 0; 1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Negate = 0; 1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.Dimension = 0; 1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimensionIndex = 0; 1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndirect = 0; 1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndFile = TGSI_FILE_NULL; 1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndIndex = 0; 1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org src.DimIndSwizzle = 0; 1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return src; 1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE boolean 1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_is_undef( struct ureg_src src ) 1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return src.File == TGSI_FILE_NULL; 1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE boolean 1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_dst_is_undef( struct ureg_dst dst ) 1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return dst.File == TGSI_FILE_NULL; 1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus 1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 1125