18a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell/************************************************************************** 28a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * 38a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * Copyright 2009 VMware, Inc. 48a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * All Rights Reserved. 58a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * 68a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 78a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * copy of this software and associated documentation files (the 88a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * "Software"), to deal in the Software without restriction, including 98a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 108a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 118a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * permit persons to whom the Software is furnished to do so, subject to 128a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * the following conditions: 138a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * 148a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * The above copyright notice and this permission notice (including the 158a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * next paragraph) shall be included in all copies or substantial portions 168a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * of the Software. 178a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * 188a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 198a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 208a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 218a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * IN NO EVENT SHALL VMWARE, INC AND/OR ITS SUPPLIERS BE LIABLE FOR 228a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 238a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 248a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 258a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * 268a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell **************************************************************************/ 278a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 288a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#ifndef TGSI_UREG_H 298a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define TGSI_UREG_H 308a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 318a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#include "pipe/p_compiler.h" 328a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#include "pipe/p_shader_tokens.h" 3338f6f23fcf37247fd709d1c612d08bfa9b124e69José Fonseca#include "util/u_debug.h" 348a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 35848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell#ifdef __cplusplus 36848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellextern "C" { 37848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell#endif 38848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 39b6ebe7eabf54936a02acc0968e718e0c264a73f5Marek Olšákstruct pipe_screen; 408a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_program; 418a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšákstruct pipe_stream_output_info; 428a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 438a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell/* Almost a tgsi_src_register, but we need to pull in the Absolute 448a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * flag from the _ext token. Indirect flag always implies ADDR[0]. 458a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell */ 468a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_src 478a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 48b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse unsigned File : 4; /* TGSI_FILE_ */ 49b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse unsigned SwizzleX : 2; /* TGSI_SWIZZLE_ */ 50b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse unsigned SwizzleY : 2; /* TGSI_SWIZZLE_ */ 51b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse unsigned SwizzleZ : 2; /* TGSI_SWIZZLE_ */ 52b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse unsigned SwizzleW : 2; /* TGSI_SWIZZLE_ */ 53b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse unsigned Indirect : 1; /* BOOL */ 54b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse unsigned DimIndirect : 1; /* BOOL */ 55b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse unsigned Dimension : 1; /* BOOL */ 56b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse unsigned Absolute : 1; /* BOOL */ 57b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse unsigned Negate : 1; /* BOOL */ 5823969670387bc0bb7d0761936905e5eb4df963dcZack Rusin unsigned IndirectFile : 4; /* TGSI_FILE_ */ 5923969670387bc0bb7d0761936905e5eb4df963dcZack Rusin unsigned IndirectSwizzle : 2; /* TGSI_SWIZZLE_ */ 6023969670387bc0bb7d0761936905e5eb4df963dcZack Rusin unsigned DimIndFile : 4; /* TGSI_FILE_ */ 6123969670387bc0bb7d0761936905e5eb4df963dcZack Rusin unsigned DimIndSwizzle : 2; /* TGSI_SWIZZLE_ */ 62b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse int Index : 16; /* SINT */ 63b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse int IndirectIndex : 16; /* SINT */ 64b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse int DimensionIndex : 16; /* SINT */ 65b0e8aec5ab7f0e81dc0ea6c79ac7db2cca4788edJerome Glisse int DimIndIndex : 16; /* SINT */ 6621190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König unsigned ArrayID : 10; /* UINT */ 678a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell}; 688a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 698a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell/* Very similar to a tgsi_dst_register, removing unsupported fields 708a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * and adding a Saturate flag. It's easier to push saturate into the 71681ed756c05ad0be03425417dce18fb1d525e0bdBrian Paul * destination register than to try and create a _SAT variant of each 728a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * instruction function. 738a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell */ 748a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_dst 758a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 76506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned File : 4; /* TGSI_FILE_ */ 77506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned WriteMask : 4; /* TGSI_WRITEMASK_ */ 78506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned Indirect : 1; /* BOOL */ 79dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin unsigned DimIndirect : 1; /* BOOL */ 80dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin unsigned Dimension : 1; /* BOOL */ 81506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned Saturate : 1; /* BOOL */ 82506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned Predicate : 1; 83506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned PredNegate : 1; /* BOOL */ 84506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned PredSwizzleX : 2; /* TGSI_SWIZZLE_ */ 85506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned PredSwizzleY : 2; /* TGSI_SWIZZLE_ */ 86506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned PredSwizzleZ : 2; /* TGSI_SWIZZLE_ */ 87506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned PredSwizzleW : 2; /* TGSI_SWIZZLE_ */ 88506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König int Index : 16; /* SINT */ 89848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell int IndirectIndex : 16; /* SINT */ 908490d21cbe9cce4ceb5c1908b42672f5160fd013Zack Rusin unsigned IndirectFile : 4; /* TGSI_FILE_ */ 91848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell int IndirectSwizzle : 2; /* TGSI_SWIZZLE_ */ 92dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin unsigned DimIndFile : 4; /* TGSI_FILE_ */ 93dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin unsigned DimIndSwizzle : 2; /* TGSI_SWIZZLE_ */ 94dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin int DimensionIndex : 16; /* SINT */ 95dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin int DimIndIndex : 16; /* SINT */ 9621190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König unsigned ArrayID : 10; /* UINT */ 978a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell}; 988a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 998a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct pipe_context; 1008a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1018a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_program * 102b6ebe7eabf54936a02acc0968e718e0c264a73f5Marek Olšákureg_create(unsigned processor); 103b6ebe7eabf54936a02acc0968e718e0c264a73f5Marek Olšák 104b6ebe7eabf54936a02acc0968e718e0c264a73f5Marek Olšákstruct ureg_program * 105b6ebe7eabf54936a02acc0968e718e0c264a73f5Marek Olšákureg_create_with_screen(unsigned processor, struct pipe_screen *screen); 106acc7da90356a96efb93bb3a6a53e0b5f67ce993aJosé Fonseca 107acc7da90356a96efb93bb3a6a53e0b5f67ce993aJosé Fonsecaconst struct tgsi_token * 108acc7da90356a96efb93bb3a6a53e0b5f67ce993aJosé Fonsecaureg_finalize( struct ureg_program * ); 1098a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 11011f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwell/* Create and return a shader: 11111f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwell */ 1128a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellvoid * 113acc7da90356a96efb93bb3a6a53e0b5f67ce993aJosé Fonsecaureg_create_shader( struct ureg_program *, 1148a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšák struct pipe_context *pipe, 1158a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšák const struct pipe_stream_output_info *so ); 1168a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 117fbe6e92899f90e7ee85420e88c807a1f2fd2be14Marek Olšákvoid 118fbe6e92899f90e7ee85420e88c807a1f2fd2be14Marek Olšákureg_set_next_shader_processor(struct ureg_program *ureg, unsigned processor); 11911f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwell 12011f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwell/* Alternately, return the built token stream and hand ownership of 12111f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwell * that memory to the caller: 12211f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwell */ 12311f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwellconst struct tgsi_token * 12411f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwellureg_get_tokens( struct ureg_program *ureg, 12511f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwell unsigned *nr_tokens ); 12611f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwell 1273093ac6f4fe8a4e57bcc0e82adef98806ec1e0d4Zack Rusin/* 1283093ac6f4fe8a4e57bcc0e82adef98806ec1e0d4Zack Rusin * Returns the number of currently declared outputs. 1293093ac6f4fe8a4e57bcc0e82adef98806ec1e0d4Zack Rusin */ 1306614def76420ba02b76385d7fa4d1d4ad9ec91d5Jan Veselyunsigned 1313093ac6f4fe8a4e57bcc0e82adef98806ec1e0d4Zack Rusinureg_get_nr_outputs( const struct ureg_program *ureg ); 1323093ac6f4fe8a4e57bcc0e82adef98806ec1e0d4Zack Rusin 13311f41f54cf4ce1cdc19c4b5c45ed8d2083d96831Keith Whitwell 134edbc302ad678e1a4a8803ba0e827a13dd27105d2José Fonseca/* Free the tokens created by ureg_get_tokens() */ 135edbc302ad678e1a4a8803ba0e827a13dd27105d2José Fonsecavoid ureg_free_tokens( const struct tgsi_token *tokens ); 136edbc302ad678e1a4a8803ba0e827a13dd27105d2José Fonseca 137edbc302ad678e1a4a8803ba0e827a13dd27105d2José Fonseca 1388a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellvoid 1398a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_destroy( struct ureg_program * ); 1408a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1418a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1428a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell/*********************************************************************** 1438a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * Convenience routine: 1448a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell */ 145a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void * 1468a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšákureg_create_shader_with_so_and_destroy( struct ureg_program *p, 1478a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšák struct pipe_context *pipe, 1488a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšák const struct pipe_stream_output_info *so ) 1498a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 1508a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšák void *result = ureg_create_shader( p, pipe, so ); 1518a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_destroy( p ); 1528a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return result; 1538a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 1548a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 155a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void * 1568a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšákureg_create_shader_and_destroy( struct ureg_program *p, 1578a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšák struct pipe_context *pipe ) 1588a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšák{ 1598a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšák return ureg_create_shader_with_so_and_destroy(p, pipe, NULL); 1608a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšák} 1618a9a37cebeff19b56afed43ae037d00950fa7594Marek Olšák 1628a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 16342d55953b19db8916a677abc606b8d0a923efb5dMichal Krol/*********************************************************************** 16442d55953b19db8916a677abc606b8d0a923efb5dMichal Krol * Build shader properties: 16542d55953b19db8916a677abc606b8d0a923efb5dMichal Krol */ 16642d55953b19db8916a677abc606b8d0a923efb5dMichal Krol 16742d55953b19db8916a677abc606b8d0a923efb5dMichal Krolvoid 16848f1409c3bf392f4b277eb6ecaf64e68e314e259Marek Olšákureg_property(struct ureg_program *ureg, unsigned name, unsigned value); 1694b586a26c8ab8804dacbf400f5fd53b5a1f70dacChristoph Bumiller 17006f217d80f3d1318da4974bf7b31ea7edcf5eb0bMarek Olšák 1718a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell/*********************************************************************** 1728a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * Build shader declarations: 1738a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell */ 1748a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1758a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_src 176047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnleureg_DECL_fs_input_cyl_centroid_layout(struct ureg_program *, 177047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned semantic_name, 178047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned semantic_index, 179047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned interp_mode, 180047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned cylindrical_wrap, 181047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned interp_location, 182047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned index, 183047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned usage_mask, 184047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned array_id, 185047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned array_size); 186047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle 187047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnlestruct ureg_src 188ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieriureg_DECL_fs_input_cyl_centroid(struct ureg_program *, 18933a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol unsigned semantic_name, 19033a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol unsigned semantic_index, 19133a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol unsigned interp_mode, 192ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri unsigned cylindrical_wrap, 193918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák unsigned interp_location, 194918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák unsigned array_id, 195918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák unsigned array_size); 196ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri 197a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 198ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieriureg_DECL_fs_input_cyl(struct ureg_program *ureg, 199ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri unsigned semantic_name, 200ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri unsigned semantic_index, 201ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri unsigned interp_mode, 202ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri unsigned cylindrical_wrap) 203ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri{ 204ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri return ureg_DECL_fs_input_cyl_centroid(ureg, 205ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri semantic_name, 206ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri semantic_index, 207ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri interp_mode, 208ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri cylindrical_wrap, 209918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák 0, 0, 1); 210ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri} 21133a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol 212a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 21333a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krolureg_DECL_fs_input(struct ureg_program *ureg, 21433a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol unsigned semantic_name, 21533a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol unsigned semantic_index, 21633a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol unsigned interp_mode) 21733a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol{ 218ff531c5b05cb4c078b42c6b14e707646d3d158c9Luca Barbieri return ureg_DECL_fs_input_cyl_centroid(ureg, 21933a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol semantic_name, 22033a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol semantic_index, 22133a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol interp_mode, 222918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák 0, 0, 0, 1); 22333a9fb35dd4c74945840ce1e1b496c43ecfc92deMichal Krol} 2248a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 2258a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_src 2268a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_DECL_vs_input( struct ureg_program *, 2276d8dbd3d1ec888300fb0e9ac3cf61808ba8ecc2bKeith Whitwell unsigned index ); 2288a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 229c14be63c5647e4406a0a4d80570a4def593b551bMichal Krolstruct ureg_src 230047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnleureg_DECL_input_layout(struct ureg_program *, 231047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned semantic_name, 232047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned semantic_index, 233047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned index, 234047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned usage_mask, 235047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned array_id, 236047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle unsigned array_size); 237047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnle 238047a7c7a0b419ac9e6deb4ff885a08c684495ce4Nicolai Hähnlestruct ureg_src 2393b1d15775190945b1a639dd9b2581b4032cd2ac6Marek Olšákureg_DECL_input(struct ureg_program *, 2403b1d15775190945b1a639dd9b2581b4032cd2ac6Marek Olšák unsigned semantic_name, 2411fa6c99e24890359e9cee2a9da02f21ea77b9f15Marek Olšák unsigned semantic_index, 2421fa6c99e24890359e9cee2a9da02f21ea77b9f15Marek Olšák unsigned array_id, 2431fa6c99e24890359e9cee2a9da02f21ea77b9f15Marek Olšák unsigned array_size); 244c14be63c5647e4406a0a4d80570a4def593b551bMichal Krol 2455754185d39c147cd81b97fd331ccf78aebfad5e7Michal Krolstruct ureg_src 2465754185d39c147cd81b97fd331ccf78aebfad5e7Michal Krolureg_DECL_system_value(struct ureg_program *, 2475754185d39c147cd81b97fd331ccf78aebfad5e7Michal Krol unsigned semantic_name, 2485754185d39c147cd81b97fd331ccf78aebfad5e7Michal Krol unsigned semantic_index); 2495754185d39c147cd81b97fd331ccf78aebfad5e7Michal Krol 2508a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_dst 2512b460c750a3cd4acbe05036e92e860800b6d5a96Nicolai Hähnleureg_DECL_output_layout(struct ureg_program *, 2522b460c750a3cd4acbe05036e92e860800b6d5a96Nicolai Hähnle unsigned semantic_name, 2532b460c750a3cd4acbe05036e92e860800b6d5a96Nicolai Hähnle unsigned semantic_index, 2542eaacba7f28da49c2d248fa2df9feeca32f3480cNicolai Hähnle unsigned streams, 2552b460c750a3cd4acbe05036e92e860800b6d5a96Nicolai Hähnle unsigned index, 2562b460c750a3cd4acbe05036e92e860800b6d5a96Nicolai Hähnle unsigned usage_mask, 2572b460c750a3cd4acbe05036e92e860800b6d5a96Nicolai Hähnle unsigned array_id, 2582b460c750a3cd4acbe05036e92e860800b6d5a96Nicolai Hähnle unsigned array_size); 2592b460c750a3cd4acbe05036e92e860800b6d5a96Nicolai Hähnle 2602b460c750a3cd4acbe05036e92e860800b6d5a96Nicolai Hähnlestruct ureg_dst 261a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšákureg_DECL_output_masked(struct ureg_program *, 262a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned semantic_name, 263a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned semantic_index, 264a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned usage_mask, 265a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned array_id, 266a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned array_size); 2676951870e5790a4b563bfa3b943ed338f9c5922acBryan Cain 2686951870e5790a4b563bfa3b943ed338f9c5922acBryan Cainstruct ureg_dst 269a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšákureg_DECL_output(struct ureg_program *, 270a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned semantic_name, 271a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned semantic_index); 272a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák 273a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšákstruct ureg_dst 274a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšákureg_DECL_output_array(struct ureg_program *ureg, 275a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned semantic_name, 276a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned semantic_index, 277a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned array_id, 278a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned array_size); 2798a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 2808a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_src 2818a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_DECL_immediate( struct ureg_program *, 2828a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell const float *v, 2838a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned nr ); 2848a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 2858a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_src 286fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlieureg_DECL_immediate_f64( struct ureg_program *, 287fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie const double *v, 288fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie unsigned nr ); 289fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airlie 290fa43e0443e206740e219d45abefee65bdb2c3ecbDave Airliestruct ureg_src 291ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolureg_DECL_immediate_uint( struct ureg_program *, 292ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol const unsigned *v, 293ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned nr ); 294ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol 295ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolstruct ureg_src 2964698a865e076998107c188b39db039bdcbaac3a9Michal Krolureg_DECL_immediate_block_uint( struct ureg_program *, 2974698a865e076998107c188b39db039bdcbaac3a9Michal Krol const unsigned *v, 2984698a865e076998107c188b39db039bdcbaac3a9Michal Krol unsigned nr ); 2994698a865e076998107c188b39db039bdcbaac3a9Michal Krol 3004698a865e076998107c188b39db039bdcbaac3a9Michal Krolstruct ureg_src 301ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolureg_DECL_immediate_int( struct ureg_program *, 302ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol const int *v, 303ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned nr ); 304ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol 3053985e6c044fabce276e137edfc2c99b91fd5b80fDave Airliestruct ureg_src 3063985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlieureg_DECL_immediate_uint64( struct ureg_program *, 3073985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie const uint64_t *v, 3083985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie unsigned nr ); 3093985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie 3103985e6c044fabce276e137edfc2c99b91fd5b80fDave Airliestruct ureg_src 3113985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlieureg_DECL_immediate_int64( struct ureg_program *, 3123985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie const int64_t *v, 3133985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie unsigned nr ); 3143985e6c044fabce276e137edfc2c99b91fd5b80fDave Airlie 3154367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krolvoid 3164367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krolureg_DECL_constant2D(struct ureg_program *ureg, 3174367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol unsigned first, 3184367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol unsigned last, 3194367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol unsigned index2D); 3204367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 321ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolstruct ureg_src 322ae4704eabc237e13c9b06df9c44f31c9baca6208Keith Whitwellureg_DECL_constant( struct ureg_program *, 323ae4704eabc237e13c9b06df9c44f31c9baca6208Keith Whitwell unsigned index ); 3248a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 3258a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_dst 3268a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_DECL_temporary( struct ureg_program * ); 3278a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 328b52e374ad3b568fc1eb35df80e90a39b4cb99289Francisco Jerez/** 329b52e374ad3b568fc1eb35df80e90a39b4cb99289Francisco Jerez * Emit a temporary with the LOCAL declaration flag set. For use when 330b52e374ad3b568fc1eb35df80e90a39b4cb99289Francisco Jerez * the register value is not required to be preserved across 331b52e374ad3b568fc1eb35df80e90a39b4cb99289Francisco Jerez * subroutine boundaries. 332b52e374ad3b568fc1eb35df80e90a39b4cb99289Francisco Jerez */ 333b52e374ad3b568fc1eb35df80e90a39b4cb99289Francisco Jerezstruct ureg_dst 334b52e374ad3b568fc1eb35df80e90a39b4cb99289Francisco Jerezureg_DECL_local_temporary( struct ureg_program * ); 335b52e374ad3b568fc1eb35df80e90a39b4cb99289Francisco Jerez 336506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König/** 337506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König * Declare "size" continuous temporary registers. 338506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König */ 339506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian Königstruct ureg_dst 340506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian Königureg_DECL_array_temporary( struct ureg_program *, 341506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König unsigned size, 342506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König boolean local ); 343506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König 344f2fcd5822a0b308e8b9410061996377c0b4a0a91Keith Whitwellvoid 345f2fcd5822a0b308e8b9410061996377c0b4a0a91Keith Whitwellureg_release_temporary( struct ureg_program *ureg, 346f2fcd5822a0b308e8b9410061996377c0b4a0a91Keith Whitwell struct ureg_dst tmp ); 347f2fcd5822a0b308e8b9410061996377c0b4a0a91Keith Whitwell 348848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellstruct ureg_dst 349848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_DECL_address( struct ureg_program * ); 350848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 351962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krolstruct ureg_dst 352962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krolureg_DECL_predicate(struct ureg_program *); 353962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krol 354848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell/* Supply an index to the sampler declaration as this is the hook to 355848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell * the external pipe_sampler state. Users of this function probably 356848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell * don't want just any sampler, but a specific one which they've set 357848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell * up state for in the context. 358848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell */ 3598a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellstruct ureg_src 360848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_DECL_sampler( struct ureg_program *, 361848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell unsigned index ); 3628a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 363bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusinstruct ureg_src 364a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerezureg_DECL_sampler_view(struct ureg_program *, 365a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez unsigned index, 366a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez unsigned target, 367a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez unsigned return_type_x, 368a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez unsigned return_type_y, 369a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez unsigned return_type_z, 370a5f44cc8c2ce0916809ce5da5a2490ad000ef099Francisco Jerez unsigned return_type_w ); 371bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin 3728cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkinstruct ureg_src 3738cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkinureg_DECL_image(struct ureg_program *ureg, 3748cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkin unsigned index, 3758cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkin unsigned target, 3768cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkin unsigned format, 3778cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkin boolean wr, 3788cc9a8aa2a97ca9e7a36a993954a3480d44c13d3Ilia Mirkin boolean raw); 3798a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 380888ddd632d7f6af635cc948f1b3e8982b43800d2Ilia Mirkinstruct ureg_src 381888ddd632d7f6af635cc948f1b3e8982b43800d2Ilia Mirkinureg_DECL_buffer(struct ureg_program *ureg, unsigned nr, bool atomic); 382888ddd632d7f6af635cc948f1b3e8982b43800d2Ilia Mirkin 383a8328e3a50169c3c74656df7f63f56f061d9e751Samuel Pitoisetstruct ureg_src 3843788e1bf748eca3186377dfa60dbba1c37f8939eHans de Goedeureg_DECL_memory(struct ureg_program *ureg, unsigned memory_type); 385a8328e3a50169c3c74656df7f63f56f061d9e751Samuel Pitoiset 386a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 387848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_imm4f( struct ureg_program *ureg, 3888a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell float a, float b, 3898a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell float c, float d) 3908a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 3918a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell float v[4]; 3928a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell v[0] = a; 3938a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell v[1] = b; 3948a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell v[2] = c; 3958a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell v[3] = d; 3968a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return ureg_DECL_immediate( ureg, v, 4 ); 3978a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 3988a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 399a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 400848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_imm3f( struct ureg_program *ureg, 4018a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell float a, float b, 4028a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell float c) 4038a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 4048a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell float v[3]; 4058a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell v[0] = a; 4068a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell v[1] = b; 4078a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell v[2] = c; 4088a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return ureg_DECL_immediate( ureg, v, 3 ); 4098a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 4108a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 411a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 412848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_imm2f( struct ureg_program *ureg, 4138a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell float a, float b) 4148a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 4158a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell float v[2]; 4168a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell v[0] = a; 4178a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell v[1] = b; 4188a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return ureg_DECL_immediate( ureg, v, 2 ); 4198a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 4208a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 421a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 422848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_imm1f( struct ureg_program *ureg, 4238a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell float a) 4248a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 4258a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell float v[1]; 4268a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell v[0] = a; 4278a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return ureg_DECL_immediate( ureg, v, 1 ); 4288a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 4298a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 430a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 431ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolureg_imm4u( struct ureg_program *ureg, 432ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned a, unsigned b, 433ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned c, unsigned d) 434ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol{ 435ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned v[4]; 436ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[0] = a; 437ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[1] = b; 438ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[2] = c; 439ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[3] = d; 440ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol return ureg_DECL_immediate_uint( ureg, v, 4 ); 441ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol} 442ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol 443a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 444ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolureg_imm3u( struct ureg_program *ureg, 445ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned a, unsigned b, 446ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned c) 447ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol{ 448ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned v[3]; 449ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[0] = a; 450ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[1] = b; 451ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[2] = c; 452ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol return ureg_DECL_immediate_uint( ureg, v, 3 ); 453ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol} 454ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol 455a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 456ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolureg_imm2u( struct ureg_program *ureg, 457ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned a, unsigned b) 458ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol{ 459ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned v[2]; 460ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[0] = a; 461ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[1] = b; 462ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol return ureg_DECL_immediate_uint( ureg, v, 2 ); 463ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol} 464ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol 465a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 466ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolureg_imm1u( struct ureg_program *ureg, 467ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol unsigned a) 468ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol{ 469ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol return ureg_DECL_immediate_uint( ureg, &a, 1 ); 470ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol} 471ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol 472a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 473ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolureg_imm4i( struct ureg_program *ureg, 474ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol int a, int b, 475ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol int c, int d) 476ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol{ 477ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol int v[4]; 478ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[0] = a; 479ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[1] = b; 480ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[2] = c; 481ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[3] = d; 482ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol return ureg_DECL_immediate_int( ureg, v, 4 ); 483ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol} 484ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol 485a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 486ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolureg_imm3i( struct ureg_program *ureg, 487ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol int a, int b, 488ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol int c) 489ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol{ 490ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol int v[3]; 491ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[0] = a; 492ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[1] = b; 493ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[2] = c; 494ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol return ureg_DECL_immediate_int( ureg, v, 3 ); 495ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol} 496ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol 497a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 498ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolureg_imm2i( struct ureg_program *ureg, 499ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol int a, int b) 500ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol{ 501ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol int v[2]; 502ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[0] = a; 503ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol v[1] = b; 504ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol return ureg_DECL_immediate_int( ureg, v, 2 ); 505ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol} 506ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol 507a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 508ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krolureg_imm1i( struct ureg_program *ureg, 509ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol int a) 510ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol{ 511ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol return ureg_DECL_immediate_int( ureg, &a, 1 ); 512ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol} 513ff56a12051a91c5c69db9afb85e4a3ebdb17ef96Michal Krol 51469049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca/* Where the destination register has a valid file, but an empty 51569049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca * writemask. 51669049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca */ 517a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline boolean 51869049555af0b0a8fe6005cfa5766f15fc91403a0José Fonsecaureg_dst_is_empty( struct ureg_dst dst ) 51969049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca{ 52069049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return dst.File != TGSI_FILE_NULL && 52169049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca dst.WriteMask == 0; 52269049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca} 52369049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca 5248a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell/*********************************************************************** 525265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell * Functions for patching up labels 526265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell */ 527265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell 528265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell 529265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell/* Will return a number which can be used in a label to point to the 530265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell * next instruction to be emitted. 531265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell */ 532265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwellunsigned 533265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwellureg_get_instruction_number( struct ureg_program *ureg ); 534265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell 535265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell 536265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell/* Patch a given label (expressed as a token number) to point to a 537265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell * given instruction (expressed as an instruction number). 538265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell * 539265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell * Labels are obtained from instruction emitters, eg ureg_CAL(). 540265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell * Instruction numbers are obtained from ureg_get_instruction_number(), 541265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell * above. 542265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell */ 543265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwellvoid 544265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwellureg_fixup_label(struct ureg_program *ureg, 545265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell unsigned label_token, 546265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell unsigned instruction_number ); 547265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell 548265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell 549b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2Keith Whitwell/* Generic instruction emitter. Use if you need to pass the opcode as 550681ed756c05ad0be03425417dce18fb1d525e0bdBrian Paul * a parameter, rather than using the emit_OP() variants below. 551b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2Keith Whitwell */ 552b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2Keith Whitwellvoid 553b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2Keith Whitwellureg_insn(struct ureg_program *ureg, 554b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2Keith Whitwell unsigned opcode, 555b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2Keith Whitwell const struct ureg_dst *dst, 556b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2Keith Whitwell unsigned nr_dst, 557b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2Keith Whitwell const struct ureg_src *src, 558b570a7e6b6ebd05e94fd91f2df53de7d2e2e05d2Keith Whitwell unsigned nr_src ); 559265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell 560265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell 561c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwellvoid 562c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwellureg_tex_insn(struct ureg_program *ureg, 563c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell unsigned opcode, 564c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell const struct ureg_dst *dst, 565c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell unsigned nr_dst, 566c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell unsigned target, 5672083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie const struct tgsi_texture_offset *texoffsets, 5682083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie unsigned nr_offset, 569c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell const struct ureg_src *src, 570c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell unsigned nr_src ); 571c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell 572c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell 573c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwellvoid 574c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwellureg_label_insn(struct ureg_program *ureg, 575c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell unsigned opcode, 576c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell const struct ureg_src *src, 577c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell unsigned nr_src, 578c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell unsigned *label); 579c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell 58050b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkinvoid 58150b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkinureg_memory_insn(struct ureg_program *ureg, 58250b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin unsigned opcode, 58350b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin const struct ureg_dst *dst, 58450b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin unsigned nr_dst, 58550b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin const struct ureg_src *src, 58650b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin unsigned nr_src, 587dfcf4204120d3fc8f7d8cda818e1c652e091cc35Nicolai Hähnle unsigned qualifier, 588dfcf4204120d3fc8f7d8cda818e1c652e091cc35Nicolai Hähnle unsigned texture, 589dfcf4204120d3fc8f7d8cda818e1c652e091cc35Nicolai Hähnle unsigned format); 590c23894295b593b9a8561e9775199e1c78ea4435dKeith Whitwell 591265e210edb2fdf0f6ae777635676f05613b38eb7Keith Whitwell/*********************************************************************** 5928a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * Internal instruction helpers, don't call these directly: 5938a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell */ 5948a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 595767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krolstruct ureg_emit_insn_result { 596767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol unsigned insn_token; /*< Used to fixup insn size. */ 597767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol unsigned extended_token; /*< Used to set the Extended bit, usually the same as insn_token. */ 598767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol}; 599767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol 600767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krolstruct ureg_emit_insn_result 6018a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_emit_insn(struct ureg_program *ureg, 6028a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode, 6038a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell boolean saturate, 604962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krol boolean predicate, 605c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol boolean pred_negate, 606c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol unsigned pred_swizzle_x, 607c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol unsigned pred_swizzle_y, 608c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol unsigned pred_swizzle_z, 609c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol unsigned pred_swizzle_w, 6108a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned num_dst, 6118a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned num_src ); 6128a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 6138a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellvoid 6148a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_emit_label(struct ureg_program *ureg, 6158a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned insn_token, 6168a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned *label_token ); 6178a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 6188a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellvoid 6198a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_emit_texture(struct ureg_program *ureg, 6208a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned insn_token, 6212083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie unsigned target, unsigned num_offsets); 6222083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie 6232083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlievoid 6242083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlieureg_emit_texture_offset(struct ureg_program *ureg, 6252083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie const struct tgsi_texture_offset *offset); 6268a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 62750b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkinvoid 62850b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkinureg_emit_memory(struct ureg_program *ureg, 62950b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin unsigned insn_token, 630dfcf4204120d3fc8f7d8cda818e1c652e091cc35Nicolai Hähnle unsigned qualifier, 631dfcf4204120d3fc8f7d8cda818e1c652e091cc35Nicolai Hähnle unsigned texture, 632dfcf4204120d3fc8f7d8cda818e1c652e091cc35Nicolai Hähnle unsigned format); 63350b8488926c4fa45ed79148217b81e54252788e7Ilia Mirkin 6348a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellvoid 6358a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_emit_dst( struct ureg_program *ureg, 6368a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_dst dst ); 6378a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 6388a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellvoid 6398a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_emit_src( struct ureg_program *ureg, 6408a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src ); 6418a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 6428a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellvoid 6438a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_fixup_insn_size(struct ureg_program *ureg, 6448a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned insn ); 6458a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 6468a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 6478a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define OP00( op ) \ 648a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg ) \ 6498a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ \ 6508a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode = TGSI_OPCODE_##op; \ 6514ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca struct ureg_emit_insn_result insn; \ 6524ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca insn = ureg_emit_insn(ureg, \ 6534ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca opcode, \ 6544ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca FALSE, \ 6554ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca FALSE, \ 6564ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca FALSE, \ 6574ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca TGSI_SWIZZLE_X, \ 6584ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca TGSI_SWIZZLE_Y, \ 6594ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca TGSI_SWIZZLE_Z, \ 6604ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca TGSI_SWIZZLE_W, \ 6614ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 0, \ 6624ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 0); \ 6634ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca ureg_fixup_insn_size( ureg, insn.insn_token ); \ 6648a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 6658a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 6668a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define OP01( op ) \ 667a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 6688a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src ) \ 6698a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ \ 6708a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode = TGSI_OPCODE_##op; \ 6714ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca struct ureg_emit_insn_result insn; \ 6724ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca insn = ureg_emit_insn(ureg, \ 6734ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca opcode, \ 6744ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca FALSE, \ 6754ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca FALSE, \ 6764ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca FALSE, \ 6774ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca TGSI_SWIZZLE_X, \ 6784ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca TGSI_SWIZZLE_Y, \ 6794ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca TGSI_SWIZZLE_Z, \ 6804ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca TGSI_SWIZZLE_W, \ 6814ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 0, \ 6824ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 1); \ 6838a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src ); \ 6844ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca ureg_fixup_insn_size( ureg, insn.insn_token ); \ 6858a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 6868a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 6878a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define OP00_LBL( op ) \ 688a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 6898a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned *label_token ) \ 6908a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ \ 6918a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode = TGSI_OPCODE_##op; \ 692767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol struct ureg_emit_insn_result insn; \ 693767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol insn = ureg_emit_insn(ureg, \ 694767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol opcode, \ 695767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol FALSE, \ 696767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol FALSE, \ 697767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol FALSE, \ 698767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol TGSI_SWIZZLE_X, \ 699767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol TGSI_SWIZZLE_Y, \ 700767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol TGSI_SWIZZLE_Z, \ 701767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol TGSI_SWIZZLE_W, \ 702767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol 0, \ 703767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol 0); \ 704767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol ureg_emit_label( ureg, insn.extended_token, label_token ); \ 705767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol ureg_fixup_insn_size( ureg, insn.insn_token ); \ 7068a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 7078a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 7088a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define OP01_LBL( op ) \ 709a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 7108a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src, \ 7118a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned *label_token ) \ 7128a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ \ 7138a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode = TGSI_OPCODE_##op; \ 714767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol struct ureg_emit_insn_result insn; \ 715767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol insn = ureg_emit_insn(ureg, \ 716767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol opcode, \ 717767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol FALSE, \ 718767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol FALSE, \ 719767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol FALSE, \ 720767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol TGSI_SWIZZLE_X, \ 721767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol TGSI_SWIZZLE_Y, \ 722767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol TGSI_SWIZZLE_Z, \ 723767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol TGSI_SWIZZLE_W, \ 724767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol 0, \ 725767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol 1); \ 726767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol ureg_emit_label( ureg, insn.extended_token, label_token ); \ 7278a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src ); \ 728767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol ureg_fixup_insn_size( ureg, insn.insn_token ); \ 7298a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 7308a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 7318a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define OP10( op ) \ 732a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 7338a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_dst dst ) \ 7348a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ \ 7358a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode = TGSI_OPCODE_##op; \ 7364ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca struct ureg_emit_insn_result insn; \ 73769049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 73869049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 7394ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca insn = ureg_emit_insn(ureg, \ 7404ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca opcode, \ 7414ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Saturate, \ 7424ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Predicate, \ 7434ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredNegate, \ 7444ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleX, \ 7454ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleY, \ 7464ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleZ, \ 7474ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleW, \ 7484ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 1, \ 7494ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 0); \ 7508a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_dst( ureg, dst ); \ 7514ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca ureg_fixup_insn_size( ureg, insn.insn_token ); \ 7528a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 7538a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 7548a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 7558a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define OP11( op ) \ 756a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 7578a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_dst dst, \ 7588a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src ) \ 7598a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ \ 7608a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode = TGSI_OPCODE_##op; \ 7614ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca struct ureg_emit_insn_result insn; \ 76269049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 76369049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 7644ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca insn = ureg_emit_insn(ureg, \ 7654ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca opcode, \ 7664ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Saturate, \ 7674ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Predicate, \ 7684ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredNegate, \ 7694ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleX, \ 7704ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleY, \ 7714ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleZ, \ 7724ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleW, \ 7734ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 1, \ 7744ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 1); \ 7758a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_dst( ureg, dst ); \ 7768a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src ); \ 7774ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca ureg_fixup_insn_size( ureg, insn.insn_token ); \ 7788a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 7798a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 7808a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define OP12( op ) \ 781a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 7828a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_dst dst, \ 7838a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src0, \ 7848a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src1 ) \ 7858a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ \ 7868a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode = TGSI_OPCODE_##op; \ 7874ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca struct ureg_emit_insn_result insn; \ 78869049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 78969049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 7904ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca insn = ureg_emit_insn(ureg, \ 7914ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca opcode, \ 7924ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Saturate, \ 7934ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Predicate, \ 7944ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredNegate, \ 7954ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleX, \ 7964ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleY, \ 7974ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleZ, \ 7984ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleW, \ 7994ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 1, \ 8004ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 2); \ 8018a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_dst( ureg, dst ); \ 8028a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src0 ); \ 8038a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src1 ); \ 8044ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca ureg_fixup_insn_size( ureg, insn.insn_token ); \ 8058a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 8068a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 8078a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define OP12_TEX( op ) \ 808a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 8098a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_dst dst, \ 8108a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned target, \ 8118a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src0, \ 8128a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src1 ) \ 8138a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ \ 8148a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode = TGSI_OPCODE_##op; \ 815767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol struct ureg_emit_insn_result insn; \ 81669049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 81769049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 818767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol insn = ureg_emit_insn(ureg, \ 819767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol opcode, \ 820767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.Saturate, \ 821767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.Predicate, \ 822767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.PredNegate, \ 823767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.PredSwizzleX, \ 824767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.PredSwizzleY, \ 825767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.PredSwizzleZ, \ 826767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.PredSwizzleW, \ 827767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol 1, \ 828767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol 2); \ 8292083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie ureg_emit_texture( ureg, insn.extended_token, target, 0 ); \ 8308a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_dst( ureg, dst ); \ 8318a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src0 ); \ 8328a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src1 ); \ 833767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol ureg_fixup_insn_size( ureg, insn.insn_token ); \ 8348a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 8358a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 836f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger#define OP12_SAMPLE( op ) \ 837a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 838f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_dst dst, \ 839f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src0, \ 840f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src1 ) \ 841f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger{ \ 842f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger unsigned opcode = TGSI_OPCODE_##op; \ 843f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger unsigned target = TGSI_TEXTURE_UNKNOWN; \ 844f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_emit_insn_result insn; \ 84569049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 84669049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 847f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger insn = ureg_emit_insn(ureg, \ 848f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger opcode, \ 849f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.Saturate, \ 850f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.Predicate, \ 851f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredNegate, \ 852f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleX, \ 853f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleY, \ 854f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleZ, \ 855f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleW, \ 856f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 1, \ 857f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 2); \ 858f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_texture( ureg, insn.extended_token, target, 0 ); \ 859f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_dst( ureg, dst ); \ 860f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src0 ); \ 861f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src1 ); \ 862f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_fixup_insn_size( ureg, insn.insn_token ); \ 863f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger} 864f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 8658a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define OP13( op ) \ 866a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 8678a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_dst dst, \ 8688a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src0, \ 8698a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src1, \ 8708a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src2 ) \ 8718a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ \ 8728a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode = TGSI_OPCODE_##op; \ 8734ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca struct ureg_emit_insn_result insn; \ 87469049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 87569049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 8764ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca insn = ureg_emit_insn(ureg, \ 8774ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca opcode, \ 8784ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Saturate, \ 8794ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Predicate, \ 8804ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredNegate, \ 8814ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleX, \ 8824ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleY, \ 8834ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleZ, \ 8844ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleW, \ 8854ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 1, \ 8864ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 3); \ 8878a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_dst( ureg, dst ); \ 8888a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src0 ); \ 8898a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src1 ); \ 8908a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src2 ); \ 8914ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca ureg_fixup_insn_size( ureg, insn.insn_token ); \ 8928a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 8938a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 894f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger#define OP13_SAMPLE( op ) \ 895a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 896f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_dst dst, \ 897f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src0, \ 898f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src1, \ 899f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src2 ) \ 900f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger{ \ 901f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger unsigned opcode = TGSI_OPCODE_##op; \ 902f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger unsigned target = TGSI_TEXTURE_UNKNOWN; \ 903f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_emit_insn_result insn; \ 90469049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 90569049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 906f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger insn = ureg_emit_insn(ureg, \ 907f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger opcode, \ 908f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.Saturate, \ 909f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.Predicate, \ 910f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredNegate, \ 911f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleX, \ 912f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleY, \ 913f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleZ, \ 914f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleW, \ 915f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 1, \ 916f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 3); \ 917f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_texture( ureg, insn.extended_token, target, 0 ); \ 918f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_dst( ureg, dst ); \ 919f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src0 ); \ 920f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src1 ); \ 921f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src2 ); \ 922f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_fixup_insn_size( ureg, insn.insn_token ); \ 923f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger} 924f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 9258a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#define OP14_TEX( op ) \ 926a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 9278a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_dst dst, \ 9288a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned target, \ 9298a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src0, \ 9308a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src1, \ 9318a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src2, \ 9328a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src3 ) \ 9338a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ \ 9348a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned opcode = TGSI_OPCODE_##op; \ 935767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol struct ureg_emit_insn_result insn; \ 93669049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 93769049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 938767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol insn = ureg_emit_insn(ureg, \ 939767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol opcode, \ 940767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.Saturate, \ 941767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.Predicate, \ 942767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.PredNegate, \ 943767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.PredSwizzleX, \ 944767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.PredSwizzleY, \ 945767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.PredSwizzleZ, \ 946767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol dst.PredSwizzleW, \ 947767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol 1, \ 948767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol 4); \ 9492083a276eb270b748d1c2668eb9faa5aadc8e700Dave Airlie ureg_emit_texture( ureg, insn.extended_token, target, 0 ); \ 9508a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_dst( ureg, dst ); \ 9518a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src0 ); \ 9528a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src1 ); \ 9538a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src2 ); \ 9548a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell ureg_emit_src( ureg, src3 ); \ 955767bc8eb5a0bbaf9fde9d760e8460d34c51d2991Michal Krol ureg_fixup_insn_size( ureg, insn.insn_token ); \ 9568a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 9578a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 958f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger#define OP14_SAMPLE( op ) \ 959a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 960f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_dst dst, \ 961f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src0, \ 962f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src1, \ 963f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src2, \ 964f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src3 ) \ 965f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger{ \ 966f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger unsigned opcode = TGSI_OPCODE_##op; \ 967f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger unsigned target = TGSI_TEXTURE_UNKNOWN; \ 968f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_emit_insn_result insn; \ 96969049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 97069049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 971f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger insn = ureg_emit_insn(ureg, \ 972f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger opcode, \ 973f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.Saturate, \ 974f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.Predicate, \ 975f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredNegate, \ 976f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleX, \ 977f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleY, \ 978f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleZ, \ 979f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleW, \ 980f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 1, \ 981f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 4); \ 982f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_texture( ureg, insn.extended_token, target, 0 ); \ 983f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_dst( ureg, dst ); \ 984f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src0 ); \ 985f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src1 ); \ 986f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src2 ); \ 987f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src3 ); \ 988f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_fixup_insn_size( ureg, insn.insn_token ); \ 989f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger} 990f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 9918a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 992bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define OP14( op ) \ 993a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 994bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_dst dst, \ 995bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_src src0, \ 996bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_src src1, \ 997bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_src src2, \ 998bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_src src3 ) \ 999bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin{ \ 1000bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin unsigned opcode = TGSI_OPCODE_##op; \ 10014ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca struct ureg_emit_insn_result insn; \ 100269049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 100369049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 10044ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca insn = ureg_emit_insn(ureg, \ 10054ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca opcode, \ 10064ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Saturate, \ 10074ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Predicate, \ 10084ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredNegate, \ 10094ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleX, \ 10104ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleY, \ 10114ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleZ, \ 10124ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleW, \ 10134ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 1, \ 10144ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 4); \ 1015bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_dst( ureg, dst ); \ 1016bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_src( ureg, src0 ); \ 1017bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_src( ureg, src1 ); \ 1018bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_src( ureg, src2 ); \ 1019bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_src( ureg, src3 ); \ 10204ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca ureg_fixup_insn_size( ureg, insn.insn_token ); \ 1021bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin} 1022bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin 1023bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin 1024bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin#define OP15( op ) \ 1025a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 1026bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_dst dst, \ 1027bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_src src0, \ 1028bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_src src1, \ 1029bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_src src2, \ 1030bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_src src3, \ 1031bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin struct ureg_src src4 ) \ 1032bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin{ \ 1033bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin unsigned opcode = TGSI_OPCODE_##op; \ 10344ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca struct ureg_emit_insn_result insn; \ 103569049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 103669049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 10374ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca insn = ureg_emit_insn(ureg, \ 10384ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca opcode, \ 10394ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Saturate, \ 10404ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.Predicate, \ 10414ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredNegate, \ 10424ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleX, \ 10434ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleY, \ 10444ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleZ, \ 10454ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca dst.PredSwizzleW, \ 10464ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 1, \ 10474ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca 5); \ 1048bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_dst( ureg, dst ); \ 1049bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_src( ureg, src0 ); \ 1050bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_src( ureg, src1 ); \ 1051bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_src( ureg, src2 ); \ 1052bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_src( ureg, src3 ); \ 1053bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin ureg_emit_src( ureg, src4 ); \ 10544ade77f625cf3b29dabb6d7c151b7ab649def0d5José Fonseca ureg_fixup_insn_size( ureg, insn.insn_token ); \ 1055bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin} 1056bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin 1057f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger#define OP15_SAMPLE( op ) \ 1058a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void ureg_##op( struct ureg_program *ureg, \ 1059f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_dst dst, \ 1060f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src0, \ 1061f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src1, \ 1062f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src2, \ 1063f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src3, \ 1064f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_src src4 ) \ 1065f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger{ \ 1066f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger unsigned opcode = TGSI_OPCODE_##op; \ 1067f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger unsigned target = TGSI_TEXTURE_UNKNOWN; \ 1068f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger struct ureg_emit_insn_result insn; \ 106969049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca if (ureg_dst_is_empty(dst)) \ 107069049555af0b0a8fe6005cfa5766f15fc91403a0José Fonseca return; \ 1071f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger insn = ureg_emit_insn(ureg, \ 1072f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger opcode, \ 1073f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.Saturate, \ 1074f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.Predicate, \ 1075f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredNegate, \ 1076f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleX, \ 1077f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleY, \ 1078f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleZ, \ 1079f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger dst.PredSwizzleW, \ 1080f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 1, \ 1081f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger 5); \ 1082f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_texture( ureg, insn.extended_token, target, 0 ); \ 1083f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_dst( ureg, dst ); \ 1084f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src0 ); \ 1085f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src1 ); \ 1086f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src2 ); \ 1087f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src3 ); \ 1088f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_emit_src( ureg, src4 ); \ 1089f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger ureg_fixup_insn_size( ureg, insn.insn_token ); \ 1090f1ab67c13ab97f19c08d99c6ba101edc7d7b80e6Roland Scheidegger} 1091bdbe77f9c6f06cfaa155f27c2ade3c523d7fbea7Zack Rusin 10928a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell/* Use a template include to generate a correctly-typed ureg_OP() 10938a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * function for each TGSI opcode: 10948a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell */ 10958a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#include "tgsi_opcode_tmp.h" 10968a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 10978a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 10988a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell/*********************************************************************** 10998a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell * Inline helpers for manipulating register structs: 11008a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell */ 1101a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 11028a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_negate( struct ureg_src reg ) 11038a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 1104848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(reg.File != TGSI_FILE_NULL); 11058a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell reg.Negate ^= 1; 11068a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return reg; 11078a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 11088a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1109a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 11108a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_abs( struct ureg_src reg ) 11118a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 1112848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(reg.File != TGSI_FILE_NULL); 11138a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell reg.Absolute = 1; 11148a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell reg.Negate = 0; 11158a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return reg; 11168a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 11178a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1118a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 11198a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_swizzle( struct ureg_src reg, 11208a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell int x, int y, int z, int w ) 11218a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 11228a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned swz = ( (reg.SwizzleX << 0) | 11238a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell (reg.SwizzleY << 2) | 11248a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell (reg.SwizzleZ << 4) | 11258a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell (reg.SwizzleW << 6)); 11268a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1127848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(reg.File != TGSI_FILE_NULL); 1128848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(x < 4); 1129848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(y < 4); 1130848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(z < 4); 1131848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(w < 4); 1132848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 11338a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell reg.SwizzleX = (swz >> (x*2)) & 0x3; 11348a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell reg.SwizzleY = (swz >> (y*2)) & 0x3; 11358a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell reg.SwizzleZ = (swz >> (z*2)) & 0x3; 11368a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell reg.SwizzleW = (swz >> (w*2)) & 0x3; 11378a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return reg; 11388a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 11398a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1140a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 11418a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_scalar( struct ureg_src reg, int x ) 11428a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 11438a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return ureg_swizzle(reg, x, x, x, x); 11448a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 11458a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1146a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 11478a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_writemask( struct ureg_dst reg, 11488a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell unsigned writemask ) 11498a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 1150848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(reg.File != TGSI_FILE_NULL); 11518a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell reg.WriteMask &= writemask; 11528a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return reg; 11538a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 11548a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1155a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 11568a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwellureg_saturate( struct ureg_dst reg ) 11578a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 1158848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(reg.File != TGSI_FILE_NULL); 11598a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell reg.Saturate = 1; 11608a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return reg; 11618a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 11628a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1163a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 1164c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krolureg_predicate(struct ureg_dst reg, 1165c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol boolean negate, 1166c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol unsigned swizzle_x, 1167c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol unsigned swizzle_y, 1168c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol unsigned swizzle_z, 1169c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol unsigned swizzle_w) 1170962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krol{ 1171962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krol assert(reg.File != TGSI_FILE_NULL); 1172962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krol reg.Predicate = 1; 1173c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol reg.PredNegate = negate; 1174c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol reg.PredSwizzleX = swizzle_x; 1175c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol reg.PredSwizzleY = swizzle_y; 1176c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol reg.PredSwizzleZ = swizzle_z; 1177c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol reg.PredSwizzleW = swizzle_w; 1178962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krol return reg; 1179962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krol} 1180962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krol 1181a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 1182848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_dst_indirect( struct ureg_dst reg, struct ureg_src addr ) 1183848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell{ 1184848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(reg.File != TGSI_FILE_NULL); 11858490d21cbe9cce4ceb5c1908b42672f5160fd013Zack Rusin assert(addr.File == TGSI_FILE_ADDRESS || addr.File == TGSI_FILE_TEMPORARY); 1186848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell reg.Indirect = 1; 11878490d21cbe9cce4ceb5c1908b42672f5160fd013Zack Rusin reg.IndirectFile = addr.File; 1188848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell reg.IndirectIndex = addr.Index; 1189848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell reg.IndirectSwizzle = addr.SwizzleX; 1190848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell return reg; 1191848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell} 1192848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 1193a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 1194848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_src_indirect( struct ureg_src reg, struct ureg_src addr ) 1195848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell{ 1196848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell assert(reg.File != TGSI_FILE_NULL); 1197463351ea6c953c3db7f135ba97160a212562daefMichal Krol assert(addr.File == TGSI_FILE_ADDRESS || addr.File == TGSI_FILE_TEMPORARY); 1198848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell reg.Indirect = 1; 1199463351ea6c953c3db7f135ba97160a212562daefMichal Krol reg.IndirectFile = addr.File; 1200848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell reg.IndirectIndex = addr.Index; 1201848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell reg.IndirectSwizzle = addr.SwizzleX; 1202848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell return reg; 1203848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell} 1204848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 1205a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 1206dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkinureg_dst_dimension( struct ureg_dst reg, int index ) 1207dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin{ 1208dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin assert(reg.File != TGSI_FILE_NULL); 1209dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin reg.Dimension = 1; 1210dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin reg.DimIndirect = 0; 1211dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin reg.DimensionIndex = index; 1212dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin return reg; 1213dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin} 1214dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin 1215a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 1216181adca5d6f03390dcfed567be6dfd9e14eb94a7Michal Krolureg_src_dimension( struct ureg_src reg, int index ) 1217181adca5d6f03390dcfed567be6dfd9e14eb94a7Michal Krol{ 1218181adca5d6f03390dcfed567be6dfd9e14eb94a7Michal Krol assert(reg.File != TGSI_FILE_NULL); 1219181adca5d6f03390dcfed567be6dfd9e14eb94a7Michal Krol reg.Dimension = 1; 122023969670387bc0bb7d0761936905e5eb4df963dcZack Rusin reg.DimIndirect = 0; 122123969670387bc0bb7d0761936905e5eb4df963dcZack Rusin reg.DimensionIndex = index; 122223969670387bc0bb7d0761936905e5eb4df963dcZack Rusin return reg; 122323969670387bc0bb7d0761936905e5eb4df963dcZack Rusin} 122423969670387bc0bb7d0761936905e5eb4df963dcZack Rusin 1225a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 1226dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkinureg_dst_dimension_indirect( struct ureg_dst reg, struct ureg_src addr, 1227dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin int index ) 1228dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin{ 1229dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin assert(reg.File != TGSI_FILE_NULL); 1230dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin reg.Dimension = 1; 1231dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin reg.DimIndirect = 1; 1232dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin reg.DimensionIndex = index; 1233dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin reg.DimIndFile = addr.File; 1234dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin reg.DimIndIndex = addr.Index; 1235dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin reg.DimIndSwizzle = addr.SwizzleX; 1236dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin return reg; 1237dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin} 123823969670387bc0bb7d0761936905e5eb4df963dcZack Rusin 1239a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 124023969670387bc0bb7d0761936905e5eb4df963dcZack Rusinureg_src_dimension_indirect( struct ureg_src reg, struct ureg_src addr, 124123969670387bc0bb7d0761936905e5eb4df963dcZack Rusin int index ) 124223969670387bc0bb7d0761936905e5eb4df963dcZack Rusin{ 124323969670387bc0bb7d0761936905e5eb4df963dcZack Rusin assert(reg.File != TGSI_FILE_NULL); 124423969670387bc0bb7d0761936905e5eb4df963dcZack Rusin reg.Dimension = 1; 124523969670387bc0bb7d0761936905e5eb4df963dcZack Rusin reg.DimIndirect = 1; 1246181adca5d6f03390dcfed567be6dfd9e14eb94a7Michal Krol reg.DimensionIndex = index; 124723969670387bc0bb7d0761936905e5eb4df963dcZack Rusin reg.DimIndFile = addr.File; 124823969670387bc0bb7d0761936905e5eb4df963dcZack Rusin reg.DimIndIndex = addr.Index; 124923969670387bc0bb7d0761936905e5eb4df963dcZack Rusin reg.DimIndSwizzle = addr.SwizzleX; 1250181adca5d6f03390dcfed567be6dfd9e14eb94a7Michal Krol return reg; 1251181adca5d6f03390dcfed567be6dfd9e14eb94a7Michal Krol} 1252181adca5d6f03390dcfed567be6dfd9e14eb94a7Michal Krol 1253a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 1254918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšákureg_src_array_offset(struct ureg_src reg, int offset) 1255918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák{ 1256918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák reg.Index += offset; 1257918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák return reg; 1258918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák} 1259918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák 1260a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 1261506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian Königureg_dst_array_offset( struct ureg_dst reg, int offset ) 1262506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König{ 1263506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König reg.Index += offset; 1264506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König return reg; 1265506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König} 1266506d40027566fb5ad0718f3f20e42cb8fbc1e742Christian König 1267a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 1268a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšákureg_dst_array_register(unsigned file, 1269a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned index, 1270a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned array_id) 1271f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt{ 1272f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt struct ureg_dst dst; 1273f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt 1274f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.File = file; 1275f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.WriteMask = TGSI_WRITEMASK_XYZW; 1276f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.Indirect = 0; 1277f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.IndirectFile = TGSI_FILE_NULL; 1278f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.IndirectIndex = 0; 1279f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.IndirectSwizzle = 0; 1280f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.Saturate = 0; 1281f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.Predicate = 0; 1282f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.PredNegate = 0; 1283f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.PredSwizzleX = TGSI_SWIZZLE_X; 1284f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.PredSwizzleY = TGSI_SWIZZLE_Y; 1285f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.PredSwizzleZ = TGSI_SWIZZLE_Z; 1286f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.PredSwizzleW = TGSI_SWIZZLE_W; 1287f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt dst.Index = index; 1288dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.Dimension = 0; 1289dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimensionIndex = 0; 1290dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndirect = 0; 1291dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndFile = TGSI_FILE_NULL; 1292dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndIndex = 0; 1293dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndSwizzle = 0; 1294a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák dst.ArrayID = array_id; 1295f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt 1296f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt return dst; 1297f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt} 1298f3dbf3689a9d36d6a290e9311560376cadc14141Eric Anholt 1299a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 1300a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšákureg_dst_register(unsigned file, 1301a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák unsigned index) 1302a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák{ 1303a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák return ureg_dst_array_register(file, index, 0); 1304a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák} 1305a015b3952f568ad3da1ddfe42ff7ce6568f52780Marek Olšák 1306a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 1307b56d2ba7b2e685e8c551788577b382480e77025aKeith Whitwellureg_dst( struct ureg_src src ) 13088a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 13098a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_dst dst; 13108a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 13118490d21cbe9cce4ceb5c1908b42672f5160fd013Zack Rusin assert(!src.Indirect || 13128490d21cbe9cce4ceb5c1908b42672f5160fd013Zack Rusin (src.IndirectFile == TGSI_FILE_ADDRESS || 13138490d21cbe9cce4ceb5c1908b42672f5160fd013Zack Rusin src.IndirectFile == TGSI_FILE_TEMPORARY)); 1314463351ea6c953c3db7f135ba97160a212562daefMichal Krol 13158a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell dst.File = src.File; 13168a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell dst.WriteMask = TGSI_WRITEMASK_XYZW; 13178490d21cbe9cce4ceb5c1908b42672f5160fd013Zack Rusin dst.IndirectFile = src.IndirectFile; 13188a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell dst.Indirect = src.Indirect; 1319848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell dst.IndirectIndex = src.IndirectIndex; 1320848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell dst.IndirectSwizzle = src.IndirectSwizzle; 13218a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell dst.Saturate = 0; 1322962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krol dst.Predicate = 0; 1323c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol dst.PredNegate = 0; 1324c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol dst.PredSwizzleX = TGSI_SWIZZLE_X; 1325c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol dst.PredSwizzleY = TGSI_SWIZZLE_Y; 1326c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol dst.PredSwizzleZ = TGSI_SWIZZLE_Z; 1327c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol dst.PredSwizzleW = TGSI_SWIZZLE_W; 13288a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell dst.Index = src.Index; 1329dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.Dimension = src.Dimension; 1330dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimensionIndex = src.DimensionIndex; 1331dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndirect = src.DimIndirect; 1332dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndFile = src.DimIndFile; 1333dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndIndex = src.DimIndIndex; 1334dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndSwizzle = src.DimIndSwizzle; 133521190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König dst.ArrayID = src.ArrayID; 13368a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 13378a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return dst; 13388a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 13398a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1340a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 1341918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšákureg_src_array_register(unsigned file, 1342918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák unsigned index, 1343918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák unsigned array_id) 13444367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol{ 13454367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol struct ureg_src src; 13464367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 13474367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.File = file; 13484367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.SwizzleX = TGSI_SWIZZLE_X; 13494367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.SwizzleY = TGSI_SWIZZLE_Y; 13504367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.SwizzleZ = TGSI_SWIZZLE_Z; 13514367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.SwizzleW = TGSI_SWIZZLE_W; 13524367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.Indirect = 0; 13534367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.IndirectFile = TGSI_FILE_NULL; 13544367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.IndirectIndex = 0; 13554367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.IndirectSwizzle = 0; 13564367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.Absolute = 0; 13574367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.Index = index; 13584367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.Negate = 0; 13594367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.Dimension = 0; 13604367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol src.DimensionIndex = 0; 136123969670387bc0bb7d0761936905e5eb4df963dcZack Rusin src.DimIndirect = 0; 136223969670387bc0bb7d0761936905e5eb4df963dcZack Rusin src.DimIndFile = TGSI_FILE_NULL; 136323969670387bc0bb7d0761936905e5eb4df963dcZack Rusin src.DimIndIndex = 0; 136423969670387bc0bb7d0761936905e5eb4df963dcZack Rusin src.DimIndSwizzle = 0; 1365918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák src.ArrayID = array_id; 13664367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 13674367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol return src; 13684367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol} 13694367de152cc5bd7240d75a33e75c1b1671b5cc16Michal Krol 1370a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 1371918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšákureg_src_register(unsigned file, 1372918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák unsigned index) 1373918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák{ 1374918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák return ureg_src_array_register(file, index, 0); 1375918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák} 1376918ca4031f670066f054cdebcfe68ad75c963ac6Marek Olšák 1377a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 1378b56d2ba7b2e685e8c551788577b382480e77025aKeith Whitwellureg_src( struct ureg_dst dst ) 13798a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell{ 13808a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell struct ureg_src src; 13818a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 13828a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell src.File = dst.File; 13838a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell src.SwizzleX = TGSI_SWIZZLE_X; 13848a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell src.SwizzleY = TGSI_SWIZZLE_Y; 13858a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell src.SwizzleZ = TGSI_SWIZZLE_Z; 13868a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell src.SwizzleW = TGSI_SWIZZLE_W; 13878a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell src.Indirect = dst.Indirect; 13888490d21cbe9cce4ceb5c1908b42672f5160fd013Zack Rusin src.IndirectFile = dst.IndirectFile; 1389848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.IndirectIndex = dst.IndirectIndex; 1390848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.IndirectSwizzle = dst.IndirectSwizzle; 13918a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell src.Absolute = 0; 1392b56d2ba7b2e685e8c551788577b382480e77025aKeith Whitwell src.Index = dst.Index; 13938a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell src.Negate = 0; 1394dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin src.Dimension = dst.Dimension; 1395dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin src.DimensionIndex = dst.DimensionIndex; 1396dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin src.DimIndirect = dst.DimIndirect; 1397dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin src.DimIndFile = dst.DimIndFile; 1398dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin src.DimIndIndex = dst.DimIndIndex; 1399dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin src.DimIndSwizzle = dst.DimIndSwizzle; 140021190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König src.ArrayID = dst.ArrayID; 14018a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 14028a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell return src; 14038a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell} 14048a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 14058a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 14068a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell 1407a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_dst 1408848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_dst_undef( void ) 1409848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell{ 1410848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell struct ureg_dst dst; 1411848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 1412848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell dst.File = TGSI_FILE_NULL; 1413848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell dst.WriteMask = 0; 1414848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell dst.Indirect = 0; 14158490d21cbe9cce4ceb5c1908b42672f5160fd013Zack Rusin dst.IndirectFile = TGSI_FILE_NULL; 1416848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell dst.IndirectIndex = 0; 1417848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell dst.IndirectSwizzle = 0; 1418848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell dst.Saturate = 0; 1419962ece954068646f8e2c0e9ea81395ab7eaf5ee8Michal Krol dst.Predicate = 0; 1420c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol dst.PredNegate = 0; 1421c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol dst.PredSwizzleX = TGSI_SWIZZLE_X; 1422c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol dst.PredSwizzleY = TGSI_SWIZZLE_Y; 1423c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol dst.PredSwizzleZ = TGSI_SWIZZLE_Z; 1424c379fbbe244bf6778c5bd66c1f2118f83b08f90dMichal Krol dst.PredSwizzleW = TGSI_SWIZZLE_W; 1425848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell dst.Index = 0; 1426dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.Dimension = 0; 1427dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimensionIndex = 0; 1428dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndirect = 0; 1429dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndFile = TGSI_FILE_NULL; 1430dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndIndex = 0; 1431dfc3bced2ceebd1e3abacd07acd83f932b45c639Ilia Mirkin dst.DimIndSwizzle = 0; 143221190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König dst.ArrayID = 0; 1433848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 1434848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell return dst; 1435848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell} 1436848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 1437a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline struct ureg_src 1438848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_src_undef( void ) 1439848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell{ 1440848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell struct ureg_src src; 1441848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 1442848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.File = TGSI_FILE_NULL; 1443848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.SwizzleX = 0; 1444848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.SwizzleY = 0; 1445848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.SwizzleZ = 0; 1446848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.SwizzleW = 0; 1447848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.Indirect = 0; 1448463351ea6c953c3db7f135ba97160a212562daefMichal Krol src.IndirectFile = TGSI_FILE_NULL; 1449848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.IndirectIndex = 0; 1450848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.IndirectSwizzle = 0; 1451848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.Absolute = 0; 1452848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.Index = 0; 1453848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell src.Negate = 0; 1454181adca5d6f03390dcfed567be6dfd9e14eb94a7Michal Krol src.Dimension = 0; 1455181adca5d6f03390dcfed567be6dfd9e14eb94a7Michal Krol src.DimensionIndex = 0; 145623969670387bc0bb7d0761936905e5eb4df963dcZack Rusin src.DimIndirect = 0; 145723969670387bc0bb7d0761936905e5eb4df963dcZack Rusin src.DimIndFile = TGSI_FILE_NULL; 145823969670387bc0bb7d0761936905e5eb4df963dcZack Rusin src.DimIndIndex = 0; 145923969670387bc0bb7d0761936905e5eb4df963dcZack Rusin src.DimIndSwizzle = 0; 146021190fbd56ec2f12dc5a1bf1d9fc32d507e8f0a3Christian König src.ArrayID = 0; 146123969670387bc0bb7d0761936905e5eb4df963dcZack Rusin 1462848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell return src; 1463848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell} 1464848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 1465a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline boolean 1466848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_src_is_undef( struct ureg_src src ) 1467848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell{ 1468848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell return src.File == TGSI_FILE_NULL; 1469848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell} 1470848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 1471a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline boolean 1472848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwellureg_dst_is_undef( struct ureg_dst dst ) 1473848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell{ 1474848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell return dst.File == TGSI_FILE_NULL; 1475848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell} 1476848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 1477848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 1478848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell#ifdef __cplusplus 1479848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell} 1480848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell#endif 1481848ab8be8c34b00b2afe6120882f8c29f047ced5Keith Whitwell 14828a7d1e7b7681a4f0be9cee9e62477317dcd09cafKeith Whitwell#endif 1483