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